<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>Mad, Beautiful Ideas</title>
        <link>http://blog.foxxtrot.net/</link>
        <description>Thoughts, ramblings, stories, and ideas from a Technology Zealot</description>
        <language>en</language>
        <copyright>Copyright 2008</copyright>
        <lastBuildDate>Tue, 26 Aug 2008 10:32:54 -0800</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>Fun with Internet Explorer and JavaScript</title>
            <description><![CDATA[<p>Last week, Adrian Reber (known in the <a href="http://fedoraproject.org/">Fedora</a> community), posted about why he feels <a href="http://lisas.de/~adrian/?p=189">Internet Explorer is important</a>.  The tone of the post is pretty snooty, but I find myself often in a similar position.  I use Firefox most of the time.  At work, where I have to use Windows, I have Internet Explorer available, but it&#8217;s pretty rare I fire it up.  Firefox is simply the better browser.</p>

<p>But, IE is the more common browser on the web, by a pretty significant margin.  Surely, Firefox has made significant progress on the marketshare front, but it&#8217;s still definitely a minority share.  But it has some great tools for web development.  By using a combination of the <a href="http://chrispederick.com/work/web-developer/">Web Developer Toolbar</a>, and <a href="http://getfirebug.com/">Firebug</a> I&#8217;m able to put out CSS and JavaScript far faster than I would be able to without the tools, particularly when it comes to the JavaScript automation, but these tools are only available on Firefox, and can&#8217;t really emulate the issues that are encountered when trying to run with IE.</p>

<p>Yesterday, I published a new backend for the <a href="http://catalog.wsu.edu/">Washington State University Catalog</a>, which is based on the ASP.NET MVC Framework.  It&#8217;s not 100% bug free, but it works well, and I&#8217;m actively monitoring it to fix the issues that arise.  However, before I published it yesterday, I had to work through a series of issues to make the site work correctly in Internet Explorer.  Below is a description of several of those JavaScript issues, and the resolution.</p>

<h2>Form Element Detection</h2>

<p>The DOM makes handy references for parts of a Form available based on the name attribute of the input element of the form.  For instance the following HTML:</p>

<pre>
    &lt;form name="test_form" id="test_form"&gt;
        &lt;input name="text1" type="text" /&gt;
        &lt;input name="button" type="submit" /&gt;
    &lt;/form&gt;
</pre>

<p>This create a simple form, with two input elements.  If you hold a reference to the form (either by getElementById, or document.forms, or whatever), you can reference the sub elements by their names.  For instance</p>

<pre name="code" class="javascript">
    var frm = document.getElementById("test_form");
    frm.text1.value = "Fill in the Form";
</pre>

<p>Will place the text &#8220;Fill in the Form&#8221; into the text1 element of the test_form.  Only one problem with this, IE doesn&#8217;t add such references for dynamically created input elements.  On the <a href="http://catalog.wsu.edu/General/AcademicCalendar">General Catalog Academic Calendar</a>, I allow users to select a campus that they&#8217;re interested in.  This is because we have Calendar data for campuses which do not have full Catalog data prepared yet, so it&#8217;s a reasonable compromise.  However, to build that option, I dynamically create the campus select box.  In Firefox, when I set the name attribute of the input element, and insert the code, it just works.  I ran into an issue, however, where the function which performs the JavaScript manipulation of the function was getting called twice.  Here is the basic code as I&#8217;d originally wrote it:</p>

<pre name="code" class="javascript">
var OnFormLoad = function() {
    if (form.AC_Select) {
        form.removeChild(form.AC_Select);
    }

    if (catalog.campus === "General" && !form.CampusSelect) {
        var cs = document.createElement('select');
        cs.setAttribute('name', "CampusSelect");
        form.insertBefore(cs, form.YearTermSelector);
        connect.asyncRequest('GET', catalog.base_url + "/AJAX/ValidCalendarCampuses",
            { success: function(o) {
                try {
                    var campuses = YAHOO.lang.JSON.parse(o.responseText);
                } catch (e) {
                    form.removeChild(cs);
                    return;
                }
                var option;
                for (var i = 0; i < campuses.length; ++i) {
                    option = document.createElement('option');
                    option.appendChild(document.createTextNode(campuses[i]));
                    option.setAttribute('value', campuses[i]);
                    cs.appendChild(option);
                }
                event.addListener(cs, "change", OnYearTermSelector_Change);
            },
            failure: function(o) {
                form.removeChild(cs);
            } }, null);
        }
    }
};
event.addListener(yts, "change", OnYearTermSelector_Change);
event.onAvailable(form, OnFormLoad);
</pre>

<p>This uses the <a href="http://developer.yahoo.com/yui/">YUI</a> to register the onAvailable event to the form, and call the function, which simply removes the Select button, registers the onChange event for the YearTermSelector box, and creates the Campus select box, before using AJAX to get the contents and fill in the box.  Simple enough, right?</p>

<p>Unfortunately, it doesn&#8217;t work in IE.  Internet Explorer does not add form child elements to the form object when they are created dynamically like this.  Not only that, but it doesn&#8217;t <em>remove</em> references in the form, when the child element is removed from the form.  Which means that form.AC_Select will <em>always</em> evaluate as truthy, because IE never nulls it out, and form.CampusSelect will always be falsy, since IE never initializes it. In order to make this work, I had to create a boolean variable outside the scope of the function, and set it in the function to make sure that it worked.  Like this:</p>

<pre name="code" class="javascript">
var OnFromLoadRan = false;
var OnFormLoad = function() {
    if (!OnFormLoadRan) {
        form.removeChild(form.AC_Select);
        if (catalog.campus === "General") {
            // Build Campus Select box
            // removed for brevity.
        }
        OnFormLoadRan = true;
    }
};
event.onAvailable(form, OnFormLoad);
</pre>

<p>Since the OnFormLoad function is located within a function, this puts the OnFormLoadRan variable in a function-level closure, which means nothing outside of the function which contains OnFormLoad can touch it.  This is kind of hacky, but it works, and one could argue that the lower level of de-reference is more performant.  It may be, but the code is less clean, and that&#8217;s my big problem with it.</p>

<h2>Inserting Options into a Select List</h2>

<p>Another UI trick I use pretty heavily on a few of my forms is the creation of a &#8220;dummy&#8221; record in a select box, that is set as the default, which allows me to take advantage of the &#8220;OnChange&#8221; event of those select boxes more effectively.  The example page I&#8217;ll use for this is the <a href="http://catalog.wsu.edu/General/Academics">Academic Unit selector</a>.  This page will create the &#8220;<em>* Select an Academic Unit *</em> option, and append it to the top of the list, setting it as the default option.  Now, whenever the OnChange event fires, I can be reasonably sure that the user has selected something valid.</p>

<p>I was initially doing the addition of this special element as follows:</p>

<pre name="code" class="javascript">
var OnFormLoad = function() {
    if (form.AU_Select) {
      form.removeChild(form.AU_Select);
      form.AU_Select = null;
      var no_select = document.createElement('Option');
      no_select.appendChild(document.createTextNode("** Select an Academic Unit **"));
      form.AU_ID.add(no_select, form.AU_ID.firstChild);
      if (unit_info.textContent === '') {
            form.AU_ID.selectedIndex = 0;
      }
    }
};
</pre>

<p>The add function is the one in question.  The W3C standard for the DOM declares that the add function takes the option element to add to the select box, and, optionally, the option element that you wish the new element to precede.  Generally speaking you&#8217;ll either omit the second argument, to append to the end, or you&#8217;ll use the firstChild reference as I have to insert at the beginning of the list.  Actually, this might be somewhere where IE&#8217;s API is a bit more sensible, but it is against the standard and it does require special coding around.</p>

<p>In IE there are two methods to fix this, both surrounding that add function call.  You can either use add the way IE declares it, where the second argument is the <em>index</em> of the option you want to insert before, as follows:</p>

<pre name="code" class="javascript">
try {
    form.AU_ID.add(no_select, form.AU_ID.firstChild);
} catch (ex) {
    form.AU_ID.add(no_select, 0);
}
</pre>

<p>Or, you can use the more general DOM manipulation method, insertBefore:</p>

<pre name="code" class="javascript">
form.AU_ID.insertBefore(no_select, form.AU_ID.firstChild);
</pre>

<p>Which you choose is dependent of which you prefer, and I&#8217;m not sure what the best answer is.  insertBefore is more direct, but if you&#8217;re using insertBefore to insert children, I&#8217;d suggest using appendChild to add new elements to the end of the list, for consistencies sake.  That&#8217;s really the more important part is being consistent.  </p>

<p>But there was one more bug in first version of the function that you may or may not have seen. </p>

<h2>Default Values for Contents</h2>

<p>Yep, when I make that comparison of the unit_info.textContent to the empty string, I am depending on browser specific behavior.</p>

<p>So, to review, the code is this:</p>

<pre name="code" class="javascript">
if (unit_info.textContent === '') {
    form.AU_ID.selectedIndex = 0;
}
</pre>

<p>Which works great in Gecko and Webkit-based browsers.  However, IE does not default the value of textContent to the empty string for empty divs.  I suspect this is related to the fact that IE doesn&#8217;t treat white space as their own DOM elements, but the point is that on IE, unit_info.textContent is null, so it does not absolutely equal the empty string, like I&#8217;m checking. Plus, even if I allow type coercion by not using the tripe-equals operator, null and the empty string are not equal.  Luckily they are both falsy, so changing the if statement to the following works fine:</p>

<pre name="code" class="javascript">
if (!unit_info.textContent) {
    form.AU_ID.selectedIndex = 0;
}
</pre>

<p>JavaScript is a poorly defined language, with a lot of implementation level details that we need to be aware of.  It would be fantastic to have a more standardized platform, and we&#8217;re slowly working our way there, but somehow I doubt we&#8217;ll even be truly free of these sorts of niggling implementation details.</p>
]]></description>
            <link>http://blog.foxxtrot.net/2008/08/fun-with-internet-explorer-and.html</link>
            <guid>http://blog.foxxtrot.net/2008/08/fun-with-internet-explorer-and.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Programming</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Firefox</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Internet Explorer</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Javascript</category>
            
            <pubDate>Tue, 26 Aug 2008 10:32:54 -0800</pubDate>
        </item>
        
        <item>
            <title>Whole Food Adventures: Barley</title>
            <description><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Barley">Barley</a> is one of the top cereal grain crops in the world, in fourth place behing Corn, Rice, and Wheat.  However, it is probably one of the most underrated of all the cereal grains, particularly in the US, where the vast majority of it is used as feed for livestock, and most of what isn&#8217;t used for animal feed is used in the production of Beer.  Sweet, sweet beer.</p>

