<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
   <channel>
      <title>Work + Projects Feed</title>
      <description>Pipes Output</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=ttLksYwo3hGbH5OJZcag4A</link>
      <pubDate>Mon, 06 Jul 2009 17:21:07 -0700</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/TylerButlerTechnologyPosts" type="application/rss+xml" /><feedburner:emailServiceId>TylerButlerTechnologyPosts</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
         <title>Outlook, Email, and CSS</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/9l5hV_D_vxo/</link>
         <description>Note: I work for Microsoft, in the Office division, but I don’t work in or with the Outlook team. I don’t have any specific knowledge about their decisions or plans, and this post is based only my own experience here at Microsoft.
The web community has been up in arms the last day or so about [...]</description>
         <guid isPermaLink="false">http://www.tylerbutler.com/2009/06/outlook-email-and-css/</guid>
         <pubDate>Fri, 26 Jun 2009 10:11:29 -0700</pubDate>
         <content:encoded><![CDATA[<p><em>Note: I work for Microsoft, in the Office division, but I don’t work in or with the Outlook team. I don’t have any specific knowledge about their decisions or plans, and this post is based only my own experience here at Microsoft.</em></p>
<p>The web community has been up in arms the last day or so about a <a rel="nofollow" target="_blank" href="http://fixoutlook.org">campaign via Twitter</a> pushing for Outlook 2010 to stop using the Word rendering engine for HTML email. I engaged in a short friendly discussion with my buddy <a rel="nofollow" target="_blank" href="http://twitter.com/vandrijevik">Vlad</a> on Twitter about the issue, and that got me thinking about the issue a bit more deeply. And the more I thought about it, and read everything that was being written, the more I realized that people aren’t actually communicating effectively, and that pisses me off…</p>
<p>The fixoutlook.org website says this: “Microsoft has confirmed they plan on using the <strong>Word rendering engine</strong> to display HTML emails in Outlook 2010.” (emphasis added) Based on that, and the rest of the text on the site, it seems like the big beef they have is that Word’s <strong>rendering engine</strong> for HTML is not up to snuff. Fair point – it isn’t. But they contradict themselves in <a rel="nofollow" target="_blank" href="http://www.email-standards.org/blog/entry/microsoft-respond-to-our-call-for-standards-support/">their updated response</a> to Microsoft’s response when they say, “We’re asking that the <strong>HTML produced by the Word engine be standards compliant</strong>. This in turn will ensure that the engine will correctly <em>render</em> standards-based emails.” (emphasis added)</p>
<p>Wait a second. Do they want an editor that produces HTML, or a rendering engine that works properly? Doing the work to make sure the editor is producing clean markup <strong>might</strong> produce a rendering engine that renders nicely, perhaps it even <strong>should</strong> produce one, but that <strong>doesn’t mean it will</strong>. Those two pieces of work are <strong>not</strong> the same thing.</p>
<p>Lots of people have been pointing to <a rel="nofollow" target="_blank" href="http://www.zeldman.com/2009/06/24/sour-outlook/">a post from Zeldman</a> about this. Zeldman’s a brilliant guy, but he completely misses the point when he perpetuates a rumor about why Outlook chose Word’s engine: “Rumor has it that Microsoft chose the Word rendering engine because its Outlook division “couldn’t afford” to pay its browser division for IE8. And by “couldn’t afford” I don’t mean Microsoft has no money; I mean someone at this fabulously wealthy corporation must have neglected to budget for an internal cost.”</p>
<p>Ummmm… no. In my experience, the phrase “couldn’t afford” at Microsoft R&amp;D has nothing to do with monetary cost. It has to do with engineering cost. Features don’t exist just because you want them to exist. (An aside: <a rel="nofollow" target="_blank" href="http://blogs.msdn.com/oldnewthing/">Raymond Chen</a> has a great quote about this that I can’t find. If you have a link, please let me know.) So I imagine that the rationale in the Outlook team went something more like this:</p>
<p><em>Well, we want Outlook to produce really rich emails, and we want it to have a really familiar look and feel, so people already using our products will feel at home. Hmmm, building an editor is extremely hard to get right, plus we, being part of the Office suite, have several editing tools already. Emails tend to be a lot like documents, so Word seems to be a reasonable choice. This way we can leverage all the editor features Word already has, plus things they’re building this release, and focus on the Outlook-specific work we have to do. We don’t want to invest our engineering time in building an editor when we already have one.</em></p>
<p>From this standpoint, it’s easy to see why using Word for rendering as well is the next logical step. You could argue that they should use IE (or Gecko, or Webkit, as Zeldman does, but again, just because those engines are free doesn’t mean using them is without cost) to render email, and Word to author it. That’s a reasonable idea. In fact, the Outlook team seems to agree with you, because if you get an HTML email that looks wrong, you see a link to open it in a browser. In fact, even the <a rel="nofollow" target="_blank" href="http://farm4.static.flickr.com/3322/3637814200_a2aa59bc89_o.jpg">example image</a> at fixoutlook.org has the “info bar” at the top that does this.</p>
<p>You can take issue with the implementation, certainly, because it sucks mightily. The fact that I have to open the email in a browser separately blows. I shouldn’t have to do that. But don’t kid yourself into thinking that integrating an IE window into the message window is so stupidly simple that Microsoft is maliciously avoiding doing it to somehow screw users. It might be straightforward – I honestly don’t know. But do you? If you think you do, please go read Steve Yegge’s post “<a rel="nofollow" target="_blank" href="http://steve-yegge.blogspot.com/2009/04/have-you-ever-legalized-marijuana.html">Have you ever legalized marijuana?</a>” and come back.</p>
<p>What really bugs me about this whole thing is that people immediately jumped on the fact that Outlook uses Word for rendering, instead of sticking to the real problem that Outlook’s rendering of HTML sucks in some cases. The rendering engine they’re using is immaterial, really, because if the team goes and fixes the rendering inadequacies, then the issue goes away. They can choose how to fix the issues, should they choose to fix them at all, but at this point, even if all the rendering issues are fixed, many people will still be pissed because Word is used to render the email. The argument has shifted from being about the support proper email display to being about Word used for rendering, so there doesn’t seem to be a path to redemption for Microsoft in the court of public opinion that doesn’t involve ripping out Word completely.</p>
<p>I completely agree, personally, that web standards serve as a reasonable basis for email format standards even though there is no formal effort to standardize email. But please argue about the right things. Spend your energy trying to see those standards acknowledged rather than perpetuating this silly argument about ripping out Word from Outlook. Hopefully this effort will have the desired effect, and these rendering issues will get resolved prior to Outlook 2010 RTM. But I can almost completely guarantee that if you want Word completely ripped from Outlook, you’re not going to get what you want.</p>
<p><em>By the way, does anyone have a screenshot of what the email used in the example image looks like in Outlook 2007, which also used Word for rendering? That struck me as a strange omission. I’m wondering if the issues displayed in that screenshot are just bugs in the 2010 beta. I doubt it, but would still like to see it.</em></p>
<p><em>Also – is there any way to get a sample HTML email from the Email Standards Project’s <a rel="nofollow" target="_blank" href="http://www.email-standards.org/acid-test/">email acid test</a>? Seems ridiculous there’s no “email me this sample email” form on the acid test page. I can and will file a bug against Outlook if I can get a copy mailed to me.</em></p>
<hr />
<p>This didn’t really fit into the overall flow of the post above, but I still think it’s reasonable info to consider, so I’m including it here anyway. I’m about to throw out a bunch of numbers and statistics that are not backed up by any data. They are based only on my own logic and occasionally rational mind. I think they’re true and reasonable statements, but I welcome data that contradicts them.</p>
<p>I think it’s safe to say that a majority, say, 80%, of Outlook users use it with Exchange. Also, a majority of Exchange users use Outlook, and Exchange is primarily used in business settings. Since a large majority of email sent in a business setting is sent to other people in your business, then they’re probably also using Exchange, and also probably using Outlook. Based on this not-so-scientific reasoning, I argue that the number of emails received in Outlook that didn’t originate in Outlook is relatively small. That means, practically speaking, that as long as Outlook can render email that started in Outlook, you’re hitting the majority of your users’ needs.</p>
<p>Now, the idealist in you (and me, for the record) is screaming bloody murder, because you want to see the “right thing” happen for all cases, not just the majority case. But unfortunately, software is more about practicality than idealism, and at some point some smart, but possibly naive people in Outlook made a tradeoff. I’d say with 99% certainty that at some point a developer or two in Outlook estimated the cost of different approaches and implementations, and this one wound up cheaper. They made a cut. They made a tradeoff. And we disagree with the tradeoff.</p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/9l5hV_D_vxo" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.tylerbutler.com/2009/06/outlook-email-and-css/</feedburner:origLink></item>
      <item>
         <title>Twitter Experiment</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/Tnj4p7-EJ8M/</link>
         <description>I am experimenting a little with auto-tweeting from my blog to Twitter. In general, I dislike when people do this, for the following reasons: I get double-exposure to their content. If I am interested enough in someone to follow them on Twitter, and they also have a blog, then 90% of the time I also subscribe [...]</description>
         <guid isPermaLink="false">http://www.tylerbutler.com/?p=489</guid>
         <pubDate>Thu, 18 Jun 2009 13:04:46 -0700</pubDate>
         <content:encoded><![CDATA[<p>I am experimenting a little with auto-tweeting from my blog to Twitter. In general, I dislike when people do this, for the following reasons:</p>
<ul>
<li>I get double-exposure to their content. If I am interested enough in someone to follow them on Twitter, and they also have a blog, then 90% of the time I also subscribe to their RSS feed. That means I see their posts in Twitter then also in my feed. That bugs me.</li>
<li>Tweets are limited to 140 characters, and typically blog posts are longer. That means I see 100 characters plus a link, possibly less in the tweet itself. That&#8217;s useless.</li>
</ul>
<p>At the same time, I find myself tweeting a lot of links, because Twitter is just a more vibrant community than my blog. I get a lot more comments and replies from people there than on my blog. Twitter is a decent place to broadcast stuff, but I don&#8217;t like the fact that I can&#8217;t easily find the stuff I&#8217;ve posted later. Have you tried using Twitter search to find a link you yourself posted in the past? It&#8217;s ridiculously bad. I figure if I can just keep it on my own site at least I have more control over the search experience. Another reason I want to do this is to have a centralized place to write stuff, then choose how it&#8217;s syndicated. This will let me do that.</p>
<p>In order to address the two issues I have with common auto-tweet solutions, I&#8217;ll only be tweeting some of my posts. I am doing this by feeding only posts tagged &#8220;<a rel="nofollow">tweet</a>&#8221; to Twitter via <a rel="nofollow" target="_blank" href="http://twitterfeed.com/">TwitterFeed</a>. In addition, I grabbed a <a rel="nofollow" target="_blank" href="http://lepslair.com/wp/leprakhauns-character-count-wordpress-plugin/">WordPress plug-in</a> that does character counts of posts in the WordPress web UI. This will help me keep my posts that are auto-tweeted short and completely digestible as a complete tweet.</p>
<p>Hopefully this will all come together and work. Let me know what you think.</p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/Tnj4p7-EJ8M" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.tylerbutler.com/2009/06/twitter-experiment/</feedburner:origLink></item>
      <item>
         <title>PowerShell for Fun and Profit</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/vMCIT84UGXc/</link>
         <description>Stefan Goßner has a great post on his blog covering some common problems that people have with Content Deployment in SharePoint. Problem 13 has to do with the default timeout window for Content Deployment jobs. Stefan provides some sample code that you can use to adjust the timeout value, since it’s not exposed through the [...]</description>
         <guid isPermaLink="false">http://www.tylerbutler.com/?p=460</guid>
         <pubDate>Mon, 15 Jun 2009 12:20:29 -0700</pubDate>
         <content:encoded><![CDATA[<p>Stefan Goßner has a great post on his blog covering <a rel="nofollow" target="_blank" href="http://blogs.technet.com/stefan_gossner/pages/content-deployment-best-practices.aspx">some common problems</a> that people have with Content Deployment in SharePoint. Problem 13 has to do with the default timeout window for Content Deployment jobs. Stefan provides some sample code that you can use to adjust the timeout value, since it’s not exposed through the UI, but I find writing and running sample code on a server a bit of a pain. Instead of writing code, you can actually use PowerShell to do this directly from the PS prompt.</p>
<p>The key to doing this is loading the SharePoint DLLs into your PowerShell environment. You can do this using the <span class="monospace">System.Reflection.Assembly</span> class. Take a look at this sample script:</p>
<pre>param( $newTimeout = 600 ) [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") $cdconfig = [Microsoft.SharePoint.Publishing.Administration.ContentDeploymentConfiguration]::GetInstance() $cdconfig.RemoteTimeout = $newTimeout
$cdconfig.Update() "Updated RemoteTimeout to $newTimeout seconds."</pre>
<p>In line 3, I load up the <span class="monospace">Microsoft.SharePoint.Publishing</span> DLL, then I grab the <span class="monospace">ContentDeploymentConfiguration</span> (line 5) using the <span class="monospace">GetInstance()</span> static method. I update the <span class="monospace">RemoteTimeout</span> property, then call <span class="monospace">Update()</span>, and we’re done. No code to write and compile.</p>
<p>This example uses the <span class="monospace">param</span> keyword, which means you can save it as <span class="monospace">ChangeRemoteTimeout.ps1</span>, then run it like this:</p>
<p><code>PS C:&#92;&gt; ChangeRemoteTimeout –newTimeout 1200</code> </p>
<p>This is completely optional, of course, but if you find yourself doing this a lot, it might be worth saving it as a reusable script.</p>
<p>You might also want to make changes to some of the options that are exposed through the UI already. Here’s an example:</p>
<pre>PS C:&#92;&gt; [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
PS C:&#92;&gt; $cdconfig = [Microsoft.SharePoint.Publishing.Administration.ContentDeploymentConfiguration]::GetInstance()
PS C:&#92;&gt; $cdconfig.AcceptIncomingJobs = $true
PS C:&#92;&gt; $cdconfig.RequiresSecureConnection = $false
PS C:&#92;&gt; $cdconfig.Update()</pre>
<p>In this case, I’m configuring the farm to accept incoming deployment jobs and not require secure connections. You can also make additional changes to other properties, such as FileMaxSize and RemotePollingInterval using this method. Stefan covers these properties in his <a rel="nofollow" target="_blank" href="http://blogs.technet.com/stefan_gossner/archive/2008/05/28/pimp-my-content-deployment-job.aspx">Pimp My Content Deployment Job</a> post.</p>
<p>One other note… Using .NET DLLs in PowerShell is generally supported across the board. It’s not limited to the SharePoint DLLs. There’s some pretty exciting stuff you can do here once you start playing around.</p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/vMCIT84UGXc" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.tylerbutler.com/2009/06/powershell-for-fun-and-profit/</feedburner:origLink></item>
      <item>
         <title>Wikipedia Walks</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/ki8MXyjg1TE/</link>
         <description>A few years ago I realized that when I would start reading an interesting article on Wikipedia, I would often end up reading 6-8 additional articles that were linked from the original article, then branch out from there, etc. etc. I&amp;#8217;d end up in a completely different subject than the one I&amp;#8217;d started in, and [...]</description>
         <guid isPermaLink="false">http://www.tylerbutler.com/?p=443</guid>
         <pubDate>Mon, 18 May 2009 06:35:24 -0700</pubDate>
         <content:encoded><![CDATA[<p>A few years ago I realized that when I would start reading an interesting article on Wikipedia, I would often end up reading 6-8 additional articles that were linked from the original article, then branch out from there, etc. etc. I&#8217;d end up in a completely different subject than the one I&#8217;d started in, and I learned a lot, plus it was just a ton of fun.</p>
<p>I started calling these <a rel="nofollow" target="_blank" href="http://www.tylerbutler.com/tags/wikipedia-walks/">Wikipedia Walks</a>. The concept is simple - start at an article you find interesting, then just continue on to any articles linked from the original. Finish when you get bored. To make it more interesting, you should record both the starting article and the ending article, so you can see just how far off the beaten path you&#8217;ve gotten.</p>
<p>To start, I&#8217;d suggest the article on <a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Game_theory">Game Theory</a>.</p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/ki8MXyjg1TE" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.tylerbutler.com/2009/05/wikipedia-walks/</feedburner:origLink></item>
      <item>
         <title>Office 2010: The Movie</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/dW_j6DAi7wY/</link>
         <description>A bit cheesy, but glad to see some news about the next version of Office finally coming out. I wish there were some screenshots or videos in the little movie clip, but it&amp;#8217;s early - I&amp;#8217;m sure we&amp;#8217;ll be releasing that sort of stuff in the future. It&amp;#8217;ll be a busy next few months for [...]</description>
         <guid isPermaLink="false">http://www.tylerbutler.com/?p=414</guid>
         <pubDate>Fri, 15 May 2009 18:47:09 -0700</pubDate>
         <content:encoded><![CDATA[<p>A bit cheesy, but glad to see some news about the next version of Office finally coming out. I wish there were some screenshots or videos in the little movie clip, but it&#8217;s early - I&#8217;m sure we&#8217;ll be releasing that sort of stuff in the future. It&#8217;ll be a busy next few months for those of us on the product group, but it&#8217;s exciting to finally start telling people about all the cool stuff we&#8217;ve built.</p>
<p><a rel="nofollow" target="_blank" href="http://www.office2010themovie.com/">Office 2010: The Movie</a></p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/dW_j6DAi7wY" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.tylerbutler.com/2009/05/office-2010-the-movie/</feedburner:origLink></item>
      <item>
         <title>SharePoint Permissions “Cheat Sheet”</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/9Kx92jD14qo/</link>
         <description>Back when we were building SharePoint 2007, a member of our Program Management team left Microsoft, and I inherited the permissions-related features for the then Content Management Server team, which was responsible for all of the web publishing features in SharePoint. Essentially, this meant that I has to figure out what the correct set of [...]</description>
         <guid isPermaLink="false">http://www.tylerbutler.com/?p=396</guid>
         <pubDate>Tue, 05 May 2009 14:28:21 -0700</pubDate>
         <content:encoded><![CDATA[<p>Back when we were building SharePoint 2007, a member of our Program Management team left Microsoft, and I inherited the permissions-related features for the then Content Management Server team, which was responsible for all of the web publishing features in SharePoint. Essentially, this meant that I has to figure out what the correct set of permission levels were for our features, and what lists/libraries should have unique (non-inherited) permissions.</p>
<p>Now, if you’ve used SharePoint for any length of time, you’ve no doubt been frustrated with permissions management. It’s definitely a sore point. Unfortunately, I don’t have any magic bullets or golden hammers. When I started trying to figure everything out so that I could make educated decisions for our designs, I realized that I needed to write stuff down. People always asked questions like, “What rights do Designers have by default?” Sure, you can find out by going to the site itself and checking, but the UI isn’t the easiest to navigate, and oftentimes what you really want to do is compare multiple permissions levels. “What rights do Designers have that Contributors don’t?”, for example. To help keep it all straight in my mind (and so I could point people to the info rather than answer 100 emails a day with the same question!), the SharePoint Permissions “Cheat Sheet” was born.</p>
<p>It’s nothing fancy, and it’s certainly not anything that no one else could have created. But still, it has proven useful over the past few years. I still keep a copy of it pinned to my office wall. It’s pretty self-explanatory. The first sheet has a table of the default publishing permission levels and what fine-grain permissions each of them has. The second sheet is just the descriptions of each of the fine-grain permissions so I didn’t have to go hunting through the UI to find them whenever I was wondering what the differences were. Finally, the third sheet is a list of “securable objects” (which what I decided to call a list/library that had broken away permissions inheritance and was independently secured) and what default groups had what rights to those locations by default. This was particularly important since in general, you want to avoid breaking permissions inheritance if you can, and we wanted to be very deliberate about where we did, and also track them to ensure they made sense over time.</p>
<p>So how exactly do you use this? Well, it can be a handy reference as-is, but chances are that you have your own permissions level or have modified the existing ones to suit your needs, so you can modify this sheet to reflect your own custom permissions and keep track of everything. It really is helpful to have a centralized reference of all of the various permissions levels. If you go through and put in your own levels, you might realize that there’s a lot of needless duplication in the custom permission level you might have created. When it comes to SharePoint permissions, less is better, so this can be a helpful auditing tool as well as a reference.</p>
<p><strong>A couple of disclaimers… </strong>This was created based on the RTM version. As far as I know, nothing has been changed in SP1 or SP2 that would impact it, but I haven’t been checking to keep it up to date. If you do notice errors you can let me know and I’ll try to correct it. Also, this obviously won’t take into account any customizations that you may do that would alter the default permission levels.</p>
<p>If you use this for any of the purposes listed or for additional things, leave a comment! I’d love to hear how it’s working for you and if it’s been helpful. Download it below:</p>
<p><a rel="nofollow">SharePoint Permissions “Cheat Sheet” (XLSX)</a></p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/9Kx92jD14qo" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.tylerbutler.com/2009/05/sharepoint-permissions-cheat-sheet/</feedburner:origLink></item>
      <item>
         <title>Accessibility Insanity</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/5ImPYG7O2Pg/</link>
         <description>Part of my responsibilities for SharePoint these days involves markup cleanliness and accessibility, so over the last couple of years I have educated myself on the ins and outs of these issues, and have managed to learn a lot about browser behavior, the history of markup, etc. I am far from an expert, but I [...]</description>
         <guid isPermaLink="false">http://www.tylerbutler.com/?p=359</guid>
         <pubDate>Sun, 22 Mar 2009 18:32:13 -0700</pubDate>
         <content:encoded><![CDATA[<p>Part of my responsibilities for SharePoint these days involves markup cleanliness and accessibility, so over the last couple of years I have educated myself on the ins and outs of these issues, and have managed to learn a lot about browser behavior, the history of markup, etc. I am far from an expert, but I know a heck of a lot more than I did when I started.</p>
<p>One school of thought I come across quite frequently is that web content whose markup is not well-formed or is missing required attributes or something just fail to render completely, in order to ensure that all content on the web is gorgeous, standards-compliant markup. This ridiculously draconian viewpoint loses sight of the fact that the ultimate goal of delivering content over the web is just that – delivering content. It seems bad form for a browser to just “give up” when markup is badly formed, because the end-goal of the person building the page – and the person consuming it – is to deliver content. Much of this debate has been chronicled by the IE team; they have a tough job – bring the standards compliance of IE into this century without breaking their customers/users pages. Hence compatibility mode, legacy rendering, etc. etc.</p>
<p>In the past, I’ve always heard this argument from the standards-compliance standpoint. For example, if a page claims to be XHTML but isn’t fully compliant, it should fail to render in a browser. No “best-effort” rendering, just fail. This of course ignores the fact that even the W3C <a rel="nofollow" target="_blank" href="http://validator.w3.org/docs/help.html#validandconform">can’t create a parser</a> that can completely validate a page against the spec, but that’s a rant for another time… Assuming the browser can detect that a page is non-compliant, it should just <strong>stop</strong>.</p>
<p>Anyway, this is a long and winding intro to <a rel="nofollow" target="_blank" href="http://diveintomark.org/archives/2009/03/18/if-it-fails-for-some">a post</a> Mark Pilgrim wrote talking about this viewpoint as it applies to accessibility. I had never heard these arguments before, but apparently they’re out there. A choice quote from Mark’s rebuttal (emphasis mine):</p>
<blockquote><p>I think it would be wise for people who truly care about accessibility to take a closer look at the so-called “experts” who are participating on their behalf, and to understand exactly what these people are proposing. <strong>It’s true that some of their proposals have not been adopted, but it’s not because some cartoonishly monocled villain enjoys being mean to them. It’s because the proposals are insane.</strong></p>
</blockquote>
<p>Agreed.</p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/5ImPYG7O2Pg" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.tylerbutler.com/2009/03/accessibility-insanity/</feedburner:origLink></item>
      <item>
         <title>LINQ Confusion</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/6Ie6_uTaidk/</link>
         <description>I find myself using LINQ a lot in my C# code these days. I use collections all over the place, and there&amp;#8217;s no doubt that LINQ makes sorting and slicing collections a lot simpler code-wise.
In my most recent weekend project, I need to randomly sort a list of cards, which are represented by an Action [...]</description>
         <guid isPermaLink="false">http://www.tylerbutler.com/?p=341</guid>
         <pubDate>Sun, 15 Mar 2009 00:47:38 -0700</pubDate>
         <content:encoded><![CDATA[<p>I find myself using LINQ a lot in my C# code these days. I use collections all over the place, and there&#8217;s no doubt that LINQ makes sorting and slicing collections a lot simpler code-wise.</p>
<p>In my most recent weekend project, I need to randomly sort a list of cards, which are represented by an <strong>Action</strong> class. After some quick searching, I found <a rel="nofollow" target="_blank" href="http://www.dailycoding.com/Posts/random_sort_a_list_using_linq.aspx">some articles</a> that indicated the best way to do this would be to sort the list by random GUID. This makes sense, though I certainly wouldn’t have thought of it on my own.</p>
<p>The examples given all worked, but not with my lists… With the following code, the compiler spits out several errors:</p>
<pre>List&lt;Action&gt; cards = new List&lt;Action&gt;();
cards.Add( new OneCattle() );
cards.Sort( a =&gt; Guid.NewGuid() ).ToList&lt;Action&gt;(); Error 1 Delegate 'System.Comparison&lt;agricola.Action&gt;' does not take '1' arguments
Error 2 Cannot convert lambda expression to type 'System.Collections.Generic.IComparer&lt;agricola.Action&gt;' because it is not a delegate type
Error 3 Cannot implicitly convert type 'System.Guid' to 'int'
Error 4 Cannot convert lambda expression to delegate type 'System.Comparison&lt;agricola.Action&gt;' because some of the return types in the block are not implicitly convertible to the delegate return type </pre>
<p>However, using a more explicit LINQ query without a lambda expression seems to work fine:</p>
<pre>var q = from a in cards orderby Guid.NewGuid() select a;
List&lt;Action&gt; r = q.ToList&lt;Action&gt;();</pre>
<p>Anybody know why this is? I haven’t wrapped my head around lambda expressions and the theory behind LINQ to understand what the root cause is…</p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/6Ie6_uTaidk" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.tylerbutler.com/2009/03/linq-confusion/</feedburner:origLink></item>
      <item>
         <title>Site Move and Redesign</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/haw0D7Ho7jQ/</link>
         <description>The server that is currently hosting the SharePoint version of tylerbutler.com is being decommissioned. Unfortunately, I wasn’t given much notice about this so I have not been able to secure an alternative SharePoint-ready location at Microsoft to host the site. In the meantime I’ve used this opportunity to move the site over to WordPress, and [...]</description>
         <guid isPermaLink="false">http://blog.tylerbutler.com/index.php/2009/02/site-move-and-redesign/</guid>
         <pubDate>Wed, 18 Feb 2009 18:06:03 -0800</pubDate>
         <content:encoded><![CDATA[<p>The server that is currently hosting the SharePoint version of tylerbutler.com is being decommissioned. Unfortunately, I wasn’t given much notice about this so I have not been able to secure an alternative SharePoint-ready location at Microsoft to host the site. In the meantime I’ve used this opportunity to move the site over to WordPress, and I’ve refreshed the look and feel. Hopefully this will be temporary, since I intend to rebuild the site on the new version of SharePoint once it’s publicly available. But in the meantime, WordPress is serving my needs.</p>
<p>The main www address should be redirecting to blog.tylerbutler.com as soon as the DNS changes propogate. The main RSS feed should be switched over, but I have not yet moved the others. Regardless, though, you shouldn’t notice any differences since I’m using FeedBurner.</p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/haw0D7Ho7jQ" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.tylerbutler.com/2009/02/site-move-and-redesign/</feedburner:origLink></item>
      <item>
         <title>SharePoint Updates</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/XeQCJGZQDMA/</link>
         <description>We&amp;#8217;ve changed the way we&amp;#8217;re managing and releasing updates here in the SharePoint team. This is all very good news. It makes things more manageable internally for us, which translates into quicker, more effective turnaround on issues, but it also means that updates and patches will be much more predictable, so you can plan around [...]</description>
         <guid isPermaLink="false">http://blog.tylerbutler.com/index.php/2008/10/sharepoint-updates/</guid>
         <pubDate>Wed, 01 Oct 2008 10:10:46 -0700</pubDate>
         <content:encoded><![CDATA[<p>We&#8217;ve changed the way we&#8217;re managing and releasing updates here in the SharePoint team. This is all very good news. It makes things more manageable internally for us, which translates into quicker, more effective turnaround on issues, but it also means that updates and patches will be much more predictable, so you can plan around those dates more effectively. There is still recourse for you if you have an absolutely critical issue that needs to be resolved ASAP.
</p>
<p>More details on this <a rel="nofollow" target="_blank" href="http://blogs.msdn.com/sharepoint/archive/2008/09/29/announcing-august-cumulative-update-for-office-sharepoint-server-2007-and-windows-sharepoint-services-3-0.aspx">SharePoint blog post</a> and <a rel="nofollow" target="_blank" href="http://support.microsoft.com/kb/953878">KB article 953878</a>.</p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/XeQCJGZQDMA" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.tylerbutler.com/2008/10/sharepoint-updates/</feedburner:origLink></item>
      <item>
         <title>But Why? #0: But why, “But Why?”</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/QbXVN_ru1Kw/</link>
         <description>I love hearing stories. When I was growing up I used to love when people would visit and my Dad would tell some of his stories. Even though I had heard most of them a thousand times, it was awesome to sit back and watch other people experience them for the first time. I also [...]</description>
         <guid isPermaLink="false">http://blog.tylerbutler.com/index.php/2008/09/but-why-0-but-why-but-why/</guid>
         <pubDate>Tue, 09 Sep 2008 11:49:00 -0700</pubDate>
         <content:encoded><![CDATA[<p>I love hearing stories. When I was growing up I used to love when people would visit and my Dad would tell some of his stories. Even though I had heard most of them a thousand times, it was awesome to sit back and watch other people experience them for the first time. I also read a lot of stories growing up, and I developed a special love for short stories in particular (I especially like O. Henry).</p>
<p>While I was in college, I discovered a site that I have since lost many hours of my life to - <a rel="nofollow" target="_blank" href="http://www.folklore.org/">folklore.org</a>. It&#8217;s a site put together by <a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Andy_Hertzfeld">Andy Hertzfeld</a> (not to be confused with <a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Don_Hertzfeldt">Don Hertzfeldt</a> of <a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Rejected">Rejected</a> fame), and contains "anecdotes about the development of Apple&#8217;s original Macintosh computer, and the people who created it." It is incredible - it combines my love of stories with a topic I find interesting - the early days of personal computing. Best of all, the stories there are written by the people who experienced it, and often contain a healthy dose of humor and humanity. But behind that, there&#8217;s some cool technical details about the challenges the engineers faced, and why some of the decisions got made the way they did. I find that part of it utterly spellbinding. </p>
<p>I&#8217;ve been on the lookout for other sites like this for other tech companies, like Atari or even Microsoft. The closest I&#8217;ve found for Atari is <a rel="nofollow" target="_blank" href="http://www.dadhacker.com/">DadHacker.com</a>, written by a guy who worked for Atari back in the day. His blog is interesting in a variety of ways, but I particularly like his Atari posts. In fact, his post titled <a rel="nofollow" target="_blank" href="http://www.dadhacker.com/blog/?p=987">Donkey Kong and Me</a> was what got him into my RSS reader permanently. It&#8217;s good - you should read it.</p>
<p>I actually work with a developer who was also on the team that developed <a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Clippy">Clippy</a>, and I&#8217;ve heard some interesting stories for him about what that was like. Maybe I&#8217;ll try to convince him to write up some of his experiences… :-) I am sure there are some more great stories out there… If you know of some sites, please do point me to them.</p>
<p>Because I find this stuff so interesting, I thought it would be good to start chronicling some of the stuff I know about because I&#8217;ve been working on SharePoint. Thus, I plan to write a series titled "But Why?" about various SharePoint features that I either worked on or have been exposed to, and why they behave the way they do. These posts will be one part SharePoint history, one part storytelling, and if I do it right, will pull back the curtain a bit so you can see just why things wound up the way they did.</p>
<p>But first, some disclaimers: These posts are my own thoughts and opinions, and do not reflect those of Microsoft or of anyone else who works/worked on SharePoint. Also, my memory may be fuzzy and blatantly incorrect about some things, so everything should be viewed through that lens. Finally, you shouldn&#8217;t expect these posts to be as interesting as anything you read on folklore.org. :-) </p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/QbXVN_ru1Kw" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.tylerbutler.com/2008/09/but-why-0-but-why-but-why/</feedburner:origLink></item>
      <item>
         <title>Site Downtime</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/IaUaxTLON-Q/</link>
         <description>Another lesson from my travels: if you don&amp;#8217;t pay up your domain name registration before going on a trip, and it happens to expire, your site will become inaccessible. If you tried to visit the site a couple of days ago, you probably hit a brick wall instead. :-) Waiting for me in my inbox [...]</description>
         <guid isPermaLink="false">http://blog.tylerbutler.com/index.php/2007/08/site-downtime/</guid>
         <pubDate>Mon, 20 Aug 2007 19:09:34 -0700</pubDate>
         <content:encoded><![CDATA[<p>Another lesson from my travels: if you don&#8217;t pay up your domain name registration before going on a trip, and it happens to expire, your site <strong><em>will</em></strong> become inaccessible. If you tried to visit the site a couple of days ago, you probably hit a brick wall instead. :-) Waiting for me in my inbox when I returned to Brisbane Sunday afternoon were several emails from <a rel="nofollow" target="_blank" href="http://www.gandi.net">gandi.net</a> reminding me that my registration of tylerbutler.com was due to expire soon, then <strong><em>really</em></strong> soon, then had expired. Thankfully nobody took it from me while it was available. :-) I got it reregistered and things should be back to normal now.
</p>
<p>A quick plug for Gandi - they&#8217;re nearly twice the price of some other registrars, but I stick with them because they have a great interface for editing DNS records, they give you a lot of control over the DNS settings themselves, they can host mail for your domain, etc. Well worth the additional cost as far as I am concerned. Highly recommended.</p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/IaUaxTLON-Q" height="1" width="1"/>]]></content:encoded>
         <category>Projects</category>
      <feedburner:origLink>http://www.tylerbutler.com/2007/08/site-downtime/</feedburner:origLink></item>
      <item>
         <title>Gettin’ Famous</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/LdLM2PhfIsQ/</link>
         <description>George found this article over at SearchVB.com that mentions my MIX &amp;#8216;07 Session. While I am not quoted directly, my name is mentioned, and the content of the session is referenced a bit: At Microsoft&amp;#8217;s MIX07 conference, Tyler Butler, a program manager for Microsoft Office SharePoint Server, pointed out three Web applications built on SharePoint [...]</description>
         <guid isPermaLink="false">http://blog.tylerbutler.com/index.php/2007/06/gettin%e2%80%99-famous/</guid>
         <pubDate>Fri, 01 Jun 2007 17:57:00 -0700</pubDate>
         <content:encoded><![CDATA[<p><a rel="nofollow" target="_blank" href="http://zorba.members.winisp.net/">George</a> found <a rel="nofollow" title="" target="_blank" href="http://searchvb.techtarget.com/originalContent/0,289142,sid8_gci1256720,00.html">this article</a> over at SearchVB.com that mentions my <a rel="nofollow" target="_blank" href="http://sessions.visitmix.com/default.asp?event=1011&amp;session=2012&amp;pid=DEV06&amp;disc=&amp;id=1515&amp;year=2007&amp;search=DEV06">MIX &#8216;07 Session</a>. While I am not quoted directly, my name is mentioned, and the content of the session is referenced a bit: </p>
<blockquote>
<p>At Microsoft&#8217;s MIX07 conference, Tyler Butler, a program manager for Microsoft Office SharePoint Server, pointed out three Web applications built on SharePoint &#8212; Hawaiian Airlines, mobile phone game firm Glu Mobile and music and event firm Hed Kandi Radio. </p>
<p>Butler also indicated that, since the SharePoint 2007 platform is built on ASP.NET 2.0, developers can use ASP.NET AJAX and Silverlight to provide a rich user interface. </p>
</blockquote>
<p>I&#8217;ll try not to let the fame go to my head. :-)</p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/LdLM2PhfIsQ" height="1" width="1"/>]]></content:encoded>
         <category>Work</category>
      <feedburner:origLink>http://www.tylerbutler.com/2007/06/gettin%e2%80%99-famous/</feedburner:origLink></item>
      <item>
         <title>Silverlight Coming to Linux Courtesy Mono</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/LflYg3ANFZM/</link>
         <description>According to an article over at news.com, the Mono project founder says they&amp;#8217;ll be working on a Linux port of Silverlight in the future. Sweet! I was personally annoyed to find out that &amp;#34;cross-platform&amp;#34; only meant Mac and Windows when Silverlight was officially announced. But it&amp;#8217;s nice to see Mono committing to filling the Linux [...]</description>
         <guid isPermaLink="false">http://blog.tylerbutler.com/index.php/2007/05/silverlight-coming-to-linux-courtesy-mono/</guid>
         <pubDate>Thu, 03 May 2007 17:10:15 -0700</pubDate>
         <content:encoded><![CDATA[<p>According to <a rel="nofollow" target="_blank" href="http://news.com.com/8301-10784_3-9714669-7.html">an article over at news.com</a>, the <a rel="nofollow" target="_blank" href="http://www.mono-project.com/Main_Page">Mono project</a> founder says they&#8217;ll be working on a Linux port of Silverlight in the future. Sweet! I was personally annoyed to find out that "cross-platform" only meant Mac and Windows when Silverlight was officially announced. But it&#8217;s nice to see Mono committing to filling the Linux gap. Best of luck to them!</p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/LflYg3ANFZM" height="1" width="1"/>]]></content:encoded>
         <category>Work</category>
      <feedburner:origLink>http://www.tylerbutler.com/2007/05/silverlight-coming-to-linux-courtesy-mono/</feedburner:origLink></item>
      <item>
         <title>Vista Without Vista</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/BhHnzHNpK68/</link>
         <description>Are you not quite ready for Vista? Or are you ready, but your computer&amp;#8217;s not? :-) I&amp;#8217;m sure there&amp;#8217;s a variety of reasons why you won&amp;#8217;t be able or willing to upgrade when Vista becomes widely available later this month. However, just because you&amp;#8217;re still using XP doesn&amp;#8217;t mean you can&amp;#8217;t enhance your computing experience [...]</description>
         <guid isPermaLink="false">http://blog.tylerbutler.com/index.php/2007/01/vista-without-vista/</guid>
         <pubDate>Sun, 28 Jan 2007 11:25:00 -0800</pubDate>
         <content:encoded><![CDATA[<p class="MsoNormal">Are you not quite ready for Vista? Or are <i>you</i> ready, but your computer&#8217;s not? :-) I&#8217;m sure there&#8217;s a variety of reasons why you won&#8217;t be able or willing to upgrade when Vista becomes widely available later this month. However, just because you&#8217;re still using XP doesn&#8217;t mean you can&#8217;t enhance your computing experience with some Vista-like functionality.</p>
<h2>Better Search</h2>
<p class="MsoNormal">Vista&#8217;s Search is integrated throughout the OS, and it&#8217;s so much better than XP&#8217;s search companion that a comparison is insulting. This one&#8217;s a no-brainer to get on XP. If you don&#8217;t already have <a rel="nofollow" target="_blank" href="http://support.microsoft.com/kb/917013"><span>Windows Desktop Search</span></a> or <a rel="nofollow" target="_blank" href="http://desktop.google.com/"><span>Google Desktop</span></a>, download one of them immediately. I prefer WDS 3.0 myself, because it feels a little more integrated into the Windows environment, but they&#8217;ll both do the trick.</p>
<h2>Explorer Breadcrumbs</h2>
<p class="MsoNormal">While I still sometimes miss the "Go up" button when using Vista, the breadcrumb is a much more usable way to get around a folder hierarchy. Pick up <a rel="nofollow" target="_blank" href="http://minimalist.com/"><span>Minimalist</span></a>&#8217;s <a rel="nofollow" target="_blank" href="http://minimalist.com/docs/ExplorerBreadcrumbs/"><span>Explorer Breadcrumbs</span></a>, and you&#8217;ll get something pretty darn close in XP.</p>
<h2>Start Bar Search</h2>
<p class="MsoNormal">In Vista, when you hit the Start button, you can type some text and it&#8217;ll automatically search your applications in the Start menu and match on what you type. So if you type "word" both Microsoft Word and WordPad will pop up. Once you select one, it remembers, so the next time you want to start Word, you can just press the Start button (either using the mouse or the Windows Key on the keyboard, which is faster), type "word" and press enter. Fast.</p>
<p class="MsoNormal">Power users have been doing something similar on XP and Server 2003 using the "Run…" menu for years. <b>Win+R</b> to bring up the menu, then type the cryptic name of the program you want to run, like winword (Word) or mstsc (remote desktop client). This works well, but it requires you to remember the exact executable names for each app. Open source app <a rel="nofollow" target="_blank" href="http://www.launchy.net/"><span>Launchy</span></a> to the rescue! It makes its own index of your start menu, and once you invoke it using a hot key (I use <b>Win+Space</b>), it works pretty much just like Vista. It even indexes your Control Panel items, just like Vista. No more hunting for those hard-to-find items in the control panel!</p>
<h2>Cursors</h2>
<p class="MsoNormal">Vista includes some new cursors. Some people don&#8217;t like them, but I think they look pretty snazzy myself. They&#8217;re available for XP. You can Google for them, or there are some from an old Vista build at <a rel="nofollow" target="_blank" href="http://www.gurudesign.no/downloads/aero_cursors.zip"><span>http://www.gurudesign.no/downloads/aero_cursors.zip</span></a>.</p>
<h2>Windows Media Player<span> </span>11 and Internet Explorer 7</h2>
<p class="MsoNormal">They&#8217;re both available for Windows XP. &#8216;Nuff said.</p>
<h2>Sidebar</h2>
<p class="MsoNormal">I&#8217;m not a big fan of the Vista Sidebar personally, but if you like the concept of having some widgets or gadgets or whatever you want to call them running on your desktop, then you can check out <s>Konfabulator</s> <a rel="nofollow" target="_blank" href="http://widgets.yahoo.com/"><span>Yahoo Widgets</span></a> engine. It&#8217;s not exactly sidebar, but the widgets it can run is very similar to Vista Sidebar gadgets. Apparently the <a rel="nofollow" target="_blank" href="http://desktop.google.com/"><span>Google Desktop</span></a> sidebar also has the capability to run Google gadgets, so that&#8217;s another option.</p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/BhHnzHNpK68" height="1" width="1"/>]]></content:encoded>
         <category>Projects</category>
      <feedburner:origLink>http://www.tylerbutler.com/2007/01/vista-without-vista/</feedburner:origLink></item>
      <item>
         <title>iTunes Tagging</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/pqHfFU8WaBg/</link>
         <description>One of the things that really annoys me about iTunes is the lack of categorical tagging. Actually, I shouldn&amp;#8217;t blame iTunes. I think this is a fundamental limitation in the ID3 tags. What I want is the ability to &amp;#34;tag&amp;#34; music as I listen to it, with terms like &amp;#34;story-song&amp;#34; (songs that tell a story) [...]</description>
         <guid isPermaLink="false">http://blog.tylerbutler.com/index.php/2007/01/itunes-tagging/</guid>
         <pubDate>Mon, 01 Jan 2007 19:30:00 -0800</pubDate>
         <content:encoded><![CDATA[<p>One of the things that really annoys me about iTunes is the lack of categorical tagging. Actually, I shouldn&#8217;t blame iTunes. I think this is a fundamental limitation in the ID3 tags. What I want is the ability to "tag" music as I listen to it, with terms like "story-song" (songs that tell a story) or "ricardo" (songs that my friend Ricardo has introduced me to). Social music sites like <a rel="nofollow" title="" target="_blank" href="http://www.pandora.com/">Pandora</a> and <a rel="nofollow" title="" target="_blank" href="http://www.last.fm/">Last.fm</a> have this concept, as does just about every "Web 2.0" site in the world. Why not my music player?</p>
<p>Initially when I tried to implement this sort of thing I used the "keywords" field. I would just add the tag to that field, then I created Smart Playlists based on that field. <a rel="nofollow" title="" target="_blank" href="http://www.lifehacker.com/software/itunes/tag-your-songs-in-itunes-153970.php">This post at Lifehacker</a> suggests using the "Grouping" field, but the premise is the same.</p>
<p>This approach works fine until you want to edit a bunch of songs and <strong>add </strong>a tag. When you do a bulk edit of the keywords field in iTunes it&#8217;ll overwrite anything that was there previously. So suddenly tagging all that music with "<a rel="nofollow" title="">Sasquatch 2006</a>" removed all the other cool tags you had applied. Major suckage.</p>
<p>Today I decided to try a new approach: I just use dumb, old-fashioned playlists. When I want a new tag, I create a new playlist for it. For organization purposes I keep all tag playlists in a folder called Tags. I can then create additional nested folders for categories, and because of how iTunes handles folders with playlists inside, the folders will become aggregators of all the music in playlists underneath them, which is nifty. This means I can see all of the music I have tagged just by clicking the Tag folder</p>
<p>This approach is pretty simple. Adding a tag is easy, and using the tags to drive smart playlists is easy too. Just add an "If &lt;<strong>Playlist</strong>&gt; &lt;<strong>is/is not</strong>&gt; &lt;<strong>Tag playlist name</strong>&gt;" clause to the Smart Playlist. There is a drawback, though&#8230; <strong>Removing </strong>tags is now a pain. From the frying pan into the fire&#8230; I have to make sure the song doesn&#8217;t appear multiple times in a playlist, and if it does, remove all occurrences. This is because playlists are designed to support multiple occurrences of the same song. If I want to start and end my playlist with <em>My Heart Will Go On</em>, then dang it, I can do it. But for my purposes, it&#8217;s not the ideal behavior.</p>
<p>Anyway, none of this really helps my situation, because the iTunes app <strong>doesn&#8217;t help me</strong> manage my tags, build playlists based on them, or anything, natively. All of this is a hack. There are a lot things that it could do to make it easier to tag music. And with the iTunes music store, what if I could check out how other users were tagging the track, and borrow their tags? This is all stuff that is provided by Last.fm, of course, but Last.fm doesn&#8217;t manage my entire music collection - iTunes does.</p>
<p>And of course <strong>none </strong>of this does anything on my iPod. Heck, <strong>it </strong>can&#8217;t even understand playlist folders, which is super <em>super <strong>super </strong></em>dumb. Actually, I have a lot of gripes about the iPod UI&#8230; maybe a post in <a rel="nofollow" title="">Rants</a> is in order&#8230;</p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/pqHfFU8WaBg" height="1" width="1"/>]]></content:encoded>
         <category>Projects</category>
      <feedburner:origLink>http://www.tylerbutler.com/2007/01/itunes-tagging/</feedburner:origLink></item>
      <item>
         <title>The Zune and Wireless</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/AulLGu0AeQ0/</link>
         <description>A lot of people have made a big deal about the limitations of the Zune wireless functionality since it was released a few weeks ago. While I totally agree that there is a lot of untapped potential with the device currently, there is at least one &amp;#34;obvious&amp;#34; omission that people have pointed out that simply [...]</description>
         <guid isPermaLink="false">http://blog.tylerbutler.com/index.php/2006/12/the-zune-and-wireless/</guid>
         <pubDate>Tue, 19 Dec 2006 18:20:00 -0800</pubDate>
         <content:encoded><![CDATA[<p>A lot of people have made a big deal about the limitations of the <a rel="nofollow" target="_blank" href="http://www.zune.net/">Zune</a> wireless functionality since it was released a few weeks ago. While I totally agree that there is a lot of untapped potential with the device currently, there is at least one "obvious" omission that people have pointed out that simply isn&#8217;t a good idea, to be honest. </p>
<p>I&#8217;m talking about syncing to the device using the wireless. Sounds cool, right? You just walk into your apartment, turn on the Zune, and Boom! All of your music is synchronized to it. But what people don&#8217;t seem to realize is how <span>slow</span> this would be. The maximum bandwidth for USB 2.0 is <a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/USB_2.0#Transfer_speed">480 Mbit/s</a>, or 60 MB/s. 802.11g, on the other hand, has a <a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/802.11g#802.11g">maximum raw data rate of 54 Mbit/s</a>, or about 24.7 Mbit/s net throughput. Now, by applying some simple mathematics:</p>
<p>480 / 24.7 = 19.4332</p>
<p>This means that syncing to your device using wireless would be roughly 20 times slower than using USB 2.0. Even if we assume the theoretical max data rate for 802.11g, which isn&#8217;t realistic, to be clear, you&#8217;re still looking at a transfer speed that&#8217;s ten times slower. And don&#8217;t even <span>think</span> about using 802.11b. Frankly, this doesn&#8217;t sound like a good idea.</p>
<p>"So what?" you say. "I can leave the Zune syncing all night and it&#8217;ll be ready to go in the morning. Speed isn&#8217;t a real issue." OK, fine. You walk into your apartment, you turn on your Zune, and it starts syncing. You go to bed. You wake up the next morning, and your Zune is finished syncing, but it&#8217;s battery has also been drained. Good luck using it on your commute.</p>
<p>So what do you do next time? You plug it in so it can charge while it&#8217;s syncing. But at this point, why not just plug it directly into your computer to sync and charge at the same time, at a much faster rate? So to me, it&#8217;s clear that isn&#8217;t really a desirable feature, and I&#8217;ll bet that some Program Manager on the Zune team came to the same conclusion.</p>
<p>One thing that I will point out, however, is that many times, when you sync, you&#8217;re not syncing that much data. Your library hasn&#8217;t changed that much, and the only thing that&#8217;s being synced is play counts or updated track info or something. In that case, this feature might make sense. The amount of data wouldn’t be large, so the process wouldn&#8217;t take long and the battery drain would be minimal. There might be some scenarios where this feature <span>would</span> be useful. However, I think that a lot of people had a knee-jerk reaction and haven&#8217;t really thought through the ramifications and technical limitations of that feature. But hey, that&#8217;s what we PM&#8217;s get paid for, right? :-)</p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/AulLGu0AeQ0" height="1" width="1"/>]]></content:encoded>
         <category>Projects</category>
      <feedburner:origLink>http://www.tylerbutler.com/2006/12/the-zune-and-wireless/</feedburner:origLink></item>
      <item>
         <title>Patrick Has a Wii, or, Experimenting with Microformats</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/S3xluquxbLM/</link>
         <description>My friend Patrick managed to get his hands on a Wii, and I am a bit jealous, to say the least. My own weekend Wii hunt did not go well, but I plan to persevere and head back out next weekend. Supposedly the Redmond Target is getting a bunch in on December 17th, so I&amp;#8217;ll [...]</description>
         <guid isPermaLink="false">http://blog.tylerbutler.com/index.php/2006/12/patrick-has-a-wii-or-experimenting-with-microformats/</guid>
         <pubDate>Mon, 11 Dec 2006 16:45:00 -0800</pubDate>
         <content:encoded><![CDATA[<p>My friend <span class="vcard"><a rel="nofollow" class="n url" target="_blank" href="http://patrick.wagstrom.net/">Patrick</a></span> managed to <a rel="nofollow" title="" target="_blank" href="http://patrick.wagstrom.net/weblog/wii/wiik-wiith-wii.xml">get his hands on a Wii</a>, and I am a bit jealous, to say the least. My own weekend Wii hunt did not go well, but I plan to persevere and head back out next weekend. <span class="vevent">Supposedly the <span class="location">Redmond <a rel="nofollow" class="url" target="_blank" href="http://www.target.com/">Target</a></span> is getting a bunch in on December 17th , so I&#8217;ll be standing in line if you want to join me.</span></p>

<p>However, this post is <em>really </em>meant to be about <a rel="nofollow" title="" target="_blank" href="http://microformats.org/">Microformats</a>, an interesting little technology that allows you to add a bit more metadata to existing markup, ostensibly to provide a better way to work with that data and leverage it in unique ways. I learned about it at the Gilbane Conference a couple weeks ago, and I wanted to do some checking to make sure you could leverage them on your MOSS site if you wanted. Seems like you can, as this post suggests.</p>
<p>If you view this post in Firefox you&#8217;ll see a little icon next to Patrick&#8217;s picture above. This is done using CSS, but you won&#8217;t see it in IE because <a rel="nofollow" title="" target="_blank" href="http://www.quirksmode.org/css/beforeafter.html">IE doesn&#8217;t support :before and :after</a>. But anyway, this isn&#8217;t all that interesting, because I could already do that using CSS. What <em>is </em>interesting, however, is if you go to <a rel="nofollow" title="" target="_blank" href="http://inside.glnetworks.de/2006/06/05/microformats-have-arrived-in-firefox-15-greasemonkey-06/">http://inside.glnetworks.de/2006/06/05/microformats-have-arrived-in-firefox-15-greasemonkey-06/</a> and download the <a rel="nofollow" title="" target="_blank" href="http://greasemonkey.mozdev.org/">Greasemonkey </a>script there. Then return to this page, and you&#8217;ll see that miraculously the following menu has been added above Patrick&#8217;s name:</p>
<p><img style="border-right:2px solid;border-top:2px solid;border-left:2px solid;border-bottom:2px solid;" border="2"/></p>
<p>Nifty, huh? If you&#8217;re using that same Greasemonkey script you&#8217;ll also notice that the text above about standing in line to get a Wii at Target is an event that you can add to your calendar:</p>
<p><img style="border-right:2px solid;border-top:2px solid;border-left:2px solid;border-bottom:2px solid;" border="2"/></p>
<p>All of the data in the sentence I wrote is wrapped in some appropriate tags that a compatible client reader (Firefox + Greasemonkey script in this case) can parse out and act on. Plus, because it&#8217;s well-known markup, there&#8217;s a nice backwards compatibility story for downlevel clients. For example, looking at this page in IE is pretty boring, but stuff lights up when you use Firefox and the script.</p>
<p>Anyway, this all goes to show that there is a lot of opportunity for Microformats to take off if there&#8217;s better client support. Just consider RSS - now browsers inherently know how to read some markup in the header of the page and automatically detect RSS feeds on a page. It&#8217;s not hard to image a time when Firefox will include the functionality currently offered through the Greasemonkey script natively. Plus there&#8217;s some great tools already out there for dealing with this type of data. Just check out this link to Technorati, which will <a rel="nofollow" title="" target="_blank" href="http://technorati.com/contacts/http://www.tylerbutler.com/geekdom/Pages/PatrickHasaWii,or,ExperimentingwithMicroformats.aspx">automatically parse out the hCards on this page</a> and let you download them as vCards.</p>
<p>I could also write some code that runs on the server and outputs special JavaScript and CSS when Microformats are encountered. Then no client side support would be necesarry. I&#8217;ll be looking into this in the next few weeks. Anyway, I think there&#8217;s a lot of potential to include Microformats in more places on my site, so keep your eyes peeled. :-)</p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/S3xluquxbLM" height="1" width="1"/>]]></content:encoded>
         <category>Projects</category>
      <feedburner:origLink>http://www.tylerbutler.com/2006/12/patrick-has-a-wii-or-experimenting-with-microformats/</feedburner:origLink></item>
      <item>
         <title>Java Memory Allocation</title>
         <link>http://feedproxy.google.com/~r/TylerButlerTechnologyPosts/~3/Bc26mNpuQ48/</link>
         <description>I saw this article linked over at Slashdot today and found it to be a very interesting read. I&amp;#8217;ve had many debates with people that think that byte-compiled languages like Java and C# just have inherent performance problems. Often they&amp;#8217;ll spout off some nonsense about how garbage collection is inefficient or something. [...]</description>
         <guid isPermaLink="false">http://blog.tylerbutler.com/index.php/2005/10/java-memory-allocation/</guid>
         <pubDate>Sun, 09 Oct 2005 18:00:35 -0700</pubDate>
         <content:encoded><![CDATA[<p>I saw this article linked over at Slashdot today and found it to be a very interesting read. I&#8217;ve had many debates with people that think that byte-compiled languages like Java and C# just have inherent performance problems. Often they&#8217;ll spout off some nonsense about how garbage collection is inefficient or something. Sure, <i>sometimes</i> it&#8217;s better to have manual control over your memory allocation/deallocation, but this article makes a surprisingly good case for why the perceived performance hits in dynamic management don&#8217;t even exist. A great read, especially if you don&#8217;t know much about how memory management works in the first place. :-)</p>
<p><a rel="nofollow" target="_blank" href="http://www-128.ibm.com/developerworks/java/library/j-jtp09275.html?ca=dgr-lnxw01JavaUrbanLegends">http://www-128.ibm.com/developerworks/java/library/j-jtp09275.html?ca=dgr-lnxw01JavaUrbanLegends</a></p><img src="http://feeds.feedburner.com/~r/TylerButlerTechnologyPosts/~4/Bc26mNpuQ48" height="1" width="1"/>]]></content:encoded>
         <category>Projects</category>
      <feedburner:origLink>http://www.tylerbutler.com/2005/10/java-memory-allocation/</feedburner:origLink></item>
   </channel>
</rss><!-- fe1.pipes.re3.yahoo.com uncompressed Mon Jul  6 17:21:04 PDT 2009 -->
