<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SteveX Compiled &#187; Development</title>
	<atom:link href="http://blog.stevex.net/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.stevex.net</link>
	<description>Software development and other notes.</description>
	<lastBuildDate>Sun, 25 Jul 2010 17:13:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>SmugMug Uploader Take 2</title>
		<link>http://blog.stevex.net/2009/03/smugmug-uploader-take-2/</link>
		<comments>http://blog.stevex.net/2009/03/smugmug-uploader-take-2/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 11:10:30 +0000</pubDate>
		<dc:creator>stevex</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.stevex.net/?p=1342</guid>
		<description><![CDATA[I posted my AIR-based SmugMug Uploader about a year ago, and back then, I had rolled my own version of a SmugMug API client. Then I found the as3smugmuglib project on Google Code. I changed the app to work with that API instead of my own code. Because I used Cairngorm when I built the [...]]]></description>
			<content:encoded><![CDATA[<p>I posted my <a href="http://blog.stevex.net/index.php/2008/03/26/using-the-smugmug-api-from-adobe-air/">AIR-based SmugMug Uploader</a> about a year ago, and back then, I had rolled my own version of a SmugMug API client.</p>
<p>Then I found the <a href="http://code.google.com/p/as3smugmuglib/">as3smugmuglib</a> project on Google Code.  I changed the app to work with that API instead of my own code.</p>
<p>Because I used Cairngorm when I built the original app, the protocol code was isolated into the business classes (org.stevex.smug.business).  The refactoring had little impact on the rest of the project.</p>
<p>I cleaned up a couple of minor bugs as well, so here&#8217;s a new release.  It still doesn&#8217;t have any of the features that I wanted when I started this project (like a way to automatically upload new photos, or even batch uploading) but as usual I&#8217;m hoping to get back to it soon.</p>
<p>Here&#8217;s a zip file with the complete source:  <a href='http://blog.stevex.net/files/2009/03/smug1.zip'>Smug1.zip</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stevex.net/2009/03/smugmug-uploader-take-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bandwidth Donation Protocol</title>
		<link>http://blog.stevex.net/2008/12/bandwidth-donation-protocol/</link>
		<comments>http://blog.stevex.net/2008/12/bandwidth-donation-protocol/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 02:59:06 +0000</pubDate>
		<dc:creator>stevex</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.stevex.net/?p=1260</guid>
		<description><![CDATA[Bandwidth is both expensive and cheap. It&#8217;s cheap at a lot of hosts and for a lot of consumers, because providers expect we&#8217;re not going to use what we&#8217;re allocated, and yet expensive when purchased in bulk, where the assumption must be that it will all be used. Every time I hear about how expensive [...]]]></description>
			<content:encoded><![CDATA[<p>Bandwidth is both expensive and cheap.  It&#8217;s cheap at a lot of hosts and for a lot of consumers, because providers expect we&#8217;re not going to use what we&#8217;re allocated, and yet expensive when purchased in bulk, where the assumption must be that it will all be used.</p>
<p>Every time I hear about how expensive it is to run a successful podcast (like the NPR podcasts, some of which are begging for money to pay for $150k annual bandwidth bills), I think to myself, &#8220;I have spare bandwidth; I&#8217;d like to donate some&#8221;.  But there&#8217;s no mechanism for me to do that.</p>
<p>And why not?  I don&#8217;t think it would be that hard to do.  Let&#8217;s take a rough cut at it.</p>
<p>The goal is for a provider to be able to share a particular piece of content, say a podcast, with as many people as possible, and accept donated bandwidth for distributing it.</p>
<p>One possibility is BitTorrent, which does a fairly good job of this, but would require a custom client.  The biggest podcast client in the world is iTunes, and it doesn&#8217;t support BitTorrent, so any podcast that doesn&#8217;t want to lose most of its audience will stick with HTTP as the distribution protocol.  We need a way of distributing URLs that will load balance to the donated bandwidth.</p>
<p>As a donator, here&#8217;s what I want to be able to do:  Go to, say, the NPR website, and click on the &#8220;donate bandwidth&#8221; link.  At this link I&#8217;d enter the URL for my Bandwidth Donation Protocol (BDP) service, the amount of bandwidth I want to donate (in megabytes or gigabytes) and a key or password.  NPR&#8217;s service would then add me to it&#8217;s bandwidth donator pool.</p>
<p>Now when they have a podcast they want to post, they generate a URL for that podcast.  Say it&#8217;s:</p>
<p>http://npr.org/content/hypotheticalpodcast.mp3</p>
<p>Before using my donated bandwidth, they need to upload the content to me.  Their server contacts my server and says &#8220;here&#8217;s hypotheticalpodcast.mp3, and I&#8217;d like you to allocate 1 gigabyte worth of bandwidth to it&#8221;.  In return, my server would generate, say, 200 unique URLs  and return them to NPR.  Now for the next 200 requests for this content, they can 301 redirect to my URLs and distribute the content at no cost to them.  </p>
<p>Why generate the 200 URLs?  Why not just use the same URL and stop answering after 200 requests?  Because a single user downloading content might request the URL more than once (for example, picking up ranges of content), so the URL can cut off after a reasonable amount of time, but not be vulnerable to abuse by giving out the URL 500 times when only authorized to do so 200 times.</p>
<p>I&#8217;ve wanted to implement something like this for years but never had the time, so I&#8217;m throwing it out there:  What do you think?  Would it work?  Would it help the podcasters being crushed by their own success? </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stevex.net/2008/12/bandwidth-donation-protocol/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Outsourcing Commenting</title>
		<link>http://blog.stevex.net/2008/11/outsourcing-commenting/</link>
		<comments>http://blog.stevex.net/2008/11/outsourcing-commenting/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 14:15:24 +0000</pubDate>
		<dc:creator>stevex</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.stevex.net/?p=1231</guid>
		<description><![CDATA[There&#8217;s a service called Disqus that provides hosted commenting for your blog or website. My Ottawa Events site was recently hit by a deluge of spam &#8211; so much so that I had to disable commenting completely. I discovered Discus through Dave Winer&#8217;s blog, and it seems like it&#8217;s worth a shot, so I&#8217;ve enabled [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s a service called <a href="http://www.disqus.com">Disqus</a> that provides hosted commenting for your blog or website.</p>
<p>My Ottawa Events site was recently hit by a deluge of spam &#8211; so much so that I had to disable commenting completely.  I discovered Discus through <a href="http://www.scripting.com">Dave Winer&#8217;s blog</a>, and it seems like it&#8217;s worth a shot, so I&#8217;ve enabled it on the Ottawa Events site.</p>
<p>I like the idea that I can sign up for an account with Disqus and that account works on any blog or site that uses them for commenting.  These sorts of sites that provide hosted services to webmasters tend to get bought up by someone if they do a good job (as happened to FeedBurner, for example) so I&#8217;m not too worried about my comments disappearing, although that is a risk I take by letting someone else host them.  Ottawa Events content is time sensitive, and the comments aren&#8217;t valuable anymore once the event has passed, so if Disqus did disappear, I wouldn&#8217;t lose a lot of valuable content.</p>
<p>There are two services that Disqus could be providing.  One is simply managing commenting, which they&#8217;re doing, but the other is filtering spam.  I don&#8217;t know how they do at that job, but if Disqus just becomes another spam target, their value disappears.  Hopefully they&#8217;re well aware of that.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stevex.net/2008/11/outsourcing-commenting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disable (and Document) Menu Items</title>
		<link>http://blog.stevex.net/2008/07/disable-and-document-menu-items/</link>
		<comments>http://blog.stevex.net/2008/07/disable-and-document-menu-items/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 17:25:47 +0000</pubDate>
		<dc:creator>stevex</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.stevex.net/?p=1170</guid>
		<description><![CDATA[Joel posted a short article: Don&#8217;t Hide or Disable Menu Items. I think it&#8217;s bad advice. Consider Paste or Undo. If you click the Edit menu, you can tell from the enabled state of the Paste item whether or not there&#8217;s something on the clipboard that can be pasted. Same with Undo. If Save is [...]]]></description>
			<content:encoded><![CDATA[<p>Joel posted a short article:  <a href="http://www.joelonsoftware.com/items/2008/07/01.html">Don&#8217;t Hide or Disable Menu Items</a>.  I think it&#8217;s bad advice.</p>
<p>Consider Paste or Undo.  If you click the Edit menu, you can tell from the enabled state of the Paste item whether or not there&#8217;s something on the clipboard that can be pasted.  Same with Undo.  If Save is disabled it means there have been no changes since the last save.  The enabled state of these items conveys information.</p>
<p>I&#8217;d rather click Edit and see Undo greyed out, than click Edit, Undo, and have a dialog pop up telling me that there&#8217;s nothing I can undo right now.</p>
<p>It would be nice if your Help system included a description of all the menu items, and when they are available.  An lot of the documentation I&#8217;ve seen includes descriptions of menu items that add no information (&#8220;Undo:  Undoes the last operation&#8221;) and leave out valuable information like under what circumstance that item might not be available.<br />
It&#8217;s unlike Joel to post bad advice.  Perhaps he need a little <a href="http://en.wikipedia.org/wiki/Search_engine_optimization">SEO</a> and posting something obviously wrong would be a great way to get a lot of people to link to him with corrections?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stevex.net/2008/07/disable-and-document-menu-items/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Managing Coder Estimates</title>
		<link>http://blog.stevex.net/2008/05/managing-coder-estimates/</link>
		<comments>http://blog.stevex.net/2008/05/managing-coder-estimates/#comments</comments>
		<pubDate>Thu, 22 May 2008 02:51:45 +0000</pubDate>
		<dc:creator>stevex</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.stevex.net/index.php/2008/05/21/managing-coder-estimates/</guid>
		<description><![CDATA[I just submitted a little job to RentACoder (converting an ASP.NET site to PHP for easier hosting &#8211; I&#8217;m not much of a PHP developer) and part of their new wizard has a bit about estimates. You can supply a deadline, or you can ask the bidders to estimate how long the job will take, [...]]]></description>
			<content:encoded><![CDATA[<p>I just submitted a little job to <a href="http://www.rentacoder.com/">RentACoder</a> (converting an ASP.NET site to PHP for easier hosting &#8211; I&#8217;m not much of a PHP developer) and part of their new wizard has a bit about estimates.  You can supply a deadline, or you can ask the bidders to estimate how long the job will take, based on your specifications.</p>
<p>But there&#8217;s a warning:</p>
<blockquote><p>Even the best coders do not estimate accurately.  If you don&#8217;t understand and account for this, it will probably cause you unnecessary problems.</p>
<p>Do you understand that it&#8217;s wisest to multiply any coder estimate by either 5 or 2 to get a more realistic estimate?</p></blockquote>
<p>I like that.  Multiply by either 5 or 2.  Pick one.  That&#8217;s about as accurate a method as any.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stevex.net/2008/05/managing-coder-estimates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Future of IntelliSense</title>
		<link>http://blog.stevex.net/2008/03/the-future-of-intellisense/</link>
		<comments>http://blog.stevex.net/2008/03/the-future-of-intellisense/#comments</comments>
		<pubDate>Sun, 02 Mar 2008 14:12:23 +0000</pubDate>
		<dc:creator>stevex</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.stevex.net/index.php/2008/03/02/the-future-of-intellisense/</guid>
		<description><![CDATA[Here&#8217;s a blog post by Jim Springfield at Microsoft about IntelliSense in Visual Studio 10.&#160; I like to hear that IntelliSense is going to be fixed, but I&#8217;ve been hearing that for many versions of Visual Studio now, and I have a hard time believing it.&#160; IntelliSense for C++ code has always been unreliable in [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a blog post by Jim Springfield at Microsoft about <a href="http://blogs.msdn.com/vcblog/archive/2008/02/29/intellisense-part-2-the-future.aspx">IntelliSense in Visual Studio 10</a>.&nbsp; </p>
<p>I like to hear that IntelliSense is going to be fixed, but I&#8217;ve been hearing that for many versions of Visual Studio now, and I have a hard time believing it.&nbsp; IntelliSense for C++ code has always been unreliable in the projects I&#8217;ve used it on (generally massive MFC applications).</p>
<p>Remember a product called <a href="http://www.lockergnome.com/windows/2004/07/26/microsoft-lookout-for-outlook/">Lookout</a>?&nbsp; It was a very fast, reliable search engine for Outlook.&nbsp; Microsoft bought it.&nbsp; I don&#8217;t know why they bought it, because they obviously didn&#8217;t use it &#8211; with Office 2007 on Vista, searching email is not fast and not reliable.&nbsp; </p>
<p>For C++ users of Visual Studio there&#8217;s a tool called <a href="http://www.wholetomato.com/products/default.asp">Visual Assist X</a>, which is a fast, reliable IntelliSense replacement for Visual Studio.&nbsp; It extends Visual Studio in a lot of ways, many of which don&#8217;t require any changes to your workflow.&nbsp; For example, if you have a pointer and you type &#8220;pMyPtr.&#8221; as soon as you type the period, it will be replaced with a &#8220;-&gt;&#8221;.</p>
<p>One particular improvement VAssistX makes to IntelliSense that I find very useful, is you can type &#8220;pMyWnd-&gt;size&#8221; and list that appears as you type &#8220;size&#8221; includes all the relevant symbols that contain the word &#8220;size&#8221;, not just ones that start with it.</p>
<p>I&#8217;d love to see VAssistX become obsolete with Visual Studio 10, but I&#8217;m not holding my breath.&nbsp; I just hope Microsoft doesn&#8217;t buy them, so that if Microsoft&#8217;s improvements don&#8217;t deliver, Whole Tomato still can.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stevex.net/2008/03/the-future-of-intellisense/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Make Me Think</title>
		<link>http://blog.stevex.net/2008/02/dont-make-me-think/</link>
		<comments>http://blog.stevex.net/2008/02/dont-make-me-think/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 03:43:24 +0000</pubDate>
		<dc:creator>stevex</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.stevex.net/index.php/2008/02/28/dont-make-me-think/</guid>
		<description><![CDATA[I just finished reading Steve Krug&#8217;s book Don&#8217;t Make Me Think!: A Common Sense Approach to Web Usability on Safari.&#160; The first edition was written in 2000, but it&#8217;s amazing how much of it still applies.&#160; And not just to web usability. The book is about web design, and how to create sites that users [...]]]></description>
			<content:encoded><![CDATA[<p>I just finished reading Steve Krug&#8217;s book <a href="http://search.safaribooksonline.com/0321344758">Don&#8217;t Make Me Think!: A Common Sense Approach to Web Usability</a> on <a href="http://www.safaribooksonline.com/">Safari</a>.&nbsp; The first edition was written in 2000, but it&#8217;s amazing how much of it still applies.&nbsp; And not just to web usability.</p>
<p>The book is about web design, and how to create sites that users can use without thinking about them.&nbsp; Kind of like how you walk into a room and reach for the lightswitch without first looking for it, because it&#8217;s usually in the same spot, there are strong conventions that, if followed, will enable users to use your site instinctively.&nbsp; If a box looks like a search box, users will assume it&#8217;s a search box and type stuff into it.&nbsp; Get it wrong and they&#8217;ll have to think about it, and web users aren&#8217;t good at that.</p>
<p>How much of this is true in software? </p>
<p>Users are usually much more invested in the software they&#8217;re using than in most of the websites they encounter, but that doesn&#8217;t mean as UI designers we shouldn&#8217;t try to learn some of the same lessons.&nbsp; Both Microsoft and Apple published UI guidelines that helped define conventions that software developers have been using for the last 20 or so years to create applications that most users can find their way around with the lights out.</p>
<p>I have two comments on this.&nbsp; The first is that from this perspective, the current trend away from standard user interfaces is disturbing.&nbsp; IE7 takes away the menu bar in favour of a collection of toolbar buttons that each drop down a selection of menu items.&nbsp; Office 2007 provides the ribbon bar.&nbsp; iTunes has a lot of quirky UI behavour.&nbsp; Plain old applications are passé.&nbsp; </p>
<p>In some ways this is like trying to find new places to put the light switch.&nbsp; </p>
<p>My other comment, and the one I&#8217;m really more interested in (since I don&#8217;t think I&#8217;m about to stop the swing from consistent UI design to style driven UI design on my own) is that the ways Steve does usability testing can be applied to software as well.</p>
<p>Good UI should also be something you don&#8217;t have to think about.&nbsp; Unless you&#8217;re doing something completely new (and you probably aren&#8217;t), a dialog should fit the pattern of other similar dialogs well enough that the user already knows how to use it.&nbsp; And the best way to determine whether or not you&#8217;re hitting this mark is usability testing.</p>
<p>A phenomenon that Steve talks about is one where companies try to do higher quality usability testing and end up going overboard.&nbsp; By spending money on testers and studies and finding the right sample of users to test with, and coming up with extensive scripts and processes, the process becomes onerous.&nbsp; Not something you can do on a whim.&nbsp; So they end up not doing it very often.&nbsp; That&#8217;s typical of every company I&#8217;ve worked for.</p>
<p>But that&#8217;s how you should be doing it.&nbsp; Mock up a dialog, find a few users, and show it to them.&nbsp; Ask them to use it, and see how it goes.&nbsp; Do this often, and in a more or less ad-hoc manner.&nbsp; If you have questions about how new UI should work, prototype it, and then put it in front of some users with roughly the amount of computer skill you expect your target users to have, and see how they use it.&nbsp; Lather, rinse, repeat. </p>
<p>If you don&#8217;t approach it this way, you won&#8217;t do as much testing, and imperfect usability testing is still way better than none.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stevex.net/2008/02/dont-make-me-think/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Acid2 in IE8</title>
		<link>http://blog.stevex.net/2007/12/acid2-in-ie8/</link>
		<comments>http://blog.stevex.net/2007/12/acid2-in-ie8/#comments</comments>
		<pubDate>Thu, 20 Dec 2007 01:29:26 +0000</pubDate>
		<dc:creator>stevex</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://blog.stevex.net/index.php/2007/12/19/acid2-in-ie8/</guid>
		<description><![CDATA[It&#8217;s cool that Microsoft has announced that IE8 passes the Acid2 test (in &#8220;IE8 Standards Mode&#8221; &#8211; I sure hope that mode is enabled by default. But what I found interesting is how they announced it: By showing the check-in mail that signified the committing of the code that implemented the fix into the main [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s cool that Microsoft has announced that IE8 passes the <a href="http://www.webstandards.org/action/acid2/">Acid2</a> test (in &#8220;IE8 Standards Mode&#8221; &#8211; I sure hope that mode is enabled by default.</p>
<p>But what I found interesting is how they announced it:  By showing the check-in mail that signified the committing of the code that implemented the fix into the main IE source tree.  Check that out <a href="http://blogs.msdn.com/ie/archive/2007/12/19/internet-explorer-8-and-acid2-a-milestone.aspx">here</a>.</p>
<p>A few things it reveals:</p>
<ul>
<li>This fix touches a <em>lot</em> of files.  This wasn&#8217;t a simple fix.  </li>
<li>Microsoft uses <a href="http://www.perforce.com/">Perforce</a> for source code management.  This is indicated by the //depot/path syntax used for the files.</li>
<li>IE8 work is happening on a branch, called LONGHORN_IE8.  Typically new features are added to the &#8220;main branch&#8221; (which usually doesn&#8217;t have a name).  I wonder what&#8217;s on the main branch.</li>
<li>Obviously some IE work started before source file names could be more than 8 characters long.  LSTXBR1.H?</li>
<li>Microsoft uses some sort of pre-checkin code review process. This is a good sign; we use this at on my team at Adobe and I think it&#8217;s proven itself valuable.</li>
<li>No C# code in sight; IE&#8217;s core is still all unmanaged C++ code.</li>
<li>The IE devs use a mix of extensions for C++ source and header files; cxx vs cpp, .h vs .hxx.  Personally I&#8217;ve never worked on a project that used cxx and hxx, so they seem unnatural to me.</li>
</ul>
<p>Nothing earth shattering, but an interesting peek behind the scenes nonetheless.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stevex.net/2007/12/acid2-in-ie8/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MFC and real-world software</title>
		<link>http://blog.stevex.net/2007/11/mfc-and-real-world-software/</link>
		<comments>http://blog.stevex.net/2007/11/mfc-and-real-world-software/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 02:32:02 +0000</pubDate>
		<dc:creator>stevex</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://blog.stevex.net/index.php/2007/11/12/mfc-and-real-world-software/</guid>
		<description><![CDATA[It&#8217;s great to see a serious update to MFC coming.&#160; Check out this video with Pat Brenner where he describes some of the new stuff happening, with demos. I&#8217;m really torn on C++ these days.&#160; Some people believe it should basically be retired, in favour of one of the better alternatives like C# or Java, [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s great to see a serious update to MFC coming.&nbsp; Check out this <a href="http://channel9.msdn.com/ShowPost.aspx?PostID=355087">video with Pat Brenner</a> where he describes some of the new stuff happening, with demos.</p>
<p>I&#8217;m really torn on C++ these days.&nbsp; Some people believe it should basically be retired, in favour of one of the better alternatives like C# or Java, but C++ has a number of qualities that make it a truly enduring language.</p>
<p>It&#8217;s a humble language &#8211; it doesn&#8217;t impose any of its requirements on you.&nbsp; You can use a bare minimum, portable runtime and write a C++ app that can be compiled and run on almost any platform.&nbsp; When you do need to go looking for libraries, they&#8217;re out there by the hundreds of thousands.</p>
<p>Java, of course, requires a JVM, but also works to hide the platform from you.&nbsp; When you&#8217;re coding in Java, your platform is Java, but in the real world, mainstream applications need to leverage the platform they&#8217;re running on.&nbsp; Want to write a QuickLook plug-in for Mac OS X?&nbsp; Or the equivalent preview handler on Windows?&nbsp; You need to use native code.&nbsp; There are all kinds of limitations that you bump into trying to write high quality portable client applications using Java.</p>
<p>C# doesn&#8217;t have that problem as long as you stick to Windows, but that&#8217;s the killer for C#.&nbsp; You have to stick to Windows.&nbsp; With the Mac platform making a resurgence, it wouldn&#8217;t make sense for anyone with the resources to do cross-platform development to start a new app in C#.&nbsp; As long as the market for your application is big enough that 10% of sales would pay for the cost of creating portable code, it&#8217;s worth supporting the Mac.</p>
<p>With C++ you can use any UI toolkit.&nbsp; Any system level API.&nbsp; Anything.&nbsp; No limits.&nbsp; And thanks to the preprocessor, you can tune your code to the platform it has to run on.&nbsp; That&#8217;s why C++ is going to be around for a long time.</p>
<p>I&#8217;m arguing in favour of C++ but MFC is still obviously a Windows-only UI technology, what&#8217;s up with that?&nbsp; Well, often what happens in large cross-platform applications is the core of an application is portable, but the chrome is unique on each platform.&nbsp; (Or, you write some <a href="http://blogs.adobe.com/jnack/2006/12/exploring_the_new_ui.html">kickass cross-platform UI</a> that you use but not everyone has the resources for that).&nbsp; Apps with chrome targeted to the platform are almost always better than portable apps that try to look the same everywhere.</p>
<p>So it&#8217;s very good to see Microsoft recognize this and update MFC.&nbsp; Otherwise, we were destined to live with the 1995 look &amp; feel of a default MFC application for even longer (or go shopping for UI toolkits that modernize MFC, but those come with their own sets of problems &#8211; like what happens when your tool vendor stops updating the toolkit you depend on).</p>
<blockquote><p><em>&#8220;There is a larger number of MFC developers than we thought&#8221;.<br /></em> &#8211; Pat Brenner </p>
</blockquote>
<p>And it&#8217;s going to stay that way.&nbsp; So thank you for the update.&nbsp; Now where&#8217;s that improved C++ support in the IDE?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stevex.net/2007/11/mfc-and-real-world-software/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Vista 64 Still Can&#8217;t Reliably Kill Processes</title>
		<link>http://blog.stevex.net/2007/11/vista-64-still-cant-reliably-kill-processes/</link>
		<comments>http://blog.stevex.net/2007/11/vista-64-still-cant-reliably-kill-processes/#comments</comments>
		<pubDate>Fri, 02 Nov 2007 20:31:04 +0000</pubDate>
		<dc:creator>stevex</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://blog.stevex.net/index.php/2007/11/02/vista-64-still-cant-reliably-kill-processes/</guid>
		<description><![CDATA[Every release Microsoft promises something that&#8217;s going to make it so now you can really positively absolutely kill processes that you want to kill. With Vista, the feature that would help was I/O Cancellation, the ability to cancel an I/O request without having to wait, in case it was hung in the kernel.&#160; And yet.. [...]]]></description>
			<content:encoded><![CDATA[<p>Every release Microsoft promises something that&#8217;s going to make it so now you can really positively absolutely kill processes that you want to kill.</p>
<p>With Vista, the feature that would help was <a href="http://www.microsoft.com/technet/technetmag/issues/2007/02/VistaKernel/">I/O Cancellation</a>, the ability to cancel an I/O request without having to wait, in case it was hung in the kernel.&nbsp; </p>
<p>And yet.. </p>
<blockquote><p><font face="Courier New">C:\Users\stibbett&gt;taskkill /im someapp.exe /f<br />SUCCESS: The process &#8220;someapp.exe&#8221; with PID 7020 has been terminated. </font>
<p><font face="Courier New">C:\Users\stibbett&gt;taskkill /im someapp.exe /f<br />SUCCESS: The process &#8220;someapp.exe&#8221; with PID 7020 has been terminated. </font>
<p><font face="Courier New">C:\Users\stibbett&gt;taskkill /im someapp.exe /f<br />SUCCESS: The process &#8220;someapp.exe&#8221; with PID 7020 has been terminated. </font>
<p><font face="Courier New">C:\Users\stibbett&gt;taskkill /im someapp.exe /f<br />SUCCESS: The process &#8220;someapp.exe&#8221; with PID 7020 has been terminated.</font></p>
</blockquote>
<p>I think I&#8217;d be less disgruntled if taskkill could just *check* to see if the process is actually gone before gleefully announcing it&#8217;s success. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stevex.net/2007/11/vista-64-still-cant-reliably-kill-processes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