<p>Don&#8217;t get me wrong, Beer is a fantastic thing, and so is livestock, or at least the meat that comes from Livestock, but Barley is a very tasty grain, that simply doesn&#8217;t get the recognition it deserves.  Barley comes in a few different varieties, probably the most popular being Pearl Barley, the kind you&#8217;ve most likely seen in your beef and barley soup, but I&#8217;m here to advocate you resist the lure of pearl barley, which gets it&#8217;s white color by removing the nutrient-rich bran coat, and stick with the healthier dehulled barley.</p>

<p>So, what is barley good for?  Besides Beer and Animal feed?  Well, Barely can be used just about anywhere that rice can, and with similar results, though different flavor.  I wouldn&#8217;t try barley sushi, but aside from that, I&#8217;d feel free to experiment.  But, there are some very common preparations, such as the aforementioned Beef Barley soup, and there is my personal favorite barley salad, whose recipe I&#8217;ll share shortly.</p>

<p>Beef Barley soup is a classic soup that is very easy to make.  Brown some beef in a pot, cheap meat is good for this, and then add water, onions, celery, carrots, barley, whatever else you want really, and let it cook.  Easy and fairly fast.  But worth it, particularly on a late fall day.</p>

<p>But my favorite barley recipe is a simple barley salad, that I typically construct as follows.</p>

<p>Serves 2 People</p>

<h1>1 c Barley</h1>

<h1>1/4 large onion, julienned</h1>

<h1>1/2 fennel bulb, chopped</h1>

<h1>Several slices of bacon</h1>

<p>Cut the bacon into smaller pieces, and fry it up.  Reserve some of the bacon drippings.  Turn the heat down to low on the bacon drippings and add the onion, a pinch of salt, and let it sweat.  </p>

<p>Once the barley is done cooking, rinse it in cool water, to bring it down to a cool temperature, then put in a bowl.  Add the bacon bits, fennel, and onion to the barley and toss the salad.  Serve with a lemon and oil dressing.</p>

