<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7250869</id><updated>2012-02-02T07:43:24.238-08:00</updated><category term='feeds'/><category term='podcast'/><category term='meat'/><category term='reghack'/><category term='web'/><category term='one-liner'/><category term='perl'/><category term='lists'/><category term='firefox3'/><category term='input'/><category term='updates'/><category term='msbuild'/><category term='censorship'/><category term='chrome'/><category term='mswin'/><category term='rockbox'/><category term='polyglot'/><category term='f#'/><category term='css'/><category term='powershell'/><category term='fsharp'/><category term='mix08'/><category term='browser'/><category term='spam'/><category term='rss'/><category term='arbitrary'/><category term='sysmanagement'/><category term='androidfail'/><category term='uml'/><category term='dotnet'/><category term='greed'/><category term='hardware'/><category term='linux'/><category term='mix09'/><category term='xslt2'/><category term='badcode'/><category term='css3'/><category term='tfsbuild'/><category term='tsa-bs'/><category term='mythtv'/><category term='copyfight'/><category term='ie8'/><category term='certification'/><category term='android'/><category term='diagram'/><category term='mix07'/><category term='ASPPARSE'/><category term='ie6'/><category term='atom'/><category term='firefox2'/><category term='ie7'/><category term='vote'/><category term='standards'/><category term='vstudio'/><category term='mozilla'/><category term='msfail'/><category term='fail'/><category term='ivorytower'/><category term='datetime'/><category term='meta-list'/><category term='opml'/><title type='text'>Brianary</title><subtitle type='html'>A pedant that hangs out in the dark corner-cases of the web.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default?start-index=101&amp;max-results=100'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>232</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7250869.post-7366509952374461718</id><published>2012-01-24T21:43:00.001-08:00</published><updated>2012-01-24T21:57:08.757-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='androidfail'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Ice Cream Sandwich on the Nexus S Update</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Bluetooth&lt;/strong&gt; eventually crashes in ICS, irredeemably. Only a full reboot will produce sound via Bluetooth after this happens. This makes ICS the ideal platform for spending five minutes trying to get three minutes' worth of content to play.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;The bookmarks widget&lt;/strong&gt;, which displays the browser bookmarks as a scrolling list of icons, its easily the best new widget, making access to frequently visited sites much faster.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Notifications rarely seem to &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;notify&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;!&lt;/span&gt;&lt;br /&gt;Google Voice and Messaging (the texting app), in particular, are terrible about indicating something has happened, but notifications in general don't seem consistent about providing notification sounds or activating the screen.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;No more search provider narrowing!&lt;/span&gt;&lt;br /&gt;In previous Android versions, you could tap the icon to the left of the system search field, and choose which Searchable Items to use: just Applications or Browser or Music or Twitter or whatever, instead of all of them, which is slower and often too crowded to show the item you wanted. This has completely ruined the "command-line" aspect of search for me.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Picasa integration is still completely broken for uploads!&lt;/span&gt;&lt;br /&gt;No albums are listed and trying to upload displays a "Failed to retreive account information" error. There are indications in some forums that this is a result of Picasa trying to use the wrong authentication account, but no adequate fix yet. This also highlights another problem: Who do you call for a fix, or where do you go to even to &lt;span style="font-style: italic;"&gt;report&lt;/span&gt; a problem like this?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;No unhide UI for contact providers.&lt;/span&gt;&lt;br /&gt;When trying to delete contact entries automatically created by the Twitter app for &lt;span style="font-style: italic;"&gt;everyone I follow&lt;/span&gt;, the app informs me that they will only be hidden. After realizing that I can just hide the contacts from that provider, there's no way to restore those "hidden" contacts short of deleting the app's data and starting over.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Much better browser, still no extensions though.&lt;/span&gt;&lt;br /&gt;The stock Android browser seems much better, even though it offers no extensions, and isn't really a full Chrome implementation.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Sharing UI in the Gallery app is better.&lt;/span&gt;&lt;br /&gt;In previous versions of Gallery, the sharing menu was difficult to use once too many apps registered as sharing targets. The new version handles long lists of sharing targets easily, and even offers a very good MRU interface.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;System settings are available from the notification tray.&lt;/span&gt;&lt;br /&gt;This makes turning WiFi off and on, among other things, much easier to do.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;The Market is available in the corner of the app tray.&lt;/span&gt;&lt;br /&gt;This makes getting to the market easier.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Widgets are available as a tab in the app tray.&lt;/span&gt;&lt;br /&gt;This allows you to preview what widgets look like before adding them.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Scrollable widgets are handy, though most that I tried tend to crash.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In general, I'd say the experience was negative, and I'd recommend avoiding this upgrade until some of the problems are addressed.&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-7366509952374461718?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/7366509952374461718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=7366509952374461718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7366509952374461718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7366509952374461718'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2012/01/ice-cream-sandwich-on-nexus-s-update.html' title='Ice Cream Sandwich on the Nexus S Update'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-8309916707046204325</id><published>2012-01-18T08:27:00.000-08:00</published><updated>2012-01-18T08:45:15.061-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='copyfight'/><title type='text'>STOP #SOPA/#PIPA</title><content type='html'>&lt;p&gt;&lt;a href="http://blog.reddit.com/2012/01/technical-examination-of-sopa-and.html"&gt;Learn more&lt;/a&gt;, participate, donate.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://sopastrike.com/"&gt;SOPA STRIKE - Largest online protest in history - January 18 - blackout your site&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://demandprogress.org/"&gt;Demand Progress&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://www.eff.org/"&gt;Electronic Frontier Foundation | Defending your rights in the digital world&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cdt.org/splash"&gt;STOP PIPA/SOPA! &lt;/a&gt;&lt;a href="http://stopcensorship.org/"&gt;— Center For Democracy and Technology&lt;/a&gt;&lt;a href="http://www.cdt.org/splash"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dontcensorthenet.com/"&gt;Don't Censor the Net - Defeat SOPA and PROTECT IP » Stop the PROTECT IP Internet Censorship Bill!&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://voteforthenet.com/"&gt;Vote for the Net&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://stopcensorship.org/"&gt;Stop Censorship — Take Action Before Senate Vote | Demand Progress&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://americancensorship.org/"&gt;Stop American Censorship — a campaign from Fight for the Future&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-8309916707046204325?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/8309916707046204325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=8309916707046204325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8309916707046204325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8309916707046204325'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2012/01/stop-sopa.html' title='STOP #SOPA/#PIPA'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-2542750775667522906</id><published>2012-01-13T09:15:00.001-08:00</published><updated>2012-01-17T08:54:19.698-08:00</updated><title type='text'>Ice Cream Sandwich on Nexus S so far</title><content type='html'>&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Notifications rarely seem to &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;notify&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;!&lt;/span&gt;&lt;br /&gt;Google Voice, in particular, is terrible about indicating something has happened, but notifications in general don't seem consistent about providing notification sounds or activating the screen.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;No more search provider narrowing!&lt;/span&gt;&lt;br /&gt;In previous Android versions, you could tap the icon to the left of the system search field, and choose which Searchable Items to use: just Applications or Browser or Music or Twitter or whatever, instead of all of them, which is slower and often too crowded to show the item you wanted. This has completely ruined the "command-line" aspect of search for me.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Picasa integration is broken for uploads!&lt;/span&gt;&lt;br /&gt;No albums are listed and trying to upload displays a "Failed to retreive account information" error. There are indications in some forums that this is a result of Picasa trying to use the wrong authentication account, but no adequate fix yet. This also highlights another problem: Who do you call for a fix, or where do you go to even to &lt;span style="font-style: italic;"&gt;report&lt;/span&gt; a problem like this?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;No unhide UI for contact providers.&lt;/span&gt;&lt;br /&gt;When trying to delete contact entries automatically created by the Twitter app for &lt;span style="font-style: italic;"&gt;everyone I follow&lt;/span&gt;, the app informs me that they will only be hidden. After realizing that I can just hide the contacts from that provider, there's no way to restore those "hidden" contacts short of deleting the app's data and starting over.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Much better browser, still no extensions though.&lt;/span&gt;&lt;br /&gt;The stock Android browser seems much better, even though it offers no extensions, and isn't really a full Chrome implementation.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Sharing UI in the Gallery app is better.&lt;/span&gt;&lt;br /&gt;In previous versions of Gallery, the sharing menu was difficult to use once too many apps registered as sharing targets. The new version handles long lists of sharing targets easily, and even offers a very good MRU interface.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;System settings are available from the notification tray.&lt;/span&gt;&lt;br /&gt;This makes turning WiFi off and on, among other things, much easier to do.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;The Market is available in the corner of the app tray.&lt;/span&gt;&lt;br /&gt;This makes getting to the market easier.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Widgets are available as a tab in the app tray.&lt;/span&gt;&lt;br /&gt;This allows you to preview what widgets look like before adding them.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Scrollable widgets are handy.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In general, I'd say the experience was negative, and I'd recommend avoiding this upgrade until some of the problems are addressed.&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-2542750775667522906?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/2542750775667522906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=2542750775667522906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2542750775667522906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2542750775667522906'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2012/01/ice-cream-sandwich-on-nexus-s-so-far.html' title='Ice Cream Sandwich on Nexus S so far'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-6370526498093305896</id><published>2012-01-06T13:20:00.000-08:00</published><updated>2012-01-07T14:59:05.372-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='copyfight'/><title type='text'>Some quick thoughts prompted by SOPA/PIPA</title><content type='html'>&lt;div&gt;&lt;p&gt;Neither side has agreed on the first principals, and both are trying to control the framing of the discussion.&lt;/p&gt;&lt;p&gt;For example, starting by dismissing those that do not agree there is a legitimate &amp;#8220;intellectual property&amp;#8221; (artificial scarcity) issue in the first place.&lt;/p&gt;&lt;p&gt;Personally, I don&amp;#8217;t think there&amp;#8217;s any possibility of compromise on the atomic issue of whether to regulate speech. Enforcing personal, not-for-profit copyright infringement will always conflict with freedom of speech. We&amp;#8217;ve seen it in Russia silencing dissidents under the cover of piracy raids, and we&amp;#8217;ve seen enemies and competitors trying to put each other on child porn filter lists for spite or market advantage in Scandinavia, and we&amp;#8217;ve seen it with Universal vs. Megaupload here. Once the infrastructure is built, for whatever noble reasons, it will invariably be abused.&lt;/p&gt;&lt;p&gt;(I come from a time when copyright was a civil matter between companies, and comedians made fun of the FBI warnings at the beginning of video tapes.)&lt;/p&gt;&lt;p&gt;And, really, does a busker chasing down each and every sidewalk pedestrian make sense anyway? Artists will eventually adjust to the fact that they are buskers again. It seems to have worked for Cory Doctorow, Jonathan Coulton, and Louis CK.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-6370526498093305896?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/6370526498093305896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=6370526498093305896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6370526498093305896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6370526498093305896'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2012/01/some-quick-thoughts-prompted-by.html' title='Some quick thoughts prompted by SOPA/PIPA'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-2073559698458499246</id><published>2012-01-05T16:01:00.000-08:00</published><updated>2012-01-10T08:54:08.928-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='powershell'/><title type='text'>PowerShell Wait-DirectoryChange FileSystemWatcher function</title><content type='html'>&lt;p&gt;Here's a handy way to watch for changes in a directory using the &lt;code&gt;FileSystemWatcher&lt;/code&gt; in PowerShell.&lt;/p&gt;&lt;pre&gt;function Wait-DirectoryChange&lt;br /&gt;{&lt;br /&gt;&amp;lt;#&lt;br /&gt;.Synopsis&lt;br /&gt;Listens to the file system change notifications and raises events when a directory, or file in a directory, changes.&lt;br /&gt;.Parameter Directory&lt;br /&gt;The directory to monitor, in standard or Universal Naming Convention (UNC) notation. Default is current directory.&lt;br /&gt;.Parameter ChangeType&lt;br /&gt;The type of change to watch for: Created, Deleted, Changed, Renamed, or All. Default is All.&lt;br /&gt;.Parameter Include&lt;br /&gt;The type of files to watch. For example, "*.txt" watches for changes to all text files. Default is all files.&lt;br /&gt;.Parameter Timeout&lt;br /&gt;The time to wait before timing out. Default is forever.&lt;br /&gt;#&amp;gt;&lt;br /&gt;[CmdletBinding()] Param&lt;br /&gt;(&lt;br /&gt;[string][ValidateScript({Test-Path $_ -PathType Container})] $Directory = $PWD.ProviderPath,&lt;br /&gt;[IO.WatcherChangeTypes] $ChangeType = 'All',&lt;br /&gt;[string] $Include,&lt;br /&gt;[TimeSpan] $Timeout = 0&lt;br /&gt;)&lt;br /&gt;$watcher =&lt;br /&gt; if($Include) { New-Object IO.FileSystemWatcher $Directory,$Include }&lt;br /&gt; else { New-Object IO.FileSystemWatcher $Directory }&lt;br /&gt;if($Timeout.TotalMilliseconds) { $watcher.WaitForChanged( $ChangeType, $Timeout.TotalMilliseconds ) }&lt;br /&gt;else { $watcher.WaitForChanged( $ChangeType ) }&lt;br /&gt;}&lt;br /&gt;nal wdir Wait-DirectoryChange&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-2073559698458499246?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/2073559698458499246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=2073559698458499246' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2073559698458499246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2073559698458499246'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2012/01/powershell-wait-directorychange.html' title='PowerShell Wait-DirectoryChange FileSystemWatcher function'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-8180160255513180575</id><published>2011-06-28T08:08:00.000-07:00</published><updated>2011-07-04T16:57:37.428-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='censorship'/><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><title type='text'>The "Moderated" Response to IEBlog's Anti-Auto-Update Screed</title><content type='html'>&lt;p&gt;I submitted a reply to &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/06/27/a-browser-for-all-windows-customers-it-s-about-and-not-or.aspx?CommentPosted=true#commentmessage"&gt;A Browser for All Windows Customers: it’s about and, not or - IEBlog - Site Home - MSDN Blogs&lt;/a&gt;, but it was "moderated" away. Apparently, Microsoft only approves comments by sycophants and strawmen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Here is the comment, for anyone curious:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;So foot-dragging is a feature?&lt;/p&gt;&lt;p&gt;That just seems like a rationalization for not supporting standards in the coming years (HTML5 inputs, e.g.), and being the holdout on auto-upgrades, the only hope many web developers had of seeing reasonable standards support (as opposed to kludgy workarounds) before the end of their career.&lt;/p&gt;&lt;p&gt;Hopefully Chrome Frame will make some inroads for the sake of developers, upon whose back the "great" IE experience comes. (Can someone from Microsoft supply, from their vast compatibility stats, how many top Internet sites are likely to use hardware rendering vs. how many take date inputs?)&lt;/p&gt;&lt;p&gt;Don't expect a lot of sympathy just because the job is impossibly big. Microsoft used anti-competitive practices to make IE the default browser, and has now found itself in the position of having to support up to FOUR rendering engines per browser per OS per service pack. And it's only going to grow, this thankless position of "infrastructure". More rendering engines will accumulate geometrically year after year (in a product that doesn't even show a profit) until Microsoft just cannot sustain any more and has to make some tough decisions about backward compatibility.&lt;/p&gt;&lt;p&gt;I think the track record shows that this realization often comes quite late in Redmond.&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;ins style="text-decoration:none" datetime="20110704T1700"&gt;&lt;p&gt;&lt;strong&gt;And another "moderated" comment&lt;/strong&gt;, from &lt;a title="Internet Explorer Internals and Developer Information" href="http://blogs.msdn.com/b/ieinternals/archive/2011/06/30/perils-of-user-agent-sniffing-browser-mode-document-mode-compatibility-view.aspx"&gt;The Perils of User-Agent Sniffing, 2011 Edition - EricLaw's IEInternals - Site Home - MSDN Blogs&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;I'm surprised and disappointed that Google is using UA sniffing, but do you really expect all websites to understand the dozens of different combinations of rendering engine modes, browser modes, and document modes, and the endless HTTP extensions (X-XSS-Protection, DNT, X-UA-Compatible, X-Content-Type-Options, X-Frame-Options) required to get IE working?&lt;/p&gt;&lt;p&gt;Can anyone really be blamed for wanting to just walk away from IE, given that we've all just been slapped in the face again with the assertion that the web may only progress in 10-year increments?&lt;/p&gt;&lt;/blockquote&gt;&lt;/ins&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-8180160255513180575?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/8180160255513180575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=8180160255513180575' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8180160255513180575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8180160255513180575'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2011/06/moderated-response-to-ieblogs-anti-auto.html' title='The &quot;Moderated&quot; Response to IEBlog&apos;s Anti-Auto-Update Screed'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-261274417607997989</id><published>2011-05-23T12:06:00.000-07:00</published><updated>2011-06-15T19:49:28.889-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fsharp'/><title type='text'>F# Source that runs interactively or compiles</title><content type='html'>&lt;div&gt;&lt;p&gt;Here's a simple way to create code that you can run with FSI or compile with FSC:&lt;/p&gt;&lt;pre class="prettyprint lang-ml"&gt;#if INTERACTIVE&lt;br /&gt;// any #load, #r, or other fsi directives, e.g.:&lt;br /&gt;#r "System.Configuration.dll"&lt;br /&gt;#else&lt;br /&gt;module &lt;var&gt;ModuleName&lt;/var&gt;&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;// &amp;hellip; code &amp;hellip;&lt;br /&gt;&lt;br /&gt;let main (args:string[]) =&lt;br /&gt;    // &amp;hellip; main body &amp;hellip;&lt;br /&gt;&lt;br /&gt;#if INTERACTIVE&lt;br /&gt;main fsi.CommandLineArgs.[1..]&lt;br /&gt;#else&lt;br /&gt;[&amp;lt;&lt;!----&gt;EntryPoint&lt;!----&gt;&amp;gt;]&lt;br /&gt;let Main args =&lt;br /&gt;    try&lt;br /&gt;        main args ; 0&lt;br /&gt;    with&lt;br /&gt;        | ex -&gt; printfn "%s" (string ex) ; 1&lt;br /&gt;#endif&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Name the file with a &lt;kbd&gt;.fsx&lt;/kbd&gt; extension, then you can compile it normally, or run it as a script with &lt;code&gt;fsi &lt;var&gt;filename&lt;/var&gt;.fsx -- &lt;var&gt;args&lt;/var&gt;&lt;/code&gt;, or &lt;code&gt;#load&lt;/code&gt; it from within FSI!&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-261274417607997989?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/261274417607997989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=261274417607997989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/261274417607997989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/261274417607997989'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2011/05/f-source-that-runs-interactively-or.html' title='F# Source that runs interactively or compiles'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-424815662421036663</id><published>2011-04-07T13:58:00.000-07:00</published><updated>2011-04-19T17:18:13.202-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mswin'/><category scheme='http://www.blogger.com/atom/ns#' term='fsharp'/><title type='text'>An F# mutually-tail-recursive CSV record parser.</title><content type='html'>&lt;p&gt;I've been really enjoying F# lately. Functional, concise, fast, fun. Here's a simple CSV parser. It's meant to be used ad-hoc, rather than some of the more full-featured CSV parsers that require what I'd consider to be an unrealistic level of premeditation to set up the columns and datatypes at design time. This one is a simple sequence of lists of, or mapped headers to, string values.&lt;/p&gt;&lt;pre class="prettyprint lang-fs"&gt;open System&lt;br /&gt;open System.IO&lt;br /&gt;&lt;br /&gt;// An F# mutually-tail-recursive CSV record parser.&lt;br /&gt;// See the spec at http://creativyst.com/Doc/Articles/CSV/CSV01.htm&lt;br /&gt;let rec csvrecord sep (tr:#TextReader) record (line:string) i =&lt;br /&gt;  if i = line.Length then record @ [""]&lt;br /&gt;  else&lt;br /&gt;      match line.[i] with&lt;br /&gt;      | '"' -&amp;gt; csvfield sep tr record "" line (i+1)&lt;br /&gt;      | ' ' | '\t'-&amp;gt; csvrecord sep tr record line (i+1)&lt;br /&gt;      |  c  when c = sep -&amp;gt; csvrecord sep tr (record @ [""]) line (i+1)&lt;br /&gt;      | '=' when line.[i+1] = '"' -&amp;gt; csvfield sep tr record "" line (i+2) // Excel compatibility&lt;br /&gt;      | _ -&amp;gt; // unquoted field data&lt;br /&gt;          let fs = line.IndexOf(sep,i)&lt;br /&gt;          if fs = -1 then record @ [line.Substring(i).TrimEnd()]&lt;br /&gt;          else&lt;br /&gt;              csvrecord sep tr (record @ [line.Substring(i,fs-i).TrimEnd()]) line (fs+1)&lt;br /&gt;and csvfield sep (tr:#TextReader) record field (line:string) i =&lt;br /&gt;  if i = line.Length then csvfield sep tr record (field+"\n") (tr.ReadLine()) 0&lt;br /&gt;  elif line.[i] &amp;lt;&amp;gt; '"' then&lt;br /&gt;      let q = line.IndexOf('"',i)&lt;br /&gt;      if q = -1 then csvfield sep tr record (field+line.Substring(i)+"\n") (tr.ReadLine()) 0&lt;br /&gt;      else csvfield sep tr record (field+line.Substring(i,q-i)) line q&lt;br /&gt;  elif i = line.Length-1 then record @ [field]&lt;br /&gt;  elif line.[i+1] = '"' then csvfield sep tr record (field+"\"") line (i+2)&lt;br /&gt;  elif line.[i+1] = sep then csvrecord sep tr (record @ [field]) line (i+2)&lt;br /&gt;  else // not an escaped quote and not end of field; try to recover by appending trimmed unquoted field data&lt;br /&gt;      let fs = line.IndexOf(sep,i+1)&lt;br /&gt;      if fs = -1 then record @ [field+line.Substring(i).TrimEnd()]&lt;br /&gt;      else csvrecord sep tr (record @ [field+line.Substring(i,fs-i).TrimEnd()]) line (fs+1)&lt;br /&gt;&lt;br /&gt;let csvrows sep (filepath:string) = seq {&lt;br /&gt;  use sr = new StreamReader(filepath)&lt;br /&gt;  while not sr.EndOfStream do&lt;br /&gt;      yield csvrecord sep sr [] (sr.ReadLine()) 0&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;let csvrecords sep (filepath:string) = seq {&lt;br /&gt;  let lists = csvrows sep filepath&lt;br /&gt;  let headers = Seq.head lists&lt;br /&gt;  for vals in (Seq.skip 1 lists) do&lt;br /&gt;      yield List.zip headers vals |&amp;gt; Map.ofList&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-424815662421036663?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/424815662421036663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=424815662421036663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/424815662421036663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/424815662421036663'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2011/04/f-mutually-tail-recursive-csv-record.html' title='An F# mutually-tail-recursive CSV record parser.'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-437790168516468103</id><published>2011-02-16T10:54:00.000-08:00</published><updated>2011-02-16T11:03:20.715-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='polyglot'/><title type='text'>Then What? elif, elsif, elseif, or else if?</title><content type='html'>&lt;div&gt;"Else if" in multiple languages:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;elif&lt;/span&gt; &lt;/b&gt;: Python, bash, and F#&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" &gt;&lt;b&gt;elsif &lt;/b&gt;&lt;/span&gt;: Perl and Ruby &lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" &gt;&lt;b&gt;elseif &lt;/b&gt;&lt;/span&gt;: PHP and PowerShell &lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" &gt;&lt;b&gt;else if&lt;/b&gt;&lt;/span&gt; : C, C++, C#, JavaScript, and just about everything else (if) &lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" &gt;&lt;b&gt;ELSE IF&lt;/b&gt;&lt;/span&gt; : T-SQL (case-insensitive)&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" &gt;&lt;b&gt;ElseIf&lt;/b&gt;&lt;/span&gt; : VB, VBScript, and VB.NET (case-insensitive)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-437790168516468103?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/437790168516468103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=437790168516468103' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/437790168516468103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/437790168516468103'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2011/02/then-what-elif-elsif-elseif-or-else-if.html' title='Then What? elif, elsif, elseif, or else if?'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-8121251714269717158</id><published>2010-12-15T14:27:00.001-08:00</published><updated>2010-12-15T15:28:10.302-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><title type='text'>Conspicuous Features Missing From Google Chrome</title><content type='html'>&lt;p&gt;Things that I miss when I use Google's Chrome browser:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;feed subscription icons (&lt;a href="http://technophilia.madharasan.com/2123/where-is-the-rss-feed-icon-in-firefox-4"&gt;I'll have to turn it on in Firefox 4, apparently&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;feed display (sometimes I just want to download an enclosure, or see what's in a feed)&lt;/li&gt;&lt;li&gt;view selection source&lt;/li&gt;&lt;li&gt;full page info: &lt;img style="width: 280px; height: 335px; vertical-align: top;" src="http://4.bp.blogspot.com/_8mr1RHUNECA/TQlFvwwlw3I/AAAAAAAAMJM/rKHfq60PlVA/s400/ffpginfo.png" title="Firefox Page Info" alt="Firefox Page Info" /&gt; vs. &lt;img style="width: 120px; height: 93px; vertical-align: top;" src="http://3.bp.blogspot.com/_8mr1RHUNECA/TQlF9IafAQI/AAAAAAAAMJU/DKkbSPrXOOM/s400/cpginfo.png" title="Chrome Page Info" alt="Chrome Page Info" /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="about:config"&gt;about:config&lt;/a&gt;&lt;/li&gt;&lt;li&gt;feed-populated &lt;a href="http://www.mozilla.com/en-US/firefox/livebookmarks.html"&gt;live bookmarks&lt;/a&gt;&lt;/li&gt;&lt;li&gt;dynamic &lt;a href="http://lifehacker.com/387944/how-to-make-your-own-smart-bookmarks-in-firefox-3"&gt;smart bookmarks&lt;/a&gt;&lt;/li&gt;&lt;li&gt;bookmarks supporting dynamic &lt;a href="https://wiki.mozilla.org/Microsummaries"&gt;microsummary&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Features_of_Mozilla_Firefox#Live_Titles"&gt;live titles&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;functional &lt;a href="http://www.soylentred.net/projects/make-link"&gt;Make Link&lt;/a&gt; extension (that &lt;span style="font-style: italic;"&gt;copies as HTML&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.downthemall.net/"&gt;Down Them All&lt;/a&gt; extension ("&lt;a href="http://www.downthemall.net/latest/no-google-chrome-support/"&gt;Right now there is no way to port dTa over without losing the majority of functionality.&lt;/a&gt;")&lt;/li&gt;&lt;li&gt;full &lt;a href="http://getfirebug.com/"&gt;Firebug&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Things that I miss when I use Firefox:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;speed!&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Things that I miss when I use Internet Explorer:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;not using Internet Explorer&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-8121251714269717158?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/8121251714269717158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=8121251714269717158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8121251714269717158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8121251714269717158'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2010/12/conspicuous-features-missing-from.html' title='Conspicuous Features Missing From Google Chrome'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_8mr1RHUNECA/TQlFvwwlw3I/AAAAAAAAMJM/rKHfq60PlVA/s72-c/ffpginfo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-3454019831354346268</id><published>2010-12-11T12:33:00.000-08:00</published><updated>2011-01-24T09:46:33.720-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='powershell'/><category scheme='http://www.blogger.com/atom/ns#' term='datetime'/><title type='text'>US Federal Holidays in PowerShell</title><content type='html'>&lt;p&gt;Here's how to determine whether a date is a US federal holiday using PowerShell.&lt;/p&gt;&lt;pre&gt;function Test-USFederalHoliday&lt;br /&gt;{&lt;br /&gt;&lt;#&lt;br /&gt;.Synopsis&lt;br /&gt;Returns the name of the holiday of a date, if it is a U.S. federal holiday.&lt;br /&gt;.Description&lt;br /&gt;The following holidays are checked:&lt;br /&gt;* New Year's Day, January 1 (± 1 day, if observed)&lt;br /&gt;* Martin Luther King, Jr. Day, Third Monday in January&lt;br /&gt;* President's Day, Third Monday in February&lt;br /&gt;* Memorial Day, Last Monday in May&lt;br /&gt;* Independence Day, July 4 (± 1 day, if observed)&lt;br /&gt;* Labor Day, First Monday in September&lt;br /&gt;* Columbus Day, Second Monday in October&lt;br /&gt;* Veteran's Day, November 11 (±1 day, if observed)&lt;br /&gt;* Thanksgiving Day, Fourth Thursday in November&lt;br /&gt;* Christmas Day, December 25 (±1 day, if observed)&lt;br /&gt;#&gt;&lt;br /&gt;[CmdletBinding()]&lt;br /&gt;Param&lt;br /&gt;(&lt;br /&gt;[Parameter(Mandatory=$true)][datetime]$Date,&lt;br /&gt;[Parameter(Mandatory=$false,HelpMessage='Are Saturday holidays observed on Friday?')][switch]$SatToFri,&lt;br /&gt;[Parameter(Mandatory=$false,HelpMessage='Are Sunday holidays observed on Monday?')][switch]$SunToMon&lt;br /&gt;)&lt;br /&gt;$MMdd= '{0:MMdd}' -f $Date&lt;br /&gt;switch($Date.DayOfWeek)&lt;br /&gt;{&lt;br /&gt;'Monday'&lt;br /&gt;{&lt;br /&gt; switch -regex ($MMdd)&lt;br /&gt; {&lt;br /&gt;  '^01(?:1[5-9]|2[01])$' {return 'Martin Luther King, Jr. Day'}&lt;br /&gt;  '^02(?:1[5-9]|2[01])$' {return 'Presidents Day'}&lt;br /&gt;  '^05(?:2[5-9]|3[01])$' {return 'Memorial Day'}&lt;br /&gt;  '^090[1-7]$' {return 'Labor Day'}&lt;br /&gt;  '^10(?:0[89]|1[01-4])$' {return 'Columbus Day'}&lt;br /&gt; }&lt;br /&gt; if($SunToMon)&lt;br /&gt; {&lt;br /&gt;  switch($MMdd)&lt;br /&gt;  {&lt;br /&gt;   '0102' {return 'New Year''s Day (Observed)'}&lt;br /&gt;   '0705' {return 'Independence Day (Observed)'}&lt;br /&gt;   '1112' {return 'Veteran''s Day (Observed)'}&lt;br /&gt;   '1226' {return 'Christmas Day (Observed)'}&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;'Thursday'&lt;br /&gt;{&lt;br /&gt; if($MMdd -match '^112[2-8]$') {return 'Thanksgiving Day'}&lt;br /&gt;}&lt;br /&gt;'Friday'&lt;br /&gt;{&lt;br /&gt; if($SatToFri)&lt;br /&gt; {&lt;br /&gt;  switch($MMdd)&lt;br /&gt;  {&lt;br /&gt;   '1231' {return 'New Year''s Day (Observed)'}&lt;br /&gt;   '0703' {return 'Independence Day (Observed)'}&lt;br /&gt;   '1110' {return 'Veteran''s Day (Observed)'}&lt;br /&gt;   '1224' {return 'Christmas Day (Observed)'}&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;switch($MMdd)&lt;br /&gt;{&lt;br /&gt;'0101' {return 'New Year''s Day'}&lt;br /&gt;'0704' {return 'Independence Day'}&lt;br /&gt;'1111' {return 'Veteran''s Day'}&lt;br /&gt;'1225' {return 'Christmas Day'}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-3454019831354346268?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/3454019831354346268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=3454019831354346268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3454019831354346268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3454019831354346268'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2010/12/us-federal-holidays-in-powershell.html' title='US Federal Holidays in PowerShell'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-4694979136864347646</id><published>2010-12-11T00:55:00.000-08:00</published><updated>2010-12-11T11:59:43.319-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fsharp'/><category scheme='http://www.blogger.com/atom/ns#' term='datetime'/><category scheme='http://www.blogger.com/atom/ns#' term='f#'/><title type='text'>US Federal Holidays in F#</title><content type='html'>&lt;p&gt;Here's how to determine whether a date is a US federal holiday using F#. You probably want to curry the first two boolean parameters with the appropriate settings (some departments observe Sunday holidays on Monday, and some observe Saturday holidays on Friday).&lt;/p&gt;&lt;pre&gt;&lt;span class="Apple-style-span" &gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt; System&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;let&lt;/span&gt;&lt;/b&gt; getHoliday sunToMon satToFri (date&lt;span class="Apple-style-span" &gt;:&lt;/span&gt;DateTime) &lt;span class="Apple-style-span" &gt;=&lt;/span&gt;&lt;br /&gt;   &lt;b&gt;&lt;span class="Apple-style-span" &gt;match&lt;/span&gt;&lt;/b&gt; date.Month, date.Day, (date.Day&lt;span class="Apple-style-span" &gt;-&lt;/span&gt;1)&lt;span class="Apple-style-span" &gt;/&lt;/span&gt;7&lt;span class="Apple-style-span" &gt;+&lt;/span&gt;1, date.DayOfWeek &lt;b&gt;&lt;span class="Apple-style-span" &gt;with&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 1, 1, _, _ &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"New Year's Day"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 1, 2, _, DayOfWeek.Monday &lt;b&gt;&lt;span class="Apple-style-span" &gt;when&lt;/span&gt;&lt;/b&gt; sunToMon &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"New Year's Day (observed)"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 1, _, 3, DayOfWeek.Monday &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"Martin Luther King, Jr. Day"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 2, _, 3, DayOfWeek.Monday &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"Presidents Day"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 5, d, _, DayOfWeek.Monday &lt;b&gt;&lt;span class="Apple-style-span" &gt;when&lt;/span&gt;&lt;/b&gt; d &lt;span class="Apple-style-span" &gt;&gt;=&lt;/span&gt; 25 &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"Memorial Day"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 7, 3, _, DayOfWeek.Friday &lt;b&gt;&lt;span class="Apple-style-span" &gt;when&lt;/span&gt;&lt;/b&gt; satToFri &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"Independence Day (observed)"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 7, 4, _, _ &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"Independence Day"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 7, 5, _, DayOfWeek.Monday &lt;b&gt;&lt;span class="Apple-style-span" &gt;when&lt;/span&gt;&lt;/b&gt; sunToMon &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"Independence Day (observed)"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 9, _, 1, DayOfWeek.Monday &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"Labor Day"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 10, _, 2, DayOfWeek.Monday &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"Columbus Day"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 11, 10, _, DayOfWeek.Friday &lt;b&gt;&lt;span class="Apple-style-span" &gt;when&lt;/span&gt;&lt;/b&gt; satToFri &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"Veterans Day (observed)"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 11, 11, _, _ &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"Veterans Day"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 11, 12, _, DayOfWeek.Monday &lt;b&gt;&lt;span class="Apple-style-span" &gt;when&lt;/span&gt;&lt;/b&gt; sunToMon &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"Veterans Day (observed)"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 11, _, 4, DayOfWeek.Thursday &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"Thanksgiving Day"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 12, 24, _, DayOfWeek.Friday &lt;span class="Apple-style-span" &gt;&lt;b&gt;when&lt;/b&gt;&lt;/span&gt; satToFri &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; "&lt;span class="Apple-style-span" &gt;Christmas Day (observed)"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 12, 25, _, _ &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"Christmas Day"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 12, 26, _, DayOfWeek.Monday &lt;span class="Apple-style-span" &gt;&lt;b&gt;when&lt;/b&gt;&lt;/span&gt; sunToMon &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"Christmas Day (observed)"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; 12, 31, _, DayOfWeek.Friday &lt;b&gt;&lt;span class="Apple-style-span" &gt;when&lt;/span&gt;&lt;/b&gt; satToFri &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;"New Year's Day (observed)"&lt;/span&gt;&lt;br /&gt;   &lt;span class="Apple-style-span" &gt;|&lt;/span&gt; _ &lt;span class="Apple-style-span" &gt;-&gt;&lt;/span&gt; &lt;span class="Apple-style-span" &gt;&lt;b&gt;null&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;You can really see the power of active pattern matching for the Memorial Day case.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-4694979136864347646?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/4694979136864347646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=4694979136864347646' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4694979136864347646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4694979136864347646'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2010/12/us-federal-holidays-in-f.html' title='US Federal Holidays in F#'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-8740994509785094881</id><published>2010-11-22T10:57:00.000-08:00</published><updated>2010-11-22T11:01:00.815-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='dotnet'/><title type='text'>No NTFS Compression in .NET?</title><content type='html'>There is no class in the .NET SDK to use (de)compress files using NTFS! Apparently, people just &lt;a href="http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/1b63b4a4-b197-4286-8f3f-af2498e3afe5"&gt;use interop&lt;/a&gt;, which seems like way too much overhead to me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-8740994509785094881?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/8740994509785094881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=8740994509785094881' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8740994509785094881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8740994509785094881'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2010/11/no-ntfs-compression-in-net.html' title='No NTFS Compression in .NET?'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-1042174400046448818</id><published>2010-11-18T09:17:00.000-08:00</published><updated>2010-11-18T09:22:10.091-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><title type='text'>PowerShell Parameter Defaults in Get-Help -full</title><content type='html'>&lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/library/dd819489.aspx"&gt;"Default values do not appear in the parameter attribute table, even when they are defined in the function or script."&lt;/a&gt;&lt;/p&gt;&lt;p&gt;WTF? Then &lt;em&gt;why is it even there‽&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-1042174400046448818?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/1042174400046448818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=1042174400046448818' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1042174400046448818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1042174400046448818'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2010/11/powershell-parameter-defaults-in-get.html' title='PowerShell Parameter Defaults in Get-Help -full'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-8496628131308333869</id><published>2010-11-09T07:53:00.000-08:00</published><updated>2010-11-09T08:55:34.136-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='xslt2'/><category scheme='http://www.blogger.com/atom/ns#' term='dotnet'/><title type='text'>Where is the .NET support for XSLT 2.0?</title><content type='html'>&lt;ol&gt;&lt;li value="2004"&gt;&lt;a href="http://blogs.msdn.com/b/dareobasanjo/archive/2004/05/13/131166.aspx"&gt;Why You Won't See XSLT 2.0 or XPath 2.0 in the Next Version of the .NET Framework - Dare Obasanjo's WebLog - Site Home - MSDN Blogs&lt;/a&gt;&lt;/li&gt;&lt;li value="2004"&gt;&lt;a href="http://blogs.msdn.com/b/mfussell/archive/2004/05/13/130969.aspx"&gt;XSLT 2.0 Sir? - Mark Fussell's WebLog - Site Home - MSDN Blogs&lt;/a&gt;&lt;/li&gt;&lt;li value="2005"&gt;&lt;a href="http://blogs.msdn.com/b/xmlteam/archive/2005/06/07/426511.aspx"&gt;XSLT planning - Microsoft XML Team's WebLog - Site Home - MSDN Blogs&lt;/a&gt;&lt;/li&gt;&lt;li value="2005"&gt;&lt;a href="http://donxml.com/allthingstechie/archive/2005/12/12/2338.aspx"&gt;DonXml's All Things Techie : XSLT 2.0, Microsoft, and the future of System.Xml&lt;/a&gt;&lt;/li&gt;&lt;li value="2006"&gt;&lt;a href="http://www.tkachenko.com/blog/archives/000590.html#comment-15921"&gt;XSLT2/XPath2/XQuery1 fresh CRs - Signs on the Sand&lt;/a&gt; (comment)&lt;/li&gt;&lt;li value="2007"&gt;&lt;a href="http://www.w3.org/TR/2007/REC-xslt20-20070123/"&gt;XSL Transformations (XSLT) Version 2.0&lt;/a&gt;&lt;/li&gt;&lt;li value="2007"&gt;&lt;a href="http://blogs.msdn.com/b/xmlteam/archive/2007/11/16/chris-lovett-interview.aspx"&gt;Chris Lovett Interview - Microsoft XML Team's WebLog - Site Home - MSDN Blogs&lt;/a&gt;&lt;/li&gt;&lt;li value="2007"&gt;&lt;a href="http://web.archive.org/web/20070204030249/http://blogs.msdn.com/xmlteam/archive/2007/01/29/xslt-2-0.aspx"&gt;Microsoft XML Team's WebLog : XSLT 2.0 [archived]&lt;/a&gt; &lt;em&gt;Removed from &lt;a href="http://blogs.msdn.com/b/xmlteam/default.aspx?PageIndex=3"&gt;blogs.msdn.com&lt;/a&gt;! Quietly shoved down the memory hole?&lt;/em&gt;&lt;/li&gt;&lt;li value="2007"&gt;&lt;a href="http://www.oreillynet.com/xml/blog/2007/10/its_october_2007_do_you_know_w.html"&gt;It's October, 2007: Do You Know Where Your Microsoft XSLT 2.0 CTP Release Is? - O'Reilly XML Blog&lt;/a&gt;&lt;/li&gt;&lt;li value="2007"&gt;&lt;a href="http://dev.ektron.com/blogs.aspx?id=9244"&gt;Ektron's Developer Group Blog: Does Ektron support XSLT 2.0?&lt;/a&gt;&lt;/li&gt;&lt;li value="2008"&gt;&lt;a href="http://brianary.blogspot.com/2008/04/dear-microsoft-we-need-xslt-20.html"&gt;Brianary: Dear Microsoft, We Need XSLT 2.0&lt;/a&gt;&lt;/li&gt;&lt;li value="2009"&gt;&lt;a href="http://stackoverflow.com/questions/831300/what-is-the-current-state-of-xslt-2-0-availability-within-net"&gt;What is the current state of XSLT 2.0 availability within .NET - Stack Overflow&lt;/a&gt;&lt;/li&gt;&lt;li value="2009"&gt;&lt;a href="http://stackoverflow.com/questions/1525299/xpath-and-xslt-2-0-for-net"&gt;XPath and XSLT 2.0 for .NET? - Stack Overflow&lt;/a&gt;&lt;/li&gt;&lt;li value="2010"&gt;&lt;em&gt;&lt;a href="http://instantcrickets.com/"&gt;[crickets]&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;&lt;li value="2010"&gt;&lt;a href="http://techflash.com/seattle/2010/11/ballmer-selling-up-to-18-of-his.html"&gt;Microsoft CEO Ballmer to sell up to $2B in stock, 18% of stake&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-8496628131308333869?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/8496628131308333869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=8496628131308333869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8496628131308333869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8496628131308333869'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2010/11/where-is-net-support-for-xslt-20.html' title='Where is the .NET support for XSLT 2.0?'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-4120397562847443411</id><published>2010-10-31T14:52:00.000-07:00</published><updated>2010-11-18T21:57:50.456-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='copyfight'/><title type='text'>Copyfight: Maria Cantwell's response to my concerns</title><content type='html'>&lt;p&gt;Earlier this year, I sent my concerns about &lt;a href="http://en.wikipedia.org/wiki/Anti-Counterfeiting_Trade_Agreement"&gt;ACTA&lt;/a&gt; (and the general scorched-earth approach to copyright that puts the rights of Lady Gaga and the Transformers above consumer protections and even basic human rights) to some politicians. The feedback went something like this:&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;I'll be as brief as I can:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Please, NO damage awards based on decades-old, half-remembered, vastly inflated, and entirely unscientific extrapolation of a rough estimate of copyright losses due to fake tractor parts. That's where they currently come from. Seriously. &lt;a href="http://en.wikipedia.org/wiki/Anti-Counterfeiting_Trade_Agreement"&gt;Look it up.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Please, NO enforcement that accepts &lt;a href="http://www.boingboing.net/2009/09/04/british-musicians---.html"&gt;accusation&lt;/a&gt; as conviction. In this country we are presumed innocent.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Please, NO enforcement that restricts or constrains Internet access. The Internet is where we work, and play, and socialize, and seek medical advice and employment, and have political discussions, and provide feedback to elected officials. &lt;ins datetime="20101031T1530"&gt;[&lt;a href="http://arstechnica.com/tech-policy/news/2010/10/french-three-strikes-agency-getting-25k-complaints-a-day.ars"&gt;France passed a "three-strikes" law, and is getting 25,000 accusations a day.&lt;/a&gt;]&lt;/ins&gt; &lt;ins datetime="20101118T2200"&gt;[&lt;a title="desc" href="http://boingboing.net/2010/09/30/only-17-of-sites-blo.html"&gt;Only 1.7% of sites blocked by Scandinavia's "child-porn" filters are actually child porn - Boing Boing&lt;/a&gt;]&lt;/ins&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Please, do not sacrifice free speech for corporate profits and &lt;a href="http://www.thepublicdomain.org/2009/06/18/obama-in-cyberspace/"&gt;Hollywood campaign donations&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Please, NO mandates for ISPs to snoop on their customers. That is an end-run around the Fourth Amendment. &lt;ins datetime="20101031T1530"&gt;[&lt;a href="http://www.freedom-to-tinker.com/blog/wseltzer/copyright-censorship-and-domain-name-blacklists-home-us"&gt;In Russia, this has been a convenient way to silence dissidents.&lt;/a&gt;]&lt;/ins&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Please, protect fair use and punish &lt;a href="http://www.eff.org/deeplinks/2009/04/warner-music-targeting-more-youtube"&gt;blanket takedown notices&lt;/a&gt; and other &lt;a href="http://www.eff.org/takedowns"&gt;baseless legal bullying&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Please, ensure that groups purporting to collect royalties for artists are actually &lt;a href="http://www.toomuchjoy.com/?p=1397"&gt;paying the artists&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Please, ensure that &lt;a href="http://www.boingboing.net/2010/06/22/us-ip-czars-report-s.html"&gt;companies externalizing the cost of enforcement of their copyrights to the government&lt;/a&gt; are actually &lt;a href="http://www.boingboing.net/2010/04/23/microsoft-wins-its-1.html"&gt;paying their taxes&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Please, stop &lt;a href="http://arstechnica.com/tech-policy/news/2010/08/obama-administration-piracy-is-flat-unadulterated-theft.ars"&gt;referring to unauthorized copying as theft&lt;/a&gt; (theft deprives the original owner of something), or piracy (piracy is a very real life-threatening issue that should not be trivialized).&lt;/li&gt;&lt;li&gt;Please, NO more &lt;a href="http://www.michaelgeist.ca/content/view/4741/125/"&gt;pressuring other countries&lt;/a&gt; to accept our laws on their soil.&lt;/li&gt;&lt;li&gt;Please, NO more &lt;a href="http://arstechnica.com/tech-policy/news/2010/05/week-in-tech-blame-canada-again.ars"&gt;demonizing Canada&lt;/a&gt; for specious copyright transgressions.&lt;/li&gt;&lt;li&gt;Please, accept that &lt;a href="http://craphound.com/msftdrm.txt"&gt;DRM is never going to work technically&lt;/a&gt;, and only serves to frustrate legal purchasers of content.&lt;/li&gt;&lt;li&gt;Please, stop &lt;a href="http://www.techdirt.com/articles/20080718/1226541724.shtml"&gt;bundling music and movies with pharmaceuticals&lt;/a&gt;. Using fear about counterfeit drugs is a cheap tactic.&lt;/li&gt;&lt;li&gt;Please, consult with Cory Doctorow &lt;a href="http://craphound.com/"&gt;http://craphound.com/&lt;/a&gt; , the EFF &lt;a href="http://www.eff.org/"&gt;http://www.eff.org/&lt;/a&gt; , and the CDT &lt;a href="http://www.cdt.org/"&gt;http://www.cdt.org/&lt;/a&gt; .&lt;/li&gt;&lt;/ul&gt;Personally, I'd like to see us return to a pre-&lt;a href="http://en.wikipedia.org/wiki/Dmca"&gt;DMCA&lt;/a&gt; world where copyright was a civil matter. Sadly, I've scaled back my hopes significantly, and I now just don't want you to destroy freedom to protect a specific business model.&lt;p&gt;Thank you for your time.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;What I got back from Maria Cantwell in July was very disappointing.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Dear Mr. Lalonde,&lt;/p&gt;&lt;p&gt;Thank you for contacting me regarding the Anti-Counterfeiting Trade Agreement (ACTA) negotiations.  I appreciate hearing from you on this matter and sincerely regret the delayed response. &lt;/p&gt;&lt;p&gt;As you may know, the ACTA negotiations began in June 2008 with the participation of Australia, Canada, the European Union and its 27 member states, Japan, Mexico, Morcocco, New Zealand, Republic of Korea, Singapore, Switzerland, and the United States. The negotiations, which  are scheduled to conclude in 2010, have the goal of providing an international framework to improve enforcement of intellectual property right (IPR) law.&lt;/p&gt;&lt;p&gt;The ACTA initiative aims to create improved, international standards to fight the growing problem of counterfeiting and piracy. The effort is not intended to interfere with the fundamental rights and civil liberties of ordinary citizens, and will be consistent with the WTO Agreement on Trade-Related Aspects of Intellectual Property Rights (TRIPS Agreement) and the Declaration on TRIPS and Public Health. &lt;/p&gt;&lt;p&gt;I am aware of your concerns about the transparency of the ACTA negotiations. However, it is an accepted practice during trade negotiations not to disclose negotiating texts to the public thus enabling officials to engage in the frank exchanges necessary for agreement on complex issues. &lt;/p&gt;&lt;p&gt;You will be pleased to know that the USTR has taken steps to ensure an unprecedented level of transparency in the ACTA negotiations, and won endorsement of the importance of meaningful public input at the second level of negotiations in November 2009. Additionally, on April 21, 2010, the USTR released a public, pre-decisional draft text of the ACTA. It is available for your reference through the USTR website at http://www.ustr.gov/acta.&lt;/p&gt;&lt;p&gt;Thank you again for contacting me to share your thoughts on this matter.  You may also be interested in signing up for periodic updates for Washington State residents. If you are interested in subscribing to this update, please visit my website at http://cantwell.senate.gov. Please do not hesitate to contact me in the future if I can be of further assistance.&lt;/p&gt;&lt;p&gt;Sincerely,&lt;br /&gt;Maria Cantwell&lt;br /&gt;United States Senator&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;I've replied, but don't expect to hear back.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;I have to say that I'm am deeply disappointed.&lt;/p&gt;&lt;p&gt;By bringing up public health, it seems clear that you are among those trying to conflate physical counterfeiting with unauthorized digital copying. "Consistency" is also an obvious ploy to slowly ratchet up onerous copyright law by getting excessive laws passed in "sympathetic" regimes then demanding them here.&lt;/p&gt;&lt;p&gt;And far from ensuring unprecedented levels of transparency, it is clear that the USTR is doing everything in his power to keep these negotiations, and the current treaty itself, secret. This is well documented.&lt;br /&gt;&lt;a href="http://boingboing.net/2010/02/25/acta-leak-now-we-kno.html"&gt;http://boingboing.net/2010/02/25/acta-leak-now-we-kno.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;As I rejected it when Vice President Cheney attempted to claim that secrecy was necessary to have "frank discussions" in his energy policy discussions, I reject it here. Anything that can't be said in public is shady when developing policy in a democracy.&lt;/p&gt;&lt;p&gt;The text of ACTA has once again leaked, and once again, it is clear that its supporters (yourself included, apparently) will not rest until all of our Internet traffic is monitored (allegedly for "infringing content"), our laptops and iPods are searched at the border, and entire families are collectively punished (counter to Genevea Convention "consistency") based on specious accusations of media companies.&lt;br /&gt;&lt;a href="http://www.boingboing.net/2010/07/14/acta-leaks----again.html"&gt;http://www.boingboing.net/2010/07/14/acta-leaks----again.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Please tell me you have the integrity to dismiss the made-up losses media companies are constantly parroting, to allow us to create without the constant fear of corporate legal threat, and to protect our right to speak and assemble digitally for the future.&lt;br /&gt;&lt;a href="http://www.fsf.org/campaigns/acta/acta-declaration/"&gt;http://www.fsf.org/campaigns/acta/acta-declaration/&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Perhaps not surprisingly, &lt;a href="http://maplight.org/us-congress/legislator/544-maria-cantwell/individuals"&gt;Senator Cantwell's second-highest contributor is Microsoft&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-4120397562847443411?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/4120397562847443411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=4120397562847443411' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4120397562847443411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4120397562847443411'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2010/10/copyfight-maria-cantwells-response-to.html' title='Copyfight: Maria Cantwell&apos;s response to my concerns'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-1371986430324045412</id><published>2010-10-24T09:53:00.000-07:00</published><updated>2010-10-25T10:15:44.797-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='input'/><title type='text'>Mini Review: Swype and SlideIt Android sliding keyboards</title><content type='html'>&lt;p&gt;Sliding keyboards work amazingly well. Given a moderately practiced user typing English text and reasonably fast hardware, I suspect that a "typing" speed could be achieved that would be nearly competitive with a full-sized mechanical keyboard.&lt;/p&gt;&lt;p&gt;Android provides at least two sliding keyboards so far, and here are their relative strengths and weaknesses.&lt;/p&gt;&lt;h2&gt;SlideIt&lt;/h2&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Fastest for raw text, though this difference may only be noticeable on lower-end hardware.&lt;/li&gt;&lt;li&gt;Supports custom macros, called "shortcuts" that allow for arbitrary letter combinations to expand to any arbitrary text.&lt;/li&gt;&lt;li&gt;Does not require swiping over the apostrophe for contractions.&lt;/li&gt;&lt;li&gt;Switching to the symbols keyboard then sometimes requires scrolling through rows of symbols, and automatically switches back to the regular keyboard after typing each symbol (which can be frustrating when typing pairs of parentheses or brackets), unless "pinned", which requires an additional keystroke.&lt;/li&gt;&lt;li&gt;Symbols and accented letter keys are visible and can be found easily (if not quickly) when scrolling through keyboard.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Has built-in voice input support. This is mostly for Android 1.x devices that do not already have this support.&lt;/li&gt;&lt;li&gt;Has built-in Graffiti (Palm-style block-letter recognition) support.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Limited paged-horizontal display of alternative word matches.&lt;/li&gt;&lt;li&gt;Irritatingly disables the shift key after the first letter of a word is typed.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;More than twenty languages supported.&lt;/li&gt;&lt;li&gt;Always includes a return key.&lt;/li&gt;&lt;li&gt;Unique keys: ¬ …&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Swype&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Larger keys.&lt;/li&gt;&lt;li&gt;Much faster support for capitalization by swiping a letter up above the keyboard, then to the next letter. This makes typing "I" in particular a much faster upward flick than the more cumbersome [Shift], [i].&lt;/li&gt;&lt;li&gt;Much faster support for symbols (by long-pressing a letter for common symbols, or switching to the symbols keyboard for a more comprehensive selection).&lt;/li&gt;&lt;li&gt;Extended symbols and accented characters are not visible until long-long-pressing a key (in either symbol or regular keyboard mode). Location of symbols can be difficult to find and remember until the mnemonically understood.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Numeric keyboard.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Limited paged-vertical display of alternative word matches.&lt;/li&gt;&lt;li&gt;Contractions require swiping the apostrophe.&lt;/li&gt;&lt;li&gt;Swiping period/exclamation/question to space quickly ends a sentence.&lt;/li&gt;&lt;li&gt;Variable speed-vs.-accuracy slider setting.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Extra &lt;a href="http://www.wambooli.com/blog/?p=2262"&gt;hidden keyboard&lt;/a&gt; for powerful cursor, selection, and clipboard control.&lt;/li&gt;&lt;li&gt;Three languages supported (English, French, Spanish).&lt;/li&gt;&lt;li&gt;Return key is often irritatingly replaced with "Done" key.&lt;/li&gt;&lt;li&gt;Unique keys: ¿ ¡ „ ð · þ ¶ ª æ œ ß&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-1371986430324045412?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/1371986430324045412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=1371986430324045412' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1371986430324045412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1371986430324045412'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2010/10/mini-review-swype-and-slideit-android.html' title='Mini Review: Swype and SlideIt Android sliding keyboards'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-5791932229331212050</id><published>2010-09-15T09:18:00.000-07:00</published><updated>2010-09-22T08:22:39.684-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='copyfight'/><title type='text'>The New Caste System</title><content type='html'>&lt;p&gt;Welcome to the new caste system. You are either a Creator (noble) or a Consumer (pleb/serf).&lt;/p&gt;&lt;p&gt;Plebs don't get to own anything, like the music, movies, books, or &lt;a href="http://www.eff.org/deeplinks/2010/09/magic-words-trump-user-rights-ninth-circuit-ruling"&gt;software&lt;/a&gt; they buy; they may only &lt;i&gt;license&lt;/i&gt; what they purchase. &lt;a href="http://consumerist.com/2010/09/the-george-lucas-death-star-tries-to-obliterate-my-startup.html"&gt;No one without an existing defensive copyright/patent portfolio will be able to become a Creator&lt;/a&gt;, &lt;a href="http://binarybonsai.com/2010/09/18/george-lucas-stole-chewbacca-but-its-okay/"&gt;since "creation" is only achieved by transforming or combining existing ideas&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Slowly, the scope will creep as you are required to pay a periodic license fee for the &lt;a href="http://www.critiquethis.us/2009/07/31/%C2%A9-architecture-copyright-infringement/"&gt;architecture&lt;/a&gt; you live in, the design of the &lt;a href="http://www.iptrademarkattorney.com/2008/06/los-angeles-copyright-attorney-furniture-copyright-infringement-bed-chest-corzine.html"&gt;furniture&lt;/a&gt; you use, the &lt;a href="http://www.copyright.gov/docs/regstat072706.html"&gt;clothing&lt;/a&gt; and &lt;a href="http://yro.slashdot.org/story/10/09/09/2248221/Swedish-Police-Shoe-Database-May-Tread-On-Copyright?from=rss&amp;amp;utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+Slashdot/slashdotYourRightsOnline+(Slashdot:+Your+Rights+Online)"&gt;shoes&lt;/a&gt; you wear, &amp;amp;c.&lt;/p&gt;&lt;p&gt;Punishment for unauthorized copying/use ("piracy") will just get more draconian, initially as &lt;a href="http://www.boingboing.net/2010/09/15/uk-government-hands.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+boingboing/iBag+(Boing+Boing)&amp;amp;utm_content=Google+Reader"&gt;entire households are excommunicated from the Internet for unsubstantiated accusation&lt;/a&gt; by the corporate scanbots, but ultimately as &lt;a href="http://www.eff.org/deeplinks/2010/09/jack-booted-thugs-and-copyright-enforcement"&gt;"intellectual" "property" (imaginary property) enforcement provides an excuse for capricious, arbitrary, and unlimited affronts to legal rights of protestors and dissidents&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;So, anyway, happy Wednesday.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-5791932229331212050?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/5791932229331212050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=5791932229331212050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/5791932229331212050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/5791932229331212050'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2010/09/new-caste-system.html' title='The New Caste System'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-1080175946453676952</id><published>2010-04-06T08:19:00.000-07:00</published><updated>2010-04-06T14:42:00.550-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='ie6'/><title type='text'>Quixotic IE6 Workarounds</title><content type='html'>&lt;p&gt;Microsoft has renewed support for IE6 until 2014.&lt;/p&gt;&lt;p&gt;&lt;em&gt;If this bothers you, be sure to remember this the next time you are preparing to give Microsoft money!&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To celebrate this spineless irresponsibility, here are some coping strategies:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://deng.com.br/"&gt;DENG&lt;/a&gt;, perhaps the first such major attempt to work around IE6, is a Flash-based standards-capable browser. Sadly, it appears to have been abandoned years ago.&lt;/li&gt;&lt;li&gt;&lt;a href="http://dean.edwards.name/IE7/"&gt;Dean Edwards' IE7&lt;/a&gt; is a JavaScript library to fix CSS rendering in IE6.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.onderhond.com/tools/ie6fixer/"&gt;IE6 CSS Fixer&lt;/a&gt; is an online tool that uses a list of known tricks to update CSS with IE6 hacks and workarounds.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.pushuptheweb.com/"&gt;Push Up the Web&lt;/a&gt; has a subtle upgrade link script for users of outdated browsers, including IE6.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ie6update.com/"&gt;IE6 Update&lt;/a&gt; is a warning to encourage IE6 users to upgrade that looks like the IE infobar.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ie6nomore.com/code-samples.html"&gt;IE6 No More&lt;/a&gt; is a bigger warning to encourage IE6 users to upgrade.&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/sevenup/"&gt;sevenup&lt;/a&gt; and &lt;a href="http://code.google.com/p/ie6-upgrade-warning/"&gt;ie6-upgrade-warning&lt;/a&gt; are large, attractive warning messages to encourage IE6 users to upgrade or install another browser.&lt;/li&gt;&lt;li&gt;There are several WordPress plugins and techniques to discourage IE6: &lt;a href="http://www.incerteza.org/blog/projetos/shockingly-big-ie6-warning/"&gt;Shockingly Big IE6 Warning&lt;/a&gt;, &lt;a href="http://www.nathanrice.net/blog/serve-ie6-visitors-the-default-wordpress-theme/"&gt;Serve IE6 Visitors the Default WordPress Theme&lt;/a&gt;, &lt;a href="http://aboutenjay.com/2009/09/released-ie6-no-more-wordpress-plugin/"&gt;IE6 No More&lt;/a&gt;, &lt;a href="http://vasthtml.com/js/wordpress-block-ie6-plugin/"&gt;Block IE6&lt;/a&gt;, &lt;a href="http://www.bendishler.com/2009/10/anti-ie6-wordpress-plugin/"&gt;Anti IE6&lt;/a&gt;, &lt;a href="http://www.wprecipes.com/how-to-kill-ie6-on-your-wordpress-blog"&gt;Kill IE6&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/chromeframe"&gt;Google Chrome Frame&lt;/a&gt; hosts Google's Chrome browser within IE6 as a plugin that installs with a minimum of effort.&lt;/li&gt;&lt;li&gt;&lt;a href="http://edskes.net/edskesmf/"&gt;Edskes Software Silent Setup for Mozilla Firefox&lt;/a&gt; is a minimal-friction installer for Firefox.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;It must be said, however, that if IE6 is a small (single digit percentage) of your web traffic, you probably needn't to spend as much extra time on it as you have in the past. Most things will still work well enough if you build for progressive enhancement/graceful degredation anyway, even though sites may not look quite as beautiful in IE6 without massively increasing your development time to implement various workarounds.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-1080175946453676952?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/1080175946453676952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=1080175946453676952' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1080175946453676952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1080175946453676952'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2010/04/quixotic-ie6-workarounds.html' title='Quixotic IE6 Workarounds'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-580091922217393564</id><published>2010-02-24T20:47:00.000-08:00</published><updated>2010-12-05T14:03:23.132-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='ie6'/><title type='text'>Is the end of IE6 finally in sight?</title><content type='html'>&lt;div style="border: 1px dashed rgb(102, 102, 51); padding: 1em; background: none repeat scroll 0% 0% rgb(204, 221, 204);"&gt;&lt;ins datetime="2010-12-05T13:59:00"&gt;&lt;a title="desc" href="http://mondaybynoon.com/internet-explorer-contract-addendum/"&gt;Internet Explorer Contract Addendum - Monday By Noon&lt;/a&gt;&lt;/ins&gt; • &lt;ins datetime="2010-12-05T14:02:00"&gt;&lt;a title="desc" href="http://webmasters.stackexchange.com/questions/134/should-i-bother-supporting-ie6"&gt;Should I bother supporting IE6? - Pro Webmasters - Stack Exchange&lt;/a&gt;&lt;/ins&gt; • &lt;ins datetime="2010-12-05T13:33:00"&gt;&lt;a href="http://browsesad.com/"&gt;Browse Sad&lt;/a&gt;&lt;/ins&gt; • &lt;a href="http://ripie6.com/"&gt;RIPIE6.com&lt;/a&gt; • &lt;a href="http://www.ie6nomore.com/"&gt;IE6 No More&lt;/a&gt; • &lt;a href="http://www.bringdownie6.com/"&gt;Bring Down IE 6&lt;/a&gt; • &lt;a href="http://www.explorerdestroyer.com/"&gt;Explorer Destroyer&lt;/a&gt; • &lt;a href="http://www.idontsupportie6.com/"&gt;I Don't Support IE6&lt;/a&gt; • &lt;a href="http://idroppedie6.com/"&gt;I dropped Internet Explorer 6&lt;/a&gt; • &lt;a href="http://www.stopie.com/"&gt;StopIE&lt;/a&gt; • &lt;a href="http://stopie.wordpress.com/"&gt;Stop Internet Explorer&lt;/a&gt; • &lt;a href="http://www.saveie6.com/"&gt;SaveIE6 ;)&lt;/a&gt; • &lt;a href="http://www.8164.org/dear-ie6/"&gt;Dear IE6&lt;/a&gt; • &lt;a href="http://ie6ify.com/"&gt;IE6ify Bookmarklet&lt;/a&gt; • &lt;a href="http://www.iesucks.info/"&gt;IE sucks&lt;/a&gt; • &lt;a href="http://whyiesucks.blogspot.com/"&gt;Why IE Sucks&lt;/a&gt; • &lt;a href="http://enoughie6.com/en/"&gt;Enough IE6&lt;/a&gt; • &lt;a href="http://isie6dead.com/"&gt;Is Internet Explorer 6 Dead?&lt;/a&gt; • &lt;a href="http://www.doihaveie6.com/"&gt;Do I have IE6?&lt;/a&gt; • &lt;a href="http://www.ie6-must-die.com/"&gt;IE6 MUST DIE&lt;/a&gt; • &lt;a href="http://deathtoie6.com/"&gt;Death To IE6&lt;/a&gt; • &lt;a href="http://iedeathmarch.org/"&gt;IE Death March&lt;/a&gt; • &lt;a href="http://hey-it.com/"&gt;HEY-IT - We want to get rid of IE6!&lt;/a&gt; • &lt;a href="http://www.positioniseverything.net/explorer.html"&gt;Explorer Exposed!&lt;/a&gt; • &lt;a href="http://twibbon.com/join/ie6-must-die"&gt;IE6 Must Die - Support now! - Twibbon.com&lt;/a&gt; • &lt;a href="http://www.phaseoutie6.com/"&gt;Phase Out IE6&lt;/a&gt; • &lt;a href="http://ie6update.com/"&gt;IE6 Update&lt;/a&gt; • &lt;a href="http://dearie6.com/"&gt;DearIE6 - So Long&lt;/a&gt; • &lt;a href="http://www.goodbyeie6.com/"&gt;GOODBYE IE6... I hate you!&lt;/a&gt; • &lt;a href="http://ie6redirection.com/"&gt;IE6 Redirection Script&lt;/a&gt; • &lt;a href="http://css-tricks.com/ie-6-blocker-script/"&gt;IE 6 Blocker Script | CSS-Tricks&lt;/a&gt; • &lt;a title="This countdown seems a bit… off." href="http://www.ie6death.com/"&gt;IE6 Countdown to Death&lt;/a&gt; • &lt;a href="http://www.w3junkies.com/toocool/index.php?language=en"&gt;Too Cool for Internet Explorer&lt;/a&gt; • &lt;a href="http://updateyourbrowser.net/en/"&gt;Update Your Browser&lt;/a&gt; • &lt;a href="http://browser-update.org/"&gt;Browser-Update.org&lt;/a&gt; • &lt;a href="http://www.browserupgrade.info/"&gt;Browser Upgrade Information&lt;/a&gt; • &lt;a href="http://www.pushuptheweb.com/"&gt;Pushuptheweb.com&lt;/a&gt; • &lt;a href="http://www.killbillsbrowser.com/"&gt;Kill Bill's Browser - Switch to Firefox&lt;/a&gt; • &lt;a href="http://browsehappy.com/"&gt;Browse Happy&lt;/a&gt; • &lt;a href="http://abetterbrowser.org/"&gt;It's Time to Choose A Better Browser&lt;/a&gt; • &lt;a href="http://www.alternativebrowseralliance.com/"&gt;Alternative Browser Alliance&lt;/a&gt; • &lt;a href="http://www.crashie.com/"&gt;Crash IE&lt;/a&gt; • &lt;a href="http://www.ieupdate.nl/"&gt;IEUpdate.nl&lt;/a&gt; • &lt;a href="http://drop-ie6.dk/"&gt;drop-ie6.dk — Sig farvel til Internet Explorer 6&lt;/a&gt; • &lt;a href="http://ie6.pl/"&gt;ie6 - aktualizuj już teraz!&lt;/a&gt; • &lt;a href="http://ie6funeral.com/"&gt;IE6 Funeral&lt;/a&gt; • &lt;del datetime="2010-12-05T13:53:00"&gt;&lt;a href="http://kill-ie6.info/"&gt;KILL IE 6&lt;/a&gt;&lt;/del&gt; • &lt;del datetime="2010-12-05T13:52:00"&gt;&lt;a href="http://noie6.org/"&gt;NoIE6&lt;/a&gt;&lt;/del&gt; • &lt;del datetime="2010-12-05T13:50:00"&gt;&lt;a href="http://ie6.forteller.net/"&gt;IE6: Do NOT want!&lt;/a&gt;&lt;/del&gt; • &lt;del datetime="2010-12-05T13:47:00"&gt;&lt;a href="http://www.thebestwaytosupportie6.com/"&gt;The best way to support IE6?&lt;/a&gt;&lt;/del&gt; • &lt;del datetime="2010-12-05T13:46:00"&gt;&lt;a href="http://www.amiusingie6.com/"&gt;Am I using IE6?&lt;/a&gt;&lt;/del&gt; • &lt;del datetime="2010-12-05T13:42:00"&gt;&lt;a href="http://www.end6.org/"&gt;End 6!&lt;/a&gt;&lt;/del&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt; • &lt;del datetime="2010-12-05T13:41:00"&gt;&lt;a href="http://stopie6.com/"&gt;StopIE6.com&lt;/a&gt;&lt;/del&gt; • &lt;del&gt;&lt;a href="http://ie6offenders.com/"&gt;IE6Offenders&lt;/a&gt;&lt;/del&gt; • &lt;del datetime="2010-12-05T13:35:00"&gt;&lt;ins datetime="2010-03-24T08:22:00"&gt;&lt;a href="http://www.ie6shame.com/"&gt;The IE6 List&lt;/a&gt;&lt;/ins&gt;&lt;/del&gt; • &lt;del datetime="2010-12-05T13:37:00"&gt;&lt;a href="http://www.stoplivinginthepast.com/"&gt;Stop Living in the Past! Upgrade IE6&lt;/a&gt;&lt;/del&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://support.microsoft.com/gp/lifesupsps/#Internet_Explorer"&gt;Word on the street is that July 13, 2010 is the official end of life for IE6.&lt;/a&gt; &lt;a href="http://blogs.msdn.com/ie/archive/2009/08/10/engineering-pov-ie6.aspx"&gt;Maybe it'll get extended&lt;/a&gt;, but &lt;a href="http://about.digg.com/blog/much-ado-about-ie6"&gt;Digg has already dropped support&lt;/a&gt;, &lt;a href="http://www.pcworld.com/article/188190/google_to_end_support_for_ie6.html"&gt;Google Sites and Docs will on March 1, 2010&lt;/a&gt;, &lt;a href="http://arstechnica.com/microsoft/news/2010/02/youtube-to-kill-ie6-support-on-march-13.ars"&gt;Google has announced YouTube will drop support March 13, 2010&lt;/a&gt;, and &lt;a href="http://arstechnica.com/microsoft/news/2010/01/microsoft-wants-you-to-ditch-windows-xp-and-ie6-for-security.ars"&gt;Microsoft has been encouraging users to upgrade&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;There have been &lt;a href="http://www.cnn.com/2009/TECH/08/06/internet.explorer.six/"&gt;efforts toward&lt;/a&gt;, and &lt;a href="http://www.webstandards.org/2006/07/26/ie6-the-end-is-hopefully-near/"&gt;hopes&lt;/a&gt; and &lt;a href="http://www.tvidesign.co.uk/blog/2009-the-year-we-drop-ie6.aspx"&gt;predictions&lt;/a&gt; of IE6's death in the past, and maybe &lt;a href="http://itexpertvoice.com/ad/why-you-cant-pry-ie6-out-of-their-cold-dead-hands/"&gt;some (primarily corporate) users&lt;/a&gt; may &lt;a href="http://blogs.msdn.com/ieinternals/archive/2009/07/12/Retiring-IE6.aspx"&gt;continue to use it anyway&lt;/a&gt;. However, Google provides huge momentum, and &lt;a href="http://blogs.zdnet.com/hardware/?p=7480"&gt;news coverage&lt;/a&gt;, &lt;a href="http://www.smashingmagazine.com/2010/02/11/the-life-times-and-death-of-internet-explorer-6-comic-strip/"&gt;discussion&lt;/a&gt;, &lt;a href="http://www.thinkgeek.com/clearance/on-sale/cc3e/"&gt;angry T-shirts&lt;/a&gt;, and &lt;a href="http://www.chigarden.com/2007/10/tutorial-making-the-ie-voodoo-doll/"&gt;voodoo dolls&lt;/a&gt; are going to make justification of coasting along on IE6 much harder from now on. &lt;a href="http://www.wired.com/epicenter/2009/02/norwegian-websi/"&gt;Norway has been in the fight for a while&lt;/a&gt;, there's &lt;a href="http://petitions.number10.gov.uk/ie6upgrade/"&gt;a petition to pull IE6 from the UK government&lt;/a&gt;, and even the hubris of &lt;a href="http://ie6funeral.com/"&gt;a funeral for IE6&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;It just seems like the time is right to &lt;a href="http://robertnyman.com/2009/02/09/stop-developing-for-internet-explorer-6/"&gt;spend less time&lt;/a&gt; on &lt;a href="http://www.onderhond.com/tools/ie6fixer/"&gt;crazy&lt;/a&gt;, &lt;a href="http://dean.edwards.name/IE7/"&gt;quixotic&lt;/a&gt; &lt;a href="http://code.google.com/chrome/chromeframe/"&gt;fixes&lt;/a&gt;, and invest some time (at least for a while) &lt;a href="http://www.incerteza.org/blog/projetos/shockingly-big-ie6-warning/"&gt;helping&lt;/a&gt; &lt;a href="http://shapeshed.github.com/ie6-notice/"&gt;educate&lt;/a&gt; or &lt;a href="http://simplebits.com/notebook/2009/02/13/iegone/"&gt;encourage&lt;/a&gt; &lt;a href="http://code.google.com/p/ie6-upgrade-warning/"&gt;users&lt;/a&gt; to make a better &lt;a href="http://www.hanselman.com/blog/IE6WarningStopLivingInThePastGetOffOfIE6.aspx?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+ScottHanselman+%28Scott+Hanselman+-+ComputerZen.com%29&amp;amp;utm_content=Google+Reader"&gt;browser&lt;/a&gt; &lt;a href="http://www.shlomifish.org/no-ie/"&gt;decision&lt;/a&gt;.&lt;/p&gt;&lt;div&gt;&lt;a href="http://www.flickr.com/photos/robotjohnny/3629069606/sizes/l/#cc_license"&gt;&lt;img style="cursor: pointer; width: 400px; height: 280px;" src="http://4.bp.blogspot.com/_8mr1RHUNECA/S4X8PkTe8lI/AAAAAAAAGb8/SEg47tf1Lj0/s400/3629069606_3d1a1cd8fb.jpg" alt="" id="BLOGGER_PHOTO_ID_5442033069120746066" border="0" /&gt;&lt;/a&gt;&lt;div&gt;&lt;small&gt;&lt;a href="http://creativecommons.org/licenses/by-nd/2.0/" title="Click this link to find out details of the Creative Commons license associated with this image."&gt;&lt;img src="http://creativecommons.org/images/public/somerights20.gif" alt="There is a Creative Commons license attached to this image." style="border: medium none;" height="31" width="88" /&gt;&lt;/a&gt; &lt;a title="Flickr is almost certainly the best online photo management and sharing application in the world. Show off your favorite photos and videos to the world, securely and privately show content to your friends and family, or blog the photos and videos you take with a cameraphone." href="http://www.flickr.com/photos/robotjohnny/"&gt;Flickr: John Martz's Photostream&lt;/a&gt;&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-580091922217393564?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/580091922217393564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=580091922217393564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/580091922217393564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/580091922217393564'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2010/02/is-end-of-ie6-finally-in-sight.html' title='Is the end of IE6 finally in sight?'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_8mr1RHUNECA/S4X8PkTe8lI/AAAAAAAAGb8/SEg47tf1Lj0/s72-c/3629069606_3d1a1cd8fb.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-370567265938017610</id><published>2010-02-01T13:02:00.000-08:00</published><updated>2011-04-08T10:39:21.327-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='ivorytower'/><title type='text'>Converting between XDocument and XmlDocument, XElement and XmlElement</title><content type='html'>&lt;p&gt;Here's a class to provide extension methods for conversion between System.Xml and System.Xml.Linq classes:&lt;/p&gt;&lt;pre class="prettyprint"&gt;using System.Xml;&lt;br /&gt;using System.Xml.Linq;&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Provides extension methods for simple conversion between System.Xml and System.Xml.Linq classes.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public static class XmlLinqConversionExtensions&lt;br /&gt;{&lt;br /&gt;  /// &amp;lt;summary&amp;gt;&lt;br /&gt;  /// Converts an XDocument to an XmlDocument.&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  /// &amp;lt;param name="xdoc"&amp;gt;The XDocument to convert.&amp;lt;/param&amp;gt;&lt;br /&gt;  /// &amp;lt;returns&amp;gt;The equivalent XmlDocument.&amp;lt;/returns&amp;gt;&lt;br /&gt;  public static XmlDocument ToXmlDocument(this XDocument xdoc)&lt;br /&gt;  {&lt;br /&gt;    var xmldoc = new XmlDocument();&lt;br /&gt;    xmldoc.Load(xdoc.CreateReader());&lt;br /&gt;    return xmldoc;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  /// &amp;lt;summary&amp;gt;&lt;br /&gt;  /// Converts an XmlDocument to an XDocument.&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  /// &amp;lt;param name="xmldoc"&amp;gt;The XmlDocument to convert.&amp;lt;/param&amp;gt;&lt;br /&gt;  /// &amp;lt;returns&amp;gt;The equivalent XDocument.&amp;lt;/returns&amp;gt;&lt;br /&gt;  public static XDocument ToXDocument(this XmlDocument xmldoc)&lt;br /&gt;  {&lt;br /&gt;    return XDocument.Load(xmldoc.CreateNavigator().ReadSubtree());&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  /// &amp;lt;summary&amp;gt;&lt;br /&gt;  /// Converts an XElement to an XmlElement.&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  /// &amp;lt;param name="xelement"&amp;gt;The XElement to convert.&amp;lt;/param&amp;gt;&lt;br /&gt;  /// &amp;lt;returns&amp;gt;The equivalent XmlElement.&amp;lt;/returns&amp;gt;&lt;br /&gt;  public static XmlElement ToXmlElement(this XElement xelement)&lt;br /&gt;  {&lt;br /&gt;    return new XmlDocument().ReadNode(xelement.CreateReader()) as XmlElement;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  /// &amp;lt;summary&amp;gt;&lt;br /&gt;  /// Converts an XmlElement to an XElement.&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  /// &amp;lt;param name="xmlelement"&amp;gt;The XmlElement to convert.&amp;lt;/param&amp;gt;&lt;br /&gt;  /// &amp;lt;returns&amp;gt;The equivalent XElement.&amp;lt;/returns&amp;gt;&lt;br /&gt;  public static XElement ToXElement(this XmlElement xmlelement)&lt;br /&gt;  {&lt;br /&gt;    return XElement.Load(xmlelement.CreateNavigator().ReadSubtree());&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-370567265938017610?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/370567265938017610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=370567265938017610' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/370567265938017610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/370567265938017610'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2010/02/converting-between-xdocument-and.html' title='Converting between XDocument and XmlDocument, XElement and XmlElement'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-2135742297787248074</id><published>2009-11-17T16:03:00.000-08:00</published><updated>2009-11-18T11:17:17.231-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='one-liner'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>What's in your (Windows) path?</title><content type='html'>&lt;p&gt;&lt;code&gt;perl -le "@x=split/;/,$ENV{PATHEXT};for(split/;/,$ENV{PATH}){print;next unless chdir$_;print qq'\t'.join(qq'\n\t',map{&amp;lt;*$_&amp;gt;}@x)}"&lt;/code&gt;&lt;/p&gt;&lt;p&gt;This one-liner will list all executables currently in your path, so you can decide if maybe you want to trim that path a bit, maybe by transferring a few things to &lt;a href="http://technet.microsoft.com/en-us/library/bb490894.aspx"&gt;doskey macros&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If you add doskey macros, be sure to add a new string value to &lt;code&gt;HKEY_CURRENT_USER\Software\Microsoft\Command Processor&lt;/code&gt; called &lt;kbd&gt;Autorun&lt;/kbd&gt; with the data &lt;kbd&gt;C:\WINDOWS\system32\doskey.exe /macrofile=&lt;var&gt;macrofile&lt;/var&gt;&lt;/kbd&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-2135742297787248074?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/2135742297787248074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=2135742297787248074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2135742297787248074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2135742297787248074'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/11/whats-in-your-path.html' title='What&apos;s in your (Windows) path?'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-4321571669935261921</id><published>2009-11-11T21:05:00.000-08:00</published><updated>2009-11-11T21:08:26.288-08:00</updated><title type='text'>Netflix Vista Media Center Plugin: working again</title><content type='html'>(yay)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-4321571669935261921?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/4321571669935261921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=4321571669935261921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4321571669935261921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4321571669935261921'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/11/netflix-vista-media-center-plugin_11.html' title='Netflix Vista Media Center Plugin: working again'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-5806379904514648369</id><published>2009-11-06T23:19:00.000-08:00</published><updated>2009-11-06T23:30:23.453-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><title type='text'>Netflix Vista Media Center Plugin Broken. Again.</title><content type='html'>&lt;p&gt;I wonder if the plugin now only supports the brand-new Windows 7, or if this is just buggy, buggy code. Was this broken by one of the near-daily patches Vista has been insisting on lately? Should I start second-guessing Microsoft patches, in case they &lt;em&gt;downgrade&lt;/em&gt; functionality, similar to the way iTunes does?&lt;/p&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8mr1RHUNECA/SvUf_V57XOI/AAAAAAAAGQQ/uW0sjo9GvxQ/s1600-h/netflix-vmc-plugin-broken-again.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 227px;" src="http://4.bp.blogspot.com/_8mr1RHUNECA/SvUf_V57XOI/AAAAAAAAGQQ/uW0sjo9GvxQ/s400/netflix-vmc-plugin-broken-again.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5401258501173107938" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Without Netflix in VMC, I have to decide whether to go back to Mythbuntu (auto commercial skip and better music playlists) or not. It's a shame after all those reinstalls it took to get the 'mature' Vista OS working. But then again, it'd be nice to be able to print again&amp;mdash;my print server, which works fine under Linux, is no longer supported under Vista, so I'm supposed to replace it, even though it works fine. Not to mention that not one of my dozen or so gaming controllers works under Vista (or 7, for that matter).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-5806379904514648369?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/5806379904514648369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=5806379904514648369' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/5806379904514648369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/5806379904514648369'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/11/netflix-vista-media-center-plugin.html' title='Netflix Vista Media Center Plugin Broken. Again.'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_8mr1RHUNECA/SvUf_V57XOI/AAAAAAAAGQQ/uW0sjo9GvxQ/s72-c/netflix-vmc-plugin-broken-again.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-7294441712665691654</id><published>2009-09-10T22:02:00.000-07:00</published><updated>2009-09-22T07:39:33.819-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='copyfight'/><title type='text'>My current media center</title><content type='html'>&lt;p&gt;So I have been forced, against my will, to install Windows on my television PC in order to see the Netflix online content I pay for.&lt;/p&gt;&lt;p&gt;I've fought countless Windows bluescreens in the process of setting this up (more on those in a later post), been frustrated by Windows Update failing and leaving my system in an un-update-able state, and been puzzled by Windows' consistent inability to recognize my network devices on any home computer I've set up in the last decade (I always end up booting into Linux to get the network drivers to spoon-feed to Windows). I even found out that switching the Media Center theme to "high visibility" irrevocably breaks the "Internet TV beta".&lt;/p&gt;&lt;p&gt;I have, however, come up with a decent list of software if you must put Windows on your TV:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Windows Media Center (it probably came with your Windows edition)&lt;/li&gt;&lt;li&gt;the Netflix plugin for WMC (the logo should be in WMC already, and will link to the download site)&lt;/li&gt;&lt;li&gt;&lt;a href="http://boxee.tv/"&gt;Boxee alpha&lt;/a&gt;, a neat open-source media center with scores of plug-ins full of content (it's cross-platform if you don't have to use Windows)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.hulu.com/labs/hulu-desktop"&gt;hulu Desktop&lt;/a&gt;, another media center, just for hulu content (hulu hates Boxee for some reason, and must not have signed a multi-million dollar deal to become a Microsoft parner to show up in Media Center by default)&lt;/li&gt;&lt;li&gt;&lt;a href="http://steampowered.com/"&gt;Steam&lt;/a&gt;, the iTunes of computer games&lt;/li&gt;&lt;li&gt;&lt;a href="http://earth.google.com/"&gt;Google Earth&lt;/a&gt; just looks very cool on a big TV&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-7294441712665691654?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/7294441712665691654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=7294441712665691654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7294441712665691654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7294441712665691654'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/09/my-current-media-center.html' title='My current media center'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-9162481823451398806</id><published>2009-08-18T10:26:00.000-07:00</published><updated>2009-09-22T07:40:27.199-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><title type='text'>Highlighting Text or Fields in Windows</title><content type='html'>How does Windows &lt;strong&gt;&lt;em&gt;always&lt;/em&gt;&lt;/strong&gt; incorrectly guess whether I want a field (such as a browser address bar) fully selected when I click it? It must use a similar algorithm to how it incorrectly judges when to suddenly highlight entire words when that is not my intention.&lt;br /&gt;&lt;br /&gt;This is what I get for not using the keyboard exclusively, I guess.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-9162481823451398806?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/9162481823451398806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=9162481823451398806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/9162481823451398806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/9162481823451398806'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/08/highlighting-text-or-fields-in-windows.html' title='Highlighting Text or Fields in Windows'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-6994263030136258781</id><published>2009-08-11T08:20:00.000-07:00</published><updated>2009-08-11T11:16:36.061-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ie8'/><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><title type='text'>Why are people still using IE6?</title><content type='html'>Dean Hachamovitch has an article, &lt;a href="http://blogs.msdn.com/ie/archive/2009/08/10/engineering-pov-ie6.aspx"&gt;IEBlog : Engineering POV: IE6&lt;/a&gt;, on the IEBlog, about IE6's continued use. Basically, many IE6 users think it works fine for them, and don't see a reason to upgrade (note to malware authors: these people and IT departments should be easy exploits for some time yet).&lt;br /&gt;&lt;br /&gt;Yes, keep "users in control of their PCs" (I assume this means Microsoft will allow me to uninstall their DRM layer in Windows 7?).&lt;br /&gt;&lt;br /&gt;This does not mean people should have the expectation that the entire Internet should support Netscape 1.0, Lynx, WebTV 1.0, or MSIE 6. The Internet evolves (as do the security threats). If users want a static environment, they should go pick up a CD-ROM encyclopedia from 1992.&lt;br /&gt;&lt;br /&gt;Sure, if a company wants to cater to the IE6 audience, they should spend the time, but I'd bet that someone unwilling or unable to upgrade to a secure web browser isn't as likely to be profitable enough to justify all of the extra work that requires.&lt;br /&gt;&lt;br /&gt;I do have to observe that since Microsoft has lived by inertia, the reason IE usage grew for so long, and the reason Windows has utterly dominated for so many years, that it's refreshing to see them cursed by inertia, having to support Windows XP and IE6 for years to come.&lt;br /&gt;&lt;br /&gt;Microsoft won't be able to kill XP/IE6 any more than the financial industry has been able to completely kill COBOL.&lt;br /&gt;&lt;br /&gt;  &lt;!--[if lt IE 7]&gt;  &lt;div style='border: 1px solid #F7941D; background: #FEEFDA; text-align: center; clear: both; height: 75px; position: relative;'&gt;    &lt;div style='position: absolute; right: 3px; top: 3px; font-family: courier new; font-weight: bold;'&gt;&lt;a href='#' onclick='javascript:this.parentNode.parentNode.style.display="none"; return false;'&gt;&lt;img src='http://www.ie6nomore.com/files/theme/ie6nomore-cornerx.jpg' style='border: none;' alt='Close this notice'/&gt;&lt;/a&gt;&lt;/div&gt;    &lt;div style='width: 640px; margin: 0 auto; text-align: left; padding: 0; overflow: hidden; color: black;'&gt;      &lt;div style='width: 75px; float: left;'&gt;&lt;img src='http://www.ie6nomore.com/files/theme/ie6nomore-warning.jpg' alt='Warning!'/&gt;&lt;/div&gt;      &lt;div style='width: 275px; float: left; font-family: Arial, sans-serif;'&gt;        &lt;div style='font-size: 14px; font-weight: bold; margin-top: 12px;'&gt;You are using an outdated browser&lt;/div&gt;        &lt;div style='font-size: 12px; margin-top: 6px; line-height: 12px;'&gt;For a better experience using this site, please upgrade to a modern web browser.&lt;/div&gt;      &lt;/div&gt;      &lt;div style='width: 75px; float: left;'&gt;&lt;a href='http://www.firefox.com' target='_blank'&gt;&lt;img src='http://www.ie6nomore.com/files/theme/ie6nomore-firefox.jpg' style='border: none;' alt='Get Firefox 3.5'/&gt;&lt;/a&gt;&lt;/div&gt;      &lt;div style='width: 75px; float: left;'&gt;&lt;a href='http://www.browserforthebetter.com/download.html' target='_blank'&gt;&lt;img src='http://www.ie6nomore.com/files/theme/ie6nomore-ie8.jpg' style='border: none;' alt='Get Internet Explorer 8'/&gt;&lt;/a&gt;&lt;/div&gt;      &lt;div style='width: 73px; float: left;'&gt;&lt;a href='http://www.apple.com/safari/download/' target='_blank'&gt;&lt;img src='http://www.ie6nomore.com/files/theme/ie6nomore-safari.jpg' style='border: none;' alt='Get Safari 4'/&gt;&lt;/a&gt;&lt;/div&gt;      &lt;div style='float: left;'&gt;&lt;a href='http://www.google.com/chrome' target='_blank'&gt;&lt;img src='http://www.ie6nomore.com/files/theme/ie6nomore-chrome.jpg' style='border: none;' alt='Get Google Chrome'/&gt;&lt;/a&gt;&lt;/div&gt;    &lt;/div&gt;  &lt;/div&gt;  &lt;![endif]--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-6994263030136258781?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/6994263030136258781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=6994263030136258781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6994263030136258781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6994263030136258781'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/08/why-are-people-still-using-ie6.html' title='Why are people still using IE6?'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-8958039144077569825</id><published>2009-07-28T10:00:00.000-07:00</published><updated>2010-03-23T20:40:42.386-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ie8'/><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><title type='text'>Internet Explorer User Agent Spam</title><content type='html'>&lt;ins datetime="2010-03-23T20:39:00"&gt;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;em&gt;No more!&lt;/em&gt; &lt;a href="http://blogs.msdn.com/ie/archive/2010/03/23/introducing-ie9-s-user-agent-string.aspx"&gt;IEBlog : Introducing IE9’s User Agent String&lt;/a&gt;&lt;/p&gt;&lt;/ins&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ;  Embedded Web Browser from: http://bsalsa.com/; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727; IEMB3; Windows-Media-Player/10.00.00.3990; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; eMusic DLM/3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; WWTClient2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; IEMB3; AskTB5.3)&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MSN Optimized;US; .NET CLR 3.0.04506.648; Zune 3.0; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSN Optimized;US; AskTB5.4)&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Comcast Install 1.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; Media Center PC 3.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Why are the .NET CLR details cluttering up the user agent string? I can't figure out how the information is relevant in the web environment.&lt;/p&gt;&lt;p&gt;We've got user agent strings pushing past &lt;span style="font-weight: bold;"&gt;FOUR HUNDRED CHARACTERS&lt;/span&gt; in length.&lt;/p&gt;&lt;p&gt;If Microsoft is trying to communicate browser capabilities, there's a header for that: &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html"&gt;HTTP Accept&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The same goes for Zune, MSN Optimized, Media Center PC, InfoPath, OfficeLiveConnector, OfficeLivePatch, and MSN Optimized, and probably dozens of others.&lt;/p&gt;&lt;p&gt;Microsoft is filling up our logs, and congesting the tubes with what can only be considered &lt;span style="font-weight: bold;"&gt;SPAM&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;My web logs are not the place for Microsoft advertising!&lt;/p&gt;&lt;p&gt;Also: It's &lt;span style="font-weight: bold; font-style: italic;"&gt;past&lt;/span&gt; time to get rid of the "Mozilla/4.0 (compatible;" nonsense.&lt;/p&gt;&lt;p&gt;I propose a protest: include the three longest MSIE user agent strings from your server logs at the top of all comments and communications to Microsoft.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-8958039144077569825?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/8958039144077569825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=8958039144077569825' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8958039144077569825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8958039144077569825'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/07/internet-explorer-user-agent-spam.html' title='Internet Explorer User Agent Spam'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-7699932902905151866</id><published>2009-07-17T19:16:00.000-07:00</published><updated>2009-09-22T07:45:28.224-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='copyfight'/><title type='text'>Kindle and DRM</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.forbes.com/2009/02/22/kindle-oreilly-ebooks-technology-breakthroughs_oreilly.html"&gt;Tim O'Reilly has reservations.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.boingboing.net/2009/05/14/kindle-owners-start.html"&gt;Cory Doctorow still has questions.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.keionline.org/blogs/2009/05/13/kindle-2-vs-reading-disabled-students/"&gt;Amazon has disabled text-to-speech remotely.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.forbes.com/2009/02/22/kindle-oreilly-ebooks-technology-breakthroughs_oreilly.html"&gt;Amazon has arbitrarily capped the number of times you can download a book.&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eff.org/deeplinks/2009/07/orwell-2009-dystopia"&gt;Amazon deleted books remotely.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://diveintomark.org/archives/2007/11/19/the-future-of-reading"&gt;Mark warned everyone.&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-7699932902905151866?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/7699932902905151866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=7699932902905151866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7699932902905151866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7699932902905151866'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/07/kindle-and-drm.html' title='Kindle and DRM'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-7633953585611446294</id><published>2009-07-07T10:07:00.000-07:00</published><updated>2009-07-08T16:17:08.397-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='diagram'/><title type='text'>Web-based UML diagramming apps</title><content type='html'>&lt;p&gt;If you need to quickly create a UML diagram, I've found a couple of sites provide a simple way to convert simple text representations into nice, attractive UML diagrams.&lt;/p&gt;&lt;h2&gt;&lt;a href="http://websequencediagrams.com"&gt;WebSequenceDiagrams.com&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This site is great for creating &lt;a href="http://en.wikipedia.org/wiki/Sequence_diagram"&gt;UML sequence diagrams&lt;/a&gt;.&lt;/p&gt;&lt;pre style="width:auto;float:left"&gt;Alice-&amp;gt;Bob: Authentication Request&lt;br /&gt;note right of Bob: Bob thinks about it.&lt;br /&gt;Bob--&amp;gt;Alice: Authentication Response&lt;/pre&gt;&lt;img alt="WebSequenceDiagrams.com example" style="margin:1ex;float:right" src="data:image/png;base64,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"/&gt;&lt;h2 style="clear:both"&gt;&lt;a href="http://yuml.me"&gt;yUML&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;yUML.me easily creates both &lt;a href="http://en.wikipedia.org/wiki/Class_diagram"&gt;class&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Use_case_diagram"&gt;use case&lt;/a&gt; UML diagrams.&lt;/p&gt;&lt;pre style="width:auto;float:left"&gt;[Customer]+1-&amp;gt;*[Order]&lt;br /&gt;[Order]++1-items &amp;gt;*[LineItem]&lt;br /&gt;[Order]-0..1&amp;gt;[PaymentMethod]&lt;/pre&gt;&lt;img alt="yUML class diagram example" style="margin:1ex;float:right" src="data:image/png;base64,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"/&gt;&lt;pre style="clear:both;width:auto;float:left"&gt;[User]-(Login)&lt;br /&gt;[User]-(Logout) &lt;br /&gt;(Login)&amp;lt;(Reminder) &lt;br /&gt;(Login)&amp;gt;(Captcha)&lt;/pre&gt;&lt;img style="margin:1ex;float:right" alt="yUML use case diagram example" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASYAAACFCAAAAADTUAryAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAW60lEQVR4XuzQMQEAAAwCoPUv7Sp4ekAELgU0adKkSdMkTZo0adKkiafmTOCjKLaFX73Onn0nISEbJGEPO4iG5T42AUEUooCgoMDFDRCugHoJyL2KoOInoAi5H3hlExDZDYssCQFCWEMICSZkn0zW2TPdVW96GJnMSo8Mw+8dajhd3fPLnP7POaeqTrpCAm+JqqyisQkBAGT+ETF+GHgqUl8tV6j0pkNfqX9kqBjwExx4Q9RZn7w5f1uxMKHPwL6dZOW7F81eul/hZUK1h1e9M2vpz0UgKmXAwAGpCZKG89/Mm/3eN9lq8GjxgjcZso/VdhsfIaQxBMCD1qpVZC+hhg71xb2DqPXKyRJxyshwEUWaTXigWvWaknPfE72e6wRcC4aetIWHD3QaHSl8iOihbq07db5vur8XQJX8dKfj4E5S0kzHpCyHSN9yKVsx5IWAp4gJXd6cMjEIM1tkgwopzx4fPk70hEHl/4hG9ZACMxYbZW5sU9bJhGlx2FPCpP+hcE4sZsfHcti484/F7fEnmM//WC9NjyaRS0gmpbm8N/atYOxpYGpY3mm6yMLFESomN3PuIPJJcTJk5r2RQtqhcXxCf3H3yJdI72OSfzzif3AnrmTR9zeMHkE9ipO2zJRkdTlpnPritUB+g9uKHi9KeELilHKLPCMQ8/KEoGnZuJF/UkJt0CBr3X7Br6cNELgWrJb7v7DuKOK0XgXuaHgE3KIpUyXI9EngTwUsyvYIAem84X8vgd71JmZN+4mYC1ey9KrXvdPJmT+xVw/r38g+9zymyukelTnvwIcne1wat3r8+RKpaEjXLT5/83MxwP1zaSwCjoY3Fw515/PP4nFvYjp57GPSlosTapcPfezrJD9dW/FR/NK4yeqtpQMr6Nd8P06CkblBtwdt7zVLvQfOvrl+XRxwIooFH3YAjw40W363v/o2GPfe9LLlp4Wk/TTA8cygx4XfxuIEcCSdlx4ZtPzg7rEEOWoX+zPAbgtggY+/Lon4vZl86Ur+jEjgTD6Z3sGOCQ+/Spr8r9UCzGvelHX5PeA02mx11YZPAmgnYccYREgrUOESNWjwA1ATUicUs0QzxgRTtUIfp7n//PHFpNPMfaEfpwr1XR3gYleOf47yFiZ2WXpiGwNab3e1QCkoG2FDDa4b1l+Me+iTCZOa80GELaQyaYC5N/JXwqgOFixyhLH6399JcC+NdE3KOMuAhkDr1haOi0rOnQoIazvccQ3rd5FhgWdk/D+LOSTCUNvh7eSE3dyJrGaAIItQXaHI8OfnWw2AodIyA/AWJn+87dhPMyqjvvLiXEX9R6tkhVf+u0xthSqqysB6yK+/Oj1q7u+GvD6Ezf1f3rQ1HdydWb1/w8ydykXF5TNXByu580VvKMxvMiPD+l1goJdSeH2QVQoimMYwwGyderl+a15L5PG0S0xJ57YJykerRCJKoIOAxnUAE7UygOB6AszYExoYQNJaxPW4a+aeEOmNPT1r0/PbsOT85XbkGzbRVL1mTTtwb28pBnVjfop/IXLZkkR09X3psvu//EHYZK7EQyzyEqZWgVWWxnz0ANVp426ejJTlqETb3rkPrXI4hZ3Ipzqlr1eA56M3Mn7zs3JA4qvr60C66Acgee/YJdBt0toGME2whZUuOJAPUsevaQYzQSaULdp9A3Qfv0YFZrXsBD6Lt98GmlZ1YY+qa5GDMasxbO2cCKT5Me0AhVQHlx/1ExT2xlU3V+/PyhtyELdJT2I1g9xN4coCeUK8+zCvnJxnNbCt/SOWHrY8+N3z1TO+j81p+vxsQnLbHN6yZqmPiCJYBAiMARgBIcBMPcACQBp7OMGYrjns4Qx48E6KQYAtWSjHG5OnjrR2kqXXI3uEZwy70bsqcYbs23Zjl4jlE5ee3XrxxvD8we9Ze1PByfd9KfcwFa4qZ8mh74vdxVS6abnVaFatpLTttLSvAZCr/icaC1CTdJurqGz3+z5iz3j2qXdb4noOV1ZPI6zuXV1BBpHV7dTEsndjgZz0V9aKQwqTbwVoIpWUzNqbdvuM9XEPU9m04dPF975o/6m7t6BcmkE6WZx8NLqP7SmQVfuKj4h49CrtYfG6XhPlxOKVScPChEj7yWqB42nTe3MSgMsFC7NwaXsZ6U5uYr5NXSQAgesmn3vOTUyyqCt9nC1O7CuZ8MI4gk/V6XS3nuaj+9nzgEOJ3EhAiIDEryTJ8dxSzLqEhECRKIDA3UrhqqM/C4wq7OUdz7pbEhq2p7eTxYlMZHeqBMaRhJNPuF/SH+QFlpZOV0kOa7OilQe6xNeHhkcq5AGksQFbIQDAuZt8/YtPaVtCJhUsdlKZMx8aNr9OU5hbmO5TsZzCUvcidzGl7LyZ4nhxMibK1sEM+4aIKAKWXR0UAmykMhN13nM3QI/qSjcrJtAtmm9o6kpB3IIz8n1lXWvkXZ+XAMcSH7t/ksPK7pRAl6s6tDMhQUC6h6nF/KsPHxUCbgo9ZX2GxNE6F3S0i8Xjl4XZzU2ViuQ+wFawhtT+x8GAc2cXoZe/kMRSwtwpw2ev/u0rg/bFvMwV9zIHOMOEzV0QNghzEFfBlp6DI3Ti2lKRgARuYYqp1Qs4XR7qrjOxt35p2jyPtHElx4cFZ8fsCaBuxWf0tq8eRay8VfNKVdEEv5vjFJPy+kmCV928P7tLow7ruDPoy2OCL0OAM5H+cwkahDmIK1dHKOvIIn8R7WaFQDPyHyOMilkQ+JF7S5XTWaKRCT9K04lHITK2Oz+8lqRYWVQeL1uQFOvi64AYwoAbXxes/rT7RMIuPbk6of//FXNDZWIKuIcJ7diaGQHYwyt3dAC8BRUfKEpJiyKB+mu/aYJH1eTQxb3pnaXC+uXHXh/VchSf0YUzCnhEYOPGhllhLvM1QG079zYmTgyQiijMTUxA93nudP+8QwvG8rZcdemYPi3VF2E4jqm+q50T4tqV9PuuvRYvEdOgYeXZn9u3FgnK84ckC3DMI6RY3e97Bo4QO3Qje3j1++690FUiFpGY+0VeXdaeM+kTuvMsJMDirILE56JNgzKB41BzYt+oNNJZ2RIBdGdH6KQgkVBAAlb977Q0ZGCar+bI3myIoHDMA06FDPK919KelThNT5ZOxaGCIc/4ic3p2/2y3M2ZOQTPjHQuixzcywcADOcEA4A1lO5QjO5JOHYlVHKkcXRno2UUZxpkEYUYFrJQjW+q6TwmAveETzGt949fjR8Sh7sshusLjjQO7BckFAkpHPw1TEXTc3jZU3DsbtLQGNzIyETJ7F6M7uavDX1TwzE7V6q/cUE3pKdUIKRJywQcIiMnBNma/Djm4qAk4eOTgoxBnn1Ol9QrTuykGN5QdPF+yDPJMoGApskn+0SK/OxJyZB0X4RhBI5jltvGKbxncmnut0Sn5Ah//GFNV1l151Zz/Og4CU3TFI63rRLiCEIE20fCppq9fq9XdxBi+GNFH06T7V4YUXHrSI1fYkyEv6QtKLZZUXnvvj6y54shtFHMCwG+3sRa9W7NyrbqY3ZuqbtyvKbrs+0x7hpB2F6HkDFoywruViJhsEhCQJW2XgVCYhKjZBRJUSRh7+UIIQhZFrFaJrOyw7RAHH88UgCxjIFpqL1XWttESsViSoaBVq1W3aylAsJi2oUKjWZQpNmneWPSrC6yyjiXh1ld7jOftqJQeuJK6LMpYoSZPMnRZ0EIDSyjbWrW6lQMLqGFEn8RQRCk8Z/Fk2xJwQfSUNzpzB8Du/oSj5nRIQsZhmVVSpWmlW2BgBJRAoFUKiA4MSKyOBJfTLBUbVWZWLrN6kf4RbbpqrNPqAf2CUFcRiKc51wEEYQMNCr0ILI4IVyHEwJckoIQNd7JCR9dkBxC4I/nUkZhEfcDEUSmW+eyqNFoG7M9nsLZO6fuxj0TQ1ocybWVJktNs0dutH+0beiBU7EQseqfCsLelgrJx83oCD18eoEzwdSARTyPCdX+nitK6yxDAOAm4Wcm4DHJts9TECJVZcyukh4D2+McXy+IR0Y61cVTjalvhWMAcI6L8Q4Ht+/QyAQHnEv5+aCXK/OvwvzOsRSO/R/BVHhlXByNuPAmjJzAExUMEDiACLJEXCxS6b6nFmoDRV4g5YmgQ62seZLkJXsReJCnAFsfsOlO0vhYfvMp73uT3ezJZdb2vE9huClPEaFoTu295munU7v58MjAT9ebADTlDa+LaVSHECHVzRz094oIfwzHnrY3eX97Av+U7tO/n448czNwSgLphcAngZfE0NTUpNOrICYViEUB/sLHS+mIQBCK0XR1CXnxYJd+MQQvUkilbNHodXoNALgPKRCK/XwEngy6x5TGktulcuQr9RNKcahUa+UqPCgyKS4Mf7zog0ZB0FBxpWXqhbho19MEZXV5SV2DGvfxlQhEEoBgi07f0twK/YLaxUWGYdjT9iZUm3ehIaTH2GBfss1T/UpFxYXdVI8+MSSG/eXoI0ygiLhYABt+a10kkgkd/zBNcV5hc1BUXN8AqdiqjAKgsrm+6mQNjO4eH4ljT8+bDDcOKJL6xYkd/UqstTI/j04bKH2sHIwQC00pvTbg4MW4ISl2S2Tt9VPl/l1SIqQWODYvBBX380vxHoM64E8HE5O3F4zuLjQb5KC2ypQcrhk2xOcxQZnDD9Vdbxj/384pgbiFVNnJ3JBhnfwAcArJrGBpXq5sVG8Z5lFMtVXtAh9Z+i3PVE9OwqzZ2LoVqtpf9vJArrT62KRYhJDhyonKxQF48IOF392dFc8MDsUcgLEcW16GwuOVaaP8cA9iKtkjx8ITO4QFOL8/NmvnxDTKDoxdg3f/G/ZGgEuH4h99LATN4tz94c93I7DqbWXjBojswVi0Hb/K366PGSnCPBh0upqK4nsKUURCTFgAATD76z8Uvx3Zho0Ln9Ltv/puAoF5ZDnDcuGnK2KDd0XmjPmb0AaMa0icrvlRPa8D+Rcw3Z6e6+gODAxEgKmrKi6vJyI6xIYGCaxY6b5qfVvkOt4sDWbvm9+Zwjyx8INGYRFE9Uti5objrsEA5IAfurQ9fRiNuY1p2weHewB7MRljKnCx9dVlpXWGkKjE8GCJeUg2bFDPp23BuGjXMj/oyIMTz/kUYss/GzySJknMBRyAnPCrW99tGk24ian+5S6KTMLxN8fZZGaFmmrKSxRq33YJkcH+OPj1wj8ELtjYo7uwb0UogXmqmFD9j2m9AG6qCv8FUNqvI2cJcbcwwa+LPp0+Z4RTg0ysTLC4jq6mqqSqiY6IOZ7hxyfeLA39pH5b6Km5rv7vr/YFXDWMFyD7V+tn/cfRhDuYyl7ZmpC1bqfUdeEWWQQARlH5nzEj8bYUEGYHprB4tBU6zcdvp9AeWk9vpF7BXcKRh5iOL1eMc/wW5YcZ0TTGHxPziXAZ0M8dNMPcd80KIGiqsMj/tVJItEGSI+xu50DXt6yzPnWq6F2RZ3az1i79XGxz5xcv3B8+DHv4pSxejXH60vYvncyoLp7+SEzxx5S3aFcQAPkLdwQDNySrcJYVgqyiOQgYcpXDSDkbVpHbKwqA1vIVq4OsdpK1rF4eLvAIps3hw2zd451R0Ssy6w9374yahJK6kEoUIRf6IuWc7VVH+iQpiD1v2kwcDItXhgkxvmUj/foZQUbVddBGCNyQvD6WLTNcEysQALtWfC/PSX+n8t0dvzZ+I9/+y3XTbh8LKJl/OQuBJ+Rm74d7UMwaEMqTY8vWgC05a2cv/mr+4TufNcxZDoG25u46YkvdnCWRDyx5aDMiB+S2srwrBGfqJ3CKeP31SZ0Ab0GKMOsAE8oB0p7K2PnH3qjrRzv2l3+tE+ROLpvtbx11EQ0MJDxACTYLkO2EO/SDTyd9BM8soL7esbN2zUJpxA+Tt7OHfqe/I88sCawYOcouPcWdHSokMH6Ymja+LTEdRE7YsJb/HTAGsXUikiIF2aApiDkbmEqf7X16yon5+yskQGsz/EmUECIPRJ1GQtpNuEOHnm6fsDGDiu7W9/SIQJkm8ZsT2Vf+M+VC8MEMBPo9Zz/oBTWzkGetFu0LSDO/a9IfbpQJSFoLUFsGvrrvM04nNM0Y0nNCdJ+bkxNDtia/xIbprMZCgDRCBDwhIg0DzLGDzBrEznr/6AuvHjoEX8Ik8dlDOw6YIUoNSgavjJt04CgaajLX+tUghgjxS+E1U9d2+ZPYoR83SwBf+WJwivWkSCdErTR3DDLGdOdsxww4S9pModYN7yWhPZHD5y+TAXfmlRASdpd+oUb7CnE+mNi1jaseWq2Z+/xEwFeOlL/qbD65bFR/J9NNzaoF7SQ08ID8v8SBLsCYj13zY5e9Hekr5JWbbv+2xfI+8ex/DfUDPKX7YQPpZIEiEDibil8N5LaKeELGZvQUOgUDEB9+t0l/ksD4jHStm16MbNPtlbT7Db4RERqd/YyTNUq4j6Oz3Drn4BTOME9IVNyxsYAHJOeXNFveomkc8MF0qWRV2y49a/7QWMBP8Amf9RQ7dppJYifh+FtAR4r00GJl7pz4ZP6VJvtLTGZqeyFF8JmFa2dNGmedqr5SrOR7G+yu0rdI5M7S99aWRVEST6190d1P3kl2AIbn8tewrfFNHx8RwcOb0DFqpPUZIn3mjW583en5tfteIFyDsXqyt2TzzAgBRQDPCBb/4b+nDMBtCfAE1fIDNVsq5lchUEzN6GVLblv2l0LeM+HPoydSjtnYo0MFW1/qLRFxlnlI2KrV8S/J3PckYyve1Ge0RCqicB6Y4IaSNXYRppyTPoq3nc3fwBm+vOINML8fmpkiEgkIDHiOk/LHi+mppIUAz4Gv6derU5NEEiHFqyxXMX1TvH0gnvp2iw/vZ4w1e89MTyEenZ5Q9S7V6+EiAbfXz4PCGgq/IyZ1olwma4CsLzVeONZtnK9IJCBxwAMTszxwIbAX3YKB6YA3J8OtLSETIzBrNnY+1XTi/LChYqGA8iwlAJChNXcHObKbjO9gx9aevpgwLoTbkcF322Ffh1ughfOr+adRAuu88sS6qFHRpPN4g3Un87t8GCQQmJ7w96xgFD6w943Du7qkRYgenZ5QY8HvjX2XBAo4W3Cv/m05yBrU5w7RfVMDSUfxxjQXZdelDvWnaYoin8gjSohlWhvPn9F16BPtSzsHhdQNt64rop7tSBuFInEMeBUTQJBh9SXnbuGxqaEyAW4hBHXqhoKC5ph+SUKKoknC4koeB8UaDA351yphdMcYmYSmrCFBvU5dX1yskCYmxwsoijSawkHyMiYAIGRZxlBZcLNOKwn2DxBJcKjRNNXUa2jf+M7RFEkRpNWODM8LgpBlGEZeVlyq0mESP38fGSUBgFXplY2NSg0pDIiNjSEJkrPFbIlXMVm2fiEGMoxOLq/XaNUQEwulkpBgCU7gpLHhRnnyz2saSUGWZZnGhga1RtOqAQCT0iKRNMBfYkRjNIQTDPPuX1G1t9L0rDKnkXkXhHmLi9eel0ZGgSYxamDejAFwox1GwQjMzg7vYzKX4iHijP3zSTcOFKe9JuZsDQHgMJkE4+zAAZ+HpjHkTSu5ZjIK49pTEvRX9ob8b3v3r5owFAVgPLj5QoJQEPEVHLTQyczaRcQnsJBBxEWUDA7BoXRsUacMDk6Cg4h/pqKCaAeXK0nkHl/AZCou+b5H+ME5nO3Ic+KXAUxKJPAlOpiC2lH6n/pwEn25iairxLXIo0VWeyM5+an9eU7ZGS7f50Zsk4j84k6muczW71mtppn6Yugepqu/YtfzL+3X9EcwKLCbQnJN602pkv2dbXTWFZhC0rPuQc4j0ZvxwnNhIphgggkmmGCCiWCCCSaYYIIJJoIJJphgggkmmAgmmP4pmGCCCSaYYKI7J0ubXgVrS1EAAAAASUVORK5CYII="/&gt;&lt;p style="clear:both"&gt;For more, see &lt;a href="http://delicious.com/brianary/diagram"&gt;my diagram bookmarks&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-7633953585611446294?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/7633953585611446294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=7633953585611446294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7633953585611446294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7633953585611446294'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/07/web-based-uml-diagramming-apps.html' title='Web-based UML diagramming apps'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-5970892503820564399</id><published>2009-07-01T09:40:00.000-07:00</published><updated>2011-06-07T11:42:34.336-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reghack'/><category scheme='http://www.blogger.com/atom/ns#' term='mswin'/><title type='text'>Best Registry Hack Ever: MaximizeApps</title><content type='html'>&lt;p&gt;This registry hack maximizes windows by default when they open! For years, I've been using a superfluous freeware program for this. I wish I'd known about this much sooner, or that Microsoft had provided some UI for this option (at least in the old TweakUI).&lt;/p&gt;&lt;pre&gt;Windows Registry Editor Version 5.00&lt;br /&gt;&lt;br /&gt;[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]&lt;br /&gt;"MaximizeApps"=dword:00000001&lt;br /&gt;&lt;/pre&gt;&lt;ins datetime="2011-06-07T11:40"&gt;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Here's how to set it in PowerShell ( ` is the line-continuation character):&lt;/p&gt;&lt;pre&gt;New-ItemProperty HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer `&lt;br /&gt;-Name MaximizeApps -Value 1 -PropertyType DWORD&lt;/pre&gt;&lt;/ins&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-5970892503820564399?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/5970892503820564399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=5970892503820564399' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/5970892503820564399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/5970892503820564399'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/07/best-registry-hack-ever-maximizeapps.html' title='Best Registry Hack Ever: MaximizeApps'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-3930857144080537891</id><published>2009-06-10T11:19:00.000-07:00</published><updated>2010-02-01T11:16:26.937-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ivorytower'/><category scheme='http://www.blogger.com/atom/ns#' term='dotnet'/><title type='text'>Easy XML serialization of complex objects with C# 3.0</title><content type='html'>&lt;p&gt;&lt;strong&gt;C# 3.0 Update!&lt;/strong&gt; If you've got complex, XML-serializable objects you'd like to trace easily, such as SOAP objects, here's a handy way to dump their contents to an XML string:&lt;/p&gt;&lt;pre&gt;using System.IO;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Xml;&lt;br /&gt;using System.Xml.Serialization;&lt;br /&gt;&lt;br /&gt;public class XmlExporter&lt;br /&gt;{&lt;br /&gt;&amp;emsp;&amp;emsp;/// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;emsp;&amp;emsp;/// Serialize an object as an XML string.&lt;br /&gt;&amp;emsp;&amp;emsp;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;emsp;&amp;emsp;/// &amp;lt;param name="o"&amp;gt;The object to serialize.&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;emsp;&amp;emsp;/// &amp;lt;param name="defaultNamespace"&amp;gt;The default XML namespace of the object (to supress noisy namspaces).&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;emsp;&amp;emsp;/// &amp;lt;returns&amp;gt;The object, serialized as an XML string.&amp;lt;/returns&amp;gt;&lt;br /&gt;&amp;emsp;&amp;emsp;public static string ToString(object o, string defaultNamespace)&lt;br /&gt;&amp;emsp;&amp;emsp;{&lt;br /&gt;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;if (o == null) return "&amp;lt;NULL /&amp;gt;";&lt;br /&gt;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;var utf8 = new UTF8Encoding(false);&lt;br /&gt;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;using (var ms = new MemoryStream())&lt;br /&gt;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;using (var x = new XmlTextWriter(ms, utf8) {Formatting = Formatting.Indented})&lt;br /&gt;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;{&lt;br /&gt;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;var xs = String.IsNullOrEmpty(defaultNamespace)&lt;br /&gt;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;? new XmlSerializer(o.GetType())&lt;br /&gt;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;: new XmlSerializer(o.GetType(), defaultNamespace);&lt;br /&gt;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;xs.Serialize(x, o);&lt;br /&gt;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;return utf8.GetString(ms.GetBuffer(), 0, (int) ms.Length);&lt;br /&gt;&amp;emsp;&amp;emsp;&amp;emsp;&amp;emsp;}&lt;br /&gt;&amp;emsp;&amp;emsp;}&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-3930857144080537891?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/3930857144080537891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=3930857144080537891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3930857144080537891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3930857144080537891'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/06/easy-xml-serialization-of-complex.html' title='Easy XML serialization of complex objects with C# 3.0'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-6690665885963448037</id><published>2009-06-09T08:38:00.000-07:00</published><updated>2010-10-25T09:11:32.455-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><title type='text'>Lye Service: A SOAP service that uses XML strings rather than objects</title><content type='html'>&lt;p&gt;I've decided on a name for &lt;a href="http://en.wikipedia.org/wiki/SOAP"&gt;&lt;acronym title="simple object access protocol"&gt;SOAP&lt;/acronym&gt;&lt;/a&gt; services that use XML strings for input and output rather than objects: &lt;dfn&gt;Lye Services&lt;/dfn&gt;.&lt;/p&gt;&lt;p&gt;These services completely miss the point of the SOAP overhead, which is to hide the obnoxious XML string manipulation in the SOAP layer, to avoid the tedious and error-prone process of building XML strings manually via concatenation or templates. This means you get all of the drawbacks of SOAP (high network overhead, heavy library dependence, XML serialization load) without any of the benefit (a complete service description; straightforward updating; working with objects and not worrying about XML strings, serialization, de-serialization, and validation).&lt;/p&gt;&lt;p&gt;The result is a service definition that is not complete: the schema and documentation for the XML to input is elsewhere, usually out-of-band, that does not automatically update when the service is updated.&lt;/p&gt;&lt;p&gt;Worse still, these &lt;a href="http://en.wikipedia.org/wiki/Plain_Old_XML"&gt;&lt;acronym title="Plain Old XML"&gt;POX&lt;/acronym&gt;&lt;/a&gt;-y services often omit a schema for the input XML that could be used to generate or validate the XML before sending it to the service, making the process much more error-prone. Sometimes the service is so poorly specified or documented that the developer is forced into tedious &lt;span style="font-style: italic;"&gt;trial and error&lt;/span&gt; to figure out the appropriate input.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Thus, "&lt;a href="http://en.wikipedia.org/wiki/Lye"&gt;Lye&lt;/a&gt;", an archaic and harsh soap that homophonetically implies an untrue implementation.&lt;/p&gt;&lt;p&gt;When encountering a Lye Service, it's worth asking whether a more structured approach (objects, rather than XML strings) could be used. If not, &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;&lt;acronym title="Representational State Transfer"&gt;REST&lt;/acronym&gt;&lt;/a&gt; may be a better fit than SOAP.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-6690665885963448037?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/6690665885963448037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=6690665885963448037' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6690665885963448037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6690665885963448037'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/06/lye-service-soap-service-that-uses-xml.html' title='Lye Service: A SOAP service that uses XML strings rather than objects'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-6226962279735112214</id><published>2009-06-01T16:16:00.000-07:00</published><updated>2009-06-01T16:52:15.576-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mix09'/><category scheme='http://www.blogger.com/atom/ns#' term='mswin'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><title type='text'>Remembering IE databinding</title><content type='html'>&lt;p&gt;I was recently thinking about &lt;a href="http://msdn.microsoft.com/en-us/library/ms531385(VS.85).aspx"&gt;Internet Explorer 4's HTML data binding support&lt;/a&gt;, and it occurs to me that it is similar, at least superficially, to ASP.NET AJAX 4.0 declarative data controls. Where they differ tells a story about the difference between Microsoft 1997 and Microsoft 2009.&lt;/p&gt;&lt;dl&gt;&lt;dt style="font-weight:700"&gt;Cross-browser&lt;/dt&gt;&lt;dd&gt;MSAJAX doesn't demand IE loyalty, or pretend that other web browsers do not exist.&lt;/dd&gt;&lt;dt style="font-weight:700"&gt;Generalized framework&lt;/dt&gt;&lt;dd&gt;Rather than play whack-a-mole with very specific features built in at the browser level, MSAJAX is extensible by ordinary web developers.&lt;/dd&gt;&lt;dt style="font-weight:700"&gt;Security&lt;/dt&gt;&lt;dd&gt;Databinding had some issues it could never really overcome, in that it was essentially sending SQL straight from the client to the database server. MSAJAX naturally shows a great deal of maturity in anticipating security problems.&lt;/dd&gt;&lt;dt style="font-weight:700"&gt;Standards&lt;/dt&gt;&lt;dd&gt;Microsoft, in recent years, clearly values standards more than it did back in the days of browser-war HTML-extensions, using normal XML/HTML/CSS2.1/REST to continue to advance the web platform.&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-6226962279735112214?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/6226962279735112214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=6226962279735112214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6226962279735112214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6226962279735112214'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/06/remembering-ie-databinding.html' title='Remembering IE databinding'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-7594854422706802650</id><published>2009-03-27T21:11:00.000-07:00</published><updated>2009-06-01T16:50:30.653-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mswin'/><category scheme='http://www.blogger.com/atom/ns#' term='ie8'/><title type='text'>IE8 has a find bar</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8mr1RHUNECA/Sc2j5_GVIAI/AAAAAAAAB8Q/nquHmipf2sQ/s1600-h/ie8findbar.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 41px;" src="http://4.bp.blogspot.com/_8mr1RHUNECA/Sc2j5_GVIAI/AAAAAAAAB8Q/nquHmipf2sQ/s400/ie8findbar.png" alt="" id="BLOGGER_PHOTO_ID_5318086951580278786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;IE8 finally has a find bar like everyone else.&lt;/p&gt;&lt;p&gt;No CSS &lt;code&gt;border-radius&lt;/code&gt; support, though. &lt;tt&gt;:(&lt;/tt&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-7594854422706802650?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/7594854422706802650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=7594854422706802650' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7594854422706802650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7594854422706802650'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/03/ie8-has-find-bar.html' title='IE8 has a find bar'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_8mr1RHUNECA/Sc2j5_GVIAI/AAAAAAAAB8Q/nquHmipf2sQ/s72-c/ie8findbar.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-6154884234089633551</id><published>2009-03-23T12:34:00.000-07:00</published><updated>2009-03-23T12:44:43.054-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='datetime'/><title type='text'>Mean Date Measures</title><content type='html'>&lt;ul&gt;&lt;li&gt;365.2425 mean days per Gregorian year&lt;/li&gt;&lt;li&gt;30.436875 mean days per month&lt;/li&gt;&lt;li&gt;52.1775 mean weeks per year&lt;/li&gt;&lt;li&gt;4.348125 mean weeks per month&lt;/li&gt;&lt;li&gt;260.8875 mean weekdays per year&lt;/li&gt;&lt;li&gt;21.740625 mean weekdays per month&lt;br /&gt;&lt;/li&gt;&lt;li&gt;250.8875 mean US workdays per year (mean weekdays minus ten federal holidays)&lt;/li&gt;&lt;li&gt;20.9072916&lt;span style="text-decoration: overline;"&gt;6&lt;/span&gt; mean US workdays per month&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-6154884234089633551?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/6154884234089633551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=6154884234089633551' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6154884234089633551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6154884234089633551'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/03/mean-date-measures.html' title='Mean Date Measures'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-1241628580421694935</id><published>2009-03-19T11:20:00.000-07:00</published><updated>2009-03-19T11:25:39.069-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mix09'/><title type='text'>IE8 Accelerators</title><content type='html'>Is it just me, or are IE8's &lt;a href="http://ieaddons.com/en/accelerators"&gt;Accelerators&lt;/a&gt; &lt;span style="font-style: italic;"&gt;very&lt;/span&gt; similar to IE6's &lt;a href="http://cc.uoregon.edu/cnews/summer2001/smartags.html"&gt;Smart Tags&lt;/a&gt; or &lt;a href="http://blogs.msdn.com/oldnewthing/archive/2004/05/24/140283.aspx"&gt;context menu extensions&lt;/a&gt;? &lt;a href="http://en.wikipedia.org/wiki/Internet_Explorer_8#Accelerators"&gt;I guess it isn't just me.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-1241628580421694935?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/1241628580421694935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=1241628580421694935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1241628580421694935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1241628580421694935'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/03/ie8-accelerators.html' title='IE8 Accelerators'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-2295563020857441309</id><published>2009-03-19T10:29:00.000-07:00</published><updated>2009-03-20T00:04:54.291-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mix09'/><title type='text'>IE8</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8mr1RHUNECA/ScKlDShunaI/AAAAAAAAB8I/wyCr2XXVra4/s1600-h/200903191258000jpg-16.resized.jpg"&gt;&lt;img style="cursor: pointer; width: 384px; height: 288px;" src="http://4.bp.blogspot.com/_8mr1RHUNECA/ScKlDShunaI/AAAAAAAAB8I/wyCr2XXVra4/s400/200903191258000jpg-16.resized.jpg" alt="" id="BLOGGER_PHOTO_ID_5314991986182102434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;IE8 has...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;an awesome bar, like Firefox&lt;/li&gt;&lt;li&gt;native, automatic color-coded tabs, like the Firefox extension&lt;/li&gt;&lt;li&gt;Chrome-style tab process isolation&lt;/li&gt;&lt;li&gt;CSS 2.1 support (full?)&lt;/li&gt;&lt;li&gt;"Accelerators"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Web Slices&lt;/li&gt;&lt;li&gt;images in search box suggestions ("Visual Search")&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;All of the sudden, Microsoft is talking a lot of smack about CSS 2.1 support in those &lt;span style="font-style: italic;"&gt;other&lt;/span&gt; browsers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-2295563020857441309?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/2295563020857441309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=2295563020857441309' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2295563020857441309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2295563020857441309'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/03/ie8.html' title='IE8'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_8mr1RHUNECA/ScKlDShunaI/AAAAAAAAB8I/wyCr2XXVra4/s72-c/200903191258000jpg-16.resized.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-2720545019587151125</id><published>2009-03-19T10:24:00.000-07:00</published><updated>2009-03-19T10:29:24.209-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mix09'/><title type='text'>VS2010 Web.config transforms</title><content type='html'>Oh great, &lt;span style="font-style: italic;"&gt;another&lt;/span&gt; XML transform language. Hopefully, everyone will make one suited to their niche, so knowledge won't be &lt;span style="font-style: italic;"&gt;too&lt;/span&gt; portable. The reason? It's smaller. So I guess Microsoft will be switching all of their development efforts to APL or Perl, then?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-2720545019587151125?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/2720545019587151125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=2720545019587151125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2720545019587151125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2720545019587151125'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/03/vs2010-webconfig-transforms.html' title='VS2010 Web.config transforms'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-2215852336253006613</id><published>2009-03-18T13:10:00.000-07:00</published><updated>2009-03-18T13:19:39.164-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mix09'/><title type='text'>T24F The Microsoft Web Sandbox</title><content type='html'>&lt;ul&gt;&lt;li&gt;first gen: Facebook JS (FBJS), AdSafe&lt;/li&gt;&lt;li&gt;second gen: Caja, FBJS2&lt;/li&gt;&lt;li&gt;ECMA TC-39 Security Working Group&lt;/li&gt;&lt;li&gt;provides W3C standard DOM support for even IE browsers&lt;br /&gt;&lt;/li&gt;&lt;li&gt;provides isolation for 3rd party scripts (3JS)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;provides QoS checking for 3JS (only the embedded [div] portion fails or times out)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;allows integration into rest of page (not absolute isolation)&lt;/li&gt;&lt;li&gt;JSVM script, 3JS transform service converts 3HTML or 3JS into a JSON closure that intercepts all DOM namespace lookups&lt;/li&gt;&lt;li&gt;virtual title and status bar for the hosting element&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Apache License&lt;/li&gt;&lt;li&gt;well-formed HTML only&lt;/li&gt;&lt;li&gt;no document.write()&lt;/li&gt;&lt;li&gt;no eval()&lt;/li&gt;&lt;li&gt;no JS &lt;code&gt;with&lt;/code&gt; statement&lt;/li&gt;&lt;li&gt;debug complexity&lt;/li&gt;&lt;li&gt;performance penalty&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-2215852336253006613?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/2215852336253006613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=2215852336253006613' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2215852336253006613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2215852336253006613'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/03/t24f-microsoft-web-sandbox.html' title='T24F The Microsoft Web Sandbox'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-5439095749631443028</id><published>2009-03-18T13:02:00.000-07:00</published><updated>2009-03-18T13:10:32.618-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mix09'/><title type='text'>MIX09 Keynote: Scott Guthrie</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8mr1RHUNECA/ScFT27CYhEI/AAAAAAAAB8A/rRjWFv4sRb8/s1600-h/200903180851002jpg-10.resized.jpg"&gt;&lt;img style="cursor: pointer; width: 384px; height: 288px;" src="http://3.bp.blogspot.com/_8mr1RHUNECA/ScFT27CYhEI/AAAAAAAAB8A/rRjWFv4sRb8/s400/200903180851002jpg-10.resized.jpg" alt="" id="BLOGGER_PHOTO_ID_5314621238299624514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ASP.NET MVC 1.0&lt;/li&gt;&lt;li&gt;ASP.NET 4.0&lt;/li&gt;&lt;li&gt;VS 2010: parallel web.config files (Web.Test.config, Web.Release.config)&lt;/li&gt;&lt;li&gt;Microsoft Web Platform Installer&lt;/li&gt;&lt;li&gt;Windows Web App Installer/Gallery&lt;/li&gt;&lt;li&gt;Azure Services Platform&lt;/li&gt;&lt;li&gt;Silverlight 3: people are totally using it! (NetFlix, NBC Olympics), GPU hardware  support, codec support (H.264, AAC, MPEG-4)&lt;/li&gt;&lt;li&gt;Expression Web 3&lt;/li&gt;&lt;li&gt;Expression Blend 3: SketchFlow, Photoshop/Illustrator import, source control&lt;/li&gt;&lt;li&gt;Eclipse support for Silverlight&lt;/li&gt;&lt;/ul&gt;Several guests, including Joel and Jeff from &lt;a href="http://stackoverflow.com/"&gt;StackOverflow.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-5439095749631443028?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/5439095749631443028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=5439095749631443028' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/5439095749631443028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/5439095749631443028'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/03/mix09-keynote-scott-guthrie.html' title='MIX09 Keynote: Scott Guthrie'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_8mr1RHUNECA/ScFT27CYhEI/AAAAAAAAB8A/rRjWFv4sRb8/s72-c/200903180851002jpg-10.resized.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-4812911926124722437</id><published>2009-03-18T11:37:00.000-07:00</published><updated>2009-03-18T11:45:36.850-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mix09'/><title type='text'>MIX09 Keynote: Bill Buxton</title><content type='html'>&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8mr1RHUNECA/ScFAmCxKhXI/AAAAAAAAB74/LzmOW-XdESI/s1600-h/200903180851001jpg-11.resized.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 384px; height: 288px;" src="http://2.bp.blogspot.com/_8mr1RHUNECA/ScFAmCxKhXI/AAAAAAAAB74/LzmOW-XdESI/s400/200903180851001jpg-11.resized.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5314600057596183922" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;"return on experience"&lt;/li&gt;&lt;li&gt;it's not the product, it's the experience"&lt;/li&gt;&lt;li&gt;the industrial designers from the 1920s are analogous to modern UX designers&lt;/li&gt;&lt;li&gt;Post-Its&amp;reg; for sequence design (like Dmitri Martin)&lt;/li&gt;&lt;li&gt;transitions are the most important part of state transition diagrams&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-4812911926124722437?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/4812911926124722437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=4812911926124722437' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4812911926124722437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4812911926124722437'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/03/mix09-keynote-bill-buxton.html' title='MIX09 Keynote: Bill Buxton'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_8mr1RHUNECA/ScFAmCxKhXI/AAAAAAAAB74/LzmOW-XdESI/s72-c/200903180851001jpg-11.resized.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-3083746305062137003</id><published>2009-03-17T21:18:00.001-07:00</published><updated>2009-03-17T21:27:06.521-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mix09'/><title type='text'>StackOverflow podcast live at MIX09</title><content type='html'>&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8mr1RHUNECA/ScB2PlWivtI/AAAAAAAAB7w/msttdF56E3s/s1600-h/MIX09_Joel%2BJeff_SOcast.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 280px; height: 233px;" src="http://3.bp.blogspot.com/_8mr1RHUNECA/ScB2PlWivtI/AAAAAAAAB7w/msttdF56E3s/s400/MIX09_Joel%2BJeff_SOcast.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5314377570393964242" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Joel and Jeff (left to right) discussing (in what should show up as &lt;a href="http://blog.stackoverflow.com/feed/"&gt;SO podcast #46&lt;/a&gt;) data formats, the importance and peril of understanding technical historical context for programmers, and chopping off the ends of the meatloaf.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-3083746305062137003?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/3083746305062137003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=3083746305062137003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3083746305062137003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3083746305062137003'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/03/stackoverflow-podcast-live-at-mix09.html' title='StackOverflow podcast live at MIX09'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_8mr1RHUNECA/ScB2PlWivtI/AAAAAAAAB7w/msttdF56E3s/s72-c/MIX09_Joel%2BJeff_SOcast.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-2259991423868916371</id><published>2009-03-17T21:00:00.000-07:00</published><updated>2009-03-17T21:26:35.938-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mix09'/><title type='text'>MIX09 at the Venetian</title><content type='html'>&lt;p&gt;Pardon the horrible quality of the photos. My "camera" is just barely a phone, much less a camera.&lt;/p&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8mr1RHUNECA/ScB1tuQXRFI/AAAAAAAAB7o/Q3pKgxemgBU/s1600-h/MIX09_Venetian.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 267px; height: 400px;" src="http://4.bp.blogspot.com/_8mr1RHUNECA/ScB1tuQXRFI/AAAAAAAAB7o/Q3pKgxemgBU/s400/MIX09_Venetian.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5314376988668413010" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Yep, they dyed the "Grand Canal" at the Venetian green for St. Patrick's Day.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-2259991423868916371?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/2259991423868916371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=2259991423868916371' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2259991423868916371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2259991423868916371'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/03/mix09-at-venetian.html' title='MIX09 at the Venetian'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_8mr1RHUNECA/ScB1tuQXRFI/AAAAAAAAB7o/Q3pKgxemgBU/s72-c/MIX09_Venetian.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-6317082329731971499</id><published>2009-03-17T14:06:00.000-07:00</published><updated>2009-03-17T14:11:29.672-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mix09'/><title type='text'>MIX09 swag (initial)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8mr1RHUNECA/ScARIxC1BvI/AAAAAAAAB7g/-0jfVY62VCg/s1600-h/mix09swag.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 251px;" src="http://3.bp.blogspot.com/_8mr1RHUNECA/ScARIxC1BvI/AAAAAAAAB7g/-0jfVY62VCg/s320/mix09swag.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5314266402599012082" /&gt;&lt;/a&gt;&lt;p&gt;Not pictured: a fairly innocuous black tote bag (a welcome change from the white-tarp-purses from last year), and a black T-shirt. No berets this year (yet).&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.hubdub.com/m35991/Will_Microsoft_release_IE8_at_MIX09"&gt;Will Microsoft release IE8 at MIX09? | Hubdub&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-6317082329731971499?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/6317082329731971499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=6317082329731971499' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6317082329731971499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6317082329731971499'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/03/mix09-swag-initial.html' title='MIX09 swag (initial)'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_8mr1RHUNECA/ScARIxC1BvI/AAAAAAAAB7g/-0jfVY62VCg/s72-c/mix09swag.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-8294144926499711436</id><published>2009-03-15T10:38:00.001-07:00</published><updated>2009-03-15T10:49:13.118-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='tsa-bs'/><title type='text'>TSA: They don't know, either</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8mr1RHUNECA/Sb0_cmIyPTI/AAAAAAAAB7A/qo1ptwuCJb4/s1600-h/tsa-doesnt-know-why-either.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 328px;" src="http://4.bp.blogspot.com/_8mr1RHUNECA/Sb0_cmIyPTI/AAAAAAAAB7A/qo1ptwuCJb4/s400/tsa-doesnt-know-why-either.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5313472895873334578" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-8294144926499711436?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/8294144926499711436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=8294144926499711436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8294144926499711436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8294144926499711436'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/03/tsa-they-dont-know-either.html' title='TSA: They don&apos;t know, either'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_8mr1RHUNECA/Sb0_cmIyPTI/AAAAAAAAB7A/qo1ptwuCJb4/s72-c/tsa-doesnt-know-why-either.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-7312985403368454183</id><published>2009-03-03T07:53:00.001-08:00</published><updated>2009-03-03T08:01:17.663-08:00</updated><title type='text'>A warm, moist USB coccoon</title><content type='html'>&lt;p&gt;Mummify yourself with USB warmers:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.engadget.com/2007/12/16/usb-hand-warmer-keeps-your-digits-toasty/" target="_blank"&gt;USB Hand Warmer keeps your digits toasty - Engadget&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://qream.vox.com/library/post/6a00fa96934d2e00020109d0ece845000f.html" target="_blank"&gt;USB Monkey Hand Warmer Is For Your Hands, Not Monkey's [USB] - Vox&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www2.meritline.com/usb-lovely-massage-with-warmer---p-31393.aspx" target="_blank"&gt;MERITLINE.COM - USB Lovely Hand Warmer and Massager&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.redferret.net/?p=11464" target="_blank"&gt;USB Warmer Mouse Pad - global warming? Meet Mr Credit Crunch - The Red Ferret Journal&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nexus404.com/Blog/2008/09/22/the-usb-fish-hand-and-mousepad-warmer-is-bizarre/" target="_blank"&gt;The USB Fish Hand And Mousepad Warmer Is Bizarre! » TFTS - Technology, Gadgets &amp;amp; Curiosities&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.raremonoshop.com/products/healing/usb-eye-warmer.html" target="_blank"&gt;RareMonoShop.com by Thanko Corporation - USB Eye Warmer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://craziestgadgets.com/2009/01/12/usb-powered-heated-eye-warmer-sleepmask-thing-wtf/" target="_blank"&gt;USB Powered Heated Eye Warmer Sleepmask Thing WTF?! » CraziestGadgets.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.kittyhell.com/2007/02/19/hello-kitty-usb-lap-warmer/" target="_blank"&gt;Hello Kitty USB Lap Warmer - Hello Kitty Hell&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Blue-Brown-Warmer-Glove-Black/dp/B001J0PE0Q" target="_blank"&gt;Amazon.com: USB Warmer Glove Black: Health &amp;amp; Personal Care&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.thanko.cn/English/ProductView.asp?ID=69&amp;amp;SortID=24" target="_blank"&gt;ThanKo Electronics Product Website-USB Warmer Gloves&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.meritline.com/xmas-bear-usb-hand-warmer-glove.html" target="_blank"&gt;Xmas Bear USB hand Warmer glove, Free Standard Shipping&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gizmodiva.com/other_stuff/thanko_introduces_new_usb_wrist_warming_strap.php" target="_blank"&gt;Thanko introduces new USB Wrist warming Strap&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://xo.typepad.com/blog/2008/08/usb-foot-warmer.html" target="_blank"&gt;A Welsh View: USB Foot Warmer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.chinatraderonline.com/USB-Series/USB-Warmer/usb-warm-shoes-100433184.htm" target="_blank"&gt;wholesale usb warm shoes-buy discount usb warm shoes made in China&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://inventorspot.com/USB_warmer_cushion_heat_seat" target="_blank"&gt;The USB Warmer Cushion Brings Heat To Your Seat&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.usbfever.com/index_eproduct_view.php?products_id=633" target="_blank"&gt;USB Infra-Red Warmer Mouse&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://hawtymcbloggy.com/2007/10/21/four-body-warmers-to-plug-into-your-xbox-360/" target="_blank"&gt;Four Body Warmers to Plug Into Your Xbox 360 « Hawty McBloggy Invites You to Play&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ubergizmo.com/15/archives/2008/10/flowershaped_usb_fragrance_oil_warmer.html" target="_blank"&gt;Flower-shaped USB Fragrance Oil Warmer&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Plus, there seem to be a huge amount of USB mug warmers:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;a href="http://www.sz-wholesale.com/shenzhen_China_products/USB-Hub-Warmer_1.htm" target="_blank"&gt;USB Hub Warmer , China Wholesale USB Hub Warmer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.vat19.com/dvds/usb-warmer-cooler.cfm" target="_blank"&gt;USB Beverage Cup Warmer &amp;amp; Cooler keeps coffee warm and soda cool.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.coolest-gadgets.com/20081218/the-usb-gas-stove-cup-warmer/" target="_blank"&gt;The USB Gas Stove Cup Warmer » Coolest Gadgets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.brilliantstore.com/computer_usb_accessories_dekcell_cpa_1020.html" target="_blank"&gt;Dekcell USB Powered Beverage/Coffee Warmer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://lifehacker.com/software/stuff-we-like/usb-coffee-warmer-149297.php" target="_blank"&gt;Stuff We Like: USB Coffee Warmer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cyberguys.com/templates/SearchDetail.asp?productID=9959" target="_blank"&gt;Cyberguys.com      - Ziotek USB Cup Warmer White ZT1420909&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.therawfeed.com/2007/11/worst-usb-gadget-yet-clock-coffee.html" target="_blank"&gt;The      Raw Feed: Worst USB Gadget Yet: Coffee Warmer Hub Clock&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.chinatraderonline.com/USB-Series/USB-Warmer/" target="_blank"&gt;wholesale      USB Warmer - novelty USB Warmer China&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;It's almost as if sticking a heating element on a 5V power supply isn't all that difficult.&lt;/p&gt;  &lt;p&gt;Also, there must be quite a few cold offices out there.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-7312985403368454183?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/7312985403368454183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=7312985403368454183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7312985403368454183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7312985403368454183'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/03/warm-moist-usb-cocoon.html' title='A warm, moist USB coccoon'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-7035436550662340421</id><published>2009-02-27T11:44:00.000-08:00</published><updated>2009-02-27T12:23:29.336-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mythtv'/><title type='text'>New MCE Remote: nmediapc HTPCKB</title><content type='html'>&lt;p&gt;My new &lt;a href="http://www.nmediapc.com/RFKB3.htm"&gt;2.4GHz RF Wireless Keyboard with Track Ball &amp;amp; Remote Combo Set&lt;/a&gt; is intended for a Windows MCE system, but my intent is to get it working with my MythTV setup. So far, only a few buttons on the remote work with Mythbuntu (the keyboard is just a wireless USB keyboard), but here are the details I've gathered so far:&lt;/p&gt;&lt;table cellspacing="0"&gt;&lt;tbody&gt; &lt;tr style="border-top: 3px solid rgb(0, 0, 0); border-bottom: 1px solid rgb(0, 0, 0);background:#CDCDCD;font-weight:bold;font-family:FreeMono;"&gt; &lt;td&gt;Button&lt;/td&gt; &lt;td&gt;showkey&lt;/td&gt; &lt;td&gt;showkey -s&lt;/td&gt; &lt;td&gt;xev&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;☒ Close&lt;/td&gt; &lt;td&gt;56+62&lt;/td&gt; &lt;td&gt;&lt;samp&gt;38 36 B8 BE&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;(closes xev)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Power&lt;/td&gt; &lt;td&gt;142&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 5F E0 DF&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;My TV&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;&lt;samp&gt;&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;My Music&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;&lt;samp&gt;&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;My Picture [sic]&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;&lt;samp&gt;&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;My Video&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;&lt;samp&gt;&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Live TV&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;&lt;samp&gt;&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Recorded TV&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;&lt;samp&gt;&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Guide&lt;/td&gt; &lt;td&gt;362&lt;/td&gt; &lt;td&gt;&lt;samp&gt;&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;DVD Memu [sic]&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;&lt;samp&gt;&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;MCE Button&lt;/td&gt; &lt;td&gt;56,125,28&lt;/td&gt; &lt;td&gt;&lt;samp&gt;38 B8 E0 5B E0 DB 1C 9C&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;Alt_L,Super_L,Return&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Volume +&lt;/td&gt; &lt;td&gt;115&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 30 E0 B0&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Volume -&lt;/td&gt; &lt;td&gt;114&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 2E E0 AE&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Channel +&lt;/td&gt; &lt;td&gt;104&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 49 E0 C9&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;Prior&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Channel -&lt;/td&gt; &lt;td&gt;109&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 51 E0 D1&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;Next&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;OK / Enter&lt;/td&gt; &lt;td&gt;28&lt;/td&gt; &lt;td&gt;&lt;samp&gt;1C 9C&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;Return&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;← Back / Clear&lt;/td&gt; &lt;td&gt;14&lt;/td&gt; &lt;td&gt;&lt;samp&gt;0E 8E&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;BackSpace&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;i Info&lt;/td&gt; &lt;td&gt;130&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 06 E0 86&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;SunProps&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;▲&lt;/td&gt; &lt;td&gt;103&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 48 E0 C8&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;Up&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;►&lt;/td&gt; &lt;td&gt;106&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 4D E0 CD&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;Right&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;▼&lt;/td&gt; &lt;td&gt;108&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 50 E0 D0&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;Down&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;◄&lt;/td&gt; &lt;td&gt;105&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 4B E0 CB&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;Left&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;○ Record&lt;/td&gt; &lt;td&gt;29+19&lt;/td&gt; &lt;td&gt;&lt;samp&gt;1D 13 9D 93&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;Control_L+p&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;■ Stop&lt;/td&gt; &lt;td&gt;166&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 24 E0 A4&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;▶/▮▮ Play/Pause&lt;/td&gt; &lt;td&gt;164&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 22 E0 A2&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;◄◄ Rewind&lt;/td&gt; &lt;td&gt;168&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 18 E0 98&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;XF86AudioRewind&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;►► Fast Forward&lt;/td&gt; &lt;td&gt;208&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 34 E0 B4&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;XF86Forward&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;|◂ Previous&lt;/td&gt; &lt;td&gt;29+48&lt;/td&gt; &lt;td&gt;&lt;samp&gt;1D 30 9D B0&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;Control_L+x&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;▸| Next&lt;/td&gt; &lt;td&gt;163&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 19 E0 99&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Mute&lt;/td&gt; &lt;td&gt;113&lt;/td&gt; &lt;td&gt;&lt;samp&gt;E0 20 E0 A0&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;1&lt;/td&gt; &lt;td&gt;79&lt;/td&gt; &lt;td&gt;&lt;samp&gt;4F CF&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;KP_End&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;2&lt;/td&gt; &lt;td&gt;80&lt;/td&gt; &lt;td&gt;&lt;samp&gt;50 D0&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;KP_Down&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;3&lt;/td&gt; &lt;td&gt;81&lt;/td&gt; &lt;td&gt;&lt;samp&gt;51 D1&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;KP_Next&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;4&lt;/td&gt; &lt;td&gt;75&lt;/td&gt; &lt;td&gt;&lt;samp&gt;4B CB&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;KP_Left&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;5&lt;/td&gt; &lt;td&gt;76&lt;/td&gt; &lt;td&gt;&lt;samp&gt;4C CC&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;KP_Begin&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;6&lt;/td&gt; &lt;td&gt;77&lt;/td&gt; &lt;td&gt;&lt;samp&gt;4D CD&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;KP_Right&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;7&lt;/td&gt; &lt;td&gt;71&lt;/td&gt; &lt;td&gt;&lt;samp&gt;47 C7&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;KP_Home&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;8&lt;/td&gt; &lt;td&gt;72&lt;/td&gt; &lt;td&gt;&lt;samp&gt;48 C8&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;KP_Up&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;9&lt;/td&gt; &lt;td&gt;73&lt;/td&gt; &lt;td&gt;&lt;samp&gt;49 C9&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;KP_Prior&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;*&lt;/td&gt; &lt;td&gt;55&lt;/td&gt; &lt;td&gt;&lt;samp&gt;37 B7&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;*&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;0&lt;/td&gt; &lt;td&gt;82&lt;/td&gt; &lt;td&gt;&lt;samp&gt;52 D2&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;KP_Insert&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;#&lt;/td&gt; &lt;td&gt;42+4&lt;/td&gt; &lt;td&gt;&lt;samp&gt;2A 04 AA 84&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;#&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Num Lock&lt;/td&gt; &lt;td&gt;69&lt;/td&gt; &lt;td&gt;&lt;samp&gt;45 C5&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;Num_Lock&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Clear / ← Back&lt;/td&gt; &lt;td&gt;14&lt;/td&gt; &lt;td&gt;&lt;samp&gt;0E 8E&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;BackSpace&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Enter / OK&lt;/td&gt; &lt;td&gt;28&lt;/td&gt; &lt;td&gt;&lt;samp&gt;1C 9C&lt;/samp&gt;&lt;/td&gt; &lt;td&gt;Return&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;The keyboard and mouse are a step up from my previous setup, since they are both &lt;abbr title="radio frequency"&gt;RF&lt;/abbr&gt; rather than &lt;abbr title="infra-red"&gt;IR&lt;/abbr&gt;, and the remote is considered a keyboard, so no lirc configuration is needed. Best of all, there is a trackball in the remote, so I don't need to drag out the keyboard to watch web TV.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-7035436550662340421?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/7035436550662340421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=7035436550662340421' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7035436550662340421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7035436550662340421'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/02/new-mce-remote-nmediapc-htpckb.html' title='New MCE Remote: nmediapc HTPCKB'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-4164737792191437870</id><published>2009-02-04T10:20:00.000-08:00</published><updated>2009-02-04T21:21:20.278-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><title type='text'>Show your Google Calendar in your sidebar (without a separate file)</title><content type='html'>&lt;ins datetime="20090204T2115"&gt;&lt;p style="border:1px dotted black"&gt;&lt;strong&gt;Update:&lt;/strong&gt; I guess it &lt;em&gt;would&lt;/em&gt; just be easier to simply bookmark the URL in the &lt;code&gt;src&lt;/code&gt; attribute after step 2, and mark &lt;em&gt;that&lt;/em&gt; to load in the sidebar.&lt;/p&gt;&lt;/ins&gt;&lt;p&gt;Inspired by the Lifehacker article &lt;a href="http://lifehacker.com/software/step-by-step/display-your-gcal-agenda-in-firefoxs-sidebar-308427.php#c"&gt;Step By Step: Display Your GCal Agenda in Firefox's Sidebar&lt;/a&gt;, I've improved the process by using a &lt;code&gt;data:&lt;/code&gt; URL instead of an external file.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;In Google Calendar, go to Settings for your calendar, then click the "Customize the color, size, and other options" link to enter the calendar customization tool.&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8mr1RHUNECA/SYng6IrnADI/AAAAAAAAB1o/0vToJdl2ccY/s1600-h/01_custom_link.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 59px;" src="http://3.bp.blogspot.com/_8mr1RHUNECA/SYng6IrnADI/AAAAAAAAB1o/0vToJdl2ccY/s320/01_custom_link.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5299013725945528370" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Choose "Agenda" View, and otherwise configure the calendar however you wish. Just leave the height and width at the default values.&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8mr1RHUNECA/SYnggA3iNXI/AAAAAAAAB1g/X57mBE2oq1Y/s1600-h/02_config.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 289px; height: 320px;" src="http://2.bp.blogspot.com/_8mr1RHUNECA/SYnggA3iNXI/AAAAAAAAB1g/X57mBE2oq1Y/s320/02_config.png" border="0" alt="Configure the embedded calendar" id="BLOGGER_PHOTO_ID_5299013277171463538" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Copy the HTML code.&lt;/li&gt;&lt;li&gt;Head over to &lt;a href="http://software.hixie.ch/utilities/cgi/data/data"&gt;The data: URI kitchen&lt;/a&gt; and paste in the HTML code.&lt;/li&gt;&lt;li&gt;Make the following changes:&lt;ul&gt;&lt;li&gt;Check the "base 64" checkbox.&lt;/li&gt;&lt;li&gt;Change &lt;code style="color:infotext;background:infobackground;border:1px dotted threedface;"&gt;src="//&lt;/code&gt; to &lt;code style="color:infotext;background:infobackground;border:1px dotted threedface;"&gt;src="&lt;strong&gt;http:&lt;/strong&gt;//&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Paste the following just after &lt;code style="color:infotext;background:infobackground;border:1px dotted threedface;"&gt;scrolling="no"&lt;/code&gt; and just before &lt;code style="color:infotext;background:infobackground;border:1px dotted threedface;"&gt;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/code&gt;:&lt;div&gt;&lt;code style="color:infotext;background:infobackground;border:1px dotted threedface;"&gt; onload="var c=this;c.style.height=window.innerHeight-16;c.style.width=window.innerWidth-16;c.onload=null;window.onresize=function(){c.style.height=window.innerHeight-16;c.style.width=window.innerWidth-16;}"&lt;/code&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Click the Generate button.&lt;/li&gt;&lt;li&gt;Your calendar should appear, filling the page. Bookmark it.&lt;/li&gt;&lt;li&gt;In the Properties for this bookmark, check the "Load this bookmark in the sidebar" checkbox.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Now, you can just click the bookmark to open the Google Calendar in your sidebar!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-4164737792191437870?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/4164737792191437870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=4164737792191437870' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4164737792191437870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4164737792191437870'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2009/02/show-your-google-calendar-in-your.html' title='Show your Google Calendar in your sidebar (without a separate file)'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_8mr1RHUNECA/SYng6IrnADI/AAAAAAAAB1o/0vToJdl2ccY/s72-c/01_custom_link.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-7320042482992532152</id><published>2008-12-23T17:40:00.000-08:00</published><updated>2008-12-23T19:20:06.733-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>Last minute gift idea: support a podcast with a donation</title><content type='html'>&lt;p&gt;Support a great podcast in someone else's name:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://cayenne.libsyn.com/"&gt;- TEKDIFF (teknikal diffikulties)-&lt;/a&gt; featuring &lt;cite&gt;The Account&lt;/cite&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="All new, full-length, full-cast aduio drama in the tradition of the great programs of old-time radio. The thrilling exploits of Canada's Greatest Superhero - The Red Panda! Two-fisted mystery with Black Jack Justice! All this and much more for free download." href="http://www.decoderringtheatre.com/"&gt;Decoder Ring Theatre&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://escapepod.org/"&gt;Escape Pod&lt;/a&gt; and &lt;a href="http://podcastle.org/"&gt;PodCastle&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="The Moth is a New York City based nonprofit organization that conducts live storytelling events." href="http://www.themoth.org/sponsor"&gt;The Moth&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;hellip;especially public radio, which seems to be the backbone of podcasting:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a title="NPR is an internationally acclaimed producer and distributor of noncommercial news, talk, and entertainment programming." href="http://www.npr.org/"&gt;NPR : National Public Radio&lt;/a&gt; (&lt;a title="Peter Sagal and Carl Kasell host the weekly NPR News quiz show alongside some of the best and brightest news and entertainment personalities. " href="http://www.npr.org/templates/rundowns/rundown.php?prgId=35&amp;amp;ft=2&amp;amp;f=35"&gt;Wait Wait...Don't Tell Me!&lt;/a&gt;, &lt;a href="http://www.cartalk.com/?ft=2&amp;amp;f=510208"&gt;Car Talk&lt;/a&gt;, &lt;a href="http://www.npr.org/blogs/money/?ft=2&amp;amp;f=510289"&gt;Planet Money&lt;/a&gt;, &lt;a href="http://www.npr.org/rss/podcast/podcast_detail.php?siteId=6145828"&gt;Playback&lt;/a&gt;, &lt;a title="If you love music and love finding great artists none of your friends probably know about, then spend some time with Second Stage.  It's where we share the best of the great unknown artists we're hearing each weekday." href="http://www.npr.org/templates/story/story.php?storyId=15466058&amp;amp;ft=2&amp;amp;f=15466058"&gt;Second Stage&lt;/a&gt;, &lt;a title="All Songs Considered is the place to discover music.  The acclaimed weekly program – available as streaming audio, a podcast and a broadcast – melds contemporary music, live concerts, videos and artist interviews to offer a truly eclectic music mix." href="http://www.npr.org/templates/rundowns/rundown.php?prgId=37&amp;amp;agg=1"&gt;All Songs Considered&lt;/a&gt;, and &lt;a href="http://npr.org/podcasts"&gt;many others&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://subscribe.kcrw.com/subscribe.php"&gt;KCRW&lt;/a&gt; (&lt;a title="A daily eclectic and dynamic musical adventure." href="http://www.kcrw.com/music/programs/mb"&gt;Morning Becomes Eclectic&lt;/a&gt;, &lt;a title="A free song a day, from KCRW's all Music Channel." href="http://www.kcrw.com/music/programs/tu"&gt;Today's Top Tune&lt;/a&gt;, and &lt;a href="http://www.kcrw.com/podcasts"&gt;others&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="https://secure.publicbroadcasting.net/kplu/default/form.pledgemain?action=pledge&amp;amp;pg=pledgeForm"&gt;KPLU&lt;/a&gt; (&lt;a href="http://www.kplu.org/wilke.html"&gt;Jim Wilke's Jazz NW&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://minnesota.publicradio.org/support/"&gt;MPR&lt;/a&gt; (&lt;a href="http://minnesota.publicradio.org/radio/podcasts/song_of_the_day/"&gt;The Current Song of the Day&lt;/a&gt; and &lt;a href="http://minnesota.publicradio.org/radio/podcasts/"&gt;others&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="https://secure2.convio.net/wbez/site/Donation2?2740.donation=form1&amp;amp;df_id=2740"&gt;WBEZ Chicago Public Radio&lt;/a&gt; (&lt;a title="This American Life, presented by Chicago Public Radio, is an award-winning radio program as well as a television program on the Showtime network. Hosted by Ira Glass, we feature first-person stories and short fiction pieces that are touching, funny, and surprising. Regular contributors include David Sedaris, Sarah Vowell, David Rakoff, Dan Savage, John Hodgman, Jonathan Goldstein, and Chris Ware." href="http://www.thisamericanlife.org/"&gt;This American Life&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.wmpg.org/"&gt;WMPG - Greater Portland Community Radio&lt;/a&gt; (&lt;a title="Contemporary audio drama never sounded so good!  Feast your ears on a good story on the weekly podcast, Radio Drama Revival." href="http://www.radiodramarevival.com/"&gt;Radio Drama Revival&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a title="" href="http://www.wnyc.org/support/"&gt;WNYC&lt;/a&gt; (&lt;a href="http://blogs.wnyc.org/radiolab/"&gt;Radiolab&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-7320042482992532152?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/7320042482992532152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=7320042482992532152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7320042482992532152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7320042482992532152'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/12/last-minute-gift-idea-support-podcast.html' title='Last minute gift idea: support a podcast with a donation'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-1310330492062064953</id><published>2008-10-28T07:23:00.000-07:00</published><updated>2008-10-28T14:29:38.859-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='spam'/><title type='text'>I don't read Russian</title><content type='html'>&lt;p&gt;A great deal of Cyrillic spam has made it into my various inboxes lately. I don't read Russian, so I'd sure like to be able to configure my email accounts to not accept stuff I cannot read, but this isn't an option&amp;#x203D;&lt;/p&gt;&lt;p&gt;Configuring acceptable languages has been an underused but nonetheless available feature of HTTP for at least a dozen years. Why can't &lt;abbr href='http://en.wikipedia.org/wiki/Mail_transfer_agent' title='mail transfer agent'&gt;MTA&lt;/abbr&gt;s be configured to look for character encodings that the user cannot use? This would be a simple, straightforward solution to most of the spam that somehow currently makes it through my filters.&lt;/p&gt;&lt;ins datetime='20081028T1430' title='Added 2:30 PM, Tue Oct 28, 2008'&gt;&lt;p&gt;&lt;strong&gt;Update: &lt;/strong&gt;Other languages I don't read include: Farsi, Chinese, Arabic, Korean, Georgian, and Japanese. The fault lies in myself, sure, but I need an MTA that can say &lt;q style="quotes:'\201C' '\201D'"&gt;Let me just stop you there.&lt;/q&gt; before an opaque message is relayed.&lt;/p&gt;&lt;/ins&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-1310330492062064953?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/1310330492062064953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=1310330492062064953' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1310330492062064953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1310330492062064953'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/10/i-dont-read-russian.html' title='I don&apos;t read Russian'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-3212581486322957633</id><published>2008-10-21T22:15:00.000-07:00</published><updated>2008-10-28T14:30:15.575-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='rockbox'/><title type='text'>Rockbox podcast cover art</title><content type='html'>&lt;p&gt;The fastest way to add cover art to a podcast folder on an MP3 player running &lt;a href="http://rockbox.org/"&gt;Rockbox&lt;/a&gt;:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Browse to the raw feed using Firefox&lt;/li&gt;&lt;li&gt;Press Ctrl+U&lt;/li&gt;&lt;li&gt;Type &lt;kbd&gt;/:im&lt;/kbd&gt; (this finds the Apple iTunes image tag, the best image to use for the podcast)&lt;/li&gt;&lt;li&gt;Copy the URL of the iTunes cover art image&lt;/li&gt;&lt;li&gt;In a bash terminal window, in the podcast directory, type &lt;kbd&gt;wget `xclip -o -d` ; convert *.jpg -resize 100x100 cover.bmp ; rm *.jpg&lt;/kbd&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;You'll need to be using Linux, and have xclip and convert installed, of course.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-3212581486322957633?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/3212581486322957633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=3212581486322957633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3212581486322957633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3212581486322957633'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/10/rockbox-podcast-cover-art.html' title='Rockbox podcast cover art'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-6349188618054134435</id><published>2008-09-03T07:25:00.000-07:00</published><updated>2008-10-22T08:28:15.801-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>User Agent Web Of Lies: Where Does It End?</title><content type='html'>&lt;p&gt;Internet Explorer started it by lying in its user agent string, claiming to be Mozilla (meaning Netscape 4). It got worse with Opera claiming to be both Mozilla and MSIE. Safari included both Mozilla and Gecko (meaning Firefox, et al.) in its UA string. But now, Chrome mentions Mozilla, Gecko, &lt;em&gt;and&lt;/em&gt; Safari/WebKit. Will someone please put a stop to this nonsense? Anyone still using a user agent string to select functionality deserves to be hung and drawn and quartered and whipped and boiled and chopped into little bits, then to have those bits jumped on. This snowballing user agent string business just serves to make HTTP slower, make web logs bigger, and parsing logs much more tedious.&lt;/p&gt;&lt;h4&gt;Google Chrome User Agent String&lt;/h4&gt;&lt;p&gt;&lt;samp&gt;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13&lt;/samp&gt;&lt;/p&gt;&lt;ins datetime="20080908T1717" title="Added 5:17pm Sep 8, 2008"&gt;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: There's a great summary of the history of the user agent string at &lt;a href="http://www.webaim.org/blog/user-agent-string-history/"&gt;WebAIM: Blog - History of the browser user-agent string&lt;/a&gt;.&lt;/p&gt;&lt;/ins&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-6349188618054134435?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/6349188618054134435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=6349188618054134435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6349188618054134435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6349188618054134435'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/09/user-agent-web-of-lies-where-does-it.html' title='User Agent Web Of Lies: Where Does It End?'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-3509916347810837934</id><published>2008-08-25T10:53:00.000-07:00</published><updated>2008-08-25T10:57:43.043-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><title type='text'>Roundup: XP performance vs. Vista</title><content type='html'>&lt;p&gt;I dug a bit into some anecdotal reports I had heard about XP vs. Vista. It turns out XP performance beats Vista: 32- or 64-bit, service packs or no, in a box or with a fox, in a house or with a mouse.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a title="Benchtest: Windows XP SP3 vs. Windows Vista SP1 Does the new Vista service pack solve its problems, or should you update XP instead? : TechRadar UK" href="http://www.techradar.com/news/computing/pc/benchtest-windows-xp-sp3-vs-windows-vista-sp1-395324"&gt;Benchtest: Windows XP SP3 vs. Windows Vista SP1 | News | TechRadar UK&lt;/a&gt; &amp;mdash; &lt;small&gt;Jun 23, 2008&lt;/small&gt; &amp;mdash; &lt;small&gt;&lt;q&gt;787MB is an absolutely ludicrous amount for a system to swallow from a fresh boot of a new installation. Windows XP squeezes itself into just one fifth the space.&lt;/q&gt;&lt;/small&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="" href="http://www.vista123.net/content/xp-vista-sp1-2008-x86-and-x64-benchmark"&gt;XP Vista SP1 2008 x86 and x64 benchmark | Vista Home&lt;/a&gt; [&lt;a href="http://www.imagebam.com/image/9786675364575"&gt;graph&lt;/a&gt;] &amp;mdash; &lt;small&gt;Apr 28, 2008&lt;/small&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="Microsoft is on course to end-of-life Windows XP - - even as testing still shows its got the upper hand over Vista. " href="http://www.crn.com/software/207001890"&gt;Testing Shows XP Still Outperforms Vista - Software - IT Channel News by CRN and VARBusiness&lt;/a&gt; &amp;mdash; &lt;small&gt;Apr 04, 2008&lt;/small&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="" href="http://exo-blog.blogspot.com/2007/11/update-re-testing-vista-w2gb-ram-office.html"&gt;exo.blog: Update: Re-Testing Vista w/2GB RAM, Office 2003&lt;/a&gt; &amp;mdash; &lt;small&gt;Nov 27, 2007&lt;/small&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="Vista with the beta Service Pack 1 fails to keep pace with its predecessor in a series of productivity tasks using the Office 2007 software. A CNET article by Suzanne Tindal, Special to CNET News.com. Published on November 27, 2007 5:13 AM PST." href="http://news.cnet.com/Windows-XP-outshines-Vista-in-benchmarking-test/2100-1016_3-6220201.html"&gt;Windows XP outshines Vista in benchmarking test - CNET News.com&lt;/a&gt; &amp;mdash; &lt;small&gt;Nov 27, 2007&lt;/small&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="Benchmark Results Windows XP vs. Vista: The Benchmark Rundown : 3D Games " href="http://www.tomshardware.com/reviews/xp-vs-vista,1531-4.html"&gt;Benchmark Results - Tom's Hardware : Windows XP vs. Vista: The Benchmark Rundown&lt;/a&gt; &amp;mdash; &lt;small&gt;Jan 29, 2007&lt;/small&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Sure, it's doing &lt;em&gt;more&lt;/em&gt;, but is it doing more &lt;em&gt;good&lt;/em&gt;? &lt;a title="Does Vista have what it takes to knock XP off the enterprise desktop? Not by our scorecard. Point by point and blow by blow, we offer 10 reasons enterprises can skip Windows Vista and stick with XP" href="http://www.infoworld.com/article/08/03/17/12TC-vista-versus-xp_1.html"&gt;Death match: Windows Vista versus XP | InfoWorld | Analysis | 2008-03-17 | By Randall C. Kennedy&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-3509916347810837934?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/3509916347810837934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=3509916347810837934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3509916347810837934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3509916347810837934'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/08/roundup-xp-performance-vs-vista.html' title='Roundup: XP performance vs. Vista'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-1466909106813541531</id><published>2008-08-14T09:38:00.000-07:00</published><updated>2008-08-14T09:47:30.604-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='dotnet'/><title type='text'>.NET 3.5 sp1 Setup Blocks Itself!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8mr1RHUNECA/SKRf7oV9r0I/AAAAAAAAAFA/9knOU1T1RAk/s1600-h/SetupBlocksSetup.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_8mr1RHUNECA/SKRf7oV9r0I/AAAAAAAAAFA/9knOU1T1RAk/s320/SetupBlocksSetup.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5234414144957820738" /&gt;&lt;/a&gt;&lt;p&gt;Um&amp;hellip; ooooooooooooo-kay&amp;hellip; &lt;em&gt;that&lt;/em&gt; seems a bit &lt;em&gt;meta&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;I guess I'll click &lt;em&gt;Ignore&lt;/em&gt;? Oh look, the progress bar is going backwards. I guess it's a Regress Bar.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-1466909106813541531?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/1466909106813541531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=1466909106813541531' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1466909106813541531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1466909106813541531'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/08/net-35-sp1-setup-blocks-itself.html' title='.NET 3.5 sp1 Setup Blocks Itself!'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_8mr1RHUNECA/SKRf7oV9r0I/AAAAAAAAAFA/9knOU1T1RAk/s72-c/SetupBlocksSetup.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-7179976169470524559</id><published>2008-08-06T11:54:00.000-07:00</published><updated>2008-08-06T13:59:07.001-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dotnet'/><title type='text'>Efficacy of .NET StreamReader's detectEncodingFromByteOrderMarks</title><content type='html'>&lt;p&gt;The .NET &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.streamreader.aspx"&gt;&lt;code&gt;System.IO.StreamReader&lt;/code&gt;&lt;/a&gt; class has &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.streamreader.streamreader.aspx"&gt;several forms&lt;/a&gt; of its constructor that accept a &lt;a href="http://msdn.microsoft.com/en-us/library/9y86s1a9.aspx"&gt;boolean &lt;code&gt;detectEncodingFromByteOrderMarks&lt;/code&gt;&lt;/a&gt; parameter to look for a &lt;a href="http://en.wikipedia.org/wiki/Byte-order_mark"&gt;byte-order-mark (BOM)/encoding-signature&lt;/a&gt; when the file is first read.&lt;/p&gt;&lt;p&gt;When enabled, this feature populates the &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.streamreader.currentencoding.aspx"&gt;&lt;code&gt;CurrentEncoding&lt;/code&gt;&lt;/a&gt; property after the first time the file is read (which can be a simple call to &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.streamreader.peek.aspx"&gt;&lt;code&gt;Peek()&lt;/code&gt;&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;This method only works reliably for encodings that supply a BOM, but since the default encoding is &lt;code&gt;utf-8&lt;/code&gt;, several other single-byte encodings are compatible with content in the 7-bit ASCII range.&lt;/p&gt;&lt;p&gt;Here is a sample of how well this feature works with content written in various encodings:&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;us-ascii&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Not detected, but works fine with the default UTF-8 since ASCII is a subset of UTF-8.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;utf-7&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Not detected, not UTF-8 compatible.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;utf-8&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Detected correctly. Default encoding anyway.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;utf-16&lt;/code&gt;/&lt;code&gt;UCS-2&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Detected correctly (as &lt;code&gt;utf-16&lt;/code&gt;).&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;utf-32&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Detected correctly.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;utf-32BE&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Detected correctly, but &lt;strong&gt;still reads incorrectly&lt;/strong&gt; in my testing!&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;unicodeFFFE&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Detected correctly.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;Windows-1252&lt;/code&gt;, &lt;code&gt;iso-8859-1&lt;/code&gt;, &lt;code&gt;iso-8859-15&lt;/code&gt;, &lt;code&gt;macintosh&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Not detected, but shares a significant character overlap with the UTF-8 default (7-bit ASCII).&lt;/dd&gt;&lt;dt&gt;Various EBCDIC encodings: &lt;code&gt;IBM037&lt;/code&gt;, &lt;code&gt;IBM500&lt;/code&gt;, &lt;code&gt;IBM870&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Not detected, and not read correctly in tests.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;UTF-EBCDIC&lt;/code&gt;, &lt;code&gt;SCSU&lt;/code&gt;, &lt;code&gt;BOCU-1&lt;/code&gt;, &lt;code&gt;Punycode&lt;/code&gt;, &lt;code&gt;CESU-8&lt;/code&gt;, &lt;code&gt;UCS-4&lt;/code&gt;*, &lt;code&gt;UTF-1&lt;/code&gt;, &lt;code&gt;UTF-9&lt;/code&gt;&amp;dagger;, &lt;code&gt;UTF-18&lt;/code&gt;&amp;dagger;&lt;/dt&gt;&lt;dd&gt;Not supported by the .NET Framework.&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;For the most part, content using a Unicode encoding of some kind (which include a BOM) have the greatest chance of success, and encodings not listed aren't likely to work. EBCDIC and international encodings, among others, must really be opened using their explicit encoding (meaning they must be anticipated), if they are to be read successfully, which is why you should only produce UTF-8/16/32 content.&lt;/p&gt;&lt;div style="margin-top:1cm;font-size:x-small"&gt;&lt;div style="width:1in;border-top:1px solid #333"&gt; &lt;/div&gt;&lt;div&gt;* Not recognized as an alias for UTF-32.&lt;/div&gt;&lt;div&gt;&amp;dagger; To be fair, these encodings are a joke.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-7179976169470524559?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/7179976169470524559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=7179976169470524559' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7179976169470524559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7179976169470524559'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/08/efficacy-of-streamreaders.html' title='Efficacy of .NET StreamReader&apos;s detectEncodingFromByteOrderMarks'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-7223006364632398215</id><published>2008-07-31T10:48:00.000-07:00</published><updated>2011-11-28T08:52:58.264-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><title type='text'>Windows Special Folders Support</title><content type='html'>&lt;p&gt;Windows system/special folders, unlike Linux (which has &lt;a href="http://www.pathname.com/fhs/"&gt;a consistent, reliable filesystem heirarchy&lt;/a&gt;), can be in all kinds of crazy custom locations, or use localized text.&lt;/p&gt;&lt;p&gt;As a consequence, you cannot simply use a path to a special folder. You have to look it up first. Nearly all Microsoft APIs/platforms/technologies provide some way to look up these special folders. What's even more complicated is that these lookups seem to be about as varied as the folder names themselves.&lt;/p&gt;&lt;p&gt;Not only do newer technologies reflect completely new folders, as could be expected, but each API seems to provide access to a different subset of special folders, and use different names/keys for the folders, and sometimes provide multiple partial lists via different methods/lookups/constants. Say you want to look up the location of the Windows Recycle Bin, does your API refer to this as CSIDL_BITBUCKET or FOLDERID_RecycleBinFolder, or does it provide any access to it at all?&lt;/p&gt;&lt;p&gt;This reference aims to provide an overview of whether your API supports a given special folder, and where to look for it.&lt;/p&gt;&lt;h2&gt;Windows Special Folder Environment Variables&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;ALLUSERSPROFILE&lt;/li&gt;&lt;li&gt;APPDATA&lt;/li&gt;&lt;li&gt;CommonProgramFiles&lt;/li&gt;&lt;li&gt;CommonProgramFiles(x86)&lt;/li&gt;&lt;li&gt;CommonProgramFilesW6432&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ProgramFiles&lt;/li&gt;&lt;li&gt;ProgramFiles(x86)&lt;/li&gt;&lt;li&gt;ProgramFilesW6432&lt;br /&gt;&lt;/li&gt;&lt;li&gt;SystemDrive&lt;/li&gt;&lt;li&gt;SystemRoot&lt;/li&gt;&lt;li&gt;TEMP&lt;/li&gt;&lt;li&gt;TMP&lt;/li&gt;&lt;li&gt;USERPROFILE&lt;/li&gt;&lt;li&gt;windir&lt;/li&gt;&lt;/ul&gt;Windows XP Embedded uses &lt;a href="http://msdn.microsoft.com/en-us/library/ms933062.aspx"&gt;numeric environment variables&lt;/a&gt;.&lt;br /&gt;&lt;h2&gt;.NET &lt;a href="http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx"&gt;&lt;code&gt;System.Environment.SpecialFolder&lt;/code&gt;&lt;/a&gt; Enumeration&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;ApplicationData&lt;/li&gt;&lt;li&gt;CommonApplicationData&lt;/li&gt;&lt;li&gt;LocalApplicationData&lt;/li&gt;&lt;li&gt;Cookies&lt;/li&gt;&lt;li&gt;Desktop&lt;/li&gt;&lt;li&gt;Favorites&lt;/li&gt;&lt;li&gt;History&lt;/li&gt;&lt;li&gt;InternetCache&lt;/li&gt;&lt;li&gt;Programs&lt;/li&gt;&lt;li&gt;MyComputer&lt;/li&gt;&lt;li&gt;MyMusic&lt;/li&gt;&lt;li&gt;MyPictures&lt;/li&gt;&lt;li&gt;Recent&lt;/li&gt;&lt;li&gt;SendTo&lt;/li&gt;&lt;li&gt;StartMenu&lt;/li&gt;&lt;li&gt;Startup&lt;/li&gt;&lt;li&gt;System&lt;/li&gt;&lt;li&gt;Templates&lt;/li&gt;&lt;li&gt;DesktopDirectory&lt;/li&gt;&lt;li&gt;Personal&lt;/li&gt;&lt;li&gt;MyDocuments&lt;/li&gt;&lt;li&gt;ProgramFiles&lt;/li&gt;&lt;li&gt;CommonProgramFiles&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;.NET &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.path.aspx"&gt;&lt;code&gt;System.IO.Path&lt;/code&gt;&lt;/a&gt; Methods&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;GetTempPath()&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Windows Scripting Host &lt;a href="http://msdn.microsoft.com/en-us/library/0ea7b5xe%28VS.85%29.aspx"&gt;&lt;code&gt;WshShell.SpecialFolders&lt;/code&gt;&lt;/a&gt; Collection&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;AllUsersDesktop &lt;/li&gt;&lt;li&gt;AllUsersStartMenu &lt;/li&gt;&lt;li&gt;AllUsersPrograms &lt;/li&gt;&lt;li&gt;AllUsersStartup &lt;/li&gt;&lt;li&gt;Desktop &lt;/li&gt;&lt;li&gt;Favorites &lt;/li&gt;&lt;li&gt;Fonts &lt;/li&gt;&lt;li&gt;MyDocuments &lt;/li&gt;&lt;li&gt;NetHood &lt;/li&gt;&lt;li&gt;PrintHood &lt;/li&gt;&lt;li&gt;Programs &lt;/li&gt;&lt;li&gt;Recent &lt;/li&gt;&lt;li&gt;SendTo &lt;/li&gt;&lt;li&gt;StartMenu &lt;/li&gt;&lt;li&gt;Startup &lt;/li&gt;&lt;li&gt;Templates&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Windows Scripting Host &lt;a href="http://msdn.microsoft.com/en-us/library/a72y2t1c%28VS.85%29.aspx"&gt;&lt;code&gt;FileSystemObject.GetSpecialFolder()&lt;/code&gt;&lt;/a&gt; Method Parameters&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;SystemFolder&lt;/li&gt;&lt;li&gt;TemporaryFolder&lt;/li&gt;&lt;li&gt;WindowsFolder&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Windows CLSID GUIDs&lt;/h2&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Administrative Tools&lt;/td&gt;&lt;td&gt;&lt;code&gt;{D20EA4E1-3957-11d2-A40B-0C5020524153}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Briefcase&lt;/td&gt;&lt;td&gt;&lt;code&gt;{85BBD920-42A0-1069-A2E4-08002B30309D}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Control Panel&lt;/td&gt;&lt;td&gt;&lt;code&gt;{21EC2020-3AEA-1069-A2DD-08002B30309D}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fonts&lt;/td&gt;&lt;td&gt;&lt;code&gt;{D20EA4E1-3957-11d2-A40B-0C5020524152}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;History&lt;/td&gt;&lt;td&gt;&lt;code&gt;{FF393560-C2A7-11CF-BFF4-444553540000}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Inbox&lt;/td&gt;&lt;td&gt;&lt;code&gt;{00020D75-0000-0000-C000-000000000046}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Microsoft Network&lt;/td&gt;&lt;td&gt;&lt;code&gt;{00028B00-0000-0000-C000-000000000046}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;My Computer&lt;/td&gt;&lt;td&gt;&lt;code&gt;{20D04FE0-3AEA-1069-A2D8-08002B30309D}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;My Documents&lt;/td&gt;&lt;td&gt;&lt;code&gt;{450D8FBA-AD25-11D0-98A8-0800361B1103}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;My Network Places&lt;/td&gt;&lt;td&gt;&lt;code&gt;{208D2C60-3AEA-1069-A2D7-08002B30309D}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Network Connections&lt;/td&gt;&lt;td&gt;&lt;code&gt;{7007ACC7-3202-11D1-AAD2-00805FC1270E}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Printers and Faxes&lt;/td&gt;&lt;td&gt;&lt;code&gt;{2227A280-3AEA-1069-A2DE-08002B30309D}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Recycle Bin&lt;/td&gt;&lt;td&gt;&lt;code&gt;{645FF040-5081-101B-9F08-00AA002F954E}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Scanners and Cameras&lt;/td&gt;&lt;td&gt;&lt;code&gt;{E211B736-43FD-11D1-9EFB-0000F8757FCD}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Scheduled Tasks&lt;/td&gt;&lt;td&gt;&lt;code&gt;{D6277990-4C6A-11CF-8D87-00AA0060F5BF}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Temporary Internet Files&lt;/td&gt;&lt;td&gt;&lt;code&gt;{7BD29E00-76C1-11CF-9DD0-00A0C9034933}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Web Folders&lt;/td&gt;&lt;td&gt;&lt;code&gt;{BDEADF00-C265-11D0-BCED-00A0C90AB50F}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2&gt;Win32 &lt;a href="http://msdn.microsoft.com/en-us/library/bb762494.aspx"&gt;&lt;code&gt;CSIDL&lt;/code&gt;&lt;/a&gt; Constants&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;CSIDL_ADMINTOOLS&lt;/li&gt;&lt;li&gt;CSIDL_ALTSTARTUP&lt;/li&gt;&lt;li&gt;CSIDL_APPDATA&lt;/li&gt;&lt;li&gt;CSIDL_BITBUCKET&lt;/li&gt;&lt;li&gt;CSIDL_CDBURN_AREA&lt;/li&gt;&lt;li&gt;CSIDL_COMMON_ADMINTOOLS&lt;/li&gt;&lt;li&gt;CSIDL_COMMON_ALTSTARTUP&lt;/li&gt;&lt;li&gt;CSIDL_COMMON_APPDATA&lt;/li&gt;&lt;li&gt;CSIDL_COMMON_DESKTOPDIRECTORY&lt;/li&gt;&lt;li&gt;CSIDL_COMMON_DOCUMENTS&lt;/li&gt;&lt;li&gt;CSIDL_COMMON_FAVORITES&lt;/li&gt;&lt;li&gt;CSIDL_COMMON_MUSIC&lt;/li&gt;&lt;li&gt;CSIDL_COMMON_OEM_LINKS&lt;/li&gt;&lt;li&gt;CSIDL_COMMON_PICTURES&lt;/li&gt;&lt;li&gt;CSIDL_COMMON_PROGRAMS&lt;/li&gt;&lt;li&gt;CSIDL_COMMON_STARTMENU&lt;/li&gt;&lt;li&gt;CSIDL_COMMON_STARTUP&lt;/li&gt;&lt;li&gt;CSIDL_COMMON_TEMPLATES&lt;/li&gt;&lt;li&gt;CSIDL_COMMON_VIDEO&lt;/li&gt;&lt;li&gt;CSIDL_COMPUTERSNEARME&lt;/li&gt;&lt;li&gt;CSIDL_CONNECTIONS&lt;/li&gt;&lt;li&gt;CSIDL_CONTROLS&lt;/li&gt;&lt;li&gt;CSIDL_COOKIES&lt;/li&gt;&lt;li&gt;CSIDL_DESKTOP&lt;/li&gt;&lt;li&gt;CSIDL_DESKTOPDIRECTORY&lt;/li&gt;&lt;li&gt;CSIDL_DRIVES&lt;/li&gt;&lt;li&gt;CSIDL_FAVORITES&lt;/li&gt;&lt;li&gt;CSIDL_FONTS&lt;/li&gt;&lt;li&gt;CSIDL_HISTORY&lt;/li&gt;&lt;li&gt;CSIDL_INTERNET&lt;/li&gt;&lt;li&gt;CSIDL_INTERNET_CACHE&lt;/li&gt;&lt;li&gt;CSIDL_LOCAL_APPDATA&lt;/li&gt;&lt;li&gt;CSIDL_MYDOCUMENTS&lt;/li&gt;&lt;li&gt;CSIDL_MYMUSIC&lt;/li&gt;&lt;li&gt;CSIDL_MYPICTURES&lt;/li&gt;&lt;li&gt;CSIDL_MYVIDEO&lt;/li&gt;&lt;li&gt;CSIDL_NETHOOD&lt;/li&gt;&lt;li&gt;CSIDL_NETWORK&lt;/li&gt;&lt;li&gt;CSIDL_PERSONAL&lt;/li&gt;&lt;li&gt;CSIDL_PRINTERS&lt;/li&gt;&lt;li&gt;CSIDL_PRINTHOOD&lt;/li&gt;&lt;li&gt;CSIDL_PROFILE&lt;/li&gt;&lt;li&gt;CSIDL_PROGRAM_FILES&lt;/li&gt;&lt;li&gt;CSIDL_PROGRAM_FILESX86&lt;/li&gt;&lt;li&gt;CSIDL_PROGRAM_FILES_COMMON&lt;/li&gt;&lt;li&gt;CSIDL_PROGRAM_FILES_COMMONX86&lt;/li&gt;&lt;li&gt;CSIDL_PROGRAMS&lt;/li&gt;&lt;li&gt;CSIDL_RECENT&lt;/li&gt;&lt;li&gt;CSIDL_RESOURCES&lt;/li&gt;&lt;li&gt;CSIDL_RESOURCES_LOCALIZED&lt;/li&gt;&lt;li&gt;CSIDL_SENDTO&lt;/li&gt;&lt;li&gt;CSIDL_STARTMENU&lt;/li&gt;&lt;li&gt;CSIDL_STARTUP&lt;/li&gt;&lt;li&gt;CSIDL_SYSTEM&lt;/li&gt;&lt;li&gt;CSIDL_SYSTEMX86&lt;/li&gt;&lt;li&gt;CSIDL_TEMPLATES&lt;/li&gt;&lt;li&gt;CSIDL_WINDOWS&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Windows Vista &lt;a href="http://msdn.microsoft.com/en-us/library/bb762584%28VS.85%29.aspx"&gt;&lt;code&gt;KNOWNFOLDERID&lt;/code&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;FOLDERID_AddNewPrograms &lt;/li&gt;&lt;li&gt;FOLDERID_AdminTools &lt;/li&gt;&lt;li&gt;FOLDERID_AppUpdates &lt;/li&gt;&lt;li&gt;FOLDERID_CDBurning &lt;/li&gt;&lt;li&gt;FOLDERID_ChangeRemovePrograms &lt;/li&gt;&lt;li&gt;FOLDERID_CommonAdminTools &lt;/li&gt;&lt;li&gt;FOLDERID_CommonOEMLinks &lt;/li&gt;&lt;li&gt;FOLDERID_CommonPrograms &lt;/li&gt;&lt;li&gt;FOLDERID_CommonStartMenu &lt;/li&gt;&lt;li&gt;FOLDERID_CommonStartup &lt;/li&gt;&lt;li&gt;FOLDERID_CommonTemplates &lt;/li&gt;&lt;li&gt;FOLDERID_ComputerFolder &lt;/li&gt;&lt;li&gt;FOLDERID_ConflictFolder &lt;/li&gt;&lt;li&gt;FOLDERID_ConnectionsFolder &lt;/li&gt;&lt;li&gt;FOLDERID_Contacts &lt;/li&gt;&lt;li&gt;FOLDERID_ControlPanelFolder &lt;/li&gt;&lt;li&gt;FOLDERID_Cookies &lt;/li&gt;&lt;li&gt;FOLDERID_Desktop &lt;/li&gt;&lt;li&gt;FOLDERID_Documents &lt;/li&gt;&lt;li&gt;FOLDERID_Downloads &lt;/li&gt;&lt;li&gt;FOLDERID_Favorites &lt;/li&gt;&lt;li&gt;FOLDERID_Fonts &lt;/li&gt;&lt;li&gt;FOLDERID_Games &lt;/li&gt;&lt;li&gt;FOLDERID_GameTasks &lt;/li&gt;&lt;li&gt;FOLDERID_History &lt;/li&gt;&lt;li&gt;FOLDERID_InternetCache &lt;/li&gt;&lt;li&gt;FOLDERID_InternetFolder &lt;/li&gt;&lt;li&gt;FOLDERID_Links &lt;/li&gt;&lt;li&gt;FOLDERID_LocalAppData &lt;/li&gt;&lt;li&gt;FOLDERID_LocalAppDataLow &lt;/li&gt;&lt;li&gt;FOLDERID_LocalizedResourcesDir &lt;/li&gt;&lt;li&gt;FOLDERID_Music &lt;/li&gt;&lt;li&gt;FOLDERID_NetHood &lt;/li&gt;&lt;li&gt;FOLDERID_NetworkFolder &lt;/li&gt;&lt;li&gt;FOLDERID_OriginalImages &lt;/li&gt;&lt;li&gt;FOLDERID_PhotoAlbums &lt;/li&gt;&lt;li&gt;FOLDERID_Pictures &lt;/li&gt;&lt;li&gt;FOLDERID_Playlists &lt;/li&gt;&lt;li&gt;FOLDERID_PrintersFolder &lt;/li&gt;&lt;li&gt;FOLDERID_PrintHood &lt;/li&gt;&lt;li&gt;FOLDERID_Profile &lt;/li&gt;&lt;li&gt;FOLDERID_ProgramData &lt;/li&gt;&lt;li&gt;FOLDERID_ProgramFiles &lt;/li&gt;&lt;li&gt;FOLDERID_ProgramFilesX64 &lt;/li&gt;&lt;li&gt;FOLDERID_ProgramFilesX86 &lt;/li&gt;&lt;li&gt;FOLDERID_ProgramFilesCommon &lt;/li&gt;&lt;li&gt;FOLDERID_ProgramFilesCommonX64 &lt;/li&gt;&lt;li&gt;FOLDERID_ProgramFilesCommonX86 &lt;/li&gt;&lt;li&gt;FOLDERID_Programs &lt;/li&gt;&lt;li&gt;FOLDERID_Public &lt;/li&gt;&lt;li&gt;FOLDERID_PublicDesktop &lt;/li&gt;&lt;li&gt;FOLDERID_PublicDocuments &lt;/li&gt;&lt;li&gt;FOLDERID_PublicDownloads &lt;/li&gt;&lt;li&gt;FOLDERID_PublicGameTasks &lt;/li&gt;&lt;li&gt;FOLDERID_PublicMusic &lt;/li&gt;&lt;li&gt;FOLDERID_PublicPictures &lt;/li&gt;&lt;li&gt;FOLDERID_PublicVideos &lt;/li&gt;&lt;li&gt;FOLDERID_QuickLaunch &lt;/li&gt;&lt;li&gt;FOLDERID_Recent &lt;/li&gt;&lt;li&gt;FOLDERID_RecordedTV &lt;/li&gt;&lt;li&gt;FOLDERID_RecycleBinFolder &lt;/li&gt;&lt;li&gt;FOLDERID_ResourceDir &lt;/li&gt;&lt;li&gt;FOLDERID_RoamingAppData &lt;/li&gt;&lt;li&gt;FOLDERID_SampleMusic &lt;/li&gt;&lt;li&gt;FOLDERID_SamplePictures &lt;/li&gt;&lt;li&gt;FOLDERID_SamplePlaylists &lt;/li&gt;&lt;li&gt;FOLDERID_SampleVideos &lt;/li&gt;&lt;li&gt;FOLDERID_SavedGames &lt;/li&gt;&lt;li&gt;FOLDERID_SavedSearches &lt;/li&gt;&lt;li&gt;FOLDERID_SEARCH_CSC &lt;/li&gt;&lt;li&gt;FOLDERID_SEARCH_MAPI &lt;/li&gt;&lt;li&gt;FOLDERID_SearchHome &lt;/li&gt;&lt;li&gt;FOLDERID_SendTo &lt;/li&gt;&lt;li&gt;FOLDERID_SidebarDefaultParts &lt;/li&gt;&lt;li&gt;FOLDERID_SidebarParts &lt;/li&gt;&lt;li&gt;FOLDERID_StartMenu &lt;/li&gt;&lt;li&gt;FOLDERID_Startup &lt;/li&gt;&lt;li&gt;FOLDERID_SyncManagerFolder &lt;/li&gt;&lt;li&gt;FOLDERID_SyncResultsFolder &lt;/li&gt;&lt;li&gt;FOLDERID_SyncSetupFolder &lt;/li&gt;&lt;li&gt;FOLDERID_System &lt;/li&gt;&lt;li&gt;FOLDERID_SystemX86 &lt;/li&gt;&lt;li&gt;FOLDERID_Templates &lt;/li&gt;&lt;li&gt;FOLDERID_TreeProperties &lt;/li&gt;&lt;li&gt;FOLDERID_UserProfiles &lt;/li&gt;&lt;li&gt;FOLDERID_UsersFiles &lt;/li&gt;&lt;li&gt;FOLDERID_Videos &lt;/li&gt;&lt;li&gt;FOLDERID_Windows &lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;&lt;a href="http://www.microsoft.com/windowsxp/Downloads/powertoys/Xppowertoys.mspx"&gt;TweakUI&lt;/a&gt; Special Folders&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;CD Burning&lt;/li&gt;&lt;li&gt;Desktop&lt;/li&gt;&lt;li&gt;Document Templates&lt;/li&gt;&lt;li&gt;Favorites&lt;/li&gt;&lt;li&gt;Installation Path&lt;/li&gt;&lt;li&gt;My Documents&lt;/li&gt;&lt;li&gt;My Music&lt;/li&gt;&lt;li&gt;My Pictures&lt;/li&gt;&lt;li&gt;My Video&lt;/li&gt;&lt;li&gt;Programs&lt;/li&gt;&lt;li&gt;Send To&lt;/li&gt;&lt;li&gt;Shared Music&lt;/li&gt;&lt;li&gt;Shared Pictures&lt;/li&gt;&lt;li&gt;Shared Video&lt;/li&gt;&lt;li&gt;Start Menu&lt;/li&gt;&lt;li&gt;Startup&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Visual Studio 2008 Setup Project → Add Special Folder&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Common Files Folder&lt;/li&gt;&lt;li&gt;Common Files (64-bit) Folder&lt;/li&gt;&lt;li&gt;Fonts Folder&lt;/li&gt;&lt;li&gt;Program Files Folder&lt;/li&gt;&lt;li&gt;Program Files (64-bit) Folder&lt;/li&gt;&lt;li&gt;System Folder&lt;/li&gt;&lt;li&gt;System (64-bit) Folder&lt;/li&gt;&lt;li&gt;User's Application Data Folder&lt;/li&gt;&lt;li&gt;User's Desktop&lt;/li&gt;&lt;li&gt;User's Favorites Folder&lt;/li&gt;&lt;li&gt;User's Personal Data Folder&lt;/li&gt;&lt;li&gt;User's Programs Menu&lt;/li&gt;&lt;li&gt;User's Send To Menu&lt;/li&gt;&lt;li&gt;User's Start Menu&lt;/li&gt;&lt;li&gt;User's Startup Folder&lt;/li&gt;&lt;li&gt;User's Template Folder&lt;/li&gt;&lt;li&gt;Windows Folder&lt;/li&gt;&lt;li&gt;Global Assembly Cache Folder&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Visual Studio 2008 Setup Project → File Installation Properties → DefaultLocation [&lt;var&gt;SpecialFolders&lt;/var&gt;]&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;AdminToolsFolder&lt;/li&gt;&lt;li&gt;AppDataFolder&lt;/li&gt;&lt;li&gt;CommonAppDataFolder&lt;/li&gt;&lt;li&gt;CommonFiles64Folder&lt;/li&gt;&lt;li&gt;CommonFilesFolder&lt;/li&gt;&lt;li&gt;DesktopFolder&lt;/li&gt;&lt;li&gt;FavoritesFolder&lt;/li&gt;&lt;li&gt;FontsFolder&lt;/li&gt;&lt;li&gt;LocalAppDataFolder&lt;/li&gt;&lt;li&gt;MyPicturesFolder&lt;/li&gt;&lt;li&gt;PersonalFolder&lt;/li&gt;&lt;li&gt;ProgramFiles64Folder&lt;/li&gt;&lt;li&gt;ProgramFilesFolder&lt;/li&gt;&lt;li&gt;ProgramMenuFolder&lt;/li&gt;&lt;li&gt;SendToFolder&lt;/li&gt;&lt;li&gt;StartMenuFolder&lt;/li&gt;&lt;li&gt;StartupFolder&lt;/li&gt;&lt;li&gt;System16Folder&lt;/li&gt;&lt;li&gt;System64Folder&lt;/li&gt;&lt;li&gt;SystemFolder&lt;/li&gt;&lt;li&gt;TempFolder&lt;/li&gt;&lt;li&gt;TemplateFolder&lt;/li&gt;&lt;li&gt;WindowsFolder&lt;/li&gt;&lt;li&gt;WindowsVolume&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-7223006364632398215?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/7223006364632398215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=7223006364632398215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7223006364632398215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/7223006364632398215'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/07/windows-special-folders-support.html' title='Windows Special Folders Support'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-3531621004409781569</id><published>2008-06-25T20:48:00.000-07:00</published><updated>2008-12-09T21:58:52.873-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='copyfight'/><title type='text'>Way to go, abc.com!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8mr1RHUNECA/SGMSAUJ2azI/AAAAAAAAAEY/zoaOdlMcPZo/s1600-h/CantPlayTheMoleError.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_8mr1RHUNECA/SGMSAUJ2azI/AAAAAAAAAEY/zoaOdlMcPZo/s320/CantPlayTheMoleError.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5216032590044490546" /&gt;&lt;/a&gt;&lt;p&gt;So my DVR missed the most recent episode of the Mole. I decided, rather than grabbing the episode from a torrent, that I'd try and play their game.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;I went to abc.com, and quickly found out that Linux &lt;strong&gt;STILL&lt;/strong&gt; isn't supported (&lt;a href="http://www.hulu.com/"&gt;hulu&lt;/a&gt; seems to have figured it out).&lt;/li&gt;&lt;li&gt;So, I grit my teeth and boot into my old, neglected Windows partition and go to abc.com again.&lt;/li&gt;&lt;li&gt;I had to install a plugin and restart Firefox.&lt;/li&gt;&lt;li&gt;Finally, after a lengthy download, I chose the episode to watch and got an error.&lt;/li&gt;&lt;li&gt;I noticed that the error is &lt;strong&gt;BECAUSE THERE IS NO AD DATA&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;Nevermind.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;So after all of that, I can't watch the episode because abc.com wasn't able to line up commercials? Brilliant. Advertisers want viewers, so clearly the smartest way to drum up advertising is to lock out viewers!&lt;/p&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8mr1RHUNECA/SGMWUkRrtoI/AAAAAAAAAEg/8vgGM_XlCBw/s1600-h/CantPlayTheMoleSmall.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_8mr1RHUNECA/SGMWUkRrtoI/AAAAAAAAAEg/8vgGM_XlCBw/s320/CantPlayTheMoleSmall.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5216037336016205442" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-3531621004409781569?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/3531621004409781569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=3531621004409781569' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3531621004409781569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3531621004409781569'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/06/way-to-go-abccom.html' title='Way to go, abc.com!'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_8mr1RHUNECA/SGMSAUJ2azI/AAAAAAAAAEY/zoaOdlMcPZo/s72-c/CantPlayTheMoleError.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-2415344005258252618</id><published>2008-06-09T09:40:00.000-07:00</published><updated>2008-12-09T21:58:52.999-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox3'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><title type='text'>Firefox 3 Features</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8mr1RHUNECA/SE1e-j1dYqI/AAAAAAAAAEQ/LAmsAF11j38/s1600-h/AwesomeBar.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_8mr1RHUNECA/SE1e-j1dYqI/AAAAAAAAAEQ/LAmsAF11j38/s320/AwesomeBar.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5209924772801897122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Here's a good demo of the Awesome Bar, plus: find out who Larry is.&lt;/p&gt;&lt;div&gt;&lt;a href="http://people.mozilla.com/~beltzner/overview-of-firefox3.swf"&gt;Overview of Firefox 3&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I also found out this weekend that Firefox 3 has true zoom, like Opera has had for years. If you zoom in, the images and layout all zoom in, not just the text anymore.&lt;/p&gt;&lt;p&gt;How to create your own "smart bookmark" queries in Firefox 3 (saved search bookmarks/history, sort by 20 different properties, filter by domain or term, and limit the number returned):&lt;/p&gt;&lt;div&gt;&lt;a title="CyberNotes: Create Your Own Smart Bookmarks in Firefox 3" href="http://cybernetnews.com/2008/05/07/cybernotes-create-your-own-smart-bookmarks-in-firefox-3/"&gt;Create Your Own Smart Bookmarks in Firefox 3&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Here's how to restore the original examples:&lt;/p&gt;&lt;div&gt;&lt;a title="Restore Firefox 3 Smart Bookmarks" href="http://cybernetnews.com/2008/04/27/restore-firefox-3-smart-bookmarks/"&gt;Restore Firefox 3 Smart Bookmarks&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-2415344005258252618?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/2415344005258252618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=2415344005258252618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2415344005258252618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2415344005258252618'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/06/firefox-3-features.html' title='Firefox 3 Features'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_8mr1RHUNECA/SE1e-j1dYqI/AAAAAAAAAEQ/LAmsAF11j38/s72-c/AwesomeBar.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-1475421179140500163</id><published>2008-05-22T10:48:00.001-07:00</published><updated>2008-12-09T21:58:53.185-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='vstudio'/><title type='text'>Update: Visual Studio's NIH RegEx Syntax</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8mr1RHUNECA/SDWz3PNwBBI/AAAAAAAAADw/vQbtFilH4PE/s1600-h/VS2008FindAndReplace.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_8mr1RHUNECA/SDWz3PNwBBI/AAAAAAAAADw/vQbtFilH4PE/s320/VS2008FindAndReplace.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5203262706054857746" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;It looks like &lt;a href="http://www.codinghorror.com/blog/archives/000633.html"&gt;this topic came up a couple of years ago with VS2005 at Coding Horror&lt;/a&gt;, including a Microsoft reply.&lt;/p&gt;&lt;blockquote style="font:italic smaller monospace;clear:both"&gt;&lt;p&gt;Hey Jeff (and assorted follow-up posters),&lt;/p&gt;&lt;p&gt;I'm the lead program manager for the team that owns editing and the find/replace dialog in Visual Studio. Our team agrees with your post :)&lt;/p&gt;&lt;p&gt;It is a very oddball regex syntax, and as best we can tell it comes from Visual C++ 2.0. We did want to add additional support for .NET 2.0-style regular expressions in the Visual Studio 2005 release, but unfortunately due to time pressures it didn't make the final list of features. We were able to make a number of bug fixes to the existing engine though, to give some improvement over VS 2003.&lt;/p&gt;&lt;p&gt;We do keep this on our list of things we want to fix. Ideally at some point we'll actually build in a nifty little extensibility point so you can wire up any regex engine you want for searches.&lt;/p&gt;&lt;p&gt;Thanks for the feedback!&lt;/p&gt;&lt;div&gt;Neil Enns&lt;br/&gt;Lead Program Manager&lt;br/&gt;Microsoft Visual Studio&lt;/div&gt;&lt;div&gt;&amp;mdash; Neil on July 14, 2006 11:15 AM&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;So, take heart! A Microsoft team member agreed about the stupidity of the &lt;a href="http://msdn.microsoft.com/en-us/library/2k3te2cs.aspx"&gt;NIH RegEx syntax&lt;/a&gt; in 2006, so I'm sure we'll see this fixed any day now.&lt;/p&gt;&lt;p&gt;What we need, as pointed out by another commenter, is another pattern option: Regular regular expressions.&lt;/p&gt;&lt;p&gt;Instead, the closest we currently &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2957281&amp;SiteID=1"&gt;have&lt;/a&gt; is &lt;a href="http://www.codeproject.com/KB/macros/searcheraddin.aspx"&gt;couple&lt;/a&gt; of VS &lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=181063"&gt;add-ons to replace the Find and Replace dialog&lt;/a&gt; that &lt;a href="http://blog.excastle.com/2005/01/12/real-regex-search-and-replace-in-visual-studio/"&gt;support normal regex syntax&lt;/a&gt;, an unfamiliar UI, broken English, and VS 2005, and no express editions.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-1475421179140500163?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/1475421179140500163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=1475421179140500163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1475421179140500163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1475421179140500163'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/05/update-visual-studios-nih-regex-syntax.html' title='Update: Visual Studio&apos;s NIH RegEx Syntax'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_8mr1RHUNECA/SDWz3PNwBBI/AAAAAAAAADw/vQbtFilH4PE/s72-c/VS2008FindAndReplace.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-5692745495650667707</id><published>2008-05-06T08:09:00.000-07:00</published><updated>2011-11-28T08:54:52.756-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='vstudio'/><title type='text'>Visual Studio's NIH RegEx Syntax</title><content type='html'>&lt;p&gt;Here's a quick phrasebook for Visual Studio's &lt;abbr title="&amp;quot;not invented here&amp;quot; (a re-invented wheel)"&gt;NIH&lt;/abbr&gt; RegEx syntax:&lt;/p&gt; &lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;VS Editor RegEx Syntax&lt;/th&gt; &lt;th&gt;Real RegEx Syntax*&lt;/th&gt; &lt;th&gt;Meaning&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;{&lt;var&gt;…&lt;/var&gt;}&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;(&lt;var&gt;…&lt;/var&gt;)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;tagged / captured submatch&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;(&lt;var&gt;…&lt;/var&gt;)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;(?:&lt;var&gt;…&lt;/var&gt;)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;non-capturing submatch&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span title="no equivalent"  style="color:red;"&gt;✗&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;(?=&lt;var&gt;…&lt;/var&gt;)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;lookahead assertion&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;~(&lt;var&gt;…&lt;/var&gt;)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;(?!&lt;var&gt;…&lt;/var&gt;)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;negative lookahead assertion / prevent match&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span title="no equivalent"  style="color:red;"&gt;✗&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;(?&amp;lt;=&lt;var&gt;…&lt;/var&gt;)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;lookbehind assertion&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span title="no equivalent"  style="color:red;"&gt;✗&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;(?&amp;lt;!&lt;var&gt;…&lt;/var&gt;)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;negative lookbehind assertion&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span title="no equivalent"  style="color:red;"&gt;✗&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;(?&amp;gt;&lt;var&gt;…&lt;/var&gt;)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;nonbacktracking (greedy) subexpression&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\&amp;lt;&lt;/code&gt;&lt;/td&gt; &lt;td&gt;start of word&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\&amp;gt;&lt;/code&gt;&lt;/td&gt; &lt;td&gt;end of word&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;\&amp;lt;&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt; &lt;td&gt;matches &lt;code&gt;&amp;lt;&lt;/code&gt; character&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;\&amp;gt;&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt; &lt;td&gt;matches &lt;code&gt;&amp;gt;&lt;/code&gt; character&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;(&amp;lt;|&amp;gt;)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\b&lt;/code&gt;&lt;/td&gt; &lt;td&gt;word boundary&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;~(&amp;lt;|&amp;gt;)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\B&lt;/code&gt;&lt;/td&gt; &lt;td&gt;not  a word boundary&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span title="no equivalent"  style="color:red;"&gt;✗&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;?&lt;/code&gt;&lt;/td&gt; &lt;td&gt;zero-or-one quantifier&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span title="no equivalent"  style="color:red;"&gt;✗&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;??&lt;/code&gt;&lt;/td&gt; &lt;td&gt;minimal zero-or-one quantifier&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;@&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;*?&lt;/code&gt;&lt;/td&gt; &lt;td&gt;minimal zero-or-more quantifier&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;\@&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;@&lt;/code&gt;&lt;/td&gt; &lt;td&gt;matches &lt;code&gt;@&lt;/code&gt; character&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;#&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;+?&lt;/code&gt;&lt;/td&gt; &lt;td&gt;minimal one-or-more quantifier&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;\#&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;#&lt;/code&gt;&lt;/td&gt; &lt;td&gt;matches &lt;code&gt;#&lt;/code&gt; character&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;^&lt;var&gt;n&lt;/var&gt;&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;{&lt;var&gt;n&lt;/var&gt;}&lt;/code&gt;&lt;/td&gt; &lt;td&gt;match &lt;var&gt;n&lt;/var&gt; times quantifier&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;\^&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;^&lt;/code&gt;&lt;/td&gt; &lt;td&gt;matches &lt;code&gt;^&lt;/code&gt; character&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span title="no equivalent"  style="color:red;"&gt;✗&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;{&lt;var&gt;n&lt;/var&gt;,}&lt;/code&gt;&lt;/td&gt; &lt;td&gt;match at least &lt;var&gt;n&lt;/var&gt; times quantifier&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span title="no equivalent"  style="color:red;"&gt;✗&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;{&lt;var&gt;m&lt;/var&gt;,&lt;var&gt;n&lt;/var&gt;}&lt;/code&gt;&lt;/td&gt; &lt;td&gt;match  between &lt;var&gt;m&lt;/var&gt; and &lt;var&gt;n&lt;/var&gt; times (inclusive) quantifier&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span title="no equivalent"  style="color:red;"&gt;✗&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;{&lt;var&gt;n&lt;/var&gt;,}?&lt;/code&gt;&lt;/td&gt; &lt;td&gt;minimally match at least &lt;var&gt;n&lt;/var&gt; times quantifier&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span title="no equivalent"  style="color:red;"&gt;✗&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;{&lt;var&gt;m&lt;/var&gt;,&lt;var&gt;n&lt;/var&gt;}?&lt;/code&gt;&lt;/td&gt; &lt;td&gt;minimally match  between &lt;var&gt;m&lt;/var&gt; and &lt;var&gt;n&lt;/var&gt; times (inclusive) quantifier&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;\(&lt;var&gt;w&lt;/var&gt;,&lt;var&gt;n&lt;/var&gt;)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;span title="no equivalent"  style="color:red;"&gt;✗&lt;/span&gt;&lt;/td&gt; &lt;td&gt;(replacement expression) left-pad captured group &lt;var&gt;n&lt;/var&gt; to &lt;var&gt;w&lt;/var&gt; characters&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;\(-&lt;var&gt;w&lt;/var&gt;,&lt;var&gt;n&lt;/var&gt;)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;span title="no equivalent"  style="color:red;"&gt;✗&lt;/span&gt;&lt;/td&gt; &lt;td&gt;(replacement expression) right-pad captured group &lt;var&gt;n&lt;/var&gt; to &lt;var&gt;w&lt;/var&gt; characters&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;\g&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\a&lt;/code&gt;&lt;/td&gt; &lt;td&gt;alert / bell&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;\h&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;[\b]&lt;/code&gt;&lt;/td&gt; &lt;td&gt;backspace&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;\:&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;:&lt;/code&gt;&lt;/td&gt; &lt;td&gt;matches &lt;code&gt;:&lt;/code&gt; character&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:i&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;([a-zA-Z_$][a-zA-Z0-9_$]*)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;identifier&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:q&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;(("[^"]*")|('[^']*'))&lt;/code&gt;&lt;/td&gt; &lt;td&gt;quoted string&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:h&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;([0-9A-Fa-f]+)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;hexadecimal number (not including any prefix, e.g. &lt;code&gt;0x&lt;/code&gt; or &lt;code&gt;\x&lt;/code&gt; or &lt;code&gt;\u&lt;/code&gt;)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:n&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;((\d+.\d*)|(\d*.\d+)|(\d+))&lt;/code&gt;&lt;/td&gt; &lt;td&gt;rational number&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:w&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;(\p{L}+)&lt;/code&gt;&lt;/td&gt; &lt;td&gt;letters&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:b&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;[ \t]&lt;/code&gt;&lt;/td&gt; &lt;td&gt;space or tab (like &lt;code&gt;\s&lt;/code&gt; without &lt;code&gt;\n&lt;/code&gt; or &lt;code&gt;\v&lt;/code&gt;)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:z&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\d+&lt;/code&gt;&lt;/td&gt; &lt;td&gt;integer (one or more decimal digits)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:a&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\w&lt;/code&gt;&lt;/td&gt; &lt;td&gt;word / alphanumeric character&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;[^:a]&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\W&lt;/code&gt;&lt;/td&gt; &lt;td&gt;non-word / non-alphanumeric character&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:c&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\p{L}&lt;/code&gt;&lt;/td&gt; &lt;td&gt;letter character (like &lt;code&gt;\w&lt;/code&gt; without the _)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:d&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\d&lt;/code&gt;&lt;/td&gt; &lt;td&gt;decimal digit&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;[^:d]&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\D&lt;/code&gt;&lt;/td&gt; &lt;td&gt;non-decimal-digit character&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:&lt;var&gt;U&lt;/var&gt;&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\p{&lt;var&gt;U&lt;/var&gt;}&lt;/code&gt;&lt;/td&gt; &lt;td&gt;matches &lt;a href="http://unicode.org/Public/UNIDATA/UCD.html#General_Category_Values"&gt;Unicode character category&lt;/a&gt; &lt;var&gt;U&lt;/var&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span title="no equivalent"  style="color:red;"&gt;✗&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\p{Is&lt;var&gt;Block&lt;/var&gt;}&lt;/code&gt;&lt;/td&gt; &lt;td&gt;matches characters in &lt;a href="http://msdn.microsoft.com/en-us/library/20bw873z.aspx"&gt;Unicode named block&lt;/a&gt; &lt;var&gt;Block&lt;/var&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;[^:&lt;var&gt;U&lt;/var&gt;]&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\P{&lt;var&gt;U&lt;/var&gt;}&lt;/code&gt;&lt;/td&gt; &lt;td&gt;does not match &lt;a href="http://unicode.org/Public/UNIDATA/UCD.html#General_Category_Values"&gt;Unicode character category&lt;/a&gt; &lt;var&gt;U&lt;/var&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span title="no equivalent"  style="color:red;"&gt;✗&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\P{Is&lt;var&gt;Block&lt;/var&gt;}&lt;/code&gt;&lt;/td&gt; &lt;td&gt;does not match characters in &lt;a href="http://msdn.microsoft.com/en-us/library/20bw873z.aspx"&gt;Unicode named block&lt;/a&gt; &lt;var&gt;Block&lt;/var&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:Al&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\p{L}&lt;/code&gt;&lt;/td&gt; &lt;td&gt;letter&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:Nu&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\d&lt;/code&gt;&lt;/td&gt; &lt;td&gt;decimal digit&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:Pu&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\p{P}&lt;/code&gt;&lt;/td&gt; &lt;td&gt;punctuation character&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:Wh&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\s&lt;/code&gt;&lt;/td&gt; &lt;td&gt;whitespace character&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;[^:Wh]&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\S&lt;/code&gt;&lt;/td&gt; &lt;td&gt;non-whitespace character&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:Bi&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;i style="color:gray"&gt;?&lt;/i&gt;&lt;/td&gt; &lt;td&gt;bidirectional character&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:Ha&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\p{IsHangulJamo}&lt;/code&gt;&lt;/td&gt; &lt;td&gt;Korean Hangul and combining Jamos&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:Hi&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\p{IsHiragana}&lt;/code&gt;&lt;/td&gt; &lt;td&gt;hiragana character&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:Ka&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;code&gt;\p{IsKatakana}&lt;/code&gt;&lt;/td&gt; &lt;td&gt;katakana character&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;code&gt;:Id&lt;/code&gt;&lt;/td&gt; &lt;td&gt;&lt;i style="color:gray"&gt;?&lt;/i&gt;&lt;/td&gt; &lt;td&gt;ideographic characters, such as Han and kanji&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&lt;small&gt;*This is the syntax supported by everything else, including the .NET &lt;code&gt;System.Text.RegularExpressions&lt;/code&gt; library. For some reason, Microsoft decided to create a new syntax &lt;i&gt;just for the Visual Studio editor!&lt;/i&gt; But they just don't have the resources to implement &lt;a href="http://www.google.com/microsoft?q=%22your%20favorite%20standard%22&amp;amp;start=0&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla:en-US:official" title="a buzzphrase that implies there are just too many standards for poor little Microsoft to keep up with"&gt;"your favorite standard"&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt; &lt;p&gt;Anything that's not on the list should be the same for NIH Regex patterns.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-5692745495650667707?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/5692745495650667707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=5692745495650667707' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/5692745495650667707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/5692745495650667707'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/05/visual-studios-nih-regex-syntax.html' title='Visual Studio&apos;s NIH RegEx Syntax'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-6305934485991592092</id><published>2008-04-22T08:16:00.000-07:00</published><updated>2008-09-11T15:12:06.254-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='xslt2'/><category scheme='http://www.blogger.com/atom/ns#' term='dotnet'/><title type='text'>Dear Microsoft, We Need XSLT 2.0</title><content type='html'>&lt;h4&gt;XSLT2 Is Useful&lt;/h4&gt;&lt;p&gt;Listen, I really appreciate the work Microsoft has done on IE8 standards, and I think LINQ to XML really improves on the W3C XML DOM, but I also need to produce XML from templates.&lt;/p&gt;&lt;p&gt;You see, ASP.NET really only produces HTML from templates. If you want to produce RSS, Atom, POX, SVG, P3P, XSLT, or XSL-FO from templates, probably the best way to do this (for flexibility, maintainability, and readability) is with XSLT Simplified Syntax.&lt;/p&gt;&lt;h4&gt;Example&lt;/h4&gt;&lt;pre&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;feed xmlns="http://www.w3.org/2005/Atom"&lt;br /&gt;      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&lt;br /&gt;      xmlns:fn="http://www.w3.org/2006/xpath-functions"&lt;br /&gt;      xsl:exclude-result-prefixes="xsl fn"&lt;br /&gt;      xsl:version="2.0"&amp;gt;&lt;br /&gt;  &amp;lt;title&amp;gt;Press Releases&amp;lt;/title&amp;gt;&lt;br /&gt;  &amp;lt;link href="http://example.org/"/&amp;gt;&lt;br /&gt;  &amp;lt;updated&amp;gt;&lt;br /&gt;    &amp;lt;xsl:value-of select="&lt;strong&gt;fn:max&lt;/strong&gt;(//story/@releasedate)"/&amp;gt;&lt;br /&gt;  &amp;lt;/updated&amp;gt;&lt;br /&gt;  &amp;lt;id&amp;gt;urn:uuid:7b2845b6-cc0d-4a64-92a4-2c0f33a398a2&amp;lt;/id&amp;gt;&lt;br /&gt;  &amp;lt;xsl:for-each select="//story"&amp;gt;&lt;br /&gt;    &amp;lt;entry&amp;gt;&lt;br /&gt;      &amp;lt;title&amp;gt;&lt;br /&gt;        &amp;lt;xsl:value-of select="@name"/&amp;gt;&lt;br /&gt;      &amp;lt;/title&amp;gt;&lt;br /&gt;      &amp;lt;link href="http://example.org/"/&amp;gt;&lt;br /&gt;      &amp;lt;id&amp;gt;&lt;br /&gt;        &amp;lt;xsl:text&amp;gt;http://example.org/press/&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;        &amp;lt;xsl:value-of select="&lt;strong&gt;fn:format-dateTime&lt;/strong&gt;(@releasedate,'YYYYMMDDTHHmmss')"/&amp;gt;&lt;br /&gt;      &amp;lt;/id&amp;gt;&lt;br /&gt;      &amp;lt;updated&amp;gt;&lt;br /&gt;        &amp;lt;xsl:value-of select="@releasedate"/&amp;gt;&lt;br /&gt;      &amp;lt;/updated&amp;gt;&lt;br /&gt;      &amp;lt;content type="xhtml" xml:lang="en"&amp;gt;&lt;br /&gt;        &amp;lt;xsl:copy-of select="div"/&amp;gt;&lt;br /&gt;      &amp;lt;/content&amp;gt;&lt;br /&gt;    &amp;lt;/entry&amp;gt;&lt;br /&gt;  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;&amp;lt;/feed&amp;gt;&lt;/pre&gt;&lt;p&gt;This is more readable and maintainable than using the DOM to build up the document, or a full XSLT stylesheet. It is much more approachable, since it is a simple template, which allows trivial changes without having to understand the complete XSLT syntax. Plus, a minimal .NET HTTP handler can apply XSLT to source XML (perhaps produced by SQL Server) without much code to maintain.&lt;/p&gt;&lt;h4&gt;The Problem&lt;/h4&gt;&lt;p&gt;Anyone that's tried to use XSLT 1.0 quickly finds that they can't use most of the modern methods they've become used to in other languages: regular expressions, date/time/number parsing and formatting, grouping, data structures, Unicode support, date/time/timezone/duration data types and functions, set manipulation, aggregate functions, and converting relative URLs to absolute ones, to name some common examples of things that are simply prohibitively difficult and complex in XSLT 1.0 (particularly using the simplified syntax).&lt;/p&gt;&lt;p&gt;Of course these have all been addressed in XSLT 2.0 and XPath 2.0, released as W3C Recommendations over a year ago, moving XSLT from curiosity to practical templating engine.&lt;/p&gt;&lt;p&gt;The .NET XSLT library still only supports XSLT 1.0 and XPath 1.0.&lt;/p&gt;&lt;p&gt;The emphasized functions in the above example give an indication of why this is a problem. How can you provide aggregate functions and date/time formatting without those functions without losing the benefits of the XSLT Simplified Syntax? There are really only two practical answers.&lt;/p&gt;&lt;h4&gt;&lt;a href="http://www.saxonica.com/" title="Saxonica: XSLT and XQuery Processing"&gt;Saxon&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Buy Saxon (or use Saxon Basic, which is free).&lt;/p&gt;&lt;h5&gt;Benefits&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;You support Michael Kay, XSLT ninja.&lt;/li&gt;&lt;li&gt;The market for XSLT grows.&lt;/li&gt;&lt;li&gt;You won't have to make changes to all of your templates when Microsoft finally supports XSLT2.&lt;/li&gt;&lt;li&gt;You spend no time trying to figure out how to work around the lack of a simple XSLT2 feature.&lt;/li&gt;&lt;li&gt;You get used to XSLT2.&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Kludgy Workarounds&lt;/h4&gt;&lt;p&gt;If your needs are more modest, you could try converting your stylesheet to XSLT1 and work around the limitations of that implementation.&lt;/p&gt;&lt;h5&gt;Benefits&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;You don't spend time learning a third party library.&lt;/li&gt;&lt;li&gt;You don't have to manage a third party library when deploying your system.&lt;/li&gt;&lt;li&gt;You spend no money, provided you do not assign any value to the time required for you to come up with workarounds.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Obviously, you only want to use this approach if you have to, or if there are only a few simple workarounds to get what you want into the template, such as using the SQL Server &lt;a href="http://technet.microsoft.com/en-us/library/ms187928.aspx"&gt;CONVERT function&lt;/a&gt; to format date/time/currency/numeric values before building the XML document, or altering the XML DOM to add or substitute formatted or aggregate values before applying the stylesheet.&lt;/p&gt;&lt;h4&gt;Conclusion&lt;/h4&gt;&lt;p&gt;Microsoft really needs to focus some resources on getting XSLT 2.0 into the next release of .NET. Clearly, between IE8 and OOXML, standards support is on Microsoft's TODO list, and there's no question about their committment to XML. &lt;a href="http://blogs.msdn.com/xmlteam/archive/2007/01/29/xslt-2-0.aspx"&gt;Microsoft even knows that their customers want XSLT2.&lt;/a&gt; The only question that remains is when market pressure will intensify the need to implement this omission. Be sure to contact &lt;a href="http://blogs.msdn.com/xmlteam/contact.aspx"&gt;Microsoft's XML Team&lt;/a&gt; to request a timeline for XSLT2.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-6305934485991592092?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/6305934485991592092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=6305934485991592092' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6305934485991592092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6305934485991592092'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/04/dear-microsoft-we-need-xslt-20.html' title='Dear Microsoft, We Need XSLT 2.0'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-3242100416643876693</id><published>2008-03-26T08:48:00.000-07:00</published><updated>2010-04-09T14:23:34.850-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='badcode'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><title type='text'>What happens when people don't know what they're doing: DoNotReply.com and RFC 2606</title><content type='html'>&lt;p&gt;People without a basic understanding of &lt;a title="Reserved Top Level DNS Names" href="http://tools.ietf.org/html/rfc2606"&gt;RFC 2606&lt;/a&gt; have been using a From or Reply-To address of &lt;code&gt;donotreply@donotreply.com&lt;/code&gt;, and &lt;em&gt;surprise!&lt;/em&gt;, that domain exists.&lt;/p&gt;&lt;p&gt;This implies not just job incompetence, but a manner so cavalier and naïve that the person responsible didn't even consider typing &lt;code&gt;donotreply.com&lt;/code&gt; into a browser.&lt;/p&gt;&lt;p&gt;This is a level of technical malpractice worthy of termination, IMO.&lt;/p&gt;&lt;p&gt;Remember, the people that designed the Internet were generally pretty clever folks. If you need a &lt;a title="Wikipedia: Fictitious domain name" href="http://en.wikipedia.org/wiki/Fictitious_domain_name"&gt;phony domain name&lt;/a&gt; (akin to a &lt;a title="Wikipedia: 555 phone number" href="http://en.wikipedia.org/wiki/555_telephone_number"&gt;555 phone number&lt;/a&gt;), for example, there's a pretty good chance someone has set aside a few of those.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;.test&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;.example&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;.invalid&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;           .localhost&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;example.com&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;example.net&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;example.org&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ins datetime="2010-04-09T14:18:00"&gt;&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; &lt;a href="http://www.iana.org/"&gt;IANA&lt;/a&gt; has even set aside an &lt;a href="http://www.iana.org/assignments/media-types/examples/"&gt;&lt;code&gt;example&lt;/code&gt; MIME supertype&lt;/a&gt; and &lt;a href="http://www.rfc-editor.org/rfc/rfc4735.txt" title="RFC4735"&gt;subtypes for all of the other supertypes&lt;/a&gt;.&lt;/p&gt;&lt;/ins&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-3242100416643876693?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/3242100416643876693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=3242100416643876693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3242100416643876693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3242100416643876693'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/03/what-happens-when-people-dont-know-what.html' title='What happens when people don&apos;t know what they&apos;re doing: DoNotReply.com and RFC 2606'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-4944519844671569933</id><published>2008-03-25T15:46:00.000-07:00</published><updated>2008-03-26T09:23:00.877-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ie8'/><title type='text'>Re: The Internet Explorer 8 User-Agent String</title><content type='html'>&lt;blockquote&gt;&lt;a title="IEBlog: The Internet Explorer 8 User-Agent String" href="http://blogs.msdn.com/ie/archive/2008/02/21/the-internet-explorer-8-user-agent-string.aspx"&gt;&lt;code&gt;Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)&lt;/code&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;p&gt;Microsoft, why are you still lying about being Mozilla?&lt;/p&gt;&lt;p&gt;Seriously, it's just wasted network traffic and drive space and extra parsing for log analyzers.&lt;/p&gt;&lt;p&gt;I see many commentors, in &lt;a title="IEBlog: The Internet Explorer 8 User-Agent String" href="http://blogs.msdn.com/ie/archive/2008/02/21/the-internet-explorer-8-user-agent-string.aspx"&gt;the recent IEBlog post about the IE8 user agent string&lt;/a&gt;, requesting an end to the "Mozilla/4.0 (compatible; " nonsense:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/ie/archive/2008/02/21/the-internet-explorer-8-user-agent-string.aspx#7843506"&gt;Ted Henry&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/ie/archive/2008/02/21/the-internet-explorer-8-user-agent-string.aspx#7843882"&gt;Tom Stack&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/ie/archive/2008/02/21/the-internet-explorer-8-user-agent-string.aspx#7844341"&gt;Devon Young&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/ie/archive/2008/02/21/the-internet-explorer-8-user-agent-string.aspx#7845334"&gt;Al Billings&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/ie/archive/2008/02/21/the-internet-explorer-8-user-agent-string.aspx#7845443"&gt;&lt;tt&gt;Gyrobo&lt;/tt&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/ie/archive/2008/02/21/the-internet-explorer-8-user-agent-string.aspx#7848283"&gt;John A. Bilicki, III&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/ie/archive/2008/02/21/the-internet-explorer-8-user-agent-string.aspx#7853310"&gt;&lt;tt&gt;Some name&lt;/tt&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I see only two people defending the 1990s style user agent string:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/ie/archive/2008/02/21/the-internet-explorer-8-user-agent-string.aspx#7844528"&gt;EricLaw [MSFT]&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/ie/archive/2008/02/21/the-internet-explorer-8-user-agent-string.aspx#7845888"&gt;Andrew&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This seems to indicate a pretty clear preference from the developer community.&lt;/p&gt;&lt;p&gt;There will be a few sites that incorrectly slam the door on their guests simply due to an unknown &lt;abbr title="user agent"&gt;UA&lt;/abbr&gt; string, but they clearly need a wake-up call anyway. Whitelisting user agent strings is stupid, and needs to be stopped now.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;P.S.:&lt;/strong&gt; Thanks for making standards mode the default in IE8, Microsoft! I'm not kidding or being sarcastic. You've really improved the lives of developers in the long run, whether or not everyone understands it now.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-4944519844671569933?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/4944519844671569933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=4944519844671569933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4944519844671569933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4944519844671569933'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/03/re-internet-explorer-8-user-agent.html' title='Re: The Internet Explorer 8 User-Agent String'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-8246694446100883532</id><published>2008-03-10T10:25:00.000-07:00</published><updated>2008-03-10T10:35:59.521-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='mix08'/><title type='text'>Vista at MIX08</title><content type='html'>&lt;p&gt;At nearly every session, Windows Vista froze briefly and flickered several times in a way that interrupted the session presentations significantly. It was obvious that the presenters were afraid the machine had just crashed, though the desktop eventually returned. Usually, this was at a time when the input to the projector was changed, and I'm guessing that changed the video subsystem enough to cause Vista Content Protection to restart the video subsystem.&lt;/p&gt;&lt;p&gt;This seems to confirm: &lt;a title="A Cost Analysis of Windows Vista Content Protection" href="http://www.cs.auckland.ac.nz/~pgut001/pubs/vista_cost.html"&gt;Peter Gutmann was right&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-8246694446100883532?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/8246694446100883532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=8246694446100883532' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8246694446100883532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8246694446100883532'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/03/vista-at-mix08.html' title='Vista at MIX08'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-3015834144424725393</id><published>2008-03-07T12:24:00.000-08:00</published><updated>2008-03-07T12:36:10.545-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mix08'/><title type='text'>More from MIX08</title><content type='html'>&lt;p&gt;More about IE8 from MIX08:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The new Developer Tools is part of the standard IE8 install.&lt;/li&gt;&lt;li&gt;The Dev Tools have an extremely cool Trace Styles feature that allows you to look at the effective styles of an object, and determine which rule is responsible for a given style.&lt;/li&gt;&lt;li&gt;The Dev Tools contain a full-featured JScript debugger.&lt;/li&gt;&lt;li&gt;JScript may now select DOM elements using CSS selectors.&lt;/li&gt;&lt;li&gt;Using the window.location.hash property to store and retrieve state info, the back button now more intuitively supports AJAX apps.&lt;/li&gt;&lt;li&gt;JScript in IE8 can tell whether the browser has lost its internet connection (window.navigator.online) and use offline storage to persist the page state.&lt;/li&gt;&lt;li&gt;The offline data store does not use a database backend (yet), and limits the storage to 10MB/domain/tab.&lt;/li&gt;&lt;li&gt;A new object, XDomainRequest, allows XmlHttpRequest-style interactions across domains.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-3015834144424725393?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/3015834144424725393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=3015834144424725393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3015834144424725393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3015834144424725393'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/03/more-from-mix08.html' title='More from MIX08'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-601591938391227629</id><published>2008-03-06T09:54:00.000-08:00</published><updated>2008-03-06T13:00:27.843-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ie8'/><category scheme='http://www.blogger.com/atom/ns#' term='mix08'/><title type='text'>MIX08 News</title><content type='html'>&lt;ul&gt;&lt;li&gt;IE8 will finally support &lt;a href="http://en.wikipedia.org/wiki/Data:_URI_scheme"&gt;data: URLs&lt;/a&gt;!&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/sql/dataservices/faq.mspx"&gt;&lt;abbr title="SQL Server Data Services"&gt;SSDS&lt;/abbr&gt;&lt;/a&gt; provides &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;&lt;abbr title="Representational State Transfer"&gt;REST&lt;/abbr&gt;&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/SOAP"&gt;SOAP&lt;/a&gt;, or &lt;abbr title="Atom Publishing Protocol"&gt;APP&lt;/abbr&gt; access to a SQL data store.&lt;/li&gt;&lt;li&gt;There have been many changes to ASP.NET Dynamic Data controls since they were introduced at the last MIX: everything seems more template-based, uses attribute decorating in addition to SQL schema info to automatically build GridView and DetailsView/FormView controls.&lt;/li&gt;&lt;li&gt;Microsoft is &lt;strong&gt;REALLY&lt;/strong&gt; into REST.&lt;/li&gt;&lt;li&gt;Silverlight can be worked into any conversation.&lt;/li&gt;&lt;li&gt;IIS7 is pretty exciting, particularly for developers with hosted applications (or corporations in a similar situation), since nearly every IIS setting is now in the web.config file.&lt;/li&gt;&lt;li&gt;Hosts in IIS7 can &lt;a href="http://www.iis.net/946/SinglePageArticle.ashx"&gt;delegate features&lt;/a&gt; with impressive granularity, or lock them down.&lt;/li&gt;&lt;li&gt;The IIS7 admin console can connect through port 80.&lt;/li&gt;&lt;li&gt;IE8 is pushing something called &lt;a href="http://blogs.msdn.com/ie/archive/2008/03/06/activities-and-webslices-in-internet-explorer-8.aspx"&gt;WebSlices&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-601591938391227629?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/601591938391227629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=601591938391227629' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/601591938391227629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/601591938391227629'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/03/mix08-news.html' title='MIX08 News'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-294491387966950567</id><published>2008-03-05T09:08:00.000-08:00</published><updated>2008-03-05T09:23:41.704-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mix08'/><title type='text'>MIX08: Day One</title><content type='html'>&lt;p&gt;This year, Microsoft handed out purses to all attendees, made out of the finest white tarpaulin. To complete the look, white (or green or black) berets were available, for anyone that wanted to rock the &lt;a title="co-host of Mythbusters" href="http://en.wikipedia.org/wiki/Jamie_Hyneman"&gt;Jamie Hyneman&lt;/a&gt; look. No matching shoes yet, though.&lt;/p&gt;&lt;p&gt;No expense has been spared, as Microsoft has made a full 11Mb/s 802.11b Internet connection available to anyone directly within the conference rooms. Internet access from within the hotel rooms can be had for only $10/day.&lt;/p&gt;&lt;p&gt;Last night, we attended a Microsoft screening of &lt;a title="A documentary about a new contender for the Donkey Kong high score" href="http://www.google.com/url?sa=t&amp;amp;ct=res&amp;amp;cd=2&amp;amp;url=http%3A%2F%2Fwww.imdb.com%2Ftitle%2Ftt0923752%2F&amp;amp;ei=J9bOR7reCKegiAHm0bS8DA&amp;amp;usg=AFQjCNGOz2D72dPnB7Ei8GNFbow0EODlVw&amp;amp;sig2=_r3nV96zEHmAF808AkYJJQ"&gt;The King of Kong (2007)&lt;/a&gt;, and tonight the subject of the movie will try to break the current Donkey Kong high score.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-294491387966950567?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/294491387966950567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=294491387966950567' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/294491387966950567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/294491387966950567'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/03/mix08-day-one.html' title='MIX08: Day One'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-8126246326524977339</id><published>2008-03-01T10:57:00.000-08:00</published><updated>2009-11-17T16:10:42.411-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='input'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Warning: Do not buy Microsoft input devices</title><content type='html'>&lt;p&gt;My &lt;a href="http://www.amazon.com/Microsoft-E06-00001-Sidewinder-Strategic-Commander/dp/B00005U21V"&gt;Microsoft Sidewinder Strategic Commander&lt;/a&gt; doesn't work under Vista (64-bit). It's pretty clear that Microsoft considers even a USB input device to have an expiration date, since they appear to have no plans to add this support.&lt;/p&gt;&lt;p&gt;I bought Bioshock recently, and it also seems obvious that Microsoft paid the developer to make using any game controller other than the XBOX 360 controller virtually impossible to set up.&lt;/p&gt;&lt;p&gt;So, I guess in  a few years, when the next version of Windows is released and doesn't support even that controller, I'll be stuck with keyboard and mouse.&lt;/p&gt;&lt;p&gt;Though this approach works really well for Microsoft, and stands as the familiar degenerate case of Capitalism, I'm tired of spending money unnecessarily. Is this what a stand-alone hardware company or OS vendor would do? This isn't anticompetitive?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-8126246326524977339?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/8126246326524977339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=8126246326524977339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8126246326524977339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8126246326524977339'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/03/warning-do-not-buy-microsoft-input.html' title='Warning: Do not buy Microsoft input devices'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-1888823978787604339</id><published>2008-02-21T08:11:00.000-08:00</published><updated>2008-02-21T08:56:59.330-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><title type='text'>Windows Error du jour</title><content type='html'>&lt;p&gt;What is the sound of one pointer hiding?&lt;/p&gt;&lt;p&gt;&lt;img src="data:image/png;base64,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" width="629" height="126" alt="---------------------------&amp;#xA;&amp;#xA;---------------------------&amp;#xA;Windows cannot find '(null)'. Make sure you typed the name correctly, and then try again. To search for a file, click the Start button, and then click Search. &amp;#xA;---------------------------&amp;#xA;OK&amp;#xA;---------------------------"/&gt;&lt;/p&gt;&lt;!--[if IE]&gt;&lt;div style="font:message-box;"&gt;&lt;strong&gt;Note:&lt;/strong&gt; Internet Explorer can't handle &lt;a title="data: URI scheme - Wikipedia, the free encyclopedia" href="http://en.wikipedia.org/wiki/Data:_URI"&gt;embedded images&lt;/a&gt;. Try &lt;a title="Firefox web browser | Faster, more secure, &amp;amp; customizable" href="http://www.mozilla.com/en-US/firefox/?from=getfirefox"&gt;something&lt;/a&gt; &lt;a title="Opera browser: Home page" href="http://www.opera.com/"&gt;else&lt;/a&gt;, &lt;a title="Apple - Safari 3 Public Beta" href="http://www.apple.com/safari/"&gt;anything&lt;/a&gt; &lt;a title="Comparison of web browsers - Wikipedia, the free encyclopedia" href="http://en.wikipedia.org/wiki/Comparison_of_web_browsers"&gt;else&lt;/a&gt;.&lt;/p&gt;&lt;![endif]--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-1888823978787604339?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/1888823978787604339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=1888823978787604339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1888823978787604339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/1888823978787604339'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/02/windows-error-du-jour.html' title='Windows Error du jour'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-891671431337251366</id><published>2008-02-05T19:47:00.000-08:00</published><updated>2008-02-05T20:02:14.682-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='input'/><title type='text'>Innovative Input: AlphaGrip AG-5 3D Keyboard</title><content type='html'>&lt;p&gt;&lt;a title="AlphaGrip, the computer keyboard of the future - now - for handheld gaming, typing, data entry and text messaging. After a few hours of use, you'll be typing desk-free with an AlphaGrip in hand." href="http://www.alphagrips.com/"&gt;AlphaGrip, a Handheld USB Computer Keyboard and Trackball for Anywhere Computing&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Apparently, you can get a &lt;a title="The AlphaGrip, Model AG-5, handheld USB computer keyboard The AlphaGrip, Model AG-5, handheld USB computer keyboard and trackball is a unique alternative trackball keyboard which enables high speed computing in any position. Position your hands in a comfortable vertical orientation while your fingers naturally fall on keys located on the back of the device and your thumbs controls the trackball and buttons.  Great for gaming. Installs using USB interface port. Black case. Black ball." href="http://www.trackballworld.com/40-720.html"&gt;AlphaGrip AG-5 3D Keyboard and Trackball, USB at TrackballWorld.com&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I'm still waiting for my &lt;a href="http://en.wikipedia.org/wiki/Panther_XL" title="A trackball/joystick combo."&gt;Panther XL&lt;/a&gt; successor, though.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-891671431337251366?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/891671431337251366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=891671431337251366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/891671431337251366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/891671431337251366'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/02/innovative-input-alphagrip-ag-5-3d.html' title='Innovative Input: AlphaGrip AG-5 3D Keyboard'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-4846704454497914473</id><published>2008-01-16T08:07:00.000-08:00</published><updated>2008-02-21T08:55:27.475-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meat'/><category scheme='http://www.blogger.com/atom/ns#' term='vote'/><title type='text'>Election '08: Meat Update</title><content type='html'>&lt;p&gt;In case you only &lt;em&gt;suspected&lt;/em&gt; candidates are just meat products...&lt;/p&gt;&lt;div&gt;&lt;img src="data:image/png;base64,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" alt="Google News 2008-01-16T08:00: Elections: Meat Recall" width="372" height="524" /&gt;&lt;/div&gt;&lt;!--[if IE]&gt;&lt;div style="font:message-box;"&gt;&lt;strong&gt;Note:&lt;/strong&gt; Internet Explorer can't handle &lt;a title="data: URI scheme - Wikipedia, the free encyclopedia" href="http://en.wikipedia.org/wiki/Data:_URI"&gt;embedded images&lt;/a&gt;. Try &lt;a title="Firefox web browser | Faster, more secure, &amp;amp; customizable" href="http://www.mozilla.com/en-US/firefox/?from=getfirefox"&gt;something&lt;/a&gt; &lt;a title="Opera browser: Home page" href="http://www.opera.com/"&gt;else&lt;/a&gt;, &lt;a title="Apple - Safari 3 Public Beta" href="http://www.apple.com/safari/"&gt;anything&lt;/a&gt; &lt;a title="Comparison of web browsers - Wikipedia, the free encyclopedia" href="http://en.wikipedia.org/wiki/Comparison_of_web_browsers"&gt;else&lt;/a&gt;.&lt;/p&gt;&lt;![endif]--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-4846704454497914473?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/4846704454497914473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=4846704454497914473' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4846704454497914473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4846704454497914473'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/01/election-08-meat-update.html' title='Election &apos;08: Meat Update'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-474079698544263057</id><published>2008-01-03T16:05:00.001-08:00</published><updated>2008-12-09T21:58:53.652-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='certification'/><title type='text'>70-551 UPGRADE: MCAD Skills to MCPD Web Developer by Usingthe Microsoft® .NET Framework</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8mr1RHUNECA/R317qcfFfCI/AAAAAAAAADI/dx9imX9Thk0/s1600-h/cramsesswrong.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_8mr1RHUNECA/R317qcfFfCI/AAAAAAAAADI/dx9imX9Thk0/s320/cramsesswrong.png" border="0" alt="CramSession's completely false assertion that this test is 50 questions and 90 minutes long" id="BLOGGER_PHOTO_ID_5151409517913013282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Preparation Guide for Exam 70-551: UPGRADE: MCAD Skills to MCPD Web Developer by Using the Microsoft .NET Framework" href="http://www.microsoft.com/learning/exams/70-551.mspx"&gt;70-551&lt;/a&gt; is harrowing.&lt;/p&gt;&lt;p&gt;Nowhere that I've been able to find does it mention that you are simply taking &lt;a title="Preparation Guide for Exam 70-528: TS: Microsoft .NET Framework 2.0 - Web-Based Client Development" href="http://www.microsoft.com/learning/exams/70-528.mspx"&gt;70-528&lt;/a&gt;, &lt;a title="Preparation Guide for Exam 70-536: TS: Microsoft .NET Framework 2.0—Application Development Foundation" href="http://www.microsoft.com/learning/exams/70-536.mspx"&gt;70-536&lt;/a&gt;, and &lt;a title="Preparation Guide for Exam 70-547: PRO: Designing and Developing Web-Based Applications by Using the Microsoft .NET Framework" href="http://www.microsoft.com/learning/exams/70-547.mspx"&gt;70-547&lt;/a&gt; back-to-back.&lt;/p&gt;&lt;p&gt;In fact, the only place that gives any clue to the ridiculous, extreme length of this testing trilogy is &lt;a title="CramSession: Microsoft MCPD; Upgrade MCAD to MCPD" href="http://www.cramsession.com/certifications/exams/upgrade-mcad-mcpd-web.asp?exam_id=791"&gt;CramSession, which claims the test is "50 questions" and "90 minutes"&lt;/a&gt;, which is completely wrong.&lt;/p&gt;&lt;p&gt;I was completely blindsided when I walked in to take a test in November, and had to sit for &lt;strong&gt;HOURS AND HOURS&lt;/strong&gt; taking &lt;strong&gt;THREE &amp;$@^$$#^* TESTS IN A ROW!&lt;/strong&gt;&lt;/p&gt;&lt;h4&gt;HEY, MICROSOFT&lt;/h4&gt;&lt;p&gt;D'ya think maybe you could at least give your victims &lt;strong&gt;a clue&lt;/strong&gt; as to the scope, or at least the &lt;strong&gt;ORDER OF MAGNITUDE&lt;/strong&gt; of your damn tests?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-474079698544263057?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/474079698544263057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=474079698544263057' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/474079698544263057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/474079698544263057'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/01/70-551-upgrade-mcad-skills-to-mcpd-web.html' title='70-551 UPGRADE: MCAD Skills to MCPD Web Developer by Usingthe Microsoft® .NET Framework'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_8mr1RHUNECA/R317qcfFfCI/AAAAAAAAADI/dx9imX9Thk0/s72-c/cramsesswrong.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-3081387960275798511</id><published>2008-01-02T10:37:00.000-08:00</published><updated>2009-09-26T15:45:14.059-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='sysmanagement'/><category scheme='http://www.blogger.com/atom/ns#' term='updates'/><title type='text'>Dear Microsoft, we need an updater</title><content type='html'>&lt;ins datetime="20090926T1542"&gt;&lt;p&gt;&lt;strong&gt;Update 4:&lt;/strong&gt; add &lt;a title="TechTracker tracking software from CNET helps keep all of the software on your computer up-to-date. This free software tracker monitors and highlights outdated applications on your computer, providing you the option to download and update each to the latest release." href="http://www.cnet.com/techtracker/"&gt;CNET TechTracker&lt;/a&gt; [via &lt;a href="http://lifehacker.com/5367392/techtracker-scans-your-computer-for-outdated-software"&gt;Lifehacker&lt;/a&gt;, via &lt;a title="" href="http://www.labnol.org/software/scan-computer-for-outdated-software/9933/"&gt;Digital Inspiration&lt;/a&gt;].&lt;/p&gt;&lt;/ins&gt;&lt;ins datetime="20090601T1524"&gt;&lt;p&gt;&lt;strong&gt;Update 3:&lt;/strong&gt; add &lt;a href="http://www.radarsync.com/software/s176591-radarsync_free_version"&gt;RadarSync&lt;/a&gt; [via &lt;a href="http://lifehacker.com/5274450/radarsync-keeps-your-programs-up-to-date"&gt;Lifehacker&lt;/a&gt;, via &lt;a href="http://www.makeuseof.com/tag/download-junkies-update-your-system-with-radarsync/"&gt;MakeUseOf&lt;/a&gt;].&lt;/p&gt;&lt;/ins&gt;&lt;ins datetime="20090421T1316"&gt;&lt;p&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; add &lt;a href="http://www.intowindows.com/keep-your-pc-up-to-date-with-sumo-software-update-monitor/"&gt;SUMo (Software Update Monitor)&lt;/a&gt; (thanks to a &lt;a href="http://lifehacker.com/5221047/update-notifier-finds-newer-versions-of-windows-apps#c12258302"&gt;comment&lt;/a&gt; by &lt;a href="http://lifehacker.com/people/MaribelPelops/"&gt;MaribelPelops&lt;/a&gt; on the same &lt;a href="http://lifehacker.com/5221047/update-notifier-finds-newer-versions-of-windows-apps"&gt;Lifehacker article&lt;/a&gt;).&lt;/p&gt;&lt;/ins&gt;&lt;ins datetime="20090421T0733"&gt;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; and add &lt;a href="http://cleansofts.org/view/update-notifier.html"&gt;Update Notifier&lt;/a&gt; to the mix (thanks &lt;a href="http://lifehacker.com/5221047/update-notifier-finds-newer-versions-of-windows-apps"&gt;Lifehacker&lt;/a&gt;).&lt;/p&gt;&lt;/ins&gt;&lt;p&gt;Every time I install a program, icons are left all over my Start menu and desktop, mostly crap I don't need. Also, enough with the &lt;acronym title='End User License "Agreement"/Assertion'&gt;EULA&lt;/acronym&gt;s already!&lt;/p&gt;&lt;p&gt;Most of all, I'm tired of some programs staying in memory (Java, WinAmp Agent, WinZip, etc.) to check for updates periodically, some programs adding separate Scheduled Tasks (Apple stuff, etc.), some programs checking at startup (often slowly, in the main thread: Adobe Reader, etc.), and most programs requiring I manually keep stuff up to date by watching their stupid website and re-installing when there is an update. I'm lucky if the auto-update checks even have the capacity to install the update, rather than just throwing the download web page at me to do myself. I'm also lucky if I don't have to uninstall the previous version, even this many years after the introduction of the &lt;abbr title="Microsoft Installer"&gt;MSI&lt;/abbr&gt;. Of course, I also have to constantly monitor vulnerability sites like &lt;a href="http://www.us-cert.gov/"&gt;US-CERT: United States Computer Emergency Readiness Team&lt;/a&gt;, since commercial entities can't be trusted to be honest about unpatched vulnerabilities.&lt;/p&gt;&lt;p&gt;Oh, there are many attempts to bring some measure of automation to installation and updates on Windows, but despite &lt;a href="http://www.nabber.org/projects/appupdater/"&gt;AppUpdater&lt;/a&gt;, &lt;a href="http://windows-get.sourceforge.net/"&gt;win-get&lt;/a&gt;, &lt;a href="http://www.app-get.com/"&gt;app-get&lt;/a&gt;, &lt;a href="http://www.updatestar.com/"&gt;UpdateStar&lt;/a&gt;, &lt;a href="http://appsnap.genotrance.com/"&gt;AppSnap&lt;/a&gt;, &lt;a href="http://www.filehippo.com/updatechecker/"&gt;filehippo.com Update Checker&lt;/a&gt;, &lt;a href="https://psi.secunia.com/"&gt;Secunia Personal Software Inspector&lt;/a&gt;, and &lt;a title="Package manager: Windows" href="http://en.wikipedia.org/wiki/Package_manager#Windows"&gt;others&lt;/a&gt;, most of them fall pathetically short.&lt;/p&gt;&lt;p&gt;To summarize: I spend all my time in Windows installing, monitoring for updates, updating, and cleaning up afterwards, and it &lt;strong&gt;SUCKS&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Stop fighting with me about who really owns my machine (premium content DRM), putting lipstick on the pig (Aero), crippling network speed when music is played back (Multimedia Class Scheduler), implementing half-assed web standards (IE7), asking users what components of an application to install (MSI), and fix the real problem with Windows: installs and updates.&lt;/p&gt;&lt;p&gt;Sincerely,&lt;/p&gt;&lt;p&gt;Brian&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-3081387960275798511?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/3081387960275798511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=3081387960275798511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3081387960275798511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3081387960275798511'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/01/dear-microsoft.html' title='Dear Microsoft, we need an updater'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-3608626121289119633</id><published>2008-01-01T14:08:00.000-08:00</published><updated>2008-01-01T15:11:53.632-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meta-list'/><category scheme='http://www.blogger.com/atom/ns#' term='lists'/><title type='text'>List of lists of 2007 lists</title><content type='html'>&lt;p&gt;In the spirit of meta-listing, I give you the First Annual List of Lists of 2007 Lists (including other lists of lists of 2007 lists), AKA the Top of the Tops of the Tops:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a title="" href="http://www.time.com/time/specials/2007/top10/0,30576,1686204,00.html"&gt;50 Top 10 Lists of 2007 - TIME&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="Rex Sorgatz' website, feeding on internet culture." href="http://www.fimoculous.com/year-review-2007.cfm"&gt;Fimoculous.com: 2007 Lists&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="When we launched our Lifehacker Top series back in March we had no idea what a big hit it would" href="http://lifehacker.com/338970/twenty-top-10s-of-2007"&gt;Best Of 2007: Twenty Top 10's of 2007&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="" href="http://www.codinghorror.com/blog/archives/000822.html"&gt;Coding Horror: Top 6 List of Programming Top 10 Lists&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="" href="http://culturite.wordpress.com/2007/12/15/the-best-best-of-lists-of-2007/"&gt;The Best ‘Best of’ Lists of 2007 « Culturite&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="" href="http://laist.com/2007/12/28/the_top_top_lis.php"&gt;LAist: The Top Top Lists of 2007&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="" href="http://exurbanleague.com/2007/12/28/the-best-best-of-2007-lists-of-2007-list.aspx"&gt;Exurban League: The Best ‘Best of 2007’ Lists of 2007 List&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="The Top 10 Letterman Top 10 Lists of 2007" href="http://politicalhumor.about.com/b/2007/12/10/the-top-10-letterman-top-10-lists-of-2007.htm"&gt;The Top 10 Letterman Top 10 Lists of 2007&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="" href="http://www.nowpublic.com/culture/best-best-lists-2007"&gt;The Best 'Best of' Lists of 2007 | The News is NowPublic.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tvdecoder.blogs.nytimes.com/2007/12/31/eleven-television-trends-in-2007s-top-ten-lists/?hp"&gt;Eleven Television Trends In 2007s Top Ten Lists - TV Decoder - Media &amp;amp; Television - New York Times Blog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="It’s the last Weekly Book Buzz of the year, and even though this release schedule is for the first batch of SF, Fantasy, and Horror books coming out in 2008 I wanted to take..." href="http://www.mania.com/57025.html"&gt;Top 5 Top 5 Lists of 2007&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="" href="http://scrambled.wordpress.com/2007/12/29/top-10-worst-top-10-lists-of-2007/"&gt;Top 10 worst Top 10 lists of 2007 « scramblings&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="Tours, News Reviews, and Resources centered around Punk, Screamo, Metal, Indie, Post Rock, Ska, Reggae Emo and Hardcore" href="http://www.punknews.org/article/27015"&gt;Punknews.org | The list of lists for 2007&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-3608626121289119633?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/3608626121289119633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=3608626121289119633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3608626121289119633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3608626121289119633'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2008/01/list-of-lists-of-2007-lists.html' title='List of lists of 2007 lists'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-8831138389626635987</id><published>2007-12-19T16:22:00.000-08:00</published><updated>2008-01-05T09:12:08.079-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atom'/><category scheme='http://www.blogger.com/atom/ns#' term='feeds'/><category scheme='http://www.blogger.com/atom/ns#' term='opml'/><category scheme='http://www.blogger.com/atom/ns#' term='rss'/><title type='text'>Why OPML?</title><content type='html'>&lt;p&gt;So, when exporting or importing a list of feeds, why are we using OPML, when any feed reader already has an Atom and/or RSS parser? It seems like those formats would work as well for a list of links.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-8831138389626635987?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/8831138389626635987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=8831138389626635987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8831138389626635987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8831138389626635987'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2007/12/why-opml.html' title='Why OPML?'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-6331692208715048945</id><published>2007-12-05T15:11:00.000-08:00</published><updated>2008-02-04T14:18:20.651-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='dotnet'/><title type='text'>configSource: "It must refer to a file in the same directory or in a subdirectory as the configuration file."</title><content type='html'>&lt;p&gt;Since the &lt;code&gt;configSource&lt;/code&gt; attribute, to include .NET config file sections from external files, only allows relative paths and no parent paths, it severely limits the ability to centralize configuration settings for multiple config files.&lt;/p&gt;&lt;p&gt;Unless you use NTFS &lt;a href="http://en.wikipedia.org/wiki/Hard_link"&gt;hard links&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/NTFS_junction_point"&gt;junction points&lt;/a&gt;, of course.&lt;/p&gt;&lt;p&gt;For example, if you have a &lt;kbd&gt;ConnectionStrings.config&lt;/kbd&gt; file that you want to reference from your .NET 2.0 &lt;kbd&gt;machine.config&lt;/kbd&gt; and your .NET 3.5 &lt;kbd&gt;machine.config&lt;/kbd&gt;, you can create a directory within the .NET 2.0 &lt;kbd&gt;CONFIG&lt;/kbd&gt; directory called &lt;kbd&gt;ConnectionStrings&lt;/kbd&gt;, then create a hard link (&lt;ins datetime="200802041418"&gt;for files&lt;/ins&gt;, using &lt;kbd&gt;fsutil hardlink&lt;/kbd&gt;) or junction point (&lt;ins datetime="200802041418"&gt;for an entiry directory&lt;/ins&gt;, using &lt;a title="Mark Russinovich's Junction utility" href="http://www.microsoft.com/technet/sysinternals/FileAndDisk/Junction.mspx"&gt;&lt;kbd&gt;junction&lt;/kbd&gt;&lt;/a&gt;) with the same name within the .NET 3.5 &lt;kbd&gt;CONFIG&lt;/kbd&gt; directory. When you put the &lt;kbd&gt;ConnectionStrings.config&lt;/kbd&gt; in either directory, it will exist in both, so you can point to &lt;code&gt;ConnectionStrings\ConnectionStrings.config&lt;/code&gt; with a &lt;code&gt;configSource&lt;/code&gt; attribute in both &lt;kbd&gt;machine.config&lt;/kbd&gt; files, and still only have a single file to maintain.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-6331692208715048945?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/6331692208715048945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=6331692208715048945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6331692208715048945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/6331692208715048945'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2007/12/configsource-it-must-refer-to-file-in.html' title='configSource: &quot;It must refer to a file in the same directory or in a subdirectory as the configuration file.&quot;'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-2118440051357847085</id><published>2007-10-26T16:03:00.000-07:00</published><updated>2008-01-05T09:13:24.496-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='greed'/><title type='text'>Telco Dereliction</title><content type='html'>&lt;p&gt;All of the US telcos have really let us down with &lt;a title="Top 30 Countries for Broadband Internet Access" href="http://www.worldpoliticsreview.com/blog/blog.aspx?id=1088"&gt;lousy bandwidth&lt;/a&gt; and &lt;a title="Average U.S. Upstream Speed: 371kbps" href="http://www.dslreports.com/shownews/Average-US-Upstream-Speed-371kbps-85232"&gt;terrible upload speeds&lt;/a&gt;, while &lt;a title="The $200 Billion Broadband Scandal. -- AKA Where's the 45MB/s I Already Paid for!" href="http://www.muniwireless.com/article/articleview/5011"&gt;taking $200 billion dollars from taxpayers&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-2118440051357847085?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/2118440051357847085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=2118440051357847085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2118440051357847085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2118440051357847085'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2007/10/telco-dereliction.html' title='Telco Dereliction'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-834202159182186727</id><published>2007-09-26T09:02:00.000-07:00</published><updated>2011-06-06T10:56:34.523-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='ivorytower'/><category scheme='http://www.blogger.com/atom/ns#' term='dotnet'/><title type='text'>Globbing (using filename wildcard patterns) in C#</title><content type='html'>&lt;p&gt;The &lt;code&gt;Directory.GetFiles()&lt;/code&gt; method in the .NET CLR is unsatisfying for anyone that just wants to use simple filename wildcard patterns. Before you can even call &lt;code&gt;GetFiles()&lt;/code&gt;, there are several steps you have to perform manually. Minimally, you have to split the directory from the filename pattern, then you have to convert the directory to an absolute path. If you want to process an array of delimited pattern lists, there are even more steps. Here's a simple recipe:&lt;/p&gt;&lt;pre  class="prettyprint lang-cs"&gt;public static class Glob&lt;br /&gt;{&lt;br /&gt;    static public string[] GetFiles(string[] patterns)&lt;br /&gt;    {&lt;br /&gt;        List&amp;lt;string&amp;gt; filelist= new List&amp;lt;string&amp;gt;();&lt;br /&gt;        foreach(string pattern in patterns)&lt;br /&gt;            filelist.AddRange(GetFiles(pattern));&lt;br /&gt;        string[] files= new string[filelist.Count];&lt;br /&gt;        filelist.CopyTo(files,0);&lt;br /&gt;        return files;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    static public string[] GetFiles(string patternlist)&lt;br /&gt;    {&lt;br /&gt;        List&amp;lt;string&amp;gt; filelist= new List&amp;lt;string&amp;gt;();&lt;br /&gt;        foreach(string pattern in &lt;br /&gt;            patternlist.Split(Path.GetInvalidPathChars()))&lt;br /&gt;        {&lt;br /&gt;            string dir= Path.GetDirectoryName(pattern);&lt;br /&gt;            if(String.IsNullOrEmpty(dir)) dir= &lt;br /&gt;                Directory.GetCurrentDirectory();&lt;br /&gt;            filelist.AddRange(Directory.GetFiles(&lt;br /&gt;                Path.GetFullPath(dir),&lt;br /&gt;                Path.GetFileName(pattern)));&lt;br /&gt;        }&lt;br /&gt;        string [] files= new string[filelist.Count];&lt;br /&gt;        filelist.CopyTo(files,0);&lt;br /&gt;        return files;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;This only resolves patterns in filenames, not paths, but may serve the needs for this common task for most uses, and provides a starting point for something more comprehensive.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-834202159182186727?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/834202159182186727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=834202159182186727' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/834202159182186727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/834202159182186727'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2007/09/globbing-using-filename-wildcard.html' title='Globbing (using filename wildcard patterns) in C#'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-4514240252479159048</id><published>2007-06-13T09:11:00.000-07:00</published><updated>2008-01-05T09:14:18.269-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='css3'/><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Media Queries: Opera and Safari</title><content type='html'>&lt;p&gt;For about a year now, both Opera and Safari have supported CSS3 Media Queries, which allow separate CSS rules based on screen or window (viewport) size, color/grayscale depth, aspect ratio, resolution, tv progressive/interlaced, or grid devices (like dumb terminals or other tty-style devices).&lt;/p&gt;&lt;p&gt;This allows a number of capabilities:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;More layout columns for the growing audience of 30-inch monitors and widescreen laptops.&lt;/li&gt;&lt;li&gt;Single-column layout when only a small or narrow view of the page is available (maybe due to a handheld device, a cheap video card, or an older computer).&lt;/li&gt;&lt;li&gt;Less graphically intense layout for "grid" devices (such as telnet sessions or e-book devices).&lt;/li&gt;&lt;li&gt;Different backgrounds for browsers with serious color limitations, or black and white displays (maybe for color-blind or low-vision users).&lt;/li&gt;&lt;li&gt;Different layout for pivoted monitors or other displays that are taller than they are wide.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Firefox and Internet Explorer need to get on board before this is widely useful, but now that Safari is available for Windows, it may add just a little bit more pressure.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.w3.org/TR/css3-mediaqueries/"&gt;W3C: Media Queries&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://virtuelvis.com/gallery/mediaqueries/"&gt;Virtuelvis: Gallery: CSS Media queries&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.joostdevalk.nl/media-queries-work-in-webkit/"&gt;Media Queries work in WebKit! - SEO Blog - Joost de Valk&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=156716"&gt;Mozilla Bug 156716 – CSS3 "media queries"&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-4514240252479159048?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/4514240252479159048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=4514240252479159048' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4514240252479159048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/4514240252479159048'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2007/06/media-queries-opera-and-safari.html' title='Media Queries: Opera and Safari'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-734162998667286929</id><published>2007-05-17T17:29:00.000-07:00</published><updated>2008-08-14T15:18:46.637-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='vstudio'/><category scheme='http://www.blogger.com/atom/ns#' term='tfsbuild'/><category scheme='http://www.blogger.com/atom/ns#' term='ASPPARSE'/><category scheme='http://www.blogger.com/atom/ns#' term='msbuild'/><title type='text'>Here's how to Team Build a Web Application Project</title><content type='html'>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;a href="http://blogs.msdn.com/aaronhallberg/archive/2007/07/02/team-build-and-web-deployment-projects.aspx"&gt;Aaron Hallberg : Team Build and Web Deployment Projects&lt;/a&gt;&lt;/p&gt;&lt;ol&gt; &lt;li&gt;First, create a Web Deployment Project for your Web Application Project. (If you have a Web Site Project, you will need to &lt;a href="http://webproject.scottgu.com/CSharp/Migration2/Migration2.aspx"&gt;convert the Web Site Project to a Web Application Project&lt;/a&gt; before continuing.)&lt;/li&gt; &lt;li&gt;Set the Output Folder to the destination UNC for the Debug and Release build types.&lt;/li&gt; &lt;li&gt;Set any other WDP properties appropriate to your environment, such as Web.config file section replacement.&lt;/li&gt; &lt;li&gt;Make sure your build server has VisualStudio and VS SP1 installed. If the server does not have the &lt;code&gt;C:\Program Files\MSBuild\Microsoft\WebDeployment\&lt;/code&gt; folder, you may need to install Web Deployment Projects as well.&lt;/li&gt; &lt;li&gt;Create &lt;code&gt;fixup.TeamWebDeployment.targets&lt;/code&gt; (see below) in &lt;code&gt;C:\Program Files\MSBuild\&lt;/code&gt;. Normally, the Team Build drop location overrides the Output Folder, so this file adds a second compile task to put the web app where you wanted it to go in the first place.&lt;/li&gt; &lt;li&gt;Add an import directive for &lt;code&gt;$(MSBuildExtensionsPath)\fixup.TeamWebDeployment.targets&lt;/code&gt;.&lt;/li&gt; &lt;li&gt;Create the team build, choosing your solution and build type, but you &lt;strong&gt;MUST&lt;/strong&gt; choose &lt;strong&gt;Mixed Platforms&lt;/strong&gt; as the Platform, or things will go very badly for you.&lt;/li&gt; &lt;li&gt;Cross your fingers and run the build.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;code&gt;fixup.TeamWebDeployment.targets&lt;/code&gt;&lt;/div&gt;&lt;pre&gt;&amp;lt;Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&amp;gt;&lt;br /&gt; &amp;lt;Target Name="AfterBuild" Condition="$(OutputPath) != $(WDTargetDir)"&amp;gt;&lt;br /&gt;  &amp;lt;AspNetCompiler&lt;br /&gt;   PhysicalPath="$(_AspNetCompilerSourceWebPath)"&lt;br /&gt;   TargetPath="$(OutputPath)"&lt;br /&gt;   VirtualPath="$(_AspNetCompilerVirtualPath)"&lt;br /&gt;   Force="$(_Force)"&lt;br /&gt;   Debug="$(DebugSymbols)"&lt;br /&gt;   Updateable="$(EnableUpdateable)"&lt;br /&gt;   KeyFile="$(_FullKeyFile)"&lt;br /&gt;   KeyContainer="$(_AspNetCompilerKeyContainer)"&lt;br /&gt;   DelaySign="$(DelaySign)"&lt;br /&gt;   AllowPartiallyTrustedCallers="$(AllowPartiallyTrustedCallers)"&lt;br /&gt;   FixedNames="$(_AspNetCompilerFixedNames)"&lt;br /&gt;   Clean="$(Clean)"&lt;br /&gt;   MetabasePath="$(_AspNetCompilerMetabasePath)"&lt;br /&gt;  /&amp;gt;&lt;br /&gt;  &amp;lt;RemoveDir Condition="'$(DeleteAppDataFolder)' == 'true'" Directories="$(OutputPath)\App_Data"/&amp;gt;&lt;br /&gt; &amp;lt;/Target&amp;gt;&lt;br /&gt;&amp;lt;/Project&amp;gt;&lt;/pre&gt;&lt;p&gt;Also, I have to ask any MS folks out there: Why &lt;code&gt;C:\Program Files\MSBuild\&lt;/code&gt; ? Why not &lt;code&gt;C:\Program Files\Common Files\MSBuild\&lt;/code&gt; or &lt;code&gt;C:\Documents and Settings\&lt;var&gt;&amp;lt;current/all user(s)&amp;gt;&lt;/var&gt;\Application Settings\Microsoft\MSBuild\&lt;/code&gt; ? This adds yet another customizable location that needs to be backed up.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-734162998667286929?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/734162998667286929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=734162998667286929' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/734162998667286929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/734162998667286929'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2007/05/heres-how-to-team-build-web-application.html' title='Here&apos;s how to Team Build a Web Application Project'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-3119206501184463564</id><published>2007-05-14T16:43:00.000-07:00</published><updated>2008-01-05T09:16:48.950-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><title type='text'>VS TFS Build: Another day completely wasted</title><content type='html'>I've been trying to set up a Team Build for a simple web application for about a week now, and I just don't see the point anymore.&lt;br /&gt;&lt;br /&gt;Sure, it integrates into Visual Studio, but that represents ROI for Microsoft, not me.&lt;br /&gt;&lt;br /&gt;I've come from scheduling build scripts (.cmd -fu), with some Ant/nAnt experience to the nightmare world of the overdesigned MSBuild, which is just completely opaque. With a syntax that makes a simple tag reference impossible (properties are assigned by the tag name), too much confounding magic (this property or item or target has a special name that is used somewhere deep within the Web Deployment target file, and good luck finding a simple reference for that), and a completely impenetrable variable syntax ( @(FilesToCopy –&gt; '$(MSBuildProjectDirectory)\Bin\%(Filename)%(Extension)') ? Are you kidding me?), and the ever-human-readable GUIDs (also impossible to find a quickref for) sprinkled throughout.&lt;br /&gt;&lt;br /&gt;I've found exactly one book, published last year (not even by MS Press), on MSBuild. Other books may provide an appendix or something, but I haven't found anything helpful.&lt;br /&gt;&lt;br /&gt;Today I finally got my Web Deployment Project to build successfully as a Team Build, but nothing showed up in the WDP Output Directory. Great, so it isn't working, and there is no error message to tell me why. WTF?&lt;br /&gt;&lt;br /&gt;Side topic: What are the intended purposes of Web Sites, Web Application Projects, and Web Deployment Projects? How do they compare? Why do all three exist? Am I using the wrong thing?&lt;br /&gt;&lt;br /&gt;Why am I doing this? Because it's the Microsoft direction? What do I gain? As far as I can tell, the primary differences are some better reporting and auditing, integration with the VS Team Process Template (once we decide to try customizing that again), and that our QA staff will now need to open VS to start a test build, where they could just open \\&amp;lt;server&amp;gt;\admin$\Tasks before.&lt;br /&gt;&lt;br /&gt;In the meantime, I am hemorrhaging hours, and seriously wondering...why?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-3119206501184463564?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/3119206501184463564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=3119206501184463564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3119206501184463564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3119206501184463564'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2007/05/vs-tfs-build-another-day-completely.html' title='VS TFS Build: Another day completely wasted'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-362656927565896804</id><published>2007-04-30T09:21:00.000-07:00</published><updated>2007-07-08T17:28:29.190-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mix07'/><title type='text'>MIX07: Embarrasing Moments for Microsoft</title><content type='html'>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;a href="http://www.flickr.com/photos/9831094@N02/755509753/"&gt;Another really good one&lt;/a&gt;.&lt;p&gt;When we arrived at the Las Vegas airport, one of the baggage carousels had a monitor displaying a Windows error report.&lt;/p&gt;&lt;p&gt;When we got to the hotel, we passed a monitor with a BSOD.&lt;/p&gt;&lt;p&gt;This morning, on the way to the keynote, we passed several monitors that indicated each room's schedule. One had a BSOD, another was flickering the old "You have unused icons on your desktop" tooltray balloon.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-362656927565896804?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/362656927565896804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=362656927565896804' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/362656927565896804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/362656927565896804'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2007/04/mix07-embarrasing-moments-for-microsoft.html' title='MIX07: Embarrasing Moments for Microsoft'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-8050224956730283679</id><published>2007-04-16T10:37:00.000-07:00</published><updated>2008-01-05T09:17:46.306-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='copyfight'/><category scheme='http://www.blogger.com/atom/ns#' term='arbitrary'/><title type='text'>A simple copyright question</title><content type='html'>&lt;p&gt;I'm probably missing something obvious, but can someone explain to me why a still image recording of someone is the property of the person performing the recording (the photographer), and an audio recording of someone is the property of the subject of the recording (the musician)?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-8050224956730283679?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/8050224956730283679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=8050224956730283679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8050224956730283679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8050224956730283679'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2007/04/simple-copyright-question.html' title='A simple copyright question'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-524752525680796874</id><published>2007-04-09T07:36:00.000-07:00</published><updated>2008-01-05T09:18:26.013-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='input'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Logitech 3Dconnexion = Cyberman2 ?</title><content type='html'>&lt;p&gt;I am always excited by new input devices, so I'm intrigued by the Logitech &lt;a href="http://www.3dconnexion.com/"&gt;3Dconnexion&lt;/a&gt;, though I have to say it bears more than a passing resemblance to the disappointing &lt;a href="http://www.gamezero.com/team-0/articles/industry/e3_1997/logitech.html"&gt;Cyberman2&lt;/a&gt; &lt;a href="http://www.3dgamers.com/articles/more/38/"&gt;[2]&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-524752525680796874?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/524752525680796874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=524752525680796874' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/524752525680796874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/524752525680796874'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2007/04/logitech-3dconnexion-cyberman2.html' title='Logitech 3Dconnexion = Cyberman2 ?'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-2687500164632178310</id><published>2007-04-03T09:08:00.000-07:00</published><updated>2008-01-05T09:19:11.167-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ivorytower'/><category scheme='http://www.blogger.com/atom/ns#' term='dotnet'/><title type='text'>Easy XML serialization of complex objects with C#</title><content type='html'>&lt;p&gt;If you've got complex, XML-serializable objects you'd like to trace easily, such as SOAP objects, here's a handy way to dump their contents to an XML string:&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Xml;&lt;br /&gt;using System.Xml.Serialization;&lt;br /&gt;&lt;br /&gt;public class XmlExporter&lt;br /&gt;{&lt;br /&gt; /// &amp;lt;summary&amp;gt;&lt;br /&gt; /// Serialize an object as an XML string.&lt;br /&gt; /// &amp;lt;/summary&amp;gt;&lt;br /&gt; /// &amp;lt;param name="o"&amp;gt;The object to serialize.&amp;lt;/param&amp;gt;&lt;br /&gt; /// &amp;lt;returns&amp;gt;The object, serialized as an XML string.&amp;lt;/returns&amp;gt;&lt;br /&gt; public static string ToString(object o)&lt;br /&gt; {&lt;br /&gt;  if (o == null) return "&amp;lt;NULL /&amp;gt;";&lt;br /&gt;  string str;&lt;br /&gt;  Encoding utf8 = new UTF8Encoding();&lt;br /&gt;  XmlTypeAttribute xmlatt = (XmlTypeAttribute)Attribute.&lt;br /&gt;   GetCustomAttribute(o.GetType(), typeof(XmlTypeAttribute));&lt;br /&gt;  using (MemoryStream ms = new MemoryStream())&lt;br /&gt;  {&lt;br /&gt;   XmlTextWriter x = new XmlTextWriter(ms, utf8);&lt;br /&gt;   x.Formatting = Formatting.Indented;&lt;br /&gt;   XmlSerializer xs = xmlatt == null ? new XmlSerializer(o.GetType()) : &lt;br /&gt;    new XmlSerializer(o.GetType(), xmlatt.Namespace);&lt;br /&gt;   xs.Serialize(x, o);&lt;br /&gt;   str = utf8.GetString(ms.GetBuffer(), 0, (int)ms.Length);&lt;br /&gt;   x.Close();&lt;br /&gt;   ms.Close();&lt;br /&gt;  }&lt;br /&gt;  return str;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-2687500164632178310?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/2687500164632178310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=2687500164632178310' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2687500164632178310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/2687500164632178310'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2007/04/easy-xml-serialization-of-complex.html' title='Easy XML serialization of complex objects with C#'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-8611119825947535290</id><published>2007-04-02T07:55:00.000-07:00</published><updated>2008-01-05T09:19:48.580-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msfail'/><category scheme='http://www.blogger.com/atom/ns#' term='dotnet'/><title type='text'>Is Microsoft run by dilettantes?</title><content type='html'>&lt;p&gt;The standard .NET class library cannot natively:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;work with shorcut (.lnk) files&lt;/li&gt;&lt;li&gt;modify configuration settings&lt;/li&gt;&lt;li&gt;parse command-line options&lt;/li&gt;&lt;li&gt;enumerate ODBC DSNs&lt;/li&gt;&lt;li&gt;determine the data type of a stream by &lt;a href="http://en.wikipedia.org/wiki/Magic_number_(programming)"&gt;magic number&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-8611119825947535290?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/8611119825947535290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=8611119825947535290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8611119825947535290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/8611119825947535290'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2007/03/is-microsoft-run-by-dilettantes.html' title='Is Microsoft run by dilettantes?'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-3506442924849665079</id><published>2007-04-01T18:27:00.000-07:00</published><updated>2007-04-01T18:42:18.094-07:00</updated><title type='text'>MythTV config breakthroughs</title><content type='html'>&lt;p&gt;At &lt;a href="http://www.ubuntuforums.org/showthread.php?t=364252#8"&gt;Re: Help Fixing overscan on HDTV&lt;/a&gt;, I finally found precisely what I needed to get the correct 1366&amp;times;768 resolution to my &lt;a href="http://www.westinghousedigital.com/details.aspx?itemnum=72"&gt;Westinghouse W4207&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;h3&gt;williammanda&lt;/h3&gt;&lt;p&gt;Re: Help Fixing overscan on HDTV&lt;/p&gt;&lt;p&gt;FWIW&lt;/p&gt;&lt;p&gt;I have found to get the native resolution for my monitor is to have it probed by nvidia. This setup works best so far across many debian setups I have tried. I have a westinghouse 42" lcd native 1366 x 768 and the best I can get is 1360 x 765. I will use the prior posted xorg.conf file as an example&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;Section "Monitor"&lt;br /&gt;Identifier "SONY TV"&lt;br /&gt;#HorizSync 15.0 - 46.0&lt;br /&gt;#VertRefresh 59.0 - 61.0&lt;br /&gt;#Option "DPMS"&lt;br /&gt;#Option "IgnoreEDID"&lt;br /&gt;Option "UseEDID" "True"&lt;br /&gt;#DisplaySize 720 405&lt;br /&gt;#ModeLine "1280x720@60" 74.48 1280 1336 1472 1664 720 721 724 746 -hsync +vsync&lt;br /&gt;#ModeLine "1216x648@60" 74.48 1216 1272 1400 1664 684 685 688 746 -hsync +vsync&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Device"&lt;br /&gt;Identifier "NVIDIA Corporation NV18 [GeForce4 MX 440 AGP 8x]"&lt;br /&gt;Driver "nvidia"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Screen"&lt;br /&gt;Identifier "Default Screen"&lt;br /&gt;Device "NVIDIA Corporation NV18 [GeForce4 MX 440 AGP 8x]"&lt;br /&gt;Monitor "SONY TV"&lt;br /&gt;#Option "FlatPanelProperties" "scaling = centered"&lt;br /&gt;DefaultDepth 24&lt;br /&gt;SubSection "Display"&lt;br /&gt;Depth 24&lt;br /&gt;Modes "nvidia-auto-select"&lt;br /&gt;EndSubSection&lt;br /&gt;EndSection&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Let me know how it works out.&lt;/p&gt;&lt;p&gt;Thanks&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Also, I successfully put my network script in &lt;code&gt;/etc/init.d/bootmisc.sh&lt;/code&gt;:&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;iwconfig ath0 essid Springfield rate auto&lt;br /&gt;ifconfig ath0 down&lt;br /&gt;ifconfig ath0 up&lt;br /&gt;dhclient ath0&lt;br /&gt;/etc/init.d/ntp stop&lt;br /&gt;/etc/init.d/ntp start&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-3506442924849665079?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/3506442924849665079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=3506442924849665079' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3506442924849665079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7250869/posts/default/3506442924849665079'/><link rel='alternate' type='text/html' href='http://brianary.blogspot.com/2007/04/mythtv-config-breakthroughs.html' title='MythTV config breakthroughs'/><author><name>Brian</name><uri>http://www.blogger.com/profile/01186394530871885873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='24' src='http://2.bp.blogspot.com/_8mr1RHUNECA/Sy3FjNvidKI/AAAAAAAAGTs/uW3WQ3ll0Ho/S220/me3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7250869.post-3306624716716002505</id><published>2007-03-28T08:07:00.000-07:00</published><updated>2007-03-28T11:24:54.018-07:00</updated><title type='text'>When to buy Vista</title><content type='html'>&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; this article includes dangerous levels of sarcasm, and should not be read by young children or pregnant women.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Vista supports an expensive (for you) increase in DRM &lt;a href="http://www.cs.auckland.ac.nz/~pgut001/pubs/vista_cost.html" title="A Cost Analysis of Windows Vista Content Protection"&gt;[1]&lt;/a&gt; &lt;a href="http://www.cs.auckland.ac.nz/~pgut001/" title="Peter Gutmann Professional Paranoid"&gt;[2]&lt;/a&gt; &lt;a href="http://www.theregister.co.uk/2006/12/27/windows_drm_monstered/" title="Windows DRM is the 'longest suicide note in history' | The Register"&gt;[3]&lt;/a&gt; &lt;a href="http://www.theregister.co.uk/2006/12/28/vista_drm_analysis/" title="Vista's Suicide Bomb: who gets hurt? | The Register"&gt;[4]&lt;/a&gt; &lt;a href="http://www.theinquirer.net/default.aspx?article=25124" title="Microsoft Vista creates DRM insanity"&gt;[5]&lt;/a&gt; &lt;a href="http://www.boingboing.net/2006/11/15/vista_drm_is_bad_for.html" title="Boing Boing: Vista DRM is bad for Microsoft"&gt;[6]&lt;/a&gt; &lt;a href="http://www.schneier.com/blog/archives/2007/02/drm_in_windows.html" title="Schneier on Security: DRM in Windows Vista"&gt;[7]&lt;/a&gt; &lt;a href="http://www.forbes.com/2007/02/10/microsoft-vista-drm-tech-security-cz_bs_0212vista.html" title="Why Vista's DRM Is Bad For You - Forbes.com"&gt;[8]&lt;/a&gt; &lt;a href="http://news.com.com/2061-11199_3-6154924.html" title="Bloggers air gripes over Vista's DRM | News.blog | CNET News.com"&gt;[9]&lt;/a&gt; &lt;a href="http://www.techweb.com/wire/software/167101037" title="Microsoft Buffeted By Criticism Over Vista DRM - Software Technology News by TechWeb"&gt;[A]&lt;/a&gt; &lt;a href="http://www.boingboing.net/2007/01/29/vista_drm_cracked.html" title="Boing Boing: Vista DRM cracked?"&gt;[B]&lt;/a&gt; &lt;a href="http://www.google.com/search?q=vista%20drm&amp;amp;start=0&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla:en-US:official" title="vista drm - Google Search"&gt;[C]&lt;/a&gt;. Buy it only if you support your digital rights being "managed". &lt;a href="http://www.joystiq.com/2006/12/25/vista-drm-to-slows-down-high-end-graphics/" title="Vista DRM to slow down high-end graphics? [update 1] - Joystiq"&gt;Video drivers that check the "integrity" of their connections over 30 times a second can't be that much slower, right?&lt;/a&gt; Having your video driver "revoked" out from under you is a small price to pay in order to add several layers of new things you've gotta check when things go wrong.&lt;/p&gt;&lt;p&gt;Maybe you just like to drop &lt;a href="http://froogle.google.com/froogle?q=windows%20vista%20ultimate&amp;amp;start=0&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla:en-US:official" title="windows vista ultimate - Froogle"&gt;$250-$400&lt;/a&gt; on improvements that even supporters characterize as "incremental" &lt;a href="http://www.istartedsomething.com/20070319/little-things-add-up/" title="Little things add up - istartedsomething"&gt;[1]&lt;/a&gt; &lt;a href="http://blogs.msdn.com/adam_nathan/archive/2005/08/25/456308.aspx" title="Adam Nathan's Blog : Windows Vista: It's the little things..."&gt;[2]&lt;/a&gt; &lt;a href="http://www.microsoft.com/windows/products/windowsvista/features/default.mspx" title="Windows Vista: Features"&gt;[3]&lt;/a&gt; &lt;a href="http://articles.techrepublic.com.com/5100-10877_11-6156413.html?part=rss&amp;amp;tag=feed&amp;amp;subj=tr" title="Myth #4: The only thing new about Vista is the eye candy"&gt;[4]&lt;/a&gt; &lt;a href="http://www.gearlive.com/index.php/news/article/ces-2006-video-microsoft-gives-us-a-windows-vista-preview-01130556/" title="CES 2006 Video: Microsoft Gives Us A Windows Vista Preview | Gear Live"&gt;[5]&lt;/a&gt;, or &lt;a href="http://www.computing.co.uk/crn/news/2165877/microsoft-opens-vars-eyes-vista" title="Microsoft opens VARs' eyes to Vista benefits - 06 Oct 2006 - Computing.co.uk"&gt;have trouble understanding&lt;/a&gt;. That sidebar will certainly not represent a distraction that will get old inside a few months, or be disabled by your network admin sooner.&lt;/p&gt;&lt;p&gt;Or maybe you appreciate the fact that, to reinstall the upgrade edition, &lt;a href="http://arstechnica.com/news.ars/post/20070128-8717.html" title="Vista &amp;quot;upgrade&amp;quot; drops compliance checking, requires old OS to install"&gt;you have to install XP first&lt;/a&gt; &lt;a href="http://www.microsoft.com/windows/products/windowsvista/buyorupgrade/upgradepaths.mspx" title="Windows Vista: Upgrade Paths from Previous Versions"&gt;[1]&lt;/a&gt;. Every time.&lt;/p&gt;&lt;p&gt;You probably are excited about the Aero Glass interface, if you haven't seen any of the videos of &lt;a href="http://www.metacafe.com/watch/434675/windows_vista_aero_vs_linux_ubuntu_beryl/" title="WINDOWS VISTA (AERO) VS LINUX UBUNTU (BERYL) Video"&gt;Beryl&lt;/a&gt; on &lt;a href="http://www.youtube.com/results?search_query=beryl&amp;amp;search=Search" title="YouTube - Broadcast Yourself."&gt;youtube&lt;/a&gt; or &lt;a href="http://video.google.com/videosearch?q=beryl" title="beryl - Google Video"&gt;Google Video&lt;/a&gt; or &lt;a href="http://www.metacafe.com/tags/beryl/" title="Beryl Movies"&gt;Metacafe&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The security enhancements may help protect you, once they release the latest round of fixes &lt;a href="http://www.theglobeandmail.com/servlet/story/RTGAM.20070214.gtfix0214/BNStory/Technology/home" title="globeandmail.com: Microsoft releases first Vista security fix"&gt;[1]&lt;/a&gt; &lt;a href="http://www.informationweek.com/security/showArticle.jhtml?articleID=177100669" title="Microsoft Posts First Windows Vista Security Fix - Security Technology News by InformationWeek"&gt;[2]&lt;/a&gt; &lt;a href="http://blogs.zdnet.com/security/?p=28" title="» Schneier: Do not upgrade to Vista | Zero Day | ZDNet.com"&gt;[3]&lt;/a&gt; &lt;a href="http://www.computerworld.com/blogs/node/2459" title="On Windows Vista: Security that requires end user attention is not security - Computerworld Blogs"&gt;[4]&lt;/a&gt; &lt;a href="http://www.momentaryfascinations.com/technology/vista.the.worlds.first.user-hostile.operating.system.html" title="Momentary Fascinations: Vista: The World's First User-Hostile Operating System"&gt;[5]&lt;/a&gt; &lt;a href="http://www.cnet.com.au/software/security/0,239029558,339273439,00.htm" title="Security Watch: That Windows XP service pack called Vista - Security And Utilities Software"&gt;[6]&lt;/a&gt;. You are running the 64-bit edition, right? &lt;a href="http://www.theregister.co.uk/2007/02/05/vista_security_criticisms/" title="Security watchers lambast Vista | The Register"&gt;[1]&lt;/a&gt; &lt;a href="http://www.networkworld.com/community/?q=node/9186" title="64-bit Vista security: Should the kernel be completely walled off? | NetworkWorld.com Community"&gt;[2]&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Anyway, be sure you've spent enough money on hardware. &lt;a href="http://technet.microsoft.com/en-us/windowsvista/aa905075.aspx" title="Windows Vista Enterprise Hardware Planning Guidance"&gt;[$]&lt;/a&gt; &lt;a href="http://www.microsoft.com/windows/products/windowsvista/buyorupgrade/capable.mspx" title="Windows Vista: Capable and Premium Ready PCs"&gt;[$]&lt;/a&gt; &lt;a href="http://www.microsoft.com/technet/solutionaccelerators/hardwareassessment/wv/default.mspx" title="Windows Vista Hardware Assessment: Overview"&gt;[$]&lt;/a&gt; &lt;a href="http://ztrek.blogspot.com/2007/01/ka-ching-windows-vistas-real-cost.html" title="Z Trek: The Alan Zeichick Weblog: Ka-Ching! Windows Vista's real cost"&gt;[$]&lt;/a&gt; &lt;a href="http://www.reghardware.co.uk/2006/06/15/windows_vista_hardware/" title="The truth about Windows Vista hardware | Reg Hardware"&gt;[$]&lt;/a&gt; &lt;a href="http://www.extremetech.com/article2/0,1697,2000438,00.asp" title="Windows Vista and the Future of Hardware--ExtremeTech Feature"&gt;[$]&lt;/a&gt; &lt;a href="http://www.tomshardware.com/2007/01/31/windows-vista-superfetch-and-readyboostanalyzed/" title="Windows Vista's SuperFetch and ReadyBoost Analyzed | Tom's Hardware"&gt;[$]&lt;/a&gt; &lt;a href="http://www.windowsnetworking.com/articles_tutorials/Hardware-Considerations-Windows-Vista.html" title="Hardware Considerations for Windows Vista"&gt;[$]&lt;/a&gt; &lt;a href="http://www.msversus.org/microsoft-windows-linux-hardware-requirements.html" title="Microsoft Windows and Linux Hardware Requirements - Microsoft Versus"&gt;[$]&lt;/a&gt; &lt;a href="http://www.betanews.com/article/Vista_Hardware_Assessment_Tool_Addresses_Upgrade_Dilemmas/1172009674" title="BetaNews | Vista Hardware Assessment Tool Addresses Upgrade Dilemmas"&gt;[$]&lt;/a&gt; &lt;a href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9011523" title="Buying a new PC? 'Windows Vista Capable' barely hits the mark"&gt;[$]&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7250869-3306624716716002505?l=brianary.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brianary.blogspot.com/feeds/3306624716716002505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7250869&amp;postID=3306624716716
