<?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>Huddled Masses &#187; Rants</title>
	<atom:link href="http://huddledmasses.org/tag/rants/feed/" rel="self" type="application/rss+xml" />
	<link>http://huddledmasses.org</link>
	<description>You can do more than breathe for free...</description>
	<lastBuildDate>Fri, 27 Apr 2012 05:42:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<cloud domain='huddledmasses.org' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>PowerShell Modules, Metadata, and Mysteries</title>
		<link>http://huddledmasses.org/powershell-modules-metadata-and-mysteries/</link>
		<comments>http://huddledmasses.org/powershell-modules-metadata-and-mysteries/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 00:09:34 +0000</pubDate>
		<dc:creator>Joel 'Jaykul' Bennett</dc:creator>
				<category><![CDATA[Huddled]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://huddledmasses.org/powershell-modules-metadata-and-mysteries/</guid>
		<description><![CDATA[I&#8217;ve finally finished the first public release of PoshWpf, and was getting ready to ship it as part of a new release of my PowerBoots module. The idea is that I need PoshWpf itself to be a stand-alone module so that it can be used in production with PowerShell 1.0, until such time as PowerShell [...]]]></description>
			<content:encoded><![CDATA[	<p>I&#8217;ve finally finished the first public release of PoshWpf, and was getting ready to ship it as part of a new release of my <a href="/PowerBoots">PowerBoots</a> module.  The idea is that I need PoshWpf itself to be a stand-alone module so that it can be used in production with PowerShell 1.0, until such time as PowerShell 2.0 goes gold, and we can get that into production use, so we can use PowerBoots.  PowerBoots is a script module, and it uses dynamic parameters, so most of it can&#8217;t really be done in v1, but you can use PoshWpf as a snapin, including the New-PowerBoots cmdlet, to do asynchronous multi-threaded UIs like my &#8220;ping monitor demo.&#8221;</p>

	<p>So I need to update the .psd1 Module Metadata file for PowerBoots to include PoshWpf &#8230; I <a href="http://www.nivot.org/2008/12/30/PowerShellCTP3AndModuleManifests.aspx">read up</a> on Oisin Grehan&#8217;s blog about the possible properties in the module manifest, and decide that I could do this by packaging PoshWpf as a NestedModule in PowerBoots.  There&#8217;s not a whole lot of point in distributing PoshWpf as it&#8217;s own module &#8212; Version 1 users will need to install it as a Snapin anyway, since PowerShell 1.0 doesn&#8217;t support modules, and I expect PowerShell 2.0 users to use it with PowerBoots.</p>

	<h2>Nested Modules</h2>

	<p>So I open up the PowerBoots.psd1 file, and add the line: <code>NestedModules=&#34;PoshWpf&#34;</code> and fire up PowerShell and run <code>Import-Module PowerBoots</code> &#8230; and get this Error:<br />
<span class="em2">Import-Module : The module to process &#8216;PowerBoots&#8217;, listed in module manifest &#8216;C:\Users\Joel\Documents\WindowsPowerShell\Modules\PowerBoots\PowerBoots.psd1&#8217; was not processed because no valid module was found in any module directory.</span></p>

	<p>Now, I have no idea what that&#8217;s supposed to mean, except that I know the way that the PowerBoots.psm1 script gets parsed is that the PowerBoots.psd1 metadata includes a line: <code>ModuleToProcess=&#34;PowerBoots.psm1&#34;</code> &#8230; I don&#8217;t know why the error doesn&#8217;t say &#8220;.psm1&#8221;, and I don&#8217;t know why <em>that</em> would be the error when what I added was the PoshWpf line, but I comment my line out and everything works, so I decide that maybe I need to say &#8220;PoshWpf.dll&#8221; (following the example that works of loading the PowerBoots script by specifying the full extension).</p>

	<p>So I move PoshWpf.dll from it&#8217;s subdirectory right into the PowerBoots folder, and I change my line to: <code>NestedModules=&#34;PoshWpf.dll&#34;</code> and fire up PowerShell and run <code>Import-Module PowerBoots</code> &#8230; and get this Error: <span class="em2">Import-Module : An item with the same key has already been added.</span></p>

	<p>Wow, I&#8217;m two for two: two attempts to load my module, two <em>completely incomprehensible</em> errors.</p>

<span id="more-1040"></span>

	<h2>Required Modules</h2>

	<p>I noticed on Oisin&#8217;s site earlier that he mentioned something I didn&#8217;t know.  There&#8217;s a <code>RequiredModules</code> property for module metadata, which I knew about, but although it will not try to load the module, Oisin&#8217;s post mentions that &#8220;this could optionally be done using a script in ScriptsToProcess&#8221; ... so I check that out.</p>

	<p>I put PoshWpf.dll in it&#8217;s own Module folder: C:\Users\Joel\Documents\WindowsPowerShell\Modules\PoshWpf and I check that I can load it: <code>Import-Module PoshWpf</code> and then check that I can load PowerBoots: <code>Import-Module PowerBoots</code>.  Success!  Now to put in a script, with just that one line. I call it &#8220;PoshWpf.ps1&#8221; and put it the PowerBoots folder, and then add this line: <code>ScriptsToProcess=&#34;PoshWpf.ps1&#34;</code> and &#8230; get another error <span class="em2">Import-Module : The required module &#8216;PoshWpf&#8217; is not loaded. Load the module or remove the module from &#8216;RequiredModules&#8217; in the file &#8216;C:\Users\Joel\Documents\WindowsPowerShell\Modules\PowerBoots\PowerBoots.psd1&#8217;.</span></p>

	<p>This time it&#8217;s obvious: despite what Oisin said, the script doesn&#8217;t run before the requirement is validated, so it doesn&#8217;t work the way I thought he meant.  I switch the order of the lines around to see if it makes any difference, but it doesn&#8217;t.  I decide that if I can just load the PoshWpf module, maybe I don&#8217;t care if it&#8217;s marked as &#8220;required&#8221; (it&#8217;s not technically required, you can still use Out-Boots &#8212; it&#8217;s just deprecated).  So I comment out the requirement &#8230; and that works.</p>

	<h2>But that&#8217;s not nested </h2>

	<p>So at this point I&#8217;m almost ready to declare this a partial success and move on.  But I&#8217;m an obsessive guy, and I don&#8217;t like the fact that people who don&#8217;t read this whole article won&#8217;t know how to get a list of all the PowerBoots modules (ie: they have to run <code>Get-Command -Module PowerBoots, PoshWpf</code> because the modules are completely separate, as far as PowerShell is concerned). So I really wanted to make it a nested module.</p>

	<blockquote>
		<p>Somewhere around this point, I went to bed.  When I woke up, I was having a conversation with someone on <span class="caps">IRC</span> that made me think of using @() notation&#8230;</p>
	</blockquote>

	<p>So I went back to the beginning and try the line as: NestedModules=@("PoshWpf") but I still got the same error as before: <span class="em2">Import-Module : The module to process &#8216;PowerBoots&#8217;, listed in module manifest &#8216;C:\Users\Joel\Documents\WindowsPowerShell\Modules\PowerBoots\PowerBoots.psd1&#8217; was not processed because no valid module was found in any module directory.</span> This time I got curious, so I ran it with -Debug and -Verbose on, and suddenly I was even more confused.  The verbose output starts with the news that the loader is loading <strong>both</strong> PowerBoots.psd1 and PowerBoots.psm1, and then lists all of the functions created by PowerBoots.psm1 &#8230;</p>

	<p>After a little digging, it&#8217;s clear that what they meant was that PoshWpf wasn&#8217;t being loaded &#8230; because PowerBoots itself is loaded fine.  The error message is just completely <strong>wrong</strong>, and very frustrating.  So now I&#8217;m thinking maybe I&#8217;m just not specifying the path to the nested module right&#8230;</p>

	<p>I tried putting &#8220;.\PoshWpf&#8221; (since at this point I have PoshWpf in a subfolder of PowerBoots), and I got the old <span class="em2">Import-Module : An item with the same key has already been added</span> error again! <strong>Aarrgh</strong></p>

	<h2>Losing patience</h2>

	<p>In frustration, I changed my profile to pre-set $VerbosePreference and $DebugPreference and $WarningPreference to &#8220;Continue&#8221; so that I could get as much information as possible (since I was having to restart PowerShell to be sure that the &#8220;item with the same key&#8221; error wasn&#8217;t fake). The next thing I tried was to set the full path to the dll: <code>NestedModules=&#34;PoshWpf\PoshWpf.dll&#34;</code> and suddenly it seemed to work.  The <strong>Verbose</strong> output included the exporint and importing of the cmdlets from PoshWpf &#8230; but I was still getting the &#8220;item with the same key&#8221; error at the end.</p>

	<p>That made me kind-of curious, since the error appears to terminate loading, so to aid in debugging I commented out some code in my PowerBoots module, because that .psm1 file exports hundreds of functions, which makes it hard to tell exactly what&#8217;s happening&#8230;  and discovered that the functions from PoshWpf.dll are being double-imported &#8230; so that&#8217;s probably what caused the duplicate key error.  I try a few things, and finally resort to <code>Set-PSDebug -Step</code> &#8230;</p>

	<p>Only to discover that when the PoshWpf.psd1 file says: <code>ExportedCmdlets=&#34;Out-Wpf&#34;</code>, the system seems to export and import <em>all</em> of the cmdlets&#8230; plus all the functions from the parent module that were already exported! I have no idea what&#8217;s going on, so I&#8217;m blogging, and contacting some MVPs, maybe they&#8217;ve seen more info than I have.</p>

	<h3> <img src='http://huddledmasses.org/wordpress/wp-includes/' alt='[new]' class='wp-smiley' />  A solution!</h3>

	<p>After talking to a couple people, it&#8217;s pretty clear that what I&#8217;m doing should work, but doesn&#8217;t. I switch back to my earlier attempt: move PoshWpf.dll into the root PowerBoots directory, and set the <code>NestedModules=&#34;PoshWpf&#34;</code> &#8230; of course I get the same error as before, but this time I&#8217;m running in full verbose, debug and trace mode, and I can see that all the cmdlets are actually being loaded, but the script functions are being hit oddly.</p>

	<p>In a fit of confusion I try commenting out my <code>ModuleToProcess=&#34;PowerBoots.psm1&#34;</code> line, and I put the script module into the nested modules list: <code>NestedModules=&#34;PoshWpf&#34;,&#34;PowerBoots.psm1&#34;</code> &#8230; and suddenly it <em>just works</em>.  I uncomment the function generation in PowerBoots.psm1, and it appears we&#8217;re good to go.  I can&#8217;t decide if this is a bug, or just a problem of missing documentation.  In any case, loading bot the psm1 and dll as nested modules works, and causes all of the functions and cmdlets to show up when I run <code>Get-Command -Module PowerBoots</code>, which is really the important part.  Case closed &#8212; I&#8217;ll just have to write up something on connect to see what the Microsoft team says about fixing these error messages and documenting how on earth we&#8217;re supposed to use module metadata.</p>]]></content:encoded>
			<wfw:commentRss>http://huddledmasses.org/powershell-modules-metadata-and-mysteries/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Rage Against the Design</title>
		<link>http://huddledmasses.org/rage-against-the-design/</link>
		<comments>http://huddledmasses.org/rage-against-the-design/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 17:52:30 +0000</pubDate>
		<dc:creator>Joel 'Jaykul' Bennett</dc:creator>
				<category><![CDATA[Huddled]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Bugs]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://huddledmasses.org/rage-against-the-design/</guid>
		<description><![CDATA[So we found a problem recently with a certain scripting language&#8217;s argument parsing: function Test-Argument&#40;$a&#41; &#123; &#160; &#160;$a.GetType&#40;&#41;.FullName &#125; &#91;Test 1&#93;: Test-Argument 4 System.Int32 &#91;Test 2&#93;: Test-Argument .5 System.Double &#91;Test 3&#93;: Test-Argument &#34;hello&#34; System.String &#91;Test 4&#93;: Test-Argument Goodbye System.String &#91;Test 5&#93;: Test-Argument -42 System.String &#91;Test 6&#93;: Test-Argument &#40;-42&#41; System.Int32 &#160; Why can&#8217;t it properly parse [...]]]></description>
			<content:encoded><![CDATA[	<p>So we found a problem recently with a certain scripting language&#8217;s argument parsing:</p>

	<div class="posh code posh" style="font-family:monospace;"><br />
<span style="color: #666699; font-weight: bold;">function</span> <span style="color: #0066cc; font-style: italic;">Test-<span style="font-style: normal;">Argument</span></span><span style="color: #333;">&#40;</span><span style="color: #660033; font-weight: bold;">$a</span><span style="color: #333;">&#41;</span> <span style="color: #333;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #660033; font-weight: bold;">$a</span>.<span style="color: #003366;">GetType</span><span style="color: #333;">&#40;</span><span style="color: #333;">&#41;</span>.<span style="color: #003366;">FullName</span><br />
<span style="color: #333;">&#125;</span><br />
<br />
<span style="color: #333;">&#91;</span>Test <span style="color: #cc66cc;">1</span><span style="color: #333;">&#93;</span>: <span style="color: #0066cc; font-style: italic;">Test-<span style="font-style: normal;">Argument</span></span> <span style="color: #cc66cc;">4</span><br />
System.<span style="color: #003366;">Int32</span><br />
<span style="color: #333;">&#91;</span>Test <span style="color: #cc66cc;">2</span><span style="color: #333;">&#93;</span>: <span style="color: #0066cc; font-style: italic;">Test-<span style="font-style: normal;">Argument</span></span> .5<br />
System.<span style="color: #003366; font-weight: bold;">Double</span><br />
<span style="color: #333;">&#91;</span>Test <span style="color: #cc66cc;">3</span><span style="color: #333;">&#93;</span>: <span style="color: #0066cc; font-style: italic;">Test-<span style="font-style: normal;">Argument</span></span> <span style="color: #009900;">&quot;hello&quot;</span><br />
System.<span style="color: #003366; font-weight: bold;">String</span><br />
<span style="color: #333;">&#91;</span>Test <span style="color: #cc66cc;">4</span><span style="color: #333;">&#93;</span>: <span style="color: #0066cc; font-style: italic;">Test-<span style="font-style: normal;">Argument</span></span> Goodbye<br />
System.<span style="color: #003366; font-weight: bold;">String</span><br />
<span style="color: #333;">&#91;</span>Test <span style="color: #cc66cc;">5</span><span style="color: #333;">&#93;</span>: <span style="color: #0066cc; font-style: italic;">Test-<span style="font-style: normal;">Argument</span></span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">42</span><br />
System.<span style="color: #003366; font-weight: bold;">String</span><br />
<span style="color: #333;">&#91;</span>Test <span style="color: #cc66cc;">6</span><span style="color: #333;">&#93;</span>: <span style="color: #0066cc; font-style: italic;">Test-<span style="font-style: normal;">Argument</span></span> <span style="color: #333;">&#40;</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">42</span><span style="color: #333;">&#41;</span><br />
System.<span style="color: #003366;">Int32</span><br />
&nbsp;</div>

	<p>Why can&#8217;t it properly parse -42 as an integer, when it can parse .5 as a double? Well, according to the development team of a certain Fortune 100 company, this behavior is <strong>by-design</strong> ...  Apparently, &#8220;.&#8221; can be a number, but &#8220;-&#8221; can&#8217;t.</p>

	<blockquote>
		<p>When you know you&#8217;ve got it all wrong, but you can&#8217;t be bothered to get it right, document it &#8212; make it look intentional, and most people won&#8217;t question you.</p>
	</blockquote>

	<p>I&#8217;m sorry folks, but I&#8217;ve had it <strong>up to here</strong> with the &#8220;it&#8217;s by design&#8221; excuse. I don&#8217;t care who you are, and I don&#8217;t care who wrote the design spec &#8212; when something is as obviously wrong as this, <span class="em1">you need to fix it</span>, not just give us platitudes.</p>

	<p>I had the same thing happen recently with a bug I filed about the way wildcard behavior impedes matching file-names with square brackets in them in PowerShell.  They told me this was by design, and that I could use the -LiteralPath parameter.  Well, if any of you have tried this, you already know what I&#8217;m going to say: it&#8217;s broken.</p>

	<div class="posh code posh" style="font-family:monospace;"><br />
<span style="color: #666666; font-style: italic;">## This works if the file already exists</span><br />
<span style="color: #666666; font-style: italic;">## But fails completely if it doesn't exist</span><br />
<span style="color: #0066cc; font-style: italic;">set-<span style="font-style: normal;">content</span></span> <span style="color: #000066;">-LiteralPath</span> <span style="color: #009900;">&quot;logs [www.example.com].txt&quot;</span> <span style="color: #000066;">-Value</span> <span style="color: #009900;">&quot; help &quot;</span><br />
&nbsp;</div>

	<p>And yet, I was initially told it was <em>supposed</em> to be this way.  Now, in this case, I happened to have the email address of the software architect, and they&#8217;ve <a href="https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=337243&#38;SiteID=99">reopened my bug</a> after I sent him an email with lots of examples of how this <em>bug</em> defied the behavior that a user expects.</p>

	<p>We software developers need to be <em>very</em> careful about saying &#8220;that&#8217;s by design&#8221; ... because it sometimes makes us sound stupid.  When a user says &#8220;this is broken,&#8221; and your reply is &#8220;that&#8217;s by design,&#8221; what the user hears is &#8220;we broke it on purpose.&#8221;  We should not be willing to excuse bad design.</p>

	<p>Listen up: If you want to be a successful software developer, you need to learn this, and learn it well: <span class="em2">the fact that it was <span class="caps">DESIGNED</span> <span class="caps">WRONG</span> is <span class="caps">NOT</span> AN <span class="caps">EXCUSE</span> for shipping broken software</span>.  Regardless of whether it&#8217;s your design, or someone else&#8217;s, even if it was designed this way by your manager&#8217;s boss. When you create software that doesn&#8217;t behave the way the user expects it to, you need to consider the possibility that <strong>you&#8217;re doing it wrong</strong>.</p>

	<p>Imagine if <em>architectural</em> engineers were to behave in a similar manner &#8230; Suppose the original architect of the golden gate bridge had left a gap in the middle of the bridge, with a little ramp: you could drive up the bridge, but you couldn&#8217;t get across unless you were comfortable jumping your car across a four foot opening.</p>

	<p>When you complained about it, the engineers would say: it&#8217;s by design &#8212; if you don&#8217;t like jumping your car (and yes, we know that jumping is bad for maintainability), there is a workaround: just wait for the ferry we put in last year. There are several boats, running continuously, so the wait is at maximum about 20 minutes, and it only takes a little longer to cross by boat than it would on the bridge.</p>

	<p>That analogy is obviously not perfect, but the point is: just because someone decided it should be done a certain way doesn&#8217;t mean that&#8217;s the right thing to do &#8212; sometimes the design is just wrong.  Perhaps the designer and architects overlooked something, or perhaps the circumstances have changed, but in any case, if the software doesn&#8217;t work the way people expect it to work, or requires different workarounds depending on the situation &#8230; you need to question the design.</p>

	<p>All I&#8217;m asking is this: <span class="em3">don&#8217;t turn your brain off</span>: when someone complains about the way something works (or doesn&#8217;t work), think about what they&#8217;re asking, and if the complaint makes sense, don&#8217;t say &#8220;this misbehavior is by design&#8221; until you&#8217;ve reconsidered the design.</p>]]></content:encoded>
			<wfw:commentRss>http://huddledmasses.org/rage-against-the-design/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>WordPress, Comments, Caching, and annoyances</title>
		<link>http://huddledmasses.org/wordpress-comments-caching-and-annoyances/</link>
		<comments>http://huddledmasses.org/wordpress-comments-caching-and-annoyances/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 04:07:13 +0000</pubDate>
		<dc:creator>Joel 'Jaykul' Bennett</dc:creator>
				<category><![CDATA[Huddled]]></category>
		<category><![CDATA[Comment]]></category>
		<category><![CDATA[Disqus]]></category>
		<category><![CDATA[Huddled Masses]]></category>
		<category><![CDATA[IntenseDebate]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://huddledmasses.org/?p=1029</guid>
		<description><![CDATA[This is just a short note to explain why I turned off IntenseDebate: it just seems to use way too much memory on my server &#8212; I had to increased the memory available to my blog twice, and was still having issues. Quite frankly, I don&#8217;t feel like I was getting anything out of using [...]]]></description>
			<content:encoded><![CDATA[	<p>This is just a short note to explain why I turned off IntenseDebate: it just seems to use way too much memory on my server &#8212; I had to increased the memory available to my blog twice, and was still having issues. </p>

	<p>Quite frankly, I don&#8217;t feel like I was getting <em>anything</em> out of using Intense Debate other than the ability for users to get notified automatically when I reply to their comments, and to get that minor feature I had to give them all my comments, and render the comments in javascript, and &#8230; yeah, well, I&#8217;m going to do without for now, and we&#8217;ll see what happens.</p>

<div class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/9854b384-2a2a-477a-ab71-48609540c9bb/" title="Zemified by Zemanta"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=9854b384-2a2a-477a-ab71-48609540c9bb" alt="Reblog this post [with Zemanta]" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://huddledmasses.org/wordpress-comments-caching-and-annoyances/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bit9 &#8220;Most Vulnerable Applications&#8221; report is fatally flawed</title>
		<link>http://huddledmasses.org/bit9-most-vulnerable-list-is-flawed/</link>
		<comments>http://huddledmasses.org/bit9-most-vulnerable-list-is-flawed/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 15:25:19 +0000</pubDate>
		<dc:creator>Joel 'Jaykul' Bennett</dc:creator>
				<category><![CDATA[Huddled]]></category>
		<category><![CDATA[Accountability]]></category>
		<category><![CDATA[Bit9]]></category>
		<category><![CDATA[FUD]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Patch]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[Windows Update]]></category>

		<guid isPermaLink="false">http://huddledmasses.org/?p=879</guid>
		<description><![CDATA[There has been a lot of buzz on Twitter (etc.) about the report issued by Bit9 (as reported without details by NeoWin). The list is topped by Firefox, and the top 10 are all non-Microsoft applications &#8230; shocker! Well, if you download the PDF (and read it with Foxit Reader because Adobe Acrobat and Flash [...]]]></description>
			<content:encoded><![CDATA[	<p>There has been a lot of buzz on Twitter (etc.) about the <a href="http://www.bit9.com/files/Vulnerable_Apps_DEC_08.pdf">report issued by Bit9</a> (as reported <strong>without details</strong> by <a href="http://neowin.net/news/main/08/12/16/firefox-tops-list-of-most-vulnerable-windows-applications">NeoWin</a>).  The list is topped by Firefox, and the top 10 are all non-Microsoft applications &#8230; shocker!</p>

	<p>Well, if you download the <span class="caps">PDF</span> (and read it with <a href="http://www.foxitsoftware.com/pdf/rd_intro.php">Foxit Reader</a> because Adobe Acrobat and Flash are tied for #2 on Bit9&#8217;s list), you&#8217;ll find these items, among others, in the criteria for apps making the list:</p>

	<ul>
		<li>Is well-known in the consumer space and frequently downloaded by individuals.</li>
		<li>Contains at least one critical vulnerability that was first reported in January 2008 or after &#8230; [and was] given a severity rating of high (between 7.0-10.0) on the Common Vulnerability Scoring System (<span class="caps">CVSS</span>).</li>
		<li>Relies on the end user, rather than a central administrator, to manually patch or upgrade the software to eliminate the vulnerability, if such a patch exists.</li>
	</ul>
	<ul>
		<li>The application cannot  be automatically and centrally updated via free Enterprise tools such as Microsoft <span class="caps">SMS</span> &amp; <span class="caps">WSUS</span>.</li>
	</ul>

	<p>There are two big problems here:</p>

	<ol>
		<li>It doesn&#8217;t matter how long it takes the vendor to issue the patch. </li>
	</ol>
	<ol>
		<li>Any application which can be patched by the administrator (or which is patched in <span class="caps">WSUS</span> (aka Windows Update)) is automatically excluded from the list &#8212; <strong>regardless of anything else</strong>.</li>
	</ol>

	<h3>That&#8217;s just preposterous. </h3>

	<p>So preposterous that even <a href="http://www.theregister.co.uk/2008/12/12/app_threat_list/">The Register couldn&#8217;t stand for it</a>.</p>

	<p>An application could have a single level 7 vulnerability that was patched within <em>hours</em>, with the patch delivered automatically by the application checking and self-updating &#8230; and it would still qualify (this isn&#8217;t entirely Hypothetical, <span class="caps">THREE</span> of the apps on that list had only a single qualifying vulnerability).  But if it uses a patching system that has to be run by a highly paid IT professional instead, it wouldn&#8217;t qualify even if it had a level 10 vulnerability that has remained open for years &#8230; In point of fact, vulnerabilities that have been open for years are disqualified anyway, but the point is that the only thing that saves an app from this list is not having <em>any</em> vulnerabilites, or being able to hypothetically apply patches remotely (regardless of whether the patches actually exist).</p>

	<h3>Stop spreading this list</h3>

	<p>I&#8217;m begging you: if you&#8217;re a reporter, a blogger, a tweeter &#8212; do your research before you help companies spread disinformation&#8230; and please note that Bit9&#8217;s sole reason for creating this list is to <em>market their enterprise management, patching, and white-listing product</em>.</p>

<h6 class="zemanta-related-title">Related articles by Zemanta</h6><ul class="zemanta-article-ul"><li class="zemanta-article-ul-li"><a href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;articleId=9101258&amp;source=rss_topic125">Patch-blocking bug also stymies Microsoft&#8217;s WSUS</a></li><li class="zemanta-article-ul-li"><a href="http://www.crunchgear.com/2008/12/15/sonicwall-blocks-windowsupdate/">SonicWall blocks WindowsUpdate</a></li><li class="zemanta-article-ul-li"><a href="http://www.downloadsquad.com/2008/11/24/foxit-pdf-reader-3-0-for-windows-now-works-with-firefox/">Foxit <span class="caps">PDF</span> Reader 3.0 for Windows now works with Firefox</a></li><li class="zemanta-article-ul-li"><a href="http://www.infoworld.com/article/08/08/22/Microsoft_admits_posting_flawed_update_1.html?source=rss&amp;url=http://www.infoworld.com/article/08/08/22/Microsoft_admits_posting_flawed_update_1.html">Microsoft confesses to posting a flawed update</a></li></ul>

<div class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/709e3b32-aab6-4456-ab5c-acc323c3306a/" title="Zemified by Zemanta"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=709e3b32-aab6-4456-ab5c-acc323c3306a" alt="Reblog this post [with Zemanta]" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://huddledmasses.org/bit9-most-vulnerable-list-is-flawed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stupid Laws: the Don&#8217;t Protect Me edition</title>
		<link>http://huddledmasses.org/stupid-laws-the-dont-protect-me-edition/</link>
		<comments>http://huddledmasses.org/stupid-laws-the-dont-protect-me-edition/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 23:29:33 +0000</pubDate>
		<dc:creator>Joel 'Jaykul' Bennett</dc:creator>
				<category><![CDATA[Huddled]]></category>
		<category><![CDATA[Laws]]></category>
		<category><![CDATA[Politicians]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[Statistics]]></category>
		<category><![CDATA[Stupid People Tricks]]></category>

		<guid isPermaLink="false">http://HuddledMasses.org/stupid-laws-the-dont-protect-me-edition/</guid>
		<description><![CDATA[This is just a rant about crazy politicians and the over-legislation of protecting people against themselves. http://www.motorcycle.com/news/passenger-age-cap-proposed-in-ontario-87568.html This law would (if passed) prevent driving a motorcycle on a highway if another person under the age of 14 years is a passenger on the motorcycle. In support of the law, Helena Jaczek &#8220;cited statistics that show [...]]]></description>
			<content:encoded><![CDATA[	<p>This is just a rant about crazy politicians and the over-legislation of protecting people against themselves.</p>

	<p><a href="http://www.motorcycle.com/news/passenger-age-cap-proposed-in-ontario-87568.html">http://www.motorcycle.com/news/passenger-age-cap-proposed-in-ontario-87568.html</a></p>

	<p>This law would (if passed) prevent driving a motorcycle on a highway if another person under the age of 14 years is a passenger on the motorcycle. In support of the law, Helena Jaczek &#8220;cited statistics that show 199 motorcycle passengers under the age of 15 were injured from 1995-2005&#8221; ... </p>

	<h4>Seriously?</h4>

	<p>Let&#8217;s see, 200 <em>injured</em> people in 10 years?  Wow, that <em>does</em> sound dangerous  <img src='http://huddledmasses.org/wordpress/wp-includes/' alt='[rolleyes]' class='wp-smiley' /> . What other sorts of things are that dangerous?  I mean, if we&#8217;re going to outlaw exhilarating fun just because you might get hurt doing it &#8230; clearly we want to start with the most dangerous stuff, right?</p>

	<p>How about skateboarding? According to the <a href="http://aappolicy.aappublications.org/cgi/content/full/pediatrics;109/3/542">American Academy of Pediatrics</a>, skateboard-related injuries account for an estimated 50,000 emergency department visits and 1500 hospitalizations among children and adolescents in the United States each year. </p>

	<p>How about roller coasters? The <a href="http://www.iaapa.org/pressroom/AmusementRideInjuryStatistics.asp">International Association of Amusement Parks and Attractions</a> states that 1,713 ride related injuries occurred in 2005, and they average <strong>four fatalities a year</strong> going back to 1987!  Oh my goodness! And of those injuries, over <strong>seven percent</strong> resulted in <em>at least</em> overnight stays in a hospital. (Of course, that&#8217;s not counting the 300 million other guests who safely enjoyed 1.8 billion rides).</p>

	<p>Ms. Jaczek, maybe you&#8217;d like to start with actual statistics, like: what percentage of motorcycle rides ended up in an accident? A common one is injuries per &#8220;participant day&#8221; &#8212; that is, how many people participated in an activity each day.  So, in order of priority, here&#8217;s a few things you should outlaw just to make your young people safer:</p>

	<ul>
		<li>Roller skating (912 emergency room treated injuries per million participant days)</li>
		<li>Basketball (799 per million)</li>
		<li>Football (704 per million)</li>
		<li>Soccer (405 per million)</li>
		<li>Fishing (85 injuries per million participant days) </li>
		<li>Golf (53 per million) </li>
		<li>Use of exercise equipment (nine injuries per million participant days)</li>
		<li>Billiards (eight per million)</li>
	</ul>
	<ul>
		<li>Camping (five per million)</li>
	</ul>

	<p>Incidentally, according to the <span class="caps">IAAP</span>, the number for <a href="http://www.iaapa.org/pressroom/UnitedStatesAmusementRideSafety.asp">amusement parks</a> is something like 0.00133 per million &#8230; and according to the Insurance Information Institute there were 6.2 million <a href="http://www.iii.org/media/hottopics/insurance/motorcycle/">motorcycles</a> on U.S. roads in 2005 &#8230; accounting for 0.4 percent of vehicle miles traveled in 2006 &#8230; with over 104,000 accidents and 4,810 deaths (the highest number up to that time since 1981).  If we guess that those motorcycles get ridden for about half the year, maybe 5 times a week &#8230; that would be around 620 million &#8220;participant days&#8221; and would add up to about 0.00016 accidents per participant day. </p>

	<p>As someone who neither motorcycles nor golfs, I think you should clearly outlaw Golf, since it not only has a higher rate of injury, but also restricts all that land from use by the rest of us who just want a place to <a href="http://www.pdga.com/">throw a flying disc</a></p>

	<p>PS: This politician was from Ontario, but the same idiots exist in New York: if you want to know what you <em>should</em> be spending your time on, I&#8217;ll give you one hint: stop spending money we don&#8217;t have.</p>]]></content:encoded>
			<wfw:commentRss>http://huddledmasses.org/stupid-laws-the-dont-protect-me-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>International Travelers Beware: We Will Seize Your Stuff</title>
		<link>http://huddledmasses.org/international-travellers-beware-we-will-seize-your-stuff/</link>
		<comments>http://huddledmasses.org/international-travellers-beware-we-will-seize-your-stuff/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 14:42:38 +0000</pubDate>
		<dc:creator>Joel 'Jaykul' Bennett</dc:creator>
				<category><![CDATA[Huddled]]></category>
		<category><![CDATA[1984]]></category>
		<category><![CDATA[DHS]]></category>
		<category><![CDATA[Liberty]]></category>
		<category><![CDATA[Politics]]></category>
		<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://HuddledMasses.org/?p=600</guid>
		<description><![CDATA[Fast on the heels of the Chinese government, the Orwellian Department of Homeland Security has officially announced that it is claiming new police powers this week: to seize travelers&#8217; laptops, cell phones, cameras, PDAs, iPods, video tapes, books and even magazines &#8230; without any suspicion or probable cause and keep them as long as they [...]]]></description>
			<content:encoded><![CDATA[	<p>Fast on the heels of the <a href="http://www.eweek.com/c/a/Security/China-Visitors-Encrypt-Your-Data/">Chinese government</a>, the Orwellian <em>Department of Homeland Security</em> has <em>officially</em> announced that it is <a href="http://www.eweek.com/c/a/Government/US-Agents-Can-Seize-Laptops/">claiming new police powers</a> this week: to seize travelers&#8217; laptops, cell phones, cameras, PDAs, iPods, video tapes, books and even magazines &#8230; <span class="em2b">without any suspicion or probable cause</span> and keep them as long as they like without any specified process for returning them whatsoever.</p>

	<p><span class="caps">DHS</span> claims that business data will be protected, and that all data will be destroyed when the review is completed if <em>no probable cause exists</em> to keep the information &#8212; but <strong>bear in mind</strong> that there was no probable cause to start with, so there&#8217;s actually no incentive for them to <em>ever</em> declare the review complete and destroy the data.</p>

	<p>It&#8217;s important to note that these policies apply to <strong>anyone</strong> entering the country &#8212; including citizens and foreigners, tourists and visiting businessmen. If you leave the country, you suspend your rights to privacy and property at the border upon your return along with everyone else.  I wonder how we would have reacted if France started seizing laptops, cameras, cell phones and books from every American who entered their country?  What about if this had happened in 1984? or 1999, for that matter?</p>

	<h4>P.S. If you&#8217;re an American:</h4>

	<p>Remember: no matter how much the authoritarian &#8220;security&#8221; forces would like you to think you live in a different world now than we did 10 years ago &#8212; the Constitution and your Civil Rights have not been suspended yet &#8212; if you don&#8217;t think the government should have the right to take your things, and root through your photos, phone calls and emails whenever they like for no reason whatsoever&#8230; you should write your representatives in Washington and let them know that you hold them <em>personally</em> responsible for this ridiculous power-grab by our so-called homeland security department.</p>

	<h5> <img src='http://huddledmasses.org/wordpress/wp-includes/' alt='[new]' class='wp-smiley' />  My Personal Response</h5>

	<p>Here&#8217;s the letter <strong>I</strong> sent to my representatives, maybe you&#8217;d like to do the same:<span id="more-600"></span></p>

	<blockquote>
		<p>I was dismayed to read this morning that the Department of Homeland Security has officially announced that it is claiming new police powers this week: to seize traveler&#8217;s laptops, cell phones, cameras, PDAs, iPods, video tapes, books and even magazines … without any suspicion or probable cause &#8230;</p>
		<p>http://www.eweek.com/c/a/Government/US-Agents-Can-Seize-Laptops/</p>
		<p><span class="caps">DHS</span> claims that business data will be protected, and that all data will be destroyed when the review is completed if no probable cause exists to keep the information — but bear in mind that there was no probable cause to start with!</p>
		<p>I can&#8217;t believe that we would do that to <span class="caps">ANYONE</span> (never mind that American citizens are protected against such unwarranted search and seizure by the bill of rights).  What would we say if it was China seizing laptops? There was just a warning in the news about traveling to China: http://www.eweek.com/c/a/Security/China-Visitors-Encrypt-Your-Data/ but apparently, that goes <span class="caps">DOUBLE</span> in the <span class="caps">USA</span> &#8212; at least in China they&#8217;re only snooping on you electronically, not blatantly seizing your laptop and copying off all the data.</p>
		<p>There&#8217;s no possible justification for a policy like this &#8212; no amount of fear-mongering by the administration can be allowed to persuade us to give up our civil liberties in the name of security.</p>
		<p>So, anyway, I&#8217;m writing you, as my representative in Washington, to ask that you would do whatever is in your power to rein in this government agency run amok, and to protect our bill of rights.  </p>
		<p>Remind this administration of the words of Ronald Reagan: </p>
		<p><span class="em1">You and I are told we must choose between a left or right, but I suggest there is no such thing as a left or right. There is only an up or down. Up to man&#8217;s age-old dream-the maximum of individual freedom consistent with order or down to the ant heap of totalitarianism. Regardless of their sincerity, their humanitarian motives, those who would sacrifice freedom for security have embarked on this downward path.</span> &#8212; Ronald Reagan, 1964</p>
	</blockquote>]]></content:encoded>
			<wfw:commentRss>http://huddledmasses.org/international-travellers-beware-we-will-seize-your-stuff/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Evernote Click-Through is a Disgrace</title>
		<link>http://huddledmasses.org/evernote-click-through-is-a-disgrace/</link>
		<comments>http://huddledmasses.org/evernote-click-through-is-a-disgrace/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 22:05:23 +0000</pubDate>
		<dc:creator>Joel 'Jaykul' Bennett</dc:creator>
				<category><![CDATA[Huddled]]></category>
		<category><![CDATA[licensing]]></category>
		<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://HuddledMasses.org/?p=598</guid>
		<description><![CDATA[Someone earlier today was gushing about how neat Evernote is &#8230; it&#8217;s a OneNote-like application which features add-ins for browsers and email clients to let you clip text and images, or record voice, take notes in handwriting, etc &#8230; and it&#8217;s cross-platform and has a version for Windows Mobile and iPhone! I thought it sounded [...]]]></description>
			<content:encoded><![CDATA[	<p>Someone earlier today was gushing about how neat <a href="http://www.evernote.com/">Evernote</a> is &#8230; it&#8217;s a OneNote-like application which features add-ins for browsers and email clients to let you clip text and images, or record voice, take notes in handwriting, etc &#8230; and it&#8217;s cross-platform and has a version for Windows Mobile and iPhone! I thought it sounded interesting, although the key feature of sharing all your notes automatically across all your clients made me a bit suspicious, so I went online to check it out.</p>

	<p>By now, those of you who have previously read my <a href="http://huddledmasses.org/click-through-licenses-are-getting-out-of-hand/">rants about software licenses</a> know to avoid Evernote. But let me tell my story anyway. I downloaded the installer and ran through it, noting that the click-through license displayed in the installer is for the software only, and references possible additional terms for a &#8220;service&#8221; ... So far, so good, the most annoying thing I noticed while scanning was:</p>

	<blockquote>
		<p>9. Monitoring and Removal of information. ... Evernote Corporation and its designees shall have the right to refuse or remove any information that violates this Agreement or is otherwise objectionable, in Evernote Corporation sole judgment&#8230;</p>
	</blockquote>

	<p>I didn&#8217;t particularly like that in a software license, but it wasn&#8217;t enough to get me to stop installing the software.  However, I have to say, the license it is <em>ridiculously huge</em>: 
	<ul>
		<li>Roughly 3500 words</li>
		<li>On 330 lines of text</li>
		<li>(which you&#8217;re expected to read in a 10-line window) </li>
	</ul>
	<ul>
		<li>Making 33 pages of license (about 8 pages printed on letter size paper)</li>
	</ul></p>

	<p>Nobody should be expected to put up with this.  Let me say this for the record:</p>

	<h3>Put your license on the download page.</h3>

	<p>This will allow people like me to read the license <em>before</em> we download the software and possibly save us the trouble. Pretending you think people will read something like that in the tiny little window is a cruel joke.</p>

	<h2>The worst joke, however, was yet to come.</h2>

	<p><span id="more-598"></span>When I tried to actually <em>use</em> the software, it became clear that in Evernote 3, you cannot actually use the software without a service account. This, of course, means <em>another</em> click-through on their Terms Of Servi<del>tude</del><ins>ce</ins> and Privacy Policy&#8230;</p>

	<p>	<ul>
		<li>Approximately 5600 word <span class="caps">TOS</span></li>
		<li>That&#8217;s thirteen pages of license!</li>
		<li>Another 1800 words in the Privacy Policy
		<li>For a grand total of:
	<ul>
		<li>Over 10,000 words</li>
	</ul></li>
	</ul>
	<ul>
		<li>Over 25 pages</li>
	</ul></li></p>

	<p>If you try to actually <em>read</em> the terms of service for the online service, you&#8217;ll find <strong>the classic evil genius</strong> license terms:</p>

	<blockquote>
		<p>If you do access our web site and use our Service, your use shall be deemed to accept the Terms of Service and be a party to a legally binding contract &#8230; be sure to regularly check these Terms of Service for any updates or other changes, which shall be legally binding upon you when we post them, whether or not we provide you any other notice of such changes. The then-applicable Terms of Service will be posted at <a href="http://www.evernote.com/about/tos">www.evernote.com/about/tos</a>, and we will indicate the date of each update at the end of the Terms of Service. Your continued use of the Service after any update will be deemed to represent your consent to be bound by, and agreement with, the new Terms of Service.</p>
	</blockquote>

	<p>Let&#8217;s be honest.  Having read that &#8230; there&#8217;s really just no point in going any further. To paraphrase an earlier rant: I do not agree to review contracts on a regular basis &#8212; that&#8217;s preposterous.  If even half of the applications I use required me to review their contracts every day before I used them, I would be spending hours each day just cutting-and-pasting their licenses into Win-Merge so I could spot the differences. Imagine trying to read <strong>ten thousand</strong> words of legalese every day before you start taking notes, just in case Evernote decided that <em>now</em> they want you to chant &#8220;Evernote rocks&#8221; out loud every 15 minutes while using it or pay a $150 monthly user fee retroactively&#8230;</p>

	<p>It&#8217;s bad enough when companies like Microsoft and Paypal do this <em>and send me a notice</em> that they&#8217;ve changed their terms and I should review them.  <span class="em2">I can accept that a business might need to change their service agreement occasionally.</span> But to put the burden on the users to routinely check 25 pages of license terms for changes you have to be barking mad. The worst thing is that this isn&#8217;t the end of it:</p>

	<blockquote>
		<p>Of course, you may also be required or elect to enter into a separate written agreement or click “accept” or “agree” to become a party to another contract with Evernote (a “Separate Agreement”), and these Terms of Service shall not be considered to supersede the specific contractual terms of the Separate Agreement. If there is any contradiction between the terms of the Separate Agreement and these Terms of Service, then the terms of the Separate Agreement shall take precedence over the contradictory terms in the Terms of Service with respect to the subject matter of such Separate Agreement.</p>
	</blockquote>

	<p>So basically, as you go on about using the service or application, they may layer on additional provisos, and a few quid-pro-quos, addendums, and modifications, leaving it to you to not just keep up to date on them, but to figure out for yourself what parts of which apply!</p>

	<p>And yes, they also beg out of the need protect your data whatsoever:</p>

	<p>&#8220;Personal information such as name, e-mail address, contact preferences, which Evernote products and services you use, and transactional information such as your credit card number&#8221; ... will be stored along with &#8220;Demographic infromation such as your occupation and where you use your devices&#8221; and they &#8220;cannot ensure the security of information you transmit&#8221; to them, and &#8220;you acknowledge that you do so at your own risk.&#8221; Although at least they promise that &#8220;once we receive your data transmission, we make all commercially reasonable efforts to ensure its security on our systems&#8221; (what they really mean is Amazon&#8217;s systems, since they appear to be using S3 for storage but nevermind).  </p>

	<p>The best thing in this agreement is that they got the <strong>copyright</strong> portion <em>right</em>: </p>

	<blockquote>
		<p>Evernote acknowledges and agrees that it obtains no right, title or interest from you (or your licensors) under these Terms of Service in or to any Content that you submit, post, store, transmit or display on, or through, the Service, including any intellectual property rights which subsist in that Content (whether those rights happen to be registered or not, and wherever in the world those rights may exist). </p>
	</blockquote>

	<p>Good for you, Evernote.  Now, try and condense this all into one agreement, and don&#8217;t make me promise to check it every day &#8212; you have my email address (and you promised to cancel my account if I provide you with incorrect information) ... so <strong>use it for good</strong>, and notify your customers <strong>before</strong> you make changes to your contracts &#8212; like every other trustworthy company.</p>

	<p>My standard disclaimer applies here:</p>

	<p><span class="em2b">I am not a lawyer,</span> and these terms are not unique to Evernote &#8212; that&#8217;s why I&#8217;m writing about them &#8212; it&#8217;s a disgrace that companies are allowed to post licenses like this and users just shrug and click &#8220;accept&#8221; without even reading them, and we need to raise a ruckus until companies stop treating us like farmland where they grow money, and start treating us like customers.</p>

	<p>Call your representatives, tell your friends and warn your boss &#8212; don&#8217;t let yourself or your company get tied down by agreeing to contracts which are one-sided. If <span class="caps">YOU</span> have to agree to whatever <span class="caps">THEY</span> say, and they can just change the license whenever they like &#8212; then they&#8217;re not under contract, only you are.  That&#8217;s not a contract, that&#8217;s a sentence.</p>

	<p>P.S. Don&#8217;t let your company be the next one I rant about, either.</p>]]></content:encoded>
			<wfw:commentRss>http://huddledmasses.org/evernote-click-through-is-a-disgrace/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Rant: Sometimes I hate my job</title>
		<link>http://huddledmasses.org/rant-sometimes-i-hate-my-job/</link>
		<comments>http://huddledmasses.org/rant-sometimes-i-hate-my-job/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 18:08:52 +0000</pubDate>
		<dc:creator>Joel 'Jaykul' Bennett</dc:creator>
				<category><![CDATA[Huddled]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://HuddledMasses.org/?p=564</guid>
		<description><![CDATA[So I&#8217;ve been asked to add a feature to one of the apps that I nominally took over when my former manager left &#8230; they want a management pane where certain authorized super users (to be decided later) can add data to the main lookup tables, and must be able to do clean up by [...]]]></description>
			<content:encoded><![CDATA[	<p>So I&#8217;ve been asked to add a feature to one of the apps that I <em>nominally</em> took over when my former manager left &#8230; they want a management pane where certain authorized super users (to be decided later) can add data to the main lookup tables, and must be able to do clean up by deleting data which has been entered erroneously &#8230; including cleaning up any references to the now missing data.</p>

	<p>I&#8217;m currently trying to figure out what database tables I need to be concerned with, and I just have to vent, because this system is the worst mess I&#8217;ve ever seen.  <img src='http://huddledmasses.org/wordpress/wp-includes/' alt='[disgust]' class='wp-smiley' /> </p>

	<ul>
		<li>There&#8217;s one database supporting five or more applications&#8230;</li>
		<li>There are 87 tables (with names like tblAQ_DcSs, tblAQ_SwNw, tblSFM, and tblSW_PWSOS, tblTestCaseTestLayout )</li>
		<li>There are <strong>three</strong> duplicate user tables: tblPeopleLookup, tblUser, and tblUser3 &#8212; tblUser2 is a view onto an external user database which is what is <strong>supposedly</strong> being used &#8230; and apparently, tblPeopleLookup is some sort of mapping from tblUser2 to tblUser3 &#8230; and tblUser1 is the original user table. I don&#8217;t know why these are all still here &#8212; I can only hope none of these others are still being used.</li>
		<li>There are 144 stored procedures (with names like sp_Fix, sp_Fix2, sp_Fix3, spLeftToTestMulti, spLeftToTestMulti2, spLeftToTestMulti3, sp_Whatever, and the awesome spTestCaseTestLayoutTestsUpdate, spTestCaseTestLayoutTestsSelect, etc.)</li>
	</ul>
	<ul>
		<li>There are <strong>no</strong> Foreign Keys.  Yeah. None.  <img src='http://huddledmasses.org/wordpress/wp-includes/' alt='[crazy]' class='wp-smiley' /> </li>
	</ul>

	<p>Technically, there are lots of foreign keys &#8212; it&#8217;s just that none of them are declared as such, so there&#8217;s no referential integrity (did I mention that there&#8217;s an access database floating around out there with linked tables and a hard-coded login which the end-users pass around to each other so they can insert data into some of the tables <strong>by hand</strong> because the original developers didn&#8217;t get around to writing this management app that I&#8217;ve been asked to write now?)</p>

	<p>You can tell that some of the columns <em>should</em> be Foreign Keys, because obviously a column in a &#8220;tblReq_Tag&#8221; table named &#8220;Feature_ID&#8221; must be an external lookup of some sort &#8230; but there&#8217;s 86 other tables &#8230; and at least two of them have Primary Keys called &#8220;Feature_ID&#8221; ...</p>

	<p>So, I&#8217;m spending a lot of time searching the source code and the 144 stored procedures &#8230; An astonishing number of these stored procedures involve cursors and multiple nested case statements.  I just picked one at random which I thought sounded simple: <strong>spEnterGroupResults</strong> ... it&#8217;s about 150 lines of <span class="caps">SQL</span>, and it uses a single cursor variable &#8220;crsUnit&#8221; which it redefines three separate times onto three different queries which it iterates over. Each of these queries involves joins onto nested subqueries, and I count myself lucky because the tricky part is actually enclosed in a transaction, and at least <em>this one</em> isn&#8217;t doing all of that just to dynamically generate a further <span class="caps">SQL</span> query to execute.</p>

	<p>So yeah, I&#8217;m literally looking through source code to try to understand the database design.  The problem is that there are more than five different applications, each using slightly different technologies.</p>

	<ul>
		<li>One of them which has never been migrated from classic <span class="caps">ASP</span> ... with the business logic written entirely in Javascript, and the data handling performed entirely by sending <strong>huge</strong> <span class="caps">XML</span> files back and forth to a &#8220;do all&#8221; webservice.</li>
		<li>One of them was written in VB.<span class="caps">NET</span> in VS 2003, and has never been upgraded.</li>
	</ul>
	<ul>
		<li>The rest are in C# &#8212; with most in VS 2005, and at least one in VS 2008 and C# 3.0 &#8212; some are Asp.Net, some are rich client &#8230;</li>
	</ul>

	<p>The tables I&#8217;m most concerned with right now (for this app) have some <em>ahem</em> ... impressive design decisions of their own.  Of the 8 tables that I&#8217;m looking at directly (I think these are the only ones I need to <em>modify</em> as part of this app), five of them have multi-column primary keys that involve more than half the columns in the table, including columns which are, in fact, unconstrained foreign keys.  And there are so far 5 foreign key looking columns which I haven&#8217;t been able to find the primary key column for &#8230;  <img src='http://huddledmasses.org/wordpress/wp-includes/' alt='[pullhair]' class='wp-smiley' /> </p>

	<p> <img src='http://huddledmasses.org/wordpress/wp-includes/' alt='[new]' class='wp-smiley' />  <strong>Edit</strong>: Oh yeah, and half of these tables have columns like <code>[Enabled] [char](1) NULL</code> &#8230;  That&#8217;s a <strong>boolean</strong> value folks, stored in the database as a <code>y</code> or a <code>n</code> &#8230; and it&#8217;s nullable even though a null (or any value other than <code>y</code> or <code>n</code>, really) will most likely blow up some code somewhere.  And no, there&#8217;s no script constraint or trigger to ensure that this doesn&#8217;t happen (I checked). For extra fun, the other half of the tables use &#8216;bit&#8217; columns for things like this  &#8212; because they were written after I started working with this team (on a different project) and happened across one of these char columns during our one and only code review ever and wondered aloud why we needed to pretend it was still 1992.  Why they just switched, without changing the others, I&#8217;ll never know&#8230;</p>]]></content:encoded>
			<wfw:commentRss>http://huddledmasses.org/rant-sometimes-i-hate-my-job/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Crazy Work Week</title>
		<link>http://huddledmasses.org/crazy-work-week/</link>
		<comments>http://huddledmasses.org/crazy-work-week/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 13:00:23 +0000</pubDate>
		<dc:creator>Joel 'Jaykul' Bennett</dc:creator>
				<category><![CDATA[Huddled]]></category>
		<category><![CDATA[Languages]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[Resume]]></category>

		<guid isPermaLink="false">http://HuddledMasses.org/?p=513</guid>
		<description><![CDATA[Here&#8217;s a snippet from the latest update to my resumĂ© ... you&#8217;ll notice I struck out the &#8220;create&#8221; portion of the descriptions &#8212; as long as we just talk about maintenance and support tasks, everything you see here is what I did in just the last two weeks since one of my teammates transferred to [...]]]></description>
			<content:encoded><![CDATA[	<p>Here&#8217;s a snippet from the latest update to my resumĂ© ... you&#8217;ll notice I struck out the &#8220;create&#8221; portion of the descriptions &#8212; as long as we just talk about maintenance and support tasks, everything you see here is what I did <strong>in just the last two weeks</strong> since one of my teammates transferred to a different division and our temp/contract was stolen away to a full-time position with a different company.</p>

	<p><blockquote><br />
<h3>Software Engineer, Test Tools Development.</h3><br />
<p>Lead developer for in-house software solutions for a 100-strong quality assurance team at a Fortune 500 company &#8230; responsible for creating and maintaining all custom software solutions and database systems.</p></p>

	<ol>
		<li><del>Create and</del> maintain a randomized software test-case generation tool capable of managing hundreds of test projects with dozens of variables and using pseudo-random weighted generation to create thousands of test cases for each of our hardware and software tests.</li>
		<li>Maintain a custom HR tracking and reporting tool for billing internal customers based on hourly rates for work done testing hardware and software products for dozens of internal and external customers.</li>
		<li><del>Create and</del> maintain a custom requirement and test-case tracking system for internal tracking of spec-based testing and reporting.</li>
		<li><del>Create and</del> maintain a custom defect tracking system which interfaces with and provides metrics for over half a dozen different defect tracking systems (<span class="caps">DDTS</span>, ClearQuest, MS <span class="caps">TFS</span>, SourceForge, etc) used by the development teams we support.</li>
		<li><del>Create and</del> maintain internal test-results reporting system capable of capturing test-case pass/fail/waive information and tying it to internal requirements and test case tracking systems as well as external defect and work-request tracking systems.</li>
	</ol>
	<ol>
		<li><del>Create and</del> maintain various reporting systems providing charts and reports of counts and rates to support capacity planning, software quality metrics, test effectiveness and efficiency measures, software quality predictions etc, as well as tracking post-release defect discovery and analysis to improve the effectiveness of pre-release testing.</li>
	</ol>

<p>Work with a multitude of languages and technologies to provide the most effective solutions for each request in a timely manner on multiple platforms &#8230; from client apps and scripting solutions to cross-platform web apps.</p>

	<ul>
		<li>Using Asp.Net with HTML/CSS/Javascript and VB.Net and C#.net to provide &#8220;AJAX&#8221; web-based applications.</li>
		<li>Using <span class="caps">PHP</span> and Perl to provide web-based defect query and search services.</li>
		<li>Using C#, Windows Forms and <span class="caps">WPF</span> to provide rich-client tools for test planning and test-case generation.</li>
		<li>Using PowerShell, VBScript, TestBasic, and <a href="http://www.autohotkey.com/">AutoHotkey</a> to automate testing, as well as maintenance and data-entry tasks.</li>
		<li>Using and maintaining <span class="caps">SQL</span> Server, <span class="caps">SQL</span> Reporting Services, and <span class="caps">SQL</span> Analysis Services to provide reporting and business intelligence and to support tool development.</li>
	</ul>
	<ul>
		<li>Tracking work and changes in various source control and defect tracking systems such as <span class="caps">VSS</span>, ClearCase, ClearQuest, Bugzilla, <span class="caps">SVN</span> and <span class="caps">TFS</span>.</li>
	</ul>

	<p></blockquote></p>

	<p> <img src='http://huddledmasses.org/wordpress/wp-includes/' alt='[crazy]' class='wp-smiley' />  10 languages, 5 software platforms, 7 separate applications &#8230; and the apps I wrote myself (and am therefore most familiar with) seem to be the only ones that I&#8217;m not fielding support calls for multiple times a day.  I need a vacation (or rather, a couple new coworkers).  <img src='http://huddledmasses.org/wordpress/wp-includes/' alt='[surrender]' class='wp-smiley' /> </p>

	<p>Fingers don&#8217;t fail me now!  <img src='http://huddledmasses.org/wordpress/wp-includes/' alt='[whip]' class='wp-smiley' /> </p>

	<p>Of course, in my spare time, I&#8217;m working on my capstone project for my Masters degree in Computer Science &#8230;</p>]]></content:encoded>
			<wfw:commentRss>http://huddledmasses.org/crazy-work-week/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Click-through licenses are getting out of hand</title>
		<link>http://huddledmasses.org/click-through-licenses-are-getting-out-of-hand/</link>
		<comments>http://huddledmasses.org/click-through-licenses-are-getting-out-of-hand/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 04:56:56 +0000</pubDate>
		<dc:creator>Joel 'Jaykul' Bennett</dc:creator>
				<category><![CDATA[Huddled]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[Considered Harmful]]></category>
		<category><![CDATA[Disgby]]></category>
		<category><![CDATA[Instant Messaging]]></category>
		<category><![CDATA[Legalese]]></category>
		<category><![CDATA[licensing]]></category>
		<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://HuddledMasses.org/click-through-licenses-are-getting-out-of-hand/</guid>
		<description><![CDATA[Can&#8217;t someone put a stop to this stuff? Where are our representatives when you need them? I started to sign up to try digsby this evening, but when I read the terms of service, I had to quickly back away and abort. Let me just say this for the record: these are not acceptable terms [...]]]></description>
			<content:encoded><![CDATA[	<p>Can&#8217;t someone put a stop to this stuff? Where are our representatives when you need them?  I started to sign up to try <a href="http://www.digsby.com/">digsby</a> this evening, but when I read the terms of service, I had to quickly back away and abort.  Let me just say this for the record: these are not acceptable terms of service.</p>

	<blockquote>
		<p>We may change this contract at any time.  You must review this contract on a regular basis.  You can find the most recent version of the contract at http://www.digsby.com/tos.php.  The changed contract is in effect right away.  </p>
	</blockquote>

	<p>I do not agree to &#8220;review this contract on a regular basis&#8221; &#8212; that&#8217;s preposterous.  I have several hundred software applications installed &#8212; imagine if they all required me to review their contracts every day before I used them, just in case they had modified them.  Imagine if I had to read 16 points spread out over 1200 lines of legalese for each application I use, just in case you decided that the terms of service should require me to mew like a cat every 15 minutes while using it or pay a $1500 monthly user fee&#8230;</p>

	<p>I most certainly do not agree to any changes that go into effect right away before I&#8217;ve even been notified of them or had a chance to read them. What if you change them to involve a daily fee &#8230;. while I&#8217;m on vacation?</p>

	<blockquote>
		<p>All upgrades, updates or enhancements of the Software shall be deemed to be part of the Software and will be subject to this Agreement&#8230;. By installing the Software, you hereby agree to automatically request and receive Updates from dotSyntax&#8217;s servers.</p>
	</blockquote>

	<p>I most <em>certainly</em> do not agree that you should be allowed to change your software at any time automatically without my permission.  And especially not when you also say &#8230;</p>

	<blockquote>
		<p><span class="caps">DOTSYNTAX</span> IS <span class="caps">NOT</span> <span class="caps">RESPONSIBLE</span> OR <span class="caps">LIABLE</span> <span class="caps">FOR</span> (1) <span class="caps">ANY</span> <span class="caps">VIRUSES</span> OR <span class="caps">OTHER</span> <span class="caps">DISABLING</span> <span class="caps">FEATURES</span> <span class="caps">THAT</span> <span class="caps">AFFECT</span> <span class="caps">YOUR</span> <span class="caps">ACCESS</span> TO OR <span class="caps">USE</span> OF <span class="caps">THE</span> <span class="caps">SOFTWARE</span>, (2) <span class="caps">ANY</span> <span class="caps">INCOMPATIBILITY</span> <span class="caps">BETWEEN</span> <span class="caps">THE</span> <span class="caps">SOFTWARE</span> <span class="caps">AND</span> <span class="caps">OTHER</span> <span class="caps">WEB</span> <span class="caps">SITES</span>, <span class="caps">SERVICES</span>, <span class="caps">SOFTWARE</span> <span class="caps">AND</span> <span class="caps">HARDWARE</span>...</p>
	</blockquote>

	<h4>Unbelievable!</h4>

	<p>Oh, yeah, and don&#8217;t forget &#8230; you would also have to check their privacy policy:</p>

	<blockquote>
		<p>The Privacy Policy available at http://www.digsby.com/privacy.php explains dotSyntaxâ€™s information practices that apply to &#8230; information about you and your use of Digsby.</p>
	</blockquote>]]></content:encoded>
			<wfw:commentRss>http://huddledmasses.org/click-through-licenses-are-getting-out-of-hand/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