<p>It&#8217;s delicious, and fast, and simple.  And it may just help you discover how great a grain this is.</p>
]]></description>
            <link>http://blog.foxxtrot.net/2008/08/whole-food-adventures-barley.html</link>
            <guid>http://blog.foxxtrot.net/2008/08/whole-food-adventures-barley.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Food</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Food</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Grain</category>
            
            <pubDate>Mon, 25 Aug 2008 19:50:04 -0800</pubDate>
        </item>
        
        <item>
            <title>On Politics and Technology</title>
            <description><![CDATA[<p>Seven days ago, John McCain&#8217;s campaign posted McCain&#8217;s <a href="http://www.johnmccain.com/Informing/Issues/CBCD3A48-4B0E-4864-8BE1-D04561C132EA.htm">technology platform</a> to his website. As expected, reading through it, it sounds pretty good. A lot of tax breaks for R&amp;D, and technology investment.  He wants to &#8220;Preserve Consumer Freedoms&#8221;.  He commits to pursuing &#8220;High-Speed Internet Access For All Americans&#8221;.  He commits to patent reform to reduce the costs of challenging bullshit patents.</p>

<p>Unfortunately, there are quite a few places where this policy falls short. For one, the policy is clear that McCain does not support <a href="http://en.wikipedia.org/wiki/Network_neutrality">Net Neutrality</a>, the principle that service providers should not be able to choose what content and applications are allowed across their network.  Regrettably, the actions of many service providers in the nation have proven that Network Neutrality is vitally important. This has turned into a battle between consumers and providers, and I am immensely disappointed that McCain has thrown his hand in with the providers, or more accurately the lobbyists for the providers.  This opposition to Network Neutrality fits in well with McCain&#8217;s stated goal to &#8220;Protect The Creative Industries From Piracy&#8221;. However, while unlicensed copying (piracy is far too strong a term), is a problem, law makers attempts to regulate the behavior through law has  been heavy handed, ineffective, and immensely negative for consumers.  I&#8217;m looking at you, <a href="http://en.wikipedia.org/wiki/DMCA">DMCA</a>.</p>

<p>I would go on, but frankly, Stanford Law Professor <a href="http://lessig.org/blog/">Lawrence Lessig</a> does a better job of addressing this issue than I could ever hope to.  In the following video, he provides his analysis of McCain&#8217;s technology platform, and why he thinks it falls short.</p>

<p><embed src="http://blip.tv/play/lG3I3SyBolM" type="application/x-shockwave-flash" width="640" height="510" allowscriptaccess="always" allowfullscreen="true"></embed> </p>

<p>I don&#8217;t agree with everything Mr. Lessig has to say.  For one thing, I think he ascribes <em>far</em> too much to President Bush in regards to technological failures of the last eight years.  But, there is the fact that the Bush Administration has expressed very little interest in technology, particularly after the &#8216;Bubble&#8217; burst back in 2000, which was more of a function of Clinton-era apathy towards the technology market than anything else.  However, whatever the cause, this country has slipped, and this is largely because of the increased regulation placed on users by providers.  To date, the Government has done nothing to stop it, and it seems likely that they are, in fact, going to embrace this behavior.  </p>

<p>This is one place where I believe that Obama has the upper hand.  His <a href="http://www.barackobama.com/issues/technology/">technology platform</a> recognizes the need to protect the openness of the Internet.  His proposed policy recognizes the need for truly Open Government, an idea which hasn&#8217;t been particularly well codified, but ultimately comes down to making the government more transparent, and therefore accountable, to the people. After the last eight years, I suspect many people are interested in that.  There is the argument that too much openness can impede the functions of government, but ultimately, so does too much secrecy, as the secrecy impedes the ability of voters to make the best educated decisions about who will lead the nation.</p>

<p>Is this issue of technology enough for me to vote for Barack Obama?  I&#8217;m not sure.  I agree with Lessig that this issue is vitally important to the continued success of this country.  However, I&#8217;m not convinced that Obama is what he says he is: a maverick, and a vector for change in Washington. According to <a href="http://govtrack.us/">GovTrack.us</a>&#8217; analysis of <a href="http://www.govtrack.us/congress/person.xpd?id=400629">Obama&#8217;s time in the Senate</a>, he is merely a rank-and-file democrat.  His <a href="http://www.guardian.co.uk/politics/2008/feb/12/terrorism.usa">voting for the issue of Telecom Immunity</a>, which he&#8217;d sworn to oppose, shows that he is not immune to giving in to special interest.  And migrating away from Technology, I agree less and less with Obama&#8217;s policies.</p>

<p>I want change in Washington, DC. I really, really do.  But it&#8217;s simply not going to happen with either of these candidates.  McCain is an honorable man who has surrounded himself with slime and morons, and he makes the mistake of listening to them.  Obama is like most Democrats, a sweet exterior which hides something different underneath.  </p>

<p><a href="http://en.wikipedia.org/wiki/Robert_David_Steele">Robert Steele</a> gave a talk at <a href="http://www.thelasthope.org/">The Last HOPE</a> about what he calls the Earth Intelligence Network](http://www.oss.net/EIN).  The <a href="http://www.thelasthope.org/media/audio/16kbps/Earth_Intelligence_Network_World_Brain_as_EarthGame.mp3">audio is available</a> for free download, and I&#8217;d suggest listening.  In the talk, Steele is highly critical of both candidates, focusing on how this is not going to be an election for change, and outlines work that&#8217;s beginning to truly bring about change.  It&#8217;s needed.  We, the People, just need to do it.</p>
]]></description>
            <link>http://blog.foxxtrot.net/2008/08/on-politics-and-technology.html</link>
            <guid>http://blog.foxxtrot.net/2008/08/on-politics-and-technology.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">The Internet</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Internet</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Lessig</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Net-Neutrality</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Politics</category>
            
            <pubDate>Thu, 21 Aug 2008 08:00:00 -0800</pubDate>
        </item>
        
        <item>
            <title>Sudden Movement on the Android Front</title>
            <description><![CDATA[<p>Not long after <a href="http://blog.foxxtrot.net/2008/07/all-quiet-on-the-android-front.html">my</a>, and plenty of <a href="http://arstechnica.com/news.ars/post/20080715-googles-android-platform-not-so-open-after-all.html">other people</a>&#8217;s criticism of Google&#8217;s last six months of silence on the issue of Android.  Google claimed that they didn&#8217;t want to take developer&#8217;s away from moving forward in order to prepare for release, but as I said last time, it was a concern because they were being more open with the few people who&#8217;d won the Android Developer&#8217;s Challenge I.</p>

<p>However, with the recent <a href="http://www.engadget.com/2008/08/18/htc-dream-fcc-approved-android-clear-for-launch/">FCC approval of HTC&#8217;s Dream</a>, and the impending release that this foretells, Google has finally started to move again on Android.  <a href="http://feeds.feedburner.com/~r/blogspot/hsDu/~3/368347235/announcing-beta-release-of-android-sdk.html">Android 0.9 Beta was released yesterday</a>, and having only had a brief chance to play around with the new emulator, it&#8217;s fairly exciting. The new UI is clean, and seems pretty intuitive.  Even cooler, they released the source to the old dashboard UI, which goes a long way to show that truly, almost every piece of infrastructure on the phone can be easily replaced if you don&#8217;t like it.  Awesome.</p>

<p>However, it&#8217;s not all chocolate and roses.  Some Analysts are <a href="http://www.engadget.com/2008/08/18/analyst-says-first-android-phone-will-ship-in-november-possibly/">claiming the HTC Dream will come pre-installed with Google&#8217;s advertising software</a>.  Currently, I have to view these rumors as unsubstantiated, as Google, nor any Open Handset Alliance member, has said anything to that effect, and the SDK doesn&#8217;t contain anything to that effect.  However, Google&#8217;s CEO has made it very, very clear that he feels that <a href="http://news.cnet.com/Googles-ambitions-going-mobile/2008-1039_3-6138755.html">Mobile Advertising is the future of the company</a>.  And no doubt he&#8217;s right.  He thinks advertising could eventually pay completely for the mobile phone.</p>

<p>But at what cost? The only reason this would work, is that Mobile Phones know basically everything about you.  Where you go, how long you spend there, who you talk with (and again how long), where you go online, what you say, what you search for.  More than enough information for Giants of Data Mining to target you pretty directly. The privacy invasion implicit in this sort of world is really quite disconcerting however.</p>

<p>Still, due to the current openness of Android, and the future openness once the source is fully released, any undesirable parts of the platform can be excised.  Admittedly, I dislike that the <em>default</em> may well become insane tracking, but at least a way out will be availble.
Mobile phones are expensive, far more expensive in the US than they need to be.  As users we&#8217;ve allowed a service providing culture that thrives on double billing and price gouging to develop.  That&#8217;s going to take a lot of work to rectify at this point, but I don&#8217;t think giving up privacy to advertisers is the way to do it.</p>
]]></description>
            <link>http://blog.foxxtrot.net/2008/08/sudden-movement-on-the-android.html</link>
            <guid>http://blog.foxxtrot.net/2008/08/sudden-movement-on-the-android.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Computing</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Android</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">FCC</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Google</category>
            
            <pubDate>Tue, 19 Aug 2008 10:50:56 -0800</pubDate>
        </item>
        
        <item>
            <title>Whole Food Adventures - Canning</title>
            <description><![CDATA[<p>Continuing our series on improving self reliance and depending less on industrial foodstuffs, both for health and economic reasons, I&#8217;d like to talk a bit about canning.  Catherine and I (well, mostly Catherine) spent the majority of Sunday this weekend processing the 25 pounds of fresh peaches we&#8217;d bought at the <a href="http://www.moscow.id.us/mac/">Moscow Farmer&#8217;s Market</a>, which incidentally cost only $17.50 for the case. Farmer&#8217;s Markets are awesome.</p>

<p>The problem, of course, with buying 25 pounds of peaches is that you then have 25 pounds of peaches.  Even if you have a large family, this is a ridiculous amount of fruit, and if you just try to eat it all, your entire family is likely to be sick of peaches by the time you&#8217;re all out.  Of course, the majority of the canning process does apply to any fruit, we had peaches, so that is what I&#8217;m planning to address today.</p>

<p>One thing that is fairly consistent with all fruit is the need to skin them, luckily peaches, and other soft-fleshed fruits, make this pretty easy.  To skin a peach, it&#8217;s best to employ that <a href="http://en.wikipedia.org/wiki/Blanching">blanch</a>.  A blanch is a simple process of putting a fruit or vegetable in boiling water for a short period of time (it depends on the fruit/vegetable), and then removing it, and putting it in an ice bath.  With peaches, this interval is between 20 and 30 seconds.  Once in the ice bath, it&#8217;s easy to pluck the peach from the icy water, and simply wipe the skin off with a paper towel.  Perfectly skinned peaches in no time at all.  This is best done with two people, one handling the boiling phase, and other skinning the peaches.  </p>

<p>Once you&#8217;ve got your skinned peaches, the time has come to process them.  Generally this begins with slicing the peaches, but from there it really depends on what you&#8217;re trying to do.  For the Peach Butter, we put them in the food processor and processed them until we had mostly a paste.  You don&#8217;t want it completely smooth, only mostly.  Then, add the peaches to a pan, with some sugar and boil for a little while.  Preserves and Jam are both similar, though they involve chunkier chops, and the addition of <a href="http://en.wikipedia.org/wiki/Pectin">pectin</a> to the mix as a thickening agent.  </p>

<p>I&#8217;d give recipes, but to be honest, I&#8217;m not 100% sure we&#8217;ve figured it out yet.  Catherine used the recipes from the <a href="http://www.amazon.com/Ball-Blue-Book-of-Preserving/dp/0972753702">Ball Blue Book of Presevering</a>, but the bit of Jam that I tasted (which was the dregs on the bottom of the pan) was insanely sweet, having added 7.5 cups of sugar to about 4 pounds of peaches. This may well be related to the freshness of the peaches we were using. <a href="http://en.wikipedia.org/wiki/Alton_Brown">Alton Brown</a> explains in the Season 10 episode of <a href="http://en.wikipedia.org/wiki/Good_Eats">Good Eats</a>, &#8220;Peachy Keen&#8221;, that once a peach has been plucked from the tree, it&#8217;s sugar content is locked, but it will continue to soften.  This suggests that peaches sold in your average large supermarket are picked early, so that they&#8217;re at a good level of firmness by the time they reach the store, though they&#8217;ll never be as sweet as more local peaches.  Of course, I could be off-base, and the jam may be the perfect level of sweetness, but I <em>suspect</em> that fresh peaches from local growers should probably have less sugar added than peaches bought at the supermarket. They&#8217;re just going naturally sweeter because the time to market is so much less.</p>

<p>Anyway, on to the actual canning process.  First, you need a collection of jars, and lids with rubber locking seals.  These are inexpensively found at most hardware stores, but expensively found at most supermarkets.  Buy smart.  You&#8217;ll also want a canning rack for each size of jar you intend to can, and a canning pot, both of which are fairly inexpensive.  Canning is a simple matter of bringing the jars to temperature, since adding hot liquid to cold glass is begging a huge mess.  Plus, boiling the glass will sanitize it.  Place the hot jars in the canning rack, which rests conveniently on the side of your canning pot, which should have near boiling water in it.  Fill the jars, then screw the lids on, and drop the rack.  Heat processing depends on the size of the jars, and your altitude, but is usually in the neighborhood of 15 minutes.  Use your jar lifter to pull the jars out of the water, and set them on the counter to cool.  As they cool, you should hear the sound of the rubber seals sucking shut.  This is a good sign.</p>

<p>Needless to say, I&#8217;ve mentioned at least three pots of boiling liquid in the above description.  This is a hot process, and given that yesterday was one of the hottest days in the summer, it was kind of unpleasant.  But then, we were canning for close to ten hours, so as long as you don&#8217;t marathon it, and spread out the work over a few days, it should be bearable.  Unfortunately, Canning is a summer/early fall activity, since that is when the food you want to preserve is available. </p>

<p>After twelve hours or so, the jars should be cool enough to store.  One thing to note, is that you should remove the locking ring, as it can hide problems, and make sure that all the lids don&#8217;t open easily.  If any do, you can still re-heat process them at this stage, but later, an unsealed jar is likely a sign of <a href="http://en.wikipedia.org/wiki/Botulism">botulism</a>, and you should stay away.  Unless you like paralytic death, I guess.</p>

<p>So please, look into canning.  With practice, it should go fairly quickly, and be reasonably easy.  It takes time, but most of that time is waiting for water to boil, so other activities can be pursued while the water boils.  Plus, you know exactly what&#8217;s in your food, and it can often be cheaper. It&#8217;s a matter of priorities, certainly, but it&#8217;s worth considering.  In the near future, I hope to get some old recipes for canning, both from Catherine&#8217;s Great-Grandmother, and perhaps my own, so that I can provide better recipes.  In the meantime, the Ball Blue Book is pretty good, and again, not terribly expensive.</p>
]]></description>
            <link>http://blog.foxxtrot.net/2008/08/whole-food-adventures---cannin.html</link>
            <guid>http://blog.foxxtrot.net/2008/08/whole-food-adventures---cannin.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Food</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Canning</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Food</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Fruit</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Market</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Moscow</category>
            
            <pubDate>Mon, 18 Aug 2008 10:49:08 -0800</pubDate>
        </item>
        
        <item>
            <title>How Not To Run a User-Feedback Session</title>
            <description><![CDATA[<p>Early this week we pushed out an initial Alpha version of our current project at work (an online system to assist in Schedule Proofing), and we met with the principal users of the system in the future yesterday to get feedback.  Unfortunately, the meeting wasn&#8217;t nearly as productive as we&#8217;d hoped.  </p>

<p>In many organizations, developers aren&#8217;t allowed to conduct these meetings.  We don&#8217;t have that luxury (and neither do most companies), but the principle is really solid.  Developer&#8217;s want to <em>educate</em> users on how to use their software, but when trying to get user feedback, education is exactly what you <em>don&#8217;t want to provide</em>.</p>

<p>I wasn&#8217;t the meeting organizer, so I left the running of the meeting to the other developer on the project, who incidentally has also done most of the UI work.  The role that I was taking was to sit back and take notes, so that we would know what we needed to improve.  The meeting organizer began the meeting innocuously enough, asking for any feedback that the users had requested.  The first item was a feature that was already implemented, and rather than waiting for the user&#8217;s to finish providing their feedback, the meeting lead immediately jumped into a miniature training session on the UI.  Walked the two users we were talking with through the entire UI, both elements that were already implemented, and elements that we were planning.</p>

<p>Because of this the first half of the feedback meeting, turned into a training meeting.  I did nothing, I&#8217;d already decided that the meeting wasn&#8217;t my responsibility to run, and continued to take notes on what was being said.  However, at this point, the feedback we were getting had changed in an incredibly un-useful manner.  The feedback we were getting was now regarding things that they really liked the sound of, and perhaps one or two issues which were generally more of a matter of us misunderstanding business-layer needs, rather than the UI feedback we were hoping for.</p>

<p>User Feedback sessions are meant for exactly that.  Getting feedback from the users. If the user doesn&#8217;t do 90% of the talking, you&#8217;re likely approaching the meeting wrong. Because of the impromptu training session our meeting turned into we got basically <em>no feedback on the usability of the application</em>, once we taught how to use the application, things made sense.  Problems they had had initially were no longer problems.  We learned basically nothing about what we needed to improve.  </p>

<p>Due to the specialized nature of the application, and our ease of access to the people who will be using it, we are in a nice position in that we can plan to train the users.  However, there is always turnover, and the more discoverable the application is, the less ongoing training will be required. But to figure out where the user&#8217;s struggle, we have to let them talk.</p>

<p>Developers are terrible at this.  Developers want to help users they see struggling, but that struggle is <em>exactly</em> what the developers need. Let your users struggle, then find out <em>why</em> they struggled, and what you can to prevent it.  Resist the urge to <em>help</em> the user.  You may be helping them now, but you really aren&#8217;t helping yourself in the long run.</p>
]]></description>
            <link>http://blog.foxxtrot.net/2008/08/how-not-to-run-a-user-feedback.html</link>
            <guid>http://blog.foxxtrot.net/2008/08/how-not-to-run-a-user-feedback.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Programming</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">development</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Programming</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">users</category>
            
            <pubDate>Fri, 15 Aug 2008 08:25:23 -0800</pubDate>
        </item>
        
        <item>
            <title>Microsoft .NET v3.5 SP1 Firefox Extension?</title>
            <description><![CDATA[<p>Yesterday, I installed the <a href="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx">SP1 of Visual Studio 2008</a>, which included the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=AB99342F-5D1A-413D-8319-81DA479AB0D7&amp;displaylang=en">.NET v3.5 SP1</a> as well.  I was a bit surprised when the installer requested I close Firefox, but the Silverlight API installer wanted the same thing, so I just complied and let it go to work.  Needless to say, when I finally got done installing the SP1 (about two hours later), I was awfully surprised to be greeted with this:</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="MS-Framework.png" src="http://blog.foxxtrot.net/2008/08/13/MS-Framework.png" width="520" height="380" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>

<p>I was surprised, since I didn&#8217;t recall being asked to install any Firefox extensions, and I was pretty annoyed about it, so I just decided to tweet about it, telling the rest of twitter &#8220;VS 2008 SP1 installs a Firefox Extension without telling me about it. NOT COOL &#8220;. Surprisingly to me, about 4 hours later, I started to hear from the firefox_answers people on twitter, who hadn&#8217;t heard of this yet, and wanted more information.  Once I told them about the extension, they were a bit annoyed, tweeting back &#8220;@foxxtrot Ugg. Not asking is really lame. I&#8217;ll forward that on to the Firefox add-ons team and let them follow up with Microsoft.&#8221;  </p>

<p>So far, the primary annoyance has been that Microsoft never asked before installing this extension.  Since I was a bit fuzzy about what it was for, I decided to go ahead and look it up as well. First problem I ran into, as that the extension wasn&#8217;t installed in either my Profile extension folder, or the Firefox install directory extension folder.  Frankly, I didn&#8217;t even know that was possible, so I was a bit confused.  Luckily, my extensions.cache file in my profile pointed me in the right direction.  The extension had been hidden away at &#8220;C:\Windows\Microsoft.NET\Framework\v3.5\Windows Presentation Foundation\DotNetAssistantExtension&#34;.  The hunt, it was on.</p>

<p>But first, how did this install there in the first place?  And how did it end up in <em>my</em> profile?  Well, it turns out that Mozilla implemented a registry hack to make it easier for third-party developers to do exactly this.   If you open up regedit, and go to &#8220;HKEY<em>LOCAL</em>MACHINE\SOFTWARE\Mozilla\Firefox\Extensions&#8221;, programs can drop values in this registry key that will cause extensions to be automatically installed in <em>every instance of Firefox on the system</em>.  Something similar exists for Thunderbird as well.  But hey, at least the feature is <a href="http://developer.mozilla.org/en/docs/Adding_Extensions_using_the_Windows_Registry">documented</a>.  I&#8217;m not sure why this is allowed, but it is, and I think it&#8217;s best people know all the ways that extensions can be added to their browsers.</p>

<p>Moving on to what the extension actually does.  It has two parts.  First, it modified the User-Agent of the browser to add .NET Framework information to it.  With the &#8220;Report all installed versions of the .NET Framework to web servers&#8221; option <em>not</em> checked, my User-Agent becomes this:</p>

<pre><code>User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.1) Gecko/2008070208 \ 
Firefox/3.0.1 (.NET CLR 3.5.30729)
</code></pre>

<p>If I do check that box, I end up with this:</p>

<pre><code>User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.1) Gecko/2008070208 \
Firefox/3.0.1 (.NET CLR 2.0.50727; .NET CLR 3.0.30618; .NET CLR 3.5.21022; .NET CLR 3.5.30729)
</code></pre>

