<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://pkisensee.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fpkisensee.spaces.live.com%2fblog%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>LightSleeper: Blog</title><description /><link>http://pkisensee.spaces.live.com/blog</link><language>en-US</language><pubDate>Fri, 05 Sep 2008 06:41:01 GMT</pubDate><lastBuildDate>Fri, 05 Sep 2008 06:41:01 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://pkisensee.spaces.live.com/feed.rss</cf:parentRSS><live:type>blog</live:type><live:identity><live:id>4360689961947836087</live:id><live:alias>pkisensee</live:alias></live:identity><image><title>LightSleeper: Blog</title><url>http://tkfiles.storage.live.com/y1pRtAozHJNuLUsRKPU-nGPd9TAQDsA8ck0xXVomhJlP9UMInfbJYF5Sw</url><link>http://pkisensee.spaces.live.com/blog</link></image><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Here Be Dragons</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!283.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;At Gamefest in July I gave a talk entitled &amp;quot;Here Be Dragons: C++ Undefined Behavior.&amp;quot; As expected, the presentation drew many raised eyebrows and some strong reactions, which was exactly the point. Undefined behavior in C++ is bad news, and should be avoided at all costs. However, it's surprising how many instances of undefined behavior can crop up in average C++ code. You can download the PowerPoint presentation and the audio transcript &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A436B63B-8EB4-4914-8041-B914B6E0992C&amp;amp;displaylang=en"&gt;here&lt;/a&gt;, and listen to it at your leisure.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;In fact, you can download most of the presentations given at Gamefest this year. The full list is available at &lt;a href="http://xnagamefest.com/presentations.htm"&gt;http://xnagamefest.com/presentations.htm&lt;/a&gt;. Enjoy!&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Here+Be+Dragons&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!283.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!283.entry</guid><pubDate>Tue, 02 Sep 2008 16:34:15 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!283/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!283.entry#comment</wfw:comment><dcterms:modified>2008-09-02T16:34:15Z</dcterms:modified></item><item><title>C++0x: The Dawning of a New Standard</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!281.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;The &lt;a href="http://www.devx.com/SpecialReports/Door/38865"&gt;DevX&lt;/a&gt; site has some great articles about the impending update to the C++ Standard, likely to issue in draft form later this year. From a game developer standpoint, the feature that is most exciting is rvalue references, which has the promise to change what today are copy operations into &amp;quot;perfect forwarding&amp;quot; operations. This will drastically improve the speed of STL containers, for instance. You can read what &lt;a href="http://www.research.att.com/~bs/homepage.html"&gt;Bjarne&lt;/a&gt; has to say about about rvalue references &lt;a href="http://www.devx.com/SpecialReports/Article/38813/0/page/3"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+C%2b%2b0x%3a+The+Dawning+of+a+New+Standard&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!281.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!281.entry</guid><pubDate>Thu, 28 Aug 2008 17:33:12 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!281/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!281.entry#comment</wfw:comment><dcterms:modified>2008-08-28T17:33:12Z</dcterms:modified></item><item><title>Gamefest 2008 Preview</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!270.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.xnagamefest.com/"&gt;Gamefest&lt;/a&gt; 2008 (Seattle edition) is only a few days away: July 22-23. Gamefest comes to London on August 6th, and to Tokyo on September 4th.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Expect some exciting announcements from the keynote on Tuesday morning, July 22nd.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Some new/enhanced things this year:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;The conference has expanded from one to two floors at the Seattle Convention Center.
&lt;li&gt;Many Microsoft game technology teams will have booths at the expo; this is a unique opportunity to meet directly with the folks creating technology you rely upon.
&lt;li&gt;There are some &amp;quot;virtual&amp;quot; tracks this year, collections of talks that span the normal tracks. For instance, there's a virtual track for some of the exciting &lt;a href="http://majornelson.com/archive/2008/07/14/some-of-the-features-in-the-new-xbox-experience-8-person-chat-vga-plus-more.aspx"&gt;new features&lt;/a&gt; that we announced at E3.&lt;/ul&gt;
&lt;p&gt;Hope to see you there!&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Gamefest+2008+Preview&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!270.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!270.entry</guid><pubDate>Thu, 17 Jul 2008 18:41:56 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!270/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!270.entry#comment</wfw:comment><dcterms:modified>2008-07-17T18:41:56Z</dcterms:modified></item><item><title>My Favorite C++ Feature</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!268.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;What's your favorite C++ feature? There are many to choose from. Encapsulation and polymorphism. Library features like iterators and algorithms. Templates and generic programming.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;My favorite feature: destructors.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Destructors and C++ go together like peanut butter and jelly. I do my best work in destructors. So does much of the standard C++ library. Think about it for a moment. Our friend stl::vector would be a very poor container without a destructor. And tr1::shared_ptr would not be much use at all.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;When I review code, I often find that the addition of a class or two with the right destructors can turn unreadable code into sublime code.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Here's food for thought: the proper use of destructors and owned pointers (using shared_ptr or something similar) can eliminate resource leaks completely. A worthy goal indeed.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+My+Favorite+C%2b%2b+Feature&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!268.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!268.entry</guid><pubDate>Thu, 10 Jul 2008 23:41:08 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!268/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!268.entry#comment</wfw:comment><dcterms:modified>2008-07-10T23:41:08Z</dcterms:modified></item><item><title>Fine Gems</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!263.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;An exciting new package arrived on my doorstep this week: a copy of &lt;a href="http://www.amazon.com/gp/redirect.html%3FASIN=1584505710%26tag=msnspaces04-20%26lcode=sp1%26cID=2025%26ccmID=165953%26location=/Best-Game-Programming-Gems-DeLoura/dp/1584505710%253FSubscriptionId=1KDHEGDEXZNBKYAEECR2"&gt;Best of Game Programming Gems&lt;/a&gt;, edited by my friend &lt;a href="http://satori.org/"&gt;Mark DeLoura&lt;/a&gt;. I've contributed many gems to this series over the years, and I edited the networking and multiplayer section in Game Programming Gems 4. The new Best Of volume includes four of my gems. Mark did a good job on choosing the best ones:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Custom STL Allocators
&lt;li&gt;Utilizing Multicore Processors with OpenMP
&lt;li&gt;Secure Sockets
&lt;li&gt;Bit Packing: A Network Compression Technique&lt;/ul&gt;
&lt;div&gt;There are dozens of other great gems covering math, physics, AI, graphics, networking and audio. Check it out!&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Fine+Gems&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!263.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!263.entry</guid><pubDate>Thu, 12 Jun 2008 16:42:17 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!263/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!263.entry#comment</wfw:comment><dcterms:modified>2008-06-12T16:42:17Z</dcterms:modified></item><item><title>Const input parameters and typedefs</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!260.entry</link><description>&lt;div&gt;&lt;font face="Courier New"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;In good API design, one specifies unchangeable data that's passed by pointer as const:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;   void foo( const Stuff* pConstantStuff );&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;The compiler will guarantee that the &amp;quot;Stuff&amp;quot; pointed to by pConstantStuff is not modified by foo(). This is goodness. Microsoft APIs have a habit of using typedefs for structures, ala:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;   void foo( const STUFF* pConstantStuff );&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;In fact, some people even use typedefs for pointers to structures:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;   typedef Stuff* PSTUFF;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;And they write the API like this:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;   void foo( const PSTUFF pConstantStuff ); // Evil; this does not do what you expect!&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;That last version is not code you ever want to write! What it seems to promise is not what it actually promises. The compiler interprets it as:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;   void foo( Stuff* const pConstantStuff ); // weird but technically correct&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;This version guarantees that the &lt;em&gt;pointer itself&lt;/em&gt; cannot be changed by the function. However, the &lt;em&gt;contents&lt;/em&gt; of pConstantStuff are no longer constant. The code can change the contents and the compiler will happily oblige! There are two solutions. Solution one is to create a const version of the typedef and use it where appropriate. Here's how winnt.h does it for strings:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;   typedef char *LPSTR;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;   typedef const char* LPCSTR;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;The preferable solution is to &lt;strong&gt;avoid typedefs for pointer types&lt;/strong&gt; and &lt;strong&gt;use const directly whenever you need it&lt;/strong&gt;. Use const whenever you possibly can. In return, you get readable code that clearly expresses the intent -- and the compiler properly enforces the intent.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Const+input+parameters+and+typedefs&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!260.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!260.entry</guid><pubDate>Thu, 05 Jun 2008 17:28:52 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!260/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!260.entry#comment</wfw:comment><dcterms:modified>2008-06-05T17:28:52Z</dcterms:modified></item><item><title>BoostCon 2008</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!259.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I spent the week of May 5-9 in Aspen, Colorado attending BoostCon. &lt;a href="http://www.boostcon.com/"&gt;BoostCon&lt;/a&gt; is all about &lt;a href="http://boost.org/"&gt;Boost&lt;/a&gt;, a collection of free portable C++ source code libraries.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;This is the second year of the conference. There were about 80 attendees, including C++ luminaries, Standards Committee members, Boost library authors and Boost library power users. The reason I attended is because the conference includes discussions on hardcore C++ usage plus future language and library features. Many of the Boost libraries (there are about 80) are already in the draft of the next version of the C++ Standard, and much of the work that happens in Boost libraries leads to new language features and new library components. &lt;strong&gt;Being at BoostCon is a bit like travelling to the future of C++&lt;/strong&gt;.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;u&gt;Conference Takeaways&lt;/u&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;C++0x (the next version of the C++ Standard) takes big steps toward improving the efficiency of code -- a big win for game developers.
&lt;li&gt;C++0x has a lot of new features. Most of the new features are not language features, but new standard libraries. Most of the language features are designed for library writers.
&lt;li&gt;You can find the current working draft of C++0X (May 2008) at &lt;a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2606.pdf"&gt;http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2606.pdf&lt;/a&gt;. Lots of goodness to sink your teeth into.
&lt;li&gt;&lt;a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2500.pdf"&gt;Concepts&lt;/a&gt;, one of the most significant potential language features, is not in the draft. However, it is still being considered for inclusion.
&lt;li&gt;Borland has re-energized its &lt;a href="http://www.ddj.com/cpp/202801210"&gt;C++ effort &lt;/a&gt;and is working on a C++0x compiler.
&lt;li&gt;Meta languages continue to be a surprising mini-topic. Observed C++ meta-languages from this year included:
&lt;ul&gt;
&lt;li&gt;template metaprogramming (of course)
&lt;li&gt;boost::format language
&lt;li&gt;regex regular expression language
&lt;li&gt;boost::spirit simple grammar parser
&lt;li&gt;boost::parameter function definitions&lt;/ul&gt;&lt;/ul&gt;
&lt;p&gt;Here's one of my favorite new features of C++0x. I hate writing code like this:
&lt;blockquote dir=ltr style="margin-right:0px"&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;for( &lt;strong&gt;std::vector&amp;lt;Stuff&amp;gt;::iterator&lt;/strong&gt; i = v.begin(); i != v.end(); ++i ) // C++ today&lt;/font&gt;&lt;/blockquote&gt;
&lt;p&gt;Wouldn't it be nice if the compiler just &lt;em&gt;knew&lt;/em&gt; what i was. It has to be the return type of v.begin(), right? C++0x allows you to avoid all that crazy typing:
&lt;blockquote dir=ltr style="margin-right:0px"&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;for( &lt;strong&gt;auto&lt;/strong&gt; i = v.begin(); i != v.end(); ++i ) // C++ in the future&lt;/font&gt;&lt;/blockquote&gt;
&lt;p&gt;That gives you a tantalizing glimpse of one of the many new features we have to look forward to in C++.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+BoostCon+2008&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!259.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!259.entry</guid><pubDate>Thu, 29 May 2008 16:22:05 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!259/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!259.entry#comment</wfw:comment><dcterms:modified>2008-05-29T16:22:05Z</dcterms:modified></item><item><title>Gamefest 2008 is Coming</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!257.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Put it on your calendar: July 22-23 in Seattle. Gamefest is coming! If you've been to Gamefest in the past, you already know it's the ultimate place to get the latest and greatest information on creating games for Microsoft platforms like Xbox 360 and Windows Vista. If you work on games and you haven't been to Gamefest, you're missing something really special. I've already seen some of the proposed talk abstracts, and you can expect some amazing content from excellent speakers.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.xnagamefest.com"&gt;www.xnagamefest.com&lt;/a&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Gamefest+2008+is+Coming&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!257.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!257.entry</guid><pubDate>Thu, 01 May 2008 17:07:12 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!257/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!257.entry#comment</wfw:comment><dcterms:modified>2008-05-01T17:07:12Z</dcterms:modified></item><item><title>I Hate to Wait</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!256.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I admit to a certain fondness for first person shooters. I got hooked on Half-Life, but it was the Halo series that really put me over the edge. I particularly enjoy multiplayer fragfests. Most session-based games these days follow a model where you search for a particular session and either join an existing one or start your own. Either way, players are left waiting for the game to start when the session fills up with a certain number of players.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Players hate to wait, so it's always a good idea to reduce or eliminate wait times. The wait times for sessions can be described fairly simply:&lt;/div&gt;
&lt;blockquote dir=ltr style="margin-right:0px"&gt;
&lt;div&gt;WaitTime = GameModes * SessionTime * Players/Session / PlayersOnline&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;Wait times rise when:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;there are many game modes (deathmatch, capture the flag, etc.)
&lt;li&gt;the average session time is long
&lt;li&gt;the average number of players per session is high
&lt;li&gt;there are fewer players in the overall pool of available players&lt;/ul&gt;
&lt;div&gt;Wait times decrease when:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;there are fewer game modes
&lt;li&gt;the average session time is short
&lt;li&gt;the average number of players per session is low
&lt;li&gt;there are many players in the overall pool of available players&lt;/ul&gt;
&lt;p&gt;Games that group players by skill (Halo 2 and Halo 3 are examples) add another factor. The more skill groups you have, the longer the wait times.
&lt;p&gt;These factors are mostly in your control as a game designer and developer. If you want to reduce wait times there are multiple knobs to tweak. If you add a new multiplayer game mode, be aware that it will impact session wait times. Keeping sessions short is a great way to minimize waits. There are other ways, too. For instance, allow players to do something while they're waiting: chat, practice their skills, or watch something interesting. Of course, the most important thing you can do is ensure your game is great, because that will improve the overall pool of available players :).
&lt;p&gt; &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+I+Hate+to+Wait&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!256.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!256.entry</guid><pubDate>Fri, 18 Apr 2008 20:07:18 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!256/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!256.entry#comment</wfw:comment><dcterms:modified>2008-04-18T20:07:18Z</dcterms:modified></item><item><title>When It Rains</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!255.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;One of the finest engineers I know, &lt;a href="http://www.cygnus-software.com/papers/index.html"&gt;Bruce Dawson&lt;/a&gt;, pointed out a fatal flaw in my GDC 2008 string code. Even more devastating, it's not a subtle flaw. This one was staring me right in the face and I didn't even see it. Recall the code:&lt;/div&gt;
&lt;blockquote dir=ltr style="margin-right:0px"&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;char* s = &amp;quot;abcdef&amp;quot;;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;char u[] = &amp;quot;def&amp;quot;;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;u[0] = 'x'; // danger, NOT!&lt;/font&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;According to the C++ Standard, string literals can overlap in memory, so the &amp;quot;def&amp;quot; string could overlap with the &amp;quot;abcdef&amp;quot; portion. That much is still true. However, the &amp;quot;u&amp;quot; string is a &lt;strong&gt;&lt;em&gt;copy&lt;/em&gt;&lt;/strong&gt; of &amp;quot;def&amp;quot;, not a pointer into it. When you declare a string with angle brackets, you have a character array, not a string pointer. You can modify the &amp;quot;u&amp;quot; string to your heart's content and it will never ever modify &amp;quot;s&amp;quot;. That's because &amp;quot;u&amp;quot; is a character array, not a pointer.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Here's a revision:&lt;/div&gt;
&lt;blockquote dir=ltr style="margin-right:0px"&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;char* sz = &amp;quot;abcdef&amp;quot;;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;char* uz = &amp;quot;def&amp;quot;;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;char vz[] = &amp;quot;ef&amp;quot;;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;assert( (uz &amp;lt; sz) &amp;amp;&amp;amp; (uz &amp;gt; sz+6) ); // invalid assumption&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;sz[n] = 'x'; // undefined behavior&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;uz[n] = 'x'; // undefined behavior&lt;/font&gt;&lt;/div&gt;vz]n] = 'x'; // perfectly reasonable, as long as n &amp;lt; 2&lt;/font&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;div dir=ltr&gt;Now we have two string pointers that point at literals. The &amp;quot;def&amp;quot; portion could overlap with the end of the &amp;quot;abcdef&amp;quot; portion in memory, so it's not safe to assume that the pointer uz does not point somewhere within the sz range. Modifying the literal is still not allowed, even though we've declared non-const pointers (2.13.4/2 says &amp;quot;the effect of attempting to modify a string literal is undefined&amp;quot;). Finally, the character array vz contains a copy of &amp;quot;ef&amp;quot; and we can modify vz safely.&lt;/div&gt;
&lt;div dir=ltr&gt; &lt;/div&gt;
&lt;div dir=ltr&gt;As I said when I was giving the talk, C++ is a complicated language. It's up to all of to continue educating each other about the nuances. Sometimes explaining your bonehead mistakes is the best way to continue the education process. &lt;img title=Embarrassed style="vertical-align:middle" alt=Embarrassed src="http://shared.live.com/HjKMzTS-xzcms40!CabizA/emoticons/smile_embaressed.gif"&gt;&lt;/div&gt;
&lt;div dir=ltr&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+When+It+Rains&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!255.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!255.entry</guid><pubDate>Sat, 29 Mar 2008 00:23:01 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!255/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!255.entry#comment</wfw:comment><dcterms:modified>2008-03-29T00:23:01Z</dcterms:modified></item><item><title>GDC 2008 Slides</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!254.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I've had a lot of requests for my GDC presentation from last Thursday. Although I've made the slides available to the good people at CMP for posting on gdconf.com, they aren't available yet. You can find a copy on my personal website by pointing your browser at &lt;a href="http://www.tantalon.com/pete.htm"&gt;http://www.tantalon.com/pete.htm&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;A couple people mentioned an error in my talk. I showed some code like this:&lt;/div&gt;
&lt;blockquote dir=ltr style="margin-right:0px"&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;char* s = &amp;quot;abcdef&amp;quot;;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;char u[] = &amp;quot;bcd&amp;quot;;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;u[0] = 'x'; // danger&lt;/font&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;According to the C++ Standard the string &amp;quot;bcd&amp;quot; could overlap with the string &amp;quot;abcdef&amp;quot;. That's incorrect, because &amp;quot;bcd&amp;quot; must end with the null character. I've adjusted my slides to show something accurate:&lt;/div&gt;
&lt;blockquote dir=ltr style="margin-right:0px"&gt;
&lt;div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;char* s = &amp;quot;abcdef&amp;quot;;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;char u[] = &amp;quot;def&amp;quot;;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;u[0] = 'x'; // danger&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;p style="margin-top:10.08pt;margin-bottom:0pt;margin-left:0.49in;vertical-align:baseline;direction:ltr;text-indent:-0.49in;line-height:90%;unicode-bidi:embed;text-align:left;language:en-US;punctuation-wrap:simple"&gt;Now &amp;quot;def&amp;quot; could indeed overlap with &amp;quot;abcdef&amp;quot; and changing &amp;quot;def&amp;quot; could change the &amp;quot;abcdef&amp;quot; string. Big takeaway: don't modify string literals.
&lt;p style="margin-top:10.08pt;margin-bottom:0pt;margin-left:0.49in;vertical-align:baseline;direction:ltr;text-indent:-0.49in;line-height:90%;unicode-bidi:embed;text-align:left;language:en-US;punctuation-wrap:simple"&gt; &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+GDC+2008+Slides&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!254.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!254.entry</guid><pubDate>Wed, 27 Feb 2008 19:06:39 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!254/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!254.entry#comment</wfw:comment><dcterms:modified>2008-02-27T19:06:39Z</dcterms:modified></item><item><title>GDC 2008 Recommendations</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!251.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.gdconf.com/"&gt;GDC&lt;/a&gt; is next week. It's an event I always look forward to: a chance to see old friends that I've worked with over the years, a chance to hear what's top of mind for game developers, an opportunity to see new technology and hear from some great speakers. Here's a few of the talks that I'll be trying to see:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Ray Kurzweil's &lt;a href="https://www.cmpevents.com/GD08/a.asp?option=C&amp;amp;V=11&amp;amp;SessID=7036"&gt;keynote&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="https://www.cmpevents.com/GD08/a.asp?option=C&amp;amp;V=11&amp;amp;SessID=6173"&gt;Design Reboot&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="https://www.cmpevents.com/GD08/a.asp?option=C&amp;amp;V=11&amp;amp;SessID=6902"&gt;Standing the Test of Time&lt;/a&gt; (Sid Meier!)&lt;/div&gt;
&lt;div&gt;&lt;a href="https://www.cmpevents.com/GD08/a.asp?option=C&amp;amp;V=11&amp;amp;SessID=7000"&gt;Structure vs. Style&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;Any of the Halo3 presentations, particularly &lt;a href="https://www.cmpevents.com/GD08/a.asp?option=C&amp;amp;V=11&amp;amp;SessID=6177"&gt;Matchmaking in Halo 3&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="https://www.cmpevents.com/GD08/a.asp?option=C&amp;amp;V=11&amp;amp;SessID=6468"&gt;Dynamic Performance Profiling of C++ Code&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="https://www.cmpevents.com/GD08/a.asp?option=C&amp;amp;V=11&amp;amp;SessID=6918"&gt;The Art and Technology Behind BioShock's Special FX&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="https://www.cmpevents.com/GD08/a.asp?option=C&amp;amp;V=11&amp;amp;SessID=6996"&gt;Taming the Mob: Creating believable crowds in Assassin's Creed&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Expect some tasty announcements at the &lt;a href="https://www.cmpevents.com/GD08/a.asp?option=C&amp;amp;V=11&amp;amp;SessID=7035"&gt;Microsoft XNA keynote&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I also have a feeling this talk will be pretty cool -- if a tad scary: &lt;a href="https://www.cmpevents.com/GD08/a.asp?option=C&amp;amp;V=11&amp;amp;SessID=6517"&gt;Thrills and Chills: Undefined Behavior in C++&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Hope to see you there!&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+GDC+2008+Recommendations&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!251.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!251.entry</guid><pubDate>Fri, 15 Feb 2008 17:14:07 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!251/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!251.entry#comment</wfw:comment><dcterms:modified>2008-02-15T17:14:07Z</dcterms:modified></item><item><title>Underscores and Identifiers</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!246.entry</link><description>&lt;div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;In preparation for my upcoming GDC presentation in San Francisco, I've been reading lots of Standards documents, both C99 and C++03. Fun stuff. I was reminded of some important guidelines for C++ identifiers. Identifiers include macro names, variable names and function names. Consider the following code:&lt;/div&gt;
&lt;blockquote dir=ltr style="margin-right:0px"&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;// TreeImpl.h&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;#ifdef TreeImpl__H&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;#include &amp;lt;map&amp;gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;class _TreeImpl&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;{&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;private:&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;   Tree* _pTree;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;   // etc.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;}&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;#endif // TreeImpl__H&lt;/font&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;Looks innocuous enough. But there's bad mojo hiding here. Here's what the C++ Standard says (17.4.3.1.2): &amp;quot;Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase letter is reserved to the implementation&amp;quot; and &amp;quot;Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.&amp;quot;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;In other words, the identifiers TreeImpl__H (double underscore), _TreeImpl and _pTree (leading underscores) are hidden bombs just waiting to explode. Should some future version of &amp;lt;map&amp;gt; include the following macro:&lt;/div&gt;
&lt;blockquote dir=ltr style="margin-right:0px"&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;#define _pTree (_p-&amp;gt;_tree_item-&amp;gt;getTreePtr())&lt;/font&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;all hell will break lose. Programmers commonly look at implementation code, particularly Standard C++ header files, see the use of leading underscores and double underscores, and assume they are perfectly legitimate. Don't fall into this trap. Unless you write compilers and standard libraries, follow these rules to avoid tears:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Never use double underscores in C/C++ code.
&lt;li&gt;Never use leading underscores in C/C++ code.&lt;/ul&gt;
&lt;div&gt;Update your coding conventions appropriately.&lt;/div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Underscores+and+Identifiers&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!246.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!246.entry</guid><pubDate>Fri, 01 Feb 2008 17:08:23 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!246/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!246.entry#comment</wfw:comment><dcterms:modified>2008-02-01T17:08:23Z</dcterms:modified></item><item><title>Shared_ptr swap, and more</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!245.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;One of the benefits of working at a big technology company is the ability to attend talks presented by smart people. Yesterday I went to hear &lt;a href="http://nuwen.net/"&gt;Stephan T. Lavavej&lt;/a&gt;, aptly known within the halls of Microsoft as STL. STL works on Visual Studio C++ libraries, including the C++ Standard Template Libraries (STL). His talk was on one of my favorite TR1 topics, shared_ptr.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I've been using shared_ptr for a while, and have spent some time understanding Boost's implementation, so most of the presentation was just a refreshing review. However, some things were quite illuminating. I'll talk about two illuminations, one technical and one philosophical.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;The technical item I learned was about swapping shared_ptr. Consider a canonical swap of shared_ptr:&lt;/div&gt;
&lt;blockquote dir=ltr style="margin-right:0px"&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;shared_ptr&amp;lt;int&amp;gt; a( new int(1) ); // suppose we have two shared pointers&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;shared_ptr&amp;lt;int&amp;gt; b( new int(2) );&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;{ // now we swap them&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;   shared_ptr&amp;lt;int&amp;gt; temp = a; // refcount of int(1) ++&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;   a = b;                    // refcount of int(1) --, refcount of int(2) ++&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;   b = temp;                 // refcount of int(2) --, refcount of int(1) ++&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;}                            // refcount of int(1) --&lt;/font&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;In the course of performing the swap, reference counts are modified six times. Because shared_ptr is threadsafe, refcount operations must be performed atomically, probably using some form of interlocked operations, which adds to the expense. Additionally, most (if not all) shared_ptr implementations store their refcounts in some area internally allocated by shared_ptr, so accessing the reference counts themselves required dereferencing pointers -- six times. All we wanted to accomplish is swap two pointers, but there was a lot of needless overhead. The solution? Use shared_ptr::swap() instead:&lt;/div&gt;
&lt;blockquote dir=ltr style="margin-right:0px"&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;a.swap( b ); // at least as fast as above, and considerably faster if you have a decent TR1 implementation&lt;/font&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;In &lt;a href="http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!242.entry"&gt;VC9 TR1&lt;/a&gt;, shared_ptr::swap() does just what it needs to do and no more. The refcounts are never touched. Only the pointers are swapped. The VC9 TR1 version of free swap (e.g. swap( a, b )) is similarly optimized. Sweet.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;The philosophical item I absorbed was just why shared_ptr completes the resource management picture for C++. Consider what we have without TR1. We have destructors, a deterministic resource release mechanism. We have: scope lifetime (&amp;quot;between the braces&amp;quot;), data member lifetime and container element lifetime, all of which are deterministic. And we have dynamic resources, which do not have a deterministic lifetime, but depend on us programmers to get it right. Therein lies the fatal flaw. Avoiding dynamic resource leaks, double deletions and so forth is Really Hard. That's the problem shared_ptr solves, and it solves it extremely well. In the face of exceptions, in the face of early exit from functions, and even in the face of code that is modified over time, shared_ptr Just Works. I used to think of shared_ptrs as just a good way to copy around heavy-weight objects. Now I think of shared_ptrs as the default owner for &lt;em&gt;any&lt;/em&gt; dynamic resource.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Shared_ptr+swap%2c+and+more&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!245.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!245.entry</guid><pubDate>Thu, 17 Jan 2008 20:05:49 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!245/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!245.entry#comment</wfw:comment><dcterms:modified>2008-01-17T20:05:49Z</dcterms:modified></item><item><title>GCAP Slides</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!243.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I've had many requests for the slides that I presented at the &lt;a href="http://www.gameconnectap.com/"&gt;Game Connect: Asia Pacific &lt;/a&gt;talks in November. Ask and ye shall receive. All of my presentations were based on information given at &lt;a href="http://www.xnagamefest.com/presentations.htm"&gt;Gamefest 2007&lt;/a&gt;. Links below. Enjoy!&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong&gt;&lt;a href="http://download.microsoft.com/download/c/f/8/cf8d0552-5e8c-4501-a52e-0986a9295821/Multicore Programming Two Years Later.zip"&gt;Multicore Programming, Two Years Later&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;A technical talk on what we've learned about effective multicore programming on Xbox 360.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Effective Game Programming for Windows Vista&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;The lowdown on programming for Vista, 64-bit Windows, D3D10 and Games for Windows -- LIVE.&lt;/div&gt;
&lt;div&gt;This was a combination of five different talks from Gamefest:&lt;/div&gt;
&lt;blockquote dir=ltr style="margin-right:0px"&gt;
&lt;div&gt;&lt;a href="http://download.microsoft.com/download/2/2/e/22e373bc-4577-4cd4-b674-fbdc3f725d3a/Just Make Windows Work.zip"&gt;Just Make Windows Work&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://download.microsoft.com/download/e/3/c/e3c25fea-2b53-4174-8729-29a4ec16583b/Why Your Windows Game Won't Run In 2,147,352,576 Bytes.zip"&gt;Why Your Windows Game Won't Run in 2,147,352,576 Bytes&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://download.microsoft.com/download/a/0/4/a04deeb2-d7e2-42a5-984a-9ea5c92bfeb2/Windows to Reality - Getting the Most out of Direct3D 10 Graphics in your Games.zip"&gt;Windows to Reality: Getting the Most Out of Direct3D 10 Graphics in Your Games&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://download.microsoft.com/download/8/0/6/806e1392-9c43-46b5-83e0-15b1fbd80bbb/Are Your Games Games For Windows Ready.zip"&gt;Are Your Games &amp;quot;Games for Windows&amp;quot; Ready?&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://download.microsoft.com/download/b/f/1/bf149a6a-86f3-4fef-93b0-f37cf44e2fcf/Bringing the Best of Xbox LIVE to Windows.zip"&gt;Bringing the Best of Xbox LIVE to Windows&lt;/a&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;&lt;strong&gt;&lt;a href="http://download.microsoft.com/download/e/b/2/eb2d5bb5-21ae-406d-bf10-8311f3897b07/The 10 Things You Should Be Thinking About Your Next Game.zip"&gt;A Baker's Dozen: 13 Tools and Technologies for Your Next Game&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;The latest tech in the Xbox 360 XDK and DirectX SDK and why you should consider using them for your next project. &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+GCAP+Slides&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!243.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!243.entry</guid><pubDate>Thu, 10 Jan 2008 17:18:30 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!243/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!243.entry#comment</wfw:comment><dcterms:modified>2008-01-10T17:18:30Z</dcterms:modified></item><item><title>TR1 coming to Visual Studio</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!242.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I've blogged about TR1 &lt;a href="http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!202.entry"&gt;before&lt;/a&gt;, and &lt;a href="http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!200.entry"&gt;spoken&lt;/a&gt; about it, too. It's one of the coolest new C++ &lt;a href="http://en.wikipedia.org/wiki/Technical_Report_1"&gt;libraries&lt;/a&gt;. The &lt;a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1450.html"&gt;smart pointers &lt;/a&gt;alone are worth their weight in gold. Some good &lt;a href="http://blogs.msdn.com/somasegar/archive/2007/11/09/visual-c-libraries-update.aspx"&gt;news&lt;/a&gt; was recently announced: TR1 is coming to Visual Studio 2008. Here are some details:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;The TR1 library is expected to ship in the first quarter of 2008, with a beta sometime early in the New Year.
&lt;li&gt;The Microsoft TR1 implementation will contain everything described in the TR1 &lt;a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf"&gt;spec&lt;/a&gt; except sections 5.2 (mathematical special functions) and 8 (C compatibility).
&lt;li&gt;The Visual Studio debugger will be able to visualize TR1 types just like with the STL. Way cool.
&lt;li&gt;Mucho optimization work has gone into the implementation to ensure that Visual C++ STL and TR1 play nice. For example, containers of TR1 types will be more efficient because they understand each other's implementation details.&lt;/ul&gt;
&lt;div&gt;If you've put off looking at TR1 because it's not provided out of the box with Visual Studio, that excuse will no longer fly. Check it out!&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+TR1+coming+to+Visual+Studio&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!242.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!242.entry</guid><pubDate>Thu, 20 Dec 2007 16:57:54 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!242/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!242.entry#comment</wfw:comment><dcterms:modified>2007-12-20T16:57:54Z</dcterms:modified></item><item><title>Sixth graders: the next gen of game devs</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!240.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Last Friday I spoke with three different local sixth grade classes about making games. It's always a kick to connect with some younger gaming consumers. Here are some notes I've compiled should you ever find yourself talking to two dozen 11-year-olds about your job as a game developer:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Sixth graders haven't thought about frame rates. When asked about how often a new frame needs to be displayed in order to get the feeling of motion, the answers went as high as 1,000,000 times per second.
&lt;li&gt;Sixth graders are observant. We evaluated a game &lt;a href="http://halo3.com/images/screenshots/downloads/val_mongoose1.jpg"&gt;screenshot&lt;/a&gt; and identified &amp;quot;things that the game had to figure out&amp;quot; in order to generate the frame. The list was long: character animation, collisions, dust (particle effects), vehicles (physics), projectiles/weapon-fire, water effects, lighting, shadows, music, sound fx, and cloth. When we were done we had covered just about everything that might happen in a typical game loop. The things they didn't think about (because they're not obvious from a screenshot) were input and networking.
&lt;li&gt;Sixth graders aren't afraid to ask tough questions: why does my Xbox 360 have three red lights? when is Microsoft going to make a new console? how are you going to compete with Wii? why does game &amp;lt;X&amp;gt; always stutter or freeze?
&lt;li&gt;Sixth graders have lots of good ideas: you should make a &lt;a href="http://www.xbox.com/en-US/games/s/sceneitlightscameraaction/"&gt;trivia game that uses Xbox LIVE&lt;/a&gt;; you should make Xbox 360 smaller so I can take it to my friend's house; you should partner up with Nintendo so you can use Wiimote on Xbox 360; you should make Xbox 360 cheaper so my parents will buy me one for Christmas.&lt;/ul&gt;
&lt;p&gt;If you ever get the chance to talk with future game programmers at your local school, do it. All you need is a couple of good trailers to set the stage, some screen shots that you can discuss in detail, and a willingness to answer some pretty off-the-wall questions.
&lt;p&gt; &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Sixth+graders%3a+the+next+gen+of+game+devs&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!240.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!240.entry</guid><pubDate>Thu, 13 Dec 2007 18:30:51 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!240/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!240.entry#comment</wfw:comment><dcterms:modified>2007-12-13T18:30:51Z</dcterms:modified></item><item><title>Console Cage Match</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!234.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Not long ago somebody pointed me at a blog entry entitled &lt;a href="http://jbooth.blogspot.com/2007/10/ps3-misconceptions-and-spin.html"&gt;PS3 misconceptions and spin&lt;/a&gt;, which basically says it's hard to make games for PS3. I'm not going to comment on the content itself (nor on the inflammatory blog comments). I work on game technology at Microsoft and am inherently biased. Anyway, the article could just as well have been written about any game console. The console game development business is tough no matter what hardware you target.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;The whole thing reminded me that consoles are successful for a variety of reasons. Just because a console has great performance compared to its competitors doesn't mean it will be successful. Wii is doing just fine, thank you. And just because it's difficult to create games on a console doesn't mean the console &lt;em&gt;won't&lt;/em&gt; be successful, either. Witness PS2.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;At GDC 2007, &lt;a href="http://www.mobygames.com/developer/sheet/view/developerId,3246/"&gt;Don Daglow&lt;/a&gt; gave an illuminating &lt;a href="http://www.next-gen.biz/index.php?option=com_content&amp;amp;task=view&amp;amp;id=4912&amp;amp;Itemid=2"&gt;talk&lt;/a&gt; on what really makes game consoles successful. His key criteria to winning the console war:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Price parity (consumers feeling like they get good value for their money)
&lt;li&gt;Critical mass of good games
&lt;li&gt;Reliability
&lt;li&gt;Faith the hard core gamer&lt;/ul&gt;
&lt;div&gt;Don made sure to point out that there were many differences in the console war we're experiencing today, mostly around social gameplay (MMOs, multiplayer, voice chat, innovative controllers, casual games and so forth), and the social gameplay aspect might also factor into the &amp;quot;winner&amp;quot; as well. Notice that neither &amp;quot;ease of programming&amp;quot; or &amp;quot;hardware performance&amp;quot; were in Don's criteria list. As &lt;a href="http://en.wikipedia.org/wiki/The_Arsenio_Hall_Show"&gt;Arsenio&lt;/a&gt; liked to say, &amp;quot;Things that make you go Hmmmm....&amp;quot;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Console+Cage+Match&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!234.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!234.entry</guid><pubDate>Thu, 29 Nov 2007 23:03:03 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!234/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!234.entry#comment</wfw:comment><dcterms:modified>2007-11-29T23:03:03Z</dcterms:modified></item><item><title>Aussie Game Studio Enthusiasts</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!237.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;As part of my trip next week, I'll also be spending time at some informal enthusiast meet-ups in Sydney and Melbourne. Here are the details:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="margin:0in 0in 0pt"&gt;&lt;span lang=EN-SG style="color:#1f497d"&gt;&lt;font face=Arial size=2&gt;Sydney Event: &lt;/font&gt;&lt;a href="http://xnasydneypeteisensee.events.live.com/default.aspx"&gt;&lt;u&gt;&lt;font face=Arial color="#0000ff" size=2&gt;http://xnasydneypeteisensee.events.live.com/default.aspx&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin:0in 0in 0pt 0.5in;text-indent:-0.25in"&gt;&lt;font face=Arial&gt;&lt;font size=2&gt;&lt;span lang=EN-SG style="font-family:Symbol"&gt;&lt;span style=""&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-SG style=""&gt;Date: Nov 14&lt;sup&gt;th&lt;/sup&gt; 2007 @ 6:30PM&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style="margin:0in 0in 0pt 0.5in;text-indent:-0.25in"&gt;&lt;font face=Arial&gt;&lt;font size=2&gt;&lt;span lang=EN-SG style="font-family:Symbol"&gt;&lt;span style=""&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-SG style=""&gt;Location: Microsoft Sydney Office&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style="margin:0in 0in 0pt"&gt;&lt;span lang=EN-SG style="color:#1f497d"&gt;&lt;font face=Arial size=2&gt; &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin:0in 0in 0pt"&gt;&lt;span lang=EN-SG style="color:#1f497d"&gt;&lt;font face=Arial size=2&gt;Melbourne Event: &lt;/font&gt;&lt;a href="http://xnamelbournepeteisensee.events.live.com/default.aspx"&gt;&lt;u&gt;&lt;font face=Arial color="#0000ff" size=2&gt;http://xnamelbournepeteisensee.events.live.com/default.aspx&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin:0in 0in 0pt 0.5in;text-indent:-0.25in"&gt;&lt;font face=Arial&gt;&lt;font size=2&gt;&lt;span lang=EN-SG style="font-family:Symbol"&gt;&lt;span style=""&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-SG style=""&gt;Date: Nov 16&lt;sup&gt;th&lt;/sup&gt; 2007 @ 6:30PM&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style="margin:0in 0in 0pt 0.5in;text-indent:-0.25in"&gt;&lt;font face=Arial&gt;&lt;font size=2&gt;&lt;span lang=EN-SG style="font-family:Symbol"&gt;&lt;span style=""&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-SG style=""&gt;Location: Microsoft Melbourne Office&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style="margin:0in 0in 0pt 0.5in;text-indent:-0.25in"&gt;&lt;font face=Arial size=2&gt;&lt;span lang=EN-SG style=""&gt;&lt;/span&gt;&lt;/font&gt; &lt;/div&gt;&lt;font face=Arial&gt;&lt;span lang=EN-SG style=""&gt;
&lt;div&gt;&lt;font size=2&gt;I'll give a brief preview of what you can expect in the new version of XNA Game Studio and the XNA Framework, and be available to answer questions about your own Game Studio projects. Hope you can join me...&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=2&gt;&lt;/font&gt; &lt;/div&gt;&lt;/span&gt;&lt;/font&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Aussie+Game+Studio+Enthusiasts&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!237.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!237.entry</guid><pubDate>Wed, 07 Nov 2007 16:56:01 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!237/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!237.entry#comment</wfw:comment><dcterms:modified>2007-11-07T16:56:01Z</dcterms:modified></item><item><title>Game Connect Asia Pacific 2007</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!235.entry</link><description>&lt;div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Next week I'll be spending a week down under. I'm giving talks at the &lt;a href="http://www.gameconnectap.com/"&gt;Game Connect Asia Pacific&lt;/a&gt; conference in Melbourne, so if you're in the area, be sure to stop by!&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;u&gt;Talk list&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Multicore Programming, Two Years Later&lt;/strong&gt;: A detailed technical talk on what we've learned about effective multicore programming on Xbox 360.&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Effective Game Programming for Windows Vista&lt;/strong&gt;: The lowdown on programming for Vista, 64-bit Windows, D3D10 and Games for Windows -- LIVE.&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;A Baker's Dozen: 13 Tools and Technologies for Your Next Game&lt;/strong&gt;: The latest tech in the Xbox 360 XDK and DirectX SDK and why you should consider using them for your next project.&lt;/div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Game+Connect+Asia+Pacific+2007&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!235.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!235.entry</guid><pubDate>Tue, 06 Nov 2007 01:32:30 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!235/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!235.entry#comment</wfw:comment><dcterms:modified>2007-11-06T01:32:30Z</dcterms:modified></item><item><title>Gamefest 2007 Talks Posted</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!233.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Gamefest content is now available online: &lt;a href="http://www.xnagamefest.com"&gt;http://www.xnagamefest.com&lt;/a&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Due to some audio snafus, not all the talks include the audio recordings. Those responsible have been &lt;em&gt;soundly&lt;/em&gt; thrashed (pun intended). Enjoy!&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Gamefest+2007+Talks+Posted&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!233.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!233.entry</guid><pubDate>Tue, 16 Oct 2007 16:47:21 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!233/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!233.entry#comment</wfw:comment><dcterms:modified>2007-10-16T16:47:21Z</dcterms:modified></item><item><title>Randomness, binary numbers and floating-point arithmetic meet Mr. Benford</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!231.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Suppose you're looking for sources of random numbers. You choose numbers from a newspaper. How random will the numbers be? Answer: not very. This surprising result is called &lt;a href="http://en.wikipedia.org/wiki/Benford's_law"&gt;Benford's Law&lt;/a&gt;. This law says that real-world numbers (measurements, populations, stock prices and so forth) are distributed logarithmically. More specifically, the leading digit of a given real-world value is 1 about 30% of the time (instead of 10% of the time, as you might expect), and leading digit is 9 less than than 5% of the time (again, not the expected 10%).&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;There are many fascinating things about Benford's Law. For instance, even though the law was discovered in the late 1800s, it was only proven only 10 years ago. More interestingly, the IRS uses Benford's Law to detect fraudulent tax returns.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://blogs.msdn.com/ericlippert/default.aspx"&gt;Eric Lippert&lt;/a&gt; makes the case in his &lt;a href="http://blogs.msdn.com/ericlippert/archive/2005/01/12/benford-s-law.aspx"&gt;blog&lt;/a&gt; that Benford's Law means that binary numbers are actually the best way the do accurate floating-point math calculations on real-world numbers.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I find the intersection between mathematics and the real-world to be absolutely fascinating.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Randomness%2c+binary+numbers+and+floating-point+arithmetic+meet+Mr.+Benford&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!231.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!231.entry</guid><pubDate>Thu, 20 Sep 2007 18:54:22 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!231/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!231.entry#comment</wfw:comment><dcterms:modified>2007-09-20T18:54:22Z</dcterms:modified></item><item><title>Chickie Baby</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!229.entry</link><description>&lt;div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;There are many constants at Microsoft. Offices moves are one of my least favorite. After nearly seven years at Microsoft, I've only moved once, a badge of honor I wear proudly. I know many people who've moved &lt;em&gt;more&lt;/em&gt; than seven times in seven years. But all good things must come to an end. My team is moving -- not far, just from the second floor to the first floor of the same building. Why? Don't get me started.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;The good thing about moves is that it forces me to clean up. I hate moving anything that I don't need to. As I was going through old folders yesterday, I ran across something from my Peopleware days. &lt;a href="http://www.peopleware.com/"&gt;Peopleware&lt;/a&gt; was my first official job out of college. I was one of two programmers, so I did just about everything, from customer support to testing to managing the company network to writing lots and lots of code. During my last year there, I wrote a document describing all of our best practices. The programming team had grown to six people by then, and I was the senior programmer -- despite being only 25 years old. Here's a snippet from that document:&lt;/div&gt;
&lt;blockquote dir=ltr style="margin-right:0px"&gt;
&lt;div&gt;&lt;font size=4&gt;The Chicken&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;The rubber chicken (affectionately known as &amp;quot;Chickie Baby&amp;quot;) is the development team's light-hearted way of saying &amp;quot;you screwed up.&amp;quot; Normally, somebody on the team will voluntarily claim the chicken when they have made a mistake. However, you can also receive the chicken if another team member discovers that you made a mistake.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;The cool thing about the chicken is that you have to explain your mistake to everybody else when the chicken lands in your in-box. Mistakes become a way to share information so that other team members can avoid your specific mistake in the future. This way, you not only learn from the mistake, but everybody else on the team learns from it, too.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;The chicken is just one other way the development team helps each other avoid mistakes, which in turn leads to better products.&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;I've seen lots of takes on Chickie Baby over the years, such as a stuffed alligator, as well as an actual toilet that was given to programmers that broke the build. Whatever lighthearted form it takes, your team's Chickie Baby is a great way of sharing information, particularly between gurus and the newest members of your team. If you don't have a Chickie Baby, today's a great day to find one.&lt;/div&gt; &lt;/div&gt;&lt;div&gt;&lt;table cellspacing="0" border="0"&gt;&lt;tr height="8"&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://byfiles.storage.live.com&amp;#47;y1pFivCS-B_QbMnK_2EZSeTXNI75reU7UIOEh-PkVvYXIT3GARagwCkY5LDbRagod_t"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;3C84486A9D832EB7&amp;#33;230&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Chickie+Baby&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!229.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!229.entry</guid><pubDate>Thu, 13 Sep 2007 16:36:15 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!229/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!229.entry#comment</wfw:comment><dcterms:modified>2007-09-13T16:36:15Z</dcterms:modified></item><item><title>Unordered Associative Containers Part II</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!226.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;A few &lt;a href="http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!206.entry"&gt;months ago &lt;/a&gt;I talked about hash tables, known in TR1 as unordered associative containers, and hinted that's what really interesting about them is how they work under the covers. Of course, neither TR1 or the C++ Standard describe how to implement containers. These documents only describe how the containers must behave.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;When I analyzed unordered associative containers (UACs), I looked at one specific implementation, the &lt;a href="http://www.dinkumware.com/"&gt;Dinkumware&lt;/a&gt; version. The requirements on UACs are simple. Insertion must be average time complexity O(1) and worst-case complexity O(n). Search performance must be the same: constant time on average, and linear in the worst case. This is the true distinction of hash tables. Unlike associative containers, which have O(log n) complexity for insertion and find, UACs can do much better: constant time insertion/find. The drawback of UACs is that performance can degrade to worse than log n: linear.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Hash tables work by hashing elements into &lt;a href="http://en.wikipedia.org/wiki/Hash_table"&gt;buckets&lt;/a&gt;. The perfect hash table has one element per bucket. A good hash table has a handful of elements in each and every bucket.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;The Dinkumware implementation of UACs is simple but clever. Elements T are stored in a single std::list&amp;lt;T&amp;gt;. Buckets each contain a single iterator that points somewhere into the list. Hence, buckets is defined as vector of iterators, a std::vector&amp;lt; std::list&amp;lt;T&amp;gt;::iterator &amp;gt;. When a new element is added to the UAC, it is hashed to determine its bucket. If the bucket is empty, the element itself is added to the list and the bucket iterator is changed to &amp;quot;point&amp;quot; to the element in the list. If the bucket already points into the list, the element is inserted into the list. The clever part of the implementation is the use of a single std::list data structure to represent the &amp;quot;mini-lists&amp;quot; of each bucket. There's a picture on &lt;a href="https://www.cmpevents.com/sessions/GD/S3720i1.pdf"&gt;slide 20 here&lt;/a&gt; that gives you a visualization. Unfortunately the PDF doesn't animate, but you'll get the general idea. Notice that int elements 2 and 7 both hashed to the same bucket. The bucket points to the 2, which is followed by the 7. The next element in the list is 4, but because the iterator to element 4 is in the next non-empty bucket, we know that 7 is the last element in the bucket. The Dinkumware implementation uses this little trick to avoid having a unique list per bucket. The single list represents all the bucket lists.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I haven't had the chance to look at other implementations, but I'm sure it would prove a very interesting exercise.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Unordered+Associative+Containers+Part+II&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!226.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!226.entry</guid><pubDate>Thu, 30 Aug 2007 21:38:17 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!226/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!226.entry#comment</wfw:comment><dcterms:modified>2007-08-30T21:38:17Z</dcterms:modified></item><item><title>Performance Intuition</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!224.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Recently I had a conversation with &lt;a href="http://www.aristeia.com/"&gt;Scott Meyers&lt;/a&gt; about performance issues. One of the topics that came up was how our performance intuition often sucks eggs. There are so many factors that change, yet our basic assumptions remain the same. For example, there are still mainstream game programmers who try to avoid floating-point math because their performance intuition says &amp;quot;floating-point math is slow.&amp;quot; This performance intuition is usually backed up with past evidence that indicated floating-math was indeed slow. However, this intuition fails to take into account that the floating-math was slow on:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;a particularly platform&lt;/div&gt;
&lt;div&gt;with a particular compiler or virtual machine&lt;/div&gt;
&lt;div&gt;using a particular algorithm&lt;/div&gt;
&lt;div&gt;on a particular operating system&lt;/div&gt;
&lt;div&gt;or using a particular library.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Any one of these things could change our performance intuition of floating-math, but if we haven't measured the change, our intuition is unlikely to shift. As performance engineers we all understand the need to measure, but as Scott pointed out, who really has the time to measure each potential performance issue on each platform/compiler/VM/library/OS/library?&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;There's no easy answer to this problem. Part of my role at Microsoft is to help answer questions about performance on various platforms/compilers/libraries, but even that level of education only goes so far. As I like to say in my presentations, it's up to all of us to change the world. When you make a new discovery about performance, educate your team. Get the word out. We can only make true progress collectively.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Performance+Intuition&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!224.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!224.entry</guid><pubDate>Thu, 23 Aug 2007 20:02:03 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!224/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!224.entry#comment</wfw:comment><dcterms:modified>2007-08-23T20:02:03Z</dcterms:modified></item><item><title>Bjarne Reviews the Last 15 Years of C++</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!214.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I love C++. There's no other way to say it. C++ permeates the world of software. C++ technology permeates our lives. C++ is one of the most amazing inventions of all time, and yet the vast majority of the world doesn't even know about it. That's a shame.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.research.att.com/~bs/"&gt;Bjarne Stroustrup&lt;/a&gt;, the inventor of C++, is still a very active participant in the C++ community and standardization process. I recently read one of his latest &lt;a href="http://www.research.att.com/~bs/hopl-almost-final.pdf"&gt;papers&lt;/a&gt; where he examines how C++ has evolved over the past 15 years. He debunks a lot of myths and provides a surprisingly objective viewpoint of where C++ has succeeded and where it has failed. A fun one-evening read.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Bjarne+Reviews+the+Last+15+Years+of+C%2b%2b&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!214.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!214.entry</guid><pubDate>Thu, 09 Aug 2007 22:50:04 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!214/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!214.entry#comment</wfw:comment><dcterms:modified>2007-08-09T22:50:04Z</dcterms:modified></item><item><title>Gamefest 2007 is Coming</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!211.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Game developers from around the world will be converging in Seattle again this August 13-14, 2007 for &lt;a href="http://www.xnagamefest.com"&gt;Gamefest&lt;/a&gt;, Microsoft's premier conference on game development. This year there are two full days of talks, spread among 9 different tracks and featuring some of the best technical presenters in the world. I'm very involved in Gamefest again this year, and we just have an amazing lineup of talks.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Here are some of the programming presentations that you're likely to find me checking out this year:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;u&gt;Profiling Tools and Techniques: New Guidelines for Finding Where Your Time is Going&lt;/u&gt;. Bruce Dawson is not only an amazing performance engineer, but he loves to share his knowledge, and he gives the best technical talks on the planet. A must-attend.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;u&gt;VMX Optimization: Taking It Up a Level&lt;/u&gt;. &amp;quot;Taking It to the Next Level&amp;quot; is the conference theme. If you do Xbox 360 CPU programming and really want to optimize the hell out your game, Ian Lewis' talk is just what the doctor ordered.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;u&gt;Static Code Analysis on Game Code&lt;/u&gt;. Marwan Jubran is one of the true experts at Microsoft when it comes to code analysis. You'll definitely learn some exciting things about Visual Studio in this talk that will really improve the quality of your game code.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;u&gt;From the Trenches: Xbox 360 Development War Stories&lt;/u&gt;. Kutta Srinivasan has worked directly on some of the most killer games on Xbox 360, and his expertise is sure to be informative and useful.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;u&gt;TCR Failures, Taxes, or Death: Which One Can You Prevent?&lt;/u&gt; Darin Metzler knows a thing or two about TCRs, having worked in many roles on the certification team, and having a great understanding about game development. Plus he's one of the most cheerful testers I've ever met.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;u&gt;Ndrstndg Prseptul Adyo Cmprshn&lt;/u&gt; Scott Selfon and Ian Lewis have come up with the best title of the conference, and one sure to be full of meaty technical audio details, good anecdotes and perhaps a bit of fun, too.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;u&gt;Adding Creamy Nougat and a Crisp Candy Coating to the Network: XRNM and QNet&lt;/u&gt; Vance O'Neill is the quintessential network programmer, if there is such a thing. It's not often you hear directly from the programmer that actually designed and coded the technology -- here's your chance.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;u&gt;The Costs of Managed Code: The Avoidable and the Unavoidable&lt;/u&gt; &lt;a href="http://blogs.msdn.com/ricom/"&gt;Rico Mariani&lt;/a&gt; is a performance expert who's known not only throughout Microsoft but throughout the whole programming community. A great speaker, too. Even if you're not writing managed code you'll learn something interesting.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;u&gt;Windows to Reality: Getting the Most out of Direct3D 10 Graphics in Your Games&lt;/u&gt; Shanon Drone understands D3D10 better than just about anybody on the planet, and he's ported a number of significant game engines to D3D10, so his insight should be particularly relevant.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;
&lt;div&gt;The full list of talks is posted at &lt;a href="http://www.xnagamefest.com/talk_abstracts.htm"&gt;http://www.xnagamefest.com/talk_abstracts.htm&lt;/a&gt; and you can register for the conference here: &lt;a href="http://www.xnagamefest.com/register_now.htm"&gt;http://www.xnagamefest.com/register_now.htm&lt;/a&gt;. It's only $450 if you register before July 19th, an amazing value for the quality of the content and the quality of the speakers. See you there!&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial"&gt; &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Gamefest+2007+is+Coming&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!211.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!211.entry</guid><pubDate>Fri, 13 Jul 2007 23:58:12 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!211/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!211.entry#comment</wfw:comment><dcterms:modified>2007-07-13T23:58:12Z</dcterms:modified></item><item><title>Game Networking: Back to the Basics</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!209.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I wrote some comments on &lt;a href="http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!163.entry"&gt;game networking&lt;/a&gt; last November, but we're still seeing games with the same issues, so I'm going to add a few more recommendations.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;In comparison to other technologies, basic sockets programming hasn't changed much over the past 10 years. 10 years ago, game programmers were writing Direct3D 3.0 code. Today they're writing D3D10 code. Playstation was the latest console 10 years ago. Today it's Xbox 360 and PS3. The Winsock of 10 years ago, however, is the same as the Winsock today, and the same techniques still apply:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Avoid small payloads. The packet overhead kills your bandwidth.
&lt;li&gt;Don't send data too often. The best networked games send packets 10-20 times per second.
&lt;li&gt;Prefer UDP over TCP. The overhead of UDP is smaller, plus UDP doesn't automatically resend dropped packets like TCP.
&lt;li&gt;Assume that it could take seconds for packets to arrive at their destination and build your engine accordingly. The Internet does not have the same characteristics as a local network.
&lt;li&gt;Don't assume your packets will arrive at their destination. The Internet is a crazy place.
&lt;li&gt;Consider some form of secure packet authentication scheme. Hackers love to modify packets. Some platforms provide this feature automatically (Xbox) or provide it in library form. For games, it's usually worth the effort to protect your packet data.
&lt;li&gt;Consider some form of packet encryption. Even if packets are authenticated (can't be changed), hackers can still cheat just be looking at packet data and dropping specific packets on the floor.&lt;/ul&gt;
&lt;div&gt;Building a good networking engine is hard, and it's not glamorous work, either. But your game players will definitely notice if you've spent the time to do it right.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Game+Networking%3a+Back+to+the+Basics&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!209.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!209.entry</guid><pubDate>Thu, 28 Jun 2007 23:09:38 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!209/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!209.entry#comment</wfw:comment><dcterms:modified>2007-06-28T23:09:38Z</dcterms:modified></item><item><title>Herb Sutter on C++0X and Performance</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!208.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;In my previous post I talked about BoostCon and gave a bit of insight into C++0X. Herb Sutter recently posted links to some other interesting talks about C++0X that you might enjoy. You can find those &lt;a href="http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!239.entry"&gt;here&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Herb also talked about new C++0X features in his blog about the last Standards Committee &lt;a href="http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!214.entry"&gt;meeting&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Finally, Herb recently gave a talk about hardware architecture and what it means for programmers. You can find a copy of that talk &lt;a href="http://accu.org/content/conf2007/Sutter-Machine_Architecture.pdf"&gt;here&lt;/a&gt;. If you're writing games for Xbox 360 or PS3, much of this talk is old news. If you're writing games for the PC, you may be surprised at some of the key takeaways. I'll list a few:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;The root of all hardware complexity is latency. Modern processors reserve a huge amount of die area for systems that compensate for latency. Understanding these systems is the key to maximizing performance.
&lt;li&gt;On modern architectures, math is fast. In fact, it's almost always faster than fetching data from RAM. This fact alone should cause you to think twice about old optimization techniques like early-outs and pre-computed tables.
&lt;li&gt;On modern architectures, floating-point math is often as fast or faster than integer math. Don't automatically assume it's slower.
&lt;li&gt;Keeping data in the L1 and L2 cache are hyper-critical for maximizing performance. It's always been critical for performance, but it's even more important now than ever before.&lt;/ul&gt;
&lt;div&gt;Good stuff, and very relevant to game programming.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Herb+Sutter+on+C%2b%2b0X+and+Performance&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!208.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!208.entry</guid><pubDate>Mon, 25 Jun 2007 21:50:22 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!208/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!208.entry#comment</wfw:comment><dcterms:modified>2007-06-25T21:50:22Z</dcterms:modified></item><item><title>BoostCon</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!207.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;This week I've been at &lt;a href="http://www.boostcon.org/"&gt;BoostCon&lt;/a&gt;, a C++ conference focused on the &lt;a href="http://www.boost.org/"&gt;Boost&lt;/a&gt; libraries, TR1, TR2 and &lt;a href="http://en.wikipedia.org/wiki/C%2B%2B0x"&gt;C++0X&lt;/a&gt;. The weather here in Aspen, Colorado has been fantastic. I was expecting cool temperatures (Aspen is at 8,000 feet elevation), but it's been sunny and in the 70s every day. The conference organizers wisely gave us 2+ hour lunch breaks every day, so I've had the chance to explore downtown, go hiking, and mostly keep up with work email, too. Aspen's a pretty hip place -- an unlikely combination of old mining town mixed with modern ski resort plus a dash of Beverly Hills thrown in for good measure. It surely has more excellent shops and restaurants per capita than anywhere else on earth.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;A few things have struck me about the conference. First, there are a lot of really talented C++ developers who are expanded and extending the language in amazing directions. Second, one of the unstated themes of the conference is C++ metaprogramming. &lt;a href="http://www.aristeia.com/"&gt;Scott Meyers&lt;/a&gt; talked about how many meta languages there are in C++. Here are a few: printf formatting (one of the most cryptic, surely), template metaprogramming, iostream input and output, lambda functions, and coming soon in C++0X, concepts. Third, game developers have some exciting things to look forward to in C++0X.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;C++0X is the code name for the next version of the C++ Standard. The hope of the C++ Standards Committee (many of whom are at the conference) is that the next version will be in place by the end of the decade -- hence the 0X, hopefully meaning '09. The running joke is that 0X may turn out to mean 0A or 0B, but we'll see. At least two things in C++0X are extremely compelling for game programmers: rvalue references and concepts.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1952.html"&gt;Rvalue references&lt;/a&gt; are a new type of reference. The advantage of rvalue references is that in many cases they allow objects to be moved rather than copied. As &lt;a href="http://erdani.org/"&gt;Andrei Alexandrescu&lt;/a&gt; has said, &amp;quot;creating, copying around, and destroying temporary objects is the favorite indoor sport of your C++ compiler.&amp;quot; This copying behavior causes huge bottlenecks in games. We tend to work around that behavior in all sorts of unnatural ways: copy-on-write objects, smart pointers, and so forth. With rvalue references, the problem Just Goes Away. With C++0X, the STL will be updated to support rvalue references and move constructors. Howard Hinnant, the designer of rvalue references, showed example code using the STL that ran 7X faster with C++0X. Yes, &lt;strong&gt;7X&lt;/strong&gt; faster. That's the kind of optimization I like to see.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.generic-programming.org/languages/conceptcpp/papers/n1848.pdf"&gt;Concepts&lt;/a&gt; are a new, well, concept in C++. They allow you to state requirements for template code that are validated at &lt;em&gt;compile time&lt;/em&gt; rather than at template instantiation. Today, using any type of template code is an exercise in frustration for most programmers. Errors give little indication of whether the problem lies in the template itself or in the programmer's use of the template. Concepts change the whole equation, allowing template code to be fully validated by the compiler. I predict that concepts will finally allow the average programmer to use template libraries with ease, gaining all the performance advantages of templates without all the pain.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I can't wait for C++0X.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+BoostCon&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!207.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!207.entry</guid><pubDate>Thu, 17 May 2007 23:59:06 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!207/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!207.entry#comment</wfw:comment><dcterms:modified>2007-05-17T23:59:06Z</dcterms:modified></item><item><title>Unordered Associative Containers</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!206.entry</link><description>&lt;div&gt;
&lt;p style="background:white"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif'"&gt;Last time I introduced what will likely be adopted into the next version of the C++ Standard, a new type of container called unordered associative containers. By parsing the name of this new container type, you can determine a lot of useful information. First of all, these containers, unlike sets and maps, are &lt;i&gt;unordered&lt;/i&gt;. Traversing these containers results in an unordered list of elements. If you want an ordered list, you need to use set/map or vector+sort or some other solution.&lt;/span&gt; 
&lt;p style="background:white"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif'"&gt;Secondly, these containers are associative. That means elements can be compared in a meaningful way. However, unlike set/map, which require the programmer to supply a &amp;quot;less-than&amp;quot; form of element relationship, unordered associative containers require a &amp;quot;equivalent&amp;quot; form of element relationship (operator ==() ).&lt;/span&gt; 
&lt;p style="background:white"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif'"&gt;Finally, these are true STL containers. They support iteration and the other basic concepts of what it means to be an STL container. For example, they support functions like empty(), begin() and end().&lt;/span&gt; 
&lt;p style="background:white"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif'"&gt;Declaring an unordered associative container is easy. Here's an example:&lt;/span&gt; 
&lt;blockquote dir=ltr&gt;
&lt;p style="background:white"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Courier New'"&gt;std::str1::unordered_set&amp;lt; int &amp;gt; us;&lt;/span&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif'"&gt;&lt;/span&gt; &lt;/blockquote&gt;
&lt;p style="background:white"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif'"&gt;You add items to this container in the same way that you might add items into a standard set:&lt;/span&gt; 
&lt;blockquote dir=ltr&gt;
&lt;p style="background:white"&gt;&lt;font face="Courier New, Courier, Monospace"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Courier New'"&gt;us.insert( 42 );&lt;/span&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif'"&gt;&lt;/span&gt; &lt;/font&gt;
&lt;p style="background:white"&gt;&lt;font face="Courier New, Courier, Monospace"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Courier New'"&gt;us.insert( 1005 );&lt;/span&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif'"&gt;&lt;/span&gt; &lt;/font&gt;
&lt;p style="background:white"&gt;&lt;font face="Courier New, Courier, Monospace"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Courier New'"&gt;us.insert( 3 );&lt;/span&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif'"&gt;&lt;/span&gt; &lt;/font&gt;&lt;/blockquote&gt;
&lt;p style="background:white"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif'"&gt;And you can find an item just like you'd expect, too:&lt;/span&gt; 
&lt;blockquote dir=ltr&gt;
&lt;p style="background:white"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Courier New'"&gt;&lt;/span&gt; &lt;span style="font-size:8.5pt;color:black;font-family:'Courier New'"&gt;if( us.find( 42 ) != us.end() )&lt;/span&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif'"&gt;&lt;/span&gt; 
&lt;p style="background:white"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Courier New'"&gt;   // element found&lt;/span&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif'"&gt;&lt;/span&gt; &lt;/blockquote&gt;
&lt;p style="background:white"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif'"&gt;What's really interesting about unordered associative containers is what's going on under the covers. Tune in next time...&lt;/span&gt; 
&lt;p style="background:white"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif'"&gt;&lt;/span&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Unordered+Associative+Containers&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!206.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!206.entry</guid><pubDate>Thu, 10 May 2007 23:53:51 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!206/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!206.entry#comment</wfw:comment><dcterms:modified>2007-05-10T23:58:07Z</dcterms:modified></item><item><title>STL Lookups</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!202.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;If you want fast lookups using STL, you currently have two choices:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;1) Use a sorted container, like [multi]set or [multi]map and the find() member function&lt;/div&gt;
&lt;div&gt;2) Use a non-sorted container, sort it (using std::sort() or similar function), and search using std::binary_search() (or lower_bound() et al)&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Both of these options provide log N search performance, which is nothing to sniff at. But there's a potentially much faster option: hash tables. Hash tables can provide &lt;em&gt;constant-time&lt;/em&gt; lookup performance in the best case. The tradeoff is that worst case performance is linear. Unfortunately, the STL doesn't provide hash tables. This makes me sad.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Hash tables were originally proposed for the C++ Standard over 10 years ago, but weren't adopted, primarily because the proposed interface was still too new and unproven.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Some vendors have provided non-standard solutions, but with &lt;a href="http://en.wikipedia.org/wiki/Technical_Report_1"&gt;TR1&lt;/a&gt;, there's a new option, very likely to be adopted into the new version of C++ Standard within the next couple of years. That new option has an exciting new name. Wait for it ... &lt;/div&gt;
&lt;blockquote dir=ltr&gt;
&lt;div&gt;Unordered associative containers&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;OK, maybe not so exciting. What is exciting is that now there's a third option for doing fast lookups. These containers have lots of interesting dials and levers -- more so than sets or maps -- that allow you to tweak the size/space tradeoff for maximum performance. This makes me happy. More next time.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+STL+Lookups&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!202.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!202.entry</guid><pubDate>Thu, 05 Apr 2007 20:29:57 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!202/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!202.entry#comment</wfw:comment><dcterms:modified>2007-04-05T20:29:57Z</dcterms:modified></item><item><title>GDC 2007 Talk Posted</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!201.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;You can now find a copy of my GDC 2007 presentation at &lt;a href="https://www.cmpevents.com/sessions/GD/S3720i1.pdf"&gt;https://www.cmpevents.com/sessions/GD/S3720i1.pdf&lt;/a&gt;. Enjoy!&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+GDC+2007+Talk+Posted&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!201.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!201.entry</guid><pubDate>Thu, 29 Mar 2007 17:37:45 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!201/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!201.entry#comment</wfw:comment><dcterms:modified>2007-03-29T17:37:45Z</dcterms:modified></item><item><title>Getting Started with TR1</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!200.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;My topic at &lt;a href="http://www.gdconf.com"&gt;GDC&lt;/a&gt; was &lt;a href="http://en.wikipedia.org/wiki/Technical_Report_1"&gt;Technical Report 1&lt;/a&gt; (TR1), an &amp;quot;informative document&amp;quot; that includes new C++ library features that are highly likely to become a part of the next C++ Standard. You can download versions of TR1 from the following places:&lt;/div&gt;
&lt;blockquote dir=ltr&gt;
&lt;div&gt;&lt;a href="http://www.dinkumware.com"&gt;www.dinkumware.com&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.boost.org"&gt;www.boost.org&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.gcc.gnu.org"&gt;gcc.gnu.org&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.metrowerks.com"&gt;www.metrowerks.com&lt;/a&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;Using TR1 is easy. Just include the header file that contains the feature you want, qualify the namespace by using std::tr1, and away you go. Here's a quick example:&lt;/div&gt;
&lt;blockquote dir=ltr&gt;
&lt;div&gt;&lt;font face="Courier New, Courier, Monospace"&gt;#include &amp;lt;array&amp;gt; // new fixed-size array container&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New, Courier, Monospace"&gt;std::tr1::array&amp;lt; int, 4 &amp;gt; a; // fully qualified name; note size is template param&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New, Courier, Monospace"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New, Courier, Monospace"&gt;// more common usage&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New, Courier, Monospace"&gt;using namespace std::tr1;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New, Courier, Monospace"&gt;array&amp;lt; int, 4 &amp;gt; a = { 1,2,3,4 }; // cool -- you can even initialize using standard array initialization&lt;/font&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;If you've ever been frustrated that you couldn't use C-style arrays in a similar fashion as other C++ containers, tr1:array is the container for you. Now you can do things like sort:&lt;/div&gt;
&lt;blockquote dir=ltr&gt;
&lt;div&gt;&lt;font face="Courier New, Courier, Monospace"&gt;std::sort( a.begin(), a.end() );&lt;/font&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;and size extraction:&lt;/div&gt;
&lt;blockquote dir=ltr&gt;
&lt;div&gt;&lt;font face="Courier New, Courier, Monospace"&gt;for( int i = 0; i &amp;lt; a.size(); ++i )&lt;/font&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;just as if the array was any old STL container. Naturally tr1::array performance is the same as for C-style arrays. For example, a[x] produces the exactly the same code when 'a' is a tr1::array as when 'a' is an old-fashioned C-array.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;However, TR1 arrays aren't true containers. For instance, they can't grow (no resize or reserve or push_back). And swaps of arrays (array.swap()) are not constant time operations like they are for vector, deque, list and so forth -- array swaps are linear.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Nevertheless, I'll be using TR1-style arrays much more than C-style arrays in my own code. All the benefits far outweigh the minor drawbacks.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Getting+Started+with+TR1&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!200.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!200.entry</guid><pubDate>Thu, 29 Mar 2007 17:04:03 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!200/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!200.entry#comment</wfw:comment><dcterms:modified>2007-03-29T17:04:03Z</dcterms:modified></item><item><title>That Which We Call a Rose</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!198.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I've worked at Microsoft for over six years. In that time, I've always worked on the same team. However, the team has had a number of different names. Recently, we adopted our third name. Here's the breakdown...&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Xbox Advanced Technology Group&lt;/strong&gt;: The name when I joined, the team consisted of senior engineers helping Xbox developers get the most out of the platform. &lt;a href="http://en.wikipedia.org/wiki/Michael_Abrash"&gt;Mike Abrash&lt;/a&gt; was the most famous person on the team, but he was one of many rockstar developers.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Microsoft Game Technology Group&lt;/strong&gt;: We took on this name when we took on a new role -- supporting both Xbox 360 and Windows game developers. By now the team had grown to two dozen engineers, including the industry-renowned front line developer support team.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;XNA Developer Connection&lt;/strong&gt;: Same job, new name. These days I manage the entire team, and what an amazing team it is. We support all Microsoft gaming platforms in ways big and small. XNA has come to encompass &lt;em&gt;everything&lt;/em&gt; that Microsoft developers to game developers. That includes technology like &lt;a href="http://msdn2.microsoft.com/en-us/xna/aa937795.aspx"&gt;XNA Game Studio Express&lt;/a&gt;, but it also includes the Xbox 360 XDK, the &lt;a href="http://msdn.com/directx/"&gt;DirectX SDK&lt;/a&gt;, developer support, and events like &lt;a href="http://www.microsoftgamefest.com/"&gt;Gamefest&lt;/a&gt;, along with advanced research into new game development techniques in areas like graphics, audio, and LIVE.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;For short, the new team name is XDC. What a great job! I'm in XDC.&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+That+Which+We+Call+a+Rose&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!198.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!198.entry</guid><pubDate>Wed, 21 Mar 2007 22:32:37 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!198/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!198.entry#comment</wfw:comment><dcterms:modified>2007-03-21T22:32:37Z</dcterms:modified></item><item><title>Tuning STL in debug mode</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!196.entry</link><description>&lt;div&gt;I enjoyed another great GDC last week. I must say that San Francisco is a better location than San Jose. There's so much more to do and so many better places to eat. Here are three that I enjoyed: &lt;a href="http://www.modernmexican.com/mayasf/"&gt;Maya&lt;/a&gt;, &lt;a href="http://www.ponzurestaurant.com/"&gt;Ponzu&lt;/a&gt; and &lt;a href="http://www.pucciniandpinetti.com/"&gt;Puccini and Pinetti&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I believe this was GDC number eleven or twelve for me, and my ninth as a presenter. I still get that same little thrill about first setting foot in the registration area and looking forward to the days ahead. I'll cover some of the content from my talk in my next few entries.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;For now, just one quick note, based on a question I got after my presentation.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Q:&lt;/strong&gt; We use STL. While it performs just fine in release mode, debug mode runs abominably slow. Do you know of any way to address this?&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;A:&lt;/strong&gt; Assuming you're using Visual Studio 2005, you can turn certain features of STL debugging on or off. For instance, you can turn off iterator debugging by setting _HAS_ITERATOR_DEBUGGING to zero. More info &lt;a href="http://msdn2.microsoft.com/en-us/library/aa985982(VS.80).aspx"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Tuning+STL+in+debug+mode&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>C++</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!196.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!196.entry</guid><pubDate>Wed, 14 Mar 2007 22:46:39 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!196/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!196.entry#comment</wfw:comment><dcterms:modified>2007-03-14T22:46:39Z</dcterms:modified></item><item><title>Game Developer Conference 2007</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!194.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I'll be at &lt;a href="http://www.gdconf.com"&gt;GDC&lt;/a&gt; again this year. This is my tenth or eleventh year as an attendee and my ninth year as a speaker. My talk is on C++ (naturally), specifically TR1, an extension to the Standard C++ library with some very cool new features that are relevant to game programming. Here's the abstract:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;TR1 is Technical Report 1, a specification of new extensions proposed for the C++ Standard Library. If you're a game developer, there's lots of yummy goodness in TR1, including super-fast hashed containers and smart pointers. Once you throw in other tasty morsels like function objects, type traits and random number generation, TR1 is pretty hard to ignore. This talk covers the aspects of TR1 most relevant to game programming, providing examples and performance analysis. &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;You'll find me in Room 2007 in the West Hall of the Moscone Center in San Fran on March 7th at 9am (ouch!). Hope to see you there...&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4360689961947836087&amp;page=RSS%3a+Game+Developer+Conference+2007&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=pkisensee.spaces.live.com&amp;amp;GT1=pkisensee"&gt;</description><category>Game Programming</category><comments>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!194.entry#comment</comments><guid isPermaLink="true">http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!194.entry</guid><pubDate>Tue, 20 Feb 2007 16:47:47 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!194/comments/feed.rss</wfw:commentRss><wfw:comment>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!194.entry#comment</wfw:comment><dcterms:modified>2007-02-20T16:47:47Z</dcterms:modified></item><item><title>Localization for Games</title><link>http://pkisensee.spaces.live.com/Blog/cns!3C84486A9D832EB7!192.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I was asked recently to provide some tips about localization issues. Localization for games is really not much different than for any other application, so most if not all of these ideas work no matter what type of application you're creating.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Assume your game will be localized. &lt;em&gt;All successful games are localized&lt;/em&gt;. If you go in knowing that localization will happen, you'll make design decisions that will save you (and your localizers) a ton of time in the future.&lt;br&gt;
&lt;li&gt;Don’t embed UI text in code. This is one of the hardest tips to follow. Rule of thumb: if the text could ever appear to your customer, it shouldn't be directly in the code -- it should be in a separate resource.&lt;br&gt;
&lt;li&gt;Use Unicode for all player-visible text; prefer UTF-8 (or string IDs) on the wire. Multi-byte character strings are hell; avoid them. Sending text over the network shoul