<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>
	Comments on: Finding and Fixing a Five Second Stall	</title>
	<atom:link href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/feed/" rel="self" type="application/rss+xml" />
	<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/</link>
	<description>Explore an abandoned island.</description>
	<lastBuildDate>Tue, 14 Aug 2018 21:03:27 +0000</lastBuildDate>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.9</generator>
	<item>
		<title>
		By: Robert Muckle-Jones		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-8799184</link>

		<dc:creator><![CDATA[Robert Muckle-Jones]]></dc:creator>
		<pubDate>Tue, 14 Aug 2018 21:03:27 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-8799184</guid>

					<description><![CDATA[Thank you for this article Casey! I have recently started programming in Windows for my job and I am amazed by how unproductive and poorly documented the Windows APIs can be. I come from an Apple background, and I have recently been coding 2D graphics in both Microsofts Direct2D and Apples Quartz2D frameworks and can say categorically that the Apple API is much simpler, better thought out, and ultimately many times more productive than the Windows equivalent. 

I really enjoyed listening to your hilarious rant about Direct2D on the Jeff and Casey show. It was exactly the antidote I needed after struggling to use Direct2D all day to do trivial tasks!]]></description>
			<content:encoded><![CDATA[<p>Thank you for this article Casey! I have recently started programming in Windows for my job and I am amazed by how unproductive and poorly documented the Windows APIs can be. I come from an Apple background, and I have recently been coding 2D graphics in both Microsofts Direct2D and Apples Quartz2D frameworks and can say categorically that the Apple API is much simpler, better thought out, and ultimately many times more productive than the Windows equivalent. </p>
<p>I really enjoyed listening to your hilarious rant about Direct2D on the Jeff and Casey show. It was exactly the antidote I needed after struggling to use Direct2D all day to do trivial tasks!</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Mike Nelson		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-633858</link>

		<dc:creator><![CDATA[Mike Nelson]]></dc:creator>
		<pubDate>Mon, 18 Mar 2013 16:33:25 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-633858</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-155039&quot;&gt;d&lt;/a&gt;.

So true, d.

# this needs to be escaped 4 times unline the usual 5 times...
my_dev_env=c:\\\\\\\\dev\\\\\\\\project]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-155039">d</a>.</p>
<p>So true, d.</p>
<p># this needs to be escaped 4 times unline the usual 5 times&#8230;<br />
my_dev_env=c:\\\\\\\\dev\\\\\\\\project</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Carson Kanaan		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-628719</link>

		<dc:creator><![CDATA[Carson Kanaan]]></dc:creator>
		<pubDate>Sun, 17 Mar 2013 11:10:11 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-628719</guid>

					<description><![CDATA[I enjoyed reading this piece, Casey, though I came late to it.

Your description of how problems germinate in platform vendor&#039;s product, and then bloom in the work of every developer who works above that level squarely captures the scale of the impact:

&lt;blockquote&gt;
it’s a sacrifice that’s not just made by us, but by thousands of teams on thousands of projects every year [...]  when you consider that this same work has to be done by every other developer, too. It’s really thousands of zero-sum games being played, all across the industry, and the end result is universally worse software because the underlying platforms take up too much effort.
&lt;/blockquote&gt;

In a somewhat-related technical context, I was speaking to a sysadmin and former colleague of mine who worked for a large company, where he was part of a team that managed that company&#039;s 220,000-desktop user base.

One of their internally-developed frameworks was used by a number of their critical operations management applications, and it had an occasional processing stall that would unreliably surface to impact several thousand users across their global network every couple of weeks.

People would complain, but because it rarely impacted more than a few persons at a time in any particular local office, no one really had a sense of the scale of the problem across 340 offices on six continents.

For a long time, it was nearly impossible to focus developer resources on corralling and taming this bug, since the framework was technically nobody&#039;s responsibility anymore.

A newer developer with little to do his first few weeks became enamored by the bug and set out to calculate the person-hour  impact to the company from these cumulative stalls. After adding the needed instrumentation wrapper to a key library, he found that in a given month, there were nearly 44 person-days of wasted time caused by this stall--a staggering amount, and a staggering cost to the company given that some of the people whose work this stall affected were very costly employees.

After realizing that this was a &quot;hundred-thousand dollar bug&quot;, it was relatively easy to get the people who could fix it to fix it. But the practical fact remains that stuck in the low-level framework, out of sight and out of mind of most application developers, it was impactful in non-obvious ways.

Thanks again for your writeup.

If you ever find that the talk by Gill Pratt on &quot;the static discipline&quot; is online anywhere, I&#039;d welcome a link. 

(There was a similar concept espoused by early engineers in the Internet community: &quot;be liberal in what you accept, conservative in what you send out&quot;, which assured that a broad range of user-level applications on the Internet would just &#039;work&#039; despite poorly-formatted messages and protocol violations because even if somebody sent you garbage, it was your responsibility to clean it up before you sent it along to the next recipient.)]]></description>
			<content:encoded><![CDATA[<p>I enjoyed reading this piece, Casey, though I came late to it.</p>
<p>Your description of how problems germinate in platform vendor&#8217;s product, and then bloom in the work of every developer who works above that level squarely captures the scale of the impact:</p>
<blockquote><p>
it’s a sacrifice that’s not just made by us, but by thousands of teams on thousands of projects every year [&#8230;]  when you consider that this same work has to be done by every other developer, too. It’s really thousands of zero-sum games being played, all across the industry, and the end result is universally worse software because the underlying platforms take up too much effort.
</p></blockquote>
<p>In a somewhat-related technical context, I was speaking to a sysadmin and former colleague of mine who worked for a large company, where he was part of a team that managed that company&#8217;s 220,000-desktop user base.</p>
<p>One of their internally-developed frameworks was used by a number of their critical operations management applications, and it had an occasional processing stall that would unreliably surface to impact several thousand users across their global network every couple of weeks.</p>
<p>People would complain, but because it rarely impacted more than a few persons at a time in any particular local office, no one really had a sense of the scale of the problem across 340 offices on six continents.</p>
<p>For a long time, it was nearly impossible to focus developer resources on corralling and taming this bug, since the framework was technically nobody&#8217;s responsibility anymore.</p>
<p>A newer developer with little to do his first few weeks became enamored by the bug and set out to calculate the person-hour  impact to the company from these cumulative stalls. After adding the needed instrumentation wrapper to a key library, he found that in a given month, there were nearly 44 person-days of wasted time caused by this stall&#8211;a staggering amount, and a staggering cost to the company given that some of the people whose work this stall affected were very costly employees.</p>
<p>After realizing that this was a &#8220;hundred-thousand dollar bug&#8221;, it was relatively easy to get the people who could fix it to fix it. But the practical fact remains that stuck in the low-level framework, out of sight and out of mind of most application developers, it was impactful in non-obvious ways.</p>
<p>Thanks again for your writeup.</p>
<p>If you ever find that the talk by Gill Pratt on &#8220;the static discipline&#8221; is online anywhere, I&#8217;d welcome a link. </p>
<p>(There was a similar concept espoused by early engineers in the Internet community: &#8220;be liberal in what you accept, conservative in what you send out&#8221;, which assured that a broad range of user-level applications on the Internet would just &#8216;work&#8217; despite poorly-formatted messages and protocol violations because even if somebody sent you garbage, it was your responsibility to clean it up before you sent it along to the next recipient.)</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Bret Comnes		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-525351</link>

		<dc:creator><![CDATA[Bret Comnes]]></dc:creator>
		<pubDate>Thu, 21 Feb 2013 16:28:24 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-525351</guid>

					<description><![CDATA[Another workaround issues with accidentally hitting the windows key is implementing your full screen program in such a way so that accidentally alt-tabbing or windows keying out of the game is a very cheap action.  IE, it happens instantly.  This is commonly achieved using border-less fullscreen.  More games should do it.]]></description>
			<content:encoded><![CDATA[<p>Another workaround issues with accidentally hitting the windows key is implementing your full screen program in such a way so that accidentally alt-tabbing or windows keying out of the game is a very cheap action.  IE, it happens instantly.  This is commonly achieved using border-less fullscreen.  More games should do it.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Casey Muratori		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-290830</link>

		<dc:creator><![CDATA[Casey Muratori]]></dc:creator>
		<pubDate>Tue, 08 Jan 2013 00:07:44 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-290830</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-220265&quot;&gt;Tricia&lt;/a&gt;.

Tricia: You can always use CTRL-ESC, which was the previous way to do this before the Windows key was added to keyboards.  It is a much more sane way for games to allow this behavior, because nobody can really hit CTRL-ESC by accident.  It should work in all games, too, as I don&#039;t think there are ways to disable it, although admittedly I have never tried.  I, like you, appreciate the need to have a way to switch from a game to the Start menu, and CTRL-ESC seems like a good way to do that, so I would never go out of my way to try to disable it, nor recommend that others do so.

- Casey]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-220265">Tricia</a>.</p>
<p>Tricia: You can always use CTRL-ESC, which was the previous way to do this before the Windows key was added to keyboards.  It is a much more sane way for games to allow this behavior, because nobody can really hit CTRL-ESC by accident.  It should work in all games, too, as I don&#8217;t think there are ways to disable it, although admittedly I have never tried.  I, like you, appreciate the need to have a way to switch from a game to the Start menu, and CTRL-ESC seems like a good way to do that, so I would never go out of my way to try to disable it, nor recommend that others do so.</p>
<p>&#8211; Casey</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Michael Yacavone		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-264986</link>

		<dc:creator><![CDATA[Michael Yacavone]]></dc:creator>
		<pubDate>Fri, 04 Jan 2013 15:19:25 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-264986</guid>

					<description><![CDATA[I don&#039;t have experience programming on Windows, but apropos of the comment from &quot;d&quot; above, while learning iOS programming in 2012 my brain REALLY liked the level of abstraction in Cocoa. Seems like those NextStep guys took the time to think it through. OTOH, I understand there are plenty of Cocoa APIs that also have teh suck, recently Twitter-elaborated by Wil Shipley: http://twitter.com/wilshipley/status/277920619893510144]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t have experience programming on Windows, but apropos of the comment from &#8220;d&#8221; above, while learning iOS programming in 2012 my brain REALLY liked the level of abstraction in Cocoa. Seems like those NextStep guys took the time to think it through. OTOH, I understand there are plenty of Cocoa APIs that also have teh suck, recently Twitter-elaborated by Wil Shipley: <a href="http://twitter.com/wilshipley/status/277920619893510144" rel="nofollow ugc">http://twitter.com/wilshipley/status/277920619893510144</a></p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Tricia		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-220265</link>

		<dc:creator><![CDATA[Tricia]]></dc:creator>
		<pubDate>Tue, 01 Jan 2013 05:52:01 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-220265</guid>

					<description><![CDATA[I wanted to put in my two cents on the Windows hotkey. I actually prefer it not to be deactivated. I frequently want to minimize a full screen game that has no built in minimize feature (Guild Wars 2 is an example of a game that has this feature nicely implemented in the pause screen), and I usually use the Windows hotkey for that. I don&#039;t think I&#039;ve ever had issues with accidental button presses on that key. With it disabled, I&#039;m far more likely to have to shut down the entire game just to Google the solution to some in-game problem I&#039;m facing.

I realize that accidental presses are an issue for some gamers, but I wanted to suggest that you add a minimize button for convenience&#039;s sake.

I also wanted to mention that I find these programming articles to be quite interesting, and that I really appreciated your article about Window&#039;s monopoly on releases on Windows 8. I was entirely unaware of the new requirements.]]></description>
			<content:encoded><![CDATA[<p>I wanted to put in my two cents on the Windows hotkey. I actually prefer it not to be deactivated. I frequently want to minimize a full screen game that has no built in minimize feature (Guild Wars 2 is an example of a game that has this feature nicely implemented in the pause screen), and I usually use the Windows hotkey for that. I don&#8217;t think I&#8217;ve ever had issues with accidental button presses on that key. With it disabled, I&#8217;m far more likely to have to shut down the entire game just to Google the solution to some in-game problem I&#8217;m facing.</p>
<p>I realize that accidental presses are an issue for some gamers, but I wanted to suggest that you add a minimize button for convenience&#8217;s sake.</p>
<p>I also wanted to mention that I find these programming articles to be quite interesting, and that I really appreciated your article about Window&#8217;s monopoly on releases on Windows 8. I was entirely unaware of the new requirements.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Casey Muratori		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-171857</link>

		<dc:creator><![CDATA[Casey Muratori]]></dc:creator>
		<pubDate>Sun, 23 Dec 2012 23:26:42 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-171857</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-170020&quot;&gt;Egon Elbre&lt;/a&gt;.

Yeah, that seems like a good idea.  If a WINE dev has already gone through this process trying to properly emulate Windows, then you can piggyback on that and save yourself a lot of time I bet... I should install the WINE source here on my laptop, it&#039;s a Linux Mint machine.

- Casey]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-170020">Egon Elbre</a>.</p>
<p>Yeah, that seems like a good idea.  If a WINE dev has already gone through this process trying to properly emulate Windows, then you can piggyback on that and save yourself a lot of time I bet&#8230; I should install the WINE source here on my laptop, it&#8217;s a Linux Mint machine.</p>
<p>&#8211; Casey</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Chris Subagio		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-171254</link>

		<dc:creator><![CDATA[Chris Subagio]]></dc:creator>
		<pubDate>Sun, 23 Dec 2012 21:31:44 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-171254</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-166785&quot;&gt;Casey Muratori&lt;/a&gt;.

It&#039;s also worth pointing out that this is a contribution anyway: often a webpage like this comes up when you search for an MS API related problem, and judging by the last decade of MSDN, it&#039;s also more likely to stick around and be visible.

I gave up searching MSDN directly years ago; by default I now google search my problems and if a page ranks higher than the MSDN doc page, 90% of the time it&#039;s a page like this that actually addresses the problem more usefully.

Thanks for the breakdown, btw. I&#039;ve run into the problem before and had to go the disable the hook route because I didn&#039;t have time to dissect it. If I ever see it again, I&#039;ll know where to come back for reference.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-166785">Casey Muratori</a>.</p>
<p>It&#8217;s also worth pointing out that this is a contribution anyway: often a webpage like this comes up when you search for an MS API related problem, and judging by the last decade of MSDN, it&#8217;s also more likely to stick around and be visible.</p>
<p>I gave up searching MSDN directly years ago; by default I now google search my problems and if a page ranks higher than the MSDN doc page, 90% of the time it&#8217;s a page like this that actually addresses the problem more usefully.</p>
<p>Thanks for the breakdown, btw. I&#8217;ve run into the problem before and had to go the disable the hook route because I didn&#8217;t have time to dissect it. If I ever see it again, I&#8217;ll know where to come back for reference.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jake McKenzie		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-170108</link>

		<dc:creator><![CDATA[Jake McKenzie]]></dc:creator>
		<pubDate>Sun, 23 Dec 2012 13:45:51 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-170108</guid>

					<description><![CDATA[I&#039;m taking my first class in C in the spring at Uni. I found this article to be a really good resource Casey. I lament the future hours I will probably spend going over the same problems you bring up here. I think about all these new things that games have brought that I love in PC gaming like the full screen window, dual monitor support, controller support at the start of the application and it all makes my head spin thinking about how to properly implement it the right way.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m taking my first class in C in the spring at Uni. I found this article to be a really good resource Casey. I lament the future hours I will probably spend going over the same problems you bring up here. I think about all these new things that games have brought that I love in PC gaming like the full screen window, dual monitor support, controller support at the start of the application and it all makes my head spin thinking about how to properly implement it the right way.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Egon Elbre		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-170020</link>

		<dc:creator><![CDATA[Egon Elbre]]></dc:creator>
		<pubDate>Sun, 23 Dec 2012 13:14:38 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-170020</guid>

					<description><![CDATA[A tip that a fellow developer gave me for debugging Windows is to use ReactOS/WINE source. The source should have similar behavior and it occasionally has nice comments about weird behaviors.]]></description>
			<content:encoded><![CDATA[<p>A tip that a fellow developer gave me for debugging Windows is to use ReactOS/WINE source. The source should have similar behavior and it occasionally has nice comments about weird behaviors.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Casey Muratori		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-166786</link>

		<dc:creator><![CDATA[Casey Muratori]]></dc:creator>
		<pubDate>Sat, 22 Dec 2012 17:18:10 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-166786</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-161245&quot;&gt;Brian Sharp&lt;/a&gt;.

Alright, hit me.  Post the code sample for C# that disables the Windows keys.  Is it one line like it should be?

- Casey]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-161245">Brian Sharp</a>.</p>
<p>Alright, hit me.  Post the code sample for C# that disables the Windows keys.  Is it one line like it should be?</p>
<p>&#8211; Casey</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Casey Muratori		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-166785</link>

		<dc:creator><![CDATA[Casey Muratori]]></dc:creator>
		<pubDate>Sat, 22 Dec 2012 17:04:11 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-166785</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-162362&quot;&gt;Remi Gillig&lt;/a&gt;.

Because I don&#039;t get paid to make Microsoft&#039;s products better?  They are a $231 billion company.  They could hire fifty people to do nothing but search the web for posts like this, check the source code, and update their MSDN pages to have correct information, and it wouldn&#039;t even make a line item in their quaterly report.

I, on the other hand, am an independent developer on a independent project that squeaks by on the savings of a principal or two.  If I&#039;m going to spend my time doing something, it&#039;s going to be improving the community for The Witness, not improving the community of Microsoft, the company that constantly costs _us_ time and resources because they couldn&#039;t be bothered to do their job.

And that&#039;s why I spend what precious little free time I have writing posts for this blog and answering the comments on it instead of spending my time fixing Microsoft&#039;s erroneous documentation.

- Casey]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-162362">Remi Gillig</a>.</p>
<p>Because I don&#8217;t get paid to make Microsoft&#8217;s products better?  They are a $231 billion company.  They could hire fifty people to do nothing but search the web for posts like this, check the source code, and update their MSDN pages to have correct information, and it wouldn&#8217;t even make a line item in their quaterly report.</p>
<p>I, on the other hand, am an independent developer on a independent project that squeaks by on the savings of a principal or two.  If I&#8217;m going to spend my time doing something, it&#8217;s going to be improving the community for The Witness, not improving the community of Microsoft, the company that constantly costs _us_ time and resources because they couldn&#8217;t be bothered to do their job.</p>
<p>And that&#8217;s why I spend what precious little free time I have writing posts for this blog and answering the comments on it instead of spending my time fixing Microsoft&#8217;s erroneous documentation.</p>
<p>&#8211; Casey</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Remi Gillig		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-162362</link>

		<dc:creator><![CDATA[Remi Gillig]]></dc:creator>
		<pubDate>Fri, 21 Dec 2012 12:49:21 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-162362</guid>

					<description><![CDATA[How about documenting this behaviour on the MSDN page then? There is a community additions section and there are usually loads of information on undocumented/misdocumented features. And yes, sometimes the MSDN pages get fixed because of these comments. So that even if you despise the Windows API, you contribute to its progress instead of ranting about it all :)]]></description>
			<content:encoded><![CDATA[<p>How about documenting this behaviour on the MSDN page then? There is a community additions section and there are usually loads of information on undocumented/misdocumented features. And yes, sometimes the MSDN pages get fixed because of these comments. So that even if you despise the Windows API, you contribute to its progress instead of ranting about it all :)</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Brian Sharp		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-161245</link>

		<dc:creator><![CDATA[Brian Sharp]]></dc:creator>
		<pubDate>Fri, 21 Dec 2012 03:24:35 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-161245</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154492&quot;&gt;Casey Muratori&lt;/a&gt;.

Totally disagree. C# and the .NET framework is the best development environment for a huge range of common software that exists today. We use it for all our internal tools - including lots of realtime apps doing heavy-duty stuff. I think C# is one of the best-designed languages in the world, and the .NET framework is one of the most expressive and clear standard libraries around. Performance is only really a problem in situations of serious computation - you wouldn&#039;t use C# for super heavy-duty number-crunching.

Some object to both based on &quot;bloatware&quot; bugbears but those are irrelevant to anyone who&#039;s not OCD. Hard drives are massive now and RAM is cheap, and the tradeoff for the development time it buys you back (to your point about that!) is absolutely worth it. Our expert C# devs who have decades of C and C++ experience say that their default is everything not on an embedded platform should be C# unless there&#039;s a particularly good exceptional reason to use C/C++, and usually there isn&#039;t.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154492">Casey Muratori</a>.</p>
<p>Totally disagree. C# and the .NET framework is the best development environment for a huge range of common software that exists today. We use it for all our internal tools &#8211; including lots of realtime apps doing heavy-duty stuff. I think C# is one of the best-designed languages in the world, and the .NET framework is one of the most expressive and clear standard libraries around. Performance is only really a problem in situations of serious computation &#8211; you wouldn&#8217;t use C# for super heavy-duty number-crunching.</p>
<p>Some object to both based on &#8220;bloatware&#8221; bugbears but those are irrelevant to anyone who&#8217;s not OCD. Hard drives are massive now and RAM is cheap, and the tradeoff for the development time it buys you back (to your point about that!) is absolutely worth it. Our expert C# devs who have decades of C and C++ experience say that their default is everything not on an embedded platform should be C# unless there&#8217;s a particularly good exceptional reason to use C/C++, and usually there isn&#8217;t.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Casey Muratori		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-158673</link>

		<dc:creator><![CDATA[Casey Muratori]]></dc:creator>
		<pubDate>Thu, 20 Dec 2012 06:47:12 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-158673</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-157843&quot;&gt;Degg35&lt;/a&gt;.

No, RIDEV_NOHOTKEYS does not block CTRL-ALT-DELETE and ALT-TAB, etc., so you still have plenty of ways to get out of the application if for some reason it becomes unresponsive.  It&#039;s only the Windows logo keys that are being suppressed here.

- Casey]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-157843">Degg35</a>.</p>
<p>No, RIDEV_NOHOTKEYS does not block CTRL-ALT-DELETE and ALT-TAB, etc., so you still have plenty of ways to get out of the application if for some reason it becomes unresponsive.  It&#8217;s only the Windows logo keys that are being suppressed here.</p>
<p>&#8211; Casey</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Vincent Povirk		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-158004</link>

		<dc:creator><![CDATA[Vincent Povirk]]></dc:creator>
		<pubDate>Thu, 20 Dec 2012 00:19:41 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-158004</guid>

					<description><![CDATA[I was told recently that explorer uses RegisterHotKey to create those windows key shortcuts. I&#039;m guessing that &quot;system level hotkeys&quot; means things like Ctrl+Alt+Delete (though I am not aware of a single other example).

If my interpretation is correct, this is a case of the MSDN authors including information that would be obvious to most people, while explaining it so badly that it&#039;s worse than leaving it out. My memories of &quot;Old New Thing&quot; suggest they have a tendency to repeat technical explanations that they don&#039;t fully understand and that weren&#039;t meant to be documentation.]]></description>
			<content:encoded><![CDATA[<p>I was told recently that explorer uses RegisterHotKey to create those windows key shortcuts. I&#8217;m guessing that &#8220;system level hotkeys&#8221; means things like Ctrl+Alt+Delete (though I am not aware of a single other example).</p>
<p>If my interpretation is correct, this is a case of the MSDN authors including information that would be obvious to most people, while explaining it so badly that it&#8217;s worse than leaving it out. My memories of &#8220;Old New Thing&#8221; suggest they have a tendency to repeat technical explanations that they don&#8217;t fully understand and that weren&#8217;t meant to be documentation.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Degg35		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-157843</link>

		<dc:creator><![CDATA[Degg35]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 22:12:15 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-157843</guid>

					<description><![CDATA[I&#039;m not sure I fully understand how this works, but won&#039;t setting RIDEV_NOHOTKEYS disable *all* of the hotkeys? I.e. will I be stuck in the game unless I exit via the game&#039;s menu? (I hate Quake 3 for doing that to me.)
If the game had a bug which prevented me from normally quitting the game (e.g. some sort of freeze without Windows realizing and offering me to close it), will I be stuck and have to use the reset button?]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not sure I fully understand how this works, but won&#8217;t setting RIDEV_NOHOTKEYS disable *all* of the hotkeys? I.e. will I be stuck in the game unless I exit via the game&#8217;s menu? (I hate Quake 3 for doing that to me.)<br />
If the game had a bug which prevented me from normally quitting the game (e.g. some sort of freeze without Windows realizing and offering me to close it), will I be stuck and have to use the reset button?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Casey Muratori		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-156520</link>

		<dc:creator><![CDATA[Casey Muratori]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 16:43:07 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-156520</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-155179&quot;&gt;incendiary&lt;/a&gt;.

While I appreciate the fact that Windows hotkeys tend to be a little obtuse, there are actually already hotkeys that do the same thing as a single press of the Windows key which are not dangerous as far as accidental keystrokes.  CTRL-ESC, for example, brings up the Start menu, just as a single press of the Windows key will, and that key combination will still work in Witness.  But you are unlikely to ever hit it by accident.

- Casey]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-155179">incendiary</a>.</p>
<p>While I appreciate the fact that Windows hotkeys tend to be a little obtuse, there are actually already hotkeys that do the same thing as a single press of the Windows key which are not dangerous as far as accidental keystrokes.  CTRL-ESC, for example, brings up the Start menu, just as a single press of the Windows key will, and that key combination will still work in Witness.  But you are unlikely to ever hit it by accident.</p>
<p>&#8211; Casey</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Vance Renadi		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-156033</link>

		<dc:creator><![CDATA[Vance Renadi]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 13:36:32 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-156033</guid>

					<description><![CDATA[I agree with you, the only games where I would see removal of the windows key as a feature rather than a flaw is in highly competitive multiplayer games, and I now realize about half the games I ever played weren&#039;t &#039;bugged&#039; but likely removed the capability to do something I see no reason for them to have done.]]></description>
			<content:encoded><![CDATA[<p>I agree with you, the only games where I would see removal of the windows key as a feature rather than a flaw is in highly competitive multiplayer games, and I now realize about half the games I ever played weren&#8217;t &#8216;bugged&#8217; but likely removed the capability to do something I see no reason for them to have done.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Aravind		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-156003</link>

		<dc:creator><![CDATA[Aravind]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 12:47:17 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-156003</guid>

					<description><![CDATA[&quot;... whenever you are making a modification to a piece of code, you should always leave it in a state of stability equal to or better than how you found it. And preferably the latter......&quot;

Love it!]]></description>
			<content:encoded><![CDATA[<p>&#8220;&#8230; whenever you are making a modification to a piece of code, you should always leave it in a state of stability equal to or better than how you found it. And preferably the latter&#8230;&#8230;&#8221;</p>
<p>Love it!</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Ed		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-155355</link>

		<dc:creator><![CDATA[Ed]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 06:31:19 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-155355</guid>

					<description><![CDATA[Great article!  I noted a poster that said he never had this problem!????  That&#039;s crazy, I remember hitting the Windows key in a raid and wiped!  I literally removed that key from the keyboard!  You hit the core of the problem, I can relate to so many issues similar to this in Java, thanks for the article.]]></description>
			<content:encoded><![CDATA[<p>Great article!  I noted a poster that said he never had this problem!????  That&#8217;s crazy, I remember hitting the Windows key in a raid and wiped!  I literally removed that key from the keyboard!  You hit the core of the problem, I can relate to so many issues similar to this in Java, thanks for the article.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: incendiary		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-155179</link>

		<dc:creator><![CDATA[incendiary]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 05:05:20 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-155179</guid>

					<description><![CDATA[Are you sure you actually want to disable the Windows key? I use it all the time when playing slow-paced full-screen games to get me back to the desktop while keeping the game running in the background. I can check email or whatever and then get right back to my game. Often it&#039;s the only thing that works to do so (Alt-Tab sometimes doesn&#039;t work and it&#039;s a bit messy when it does).

I&#039;m just saying, if the game is slow-paced, and the main controls aren&#039;t near the Windows key, some people may actually *want* a functioning Windows key (I&#039;ll accept that I&#039;m probably in the minority here).]]></description>
			<content:encoded><![CDATA[<p>Are you sure you actually want to disable the Windows key? I use it all the time when playing slow-paced full-screen games to get me back to the desktop while keeping the game running in the background. I can check email or whatever and then get right back to my game. Often it&#8217;s the only thing that works to do so (Alt-Tab sometimes doesn&#8217;t work and it&#8217;s a bit messy when it does).</p>
<p>I&#8217;m just saying, if the game is slow-paced, and the main controls aren&#8217;t near the Windows key, some people may actually *want* a functioning Windows key (I&#8217;ll accept that I&#8217;m probably in the minority here).</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Alexey		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-155066</link>

		<dc:creator><![CDATA[Alexey]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 04:17:21 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-155066</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-155039&quot;&gt;d&lt;/a&gt;.

In case of path separators, it was actually Unix that went against the flow. The other OSs of the time used forward slashes for passing arguments to programs, and DOS followed in their footsteps. Windows simply had to be compatible with DOS.

Really, most backwards things you find in Windows are due to their compatibility efforts.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-155039">d</a>.</p>
<p>In case of path separators, it was actually Unix that went against the flow. The other OSs of the time used forward slashes for passing arguments to programs, and DOS followed in their footsteps. Windows simply had to be compatible with DOS.</p>
<p>Really, most backwards things you find in Windows are due to their compatibility efforts.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: d		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-155065</link>

		<dc:creator><![CDATA[d]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 04:06:01 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-155065</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-155064&quot;&gt;d&lt;/a&gt;.

Eschewed it from the start, that is, apart from implementing the standard library. They didn&#039;t have a lot of choice there (if they did, I&#039;m sure we&#039;d have a read() that took a variable-length context structure with members filled with pointers to an array of fixed-size buffers, or some such nonsense).]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-155064">d</a>.</p>
<p>Eschewed it from the start, that is, apart from implementing the standard library. They didn&#8217;t have a lot of choice there (if they did, I&#8217;m sure we&#8217;d have a read() that took a variable-length context structure with members filled with pointers to an array of fixed-size buffers, or some such nonsense).</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: d		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-155064</link>

		<dc:creator><![CDATA[d]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 04:01:38 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-155064</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154493&quot;&gt;Casey Muratori&lt;/a&gt;.

More than anything else I think what&#039;s crucial to great API design is choosing the perfect amount of abstraction. When you stop and really think about them (or even better, try to design your own in an environment without them) you begin to see that a lot of standard library functions are nothing short of sublime. *nixes have kept a lot of that design philosophy to this day, whereas Windows eschewed it from the start. The more cross-platform development you do, the more this shows.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154493">Casey Muratori</a>.</p>
<p>More than anything else I think what&#8217;s crucial to great API design is choosing the perfect amount of abstraction. When you stop and really think about them (or even better, try to design your own in an environment without them) you begin to see that a lot of standard library functions are nothing short of sublime. *nixes have kept a lot of that design philosophy to this day, whereas Windows eschewed it from the start. The more cross-platform development you do, the more this shows.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: d		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-155039</link>

		<dc:creator><![CDATA[d]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 03:41:01 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-155039</guid>

					<description><![CDATA[Pretty much every back-assward thing you find in Windows can be traced back to a pathological need at 
Microsoft to be different from Unix. Why use forward slashes in paths when you can use backslashes? The time wasted on extra keystrokes escaping backslashes in paths could uncharitably be measured in lifetimes.]]></description>
			<content:encoded><![CDATA[<p>Pretty much every back-assward thing you find in Windows can be traced back to a pathological need at<br />
Microsoft to be different from Unix. Why use forward slashes in paths when you can use backslashes? The time wasted on extra keystrokes escaping backslashes in paths could uncharitably be measured in lifetimes.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Casey Muratori		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154781</link>

		<dc:creator><![CDATA[Casey Muratori]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 02:13:49 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154781</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154549&quot;&gt;Alexey&lt;/a&gt;.

On the Microsoft side, the one that comes to mind is XInput.  It&#039;s pretty reasonable.  There&#039;s probably a few things I&#039;d do differently, but it&#039;s not the kind of thing I&#039;d get in a fuss about.

The only reason it&#039;s &quot;slightly scarey&quot; (as I said in the article) is not because of the API design, but because it has (had? they may have fixed some in more recent versions) a bad bug in it where if you poll a gamepad that isn&#039;t connected, it takes a big CPU hit (ie., see my post about it here: http://mollyrocket.com/forums/viewtopic.php?t=487).

- Casey]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154549">Alexey</a>.</p>
<p>On the Microsoft side, the one that comes to mind is XInput.  It&#8217;s pretty reasonable.  There&#8217;s probably a few things I&#8217;d do differently, but it&#8217;s not the kind of thing I&#8217;d get in a fuss about.</p>
<p>The only reason it&#8217;s &#8220;slightly scarey&#8221; (as I said in the article) is not because of the API design, but because it has (had? they may have fixed some in more recent versions) a bad bug in it where if you poll a gamepad that isn&#8217;t connected, it takes a big CPU hit (ie., see my post about it here: <a href="http://mollyrocket.com/forums/viewtopic.php?t=487" rel="nofollow ugc">http://mollyrocket.com/forums/viewtopic.php?t=487</a>).</p>
<p>&#8211; Casey</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Aditya		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154565</link>

		<dc:creator><![CDATA[Aditya]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 01:29:36 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154565</guid>

					<description><![CDATA[Understood a lot about windows hook problem.. thanks for this amazing article.. :)]]></description>
			<content:encoded><![CDATA[<p>Understood a lot about windows hook problem.. thanks for this amazing article.. :)</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Alexey		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154549</link>

		<dc:creator><![CDATA[Alexey]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 01:25:56 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154549</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154494&quot;&gt;Casey Muratori&lt;/a&gt;.

Casey, could you point to an API that you do consider well-designed?]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154494">Casey Muratori</a>.</p>
<p>Casey, could you point to an API that you do consider well-designed?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Phil Wilkins		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154548</link>

		<dc:creator><![CDATA[Phil Wilkins]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 01:23:08 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154548</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154409&quot;&gt;Q&lt;/a&gt;.

Probably because every PC game written in the last ten years explicitly disables the windows keys. The key itself must be nearly 20 years old, so you&#039;d have to have been gaming for at least that long to have gone through the trauma that was losing a game because there&#039;s now a button of doom between ctrl and alt.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154409">Q</a>.</p>
<p>Probably because every PC game written in the last ten years explicitly disables the windows keys. The key itself must be nearly 20 years old, so you&#8217;d have to have been gaming for at least that long to have gone through the trauma that was losing a game because there&#8217;s now a button of doom between ctrl and alt.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: EML		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154547</link>

		<dc:creator><![CDATA[EML]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 01:08:24 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154547</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154409&quot;&gt;Q&lt;/a&gt;.

I&#039;ve seen and heard of this time and time again, in ten years of PC gaming — and even done it myself once or twice (usually on a new keyboard). Not all of us have had the privilege of playing only the most well-programmed games. ;)]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154409">Q</a>.</p>
<p>I&#8217;ve seen and heard of this time and time again, in ten years of PC gaming — and even done it myself once or twice (usually on a new keyboard). Not all of us have had the privilege of playing only the most well-programmed games. ;)</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Casey Muratori		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154495</link>

		<dc:creator><![CDATA[Casey Muratori]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 00:20:42 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154495</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154409&quot;&gt;Q&lt;/a&gt;.

If you&#039;ve never heard of anyone hitting the Windows key by mistake, you probably don&#039;t read many gaming publications :)

http://howto.cnet.com/8301-11310_39-20079677-285/how-to-disable-your-keyboard-windows-key/

http://forum.worldoftanks.com/index.php?/topic/56287-how-to-disable-the-windows-key/

http://forums.totalwar.org/vb/archive/index.php/t-21518.html

http://dev.dota2.com/archive/index.php/t-901.html

http://us.battle.net/wow/en/forum/topic/3393370279

http://webcache.googleusercontent.com/search?q=cache:bdD9fFnHMB0J:boards.cityofheroes.com/archive/index.php/t-132764.html+&#038;cd=7&#038;hl=en&#038;ct=clnk&#038;gl=us

http://www.bytegems.com/ihatethiskeydeluxe.shtml

http://lairoflurdane.wordpress.com/programming/winblocker/

I could go on and on and on, but hopefully that makes the point :)

- Casey]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154409">Q</a>.</p>
<p>If you&#8217;ve never heard of anyone hitting the Windows key by mistake, you probably don&#8217;t read many gaming publications :)</p>
<p><a href="http://howto.cnet.com/8301-11310_39-20079677-285/how-to-disable-your-keyboard-windows-key/" rel="nofollow ugc">http://howto.cnet.com/8301-11310_39-20079677-285/how-to-disable-your-keyboard-windows-key/</a></p>
<p><a href="http://forum.worldoftanks.com/index.php?/topic/56287-how-to-disable-the-windows-key/" rel="nofollow ugc">http://forum.worldoftanks.com/index.php?/topic/56287-how-to-disable-the-windows-key/</a></p>
<p><a href="http://forums.totalwar.org/vb/archive/index.php/t-21518.html" rel="nofollow ugc">http://forums.totalwar.org/vb/archive/index.php/t-21518.html</a></p>
<p><a href="http://dev.dota2.com/archive/index.php/t-901.html" rel="nofollow ugc">http://dev.dota2.com/archive/index.php/t-901.html</a></p>
<p><a href="http://us.battle.net/wow/en/forum/topic/3393370279" rel="nofollow ugc">http://us.battle.net/wow/en/forum/topic/3393370279</a></p>
<p><a href="http://webcache.googleusercontent.com/search?q=cache:bdD9fFnHMB0J:boards.cityofheroes.com/archive/index.php/t-132764.html+&#038;cd=7&#038;hl=en&#038;ct=clnk&#038;gl=us" rel="nofollow ugc">http://webcache.googleusercontent.com/search?q=cache:bdD9fFnHMB0J:boards.cityofheroes.com/archive/index.php/t-132764.html+&#038;cd=7&#038;hl=en&#038;ct=clnk&#038;gl=us</a></p>
<p><a href="http://www.bytegems.com/ihatethiskeydeluxe.shtml" rel="nofollow ugc">http://www.bytegems.com/ihatethiskeydeluxe.shtml</a></p>
<p><a href="http://lairoflurdane.wordpress.com/programming/winblocker/" rel="nofollow ugc">http://lairoflurdane.wordpress.com/programming/winblocker/</a></p>
<p>I could go on and on and on, but hopefully that makes the point :)</p>
<p>&#8211; Casey</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Casey Muratori		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154494</link>

		<dc:creator><![CDATA[Casey Muratori]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 00:14:29 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154494</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154473&quot;&gt;Simon&lt;/a&gt;.

I suspect that you an I have very different opinions of what makes a good API if you thnk Windows Run Time (Metro) is a good platform.

- Casey]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154473">Simon</a>.</p>
<p>I suspect that you an I have very different opinions of what makes a good API if you thnk Windows Run Time (Metro) is a good platform.</p>
<p>&#8211; Casey</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Casey Muratori		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154493</link>

		<dc:creator><![CDATA[Casey Muratori]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 00:13:53 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154493</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154418&quot;&gt;Seph&lt;/a&gt;.

I can&#039;t really speak to the Linux side of things yet, because I&#039;ve only just begun to work on that platform.  Talk to me in a few years when I have more Linux experience and I&#039;ll have a worthwhile perspective on that, hopefully!

- Casey]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154418">Seph</a>.</p>
<p>I can&#8217;t really speak to the Linux side of things yet, because I&#8217;ve only just begun to work on that platform.  Talk to me in a few years when I have more Linux experience and I&#8217;ll have a worthwhile perspective on that, hopefully!</p>
<p>&#8211; Casey</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Casey Muratori		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154492</link>

		<dc:creator><![CDATA[Casey Muratori]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 00:11:43 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154492</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154411&quot;&gt;Artfunkel&lt;/a&gt;.

That could certainly be the reason, but unfortunately the .NET one is even worse, because it&#039;s a poorly designed API _and_ it&#039;s slower.

- Casey]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154411">Artfunkel</a>.</p>
<p>That could certainly be the reason, but unfortunately the .NET one is even worse, because it&#8217;s a poorly designed API _and_ it&#8217;s slower.</p>
<p>&#8211; Casey</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: MondSemmel		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154474</link>

		<dc:creator><![CDATA[MondSemmel]]></dc:creator>
		<pubDate>Tue, 18 Dec 2012 23:34:12 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154474</guid>

					<description><![CDATA[That comment explains quite a lot of your rants against Windows (and I guess any other OS) on the Jeff &#038; Casey show...

That situation is a real annoyance, though it&#039;s easy to generalize from programming or MS: No matter what environment you work or live in, you are bound by its flaws, problems, and limits - say politics in general, or tax policy, or (institutionalized or just cultural) racial/gender discrimination, and so on.  Or even pesky natural laws like gravity...
But I guess as long as it&#039;s human-made, we should (and could, in theory if not in practice) try to fix these issues as far as possible.

But on that point, is there actually any OS that&#039;s genuinely great and hassle-free to program for? I guess if the answer to that one was universally &quot;yes&quot;, then everybody would use it...]]></description>
			<content:encoded><![CDATA[<p>That comment explains quite a lot of your rants against Windows (and I guess any other OS) on the Jeff &amp; Casey show&#8230;</p>
<p>That situation is a real annoyance, though it&#8217;s easy to generalize from programming or MS: No matter what environment you work or live in, you are bound by its flaws, problems, and limits &#8211; say politics in general, or tax policy, or (institutionalized or just cultural) racial/gender discrimination, and so on.  Or even pesky natural laws like gravity&#8230;<br />
But I guess as long as it&#8217;s human-made, we should (and could, in theory if not in practice) try to fix these issues as far as possible.</p>
<p>But on that point, is there actually any OS that&#8217;s genuinely great and hassle-free to program for? I guess if the answer to that one was universally &#8220;yes&#8221;, then everybody would use it&#8230;</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Simon		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154473</link>

		<dc:creator><![CDATA[Simon]]></dc:creator>
		<pubDate>Tue, 18 Dec 2012 23:31:31 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154473</guid>

					<description><![CDATA[&lt;cite&gt;So how do we get there? Honestly, I have no idea.&lt;/cite&gt;
I do: Metro apps. (or &quot;Modern apps&quot; or &quot;Windows Store apps&quot;). They used Win8 to redesign the API (WinRT). And I like the new design way better. Mostly well done API design. Especially that they only support async IO calls. Now if just everybody upgraded to Win8...]]></description>
			<content:encoded><![CDATA[<p><cite>So how do we get there? Honestly, I have no idea.</cite><br />
I do: Metro apps. (or &#8220;Modern apps&#8221; or &#8220;Windows Store apps&#8221;). They used Win8 to redesign the API (WinRT). And I like the new design way better. Mostly well done API design. Especially that they only support async IO calls. Now if just everybody upgraded to Win8&#8230;</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Seph		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154418</link>

		<dc:creator><![CDATA[Seph]]></dc:creator>
		<pubDate>Tue, 18 Dec 2012 22:47:14 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154418</guid>

					<description><![CDATA[Seeing how much the closed source nature of Windows seems to bother you, how is it on the Linux side of things?]]></description>
			<content:encoded><![CDATA[<p>Seeing how much the closed source nature of Windows seems to bother you, how is it on the Linux side of things?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Michael Bayne		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154417</link>

		<dc:creator><![CDATA[Michael Bayne]]></dc:creator>
		<pubDate>Tue, 18 Dec 2012 22:41:20 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154417</guid>

					<description><![CDATA[Having just shipped a game on both iOS and Android, I have a long list of API/platform annoyances that I had to deal with on Android, which I did not have to deal with on iOS. Whether you like Apple&#039;s walled garden or not, the APIs on iOS are, by and large, well thought out, do the right thing by default, and usually make it difficult to do the wrong thing. By contrast, many of the APIs on Android are vastly more complex to use, end up doing something annoying for the end user if you don&#039;t take the time to understand them clearly and research how to make them behave sensibly, and exhibit a great deal more &quot;accumulated cruft&quot; as they have evolved over the various Android API revisions. Add to that the annoyance that the two thousand plus devices that are &quot;supported&quot; by my game run hundreds of different versions of Android, each of which has its own uniquely buggy implementation of the Android APIs it purports to support, and you have a situation that&#039;s almost as bad as developing for Windows. :)]]></description>
			<content:encoded><![CDATA[<p>Having just shipped a game on both iOS and Android, I have a long list of API/platform annoyances that I had to deal with on Android, which I did not have to deal with on iOS. Whether you like Apple&#8217;s walled garden or not, the APIs on iOS are, by and large, well thought out, do the right thing by default, and usually make it difficult to do the wrong thing. By contrast, many of the APIs on Android are vastly more complex to use, end up doing something annoying for the end user if you don&#8217;t take the time to understand them clearly and research how to make them behave sensibly, and exhibit a great deal more &#8220;accumulated cruft&#8221; as they have evolved over the various Android API revisions. Add to that the annoyance that the two thousand plus devices that are &#8220;supported&#8221; by my game run hundreds of different versions of Android, each of which has its own uniquely buggy implementation of the Android APIs it purports to support, and you have a situation that&#8217;s almost as bad as developing for Windows. :)</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Alex Taylor		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154416</link>

		<dc:creator><![CDATA[Alex Taylor]]></dc:creator>
		<pubDate>Tue, 18 Dec 2012 22:40:35 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154416</guid>

					<description><![CDATA[At work we came across what I think is the same problem and found that &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms185330.aspx&quot; rel=&quot;nofollow&quot;&gt;disabling the Visual Studio debug hosting process&lt;/a&gt; fixed the problem. I can&#039;t say I understand why (I wasn&#039;t on the project), but those guys haven&#039;t had a problem since.]]></description>
			<content:encoded><![CDATA[<p>At work we came across what I think is the same problem and found that <a href="http://msdn.microsoft.com/en-us/library/ms185330.aspx" rel="nofollow">disabling the Visual Studio debug hosting process</a> fixed the problem. I can&#8217;t say I understand why (I wasn&#8217;t on the project), but those guys haven&#8217;t had a problem since.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Devin Raposo		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154415</link>

		<dc:creator><![CDATA[Devin Raposo]]></dc:creator>
		<pubDate>Tue, 18 Dec 2012 22:32:20 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154415</guid>

					<description><![CDATA[Yes, I think I understand. Thanks for the quick reply!]]></description>
			<content:encoded><![CDATA[<p>Yes, I think I understand. Thanks for the quick reply!</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Artfunkel		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154411</link>

		<dc:creator><![CDATA[Artfunkel]]></dc:creator>
		<pubDate>Tue, 18 Dec 2012 22:24:33 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154411</guid>

					<description><![CDATA[I have a pet theory: at least half of the reason .Net exists is the opportunity it provided to Microsoft to create a new, sane Windows API without admitting to the awfulness of the C one.]]></description>
			<content:encoded><![CDATA[<p>I have a pet theory: at least half of the reason .Net exists is the opportunity it provided to Microsoft to create a new, sane Windows API without admitting to the awfulness of the C one.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Casey Muratori		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154410</link>

		<dc:creator><![CDATA[Casey Muratori]]></dc:creator>
		<pubDate>Tue, 18 Dec 2012 22:21:13 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154410</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154408&quot;&gt;Devin Raposo&lt;/a&gt;.

Windows operates partially on a message architecture, where threads in the system have queues of messages that can come from other threads and so on.  These messages are things like WM_MOUSEMOVE, or WM_SIZE, which are messages that tell the thread that one of the windows it has created is having the mouse moved over it, or being resized, respectively.

Some of these messages, like WM_KEYDOWN, are keyboard events.  Normally they begin life somewhere in a device driver that has actually communicated with a keyboard, and Windows will see to it that the message gets moved from that origination point through to the thread that owns the window that currently has the keyboard focus.  This is the way that input works on Windows, in a nutshell, although the actual chain of command is much more complicated (as you might imagine).

One of the things Windows lets applications do is to &quot;hook&quot; into this chain of events in between where the messages originate and where they eventually end up.  A &quot;keyboard hook&quot; is a piece of code that you write that you ask Windows to put _in between_ the originator of a message and its recipient.  So when the user presses a key on the keyboard, and the device driver sees that, and tells Windows that it&#039;s time to send a keyboard event, instead of Windows putting a WM_KEYDOWN event directly into the queue of some application, it first calls the hook code.  The hook code can look at the event and decide what to do with it.  One of the things it can do, as was the case in the article, is tell windows _not_ to dispatch the event at all.

In this way, keyboard hooks can effectively suppress keypresses entirely, so that the application with the keyboard focus never actually sees them.

Does that make sense?

- Casey]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154408">Devin Raposo</a>.</p>
<p>Windows operates partially on a message architecture, where threads in the system have queues of messages that can come from other threads and so on.  These messages are things like WM_MOUSEMOVE, or WM_SIZE, which are messages that tell the thread that one of the windows it has created is having the mouse moved over it, or being resized, respectively.</p>
<p>Some of these messages, like WM_KEYDOWN, are keyboard events.  Normally they begin life somewhere in a device driver that has actually communicated with a keyboard, and Windows will see to it that the message gets moved from that origination point through to the thread that owns the window that currently has the keyboard focus.  This is the way that input works on Windows, in a nutshell, although the actual chain of command is much more complicated (as you might imagine).</p>
<p>One of the things Windows lets applications do is to &#8220;hook&#8221; into this chain of events in between where the messages originate and where they eventually end up.  A &#8220;keyboard hook&#8221; is a piece of code that you write that you ask Windows to put _in between_ the originator of a message and its recipient.  So when the user presses a key on the keyboard, and the device driver sees that, and tells Windows that it&#8217;s time to send a keyboard event, instead of Windows putting a WM_KEYDOWN event directly into the queue of some application, it first calls the hook code.  The hook code can look at the event and decide what to do with it.  One of the things it can do, as was the case in the article, is tell windows _not_ to dispatch the event at all.</p>
<p>In this way, keyboard hooks can effectively suppress keypresses entirely, so that the application with the keyboard focus never actually sees them.</p>
<p>Does that make sense?</p>
<p>&#8211; Casey</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Q		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154409</link>

		<dc:creator><![CDATA[Q]]></dc:creator>
		<pubDate>Tue, 18 Dec 2012 22:18:32 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154409</guid>

					<description><![CDATA[I have never in my 10 years of PC gaming hit the Windows key by mistake or heard of anybody doing it - and even so, it wouldn&#039;t amount to something repeatable often.

Seems to me a good waste of time. Low level keyboard hooks in games - now I&#039;ve seen everything!:)]]></description>
			<content:encoded><![CDATA[<p>I have never in my 10 years of PC gaming hit the Windows key by mistake or heard of anybody doing it &#8211; and even so, it wouldn&#8217;t amount to something repeatable often.</p>
<p>Seems to me a good waste of time. Low level keyboard hooks in games &#8211; now I&#8217;ve seen everything!:)</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Devin Raposo		</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/#comment-154408</link>

		<dc:creator><![CDATA[Devin Raposo]]></dc:creator>
		<pubDate>Tue, 18 Dec 2012 22:12:51 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976#comment-154408</guid>

					<description><![CDATA[Excellent article! Could you explain what you mean by a &quot;keyboard hook&quot;? It would help my understanding of some things you mentioned more clear. I am kind of new to *real* software development. Thanks.]]></description>
			<content:encoded><![CDATA[<p>Excellent article! Could you explain what you mean by a &#8220;keyboard hook&#8221;? It would help my understanding of some things you mentioned more clear. I am kind of new to *real* software development. Thanks.</p>
]]></content:encoded>
		
			</item>
	</channel>
</rss>