<p>An amazing amount of information to be dumping across the wire to <em>every single website I visit</em>. This isn&#8217;t even fucking Silverlight related, and I that&#8217;s the only reason I can think of why a web server would <em>ever</em> need to know what versions of .NET I have installed.  Ever. These values are coming out of the registry at &#8220;HKEY<em>LOCAL</em>MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent\Post Platform&#8221;.  </p>

<p>I can only assume it has something to do with this <a href="http://msdn.microsoft.com/en-us/library/t71a733d(VS.80">ClickOnce</a>.aspx) stuff that Microsoft is pushing with the <a href="http://msdn.microsoft.com/en-us/library/t71a733d(VS.80">Windows Presentation Foundation</a>.aspx).  So, what is ClickOnce?  In a nutshell, Microsoft is trying to change the way that software is installed on windows.  Currently it relies on &#8216;setup.exe&#8217; files, or <a href="http://en.wikipedia.org/wiki/Windows_Installer">.msi</a> files.  While those will never really go away (particularly .msi, which is great in the Enterprise), Microsoft has apparently decided that the better way to go is to tap into all that web hosting that everyone has access to these days.</p>

<p>Basically, a ClickOnce file is a special XML file with the &#8216;application&#8217; extension, and Mime-Type: application/x-ms-application.  Oh, and the Firefox Extension will ignore the Mime type is the file has the &#8216;application&#8217; extension.  Wouldn&#8217;t want to make people configure their web servers correctly, now would we?  The application file contains basic information about the application, including a cryptographic signature to ensure&#8230;something.  The keys aren&#8217;t required to be registered with anyone, so the key really just proves the app was built with &#8216;approved&#8217; tools.  .NET does this a lot actually.  All assemblies must be signed, but that signature just means someone had the ability to sign something.  It provides very little in additional security.  I suppose you could probably opt to blacklist certain keys, but keys are easy to generate, so really it&#8217;s kind of a waste of time. My guess is that it&#8217;s the first step to cryptographic software registration, but that might just be the foil hat I&#8217;m wearing.</p>

