<?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>esmithy.net</title>
	<atom:link href="http://esmithy.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://esmithy.net</link>
	<description>Stuff Hammered Out by Eric Smith</description>
	<lastBuildDate>Fri, 02 Jul 2010 20:35:17 +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>IIS Configuration with WiX and Appcmd</title>
		<link>http://esmithy.net/2010/07/02/iis-configuration-with-wix-and-appcmd/</link>
		<comments>http://esmithy.net/2010/07/02/iis-configuration-with-wix-and-appcmd/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 20:35:17 +0000</pubDate>
		<dc:creator>Eric</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://esmithy.net/?p=389</guid>
		<description><![CDATA[I recently spent some time building an install package for a web application using WiX. There are some nice IIS extensions for WiX to help with that, but they&#8217;re missing the ability to set some advanced properties, like an Application Pool&#8217;s &#8220;Enable 32 Bit Applications&#8221; property. Matt Honeycutt has a helpful posting on his blog [...]]]></description>
			<content:encoded><![CDATA[<p>I recently spent some time building an install package for a web application using WiX. There are some nice IIS extensions for WiX to help with that, but they&#8217;re missing the ability to set some advanced properties, like an Application Pool&#8217;s &#8220;Enable 32 Bit Applications&#8221; property.<br />
<span id="more-389"></span><br />
Matt Honeycutt has a <a href="http://trycatchfail.com/blog/post/WiX-Snippet-change-enable32BitAppOnWin64.aspx">helpful posting</a> on his blog about this. The basic idea is that you use a custom action to invoke Appcmd.exe and do whatever you need, and that can be done entirely with WiX markup &#8212; no separate coding required.</p>
<p>I did need to alter Matt&#8217;s approach a little, though, because it didn&#8217;t work for me as it was. I would have just commented about this on his blog, but comments are closed.</p>
<p>When I ran my installer, I got a vague error saying that the custom action had failed. Running the MSI from the command line with the logging switch, and looking at the MSI log file didn&#8217;t help. There was output saying that it was going to run the custom action, but no indication that it had failed, no result code from the Appcmd process, and nothing from stderr. It <em>did</em> show the complete command line for the action, however, so I copied it out into a command prompt and ran it. That failed saying I needed administrator privileges. Running in a command prompt started with &#8220;Run as Administrator&#8221; worked just fine.</p>
<p>It turns out that by default, custom actions impersonate the user that started the install, without the administrator elevation that the installer itself runs under. This can be changed by setting the CustomAction&#8217;s Impersonate attribute to &#8220;no&#8221;. That also required adding Execute=&#8221;deferred&#8221;, and as a result, having the custom action run before InstallFinalize rather than after.</p>
<p>Here&#8217;s what it looks like:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;InstallExecuteSequence<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Custom</span> <span style="color: #000066;">Action</span>=<span style="color: #ff0000;">&quot;ConfigureAppPools&quot;</span> <span style="color: #000066;">Before</span>=<span style="color: #ff0000;">&quot;InstallFinalize&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #339933;">&lt;![CDATA[NOT Installed AND VersionNT64 &gt;= 600]]&gt;</span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Custom<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/InstallExecuteSequence<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #808080; font-style: italic;">&lt;!-- Snip --&gt;</span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;CustomAction</span> <span style="color: #000066;">Id</span>=<span style="color: #ff0000;">&quot;ConfigureAppPools&quot;</span> <span style="color: #000066;">Execute</span>=<span style="color: #ff0000;">&quot;deferred&quot;</span> <span style="color: #000066;">Impersonate</span>=<span style="color: #ff0000;">&quot;no&quot;</span> <span style="color: #000066;">Return</span>=<span style="color: #ff0000;">&quot;check&quot;</span> <span style="color: #000066;">Directory</span>=<span style="color: #ff0000;">&quot;TARGETDIR&quot;</span> <span style="color: #000066;">ExeCommand</span>=<span style="color: #ff0000;">&quot;[SystemFolder]inetsrv\appcmd set apppool /apppool.name:&amp;quot;[APPPOOLNAME]&amp;quot; /enable32BitAppOnWin64:true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://esmithy.net/2010/07/02/iis-configuration-with-wix-and-appcmd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The NSA Questions My Lifestyle</title>
		<link>http://esmithy.net/2010/06/17/nsa-polygraph-test/</link>
		<comments>http://esmithy.net/2010/06/17/nsa-polygraph-test/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 02:04:49 +0000</pubDate>
		<dc:creator>Eric</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://esmithy.net/?p=379</guid>
		<description><![CDATA[The National Security Agency (NSA) has a video about their polygraph testing, which was critiqued by AntiPolygraph.org, and recently reported about on Slashdot. In 1991, while still a college student, I applied for a summer internship with the NSA, so I got to take one of these tests myself. The official results were &#8220;inconclusive&#8221;, but [...]]]></description>
			<content:encoded><![CDATA[<p>The National Security Agency (NSA) has a <a href="http://dssa.dss.mil/seta/broadcast_news/video_resources/polygraph_flash.html">video</a> about their polygraph testing, which was critiqued by <a href="http://www.youtube.com/watch?v=93_FDeMENN4">AntiPolygraph.org</a>, and recently <a href="http://science.slashdot.org/story/10/06/13/2049211/The-Truth-About-the-Polygraph-According-To-the-NSA">reported about on Slashdot</a>. In 1991, while still a college student, I applied for a summer internship with the NSA, so I got to take one of these tests myself. The official results were &#8220;inconclusive&#8221;, but I think they suspected that I was secretly gay.</p>
<p><span id="more-379"></span>So what drew me to the NSA? Two words: <em>computers</em> and <em>spies</em>. The recruiter told me that they had lots of fascinating jobs for brilliant computer scientists, but couldn&#8217;t tell me what they were since they were all classified. Still, <em>computers</em> and <em>spies</em>. And OK, they were going to <em>pay me</em>, which seemed like a really cool prospect.</p>
<p>I also got a free trip to Maryland for interviews and screening. For example, there was a psychological evaluation wherein they used sly and subtle questions to determine if I was suffering from some psychotic disorder, like &#8220;True or False: People are out to get me&#8221; and &#8220;True or False: I think Nixon was a good president.&#8221;</p>
<p>For one portion of the interview, I was escorted into a real working NSA building at Fort Meade. There were  red flashing siren lights on the ceiling and lots of people scurrying about yelling things like, &#8220;Red badge in the area!&#8221;  It was all pretty exciting &#8212; what kind of crisis could possibly be underway? Then I realized that it was all because of me. A &#8220;red badge&#8221; is a visitor without a security clearance, and they had to be sure no one accidentally disclosed the location of the secret box from <em>Sneakers</em> or something.</p>
<p>The polygraph test was pretty much like they say in the NSA video. They tell you word-for-word what all of the questions will be in advance, and they are all yes or no questions. The questions are in one of two categories: (1) stuff they already know, and (2) stuff they want to know. In the first category are things like my name and address &#8212; that is, &#8220;Is your name Eric James Smith?&#8221; These are all to be answered &#8220;yes&#8221;, and set a baseline. Stuff they want to know includes things like whether I&#8217;ve used illegal drugs, if I intend to divulge classified information to foreign spies, and whether I&#8217;ve engaged in any adult homosexual activity.</p>
<p>Early in the test, the examiner asked me if I lived at such and such address, to which I honestly replied, &#8220;No&#8221;. There was a little confused silence that I wasn&#8217;t allowed to remedy since I was just supposed to answer the questions. Eventually he figured out that he had read my address wrong. After that, things went pretty smoothly.</p>
<p>&#8220;Have you engaged in espionage against the United States?&#8221;</p>
<p>&#8220;No.&#8221;</p>
<p>&#8220;Have you engaged in any adult homosexual activity?&#8221;</p>
<p>&#8220;No.&#8221;</p>
<p>&#8220;Is your name Eric James Smith?&#8221;</p>
<p>&#8220;Yes.&#8221;</p>
<p>And so on. Most of the questions were repeated a few times. The one about homosexuality seemed to be coming up a lot. After answering it truthfully several times, it came up yet again. <em>Oh my gosh! He thinks I&#8217;m gay!!!</em> Somehow a simple yes or no question, when repeated enough times, starts to sound like an accusation. It&#8217;s like, &#8220;I don&#8217;t believe your last response, so let me give you another chance. The truth this time!&#8221; Did I have some kind of physiological response on that one? I&#8217;m surprised the machine didn&#8217;t burst into flames like in <em>The Simpsons</em>. Even though I&#8217;m not secretly/openly/questionably gay, I&#8217;m sure there was a big spike on the chart when I suddenly thought that <em>he</em> thought I was lying.</p>
<p>Here&#8217;s a copy of the official polygraph report, which I got by filing a FOIA request several years later (gray redactions mine, black redactions theirs):</p>
<p><center><br />
<div id="attachment_380" class="wp-caption aligncenter" style="width: 160px"><a href="http://esmithy.net/content/polygraph.jpg"><img class="size-thumbnail wp-image-380" title="Polygraph Report" src="http://esmithy.net/content/polygraph-150x150.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">Polygraph Report (Click to enlarge)</p></div><br />
</center></p>
<p>In the end, I didn&#8217;t get the job. Maybe it was because I had lived at 15 different addresses in three countries over the previous five years, along with travel to three additional countries, and nobody wanted to background check all of that for an intern. Maybe I wasn&#8217;t a brilliant enough computer scientist. Or maybe they just didn&#8217;t trust that my lifestyle was in-bounds.</p>
]]></content:encoded>
			<wfw:commentRss>http://esmithy.net/2010/06/17/nsa-polygraph-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MessageBox: Just Say Nein</title>
		<link>http://esmithy.net/2010/06/14/messagebox-just-say-nein/</link>
		<comments>http://esmithy.net/2010/06/14/messagebox-just-say-nein/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 03:28:41 +0000</pubDate>
		<dc:creator>Eric</dc:creator>
				<category><![CDATA[User Interface]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://esmithy.net/?p=374</guid>
		<description><![CDATA[The Windows MessageBox is really convenient to use. A single line of code gets you a dialog box with a caption, a message, an icon and a set of available buttons that cover a lot of possible input scenarios. Unfortunately, the text on the buttons is supplied by the system, so if you&#8217;re building an [...]]]></description>
			<content:encoded><![CDATA[<p>The Windows MessageBox is really convenient to use. A single line of code gets you a dialog box with a caption, a message, an icon and a set of available buttons that cover a lot of possible input scenarios. Unfortunately, the text on the buttons is supplied by the system, so if you&#8217;re building an application that is intended to be localized, you invariably end up with something that looks like a bug.</p>
<p><span id="more-374"></span><img class="aligncenter size-full wp-image-375" title="Semi-Translated MessageBox" src="http://esmithy.net/content/messagebox.png" alt="" width="358" height="197" /></p>
<p>You&#8217;re pretty much guaranteed to get an entry in the bug database for this. My typical response, over many years of writing Windows apps, is something like this:</p>
<blockquote><p>Dear QA engineer,</p>
<p>This dialog&#8217;s buttons are provided by the system &#8212; we don&#8217;t have control over the text. If you were running a localized version of Windows, the &#8220;Yes&#8221; and &#8220;No&#8221; buttons would be in the appropriate language. Thanks for the report, though!</p></blockquote>
<p>I&#8217;ve written that more times than I care to admit before finally thinking, &#8220;Why don&#8217;t I just write a MessageBox where the buttons are localized?&#8221; I&#8217;m starting to feel that just the savings in QA/development back-and-forth time would make the little effort worth it. And if someone wants to run your application in German, shouldn&#8217;t it all be in German regardless of the Windows settings?</p>
<p>Unfortunately other common dialogs, like file dialogs, suffer from the same problem and aren&#8217;t so easy to replicate.</p>
]]></content:encoded>
			<wfw:commentRss>http://esmithy.net/2010/06/14/messagebox-just-say-nein/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>This solution contains a web site&#8230;</title>
		<link>http://esmithy.net/2010/05/06/this-solution-contains-a-web-site/</link>
		<comments>http://esmithy.net/2010/05/06/this-solution-contains-a-web-site/#comments</comments>
		<pubDate>Thu, 06 May 2010 16:50:09 +0000</pubDate>
		<dc:creator>Eric</dc:creator>
				<category><![CDATA[Visual Studio Tips]]></category>

		<guid isPermaLink="false">http://esmithy.net/?p=361</guid>
		<description><![CDATA[I kept getting a message from Visual Studio 2008 when opening a solution saying: This solution contains a web site at &#8216;http://localhost/Services&#8217;. There is already a web site at this location on this computer. Do you wish to use this existing location for your web site (existing files will be overwritten)? It looks like the [...]]]></description>
			<content:encoded><![CDATA[<p>I kept getting a message from Visual Studio 2008 when opening a solution saying:</p>
<blockquote><p>This solution contains a web site at &#8216;http://localhost/Services&#8217;. There is already a web site at this location on this computer. Do you wish to use this existing location for your web site (existing files will be overwritten)?</p></blockquote>
<p>It looks like the (one?) cause is a corrupt solution file.</p>
<p><span id="more-361"></span><a href="http://bloggingabout.net/blogs/rick/archive/2007/12/06/quot-some-of-the-properties-associated-with-the-solution-could-not-be-read-quot.aspx" target="_blank">Many</a> <a href="http://blogs.msdn.com/rjohri/archive/2010/03/11/some-of-the-properties-associated-with-the-solution-could-not-be-read.aspx" target="_blank">people</a> <a href="http://esersahin.wordpress.com/2009/01/02/some-of-the-properties-associated-with-the-solution-could-not-be-read/" target="_blank">have</a> reported that they get a warning when opening a solution saying:</p>
<blockquote><p>Some of the properties associated with the solution could not be read.</p></blockquote>
<p>The problem in that case was that there are multiple &#8220;GlobalSection(TeamFoundationVersionControl) = preSolution&#8221; sections in the solution file. This was true for my situation as well, and repairing the .sln file seems to have fixed the prompt about an already existing web site.</p>
<p>I originally tried editing the .sln file by hand to remove the duplicate section, but then I <em>started</em> getting the &#8220;Some of the properties&#8230;&#8221; message. I think it works better to use Visual Studio to unbind and rebind the source control.</p>
]]></content:encoded>
			<wfw:commentRss>http://esmithy.net/2010/05/06/this-solution-contains-a-web-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consumed by Technology</title>
		<link>http://esmithy.net/2010/03/01/consumed-by-technology/</link>
		<comments>http://esmithy.net/2010/03/01/consumed-by-technology/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 04:19:43 +0000</pubDate>
		<dc:creator>Eric</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://esmithy.net/?p=351</guid>
		<description><![CDATA[Despite the fact that I earn a living with technology, and that even many of my leisure hours are spent in front of a computer, I&#8217;m feeling especially consumed by technology lately. By &#8220;consumed&#8221; I mean more of the &#8220;waste or burn away&#8221; sense. I&#8217;m beta testing a wireless music player right now. It&#8217;s one [...]]]></description>
			<content:encoded><![CDATA[<p>Despite the fact that I earn a living with technology, and that even many of my leisure hours are spent in front of a computer, I&#8217;m feeling especially consumed by technology lately. By &#8220;consumed&#8221; I mean more of the <a href="http://www.merriam-webster.com/dictionary/consumed">&#8220;waste or burn away&#8221; sense</a>.</p>
<p><span id="more-351"></span>I&#8217;m beta testing a wireless music player right now. It&#8217;s one of those things that&#8217;s awesome when it works &#8212; instant access to all my music, streaming music from Pandora, podcasts from MediaFly &#8212; but it unfortunately needs a lot of TLC at this stage to keep it working. Sometimes an app (MediaFly) will take the device over and only surrender with a factory reset. Sometimes a firmware update (which come fast and frequent since the device is still in development) will break something completely.</p>
<p>I got a Netgear ReadyNAS Duo for Christmas. It&#8217;s basically a little Linux computer with a big hard drive. I can play my music off it (see above), use it as a print server for my home network, and send backups to it. Again, it&#8217;s pretty cool, but getting it set up was a bit of a trick. For example, while it was fairly easy to get the print server set up. It was not as easy to figure out how to get it set up so that print jobs didn&#8217;t have a two minute delay before they were processed.</p>
<p>Another Christmas gift was an LG BD390 &#8212; a network video and Blu-Ray player. The reviews I read were all pretty glowy, but things were rocky right from the start. As soon as I got it set up, it said that there was a firmware update. I couldn&#8217;t, however, get it to actually download. The wireless connection seemed extraordinarily shaky despite having a clear line of sight to my router (maybe 25 ft away), and of all the streaming content available, only Vudu seemed to work reliably. Of course, once I got support on the phone, the firmware update worked right away.</p>
<p>After Netflix streaming worked maybe twice in fifty attempts, I got back on the phone. It was an unpleasant experience wherein the support person continued to proffer bat guano explanations as to why it wasn&#8217;t working. That&#8217;s a metaphor, by the way. Real bat guano would probably gum things up pretty bad as well. But I didn&#8217;t take it very gracefully, so he told me to try a wired connection and left it at that. It didn&#8217;t help. It&#8217;s now waiting for FedEx to ship off on what I hope to be a quest of self-enlightenment at the repair center.</p>
<p>Finally I&#8217;ve been trying to figure out how to manage all my passwords in such a way that they are accessible on my Palm Pre. I&#8217;ve used KeePass for years with a synchronized folder that makes the database available at work, too. There&#8217;s no client for webOS, though, and no particularly easy way to sync the database even if there were. I looked at <a href="http://passpack.com/">Passpack</a> for a while, which I can access through the Pre&#8217;s browser, but it is kind of slow and not very mobile friendly. I&#8217;ve been trying <a href="http://lastpass.com/">LastPass</a> more recently since they have a beta version of a webOS client. It doesn&#8217;t quite feel right to me, though. For one, they need desperately to get a graphic designer. Also, the desktop application is a browser plug-in, and there are lots of information bar prompts like the browser&#8217;s built-in password manager, only more confusing. There&#8217;s a distinct loss of control. For example, I changed my password on a site using LastPass and it didn&#8217;t update the existing site entry. Instead it created a new, uncategorized site entry with the new password. I don&#8217;t think it&#8217;s going to work out.</p>
<p>So, I feel like I&#8217;m living this sort of meta-life. I&#8217;m not enjoying music, I&#8217;m fiddling with the player. I&#8217;m not watching movies, I&#8217;m arguing with tech support. I&#8217;m not visiting interesting web sites, I&#8217;m trying to get ubiquitous access to my passwords. (I&#8217;m not sure what the real-life activity is for a NAS. Maybe futzing with it <em>is</em> the &#8220;real&#8221; activity.) But in spite of all this, I still find myself thinking, &#8220;How can I get a computer into the kitchen? It&#8217;d be nice to replace my kids&#8217; magnetic chore chart with a slick application that rotates everything around automatically&#8230;&#8221; Maybe it&#8217;s a disease of some kind.</p>
]]></content:encoded>
			<wfw:commentRss>http://esmithy.net/2010/03/01/consumed-by-technology/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>&#8220;It&#8217;s Just UI&#8221;</title>
		<link>http://esmithy.net/2010/01/30/its-just-ui/</link>
		<comments>http://esmithy.net/2010/01/30/its-just-ui/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 05:41:32 +0000</pubDate>
		<dc:creator>Eric</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://esmithy.net/?p=348</guid>
		<description><![CDATA[Maybe I&#8217;ve just imagined this &#8212; created my own straw man to take down &#8212; but I&#8217;ve sometimes sensed some disparagement of user interface programming. &#8220;It&#8217;s just UI,&#8221; the architect will say. &#8220;It&#8217;s not like it&#8217;s a hard or interesting part of the system.&#8221; As I&#8217;ve done more and more UI development lately, I&#8217;ve had [...]]]></description>
			<content:encoded><![CDATA[<p>Maybe I&#8217;ve just imagined this &#8212; created my own straw man to take down &#8212; but I&#8217;ve sometimes sensed some disparagement of user interface programming. &#8220;It&#8217;s just UI,&#8221; the architect will say. &#8220;It&#8217;s not like it&#8217;s a hard or interesting part of the system.&#8221; As I&#8217;ve done more and more UI development lately, I&#8217;ve had to consider if this is the direction I want my career to go.<br />
<span id="more-348"></span><br />
Some UIs amount to binding a data grid to a database. In fact, based on Microsoft&#8217;s tools and examples, there are apparently a lot of those. In such cases, I agree, the UI isn&#8217;t terribly interesting. But to build a user interface for more sophisticated applications is a real challenge. Here are some of the reasons why.</p>
<p><strong>Graphic design</strong> &#8211; Even when you&#8217;ve got a talented graphic designer helping out, you usually don&#8217;t get handed everything you need, or everything exactly perfect. You&#8217;ll need to fill in the gaps to get a complete, attractive interface. Being able to fire up Illustrator to tweak and extrapolate, or layout a clean window are  good skills to have. Modern UIs also include animations, which are hard to get from a static &#8220;comp&#8221;.</p>
<p><strong> Validation</strong> &#8211; It is reasonable for the model to establish preconditions for methods. When user input is involved, there are few preconditions. Welcome to the wild west. Sure, you can insist that users enter phone numbers without any dashes, spaces, dots, parentheses or other corruptions of data purity, but if I&#8217;m the user, that just ticks me off.</p>
<p><strong> Error reporting</strong> &#8211; The buck stops here. The model can just throw an exception if something goes wrong, but presenting a meaningful and actionable error message to the user is hard.</p>
<p><strong> Threading</strong> &#8211; For Windows applications, all interaction with a window must happen on the thread that created the window. Yet to keep the UI responsive, you shouldn&#8217;t do time-consuming operations on the UI thread, forcing the introduction of other threads. You can see something slightly at odds here.</p>
<p><strong>Usability</strong> &#8211; Small design and implementation decisions can greatly impact usability, and what is easiest to code is frequently not what is easiest to use. Most applications involve tasks with a fair amount of complexity, and making them as simple as possible is way harder than laying all of the complexities at the feet of the user.</p>
<p><strong>Testability</strong> &#8211; There is  a gulf associated with what it means for UI to work. On one side, you have &#8220;functions as specified without defects&#8221;. On the other, you have &#8220;effectively supports the user in his/her goals&#8221;. Furthermore, it is really hard to unit test UI code, which sort of leads to the next challenge&#8230;</p>
<p><strong>Pattern ambiguity</strong> &#8211; I remember reading once (I wish I could remember the source) that if you ask 10 developers what the Model-View-Controller pattern is, you&#8217;ll get 11 different answers. While the most touted pattern in UI development, Model-View-Controller has so many variations that it can be daunting to figure out what it even means, and a fair amount of experience to begin to understand when a particular variation is most appropriate.</p>
<p><strong>Localization</strong> &#8211; Model code needs to be culture-sensitive, but the biggest impact of localization is in the UI. Some frameworks make it easier than others, but having a UI that lays out equally well with &#8220;Archive Video on PC&#8221; and &#8220;Archivierung aufgezeichneter Videos auf dem PC&#8221; is tricky.</p>
<p><strong> HCI priesthood</strong> &#8211; If you have a CS degree and actually write <em>code</em>, just give up now, you&#8217;ll never get it. Or so I&#8217;ve been told, but I still believe in the enlightened engineer.</p>
<p>I&#8217;m thinking that there&#8217;s enough challenge here to be interesting and skills that will continue to be in demand.</p>
]]></content:encoded>
			<wfw:commentRss>http://esmithy.net/2010/01/30/its-just-ui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Succumbing to the Smartphone Siren</title>
		<link>http://esmithy.net/2010/01/05/succumbing-to-the-smartphone-siren/</link>
		<comments>http://esmithy.net/2010/01/05/succumbing-to-the-smartphone-siren/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 03:59:22 +0000</pubDate>
		<dc:creator>Eric</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://esmithy.net/?p=279</guid>
		<description><![CDATA[So shortly after crowing about how cheaply I was getting cell phone service, I&#8217;ve sailed headlong into the rocks of an $80 a month smart phone plan. In spite of all the Android buzz of late, I went with the Palm Pre. As I&#8217;ve posted before, I used to be a big Palm enthusiast but [...]]]></description>
			<content:encoded><![CDATA[<p>So shortly after crowing about <a href="/2009/02/21/cell-phone-service-for-the-non-garrulous/">how cheaply I was getting cell phone service</a>, I&#8217;ve sailed headlong into the rocks of an $80 a month smart phone plan. In spite of all the Android buzz of late, I went with the Palm Pre.</p>
<p><span id="more-279"></span>As I&#8217;ve <a href="/2005/06/25/dell-axim-x50v-in-a-palm-users-hands/">posted before</a>, I used to be a big Palm enthusiast but switched to Windows Mobile about five years ago. Palm seemed to be falling apart, and Microsoft seemed about poised to do great things. I was wrong &#8212; at least about Microsoft. Windows Mobile is powerful, but it&#8217;s not <em>enjoyable</em>. I think that user experience has been prioritized somewhere below an integrated nose-hair trimmer, and I credit Windows mobile with turning me from an engaged mobile enthusiast into a passive mobile user because of its stagnation.</p>
<p>It&#8217;s refreshing to be a Palm user again, with the Palm Pre bringing back the elegance and simplicity of those earlier devices combined with the modernness appropriate for the years that have elapsed since then. Palm&#8217;s webOS, the underlying Pre operating system, is beautiful. It also gets updated, unlike Windows Mobile. If something doesn&#8217;t seem quite right with webOS, there&#8217;s at least hope that it will get fixed with a simple, over-the-air and in-place upgrade.</p>
<p>The Pre itself is also an example of first-class industrial design. It feels good and looks good. Contrast that with the Motorola Droid, which is truly ugly. Maybe they thought the boxy form factor would go with the robot branding or something. The Cylon monotoning, &#8220;Droid&#8221; when you turn the thing on is pure cheese. The Nexus One looks more promising, though.</p>
<p>Aside from things I&#8217;ve already mentioned, here a few other things that make me happy about the Pre and webOS:</p>
<ul>
<li>Synergy &#8211; I&#8217;m pretty careful with keeping contacts and email organized, but Synergy changes the game. It does the consolidation for you so you don&#8217;t have to be so, um, anal.</li>
<li>Multitasking &#8211; Of course, Windows Mobile can do that just fine, but webOS&#8217;s card view makes it so simple to work with.</li>
<li>Touchstone &#8211; The Touchstone charger is great &#8212; no cable to plug in, not even a dock. You just set your phone on it and pick it up fully charged later.</li>
<li>Ares &#8211; The online IDE that is in beta right now is pretty impressive. I&#8217;ve been doing a little development, and dropped Eclipse like a rock when Ares showed up. Ares, like webOS, is simple and elegant. Maybe a little <em>too</em> simple right now.</li>
</ul>
<p>And a few things that need improvement:</p>
<ul>
<li>Missing apps &#8211; I need a reader for LDS scriptures, a decent place to put my passwords, and a way to sync my &#8220;to do&#8221; list to a desktop machine (preferably to Google tasks, though I&#8217;m not sure if they have an API yet).</li>
<li>Smoothness &#8211; The iPhone is soooo smoooooth in its operation. The Pre lags a bit sometimes.</li>
<li>Bedroom manners &#8211; Although the Touchstone charger is great, it sometimes doesn&#8217;t behave nicely on your nightstand. The screen turns on or the &#8220;charging&#8221; tone rings during the night.</li>
<li>Dev confusion &#8211; While I think Ares is a nice step forward, it has been hard to really learn WebOS development. I&#8217;m a software engineer, doing causal exploration of the SDK, and sometimes things just seem disjoint. I think I read somewhere that Palm changed the development model late in the game, and sometimes the documentation seems fragmented and the examples possibly obsolete. The one webOS book&#8217;s reviewers say it is all about the old model, so it is almost unusable.</li>
</ul>
<p>So&#8230; Why didn&#8217;t I just get an iPhone? I could probably come up with some good rational reasons, but the biggest ones are more emotional.</p>
<ol>
<li>As I said, having had such a great experience with Palm in the past, the Pre makes me feel warm and fuzzy.</li>
<li>iTunes&#8230; no thanks.</li>
<li>I&#8217;m an anti-herd kind of guy. If everybody is doing something (namely, buying iPhones) it makes me want to do something different. Yes, totally irrational.</li>
</ol>
<p><center><br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/CZGIn9bpALo&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/CZGIn9bpALo&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://esmithy.net/2010/01/05/succumbing-to-the-smartphone-siren/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Depths of Printer Evil</title>
		<link>http://esmithy.net/2010/01/04/new-depths-of-printer-evil/</link>
		<comments>http://esmithy.net/2010/01/04/new-depths-of-printer-evil/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 03:37:11 +0000</pubDate>
		<dc:creator>Eric</dc:creator>
				<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">http://esmithy.net/?p=335</guid>
		<description><![CDATA[I frequently say, only half-jokingly, that printers are evil. Actually I love my HP LaserJet 1320, but my Canon Pixma 620 is just plain E-V-I-L. OK, pretty much any inkjet printer is devil-spawn, with the well-cited fact that printer ink is the most expensive liquid on the planet. Canon has taken the Pixma to a [...]]]></description>
			<content:encoded><![CDATA[<p>I frequently say, only half-jokingly, that printers are evil. Actually I love my HP LaserJet 1320, but my Canon Pixma 620 is just plain E-V-I-L.</p>
<p><span id="more-335"></span>OK, pretty much any inkjet printer is devil-spawn, with the well-cited fact that printer ink is the most expensive liquid on the planet. Canon has taken the Pixma to a new level, though, because while it is a combination printer/scanner/fax, you can&#8217;t do <em>anything</em> useful if you&#8217;re out of ink. Notably, in spite of the fact that no bits need converting to atoms when scanning an image to your PC, you just can&#8217;t do it if you&#8217;re out of ink. All you get is a message on the display stating, &#8220;The following ink has run out. Replace the ink tank.&#8221;</p>
<p>Yeah, the printer/scanner is pretty good when you&#8217;re willing to open a vein to fill the ink, but disabling non-ink functions by fiat is just infuriating.</p>
]]></content:encoded>
			<wfw:commentRss>http://esmithy.net/2010/01/04/new-depths-of-printer-evil/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>.NET Color Struct Equality</title>
		<link>http://esmithy.net/2009/12/16/net-color-struct-equality/</link>
		<comments>http://esmithy.net/2009/12/16/net-color-struct-equality/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 00:47:55 +0000</pubDate>
		<dc:creator>Eric</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Bafflers]]></category>

		<guid isPermaLink="false">http://esmithy.net/?p=322</guid>
		<description><![CDATA[When is white not white? When one is Color.White and the other is Color.FromArgb(0xff, 0xff, 0xff, 0xff). I was trying to data bind a list of colors to a ComboBox and have the SelectedValue property bound to a particular color. The frustrating thing was that even though there was a color matching the &#8220;selected&#8221; color [...]]]></description>
			<content:encoded><![CDATA[<p>When is white not white? When one is Color.White and the other is Color.FromArgb(0xff, 0xff, 0xff, 0xff).</p>
<p><span id="more-322"></span>I was trying to data bind a list of colors to a ComboBox and have the SelectedValue property bound to a particular color. The frustrating thing was that even though there was a color matching the &#8220;selected&#8221; color in the list, the ComboBox never had a selection when first displayed.</p>
<p>Eventually I discovered that my &#8220;selected&#8221; color was white (all color components at 255) while the list&#8217;s equivalent was Color.White. Careful reading of the <a href="http://msdn.microsoft.com/en-us/library/e03x8ct2.aspx">Color.Equals</a> documentation tells me that I was silly to think that white is white or black is black:</p>
<blockquote><p><span> <span><a id="ctl00_MTCS_main_ctl36_ctl00_ctl03" onclick="javascript:Track('ctl00_MTCS_main_ctl36_ctl00_contenthere|ctl00_MTCS_main_ctl36_ctl00_ctl03',this);" href="http://msdn.microsoft.com/en-us/library/system.drawing.color.black.aspx">Black</a></span> and <span class="code">FromArgb(0,0,0)</span> are not considered equal, since <span><a id="ctl00_MTCS_main_ctl36_ctl00_ctl04" onclick="javascript:Track('ctl00_MTCS_main_ctl36_ctl00_contenthere|ctl00_MTCS_main_ctl36_ctl00_ctl04',this);" href="http://msdn.microsoft.com/en-us/library/system.drawing.color.black.aspx">Black</a></span> is a named color and <span class="code">FromArgb(0,0,0)</span> is not.</span></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://esmithy.net/2009/12/16/net-color-struct-equality/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Defeating Antivirus System Pro</title>
		<link>http://esmithy.net/2009/12/03/defeating-antivirus-system-pro/</link>
		<comments>http://esmithy.net/2009/12/03/defeating-antivirus-system-pro/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 04:46:51 +0000</pubDate>
		<dc:creator>Eric</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://esmithy.net/?p=318</guid>
		<description><![CDATA[Antivirus System Pro is an irksome piece of malware that holds your computer hostage until you pay a ransom. It is nothing short of extortion. I just spent a few evenings removing it from a friend&#8217;s computer, and the dozens of articles on the web (and even YouTube videos) were all wrong about how to [...]]]></description>
			<content:encoded><![CDATA[<p>Antivirus System Pro is an irksome piece of malware that holds your computer hostage until you pay a ransom. It is nothing short of extortion. I just spent a few evenings removing it from a friend&#8217;s computer, and the dozens of articles on the web (and even YouTube videos) were all wrong about how to get rid of this instance.<br />
<span id="more-318"></span><br />
The program throws up all kinds of messages saying that the computer is infected, and occasionally sends Internet Explorer off to a porn or Viagra site for good measure &#8212; I guess to make the &#8220;infection&#8221; seem more urgent. It also prevents new processes from starting, except for IE, since they presumably need to leave a way open for you to pay your ransom. The program sets up a proxy server for IE, though, so you can&#8217;t get anywhere but Antivirus System Pro&#8217;s site.</p>
<p>Usually in a situation like this, I use the <a href="http://www.ubcd4win.com/">Ultimate Boot CD for Windows</a>. The scans I ran that way didn&#8217;t find anything, though.</p>
<p>Other information on the internet suggests booting the system in Safe Mode and running <a href="http://www.malwarebytes.org/mbam.php">Malwarebytes Anti-Malware</a> to clean the system. This also didn&#8217;t work.</p>
<p>There are several sites that give <a href="http://www.ehow.com/how_5146071_manually-remove-antivirus-system-pro.html">manual removal instructions</a>. On my friend&#8217;s system, none of the binaries or registry keys from the instructions existed.</p>
<p>Here&#8217;s what I did that appears to have worked:</p>
<ol>
<li>Get a copy of <a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx">Process Explorer</a>, probably easiest done on another machine and put on a USB flash drive.</li>
<li>Boot the computer normally.</li>
<li>Let the race begin. Start Process Explorer before Antivirus System Pro does.</li>
<li>Bring up Antivirus System Pro&#8217;s scan window.</li>
<li>Use the Process Explorer&#8217;s &#8220;Find Window&#8217;s Process&#8221; tool by dragging it over the scan window.</li>
<li>Now you know the executable that is Antivirus System Pro, which was bsuhsysgaurd.exe on my friend&#8217;s machine.</li>
<li>By showing the &#8220;Image Path&#8221; column in Process Explorer, you can also see where it is running from.</li>
<li>Go ahead and kill the process. It feels good.</li>
<li>Delete the executable.</li>
<li>Search the registry for references to the executable and delete those (such as from Start keys).</li>
<li>Get rid of the proxy in IE by going to <strong>Tools &gt; Internet Options &gt; Connections</strong> &gt; <strong>LAN Settings</strong> and uncheck &#8220;Use a proxy server for your LAN&#8221;.</li>
</ol>
<p>I also installed the newly free <a href="http://www.microsoft.com/Security_Essentials/">Microsoft Security Essentials</a> on my friend&#8217;s machine, since although there was a version of MacAfee on there, it was FUBAR. I&#8217;m not sure if that was something Antivirus System Pro had accomplished or if it being that way was what let the malware through in the first place.</p>
<p>All seems well for now&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://esmithy.net/2009/12/03/defeating-antivirus-system-pro/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
