<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Foxxtrot.Net</title>
    <link rel="alternate" type="text/html" href="http://foxxtrot.net/" />
    <link rel="self" type="application/atom+xml" href="http://foxxtrot.net/atom.xml" />
    <id>tag:foxxtrot.net,2010-06-14://3</id>
    <updated>2010-11-16T18:17:08Z</updated>
    <subtitle>Hacker by Choice</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 5.02</generator>

<entry>
    <title>Thoughts about Mutli-Selection on the Modern Web - Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/2010/11/thoughts-about-mutli-selection-on-the-modern-web.html" />
    <id>tag:blog.foxxtrot.net,2010://1.483</id>

    <published>2010-11-16T16:00:00Z</published>
    <updated>2010-11-16T18:17:08Z</updated>

    <summary><![CDATA[We have several applications where we need to let the user select multiple items. HTML has pretty much always offered multi-select through it&#8217;s forms in a fairly simple manner, complete with how it will be rendered on screen: &lt;p> &lt;label...]]></summary>
    <author>
        <name>Jeff Craig</name>
        <uri>http://blog.foxxtrot.net/</uri>
    </author>
    
        <category term="Internet" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="html" label="HTML" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="JavaScript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="userinterface" label="User Interface" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yui3" label="YUI3" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        <![CDATA[<p>We have several applications where we need to let the user select multiple items. HTML has pretty much always offered multi-select through it&#8217;s forms in a fairly simple manner, complete with how it will be rendered on screen:</p>

<p><img alt="Multiselect.png" src="http://blog.foxxtrot.net/2010/11/13/Multiselect.png" width="269" height="102" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>

<pre class="brush: html;">
&lt;p>
   &lt;label for="fruit">Select a fruit&lt;/label>
   &lt;select name="fruit" size=4 multiple>
    &lt;option value="apple">Apple&lt;/option>
    &lt;option value="apricots">Apricots&lt;/option>
    &lt;option value="banana">Banana&lt;/option>
    &lt;option value="cherries">Cherries&lt;/option>
    &lt;option value="durian">Durian&lt;/option>
    &lt;option value="grapes">Grapes&lt;/option>
    &lt;option value="kiwi">Kiwi&lt;/option>
    &lt;option value="kumquat">Kumquat&lt;/option>
    &lt;option value="mango">Mango&lt;/option>
    &lt;option value="strawberry">Strawberry&lt;/option>
   &lt;/select>
&lt;/p>
</pre>

<p>It&#8217;s a simple bit of UI, but the fact is, most users have no idea <em>how</em> to use it. We have a multi-select box that is populated with rows that the user would generally have need to access. For most users, there are a half-dozen or so of these rows. Other users, can receive an authorization that provides them dramatically more rows. When we first launched this UI, which was a change from the old system of select boxes that did not make it clear what data the user was limited to under the stricter interpretation of the law that we were using.</p>

<p>The change, however, made selecting multiple records <em>seem</em> harder to our users. They simply didn&#8217;t know that SHIFT+Click to select ranges or CTRL+Click (Command+Click for you Mac users) to select discrete items. Now, some sites will drop in instructions to help users figure out how to multiselect, but as our user base was relatively small (particularly who demanded multi-select) we proceeded without it.</p>

<p>However, I have recently re-launched <a href="http://www.wsu.edu/">Washington State University&#8217;s</a> <a href="http://schedules.wsu.edu/">Schedules of Classes</a> site, and in re-doing the <a href="http://schedules.wsu.edu/Search/">search form</a>, I felt I needed a better way, particularly since one of the select boxes has ~150 items. To deal with that, I utilized a pair of select boxes and server-side sessions to allow the user to select one (or many) items from the &#8216;source&#8217; list on the left to the destination list on the right.</p>

<p><img alt="Option Mover" src="http://blog.foxxtrot.net/2010/11/13/Mover.png" width="497" height="104" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>

<p>This works okay, and I still use it for progressive enhancement. It should eliminate the problem of users not knowing how to select many options, though that remains to be seen, and I have seen it elsewhere. I think this makes a reasonable amount of sense in situations like this, where the number of elements that will be expected in the right column will be fairly small. </p>

<p>For a more involved solution, I opted to investigate re-inventing multi-select boxes, by looking at how they are done in Mobile. On Android, a mutli-select box causes a modal dialog to appear, where the select items are represented by checkboxes (it uses radio buttons for single-select). Now, a modal dialog is wholly unnecessary on the desktop, but the checkbox option makes a lot of sense.</p>

<p>To support this, I wrote a <a href="http://yuilibrary.com/">YUI</a> module (which I&#8217;m investigating releasing through the <a href="http://yuilibrary.com/gallery/">Gallery</a>, there are copyright issues with my employer, though), which is in use on that page. It is a widget, which is attached to an element containing a label, and an input[type=select] element (at least one, it will ignore any more that it sees).</p>

<p><img alt="Checkbox List" src="http://blog.foxxtrot.net/2010/11/13/CheckboxList.png" width="245" height="111" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>

<p>The markup generated looks like this:</p>

<pre class="brush: html;">
&lt;p class="yui3-form-checkboxlist>
   &lt;label for="fruit">Select a fruit&lt;/label>
   &lt;ul>
    &lt;li>&lt;input type="checkbox" name="fruit" value="apple">Apple&lt;/input>&lt;/li>
    &lt;li>&lt;input type="checkbox" name="fruit" value="apricots">Apricots&lt;/input>&lt;/li>
    &lt;li>&lt;input type="checkbox" name="fruit" value="banana">Banana&lt;/input>&lt;/li>
    &lt;li>&lt;input type="checkbox" name="fruit" value="cherries">Cherries&lt;/input>&lt;/li>
    &lt;li>&lt;input type="checkbox" name="fruit" value="durian">Durian&lt;/input>&lt;/li>
    &lt;li>&lt;input type="checkbox" name="fruit" value="grapes">Grapes&lt;/input>&lt;/li>
    &lt;li>&lt;input type="checkbox" name="fruit" value="kiwi">Kiwi&lt;/input>&lt;/li>
    &lt;li>&lt;input type="checkbox" name="fruit" value="kumquat">Kumquat&lt;/input>&lt;/li>
    &lt;li>&lt;input type="checkbox" name="fruit" value="mango">Mango&lt;/input>&lt;/li>
    &lt;li>&lt;input type="checkbox" name="fruit" value="strawberry">Strawberry&lt;/input>&lt;/li>
   &lt;/ul>
&lt;/p>
</pre>

<pre class="brush: css;">
.yui3-form-checkboxlist > ul
{
   overflow: hidden;
   list-style-type: none;
}
</pre>

<p>It&#8217;s more verbose, but in a progressive enhancement situation that isn&#8217;t necessarily a problem, but more importantly, the form output that comes out of this when POSTing matches what comes out of the original implementation, so whatever you use to get the selected items on the server for a mutli-select should work here as well. I am not sure I have exceptional accessibility on this widget yet, but it should be possible to do fairly easily.</p>

<p>The more I look at this, the more I kind of question if I shouldn&#8217;t have just served up the checkbox list from the server. I suppose it&#8217;s a question for me of accessibility, particularly without JavaScript enabled, but I suppose the implementation I am enhancing may not be as accessible as it could be, even with title&#8217;s set to describe what the buttons do. Still, the concept of replacing multi-select boxes with lists of checkboxes makes a lot of sense to me, though it&#8217;s not as semantic for those browsers that already render in this fashion.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Codification of Common Courtesy - Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/2010/11/codification-of-common-courtesy.html" />
    <id>tag:blog.foxxtrot.net,2010://1.484</id>

    <published>2010-11-15T16:00:00Z</published>
    <updated>2010-11-14T07:16:51Z</updated>

    <summary> The Open Source community had a pretty sad movement start last week, in the form of the Open Respect Declaration started by Jono Bacon, but plenty of others have gotten involved. And the Decleration is certainly not bad, just...</summary>
    <author>
        <name>Jeff Craig</name>
        <uri>http://blog.foxxtrot.net/</uri>
    </author>
    
        <category term="Life" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="opensource" label="Open Source" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="respect" label="Respect" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        <![CDATA[<p><a href="http://www.openrespect.org/" style="display: block; float: right; margin: 5px;"><img src="
http://farm5.static.flickr.com/4023/5162711531_82e2ee8247_m.jpg"></a>
The Open Source community had a pretty sad movement start last week, in the form of the <a href="http://openrespect.org/">Open Respect Declaration</a> started by <a href="http://www.jonobacon.org/">Jono Bacon</a>, but plenty of others have gotten involved. And the Decleration is certainly not bad, just it seems as if it&#8217;s the kind of thing that should be wholly unnecessary.</p>

<p>I understand that it is not. <a href="http://blog.nerdchic.net/archives/418/">Noirin Shirley posted</a> on her blog about an unfortunate and abhorrent experience she had at this year&#8217;s ApacheCon in which she was sexually assaulted by another member of that community. What&#8217;s worse, the comments on her blog have more than a few where people feel she was in the wrong for calling out the member who assaulted her.</p>

<p>Now, I know that Open Respect is about much more than simply the misogyny present in the Open Source (or any Technical) field, or gaming and other traditionally male-dominated sub-culture. As a group, we tend to dismiss out of hand any opinion that runs contrary to our own, usually to the exclusion of any real discussion, let alone reasoned debate.</p>

<p>The Open Respect Declaration is, quite simply, a request that people behave reasonably. To disagree in a manner that doesn&#8217;t insult one another, in spite of the strength of conviction on our opinions. To behave as the meritocracy that we have always claimed to belong to in tech.</p>

<p>Last week, I was at <a href="http://yuilibrary.com/yuiconf2010/">YUIConf</a>, held on the Yahoo! Campus. While there, I spent significant amounts of time with people from Brazil, met dozens of Indians and Middle Easterners, and yes, even an (admittedly small) number of women. I believe I conducted myself in a respectful manner, and I am aware of no real problems with serious disrespect which occured at this event. However, that is simply my perception, and while I am reasonably observant, I am also not one whom is generally subjected to disrespect.</p>

<p>We are a sub-culture which is full of holy wars. vi-vs-emacs. Unix-vs-Windows. jQuery-vs-Everything Else. And I am certainly more opinionated than most on these subjects. I can, at times, be somewhat abrupt in my discussion, but I do strive to at least allow for the other person to be wrong. Or right. I&#8217;m argumentative, but it&#8217;s not really about winning, it&#8217;s about the debate. Sometimes it&#8217;s unsuccessful and unproductive, and I&#8217;m constantly working on making the debate more approachable for those people who shy away from anything resembling conflict.</p>

<p>Ultimately, Open Respect is something that should apply to any situation, not just Open Source and other technology fields, and hopefully this little movement that&#8217;s started can help make those members of our community who, intentionally or otherwise, behave hostilely or rudely, recognize their behavior, and begin to correct it.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>ASP.NET MVC and AJAX Updating - Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/2010/11/aspnet-mvc-and-ajax-updating.html" />
    <id>tag:blog.foxxtrot.net,2010://1.481</id>

    <published>2010-11-09T16:00:00Z</published>
    <updated>2010-11-13T19:49:17Z</updated>

    <summary>In the work I&#8217;ve been doing to update Washington State University&#8217;s online Schedules of Classes, I wanted to support users who had access to HTML5 History, by letting them save time on page loads by only bringing back the part...</summary>
    <author>
        <name>Jeff Craig</name>
        <uri>http://blog.foxxtrot.net/</uri>
    </author>
    
        <category term="Programming" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="ajax" label="AJAX" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="aspnet" label="ASP.NET" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="c" label="C#" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="JavaScript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mvc" label="MVC" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yui3" label="YUI3" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        <![CDATA[<p>In the work I&#8217;ve been doing to update <a href="http://www.wsu.edu/">Washington State University</a>&#8217;s online <a href="http://schedules.wsu.edu/">Schedules of Classes</a>, I wanted to support users who had access to HTML5 History, by letting them save time on page loads by only bringing back the part of the page where content was actually changing for a fair number of clicks that would happen on this page.</p>

<p>Now, the utility I use to accomplish this in JavaScript, YUI3&#8217;s <a href="http://developer.yahoo.com/yui/3/history/">History</a> module would support, more or less transparently, using the Hash to let users who aren&#8217;t on HTML5 compatible browsers utilize this feature, but that would have broken my URL bar, adding complexity to the use case of copying and pasting the URI into an e-mail or whatever else to share with other users.</p>

<p>With MVC, I knew that I&#8217;d be able to support the exact same URIs for the pages that were requested via AJAX as those requested via a more normal usage pattern. However, I also need to be sure that, when requested via AJAX, I use a different master page for the serving.</p>

<p>On my pages, there are two Content Areas on the page of interest. Fist, MainContnt is the inside of a div with the id of &#8216;main&#8217; on my Site.master. Second, ScriptContent is at the bottom of the page, so I can optionally add JavaScript content to be served on a page.</p>

<p>First, you&#8217;ll need to define you new Master page. I named mine AJAX.master, and it appears as follows:</p>

<pre class="brush: html;">
&lt;@ Master Language="C#" AutoEventWireup="false" %>
&lt;asp:ContentPlaceHolder ID="MainContent" runat="server">
&lt;/asp:ContentPlaceHolder>
&lt;asp:ContentPlaceHolder ID="ScriptContent" visibility="false" runat="server">
&lt;/asp:ContentPlaceHolder>
</pre>

<p>Visual Studio <em>will</em> complain about this not being valid, since it isn&#8217;t valid XHTML, but it&#8217;s a warning that, for this at least, you&#8217;ll just need to accept. Also, very important, is that <code>visibilty="false"</code> attribute on the &#8220;ScriptContent&#8221; placeholder. While declaring a ContentArea in a MasterPage does not require it to appear in a View, if you use it in your views, you will require it on the MasterPage, but with the visibility set to false, it won&#8217;t actually be rendered to the wire.</p>

<p>The JavaScript to make this request looks like this:</p>

<pre class="brush: javascript;">
YUI().use('io-base', 'node', function(Y) {
    var show = function(node) {
        node.setStyle('display', 'block');  
    }, hide = function(node) {
        node.setStyle('display', 'none');
    },
    sessionTimestamp = (new Date()).getTime(),
    mainContent, loadingContainer, dataContainer;

    mainContent = Y.one('#main');
    dataContainer = Y.Node.create('&lt;div>&lt;/div>');
    loadingContainer = Y.Node.create('&lt;div style="display: none;">&lt;img src="/loading.gif" />&lt;/div>');

    mainContent.setContent("");
    mainContent.append(dataContainer);
    mainContent.append(loadingContainer);

    Y.io("/uri/to/request", {
        data: "ts=" + sessionTimestamp,
        on: {
            start: function (id) {
                show(loadingContainer);
                hide(dataContainer);
            },
            success: function (id, o) {
                dataContainer.setContent(o.responseText);
            },
            failure: function (id, o) {
                var error = dataContainer.one('p.error');
                if (!error) {
                    dataContainer.prepend("&lt;p class='error'>&lt;/p>");
                    error = dataContainer.one('p.error');
                }
                error.setContent("There was an error retrieving your search results. Our staff has been notified.");
            },
            end: function (id) {
                show(dataContainer);
                hide(loadingContainer);
            }
        }
    });
});
</pre>

<p>The above modified #main so that we can show a loading image, I generate mine onn <a href="http://ajaxload.info/">ajaxload.info</a>, while we load the new page. Now, in truth, this is wrapped in a delegate event handler attached to all the &#8216;a&#8217; links on the page, and a check to make sure it&#8217;s one that should be handled in this way, but I&#8217;m trying to simplify as much as possible.</p>

<p>Okay, so we have our AJAX.master set up, and the JavaScript written, but that doesn&#8217;t make my Views work correctly. Luckily, there is a de facto standard in AJAX libraries these days that they all set the HTTP Header &#8220;X-Requested-With&#8221; to &#8220;XMLHttpRequest&#8221; when making AJAX calls. I know that YUI and jQuery both do this, I&#8217;m fairly certain that Prototype, MooTools and Dojo do as well.</p>

<p>By adding the following class, you can avoid needing to perform this check inside of each individual controller action method.</p>

<pre class="brush: csharp;">
namespace foxxtrot.MVC.AJAX {
    using System.Web.Mvc;

    public class AJAXViewEngine : WebFormViewEngine {
        public override ViewEngineResult FindView(ControllerContext context,
                                                  string viewName,
                                                  string masterName,
                                                  bool useCache)
        {
            if (context.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") {
                masterName = "AJAX";
            }

            return base.FindView(context, viewName, masterName, useCache);
        }
    }
}
</pre>

<p>It&#8217;s that simple. Now, anytime one of my Controllers gets called with an AJAX-y header, it will return back only the MainContent. To activate it, just add the following lines to your Application_Start method in your Global.asax.cs file.</p>

<pre class="brush: csharp;">
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new foxxtrot.MVC.AJAX.AJAXViewEngine());
</pre>

<p>Soon I&#8217;ll have time to finish speeding up my database layer, so you&#8217;ll be able to experience this technique on a live site.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Meet me at YUIConf 2010!  - Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/2010/11/meet-me-at-yuiconf-2010.html" />
    <id>tag:blog.foxxtrot.net,2010://1.482</id>

    <published>2010-11-08T16:00:00Z</published>
    <updated>2010-11-08T00:14:33Z</updated>

    <summary>For the next sevral days I&#8217;m going to be a YUIConf, Yahoo!&#8217;s Front-End Engineering Conference. I expect I&#8217;ll have plenty of stuff to talk about here after the event, particularly Node.JS related, as I intend to avail myself heavily of...</summary>
    <author>
        <name>Jeff Craig</name>
        <uri>http://blog.foxxtrot.net/</uri>
    </author>
    
        <category term="Internet" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="yahoo" label="Yahoo!" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yui" label="YUI" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yuiconf" label="YUIConf" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        <![CDATA[<p>For the next sevral days I&#8217;m going to be a <a href="http://yuilibrary.com/yuiconf2010/">YUIConf</a>, Yahoo!&#8217;s Front-End Engineering Conference. I expect I&#8217;ll have plenty of stuff to talk about here after the event, particularly Node.JS related, as I intend to avail myself heavily of that track.</p>

<p>For those who are here as well, I look forward to meeting you! For those who are not, the <a href="http://yuilibrary.com/yuiconf2010/schedule.php">sessions</a> will be posted online sometime soon after the conference. I&#8217;ve been here in the Bay Area since Saturday, and my only regret now is that I leave pretty early on Thursday, so I won&#8217;t have much time for exploration.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Thoughts on YUI vs. jQuery - Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/2010/11/thoughts-on-yui-vs-jquery.html" />
    <id>tag:blog.foxxtrot.net,2010://1.480</id>

    <published>2010-11-05T15:00:00Z</published>
    <updated>2010-11-05T06:12:50Z</updated>

    <summary>There have been several discussions about how YUI can better compete in the JavaScript Framework space. The biggest discussion has been held on quora in a thread entitled How could YUI improve its image compared to jQuery, MooTools, etc.. The...</summary>
    <author>
        <name>Jeff Craig</name>
        <uri>http://blog.foxxtrot.net/</uri>
    </author>
    
        <category term="Computing" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="jquery" label="jQuery" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="opensource" label="Open Source" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yahoo" label="Yahoo!" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yui" label="YUI" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        <![CDATA[<p>There have been several discussions about how YUI can better compete in the JavaScript Framework space. The biggest discussion has been held on <a href="http://www.quora.com/">quora</a> in a thread entitled <a href="http://www.quora.com/How-could-YUI3-improve-its-image-compared-to-jQuery-MooTools-etc/">How could YUI improve its image compared to jQuery, MooTools, etc.</a>. The question garnered enough attention that <a href="http://ejohn.org/">John Resig</a>, creator of <a href="http://jquery.com/">jQuery</a>, the de facto leader in this space, felt inclined to <a href="http://www.quora.com/How-could-YUI3-improve-its-image-compared-to-jQuery-MooTools-etc/answer/John-Resig">respond</a>.</p>

<p>John&#8217;s comments begin fairly reasonably. The YUI project does need to centralize on a single location. Currently, the forums, gallery and bug trackers are on <a href="http://yuilibrary.com/">YUI Library</a>, while the core documentation still lives on the [Yahoo! Developer Network (http://developer.yahoo.com/yui/). However, this is already something that is being addressed, as demoed by Allen Rabinovich at <a href="http://yuilibrary.com/forum/viewtopic.php?f=18&amp;t=5031">YUI Open Hours from September 29th</a> (<a href="http://yuilibrary.com/forum/viewtopic.php?p=17653#p17653">video</a>), and it&#8217;s an issue I know I raised back when YUI Library was launched.</p>

<p>More than that, the redesign of YUI Library really seems to be centered around highlighting the gallery, in effect trying to show off gallery modules as nearly on par with the core library (though still filterable and clearly marked). Which goes a long way to address the issue of making community contributions clear. Plus, the core team has been getting better at looking at external submissions, though there are a few places I&#8217;d still like to see them improve in that respect, and no, I&#8217;m not talking about my <a href="http://yuilibrary.com/projects/builder/ticket/26">builder agenda</a>.</p>

<p>Now, for the rest, I&#8217;m going to try hard to to parrot <a href="http://www.nczonline.net/blog/2010/11/03/response-to-john-resigs-comments-about-yui/">Nicholas Zakas&#8217; comments</a>, though I agree with pretty much everything he has to say. The very idea that YUI&#8217;s association with Yahoo! is a weakness is simply ridiculous. </p>

<p>Admittedly, there are a lot of open source projects which are corporately sponsored that are hampered by that association. MySQL&#8217;s development didn&#8217;t seem as rich after Sun bought it, and now Oracle is reducing what the open source edition is capable of. Microsoft has a lot of MS-PL code that they can&#8217;t take external contributions for, making their code drops nearly useless. Google&#8217;s Android is much the same way, since the work being done by Google Engineers only seems to be made public in periodic large code drops.</p>

<p>Particularly through Gallery, YUI has gotten more and more open to external contributions. Personally, I&#8217;ve even gotten a few small changes in the core of 3. What makes an Open Source project is not it&#8217;s sponsors, but it&#8217;s community. It&#8217;s why Canonical has been receiving so much flak lately from the GNOME Community. They aren&#8217;t playing nice with the rest of the community, in part because they seem to think that innovation can&#8217;t happen quickly enough in that environment. I&#8217;m split on the issue, but that&#8217;s not the subject of this post.</p>

<p>Yahoo! has built a solid community around YUI. And that community has gotten a lot stronger in the last year. Just looking at the <a href="http://yuilibrary.com/gallery/">gallery</a> shows a healthy number of contributions, most from outside of Yahoo! While the core is mainly commits from inside, they aren&#8217;t all, but that&#8217;s the way of most Open Source projects. Most commits come from a small core of developers. And Nicholas is right, having YUI inside of Yahoo! drives some pretty awesome development. The core modules for the Rich Text Editor and Autocomplete for YUI3 were driven by internal needs, that will now benefit all of us.</p>

<p>Personally, I don&#8217;t view YUI and jQuery in the same space. jQuery has always felt to me like a <a href="http://en.wikipedia.org/wiki/Domain-specific_language">DSL</a> for the DOM. A person could use it just fine without knowing any JavaScript. And the people I know who love it most, seem to fall into that mold. YUI3 requires at least basic skill with the language, and more if you really want to exploit it well and extend it. There are some serious web sites built with YUI, and it&#8217;s excelled at that. I suspect that more people will begin to take note of that sooner rather than later, especially if we can improve the documentation that introduces a user to the library.</p>

<p>It&#8217;s not an us versus them argument, and couching it in those terms is going to do us a lot more harm than good.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Paper Review: Thumbs Up or Thumbs Down?  - Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/2010/11/paper-review-thumbs-up-or-thumbs-down.html" />
    <id>tag:blog.foxxtrot.net,2010://1.479</id>

    <published>2010-11-04T15:00:00Z</published>
    <updated>2010-11-04T02:24:48Z</updated>

    <summary>Thumbs Up or Thumbs Down? Semantic Orientation Applied to Unsupervised Classification of Reviews, a 2002 paper from Peter D. Turney of Canada&#8217;s National Research Council, was referenced by the Semantic Analysis paper I read a few weeks back. You may...</summary>
    <author>
        <name>Jeff Craig</name>
        <uri>http://blog.foxxtrot.net/</uri>
    </author>
    
        <category term="Research" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="research" label="Research" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="review" label="Review" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="semantic" label="Semantic" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        <![CDATA[<p><cite><a href="http://nparc.cisti-icist.nrc-cnrc.gc.ca/npsi/ctrl?action=rtdoc&amp;an=8914166">Thumbs Up or Thumbs Down? Semantic Orientation Applied to Unsupervised Classification of Reviews</a></cite>, a 2002 paper from <a href="peter.turney@nrc.ca">Peter D. Turney</a> of Canada&#8217;s National Research Council, was referenced by the <a href="http://blog.foxxtrot.net/2010/09/sentiment-analysis.html">Semantic Analysis</a> paper I read a few weeks back. </p>

<p>You may recall that I quite enjoyed that paper, and I felt like I was getting a fair amount out of it. However, I feel that about all this paper really did for me was point me toward other papers that may contain more real information.</p>

<p>The algorithm proposed is interesting, in that it looks at adjectives and adverbs to determine tone, but attempts to assign context by taking the next word, since the context of a adjective can determine if it&#8217;s positive or negative sometimes. This measurement is done based on a statistical ratio weighting on probabilities that words co-occur.</p>

<p>This idea of phrase dependence on the adverb/adjective does appear to carry some success. On non-film reviews, the algorithm would generally be able to guess over 70% of the time if the review was positive or negative. Even with film, it was right 60% of the time, only weakened by the fact that almost every movie carries with it good and bad that people talk about in the same review.</p>

<p>I&#8217;m not entirely sure how he seeded the values used to generate the Semantic Orientation scores, which is probably why I&#8217;m not terribly into this paper. Those scores appear to hold the majority of sway over the outcome of the algorithm, and I don&#8217;t know where they came from.</p>

<p>The basic finding, that you get a significant boost to the accuracy of your result by considering the word following the adjective or adverb, is significant, but for some reason this paper really failed to grab my attention with the possibilities it raised. Perhaps I just need to read more of the work it&#8217;s based on.</p>

<p>Next Week: <cite><a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.12.5875&amp;rep=rep1&amp;type=pdf">On sequential Monte Carlo sampling methods for Bayesian filtering</a></cite></p>
]]>
        

    </content>
</entry>

<entry>
    <title>Getting the Most out of LINQ - Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/2010/11/getting-the-most-out-of-linq.html" />
    <id>tag:blog.foxxtrot.net,2010://1.476</id>

    <published>2010-11-02T15:00:00Z</published>
    <updated>2010-11-13T19:51:18Z</updated>

    <summary>Language Integrated Queries, or LINQ, is a language feature Microsoft introduced into .NET 3.5 which allows for a more functional approach to programming in .NET in that it allows you to easily work on collections of data, filtering them with...</summary>
    <author>
        <name>Jeff Craig</name>
        <uri>http://blog.foxxtrot.net/</uri>
    </author>
    
        <category term="Programming" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="net" label=".NET" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="c" label="C#" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="functionalprogramming" label="Functional Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="linq" label="LINQ" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        <![CDATA[<p>Language Integrated Queries, or LINQ, is a language feature Microsoft introduced into .NET 3.5 which allows for a more functional approach to programming in .NET in that it allows you to easily work on collections of data, filtering them with custom operations, transforming them (mapping), or combining them (reducing) in interesting ways. I use LINQ <em>all the time</em> in my C# code these days, however, I&#8217;ve found that more and more, I&#8217;m using the so-called &#8216;Lambda&#8217; syntax over the &#8216;query&#8217; syntax.</p>

<p>The Query syntax is meant to be simpler, but that simplicity makes it far less powerful. But to start, here&#8217;s a pair of identical queries, first in Query syntax, then Lambda. Note, I&#8217;m talking here about LINQ-to-Objects, but this translates to LINQ-to-SQL almost as easily.</p>

<pre class="brush: csharp;">
var collection; // Some sort of collection, anything that implements IEnumberable

var queryResult = from c in collection
                  where c.value == "Awesome"
                  select c.otherField;

var lambdaResult = collection.Where(c => c.value == "Awesome")
                             .Select(c => c.otherField);
</pre>

<p>Two identical queries, with a collection being filtered and then mapped to a new imput. Now, I do find that Query syntax is <em>far</em> easier to map with than lambda syntax, so I typically start my queries in query syntax, to get the basics out of the way, and in the background the query syntax is converted to Lamda syntax before compilation, making these examples nearly identical in their bytecode output. The point of the Query syntax, I believe, was to be more familiar for those people accustomed to know SQL, but aren&#8217;t comfortable with functional programming, however, using Lambdas in C# allows you to do some <em>very</em> powerful and useful things.</p>

<p>To take brief sidetrack into LINQ-to-SQL (or Entities, this would work either way), I use code similar to the following for a <em>lot</em> of queries I run in my data models.</p>

<pre class="brush: csharp;">
public class Model {
    var database = new DatabaseContext();

    private IQueryable&lt;LocalDataType> GetBaseQuery()
    {
        return from d in database.Table
               select new LocalDataType()
               {
                    Id = d.Id
                    Value = d.field1,
                    Data = d.field2
               };
    }
}
</pre>

<p>LocalDataType is simply a <a href="http://en.wikipedia.org/wiki/Data_Transfer_Object">Data Transfer Object (DTO)</a> that I&#8217;ve defined as what needs to be returned from my Model. By having GetBaseQuery private, I can publish an interface of functions that know how to get the data out of database.Table, and translate it into LocalDataType, all while being able to apply their own filters, with virtually no code dupication. For instance, to get the data based on it&#8217;s numeric Id, I can add the following function:</p>

<pre class="brush: csharp;">
private IEnumerable&lt;LocalDataType> GetById(int id)
{
    return GetBaseQuery().Where(c => c.Id == id);
}
</pre>

<p>Let&#8217;s say I have more complex filtering, where I may not always need to test something:</p>

<pre class="brush: csharp;">
private IEnumerable&lt;LocalDataType> GetByCode(string[] validCodes)
{
    if (validCodes.Length > 0) {
        return GetBaseQuery().Where(c => validCodes.Contains(c.Data));
    } else {
        return GetBaseQuery();
    }
}
</pre>

<p>This allows me to quickly build variable queries that, in the case of LINQ-to-SQL, will always execute on the SQL Server. SQL is good at filtering, particularly over keyed values, so you&#8217;re always going to have better performance doing as much filtering on the SQL Server, even before you count the reduced data coming over the wire.</p>

<p>My point is simple: the Query syntax of LINQ is a bit misleading. It suggests that queries are things that are built once and used as they are. However, they are in fact mercurial things, which can be built on and extended and made better as you work with them, and seeing that is a <em>lot</em> clearer in the Lambda syntax. Using LINQ in this fashion will make your code far more maintainable and easier to extend, since you&#8217;ll be working with common building blocks, and you&#8217;ll be avoiding that copy-paste mentality that can ofter pervade hard-to-maintain codebases.</p>

<p>Plus, there are some functions, like Aggregate, that don&#8217;t exist in Query syntax. In my current project, I need to occasionally filter by course level, ie 100-level, 200-level, etc. The easiest way to do this, it turns out, is to test the first character of each course against a list of approved courses. In addition, there is a requirement that one choice, actually maps out to all 600-, 700-, and 800- level courses.</p>

<pre class="brush: csharp;">
private IEnumerable&lt;LocalDataType> GetByCourseLevel(IEnumerable&lt;int> courseLevel)
{
    //Course Level is a list of ints 100, 200, 300, 400, etc, fed in based on the selections off a HTML form.
    string courseLevelWorking = courseLevel == null ? string.Empty : courseLevel.Aggregate&lt;int, string>(string.Empty, (workingString, next) => {
        if (next == 600) {
            return workingString + "678";
        } else {
            return workingString + (next / 100).ToString();
        }
    });

    var query = GetBaseQuery();
    if (courseLevelWorking != string.Empty) {
        query = query.Where(c => courseLevelWorking.Contains(c.CourseNumber.ToString()[0]));
    }
    return query;
}
</pre>

<p>LINQ allows you to build amazingly complex queries in an additive and clean fashion, and taking your LINQ usage from simple, to complex yet maintainable requires very little work, with just a bit of forethought.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Palouse Code Camp 2010 Wrap-Up - Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/2010/11/palouse-code-camp-2010-wrap-up.html" />
    <id>tag:blog.foxxtrot.net,2010://1.478</id>

    <published>2010-11-01T19:30:00Z</published>
    <updated>2010-11-01T17:04:41Z</updated>

    <summary>This Saturday was the first ever Palouse Code Camp, hopefully the first is a long line. We&#8217;d been planning it seriously for 8 months or so, though we&#8217;d been knocking the idea around for over a year. We did not...</summary>
    <author>
        <name>Jeff Craig</name>
        <uri>http://blog.foxxtrot.net/</uri>
    </author>
    
        <category term="Computing" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="codecamp" label="Code Camp" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="microsoft" label="Microsoft" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="palousecodecamp" label="Palouse Code Camp" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="presentation" label="Presentation" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yui3" label="YUI3" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        <![CDATA[<p>This Saturday was the first ever <a href="http://palousecodecamp.org/">Palouse Code Camp</a>, hopefully the first is a long line. We&#8217;d been planning it seriously for 8 months or so, though we&#8217;d been knocking the idea around for over a year. We did not draw the crowd we&#8217;d hoped for (we had ~30 people), so it was a very small event, but those who attended seemed to enjoy the event, so I think it still needs to be counted a success. Our largest failure in advertising was clearly with the students, as we had virtually no student representation, something which we&#8217;ve identified ways to fix for next year. Our sponsorship was also dramatically lower than we&#8217;d hoped, but generous donations from <a href="http://microsoft.com/">Microsoft</a> and WSU&#8217;s <a href="http://www.sesrc.wsu.edu/sesrcsite/">Social &amp; Economic Sciences Research Center</a> ensured that all our expenses for the year were covered, even leaving us a bit left over to keep us afloat until we start fundraising for next year (which will start <em>much</em> sooner).</p>

<p>We really appreciated all our speakers, <a href="http://jrcs3.blogspot.com/">Jack Stephens</a> from Spokane, gave a sort of overview of LINQ, using part of it from his talk on using LINQ with DataSets. <a href="http://sargelog.blogspot.com/">Dave Sargent</a>, an organizer, who talked about Website Performance (based in part on a talk I gave a few years ago) and MS SQL Server Administration. WSU Professor <a href="http://www.tricity.wsu.edu/~bobl">Robert Lewis</a> with is Introduction to Python talk, which I think has finally convinced Catherine that she really ought to learn Python for her research work. <a href="http://blogs.msdn.com/mithund">Mithun Dhar</a>, our regional Developer Evangelist from Microsoft, came out to talk about some of what Microsoft is doing in the near term, and to give all our attendees a free month of <a href="http://www.microsoft.com/windowsazure/">Windows Azure</a> service. <a href="http://palousecodecamp.org/2010/www.hurdlow.com/blog">Jason Hurdlow</a>, organizer, redid his XSLT talk, focusing this time a bit more on XPath, I think.</p>

<p>However, I want to give a <em>very</em> special thanks to <a href="http://www.intellitechture.com/mark">Mark Michaelis</a>, who volunteered to do &#8220;as many talks as we needed&#8221;, and gladly gave us four. MSBuild, Powershell, MVVM with WPF, and Pragmatic Unit Testing. I didn&#8217;t get a chance to attend any fo Mark&#8217;s talks, but I do believe they were very well attended. We&#8217;d only made contact with Mark a bit over a week from the event, and his support was amazing.</p>

<p>Myself, I gave two talks. The first, was an update of my Introduction to YUI3 talk I gave at <a href="http://portlandcodecamp.org/">Portland Code Camp</a> earlier this year, updated for YUI 3.2.0 (and of course, YUI 3.3.0pr1 was tagged in git today). I had around ten people, and amazing turnout given the size of the event, and was ecstatic. This talk focused more on SimpleYUI, but I made sure to touch on the Module pattern, as I&#8217;m still not entirely comfortable with SimpleYUI. The code is up on <a href="http://github.com/foxxtrot/yui3intro">GitHub</a>, and the slides are on <a href="http://www.slideshare.net/foxxtrot/introduction-to-yui3-palouse-code-camp-2010">SlideShare</a>. For those who attended the talk, I&#8217;d really appreciate <a href="http://speakerrate.com/talks/4979-introduction-to-yui3">any ratings you can provide</a>. </p>

<p>My second talk was about the YUI3 Component Framework and module creation, and it only had a single attendee, but he was willing to stay, and I wanted to talk about it, so I went ahead. <a href="http://www.slideshare.net/foxxtrot/slides-5614238">Slides here</a>.</p>

<p>We learned a lot to improve for next year, and a lot of the groundwork is done, so I fully expect to have a good success in 2011.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Book Review - HTML + CSS: The Good Parts - Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/2010/10/book-review---html-css-the-good-parts.html" />
    <id>tag:blog.foxxtrot.net,2010://1.477</id>

    <published>2010-10-29T15:00:00Z</published>
    <updated>2010-10-29T06:41:15Z</updated>

    <summary>Over the last few weeks, I read Ben Henick&#8217;s HTML + CSS: The Good Parts, published by O&#8217;Reilly Media. I grabbed the book in part because of having read the excellent JavaScript: The Good Parts a couple of years ago,...</summary>
    <author>
        <name>Jeff Craig</name>
        <uri>http://blog.foxxtrot.net/</uri>
    </author>
    
        <category term="Books" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="books" label="Books" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="css" label="CSS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="goodparts" label="Good Parts" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html" label="HTML" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="JavaScript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="reviews" label="Reviews" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        <![CDATA[<p>Over the last few weeks, I read <a href="http://www.henick.net/">Ben Henick</a>&#8217;s <cite><a href="http://oreilly.com/catalog/9780596157616">HTML + CSS: The Good Parts</a></cite>, published by <a href="http://oreilly.com/">O&#8217;Reilly Media</a>. I grabbed the book in part because of having read the <em>excellent</em> <a href="http://blog.foxxtrot.net/2008/06/javascript-the-good-parts.html">JavaScript: The Good Parts</a> a couple of years ago, written by <a href="http://yahoo.com">Yahoo!</a>&#8217;s own <a href="http://www.crockford.com/">Douglas Crockford</a>, whom I will have the opportunity to hear in a couple of weeks at <a href="http://yuilibrary.com/yuiconf2010/">YUIConf</a>. Unfortunately, Henick&#8217;s book didn&#8217;t strike me as strongly, but I think that was largely a problem of scope.</p>

<p>See, Crockford only had to talk about JavaScript, and specifically the language as defined in the ECMA standards. Henick, on the other hand, has to discuss not only the <em>standards</em> around HTML, CSS, and DOM, but <em>also</em> the differences between browser implementations, at least in the most important places. True, Henick&#8217;s book is twice as long, but the problem space is over ten times as big.</p>

<p>I&#8217;ve been doing web development for the last four years, not exceptionally long, but in that time I&#8217;ve thrown myself into the problem space trying to become proficient. Had I read this book three years ago, I&#8217;d probably feel a lot more positive about it. Which is unfair, it&#8217;s actually an excellent book, even with it&#8217;s near constant referrals to the <a href="http://www.htmlcssgoodparts.net/">companion website</a>, and even having finished the book, I have used it for reference on a few things that I knew I&#8217;d remembered reading in it, particularly when investigating how to deal with the IE menace from time to time.</p>

<p>This book is not the canonical source for any one topic, but as an overview, it&#8217;s excellent. And Henick is always there pointing toward more complete resources, from references to dozens of other books or websites that cover the topics in more details. If I managed new web developers, this is probably the book I&#8217;d issue to all my hires. It contains plenty of good information, and it&#8217;s a solid overview.</p>

<p>If you&#8217;re new to the web, it&#8217;s where I&#8217;d suggest you start. If you&#8217;ve been in the ecosystem for a while, and have really been immersed in it, well&#8230;this probably isn&#8217;t the book for you. I suspect the primary reason I reached to it for reference recently was largely that it was fresh in my mind. Make no doubt, this book is <em>useful</em>, but the size of the problem it&#8217;s talking about is so broad, that is mostly only scratches the surface. I know that I&#8217;ve collected more complete references on many of these issues, either in books or in links.</p>

<p>The book was good, but I don&#8217;t necessarily think it was good for <em>me</em>.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Paper Review: Robust Flexible Handling of Inputs with Uncertainty - Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/2010/10/paper-review-robust-flexible-handling-of-inputs-with-uncertainty.html" />
    <id>tag:blog.foxxtrot.net,2010://1.475</id>

    <published>2010-10-28T15:00:00Z</published>
    <updated>2010-10-28T05:32:55Z</updated>

    <summary>This week I read A Framework for Robust and Flexible Handling of Inputs with Uncertainty, written by Carnegie Mellon researchers Julia Schwarz, Scott E. Hudson and Jennifer Mankoff, and Microsoft Research&#8217;s Andrew D. Wilson. I grabbed this paper because I&#8217;ve...</summary>
    <author>
        <name>Jeff Craig</name>
        <uri>http://blog.foxxtrot.net/</uri>
    </author>
    
        <category term="Computing" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="probability" label="Probability" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="research" label="Research" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ubuntu" label="Ubuntu" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="userinterface" label="User Interface" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        <![CDATA[<p>This week I read <cite><a href="http://notjulie.com/notjulie/research/probinput/paper.pdf">A Framework for Robust and Flexible Handling of Inputs with Uncertainty</a></cite>, written by Carnegie Mellon researchers Julia Schwarz, Scott E. Hudson and Jennifer Mankoff, and Microsoft Research&#8217;s Andrew D. Wilson. I grabbed this paper because I&#8217;ve seen several references to it recently by people working on touch interfaces, such as Canoncial with the new <a href="https://wiki.ubuntu.com/Multitouch">Multitouch</a> support they&#8217;ve made a priority for Ubuntu 11.04. Howver, while the information in this paper is relevant to touch interfaces, I think there is a <em>lot</em> of lessons to be learned from this paper for writers of UI frameworks.</p>

<p>The basis of the methods explored in this paper are fairly simple. Knowing that some events are hard to lock down to a single item, like a user touching a space that overlaps multiple buttons in a UI, the framework would support handling multiple events until it&#8217;s able to determine which one is the one that should be handled, based on changing probabilities as condition change. The first example provided was the user touching near the edge of UI window that had a desktop icon also under the window edge. Is the user trying to move the desktop icon, or resize the window? Under the framework, both events would be handled until it can be determined which one was the &#8216;real&#8217; event. Too much vertical motion? User was almost certainly not trying to resize the window, move the desktop icon. Can&#8217;t determine? Don&#8217;t do either.</p>

<p>Certainly, this makes a lot of sense in touch. Currently, when designing touch UIs, the current thinking is that touchable controls should be large enough that the user is unlikely to miss. One of the working examples in the paper involves the size of the user&#8217;s finger basically covering <em>three</em> small buttons, one of which happens to be disabled, and correctly determining the right course of action, which based on their example may not have worked out if that third button had been enabled.</p>

<p>This research was most interesting, because they were also able to provide examples of how this system could improve the user experience for vision- and motor-impaired users. Plus, it can apply to simple mouse interactions as well. In the default GNOME themes for Ubuntu since 10.04, the border of a window is almost impossible to select for window resizing, making it nearly impossible to resize the windows, unless you grab the corners, which may not always be what you want.</p>

<p>The nice thing about this paper, is that it definitely talks about a <em>framework</em>, and I&#8217;m a bit disappointed that their .NET code doesn&#8217;t seem to be available. But since it&#8217;s a framework, the bulk of the development would need to be done by the UI toolkit developers, and sensible probabilty function defaults could be defined that many developers probably wouldn&#8217;t generally need to modify.</p>

<p>In a sense, I&#8217;m a bit disappointed by all the attention this paper has gotten in the &#8216;touch&#8217; interfaces communities, because I really think that it&#8217;s as important, if not more, for accessibility, and improving ease of use for impaired users and even the rest of us. It may add a bit of overhead, both on the system and developers, but the authors mention in the paper that they built an accessible set of text inputs in about 130 lines of code, that would determine if input made sense for them via regular expressions. Adding support to take voice input was about another 30 lines of code.</p>

<p>My hope, after reading this paper, is that the multitouch working that is going to be happening in Ubuntu over the next few months will impact the rest of the system positively as well. I think that&#8217;s reasonable, since I&#8217;ve heard that there is a huge accessibility focus at the developer summit this week. Now, there is still a lot of work to be done in this space, I think, particularly as we move more toward gesture based inputs and such, but there are definitely places where it could be applied today, though I think it would best be done at the UI Toolkit layer, so that it&#8217;s available as broadly as possible.</p>

<p>Next weeks paper: <cite><a href="http://nparc.cisti-icist.nrc-cnrc.gc.ca/npsi/ctrl?action=rtdoc&amp;an=8914166">Thumbs up or thumbs down?; semantic orientation applied to unsupervised classification of reviews</a></cite>.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>CSS3 Query Selectors Specificity and Performance - Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/2010/10/css3-query-selectors-specificity-and-performance.html" />
    <id>tag:blog.foxxtrot.net,2010://1.473</id>

    <published>2010-10-26T15:00:00Z</published>
    <updated>2010-10-25T21:02:45Z</updated>

    <summary>Yesterday, on #yui on freenode, Anthony Pipkin answered someone who was trying to select a node via it&#8217;s &#8216;name&#8217; property with the suggestion of using Y.all(&#8216;[name=blargh]&#8217;). I asked him why he didn&#8217;t use input, to which he responded that he...</summary>
    <author>
        <name>Jeff Craig</name>
        <uri>http://blog.foxxtrot.net/</uri>
    </author>
    
        <category term="Programming" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css3" label="CSS3" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="JavaScript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jquery" label="jQuery" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="selectors" label="Selectors" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yui3" label="YUI3" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        <![CDATA[<p>Yesterday, on #yui on <a href="http://freenode.net/">freenode</a>, <a href="http://twitter.com/apipkin">Anthony Pipkin</a> answered someone who was trying to select a node via it&#8217;s &#8216;name&#8217; property with the suggestion of using Y.all(&#8216;<em>[name=blargh]&#8217;). I asked him why he didn&#8217;t use input, to which he responded that he was trying to include textarea and select elements as well, which was an absolutely fair point. However, I was immediately curious about the *performance</em> hit the selector took using &#8216;*&#8217; instead of &#8216;input&#8217; or something more specific.</p>

<p>So, off the <a href="http://jsperf.com/">jsperf</a> I <a href="http://jsperf.com/specific-vs-generic-selectors">went</a> to build two test cases for each jQuery and YUI, one each for the specific selector (&#8216;input[name=foo]&#8217;) and for the generic selector (&#8216;*[name=foo]&#8217;). I encourage you to go run the test to update the <a href="http://www.browserscope.org/">Browserscope</a> numbers.</p>

<p>The findings, in short, were straightforward. Using the specific selector was always faster, by a noticeable margin. In Firefox 4, it&#8217;s only about 5%, but in Chome 7, that goes to around 14%, and nearly 30% slower in IE8.</p>

<p>Now, for a one-use selector, this may not be that big of an issue, but any repeating selector should absolutely be as specific as possible, and it&#8217;s worth noting that a poorly chosen selector really can have significant performance impact.</p>

<p>As an aside, you&#8217;ll likely notice that in current versions of both YUI and jQuery, YUI outperforms jQuery by a noticeable margin.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Dishwasher Installation - Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/2010/10/dishwasher-installation.html" />
    <id>tag:blog.foxxtrot.net,2010://1.472</id>

    <published>2010-10-25T19:30:00Z</published>
    <updated>2010-10-25T16:37:12Z</updated>

    <summary>A month or so back, the Dishwasher in our place (a Whirlpool SHU5000-0) died suddenly. That particular model, it seems was originally manufactured in 1989, and parts for it are basically impossible to locate. So, after messing around trying to...</summary>
    <author>
        <name>Jeff Craig</name>
        <uri>http://blog.foxxtrot.net/</uri>
    </author>
    
        <category term="Homeownership" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="appliances" label="Appliances" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="dishwasher" label="Dishwasher" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="home" label="Home" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="plumbing" label="Plumbing" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        <![CDATA[<p>A month or so back, the Dishwasher in our place (a Whirlpool SHU5000-0) died suddenly. That particular model, it seems was originally manufactured in 1989, and parts for it are basically impossible to locate. So, after messing around trying to locate parts, I finally came to the decision that I had no choice but to buy a new one. So, Catherine and I drove up to Spokane to look at the <a href="http://www.fredsappliances.com/">Fred&#8217;s Appliance</a> ding-and-dent center to see if we could get a good deal on a unit. For around $300 (with $100 in rebates for it being <a href="http://www.energystar.gov/">Energy Star</a>), we walked away with a unit that is larger, worlds quieter, and generally better than the unit that we replaced. It&#8217;s an <a href="http://estateappliances.com/">Estate</a> unit, which was nearly identical to a Whirlpool (Estate is a Whirlpool brand) that cost about $200 more, so I think we did well. In fact, with a few simple hacks, I think I could make it identical, but I&#8217;ve been informed that dishwasher hacking is not in my future.</p>

<p>There are a few things that the otherwise <em>very</em> helpful sales guy at Fred&#8217;s didn&#8217;t talk to us about, and that was that we didn&#8217;t get a blanket for the dishwasher, which can help with sound and which we&#8217;ll probably need to buy later, and Dishwashers do not typically come with electrical cords, since some are hardwired into the house electrical evidently. We installed without the blanket, which may be okay since this unit is already so much quieter than our old one, and for the electrical cable, I built one with extension cord parts bought at the local hardware store, and it works fine.</p>

<p>Installing the unit was fairly straight forward. Holes had already been drilled in the cabinet, though I had to drill an extra one for the water line since the plug on my custom cable was dramatically larger than on the old cable. The original water line was bent copper, which I thought was probably only done twenty years ago, but according to the installation instructions for my new unit apparently isn&#8217;t that unusual anymore, still I had to replace the line since the interface wasn&#8217;t compatible, and went with a braided steel cable, which wasn&#8217;t a problem because the size of dishwasher supply lines apparently hasn&#8217;t changed over the last few decades.</p>

<p>We followed the instructions in the book pretty closely. Ran the water and drain lines, taping them to the ground and pushing the dishwasher over them, the water line having a 90&deg; adapter. The electrical line was a bit short, so I tied twine it to it, and Catherine fed it through the cabinet hole while I pushed the dishwasher in. In retrospect, I wish we&#8217;d done the same with the water line, but more on that in a minute.</p>

<p>Hooking up the drain line to the waste disposal (or drain tee), and to the dishwasher simply involved a pair of compression clips included with the dishwasher. A good pair of pliers, and a bit of hand strength, is all that&#8217;s needed to install those. What was the biggest challenge after the unit was standing up, was installing the water supply line. This was partially because the 90&deg; adapter was brass, with a large rubber grommet that would slip loose, while the connection on the dishwasher was plastic. Installing that under very tight quarters was quite difficult. Next time, I&#8217;m going to attach the line to the washer, and pull it through the cabinet using twine. It will be easier and cause me less heartache, I&#8217;m sure.</p>

<p>There were two things I learned from this experience that are <em>very</em> important. If you have an opportunity to get the install guide easily, take it. They unboxed my unit at the store, and while I had the opportunity to pull out the instructions before it was wrapped in plastic to go in my truck, I didn&#8217;t take it and they were sealed inside the washer, meaning my first trip to the hardware store for parts did not get me everything. Second, make sure you understand what you need. To properly install the electrical cable, I needed a strain relief that was not included on the parts list, because <em>apparently</em> I was expected to buy a $20 electrical cord kit from Whirlpool. Building my own cable was ~$5, including the strain relief. Also, if the hole your strain relief needs to fill is 7/8&#8221;, a 3/8&#8221; strain relief is actually large enough, because they measure the size differently, luckily the guy at the hardware store was really helpful, but I still bought a few extra, with the intent to return them if they didn&#8217;t fit.</p>

<p>In the end, this process ended up being significantly harder than I thought it would be. There are a few tricks I learned that will make future installations (if I have any) significantly easier. It may have taken a lot longer than it would have if we paid someone, but I figure we&#8217;d have had to pay a plumber enough that it was worth it, even if the kitchen being torn up did stress the cats out pretty bad.</p>

<p>Oh, one last note, the shutoff valves under our sink were rusted shut <em>really</em> badly. You should close them <em>at least</em> yearly, preferably every six months, to make sure that in an emergency you can shut them off easily. To get ours unstuck, I used <a href="http://pbblaster.net/">PB Blaster</a>, which smells bad and kind of goes against our tendency to try not using heavy solvents, but it works, and it works quickly, and frankly, I&#8217;m not sure any natural products would have solved my problem. I&#8217;m definitely planning to keep the shutoff valves turning more freely in the future.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Washington State Elections for 2010 - Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/2010/10/washington-state-elections-for-2010.html" />
    <id>tag:blog.foxxtrot.net,2010://1.471</id>

    <published>2010-10-22T15:00:00Z</published>
    <updated>2010-10-22T05:42:20Z</updated>

    <summary>The State of Washington is in a pretty difficult place right now financially, like many states. Now, we&#8217;re not as bad off as say, New York, or California, but Washington State University has faced over 10% budget cuts each year...</summary>
    <author>
        <name>Jeff Craig</name>
        <uri>http://blog.foxxtrot.net/</uri>
    </author>
    
        <category term="Life" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="election" label="Election" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="law" label="Law" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="taxes" label="Taxes" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="washington" label="Washington" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        <![CDATA[<p>The State of Washington is in a pretty difficult place right now financially, like many states. Now, we&#8217;re not as bad off as say, New York, or California, but <a href="http://wsu.edu/">Washington State University</a> has faced over 10% budget cuts each year for the last three years, and many other state-funded agencies have faced similar, if not greater cuts.</p>

<p>So, it is little surprise that at least half the State Initiative Measures are to do with new taxes, either the repeal of recently passed ones or the state requesting the right for new taxes. I&#8217;m going to do a bit of discussion of each of these initiatives, presenting my views on them, in part to think my way through the issues.</p>

<p>Politically, I am a fiscally conservative Libertarian, which is the basis of where most of my opinions come from.</p>

<h3>I-1053</h3>

<p>This initiative appears to basically serve to remind the Legislature of other restrictions passed via Initiative in years past regarding increasing taxes. It&#8217;s basically a way to remind the legislature what the people expect of them, without actually changing the people in office. A complete waste of time, and I may simply abstain from voting on this issue.</p>

<h3>I-1082</h3>

<p>Gets the state out of the business of Industrial Insurance. I&#8217;m in favor, as it lowers the scope of government, but still forces the maintenance of insurance for industrial operations. How will this affect things? I&#8217;m not sure, but it should simplify government operations.</p>

<h3>I-1098</h3>

<p>This initiative would, for the first time institute an income tax in the state, though they&#8217;re being very sneaky in the way they&#8217;re going about passing it. Namely, as written, the tax would only apply to individuals earning $200k per year ($400k for a couple), and the proceeds would be used to lower B&amp;O taxes for small business and property taxes.</p>

<p>First, this initiative can only benefit me as a small business owner and a homeowner.</p>

<p>Yet, I&#8217;m opposed. Why? Well, first off, it&#8217;s uneven taxation. Now, I&#8217;m not arguing for a flat tax, but if you&#8217;re going to institute an income tax, institute a fucking income tax. Especially since the government would have the right to expand that income tax to more people. I would say that, within 5 years or so, the middle class, who this law is supposedly meant to help, would be paying this income tax.</p>

<p>I have seen and read several things on the wisdom of readjusting wealth distribution to narrow the gap between the middle class and the highest ends, and I generally agree, but I just don&#8217;t think this is the way to do it. If anything, the work people like <a href="http://en.wikipedia.org/wiki/Jason_Calacanis">Jason Calacanis</a> are doing with groups like the <a href="http://openangelforum.com/">Open Angel Forum</a>, like investing in startups and innovation, is probably a better way to do it.</p>

<h3>I-1100 &amp; I-1105</h3>

<p>These two initiatives seem to be tightly linked, with I-1100 seeming to deal more with the role of the State Liquor Control Board, and I-1105 being more about privatization of the distribution and retailing of alcohol. As it stands, the State of Washington maintains a monopoly of the sale of all package liquor. Bars can carry liquor, but they can not sell bottles, which was a bit odd after having turned 21 in Montana, where that&#8217;s a bit more common.</p>

<p>In Washington, grocers can only be licensed to carry beer and wine, and a non-consumption license is not that hard to get, based on a local short-lived sandwich shop that sold beer, but couldn&#8217;t let you drink it. If this initiative passes, the license for the sale of liquor held by grocers will allow them to sale package liquor in addition to beer and wine.</p>

<p>The opposition to these initiatives take a few points:</p>

<ol>
<li><p>It will cost people jobs.</p>
<p>This is, in part, true. These initiatives would close the State Liquor Stores, and distribution mechanisms, but at the same time, in privatizing it, things will likely be even, in particular because private liquor stores will probably remain open later than 6pm.</p>
<p>There is also a bit of discussion about it hurting the bars, but I&#8217;m not convinced. *Most* people who go out to bars drink Beer anyway, and bars tend to be busy, so I don&#8217;t buy it.</p></li>
<li><p>It will result in more drunk driving.</p>
<p>Doubtful. If people are buying liquor to take home, they&#8217;ll probably be doing it when still sober. Even if this results in the sale of more liquor, which it may not, I&#8217;d be interested in seeing what justifies this argument.</p></li>
</ol>

<p>Actually, I&#8217;m going to leave it there, because the rest of the arguments against are basically rehashes of the second point above. Current state policy toward spirits is unreasonable, as it unfairly singles out liquor in a way that only makes sense in a moderately prohibitionary way. The State will still be able to tax spirits, in fact the initiatives seem to talk a fair amount of the liquor control board having that right, but it will greatly increase the overhead the state needs to incur in managing spirits, allowing the liquor control board to spend more time.</p>

<p>I am wholly in favor of these initiatives. I don&#8217;t think increased availability of alcohol will be a problem, because it&#8217;s not exactly unavailable. Grocers and gas stations can sell beer and wine until 2 am, as can bars including liquor. If anything, this might encourage more consumption in situations where a person doesn&#8217;t need to drive and risk themselves and others.</p>

<h3>I-1107</h3>

<p>This initiative repeals taxes on candy, bottled water, carbonated beverages and other foods defined by a fairly complex set of standards. The argument against is pretty straightforward: the state needs to raise funds, and this is meant to help with that.</p>

<p>The for argument is slightly more complex. First, the laws passed by the legislature do some pretty crazy things, like applying taxes to products made by Washington companies, but keeping similar product imported from outside the state as tax-exempt. Then there is the standard argument against raising taxes. Now, generally, I&#8217;m against raising taxes, but I&#8217;m also generally against the government offering more services. I know full well that if we want more services, we need to be willing to pay for it, and most people don&#8217;t, which is why we&#8217;re in this economic mess right now (at least in part).</p>

<p>The main reason I&#8217;m opposed to this legislation is not the increased tax burden (which I&#8217;m not pleased about), but it&#8217;s rather that this law feels like an attempt to mandate behaviour via taxes, which is unsustainable, because if you succeed in changing people&#8217;s behaviour, your income goes away, but also it&#8217;s not the role of government. I would, quite frankly, have been <em>more</em> in favor of (though still likely opposed) to a blanket sales tax on food items.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Language Support for Lightweight Transactions - Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/2010/10/language-support-for-lightweight-transactions.html" />
    <id>tag:blog.foxxtrot.net,2010://1.470</id>

    <published>2010-10-21T15:00:00Z</published>
    <updated>2010-10-21T06:27:29Z</updated>

    <summary>For this week, I read Language Support for Lightweight Transactions by Cambridge Researchers Harris and Fraser from 2003. The paper outlines the development of software transactional memory as a feature built into the Java Programming language. I had first read...</summary>
    <author>
        <name>Jeff Craig</name>
        <uri>http://blog.foxxtrot.net/</uri>
    </author>
    
        <category term="Computing" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="functionalprogramming" label="Functional Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="haskell" label="Haskell" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="java" label="Java" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="memory" label="Memory" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="paper" label="Paper" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="research" label="Research" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="transaction" label="Transaction" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        <![CDATA[<p>For this week, I read <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.130.1316&amp;rep=rep1&amp;type=pdf">Language Support for Lightweight Transactions</a> by Cambridge Researchers Harris and Fraser from 2003. The paper outlines the development of <a href="http://en.wikipedia.org/wiki/Software_transactional_memory">software transactional memory</a> as a feature built into the Java Programming language. I had first read about STM as a feature of Haskell while reading <a href="http://blog.foxxtrot.net/2010/10/beautiful-code.html">Beautiful Code</a>, which is what pulled me into this paper.</p>

<p>Concurrency is a <em>big</em> problem in modern computing. We&#8217;ve reached a point where processors aren&#8217;t getting faster, but we&#8217;re getting more cores. On one hand, this is great for multi-application environments, because each application can have full access to a core. In practice, this actually doesn&#8217;t work, since on Intel chips, the cache is shared between all the cores (which works better for concurrent programs), and some applications really need to additional speed.</p>

<p>STM is an mechanism of defining small atomic operations that you can be assured of will be viewed by every other application as a single op. For a simple example:</p>

<pre class="brush: java;">
class Account
{
    private int balance;

    Account(int intialValue)
    {
        balance = initialValue;
    }

    public int getBalance() { return balance; }

    public void deposit(int amount) 
    {
        balance += amount;
    }

    public void withdraw(int amount)
    {
        this.deposit(-amount);
    }

    public void transfer(int amount, Account toAccount)
    {
        this.withdraw(amount);
        toAccount.deposit(amount);
    }
}
</pre>

<p>Now, in a multi-threaded environment, the above code could have problems, because deposit actually involves 3 instructions: read balance, add amount to balance, write balance, and if there are two deposits being made to an account, then they could both read at roughly the same time, which would cause their commits to be inaccurate.</p>

<p>With STM, you indicate somehow that they&#8217;re &#8216;atomic&#8217; functions, and it checks that the value in memory hasn&#8217;t changed since you read it, to ensure that your changed amount it correct, if it has, the transaction aborts and can be retried again. It&#8217;s a similar practice to transactions in a SQL database, and as such, it does add overhead to the operations. But so does traditional locking using mutexes and semaphores.</p>

<p>Which is where the findings of the paper were most interesting. In their trials, using a highly tuned hash-table implementation using traditional locking mechanisms, either a single lock for the entire table, or fine-grained locking, and a simple implementation using STM, they found that the overhead on each operation in the STM case was actually pretty small compared to the fact that it was essentially non-blocking, only needing to redo work on the off chance that the same records were being updated.</p>

<p>With language support, which in Java would look like this:</p>

<pre class="brush: java;">
class Account
{
    private int balance;

    Account(int intialValue)
    {
            balance = initialValue;
    }

    public int getBalance() { return balance; }

    public void deposit(int amount) 
    {
        atomic {
            balance += amount;
        }
    }

    public void withdraw(int amount)
    {
        atomic {
            this.deposit(-amount);
        }
    }

    public void transfer(int amount, Account toAccount)
    {
        atomic {
            this.withdraw(amount);
            toAccount.deposit(amount);
        }
    }
}
</pre>

<p>The atomic keyword, at least in the research compiler that this paper was based on, who&#8217;s source can be <a href="http://www.cl.cam.ac.uk/research/srg/netos/lock-free/">here</a>, would handle the creation of the transaction, as well as the enforcement of it. With STM, deadlocks are basically impossible. If a transaction fails, it can be re-executed after waiting a random interval, and move on from there. Using mutexes, the transfer function could easily deadlock with a programmer error.</p>

<p>This paper was really interesting, because the Haskell version makes a really big deal about not allowing functions that perform IO inside of transactions, and the Beautiful Code discussion of the feature made it sound like STM practically <em>required</em> being used in a purely functional language, but this paper showed that clearly wasn&#8217;t the case, and has made me very curious about other ways to use this technique.</p>

<p>Next weeks paper will be <em><a href="https://wiki.ubuntu.com/Multitouch?action=AttachFile&amp;do=get&amp;target=SchwarzUIST2010.pdf">A Framework for Robust and Flexible Handling of Inputs with Uncertainty</a></em>.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Liberty and Air Travel - Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/2010/10/liberty-and-air-travel.html" />
    <id>tag:blog.foxxtrot.net,2010://1.469</id>

    <published>2010-10-18T19:30:00Z</published>
    <updated>2010-10-18T18:55:22Z</updated>

    <summary>There was a post from over the weekend regarding and ExpressJet Airlines pilot who refused additional TSA screening while entering the airport in uniform, and was not allowed to reach his job. What kind of secondary screening? Specifically the new...</summary>
    <author>
        <name>Jeff Craig</name>
        <uri>http://blog.foxxtrot.net/</uri>
    </author>
    
        <category term="Life" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="airline" label="Airline" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="flight" label="Flight" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="liberty" label="Liberty" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pilot" label="Pilot" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="security" label="Security" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tsa" label="TSA" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        <![CDATA[<p>There was a post from over the weekend regarding and ExpressJet Airlines pilot who refused additional TSA screening while entering the airport in uniform, and was not allowed to reach his job. What kind of secondary screening? Specifically the new Advanced Imaging Technology (AIT) systems being installed at some airports, because he didn&#8217;t see a reason to allow the TSA to see his <a href="http://lefttochance.com/aiport-x-ray-full-body-scanner-images-of-hot-girl/">naked body</a>. And, then, because he wasn&#8217;t willing to be coerced into allowing the TSA agent to molest him, he was forced to leave, but not before being subjected to (probably) unlawful detention and a lot of questioning.</p>

<p>In the end, his supervisor heard about it from the TSA before he was able to get in touch, and his employment is now potentially in question. That&#8217;s the short version, you probably ought to read <a href="http://www.expressjetpilots.com/the-pipe/showthread.php?39523-Well-today-was-the-day">his long version</a> as well.</p>

<p>I understand why the TSA wants to go this route. Almost anything short of patting down anyone getting on a plane can be circumvented. Ceramic blades can be used instead of metal to get through a metal detector. You can load explosives into your underpants and horrifically burn your genitals in a failed attempt to set them off. You can get a job as a <a href="http://www.thesun.co.uk/sol/homepage/news/2877333/British-Airways-staff-in-second-terror-arrest.html">ground crew member at an airport</a>, which doesn&#8217;t generally require daily security screens. But, it becomes quite a bit harder to sneak a weapon onto a plane without someone storing it internally if you&#8217;re using AIT or pat downs.</p>

<p>And yet, we&#8217;re really not much safer. The TSA certainly hasn&#8217;t been the starting point of any of the successes in the war on terror, those successes generally coming from good old-fashioned police work.</p>

<p>We&#8217;ve sacrificed a lot in the name of security, and have gotten no safer. Much of that, has merely been minor inconveniences, like sending our shoes through the x-ray machine, or ridiculously small liquid containers in carry-ons. Some are big inconveniences, like the no-fly list that can thwarted by any decent fake ID. </p>

<p>But a line must be drawn somewhere, and if we&#8217;re going to draw it anywhere, it <em>must</em> be on these AIT scanners. Even ignoring people&#8217;s <a href="http://en.wikipedia.org/wiki/Backscatter_X-ray#Health_effects">health concerns</a>, which seem to have basis, the privacy concerns are just as important. I have an upcoming trip in a few weeks that I&#8217;m flying for, and frankly, I am hoping fiercely that I&#8217;m not forced to choose between making my trip and facing this sort of coercion. </p>
]]>
        

    </content>
</entry>

</feed>