<p>Once the file is downloaded, it&#8217;s immediately run through the PresentationHost application, which will likely download the necessary assemblies and immediately start to run the application.  It&#8217;s pretty simple.  </p>

<p>But what are the security implication? Absolutely anytime you download an application, it&#8217;s a potential security risk.  Only download software from sites and developers you can trust.  Ultimately, this doesn&#8217;t bother me too much for the <em>idea</em> of ClickOnce.  It&#8217;s a more convenient way to download software, and frankly, Java has been doing this for years with <a href="http://en.wikipedia.org/wiki/Java_Web_Start">Java Web Start</a>.  What does bother me is the fact that Microsoft will send anything to PresentationHost which has a .application extension.  This makes it pretty easy to build faulty .application files and upload them, though that was never impossible, as the MIME-type could have been changed anyway.</p>

<p>So, ClickOnce is a security risk, but it&#8217;s not much more of a security risk than downloading anything off the Internet. If it&#8217;s riskier at all, it&#8217;s because the easier something is, the less people think about it.  Though <a href="http://blog.foxxtrot.net/2008/06/firefox-3-and-self-signed-ssl.html">you can make people think too hard</a>, making something easier should be balanced with security concerns. Ultimately, my biggest problem was that I didn&#8217;t sign up for a new Firefox extension to be installed.  I was installing .NET.  Plus, I don&#8217;t particularly want ClickOnce.  For one thing, the only WPF app I am at all aware of is <a href="http://babysmash.com/">BabySmash</a>, Scott Hanselman&#8217;s &#8220;<a href="http://www.hanselman.com/blog/IntroducingBabySmashAWPFExperiment.aspx">Learning WPF Project</a>&#8221;.  For another, I would far prefer taking a few more steps to be sure of what I&#8217;m getting and from where, before I install it.</p>
]]></description>
            <link>http://blog.foxxtrot.net/2008/08/microsoft-net-v35-sp1-firefox.html</link>
            <guid>http://blog.foxxtrot.net/2008/08/microsoft-net-v35-sp1-firefox.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Computing</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Firefox</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Microsoft</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Mozilla</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">WCF</category>
            
            <pubDate>Wed, 13 Aug 2008 11:10:32 -0800</pubDate>
        </item>
        
        <item>
            <title>Security Conference Wrap-Up</title>
            <description><![CDATA[<p>Summer is here and with it are a variety of hacker conferences.  We&#8217;ve got <a href="https://www.defcon.org/">Defcon</a>, <a href="http://www.blackhat.com/">Black Hat</a>, and my favorite <a href="http://lasthope.org/">The Last HOPE</a> (Hackers on Planet Earth, run by <a href="http://2600.org/">2600</a>).</p>

<p>Defcon is the longest running of the conferences, having been in Vegas since 1993, and having long been an interesting mix of the Hacker community and Law Enforcement.  It&#8217;s three days of intense learning, hacking contests, games, all sorts of hacking related stuff, and that&#8217;s just the advertised events.  I&#8217;ve heard a lot of stories of people going to Def Con and seeing things like cell-phone scanning going on behind closed doors. And it&#8217;s only $120 for the conference.  Cheap as shit.  I&#8217;m going to have to try to go next year.</p>

<p>Black Hat bills itself at &#8220;The World&#8217;s Premiere Techincal Security Conference&#8221;, and I&#8217;ll be honest there are some pretty intense sessions.  <a href="http://blog.foxxtrot.net/2008/08/fastrak-easily-ruined.html">Like the FasTrak system I discussed last week</a>.  My big problem with Black Hat is that it&#8217;s gotten to be too damn commercial, or maybe it always sort of was.  It costs a few thousand to go, and that&#8217;s before Vegas hotel rates.  Plus, they actually <a href="http://www.crn.com/security/210000501">kicked out reporters for allegedly hacking</a>.  At a hacking conference.  This would never happen at a <em>real</em> hackers conference.  Might as well go to RSA, if you&#8217;re looking for such a watered down hacker environment.</p>

<p>Which brings me to HOPE.  I talked about <a href="http://blog.foxxtrot.net/2008/06/the-end-of-hope.html">The Last HOPE a while back</a>, expressing my dismay at possibly missing the last HOPE conference ever.  Luckily, the owners of the Hotel Pennsylvania have been convinced not to raze the hotel, and <a href="http://thenexthope.org/">The Next HOPE</a> has been scheduled for 2010.  My only complaint is that they didn&#8217;t make the obvious Star Wars joke.</p>

<p>Even better though, is that 2600 has made the audio of all the talks from The Last HOPE available for <a href="http://www.thelasthope.org/talks.html">free download</a>.  I&#8217;m working my way through them, all 2.4 GiB (my ISP is going to be so pissed).  But you can easily just pick and choose.  When the video comes available, I&#8217;ll have to buy some of my favorite sessions.  </p>

<p>This is why I love HOPE and Def Con.  They&#8217;re more open than anything else, they exist to share knowledge, and they try to do it at as low a cost as possible. They&#8217;re about teaching and they&#8217;re about knowledge.  I encourage everyone to download the talks from The Last HOPE.  You&#8217;re bound to learn something, and that&#8217;s ultimately the whole point.</p>
]]></description>
            <link>http://blog.foxxtrot.net/2008/08/security-conference-wrap-up.html</link>
            <guid>http://blog.foxxtrot.net/2008/08/security-conference-wrap-up.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Computing</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Real Life</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">2600</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Def Con</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Hacking</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">HOPE</category>
            
            <pubDate>Tue, 12 Aug 2008 08:00:00 -0800</pubDate>
        </item>
        
        <item>
            <title>Windows Communication Foundation on IIS Deployment</title>
            <description><![CDATA[<p>At work we&#8217;ve been putting together a new schedule proofing experience for our campus (and possibly the rest of the University system) which  would allow the schedule proofers to do all their work via a web-based interface.  As we&#8217;re a primarily Microsoft-based house, the entire system is being built upon newer Microsoft platforms, for better or worse (usually the latter).  We&#8217;ve been building the system using Silverlight 2.0 for the front end, Windows Workflow for the middle-layer, and Windows Communication Foundation for the communication between the two.</p>

<p>WCF is an interesting technology, because it makes producing web-based or application-based services pretty simple, and the framework modifies it&#8217;s behaviour based on how you deploy it.  Need XML-based output?  It&#8217;ll do that.  Binary output more your style, feel free.  If you want it, <a href="http://dotnetslackers.com/articles/ajax/JSON-EnabledWCFServicesInASPNET35.aspx">WCF can do JSON as well</a>.  The technology is handy, because it makes it so that you can focus on the implementation details of your web service, rather than worrying about the intricacies of SOAP or JSON data-exchange.  The technology is compelling enough that the Mono project founded <a href="http://www.mono-project.com/WCF">Olive to bring WCF to Mono</a>.  </p>

<p>The technology has a lot of really cool potential, but it suffers from some inherent design flaws that are hideously unfortunate.  First, it seems frighteningly difficult to put more than one WCF web-service in an IIS instance.  This has had all sorts of implication for people doing <a href="http://www.robzelt.com/blog/2007/01/24/WCF+This+Collection+Already+Contains+An+Address+With+Scheme+Http.aspx">ASP.NET in Shared Web Host environments</a>.  Requiring unnecessary complexity to work around a bad behavior.  While our problem is a little different, and I&#8217;ll get into it in a moment, I&#8217;m a bit confused as to why how the solution linked above, which is to define a Custom ServiceHostFactory object, even works, since the Factory attribute doesn&#8217;t seem valid, at least according to my VS 2008 instance.  I&#8217;m not going to pursue that direction, however, as our issue stems from a slightly different, but I would argue far more common position.</p>

<p>We currently have three web-services designed.  All three have their own SVC files in our web-project, and all three are properly defined WCF services.  They all work properly on the local test server, and they were created as each their own services, because they each deal with different sets of data.  Two are used to query into certain data systems, and in the interests of proper code separation, as well as the potential for reuse, we wanted to keep them separately.  Even the old ASP.NET Web Services would have allowed this.  Not WCF, though.</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="WCF_Error.png" src="http://blog.foxxtrot.net/2008/08/08/WCF_Error.png" width="870" height="247" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>

<p>That&#8217;s right, try to host more than one WCF service in a single IIS application, and an exception is thrown.  Great work, Microsoft. I probably wouldn&#8217;t be so annoyed if Microsoft wasn&#8217;t <a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1206826&amp;SiteID=1">trying to defend their position on this</a>.</p>

<blockquote>
  <p>Wenlong Dong posted in the above thread link:
  Unfortunately the behavior is by design. WCF does not support multiple IIS bindings for the same protocol (here it is HTTP) for the same web site. This is for simplicity, especially it did not seem to be an important scenario. Is this a very important scenario for you? Can&#8217;t you host different services in different web sites (with different ports of course)? If this does block you, we may think about revisiting this issue again.</p>
</blockquote>

<p>SIMPLICITY?!?  DIFFERENT WEB SITES?!? WITH DIFFERENT PORTS?!?  </p>

<p>You have <em>got</em> to be fucking kidding me.  </p>

<p>Damn it Microsoft, as far as I can tell, if I&#8217;m hosting in IIS, I have to reference the service by it&#8217;s full URL anyway (typically ending in .svc), so the Service already has a uniquely identifying endpoint.  That&#8217;s really all you should care about, that some sort of a URL can identify the location of the service.  If I want to host them all on the same port, but with different URLs, why on earth should that matter to your framework?  The URL is already telling you which code to run, how can you possibly have any confusion over this?</p>

<p>Luckily, <a href="http://www.meineck.net/">Dan Meineck</a>, a .NET Web Developer from the UK, has come up with a <a href="http://www.meineck.net/2008/04/wcf-hosting-multiple-wcf-services-as.html">solution</a>.  Is his workaround complicated?  Yes.  Is it unreasonable?  Yes.  Does it work?  Apparently.  </p>

<p>The solution boils down to this:
1. Using .NET&#8217;s partial classes, put <em>all</em> your webservices in one class, but each discrete bit in different files, each file should only indicate the WCF interface which that file defines.
2. Modify your Web.Config (or App.Config) file, and in the sytem.serviceModel section, for the service, define endpoint blocks for each of your services, you can specify the specific contract Interface on each endpoint, so that only the methods you want are available on that endpoint.</p>

<p>Ultimately, this provides the exact behavior we want, but it&#8217;s really not very clean, and forcing users into this particular model is confusing and pointless.  I understand Microsoft feels that the <em>interface</em> specifies the behavior, and is therefore the important part of the definition, but this decision will make it far more difficult for me to integrate a web service from one project into a second project, and frankly if this was simpler for anyone (even Microsoft from an implementation standpoint) it suggests to me that there are deeper design issues in the way that WCF works.  </p>

<p>I&#8217;m refactoring the code today, to match Mr. Meineck&#8217;s suggestions, but it just seems so unnecessary, and pointless.  Please fix this, Microsoft.</p>
]]></description>
            <link>http://blog.foxxtrot.net/2008/08/windows-communication-foundati.html</link>
            <guid>http://blog.foxxtrot.net/2008/08/windows-communication-foundati.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Bad Design</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">.NET</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">C#</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">IIS</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Microsoft</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">WCF</category>
            
            <pubDate>Fri, 08 Aug 2008 11:01:15 -0800</pubDate>
        </item>
        
        <item>
            <title>FasTrak Easily Ruined</title>
            <description><![CDATA[<p>The <a href="http://www.blackhat.com/">Blackhat</a> conference was running this week, and a large number of interesting security issues were raised (even if <a href="http://www.fiercecio.com/story/black-hat-presentation-apple-cancelled-last-minute/2008-08-05">Apple wouldn&#8217;t let their devs talk</a>), but one that I found interesting was the discussion of the FasTrak system. FasTrak is a automated Toll paying system used California&#8217;s large cities that have toll booths on their major motorways. Researcher <a href="http://www.root.org/~nate/">Nate Lawson of Root Labs</a> discovered that the FastTrak, which I suspect is very similar to New York City&#8217;s FastPass system, uses no Authentication, and simply replies with it&#8217;s RFID signal to anyone who scan it.</p>

<p>Anyone who&#8217;s read <a href="http://craphound.com/littlebrother/">Cory Doctorow&#8217;s Little Brother</a> will find this familiar.  Especially when matched with the next step.  Unauthenticated over-the-air upgrading.  That&#8217;s right, you can change the value of the chip without actually handling the chip.  Awesome.</p>

<p>So, what&#8217;s this mean?  Well, the unauthenticated read allows anyone with a reasonably powerful RFID reader to track anyone with a FasTrak in their car from any location.  In Little Brother, the Department of Homeland Security (DHS) uses this system to track people all over the streets of San Francisco.  And as bad as it would be for the Government to do something that broad, this system allows anyone who wants to track individual vehicles <em>easily</em> throughout California.</p>

<p>And the unauthenticated update?  This makes it trivial to travel for free, as you can easily steal a valid FasTrak code, and re-flash your own FasTrak and travel on someone elses dime.  This allows people who have interest in masking their movements to change their FasTrak codes frequently, so that they can not be tracked via FasTrak.  Really want to create mayhem?  Do what Marcus and the other Little Brothers did, and start just randomly flashing people&#8217;s FasTraks.  </p>

<p>RFID is an inherently untrusted protocol.  It gladly responds to anyone who asks for it&#8217;s code, and by default it doesn&#8217;t have any method to authenticate even for writes.  Over-the-air writes are a dangerous idea in the first place.  If someone really needs to recode their pass, they should have no problem taking it somewhere to be safely re-written over a wire, preferably using encryption to verify that the new code was authorized.  Over-the-air reads, a fantastically useful thing, should require a strong challenge.  This is much harder, though it could be implemented using something like a simple counter and encryption so that the signal is encrypted and can only be decrypted by the software with the other half of the key.  It&#8217;s harder, and it&#8217;s more expensive, but it&#8217;s far far safer.</p>

<p>In addition to FasTrak falling apart, the Mifare cards created by NXP Semiconductors, and used for London&#8217;s transit among many other systems, has been found to have similar exploits.  <a href="http://www.schneier.com/blog/archives/2008/08/hacking_mifare.html">Bruce Schneier already has a fantastic write up on this on his blog</a>, particularly NXP&#8217;s attempt to suppress the researchers who uncovered the flaws.</p>

<p>Security is hard, really hard.  It constantly needs to be fixed and updated, but there are certain things that should be so obviously wrong, like RFID update over-the-air, that I can&#8217;t believe people base entire businesses on <em>obviously</em> flawed systems.  Still, consumers have a right to know, and researchers have a right to research.  Plus, by the time the researchers have figured it out and published, there is always a good chance that someone else has already figured it out to, and has been exploiting it for their own gain.</p>
]]></description>
            <link>http://blog.foxxtrot.net/2008/08/fastrak-easily-ruined.html</link>
            <guid>http://blog.foxxtrot.net/2008/08/fastrak-easily-ruined.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Security</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">RFID</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Security</category>
            
            <pubDate>Thu, 07 Aug 2008 10:59:07 -0800</pubDate>
        </item>
        
        <item>
            <title>Linux Hater</title>
            <description><![CDATA[<p>I&#8217;ll admit, I&#8217;m occasionally a bit of a Linux Apologist.  I have been known to downplay faults in Free Software, and just deal with them most of the time.  I haven&#8217;t paid for any Microsoft software in a decade, and though I&#8217;ve often taken the opportunity to get free (legitimate) licenses for Microsoft software, I&#8217;ve always been fine going without.  </p>

<p>I think I&#8217;m better than most, in that I at least recognize that most users don&#8217;t want to put up with some of the problems that I encounter, and I don&#8217;t begrudge anyone their choice to use Windows.  It&#8217;s not the choice I would make, but I&#8217;m not the one making it.  I&#8217;m the same way with iPods.  I won&#8217;t buy one, since they don&#8217;t support the formats that I want to use, and much of the platform is built on DRM (this applies greatly to the iPhone as well), but just because the technology doesn&#8217;t fit <em>my</em> requirements doesn&#8217;t mean that it doesn&#8217;t work for the vast majority of the population.  I don&#8217;t like it, but there it is.</p>

<p>But like I said, Linux has problems.  My system has some bizarre issues that either I lack the time, ability or inclination to fix.  My wife&#8217;s laptop, which she&#8217;s been happy with the Ubuntu installation on, has other issues.  Ubuntu is great in that it <em>mostly</em> just works, but sometimes mostly is pretty annoying.  Like <a href="http://www.google.com/search?hl=xx-bork&amp;client=firefox-a&amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;hs=Qa&amp;q=PulseAudio+site%3Ajeffreystedfast.blogspot.com&amp;btnG=Seerch">Jeffrey Stedfasts problems with PulseAudio</a>.  To date, I&#8217;ve mostly just dealt with it, submitting patches where my time and inclination allowed, but much of the philosophy around Free Software begins to have issues around commoditization.</p>

<p>Hence where the <a href="http://linuxhaters.blogspot.com/">Linux Hater&#8217;s Blog</a> comes into play.  On the site, some anonymous blogger rants, raves, and curses his way through a variety of major problems both in the Linux and Free Software communities.  And I&#8217;d clearly suggest reading it.  Myself, and others, have taken to viewing the blog more as bug reports, as problems that need attention before Linux will ever see mainstream usage. My wife manages because she has me to help her.  My parents wouldn&#8217;t, because they live too far away for me to offer significant aide to.  </p>

<p>The Linux Hater, who posts simply as &#8220;me&#8221;, is clearly someone who is passionate about computing, and yes, even Linux.  If he didn&#8217;t want Linux to succeed, I don&#8217;t see why he&#8217;d bother with such fervent bile.  And I firmly believe that with the right support, Linux can be the premiere Desktop Unix.  Or at least, one of the Linux distributions can.  And we&#8217;re already starting to see Ubuntu falling into the place.  Amazon&#8217;s MP3 music store offer&#8217;s their <a href="http://www.amazon.com/gp/dmusic/help/amd.html?ie=UTF8&amp;forceos=LINUX&amp;ASIN=&amp;isTrack=">downloader client for Linux</a>, for <a href="http://ubuntu.com/">Ubuntu</a>, <a href="http://www.debian.org/">Debian</a> (which is very similar to Ubuntu), <a href="http://fedoraproject.org/">Fedora</a>, and <a href="http://www.opensuse.org/">OpenSUSE</a>, because these four distributions offer a stable environment in which to operate.</p>

<p>The Open Source community is made up of all types of users, and we all have different views and priorities.  But we all want to see the platform succeed.  The technology is cool, but the rest of the bits need to be put together.  It&#8217;s that other stuff that the Linux Hater focuses on.  It&#8217;s not enough to be cool, you&#8217;ve got to work, and you&#8217;ve got to be responsive to problems. That is where Linux has traditionally failed, and that is where people like Linux Hater need to call people out.</p>

<p>I&#8217;m going to work much harder myself to try to fix these failures, and I&#8217;m hoping to get a job soon which will allow me time to do this more.  Linux <em>could</em> be the premiere Unix environment, it isn&#8217;t yet, but it could be, and that is what we need to work toward.</p>
]]></description>
            <link>http://blog.foxxtrot.net/2008/08/linux-hater.html</link>
            <guid>http://blog.foxxtrot.net/2008/08/linux-hater.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Computing</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Linux</category>
            
            <pubDate>Tue, 05 Aug 2008 16:51:05 -0800</pubDate>
        </item>
        
        <item>
            <title>Whole Food Adventures: Bread</title>
            <description><![CDATA[<p>Bread is delicious, plus it really can be pretty good for you.  The problem is that most breads that sell in the modern world are chock full of preservatives, high-fructose corn syrup, Monosodium Glutamate, you name it.  Just check the loaf of bread you&#8217;re eating.  Odds are it has any number of things in it that will cause you to scratch your head wondering why it&#8217;s in your bread.  Often times, the bread that you can buy direct from a grocery store bakery is going to be <em>better</em>, but typically the only guarantee is the reduced amount of preservatives.</p>

<p>Catherine and I did some price checking, and we&#8217;ve found that a loaf of bread from the <a href="http://www.moscowfood.coop/">Moscow Food Co-op</a> is just about the same price as the healthiest bread we can find at the grocery store, plus as Co-op members, we get every 11th loaf of bread free.  It&#8217;s not much, but it&#8217;s nice.</p>

<p>However, you can&#8217;t really talk about bread without getting into the topic of grains.  I&#8217;ve discussed <a href="http://blog.foxxtrot.net/2008/07/whole-foods-adventures-grains.html">whole grains</a> before, and I can&#8217;t think of anyone who thinks that white bread is even good for them, at least compared to wheat bread, but even then many people argue for lacto-fermentation of grains being the only way to really get all the nutritional possibility out of a grain as it contains.  As such, the suggestion is to use buttermilk, yoghurt, or some other fermented milk product as the base liquid in you bread, and then let the dough sit for at least 12 hours, preferably 24.</p>

<p>As part of this, I&#8217;ve make a batch of yoghurt dough using our food processor and the kneading blade (it&#8217;s plastic, and shorter).  The recipe is simple:</p>

<pre>
    1/2 lb butter, room temperature
    1 cup yoghurt
    1 tbsp salt
    3 1/2 cups whole wheat flour or spelt
</pre>

<p>Begin by creaming together the butter and yoghurt in your mixing bowl, this can be done with either a food processor, stand mixer, or a hand mixer, and then add in the salt and the flour.  I ended up having to add a bit more yoghurt to get a nice ball forming, but after a few minutes, I had a nice ball walking around the inside of my food processor, which told me I was done.  I removed this out to another bowl, and put a cloth over it.</p>

<p>What&#8217;s this dough good for?  Well, it&#8217;s supposed to make a good tart crust, possibly even for a pie, though I&#8217;m not sure it would be the best pie ever made.  Or a pizza crust.  Really, any thin partially bread-like application and it should work well.  Just use a bit of white flour when you&#8217;re rolling it out to keep it from sticking.  Note that this is an unleavened bread, so it won&#8217;t rise.  The book we&#8217;ve been working from since we <a href="http://blog.foxxtrot.net/2008/04/beginning-adventures-in-whole.html">started this experiment</a> has some pretty nasty things to say about yeast-risen breads, and I&#8217;m not sure I agree with her sentiments to be honest.  But I be doing more research on this issue, and coming back with a post of risen breads, since non-risen breads just don&#8217;t work as good for sandwiches.</p>

<p>In the meantime, think a bit more about your breads, read the label, and try to buy from the bakery.  Not only will it almost always be healthier, it probably tastes better too. You can go a long way in food by spending just a little more for quality stuff.</p>
]]></description>
            <link>http://blog.foxxtrot.net/2008/08/whole-food-adventures-bread.html</link>
            <guid>http://blog.foxxtrot.net/2008/08/whole-food-adventures-bread.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Food</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Food</category>
            
            <pubDate>Mon, 04 Aug 2008 14:53:36 -0800</pubDate>
        </item>
        
        <item>
            <title>Little Brother&apos;s Take Action</title>
            <description><![CDATA[<p>God Bless America.  Those of us lucky enough to have been raised in the United States often forget just how damn lucky we are. Even with the ever increasing mandates of the <a href="http://www.dhs.gov/index.shtm">Department of Homeland Security</a>, such as their recent claim that <a href="http://www.cbp.gov/linkhandler/cgov/travel/admissability/search_authority.ctt/search_authority.pdf">Border Agents can search, confiscate, and retain electronic devices indefinitely</a>, even from American Citizens, we still have it better than a lot of other countries.  Even the Supreme Court has decided that people being detained by the government for any reason, <a href="http://edition.cnn.com/2008/US/06/12/scotus/index.html">do not lose their rights</a>. </p>

<p>London is <em>covered</em> in cameras, which <a href="http://www.thisislondon.co.uk/news/article-23412867-details/Tens+of+thousands+of+CCTV+cameras,+yet+80%25+of+crime+unsolved/article.do">have done almost nothing in solving crimes</a>, but the UK government intends to expand the program.  In one of the video&#8217;s below, the police officer in question mentions that in most of the world, most police &#8220;interviews&#8221; start physically.  Our government, particularly in the last eight years though the trend goes back much further, have worked hard to further regulate our behavior but again, at least I&#8217;m an American, and don&#8217;t live somewhere else in the world.</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="bb-poster.jpg" src="http://blog.foxxtrot.net/2008/08/01/bb-poster.jpg" width="500" height="528" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></span>Luckily, people are fighting back.  In Cory Doctorow&#8217;s latest Novel, <a href="http://blog.foxxtrot.net/2008/06/cory-doctorows-little-brother.html">Little Brother</a>, Doctorow has a group of people in San Francisco who begin recording the government&#8217;s bad behavior and posting it on the Internet.  In the book, these people call themselves Little Brothers.  I love that name.  And, with the proliferation of cell phones with cameras (including video), it is easier than ever for <em>us</em> to watch the watchers.</p>

<p>Partially, this comes down to knowing your rights.  And respecting those rights.  The <a href="http://en.wikipedia.org/wiki/Fifth_Amendment_to_the_United_States_Constitution">Fifth Amendment to the Constitution of the United States of America</a> provides us the right to avoid bearing witness against themselves.  The Fifth Amendment was not designed to protect the guilty.  It was designed to protect the Innocent, but it&#8217;s developed such a bad reputation over the years.  But don&#8217;t take my word for it.  <a href="http://www.regent.edu/acad/schlaw/faculty_staff/duane.cfm">Professor James Duane</a> of  Regent University School of Law in Virginia Beach, Virginia, does a better job than I can possibly hope to do.  And he&#8217;s got the Supreme Court on his side.</p>

<p><embed id="VideoPlayback" style="width:400px;height:326px" allowFullScreen="true" src="http://video.google.com/googleplayer.swf?docid=-4097602514885833865&amp;hl=en&amp;fs=true" type="application/x-shockwave-flash"> </embed></p>

<p>Not convincd by Professor Duane?  Office George Bruch, of Virgina Beach, agrees with everything Professor Duane says.</p>

<p><embed id="VideoPlayback" style="width:400px;height:326px" allowFullScreen="true" src="http://video.google.com/googleplayer.swf?docid=6014022229458915912&amp;hl=en&amp;fs=true" type="application/x-shockwave-flash"> </embed></p>

<p>It&#8217;s not that the cops are <em>trying</em> to screw people, but trying to navigate the modern legal system is anagolous to trying to walk across a minefield, while being shot at, while wearing a blindfold. <em>Everyone has broken the law at some point.</em>  Usually, these laws are minor, and usually they didn&#8217;t do it knowingly.</p>

<p>The system needs correction, but the <em>only way</em> that it&#8217;s going to be fixed, without a full-scale revolution, is if we, the people, know our rights, and expect people to honor our rights.  These Little Brothers have helped keep <a href="http://www.silicon.com/publicsector/0,3800010403,39266049,00.htm">certain abuses of power in check</a>, and some have been punished for their abuses. We can keep the Government accountable, only by making their abuses known.  We must be proactive if we want to system to change.  We must remain cognizant of our rights.  We must watch the watchers.</p>
]]></description>
            <link>http://blog.foxxtrot.net/2008/08/little-brothers-take-action.html</link>
            <guid>http://blog.foxxtrot.net/2008/08/little-brothers-take-action.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Real Life</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Government</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Law</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Video</category>
            
            <pubDate>Fri, 01 Aug 2008 09:58:17 -0800</pubDate>
        </item>
        
        <item>
            <title>Have No Privacy, Do No Evil</title>
            <description><![CDATA[<p>Google has always touted themselves as a company which will do no evil. It&#8217;s a part of their posted <a href="http://www.google.com/corporate/tenthings.html">Corporate Philosophy</a>.  However, in light of the recent revelation that Google keeps <a href="http://news.bbc.co.uk/2/hi/technology/7488009.stm">months of user-identifiable YouTube logs</a>, and their recent claim that <a href="http://www.itnews.com.au/News/81523,google-says-complete-privacy-does-not-exist.aspx">complete privacy is an unreasonable expectation</a>, some people (okay, Slashdot), seem to wonder <a href="http://tech.slashdot.org/article.pl?sid=08/07/31/0240253">how accurate that claim is</a>.</p>

<p>Admittedly, much of the commentary on the Slashdot article is standard Slashdot pants-wetting, but some of it is interesting.  Ultimately, I&#8217;m not terribly sympathetic to the plaintiffs in the above lawsuit.  Do I think that they should be able to have their private drive removed from Google&#8217;s Street View?  Yes.  However, they&#8217;re suing for $25,000 for reasons including &#8216;mental distress&#8217;.  Admittedly, their suit isn&#8217;t too ridiculous as the sum of money is relatively low, and depending on how much they argue that their property value has dropped the amount may be sensible, but I very much doubt that there has been any drop in their property value relating to this photographing.</p>

<p>However, people are starting to notice and think about how much Google actually knows about us.  Some people do all their web searching, keep all their e-mail in G-Mail, keep their calendars with Google Calendar, put their documents in Google Docs, and on and on.  And Google uses <em>all</em> of this data to form as complete a picture about a user as they can.  To date, it doesn&#8217;t appear that their using this data to target advertising directly at <em>me</em>, but that is related to it being more efficient to aggregate my behavior with people like me than to target me directly.</p>

<p>Google does a lot of good, I&#8217;m not trying to convince anyone to never use Google.  I use Google for almost all of my web searching.  Google Ads appear on this site.  I have a GMail account.  I&#8217;m interested in developing for and using Android.  And I agree with Google&#8217;s sentiment that <em>complete</em> privacy is very, very difficult, maybe even impossible, to have in this day and age.  But when there is a reasonable argument, such a a private drive, Google should be more receptive to removing such information from their cache.  Plus, at my last job, some idiot programmer had, at some point, created an unprotected PHP page that would print out a <em>ton</em> of customer data, including names, addresses, and credit card numbers (if we still have them).  Google found and indexed this, and I proceeded to immediately remove it once a customer discovered it while ego-searching.  Highly embarrassing, and it took nearly 48 hours for this data to be removed from Google&#8217;s cache.  More embarrassing from me and my company (I had only just recently took control of the website), but I think Google should hold some shame as well.</p>

<p>Due to Google&#8217;s success, and the realization of how much they know, some people are preparing to move forward with plans to take Google down.  <a href="http://www.cuil.com/">Cuil</a> is the latest attempt, and their engine and layout is interesting. <a href="http://blogoscoped.com/archive/2008-07-30-n88.html">It&#8217;s not terribly accurate sometimes</a>, but it&#8217;s interesting.  Plus, Yahoo! has really improved their search over the last few years and I&#8217;ve noticed that they&#8217;ve really improved their relevancy over the last few years.  In short, Google isn&#8217;t the end-all anymore, and there are privacy concerns with using their services, but those concerns exist <em>everywhere</em> you go on the Web.  If you want to maintain any level of privacy, you may want to spread your online identity as much as possible.  It&#8217;s less convenient, but convenience very rarely implies security or privacy. If you want privacy, you need to be willing to work at it.</p>
]]></description>
            <link>http://blog.foxxtrot.net/2008/07/have-no-privacy-do-no-evil.html</link>
            <guid>http://blog.foxxtrot.net/2008/07/have-no-privacy-do-no-evil.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Computing</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">The Internet</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Google</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Privacy</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Security</category>
            
            <pubDate>Thu, 31 Jul 2008 09:25:53 -0800</pubDate>
        </item>
        
        <item>
            <title>All Quiet on the Android Front</title>
            <description><![CDATA[<p>The Big <img alt="G" src="/images/google-g.png" /> has gone silent on the issue of Android these past few months.  Very little of substance has come out since the <a href="http://code.google.com/events/io/">Google I/O</a> conference in late May.  Even worse?  The API hasn&#8217;t been updated since <a href="http://code.google.com/android/RELEASENOTES.html">early March</a>, the latest version being m5-rc15 as of this writing.  </p>

<p>This wouldn&#8217;t be so annoying if there wasn&#8217;t evidence to suggest that Google made updated <a href="http://groups.google.com/group/android-developers/browse_thread/thread/f031c33fe9e5b992">SDKs available to the winners in the Android Developer&#8217;s Challenge</a>, but not to anyone else.  There have been bugs in the SDK since March, that we&#8217;ve seen no movement on, and I refuse to believe that Google&#8217;s gone static.  <a href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;articleId=9110301">Others are upset about this as well</a>.</p>

<p>Why is this a problem? Simple.  The <a href="http://www.apple.com/iphone/">iPhone</a>.  Google was in a position at the beginning of this year to make a lot of progress on the developer goodwill front.  Android is a better development platform than the iPhone as it has fewer restrictions on Applications, it has means to share data between programs, it doesn&#8217;t lock the developer into one single distribution model, and it doesn&#8217;t lock the <em>user</em> into a single hardware platform.  Will there be a specified baseline Android phone?  Very likely.  It&#8217;s easier for me as a developer if I have a reasonable expectation of a certain level of functionality.  And the <a href="http://www.engadget.com/2008/05/28/google-demos-the-htc-dream-at-i-o-conference/">HTC Dream seems to be that baseline</a>.  </p>

<p>Plus, Android users can actually <em>talk</em> about developing for Android.  Something that <a href="http://www.tuaw.com/2008/06/09/iphone-sdk-nda-still-in-effect/">iPhone developers still can&#8217;t do</a>.  But, the iPhone is apparently taking over the smartphone market.  People are excited, consumers are signing up in droves, and developers are scrambling to get on the platform. Of course, there is a second part of this:  The rush of Developers to the iPhone has undoubtably sold more Macs, as you <em>must</em> be on an Intel-based Mac to run the SDK.  My only Mac is PowerPC, so just as Apple has given me the finger, I&#8217;d just like the pass them along a nice big fuck yoo too.</p>

<p>But, the iPhone is here <em>today</em>.  And while Android is still on track for the end of the year, those of us who didn&#8217;t enter or win the <a href="http://code.google.com/android/adc.html">developer&#8217;s challenge</a>, need some love too. And we need it before handsets hit the market.  If Google wants any chance to unseat the quickly growing iPhone market, they need to help us.  <a href="http://androidcommunity.com/">We want to talk about Android</a>.  Give us something to talk about.  <a href="http://groups.google.com/group/android-discuss/msg/fa17b0e011a3b8db">We know you&#8217;re working hard</a>, but you&#8217;re just not meeting our needs.</p>
]]></description>
            <link>http://blog.foxxtrot.net/2008/07/all-quiet-on-the-android-front.html</link>
            <guid>http://blog.foxxtrot.net/2008/07/all-quiet-on-the-android-front.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Programming</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Android</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Apple</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Google</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">iPhone</category>
            
            <pubDate>Tue, 29 Jul 2008 13:34:37 -0800</pubDate>
        </item>
        
    </channel>
</rss>
