<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by: http://www.phpclasses.org/rsswriter $Revision: 1.12 $ -->
<rss version="2.0">
 <channel>
  <title>AlanHogan.com</title>
  <link>http://alanhogan.com/</link>
  <description>Alan Hogan&apos;s website - Web development, Mac user tips, etc.</description>
  <pubDate>Tue, 16 Mar 2010 06:57:02 -0400</pubDate>
  <ttl>5</ttl>
  <language>en-US</language>
  <copyright>Copyright 2010, AlanHogan.com</copyright>
  <image>
   <url>http://pan.alanhogan.com/ribbon/images/ribbonlogo2.gif</url>
   <title>AlanHogan.com</title>
   <link>http://alanhogan.com/</link>
  </image>
  <item>
   <description>&lt;!-- &#10; This document is written in PHP Markdown Extra,&#10; readable as text or convertible to HTML.&#10; Converter &amp; cheatsheet: http://tinyurl.com/extradingus&#10; âExtraâ syntax: http://tinyurl.com/mkdnextra&#10; Plain Markdown syntax: http://bit.ly/mkdnsyntax&#10; Some syntax will be ignored by &#10; vanilla Markdown converters.&#10; (TextMate: ââ¥â-P to preview as web page)&#10;&#10;&#10;SOURCE: http://etherpad.com/rel-shortlink / NOW OUT OF DATE&#10;PUBLISHED: http://alanhogan.com/tips/rel-shortlink-for-short-urls&#10;(STATUS: DRAFT)&#10;SHORTLINK: http://ajh.us/k&#10;&#10;--&gt;&#10;&#10;&#10;&#10;&lt;h2&gt;Everything you need to know about rel-shortlink&lt;/h2&gt;&#10;&#10;&lt;p&gt;Authors and administrators can and should use &lt;code&gt;rel=&quot;shortlink&quot;&lt;/code&gt; to indicate their preferred short URL&lt;sup id=&quot;fnref:short&quot;&gt;&lt;a href=&quot;#fn:short&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; for a piece of content.  Below, I discuss history, reasoning, implementation details, and helpful hints.&lt;/p&gt;&#10;&#10;&lt;h3 id=&quot;sec-rel-shortlink&quot;&gt;Rel-shortlink is decidedly the way to go &lt;a href=&quot;#sec-rel-shortlink&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&#10;&lt;p&gt;Why &lt;code&gt;rel=&quot;shortlink&quot;&lt;/code&gt;?&lt;/p&gt;&#10;&#10;&lt;p&gt;Previous suggestions included &lt;code&gt;rev=&quot;canonical&quot;&lt;/code&gt; which is both confusing and technically incorrect&lt;sup id=&quot;fnref:rev&quot;&gt;&lt;a href=&quot;#fn:rev&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; and the less problematic &lt;code&gt;rel=&quot;shorturl&quot;&lt;/code&gt;.&lt;/p&gt;&#10;&#10;&lt;p&gt;However, &lt;strong&gt;&lt;code&gt;rel=&quot;shortlink&quot;&lt;/code&gt; is a WhatWG standards body&lt;sup id=&quot;fnref:ww&quot;&gt;&lt;a href=&quot;#fn:ww&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;a href=&quot;http://wiki.whatwg.org/wiki/RelExtensions&quot; title=&quot;WhatWG list of rel extensions&quot;&gt;proposal&lt;/a&gt; and is going through the &lt;a href=&quot;http://microformats.org/wiki/rel-shortlink&quot; title=&quot;Microformats.org&quot;&gt;MicroFormats&lt;/a&gt; process,&lt;/strong&gt; unlike any other variants.  A &lt;code&gt;rel=&quot;shortlink&quot;&lt;/code&gt; link is the way to go.&lt;/p&gt;&#10;&#10;&lt;h3 id=&quot;sec-terms&quot;&gt;Terms used in this document &lt;a href=&quot;#sec-terms&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&#10;&lt;!-- TODO graphic --&gt;&#10;&#10;&lt;dl&gt;&#10;&lt;dt&gt;slug&lt;/dt&gt;&#10;&lt;dd&gt;The part of a short URL after the domain and slash.&#10;&lt;dt&gt;service&lt;/dt&gt;&lt;/dd&gt;&#10;&#10;&lt;dd&gt;A web app that takes a long URL and optionally a custom slug and returns&#10;a shorter URL that redirects to the original URL.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&#10;&lt;h3 id=&quot;sec-content&quot;&gt;Implementation into content &lt;a href=&quot;#sec-content&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&#10;&lt;p&gt;&lt;em&gt;The following examples are mostly from &lt;a href=&quot;http://microformats.org/wiki/rel-shortlink&quot; title=&quot;Microformats.org&quot;&gt;Microformats.org&lt;/a&gt;. The long, original resource URL is &lt;a href=&quot;http://www.flickr.com/photos/tantek/3909804165/&quot;&gt;http://www.flickr.com/photos/tantek/3909804165/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;a name=&quot;content-header&quot; id=&quot;content-header&quot; class=&quot;in_page_anchor&quot;&gt;&lt;/a&gt;The #1 most important thing to do as an author or website administrator is to use &#10;the following HTTP header to indicate the &amp;#8220;shortlink.&amp;#8221;&lt;sup id=&quot;fnref:important&quot;&gt;&lt;a href=&quot;#fn:important&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;a href=&quot;#content-header&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/p&gt;&#10;&#10;&lt;pre&gt;&lt;code&gt;Link: &amp;lt;http://flic.kr/p/6XuLyD&amp;gt;; rel=&quot;shortlink&quot;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&#10;&lt;p&gt;&lt;a name=&quot;content-head&quot; id=&quot;content-head&quot; class=&quot;in_page_anchor&quot;&gt;&lt;/a&gt;Authors should also include the following in the HTML &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;&lt;sup id=&quot;fnref:bk&quot;&gt;&lt;a href=&quot;#fn:bk&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;a href=&quot;#content-head&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/p&gt;&#10;&#10;&lt;pre&gt;&lt;code&gt;&amp;lt;link rel=&quot;shortlink&quot; type=&quot;text/html&quot; href=&quot;http://flic.kr/p/6XuLyD&quot;&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&#10;&lt;p&gt;The &lt;code&gt;type&lt;/code&gt; attribute is optional and almost meaningless since the other end of the link is just a redirection back to the current page; thus the content type is already implied.&lt;/p&gt;&#10;&#10;&lt;p&gt;Both of the above representations are important and machine-readable.  (You can your implementation &lt;a href=&quot;http://rel-shortlink.appspot.com/&quot; title=&quot;A URL shortener that is rel-shortlink aware&quot;&gt;here&lt;/a&gt;.)&lt;/p&gt;&#10;&#10;&lt;p&gt;If authors wish to expose short URLs to human site visitors (e.g. to suggest short URLs in the &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;), they may do so any way they wish. As long as the above methods are also used, services (i.e. machines) will correctly understand the canonical &lt;code&gt;shortlink&lt;/code&gt;.&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;a name=&quot;content-body&quot; id=&quot;content-body&quot; class=&quot;in_page_anchor&quot;&gt;&lt;/a&gt;However, there are still related microformat standards which maintain a degree of machine-readability for &lt;strong&gt;user-facing markup.&lt;/strong&gt; Markup standardization is inherently good and encourages portability (of CSS styles and JavaScript code, for example). &lt;a href=&quot;#content-body&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/p&gt;&#10;&#10;&lt;pre&gt;&lt;code&gt;&amp;lt;a rel=&quot;shortlink&quot; type=&quot;text/html&quot; href=&quot;http://flic.kr/p/6XuLyD&quot;&amp;gt;&#10; http://flic.kr/p/6XuLyD&#10;&amp;lt;/a&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&#10;&lt;p&gt;or&lt;/p&gt;&#10;&#10;&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;text&quot;&#10;  class=&quot;shortlink&quot;&#10;  value=&quot;http://flic.kr/p/6XuLyD&quot;&#10;  readonly=&quot;readonly&quot; /&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&#10;&lt;p&gt;The latter would present an input box with the short link, which makes selection for copy &amp;amp; paste easy. The &lt;code&gt;readonly&lt;/code&gt; attribute prevents users from accidentally overwriting the link.&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;a name=&quot;content-js&quot; id=&quot;content-js&quot; class=&quot;in_page_anchor&quot;&gt;&lt;/a&gt;User selection of shortlinks  may be further aided by executing the following JavaScript when users click the text input: &lt;a href=&quot;#content-js&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/p&gt;&#10;&#10;&lt;pre&gt;&lt;code&gt;this.focus(); this.select();&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&#10;&lt;p&gt;&lt;a name=&quot;content-jquery&quot; id=&quot;content-jquery&quot; class=&quot;in_page_anchor&quot;&gt;&lt;/a&gt;A best-practice, unobtrusive &lt;a href=&quot;http://jquery.com/&quot;&gt;jQuery&lt;/a&gt; code snippet to apply this to any and all input elements with a class of &amp;#8220;shortlink&amp;#8221; is as follows:&lt;sup id=&quot;fnref:tempting&quot;&gt;&lt;a href=&quot;#fn:tempting&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;a href=&quot;#content-jquery&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/p&gt;&#10;&#10;&lt;pre&gt;&lt;code&gt;$(document).ready(function() {&#10;        // Auto-select short urls&#10;        $(&apos;input.shortlink&apos;).click(function()&#10;        {&#10;                this.focus();&#10;                this.select();&#10;        });&#10;});&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&#10;&lt;p&gt;&lt;a name=&quot;content-flash&quot; id=&quot;content-flash&quot; class=&quot;in_page_anchor&quot;&gt;&lt;/a&gt;Some authors also provide a button that copies the short URL to the clipboard &lt;a href=&quot;http://www.jeffothy.com/weblog/clipboard-copy/&quot; title=&quot;Jeffothy has a great little write-up on this&quot;&gt;using Flash&lt;/a&gt; (as this is not allowed in JavaScript).&lt;sup id=&quot;fnref:please&quot;&gt;&lt;a href=&quot;#fn:please&quot; rel=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; Be aware that Flash &lt;a href=&quot;http://www.google.com/search?q=mac+flash+crash&quot;&gt;can crash Macs&lt;/a&gt; and a growing number of users are using flash blockers. You may only want to show the Flash-based copy button if Flash is both installed an not blocked. &lt;a href=&quot;/contact?reason=/tips/rel-shortlink-for-short-urls#content-flash&quot;&gt;Let me know of any related best-practice code&lt;/a&gt;.  &lt;a href=&quot;#content-flash&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/p&gt;&#10;&#10;&lt;h3 id=&quot;sec-service&quot;&gt;Shortening service implementations &lt;a href=&quot;#sec-service&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;&#10;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;a name=&quot;service-301&quot; id=&quot;service-301&quot;&gt;&lt;/a&gt;Shortening services should always use the &amp;#8220;301 Moved Permanently&amp;#8221; HTTP status code combined with a &amp;#8220;Location:&amp;#8221; header to redirect user-agents to the longer URL. &lt;a href=&quot;#service-301&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;a name=&quot;service-homoglyphs&quot; id=&quot;service-homoglyphs&quot; class=&quot;in_page_anchor&quot;&gt;&lt;/a&gt;The WhatWG &lt;a href=&quot;http://purl.org/net/shortlink&quot;&gt;suggests&lt;/a&gt; that short URLs consider avoiding lookalike glyphs such as 0/O and 1/l/I, &amp;#8220;particularly when manual entry will be required (e.g. printed, spoken).&amp;#8221; &lt;a href=&quot;#service-homoglyphs&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;a name=&quot;service-custom&quot; id=&quot;service-custom&quot; class=&quot;in_page_anchor&quot;&gt;&lt;/a&gt;The WhatWG also suggests allowing for human-readable slugs (short URLs), which allows users to better guess what lies on the other side of the link. This means allowing custom, manually-set slugs. &lt;a href=&quot;#service-custom&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;a name=&quot;service-case&quot; id=&quot;service-case&quot; class=&quot;in_page_anchor&quot;&gt;&lt;/a&gt;Whether or not capital letters are used is up to the service provider. It is easier to verbally dictate a URL of all lowercase, though mixed-case services can provide dramatically shorter URLs when hosting a large number of URL redirections.  Thus it is my personal recommendation to consider using all lowercase when the redirection service is only expected to hold at most a few thousand redirections, and mixed-case otherwise.&lt;sup id=&quot;fnref:shortest&quot;&gt;&lt;a href=&quot;#fn:shortest&quot; rel=&quot;footnote&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; &lt;a href=&quot;#service-case&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;a name=&quot;service-censor&quot; id=&quot;service-censor&quot; class=&quot;in_page_anchor&quot;&gt;&lt;/a&gt;Shortening services expected to produce four-letter or longer slugs, or allow the public to enter free-form slugs, should strongly consider blocking offensive terms for at least automatically-generated slugs.&lt;sup id=&quot;fnref:c-word&quot;&gt;&lt;a href=&quot;#fn:c-word&quot; rel=&quot;footnote&quot;&gt;9&lt;/a&gt;&lt;/sup&gt; &lt;a href=&quot;#service-censor&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;a name=&quot;service-trailing&quot; id=&quot;service-trailing&quot; class=&quot;in_page_anchor&quot;&gt;&lt;/a&gt;&lt;a name=&quot;service-liberal&quot; id=&quot;service-liberal&quot; class=&quot;in_page_anchor&quot;&gt;&lt;/a&gt;In the spirit of the robustness principle,&lt;sup id=&quot;fnref:robust&quot;&gt;&lt;a href=&quot;#fn:robust&quot; rel=&quot;footnote&quot;&gt;10&lt;/a&gt;&lt;/sup&gt; a URL shortening service should expect other programs to add extra punctuation on the end of short URLs it expects to resolve. The service should attempt to gracefully deal with this. For example, a user may write:&lt;/p&gt;&#10;&#10;&lt;blockquote&gt;&#10;  &lt;p&gt;&amp;#8230; these guidelines for short URLs (http://ajh.us/k).&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&#10;&lt;p&gt;and a plaintext URL auto-linker&lt;sup id=&quot;fnref:gruber&quot;&gt;&lt;a href=&quot;#fn:gruber&quot; rel=&quot;footnote&quot;&gt;11&lt;/a&gt;&lt;/sup&gt; may match this as&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;code&gt;http://ajh.us/k)&lt;/code&gt;&lt;/p&gt;&#10;&#10;&lt;p&gt;in which case the service at ajh.us may receive a request for the URLs&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;code&gt;http://ajh.us/k)&lt;/code&gt;,&lt;br /&gt;&#10;&lt;code&gt;http://ajh.us/k%29&lt;/code&gt;, or perhaps even&lt;br /&gt;&#10;&lt;code&gt;http://ajh.us/k).&lt;/code&gt;&lt;/p&gt;&#10;&#10;&lt;p&gt;Thus, it is a best practice for services to use one of&#10;the following algorithms (in pseudocode)&#10;when redirecting&lt;sup id=&quot;fnref:caveat-trim&quot;&gt;&lt;a href=&quot;#fn:caveat-trim&quot; rel=&quot;footnote&quot;&gt;12&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#10;&#10;&lt;p&gt;Whitelist method (most forgiving):&lt;/p&gt;&#10;&#10;&lt;pre&gt;&lt;code&gt;slug //from user&#10;pattern = /^[0-9a-z]+/i //whitelist of characters allowed in slug&#10;slug = regex_match(pattern, slug)&#10;if ! slug then fail&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&#10;&lt;p&gt;Right-trim method (serves more 404s for truly horrible requests):&lt;/p&gt;&#10;&#10;&lt;pre&gt;&lt;code&gt;slug //from user&#10;slug = urldecode(slug) //decode %-encoded characters e.g. %29&#10;characters_to_trim = &quot;)&amp;gt;]}.,;!-&quot;&#10;right_trim(slug, characters_to_trim)&#10;if length(slug) == 0 then fail&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&#10;&lt;p&gt;&lt;a href=&quot;/contact?reason=/tips/rel-shortlink-for-short-urls#service-liberal&quot;&gt;Let me know&lt;/a&gt; if additional erroneous trailing characters should be stripped in the second method.&lt;/p&gt;&#10;&#10;&lt;p&gt;I would use whichever algorithm is faster in your environment. &lt;a href=&quot;#service-trailing&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;a name=&quot;service-specialchars&quot; id=&quot;service-specialchars&quot; class=&quot;in_page_anchor&quot;&gt;&lt;/a&gt;I am currently unsure as to the best way to deal with special characters like &lt;code&gt;&amp;ldquo;&amp;rdquo;&amp;eacute;()&lt;/code&gt; in long URLs. Such characters &amp;#8220;shouldn&amp;#8217;t&amp;#8221; be in HTTP URLs in the first place, but again, according to the robustness principle, services should support them, as they do show up in the wild.&lt;/p&gt;&#10;&#10;&lt;p&gt;Please &lt;a href=&quot;/contact?reason=/tips/rel-shortlink-for-short-urls#service-specialchars&quot;&gt;contact me if you are aware of a best practice&lt;/a&gt; for dealing with special characters in original URLs. &lt;a href=&quot;#service-specialchars&quot; class=&quot;in_page_anchor_link&quot;&gt;#&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10;&lt;h3&gt;Caveats&lt;/h3&gt;&#10;&#10;&lt;p&gt;Be careful not to serve &lt;code&gt;shortlink&lt;/code&gt; incorrectly by making incorrect assumptions regarding GET parameters. A resource&amp;#8217;s &lt;code&gt;shortlink&lt;/code&gt; must redirect to exactly the same content.&lt;sup id=&quot;fnref:excludes&quot;&gt;&lt;a href=&quot;#fn:excludes&quot; rel=&quot;footnote&quot;&gt;13&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#10;&#10;&lt;p&gt;Also understand that using &lt;code&gt;shortlink&lt;/code&gt; is a commitment to always support that short URL for as many years into the future as possible.&lt;sup id=&quot;fnref:goodurls&quot;&gt;&lt;a href=&quot;#fn:goodurls&quot; rel=&quot;footnote&quot;&gt;14&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#10;&#10;&lt;p&gt;Lastly, this standard is new (having been suggested less than a year ago, in early 2009). It is not finalized, and early some implementors are still using alternatives such as &lt;code&gt;rev=&quot;canonical&quot;&lt;/code&gt;, &lt;code&gt;rel=&quot;short&quot;&lt;/code&gt;, etc.&lt;sup id=&quot;fnref:fl&quot;&gt;&lt;a href=&quot;#fn:fl&quot; rel=&quot;footnote&quot;&gt;15&lt;/a&gt;&lt;/sup&gt; However, this standard makes the most sense and is backed by standards bodies; Google Suggest also hints that &lt;code&gt;rel=&quot;shortlink&quot;&lt;/code&gt; is already the most popular choice.&lt;/p&gt;&#10;&#10;&lt;div class=&quot;footnotes&quot;&gt;&#10;&lt;div class=&quot;hr&quot;&gt;&lt;hr /&gt;&lt;/div&gt;&#10;&lt;ol&gt;&#10;&#10;&lt;li id=&quot;fn:short&quot;&gt;&#10;&lt;p&gt;Short URLs redirect to a longer URL when entered into an address bar. They are convenient for media where space or characters come at a premium, such as Twitter, phone, and print.&amp;#160;&lt;a href=&quot;#fnref:short&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;li id=&quot;fn:rev&quot;&gt;&#10;&lt;p&gt;Technically, a &lt;code&gt;rev=&quot;canonical&quot;&lt;/code&gt; link means &amp;#8220;the page I am linking to considers me to be the canonical, or best/truest, URL for this content.&amp;#8221; An example of why this is wrong for short URLs was pointed out by &lt;a href=&quot;http://shiflett.org/blog/2009/apr/save-the-internet-with-rev-canonical#comment-1&quot; title=&quot;Comment on Shiflett&apos;s endorsement of rev-canonical&quot;&gt;Eli White&lt;/a&gt;: &amp;#8220;The canonical URL of something on php.net might look like: http://php.net/manual/en/security.php &amp;#8230; However, you will never actually be served HTML under that canonical URL, instead you are auto-redirected to a mirror, such as: http://us3.php.net/manual/en/security.php.&amp;#8221; This means for php.net to use &lt;code&gt;rev=&quot;canonical&quot;&lt;/code&gt; would be to incorrectly assert that the current page is the canonical, or &amp;#8220;one true&amp;#8221; URL for that content. What we really want is a way to say, &amp;#8220;the resource I am linking to is the canonical, or &amp;#8216;one true,&amp;#8217; short URL for myself,&amp;#8221; which is a different thing entirely.&amp;#160;&lt;a href=&quot;#fnref:rev&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;li id=&quot;fn:ww&quot;&gt;&#10;&lt;p&gt;The WhatWG is the group bringing us HTML5 and are similar in function to the W3C.&amp;#160;&lt;a href=&quot;#fnref:ww&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;li id=&quot;fn:important&quot;&gt;&#10;&lt;p&gt;This is because other services, such as Twitter clients, may use an HTTP HEAD request on the long URL to see if it has a canonical short URL defined.&amp;#160;&lt;a href=&quot;#fnref:important&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;li id=&quot;fn:bk&quot;&gt;&#10;&lt;p&gt;This helps bookmarklets and other client-side code function, as bookmarklets only have the document to work with, not the headers.&amp;#160;&lt;a href=&quot;#fnref:bk&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;li id=&quot;fn:tempting&quot;&gt;&#10;&lt;p&gt;It is tempting to apply the above code on the focus event (a more general event than click, it would include tabbing into the input box), but some browsers require the focus event to finish firing before &lt;code&gt;select()&lt;/code&gt; is called for &lt;code&gt;select()&lt;/code&gt; to have any effect.&amp;#160;&lt;a href=&quot;#fnref:tempting&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;li id=&quot;fn:please&quot;&gt;&#10;&lt;p&gt;Please indicate to your browser manufacturer and/or standards bodies that you would like a JavaScript method to copy to the clipboard (if the user trusts the site in question.)&amp;#160;&lt;a href=&quot;#fnref:please&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;li id=&quot;fn:shortest&quot;&gt;&#10;&lt;p&gt;It is possible, though uncommon and not recommended, to produce even shorter URLs by using more characters than just alphanumerics. For instance, slashes, periods, commas, and a question mark could be used. However, there are serious reasons to avoid these characters in slugs, especially as a trailing character. For instance, the URL &lt;code&gt;http://example.com/foo.&lt;/code&gt; will typically become a hyperlink to &lt;code&gt;http://example.com/foo&lt;/code&gt;, losing the trailing full stop, when auto-linked as it would be in Twitter or a plaintext email. Some &lt;a href=&quot;http://tinyarro.ws/&quot; title=&quot;TinyArro.ws&quot;&gt;other short URL providers&lt;/a&gt; use Unicode symbols in their short URLs, but support for these URLs is weak among email and &lt;a href=&quot;http://help.twitter.com/forums/31935/entries/101737&quot; title=&quot;TinyArro.ws broken on Twitter&quot;&gt;Twitter&lt;/a&gt; &lt;a href=&quot;http://daringfireball.net/linked/2009/03/05/tinyarrows&quot; title=&quot;Twitterrific didn&apos;t support them&quot;&gt;clients&lt;/a&gt; and on many mobile devices.&amp;#160;&lt;a href=&quot;#fnref:shortest&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;li id=&quot;fn:c-word&quot;&gt;&#10;&lt;p&gt;TinyURL.com had a minor mess on their hands when someone linked an &lt;a href=&quot;http://tinyurl.com/nospam.php?id=cunt&quot;&gt;offensive slug&lt;/a&gt; to the then-current U.S. First Lady&amp;#8217;s homepage.&amp;#160;&lt;a href=&quot;#fnref:c-word&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;li id=&quot;fn:robust&quot;&gt;&#10;&lt;p&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Robustness_principle&quot; title=&quot;The Robustness Principle&quot;&gt;robustness principle&lt;/a&gt; is, &amp;#8220;Be conservative in what you do; be liberal in what you accept from others.&amp;#8221;&amp;#160;&lt;a href=&quot;#fnref:robust&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;li id=&quot;fn:gruber&quot;&gt;&#10;&lt;p&gt;John Gruber suggests a &lt;a href=&quot;http://daringfireball.net/2009/11/liberal_regex_for_matching_urls&quot;&gt;liberal regex pattern&lt;/a&gt; that can avoid these mistakes (usually).&amp;#160;&lt;a href=&quot;#fnref:gruber&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;li id=&quot;fn:caveat-trim&quot;&gt;&#10;&lt;p&gt;Unless of course the characters to be trimmed can appear in legitimate&#10;short URL slugs. In that case, you should trim them only if a legitimate short URL is not found.  However, supporting these characters is obviously a really bad idea, in the opposite case where third party plaintext URL auto-linkers prematurely end matching your link.&amp;#160;&lt;a href=&quot;#fnref:caveat-trim&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;li id=&quot;fn:excludes&quot;&gt;&#10;&lt;p&gt;This excludes trivial enhancements to the page, e.g. a user menu at the top, as long as the main content resource is unchanged.&amp;#160;&lt;a href=&quot;#fnref:excludes&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;li id=&quot;fn:goodurls&quot;&gt;&#10;&lt;p&gt;&lt;a href=&quot;http://www.w3.org/Provider/Style/URI&quot; title=&quot;Says Tim B-L&quot;&gt;Cool URIs don&amp;#8217;t change&lt;/a&gt;&amp;#160;&lt;a href=&quot;#fnref:goodurls&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;li id=&quot;fn:fl&quot;&gt;&#10;&lt;p&gt;As of February 14, 2010, this still includes Flickr, where the original rev-canonical variant was first proposed.&amp;#160;&lt;a href=&quot;#fnref:fl&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description>
   <guid>http://alanhogan.com/tips/rel-shortlink-for-short-urls</guid>
   <link>http://alanhogan.com/tips/rel-shortlink-for-short-urls</link>
   <category>tips</category>
   <category>rel-shortlink</category>
   <category>short urls</category>
   <category>best practices</category>
   <category>jquery</category>
   <category>javascript</category>
   <category>microformats</category>
   <category>web dev</category>
   <category>standards</category>
   <category>whatwg</category>
   <title>Short URLs in Markup with rel-shortlink</title>
   <pubDate>Tue, 23 Feb 2010 04:51:58 -0500</pubDate>
  </item>
  <item>
   <description>&lt;!-- &#10;  This document is written in PHP Markdown Extra,&#10;  readable as text or convertible to HTML.&#10;  Converter &amp; cheatsheet: http://tinyurl.com/extradingus&#10;  âExtraâ syntax: http://tinyurl.com/mkdnextra&#10;  Plain Markdown syntax: http://bit.ly/mkdnsyntax&#10;  Some syntax will be ignored by &#10;  vanilla Markdown converters.&#10;  (TextMate: ââ¥â-P to preview as web page)&#10;--&gt;&#10;&#10;&lt;p&gt;There is &lt;strong&gt;no way&lt;/strong&gt; Google Buzz will be a successful product.  Why not?  Here&amp;#8217;s a hint: It&amp;#8217;s more than those massive &lt;a href=&quot;http://www.nytimes.com/2010/02/13/technology/internet/13google.html?hpw&quot; title=&quot;NYT: Google exposes private information by default with Buzz&quot;&gt;security blunders&lt;/a&gt;, since Google is &lt;a href=&quot;http://gmailblog.blogspot.com/2010/02/new-buzz-start-up-experience-based-on.html&quot; title=&quot;No more auto-follow&quot;&gt;already&lt;/a&gt; &lt;a href=&quot;http://gmailblog.blogspot.com/2010/02/millions-of-buzz-users-and-improvements.html&quot; title=&quot;Blocking and other privacy improvements&quot;&gt;fixing&lt;/a&gt; those.&lt;/p&gt;&#10;&#10;&lt;h3&gt;Reading updates feels like an obligation&lt;/h3&gt;&#10;&#10;&lt;div class=&quot;floatRight&quot;&gt;&#10;&#10;&lt;p&gt;&lt;img src=&quot;http://alanhogan.com/images/buzz_look_at_meeeee2-20100213-214123.png&quot; alt=&quot;&amp;quot;Look at me! look at me look at me look at meeee!&amp;quot;&quot; /&gt;&lt;br /&gt;&#10;&lt;em&gt;&lt;small&gt;Look at me, look at me!&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;This is a huge mistake.&lt;/p&gt;&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;p&gt;Buzz appears right below Inbox in Gmail&amp;#8217;s left-hand navigation. And like &amp;#8220;Inbox,&amp;#8221; &amp;#8220;Buzz&amp;#8221; becomes bolded and shows an unread count in parentheses when it contains unread items.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;New content on Buzz receives yellow highlighting.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;Any replies, no matter how insignificant the are compared to the hopefully serious items in my email inbox, get bumped into my Gmail inbox.&lt;/li&gt;&#10;&lt;li&gt;When I got Buzz, my Google Reader account instantly started overflowing with every single article anyone I follow on Buzz shares, as if I didn&amp;#8217;t have enough to read already. &lt;a href=&quot;http://www.25hoursaday.com/weblog/2009/08/26/TheTop5ReasonsRSSReadersWentWrong.aspx&quot; title=&quot;Dare on the top 5 reasons RSS readers went wrong&quot;&gt;RSS feeds are not as inconsequential as Twitter feeds&lt;/a&gt;. This should &lt;strong&gt;not&lt;/strong&gt; be default behavior, and there should be a way to opt out of this without stopping following everyone on Buzz!&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;p&gt;&lt;strong&gt;None of this makes any sense.&lt;/strong&gt; Since Buzz is a direct competitor to Twitter, Buzz updates are theoretically low-value, non-critical, skimmable, and okay to completely ignore.  Adding an unread count encourages users to catch up on Buzz items as soon as one or more new ones are available. All of the above &amp;#8220;features&amp;#8221; interrupt workflow, fragment skimming sessions, and ruin the low-intensity &amp;#8220;skim, read, and briefly respond&amp;#8221; experience.&lt;/p&gt;&#10;&#10;&lt;p&gt;After all, there&amp;#8217;s a reason Twitter isn&amp;#8217;t a service that emails you all of your friends&amp;#8217; updates.&lt;/p&gt;&#10;&#10;&lt;table class=&quot;text first-col-right&quot;&gt;&#10;      &lt;thead&gt;&#10;        &lt;tr&gt;&#10;                &lt;th&gt;Fun&lt;/th&gt;&#10;                &lt;th&gt; vs. &lt;/th&gt;&#10;                &lt;th&gt;Stressful&lt;/th&gt;&#10;        &lt;/tr&gt;&#10;        &lt;/thead&gt;&lt;tbody&gt;&#10;        &lt;tr&gt;&#10;                &lt;td&gt;Stream&lt;/td&gt;&#10;                &lt;td&gt; vs. &lt;/td&gt;&#10;                &lt;td&gt;Inbox&lt;/td&gt;&#10;        &lt;/tr&gt;&#10;        &lt;tr&gt;&#10;                &lt;td&gt;&lt;!--&amp;ldquo;--&gt;&lt;a href=&quot;http://www.reallysimplesyndication.com/riverOfNews&quot; title=&quot;Dave Winer on RSS reader experiences&quot;&gt;River of news&lt;/a&gt;&lt;!--&amp;rdquo;--&gt;&lt;/td&gt;&#10;                &lt;td&gt; vs. &lt;/td&gt;&#10;                &lt;td&gt;Action items&lt;/td&gt;&#10;        &lt;/tr&gt;&#10;        &lt;tr&gt;&#10;                &lt;td&gt;Twitter&lt;/td&gt;&#10;                &lt;td&gt; vs. &lt;/td&gt;&#10;                &lt;td&gt;Email&lt;/td&gt;&#10;        &lt;/tr&gt;&#10;        &lt;tr&gt;&#10;                &lt;td&gt;Unread count&lt;/td&gt;&#10;                &lt;td&gt; vs. &lt;/td&gt;&#10;                &lt;td&gt;Recent items&lt;/td&gt;&#10;        &lt;/tr&gt;&#10;        &lt;tr&gt;&#10;                &lt;td&gt;Serendipity&lt;/td&gt;&#10;                &lt;td&gt; vs. &lt;/td&gt;&#10;                &lt;td&gt;Obligation&lt;/td&gt;&#10;        &lt;/tr&gt;&#10;        &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10;&lt;h3&gt;Doesn&amp;#8217;t encourage scanning&lt;/h3&gt;&#10;&#10;&lt;p&gt;Inline content (like pictures &amp;amp; video) and comments (as opposed to separate @-replies) are one of the biggest reasons that Pownce and FriendFeed never caught on.&lt;/p&gt;&#10;&#10;&lt;p&gt;Why? After all, they sound like a good feature; they make it easier to see shared content, right? Wrong.  Inline content steales focus.&lt;/p&gt;&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;Inline pictures and videos are all your eye will want to look at, instead of scanning faces, names, and text&lt;/li&gt;&#10;&lt;li&gt;They take up room that could be used to fit more (text-only) updates on the screen. This makes quickly scanning updates much more difficult.&lt;/li&gt;&#10;&lt;li&gt;The assumption I care about peoples&amp;#8217; replies or &amp;#8220;likes&amp;#8221; to updates is often going to be incorrect.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;p&gt;Each item in Buzz  takes up &lt;em&gt;way too much room&lt;/em&gt;. Look at this: Only &lt;strong&gt;one update&lt;/strong&gt; fits on my screen at a time.&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;a href=&quot;http://alanhogan.com/images/Buzz_-_one_item-20100213-190132.png&quot;&gt;&lt;img src=&quot;http://alanhogan.com/images/Buzz_-_one_item_sm-20100213-190257.png&quot; alt=&quot;One item takes up my whole screen&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#10;&#10;&lt;p&gt;The text of each update is de-emphasized by the abundance of text-heavy, shiny, space-stealing options. Just look at this. The dubious value of the &amp;#8220;Email&amp;#8221; action &lt;strong&gt;does not in any way&lt;/strong&gt; warrant its prominent position here. Two &amp;#8220;Comment&amp;#8221; links is two too many (okay, at least one), and a simple grey icon would be less distracting. &amp;#8220;Like&amp;#8221; is way too visually prominent. And just look at all the wasted space and text when I am the only one to &amp;#8220;like&amp;#8221; something:&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;a href=&quot;http://emberapp.com/alanhogan/images/google-buzz-too-much&quot; title=&quot;View Image Google Buzz: Too Much at Ember.com&quot;&gt;&lt;img src=&quot;http://alanhogan.com/images/too_much-20100213-190444.png&quot; data-alt-src=&quot;http://emberapp.com/alanhogan/images/google-buzz-too-much/sizes/m.png&quot; title=&quot;Google Buzz: Too Much&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#10;&#10;&lt;p&gt;What&amp;#8217;s up with the visual weight given to the source of each update (Twitter, Buzz, Reader, Picasa, etc.)?&lt;/p&gt;&#10;&#10;&lt;p&gt;I&amp;#8217;m done design-raging now. Time to let my other personality defect shine, and be anti-social:&lt;/p&gt;&#10;&#10;&lt;h3&gt;Too many non-friends&lt;/h3&gt;&#10;&#10;&lt;p&gt;Consider this: I am following Doug Bowman (&lt;a href=&quot;http://twitter.com/stop&quot; title=&quot;@stop is a Twitter employee who used to work as a designer for Google, interestingly enough&quot;&gt;@stop&lt;/a&gt;) on Google Buzz. He&amp;#8217;s a pretty popular guy on Twitter, as a high-profile employee of theirs, and good designer, to boot. This means lots of people follow him not only on Twitter but also on Buzz.&lt;/p&gt;&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;When I comment on his status, my his own update shows up in his Gmail inbox so he can see my response. Now, I think I&amp;#8217;m a pretty cool guy, but that doesn&amp;#8217;t mean Doug does, and I&amp;#8217;m going to go out on a limb and say he doesn&amp;#8217;t care for every Tom, Dick, and Jane&amp;#8217;s comment cluttering his inbox.&lt;/li&gt;&#10;&lt;li&gt;Similarly, when someone else comments on or &amp;#8220;likes&amp;#8221; his update, that update gets promoted to the top of my Buzz feed. That&amp;#8217;s ridiculous and confusing by itself, but when I don&amp;#8217;t know 90%+ of the people following Doug, there is precious little value to that. It also unfairly makes Doug&amp;#8217;s updates much more likely to be read than less-popular Buzzers&amp;#8217;, since his are more likely to be commented on and thus more likely to be at the top of my feed when I use Buzz.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;h3&gt;We&amp;#8217;ve seen all of this before&lt;/h3&gt;&#10;&#10;&lt;p&gt;A year ago, &lt;a href=&quot;http://www.25hoursaday.com/weblog/2009/01/17/SomeThoughtsOnUserInterfacesForActivityStreams.aspx&quot;&gt;Dare Obasanjo listed&lt;/a&gt; these four criticisms with FriendFeed, a service which, like Buzz, allowed people to consume updates from Twitter and elsewhere:&lt;/p&gt;&#10;&#10;&lt;blockquote&gt;&#10;  &lt;ul&gt;&#10;  &lt;li&gt;Too few items per screen&lt;/li&gt;&#10;  &lt;li&gt;Secondary information clogs up each item&lt;/li&gt;&#10;  &lt;li&gt;Difficult to scan content titles quickly&lt;/li&gt;&#10;  &lt;li&gt;People who aren&amp;#8217;t my friends&lt;/li&gt;&#10;  &lt;/ul&gt;&#10;&lt;/blockquote&gt;&#10;&#10;&lt;p&gt;Sound familiar? Buzz has those same problems. Does no one at Google learn from others&amp;#8217; mistakes?  &lt;strong&gt;Does no one at Google read Dare?&lt;sup id=&quot;fnref:dare&quot;&gt;&lt;a href=&quot;#fn:dare&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/strong&gt; Sheesh.&lt;/p&gt;&#10;&#10;&lt;div class=&quot;footnotes&quot;&gt;&#10;&lt;div class=&quot;hr&quot;&gt;&lt;hr /&gt;&lt;/div&gt;&#10;&lt;ol&gt;&#10;&#10;&lt;li id=&quot;fn:dare&quot;&gt;&#10;&lt;p&gt;How many times has Dare, also known as &lt;a href=&quot;http://twitter.com/carnage4life&quot;&gt;Carnage4Life&lt;/a&gt;, insightfully written about consuming feeds of content? There was &lt;a href=&quot;http://www.25hoursaday.com/weblog/2009/01/17/SomeThoughtsOnUserInterfacesForActivityStreams.aspx&quot;&gt;Some Thoughts on User Interfaces for Activity Streams&lt;/a&gt;, then &lt;a href=&quot;http://www.25hoursaday.com/weblog/2009/05/05/RSSReadersModeledAfterEmailClientsAreFundamentallyBroken.aspx&quot;&gt;RSS readers modeled after email clients are fundamentally broken&lt;/a&gt;, and finally &lt;a href=&quot;http://www.25hoursaday.com/weblog/2009/08/26/TheTop5ReasonsRSSReadersWentWrong.aspx&quot; title=&quot;Dare on the top 5 reasons RSS readers went wrong&quot;&gt;The Top 5 Reasons RSS Readers Went Wrong&lt;/a&gt;, for starters. &lt;strong&gt;Update&lt;/strong&gt;: And just today, he writes about &lt;a href=&quot;http://www.25hoursaday.com/weblog/2010/02/13/AutofollowingOnSocialNetworksAndUserPrivacyBecomingAPawnInACompetitiveChessGames.aspx&quot; title=&quot;Autofollowing on Social Networks and User Privacy Becoming a Pawn in a Competitive Chess Games&quot;&gt;Google ignoring user privacy to give Buzz a competitive advantage&lt;/a&gt;.&amp;#160;&lt;a href=&quot;#fnref:dare&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description>
   <guid>http://alanhogan.com/buzz-is-already-dead</guid>
   <link>http://alanhogan.com/buzz-is-already-dead</link>
   <category>Google Buzz</category>
   <category>Twitter</category>
   <category>Social Network</category>
   <category>UI</category>
   <category>UX</category>
   <category>Design</category>
   <category/>
   <title>Google Buzz is Already Dead</title>
   <pubDate>Sat, 13 Feb 2010 21:30:55 -0500</pubDate>
  </item>
  <item>
   <description>&lt;p&gt;What would you do if your broadband service with your DSL company ended when you moved several months ago, and out of the blue the following landed in your e-mail inbox?&lt;/p&gt;&#10;&#10;&lt;blockquote&gt;&#10;  &lt;h3&gt;Notice: Changes have been made to your Qwest&amp;reg; customer profile.&lt;/h3&gt;&#10;  &#10;  &lt;p&gt;Our records show you recently made these change(s) to your customer profile, either by contacting a Qwest representative, or through your MyAccount page at qwest.com.&lt;/p&gt;&#10;  &#10;  &lt;p&gt;Email Address Changes&lt;br /&gt;&#10;  *The e-mail address you provided for us to reach you.&lt;/p&gt;&#10;  &#10;  &lt;p&gt;For Qwest account ending in:7503&lt;/p&gt;&#10;  &#10;  &lt;p&gt;At Qwest, we value the security of our customers&amp;#8217; information and are sending this notice as a confirmation. As long as this change was made intentionally, no action is necessary. However, if you feel this change has been made in error, please contact Qwest immediately at 1&amp;#160;866-450-6152(Residential) or 1&amp;#160;800-603-600(Small Business).&lt;/p&gt;&#10;  &#10;  &lt;p&gt;Thank you for helping us maintain the security of your account.&lt;/p&gt;&#10;  &#10;  &lt;p&gt;&lt;em&gt;[Marketing pitches comprising the rest of the email have been redacted.]&lt;/em&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&#10;&lt;p&gt;Well I certainly hadn&amp;#8217;t made the change, so I called Qwest at the number provided. After being asked irrelevant questions by their friendly and persistent automaton, I was transferred to a real live human operator. I explained the situation.&lt;/p&gt;&#10;&#10;&lt;p&gt;He asked me a few times if I was sure I hadn&amp;#8217;t changed my email address. After finding my old account number and reading it to him, along with my name and address, he informed me my old customer number had been re-assigned to a new customer and I &amp;#8220;had probably nothing to worry about.&amp;#8221;&lt;/p&gt;&#10;&#10;&lt;p&gt;&amp;#8220;&amp;#8216;Probably&amp;#8217; isn&amp;#8217;t good enough,&amp;#8221; I replied.  After all, they had sent an email designed to alert me of suspicious activity.  I hardly wanted my old account to be used to pay for someone else&amp;#8217;s Internet service.  He then assured me it was a completely new account (without, to his credit, divulging any personal details of the new customer).&lt;/p&gt;&#10;&#10;&lt;p&gt;At this point it was now clear the alarming email I received should not have been sent and my time was therefore wasted.  I asked the representative to ensure this would not happen to other Qwest customers in the future. He refused to do so, saying there was nothing he could do. I did not, of course, expect that he would roll up his sleeves and fix this bug in Qwest&amp;#8217;s system, so I clarified by asking that he tell a superior about the problem to ensure it would be taken care off. &amp;#8220;I am sure there is nothing they can do, either,&amp;#8221; was his hopelessly pathetic, unempowered, uncaring, self-defeating reply. I insisted he try and was promptly put on hold, at which point I hung up, having had enough.&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;strong&gt;I fault both the Qwest representative and Qwest itself here.&lt;/strong&gt; The representative clearly didn&amp;#8217;t care if the problem was ever resolved, though it would end up wasting more customers&amp;#8217; time and costing his employer money in unnecessary calls to customer support. The Qwest company itself evidently has a corporate culture of apathy and does nothing to empower or educate its representatives to help get real problems solved.&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;strong&gt;That&amp;#8217;s the lesson to be learned here: Tell your employees to do whatever it takes to solve the problem at hand. Tell them what to do when they don&amp;#8217;t think anything can be done.&lt;/strong&gt;&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;em&gt;In the past I have had difficulties with Verizon, AT&amp;amp;T, and Cox as well.  Is there no decent telecommunications company?&lt;/em&gt;&lt;/p&gt;&#10;</description>
   <guid>http://alanhogan.com/qwest-customer-service</guid>
   <link>http://alanhogan.com/qwest-customer-service</link>
   <category>customer support</category>
   <category>customer service</category>
   <category>bugs</category>
   <category>doing it wrong</category>
   <category>telecommunications</category>
   <category>qwest</category>
   <category>DSL</category>
   <category>ISP</category>
   <title>Qwest Customer Service: Terrible</title>
   <pubDate>Wed, 21 Oct 2009 20:22:18 -0400</pubDate>
  </item>
  <item>
   <description>&lt;p&gt;The &lt;a href=&quot;#plugin&quot;&gt;plugin&lt;/a&gt; and what I &lt;a href=&quot;#usage&quot;&gt;use it for&lt;/a&gt;.&lt;/p&gt;&#10;&#10;&lt;h3&gt;&lt;a name=&quot;plugin&quot;&gt;&lt;/a&gt;The Plugin&lt;/h3&gt;&#10;&#10;&lt;p&gt;&lt;a href=&quot;http://wordpress.org/extend/plugins/github-linker/&quot;&gt;GitHub Bug Linker&lt;/a&gt; is a simple Wordpress plugin that looks for numbers with pound signs in front of them and links them to issues in your GitHub repository.&lt;/p&gt;&#10;&#10;&lt;p&gt;There is a lot of room for improvement:&lt;/p&gt;&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;Doesn&amp;#8217;t acknowledge other syntaxes for linking to issues that GitHub supports (like repo/#1).&lt;/li&gt;&#10;&lt;li&gt;Doesn&amp;#8217;t ignore numbers in &lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt; blocks (straight regexp find/replace).&lt;/li&gt;&#10;&lt;li&gt;Would be fantastic if it used the GitHub API to check the status of linked issues and cross off closed issues.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;p&gt;This plugin is based on &lt;a href=&quot;http://wordpress.org/extend/plugins/eht-mantis/&quot;&gt;EHT Mantis&lt;/a&gt; and is released under the LGPL.&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;strong&gt;Download GitHub Issue Linker from &lt;a href=&quot;http://wordpress.org/extend/plugins/github-linker/&quot;&gt;its Wordpress Plugin page&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&#10;&#10;&lt;h3&gt;&lt;a name=&quot;usage&quot;&gt;&lt;/a&gt;Killer App: Dev team wiki/documentation&lt;/h3&gt;&#10;&#10;&lt;p&gt;I have paired this plugin with a few other Wordpress plugins to create a darned good (programming) project documentation system:&lt;/p&gt;&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href=&quot;http://wordpress.org/extend/plugins/members-only/&quot;&gt;Members Only&lt;/a&gt; to keep anyone but team members from seeing documentation&lt;sup id=&quot;fnref:why_private_wp&quot;&gt;&lt;a href=&quot;#fn:why_private_wp&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href=&quot;http://mitcho.com/code/&quot;&gt;Markdown for Wordpress and bbPress&lt;/a&gt; because &#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;it disables Wordpress&amp;#8217;s annoying over-processing of content and&lt;/li&gt;&#10;&lt;li&gt;it allows us to use Markdown, my favorite quick markup/wiki syntax (also used on GitHub for everything but their wiki)&lt;/li&gt;&#10;&lt;/ul&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href=&quot;http://email-users.vincentprat.info/&quot;&gt;Email Users&lt;/a&gt; so team members can alert others to new and updated pages&lt;/li&gt;&#10;&lt;li&gt;&lt;a href=&quot;http://www.joedolson.com/articles/wp-to-twitter/&quot;&gt;WP to Twitter&lt;/a&gt; to populate our private, internal Twitter feed with new and updated documents&lt;/li&gt;&#10;&lt;li&gt;&lt;a href=&quot;http://softwaremaniacs.org/soft/highlight/&quot;&gt;highlight.js&lt;/a&gt; to automatically highlight any &lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt; pasted into the content&lt;/li&gt;&#10;&lt;li&gt;One of the &amp;#8220;Link to Post&amp;#8221; plugins to make linking to other doc pages simple&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;p&gt;It&amp;#8217;s a pretty great system, in my opinion.&lt;/p&gt;&#10;&#10;&lt;div class=&quot;footnotes&quot;&gt;&#10;&lt;div class=&quot;hr&quot;&gt;&lt;hr /&gt;&lt;/div&gt;&#10;&lt;ol&gt;&#10;&#10;&lt;li id=&quot;fn:why_private_wp&quot;&gt;&#10;&lt;p&gt;Yes, Wordpress allows individual pages to be marked as private, but then they donât show up in the nav, and neglect could expose sensitive information.&amp;#160;&lt;a href=&quot;#fnref:why_private_wp&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description>
   <guid>http://alanhogan.com/projects/wordpress/github-issue-linker</guid>
   <link>http://alanhogan.com/projects/wordpress/github-issue-linker</link>
   <category>wordpress</category>
   <category>GPL</category>
   <category>GitHub</category>
   <category>bug tracking</category>
   <category>issue tracking</category>
   <title>Github Issue Linker</title>
   <pubDate>Sun, 06 Sep 2009 03:46:00 -0400</pubDate>
  </item>
  <item>
   <description>&lt;p&gt;I installed Snow Leopard less than 48 hours ago.  So far, these are the ostensible bugs which I have bumped into:&lt;/p&gt;&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;Upon installation, my system hung on first boot-up. A hard reset took care of that.&lt;/li&gt;&#10;&lt;li&gt;Once or twice, my desktop icons were nowhere to be found.&lt;/li&gt;&#10;&lt;li&gt;Google Gears doesn&amp;#8217;t work in Safari all of a sudden. I had to Google how to uninstall it before Gmail would load.&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;(Update: Not a Snow Leopard bug, more in a bit.) &#10;The top half of my (laptop&amp;#8217;s built in, not external) monitor occasionally flashes black for a millisecond.  This occurs at&#10;seemingly arbitrary times and blackness lasts &lt;em&gt;just&lt;/em&gt; long enough to be noticeable and annoying. (I like to imagine that it contains a subliminal message &amp;#8212; &amp;#8220;IGNORE THIS FLASH&amp;#8221; &amp;#8212; and I am immune to its effects.)&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Update&lt;/strong&gt; (2009-10-31): It turns out that my MacBook Pro, which has two video cards,&#10;has a problem with one of them. (Apple will probably fix this when I ask them to.) Installing&#10;Snow Leopard must have switched my setting to use the problematic low-power card.  Switching to the beefier card&#10;(via System Preferences) has resolved this issue for now.&lt;/ins&gt;&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;Spotlight sporadically won&amp;#8217;t find the application I was searching for, such as iChat, Keychain Access, or System Preferences. This is important because Spotlight is my app launcher, and now it&amp;#8217;s not reliable for that task. &lt;ins&gt;Not fixed in 10.6.1. &lt;strong&gt;Update&lt;/strong&gt; (2009-10-31): This problem hasn&amp;#8217;t happened for a while.  My Spotlight index was rebuilt, so&#10;if you have this issue, try rebuilding your Spotlight index.&lt;/ins&gt;&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;The &amp;#8220;Calculate All Sizes&amp;#8221; option fails on some folders of a network drive of mine &amp;#8212; even on folders with no more than 8 files. &lt;em&gt;(Added 2009-09-07)&lt;/em&gt;&lt;/li&gt;&#10;&lt;li&gt;I realize it was not officially supported, but it was possible to back up to a network drive (without an AirPort Base Station) via Time Machine in 10.5 Leopard, but now on Snow Leopard, backups have been hanging indefinitely. &lt;em&gt;(Added 2009-09-07)&lt;/em&gt;&lt;/li&gt;&#10;&lt;li&gt;Sometimes switching Spaces via the keyboard has left the spaces indicator on my screen after I let go of all the keys, and then I could not use my (MacBook Pro&amp;#8217;s built-in) keyboard until I logged out and then back in. &lt;em&gt;(Added 2009-09-08)&lt;/em&gt;&#10;&lt;strong&gt;Update&lt;/strong&gt; This is still a problem, as of 10.6.2.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;p&gt;You can imagine that some of these quirks are damned annoying.&lt;/p&gt;&#10;&#10;&lt;p&gt;Still, there have been some really nice little improvements, like the dock &amp;amp; Expos&amp;eacute; integration. I think the net change is positive, but boy am I ready for Apple to release 10.6.1 with a few bug fixes! &lt;ins&gt;&lt;strong&gt;Update,&lt;/strong&gt; September 11, 2009: I just upgraded to 10.6.1, and some of these issues are still not resolved. I am updating the list above when I know for sure that an issue has or has not been resolved.&lt;/ins&gt;&lt;/p&gt;&#10;&#10;&lt;p&gt;Finally, I&amp;#8217;d like to note that some of these things could well be caused by third-party apps.  That said, it&amp;#8217;s clearly the OS upgrade that triggered these problems. Apple, you&amp;#8217;ve let me down.&lt;/p&gt;&#10;</description>
   <guid>http://alanhogan.com/snow-leopard-problems</guid>
   <link>http://alanhogan.com/snow-leopard-problems</link>
   <category>apple</category>
   <category>os x</category>
   <category>mac</category>
   <category>bugs</category>
   <title>Snow Leopard Problems</title>
   <pubDate>Thu, 03 Sep 2009 19:56:16 -0400</pubDate>
  </item>
  <item>
   <description>&lt;p&gt;One of the few default settings that genuinely annoy me on Mac OS X is the tendency for Apple software to retain source formatting when copy and pasting.  This can be particularly annoying in Keynote (since pasted formatted text is incredibly small) and in Mail.app.&lt;/p&gt;&#10;&#10;&lt;p&gt;There are two solutions.&lt;/p&gt;&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set Command-V to paste unformatted text all the time:&lt;/strong&gt;&lt;/p&gt;&#10;&#10;&lt;p&gt;Simply follow &lt;a href=&quot;http://thaweesak.com/2009/06/15/setting-paste-and-match-style-as-default/&quot;&gt;this tip&lt;/a&gt; which sets a system-wide keyboard shortcut for Command-V to trigger the menu item &amp;#8220;Paste and Match Formatting.&amp;#8221;&lt;/p&gt;&#10;&#10;&lt;p&gt;May not work in &lt;em&gt;all&lt;/em&gt; apps, but it should work in most.  When it doesn&amp;#8217;t, you can use the first tip.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Manual workaround&lt;/strong&gt; each time:&lt;/p&gt;&#10;&#10;&lt;p&gt;Use the &amp;#8220;Paste and Match Formatting&amp;#8221; menu option, or the following keystroke sequence:&lt;/p&gt;&#10;&#10;&lt;p&gt;Paste into Spotlight search, select it, copy it (unformatted), then paste.  This even works for multi-line text.&lt;/p&gt;&#10;&#10;&lt;ol&gt;&#10;&lt;li&gt;Command-Space (or whatever you have Spotlight set to).&lt;/li&gt;&#10;&lt;li&gt;Command-V for paste. (The text is now unformatted).&lt;/li&gt;&#10;&lt;li&gt;Command-A to select all.&lt;/li&gt;&#10;&lt;li&gt;Command-C to copy that unformatted text.&lt;/li&gt;&#10;&lt;li&gt;Command-Space to close Spotlight. (Focus returns to whichever app you were in previously.)&lt;/li&gt;&#10;&lt;li&gt;Command-V to paste unformatted text.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10;&lt;p&gt;It looks like a lot of work but it is actually very, very quick for me. (I type in &lt;a href=&quot;/dvorak&quot; title=&quot;My introduction to Dvorak&quot;&gt;Dvorak&lt;/a&gt;, but I don&amp;#8217;t think that makes a big difference here.)&lt;/p&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description>
   <guid>http://alanhogan.com/tips/paste-unformatted-text-osx</guid>
   <link>http://alanhogan.com/tips/paste-unformatted-text-osx</link>
   <category>tips</category>
   <category>OS X</category>
   <category>Apple</category>
   <category>Mail.app</category>
   <category>iWork</category>
   <category>keyboard shortcuts</category>
   <title>Pasting Unformatted Text on OS X</title>
   <pubDate>Thu, 30 Jul 2009 21:21:14 -0400</pubDate>
  </item>
  <item>
   <description>&#10;&#10;&lt;p&gt;This is my reaction to the recent password masking debate Nielsen ignited. Summary: A checkbox to show the password is acceptable (perhaps ideal), but showing passwords by default or using the iPhone-style solution on websites is a bad idea.&lt;/p&gt;&#10;&#10;&lt;h3&gt;Introduction&lt;/h3&gt;&#10;&#10;&lt;p&gt;Recently, respected and influencial usability guru &lt;a href=&quot;http://www.useit.com/alertbox/passwords.html&quot; title=&quot;Stop Password Masking&quot;&gt;Jakob Nielsen stated that&lt;/a&gt; &amp;#8220;[u]sability suffers when users type in passwords and the only feedback they get is a row of bullets,&amp;#8221; which &amp;#8220;doesn&amp;#8217;t even increase security, but it does cost you business due to login failures.&amp;#8221;  This is probably &lt;strong&gt;one of his most popular recent alertboxes&lt;/strong&gt; due to its very controversial nature.  Most of the reactions I have heard have been very &lt;a href=&quot;http://www.wait-till-i.com/2009/06/26/on-password-fields-masking-and-jakob-nielsen/&quot;&gt;negative&lt;/a&gt;, as Nielsen ridiculously dismisses out-of-hand the potential for shoulder surfers to oversee passwords (&amp;#8220;a truly skilled criminal can simply look at the keyboard and note which keys are being pressed&amp;#8221;).  That is, of course, rather naÃ¯ve. Why not say, &amp;#8220;A truly skilled criminal would add a keystroke logger,&amp;#8221; or &amp;#8220;A really determined bastard could waterboard victims for passwords.&amp;#8221;&lt;/p&gt;&#10;&#10;&lt;p&gt;His final suggestion is to stop masking passwords but to provide a checkbox to enable masking, if so desired, in cases of high security (e.g. bank websites).  I find this completely unacceptable for reasons Nielsen himself has enumerated in other contexts.&lt;/p&gt;&#10;&#10;&lt;p&gt;Regardless, Nielsen does make some good points in his alertbox.&lt;/p&gt;&#10;&#10;&lt;h3&gt;Constraints, concerns, and observations&lt;/h3&gt;&#10;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;p&gt;Nielsen: Being able to view your password instils a sense of confidence and allows the user to ensure they entered it correctly.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;Nielsen: Users spend &lt;a href=&quot;http://www.useit.com/alertbox/cross_site_behavior.html&quot; title=&quot;Search the page for &apos;other sites&apos;&quot;&gt;most of their time on other websites&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;Those who can&amp;#8217;t touch-type have more trouble with passwords then those who can (assumed by myself; should be self-evident).&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;Nielsen: Users skim, and they read in an &lt;a href=&quot;http://www.useit.com/alertbox/reading_pattern.html&quot; title=&quot;Alertbox on F-pattern reading&quot;&gt;F-pattern&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;Nielsen: Users have a harder time entering passwords confidently on mobile devices.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;Nielsen: &amp;#8230;but it&amp;#8217;s still not easy on desktops and laptops.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;Good mobile devices deal with observation 5 (e.g. iPhone).&lt;/p&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10;&lt;h3&gt;All masking, all the time&lt;/h3&gt;&#10;&#10;&lt;p&gt;Pro: Eliminates shoulder surfing.&lt;/p&gt;&#10;&#10;&lt;p&gt;Con: Doesn&amp;#8217;t allow users to check they entered the password correctly.&lt;/p&gt;&#10;&#10;&lt;h3&gt;iPhone style password masking&lt;/h3&gt;&#10;&#10;&lt;p&gt;This is the style popularized by the iPhone, though they probably did not invent it. As Gruber succintly &lt;a href=&quot;http://daringfireball.net/linked/2009/06/29/nielsen-passwords&quot;&gt;put it&lt;/a&gt;:&lt;/p&gt;&#10;&#10;&lt;blockquote&gt;&#10;  &lt;p&gt;The iPhone strikes an interesting middle ground here &amp;#8212; it shows you each letter youâve typed in a password field for a second or so before turning it into a bullet.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&#10;&lt;p&gt;At most one character is revealed at a time.  This applies not just for iPhone apps but also for web pages viewed in Mobile Safari.&lt;/p&gt;&#10;&#10;&lt;p&gt;Some have made &lt;a href=&quot;http://blog.decaf.de/2009/07/iphone-like-password-fields-using-jquery/#comment-45516&quot; title=&quot;A noble, but flawed, attempt&quot;&gt;attempts&lt;/a&gt; to implement this on websites with JavaScript hackery.  I think this is an absolutely horrible idea, though innocently conceived. Go ahead, though, &lt;a href=&quot;http://blog.decaf.de/2009/07/iphone-like-password-fields-using-jquery/#comment-45516&quot; title=&quot;A noble, but flawed, attempt&quot;&gt;try it out&lt;/a&gt; if you aren&amp;#8217;t familiar with the iPhone.&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;strong&gt;If Apple thought iPhone-style password masking were ideal for the desktop, as well as for the iPhone, they would implement it on the desktop.&lt;/strong&gt; They do not.&lt;/p&gt;&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;If someone types fast enough shoulder surfers cannot see the password, then they are typing too fast to get the benefit of confidence that Nielsen described.&lt;/li&gt;&#10;&lt;li&gt;If someone types slow enough to get the benefit of confidence, then they are typing slow enough for shoulder surfers to catch the password.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;p&gt;The implementation would be extremely difficult to get right on the Web.  I have not seen, and (since the above items make this solution less than ideal anyway) do not expect to see, an implementation that gets it right.  A solution would need to prevent plaintext passwords from being shown when JS is off and in all browsers.  It should also allow editing a password from the middle, because that&amp;#8217;s how it works on the iPhone and in normal password boxes. Those of us with lots of HTML experience can imagine how very difficult that would be to implement. It should not break &amp;#8220;wand&amp;#8221; or auto-fill browser functionality.  Also, going &amp;#8220;back&amp;#8221; a page in (any and all!) browsers should not show a plaintext password.&lt;/p&gt;&#10;&#10;&lt;p&gt;Lastly, in the case that browser and/or operating system manufacturers change the way password boxes work (say, with a built-in toggle mode, or iPhone-style on mobile devices), JavaScript methods like this will override that and possible break the password box completely for those users.&lt;/p&gt;&#10;&#10;&lt;p&gt;Verdict: a bad idea in theory as well as in practice.&lt;/p&gt;&#10;&#10;&lt;h3&gt;Providing a checkbox to &lt;em&gt;enable&lt;/em&gt; masking (masking off by default)&lt;/h3&gt;&#10;&#10;&lt;p&gt;Thinking about observations 2, 3, and 4 from above means that any websites with password masking off by default &amp;#8212; even if they have a checkbox to enable it &amp;#8212; &lt;strong&gt;can and will  catch  users off-guard&lt;/strong&gt;; some will enter their password before realizing it wasn&amp;#8217;t masked.  It will be seen.  It is irresponsible to pretend this doesn&amp;#8217;t matter.  Consequences can range from, yes, bank passwords being seen to a friend overseeing a Facebook password and setting an innappropriate status message that the user&amp;#8217;s family or boss sees.&lt;/p&gt;&#10;&#10;&lt;p&gt;Con: Shoulder surfers will still view passwords.&lt;/p&gt;&#10;&#10;&lt;p&gt;Con: Going &amp;#8220;back&amp;#8221; reveals the password.&lt;/p&gt;&#10;&#10;&lt;p&gt;Verdict: Terrible idea.&lt;/p&gt;&#10;&#10;&lt;h3&gt;Providing a checkbox to &lt;em&gt;disable&lt;/em&gt; masking (masking on by default)&lt;/h3&gt;&#10;&#10;&lt;p&gt;As I mentioned before, Apple does not enable iPhone-style masking on the desktop. What they often do instead (e.g. when entering network passwords) is provide a toggle (in the form of a &amp;#8220;view password&amp;#8221; checkbox) so that users may optionally view their password as they enter it.&lt;sup id=&quot;fnref:os&quot;&gt;&lt;a href=&quot;#fn:os&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; This is a great idea and is much easier to implement than the iPhone-style password masking.&lt;/p&gt;&#10;&#10;&lt;p&gt;Pro: Enables users to check their password entry if and only if they are confident no one is watching.&lt;/p&gt;&#10;&#10;&lt;p&gt;Con: If care is not taken to convert the plaintext back to a masked password box on form.submit and page.navigate (i.e when users leave the page), going &amp;#8220;back&amp;#8221; will reveal the password.&lt;/p&gt;&#10;&#10;&lt;p&gt;Verdict: Take care of the problem mentioned in &amp;#8220;con&amp;#8221; but this is &lt;strong&gt;by far the best solution&lt;/strong&gt;.&lt;/p&gt;&#10;&#10;&lt;h3&gt;Conclusion&lt;/h3&gt;&#10;&#10;&lt;p&gt;Masking by default and providing a mechanism to view passwords at will is the best solution.&lt;/p&gt;&#10;&#10;&lt;p&gt;It should be kept in mind that there are a lot more password-related concerns to keep in mind; consider &lt;a href=&quot;https://blogs.sans.org/appsecstreetfighter/2009/06/28/response-to-nielsens-stop-password-masking/&quot; title=&quot;A reaction to Nielsen mentions this&quot;&gt;enforcing strong passwords&lt;/a&gt; for users and use encryption, password salts, and hashes server-side.&lt;/p&gt;&#10;&#10;&lt;div class=&quot;footnotes&quot;&gt;&#10;&lt;div class=&quot;hr&quot;&gt;&lt;hr /&gt;&lt;/div&gt;&#10;&lt;ol&gt;&#10;&#10;&lt;li id=&quot;fn:os&quot;&gt;&#10;&lt;p&gt;Windows (XP, at least) does the opposite: When &lt;strong&gt;joining&lt;/strong&gt; &amp;#8212; not creating, but &lt;em&gt;joining&lt;/em&gt; &amp;#8212; a network, it forces users to enter a masked password &lt;em&gt;twice&lt;/em&gt;.&amp;#160;&lt;a href=&quot;#fnref:os&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description>
   <guid>http://alanhogan.com/password-masking</guid>
   <link>http://alanhogan.com/password-masking</link>
   <category>UI</category>
   <category>UX</category>
   <category>web design</category>
   <category>usability</category>
   <category>Apple</category>
   <category>iPhone</category>
   <category>JavaScript </category>
   <title>Nielsen, Password Masking, and the iPhone</title>
   <pubDate>Tue, 14 Jul 2009 23:52:29 -0400</pubDate>
  </item>
  <item>
   <description>&#10;&#10;&lt;p&gt;Google is betting that the Web is going to continue be a very strong platform.  They are betting that web apps will provide a large chunk of our productivity and pleasure, where traditional desktop programs used to.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;  With their strong hand in HTML5, their open-source Gears browser extension, and the drafting of the Wave protocol, Google is loudly proclaiming the Web to be an open environment that no one entity should control.  Their actions, however, belie this vision in favor of anti-competitive corporate strategies.&lt;/p&gt;&#10;&#10;&lt;h3&gt;Google&amp;#8217;s public vision for an open web&lt;/h3&gt;&#10;&#10;&lt;p&gt;Google has indicated they believe in the Web as an open, popular platform in which anyone who implements&#10;the open, published web technologies (HTML, CSS, JavaScript, maybe Gears) &amp;#8212; which other companies can help shape and define &amp;#8212; can&#10;have a browser that can run any web apps and view any web sites crafted to those same standards. (Contrast this with Microsoft, whose past strategies pushed Windows Internet Explorer-only technologies like the insecure ActiveX API and VML, and who would still to this day have us use Silverlight, which does not run on all platforms or browsers, and Web Clips and other IE-only tech).&lt;/p&gt;&#10;&#10;&lt;p&gt;Google has made the following statements to lend credence to that position:&lt;/p&gt;&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;We are working on (and an employee of ours &lt;a href=&quot;http://www.google.com/search?q=hixie+html5&amp;amp;sourceid=opera&amp;amp;ie=utf-8&amp;amp;oe=utf-8&quot; title=&quot;While Ian Hickson, or Hixie, is doubtlessly experienced and capable, the point stands.&quot;&gt;is controlling&lt;/a&gt;) the HTML5 specification, &#10;a collaboration between major browser vendors, reducing or eliminating the need for awkward&#10;and closed plugins like Flash or Silverlight; this makes the Web an open playing field, and any&#10;device and any operating system can now have the full web experience without Adobe or Microsoft&amp;#8217;s consent.&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#10;&lt;li&gt;We are writing a  protocol called Wave to power the next generation of Web communication and synchronization, and&#10;we won&amp;#8217;t control it; it will be email or HTTP, a specification anyone can implement without our consent or help.&lt;/li&gt;&#10;&lt;li&gt;We wrote Gears and made it open-source, so all browsers (not just ours! &lt;a href=&quot;http://en.wikipedia.org/wiki/ActiveX&quot; title=&quot;ActiveX extended the browser... &apos;the&apos; is a singular article referring to IE.&quot;&gt;cough, cough, Microsoft&lt;/a&gt;) may run web apps with features that once only native apps could have, and to speed up certain kinds of sites.&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;In the meantime, we released Gears as a plug-in for popular browsers such as Safari and Firefox.&lt;/li&gt;&#10;&lt;li&gt;We built Gears into Chrome, and hope other browsers include it by default in the future.&lt;/li&gt;&#10;&lt;/ul&gt;&lt;/li&gt;&#10;&lt;li&gt;We believe the Web is going to be so powerful that we announced plans for an OS based on Chrome (WebKit) and Linux (Just like Palm&amp;#8217;s Web OS.)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;h3&gt;Inconsistencies and other anti-competitive red flags&lt;/h3&gt;&#10;&#10;&lt;p&gt;Let&amp;#8217;s examine a couple ways Google has betrayed their publicly stated vision with contrary actions:&lt;/p&gt;&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;p&gt;Google has a policy of not supporting or testing their web apps in Opera.  Opera is a browser that has driven much web innovation (inventing not only tabs but Chrome&amp;#8217;s new start page, to name a few) and always supported open Web standards (such as the effort to write HTML5, and in fact, their CTO invented CSS). Opera has very few inconsistencies with other websites.&lt;/p&gt;&#10;&#10;&lt;p&gt;The problem is so bad that Opera users can&amp;#8217;t add Gmail events to Google calendars, and the emails that Opera users send in Gmail suffer collapsed line breaks so that the paragraphs run together. It&amp;#8217;s been like this for years.&lt;/p&gt;&#10;&#10;&lt;p&gt;While &lt;a href=&quot;/opera-marketshare&quot; title=&quot;What Opera can do to improve its market share&quot;&gt;I have called on Opera&lt;/a&gt; to step it up and fix these issues themselves to enhance their own market share (low market share is a vicious cycle for browsers and other platforms, because low market share means fewer developers support it, which inclines users to avoid it), I would argue that for Google to create and ignore these problems is anti-competitive. (I have &lt;a href=&quot;http://alanhogan.com/opera-marketshare#fn:9&quot; title=&quot;A footnote describing Google&apos;s obligation to support Opera&quot;&gt;discussed this before&lt;/a&gt;.)&lt;/p&gt;&#10;&#10;&lt;p&gt;How is this anti-competitive? It means that a company who makes the world&amp;#8217;s best webmail says, &amp;#8220;We choose to force 100% of the people who like our webmail to use one of the browsers on our list, and not Opera.  In faaact, you will get the best experience in our own browser, Chrome.&amp;#8221;  What got Microsoft into trouble was throwing its dominance in one software category (OSs) around to dominate other markets (browsers, office suites, media players).  To cite market share as a reason to avoid supporting Opera is a cop-out because of the vicious cycle I mentioned above: When you&amp;#8217;re a big dog and a trendsetter with lots of cash, you better do the right thing and play fair.&lt;/p&gt;&#10;&#10;&lt;p&gt;Why is not supporting Opera inconsistent with an open web strategy? Because claiming to support an open-standards-based Web that works on all browsers, including Opera, with whom Google is working on HTML5, but not actually supporting that very open-standards-compliant browser just doesn&amp;#8217;t make sense.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;Seemingly dropping support for the Gears Firefox plug-in&lt;/p&gt;&#10;&#10;&lt;p&gt;As I write this, it has been a full 2 weeks since Firefox 3.5 officially launched (on June 30, 2009). There had been completely public betas and release candidates (the last of which, per Mozilla policy, became the stable 3.5 release, bit-for-bit) available for some time.  And yet, to date (July 14, 2009), Google has not updated their Gears plugin for Firefox 3.5 (which, among other things, enables offline Gmail and speeds up WordPress publishers&amp;#8217; experiences).&lt;/p&gt;&#10;&#10;&lt;p&gt;You might be thinking, dear reader, that it could take significant time to update the plugin for Firefox 3.5.Â  You would be mistaken, though quite understandably: Users have taken the open-source code, tweaked it, and &lt;a href=&quot;http://groups.google.com/group/gears-users/msg/96c1522c37e7eecc&quot; title=&quot;User-compiled Gears for different platforms&quot;&gt;compiled it to work&lt;/a&gt; with Firefox 3.5 on Windows, Linux, and Mac OS X.  (This didn&amp;#8217;t solve the problem, because Firefox does not know about these unofficial, untrusted fixes and can not/should not make them available via its add-on update routine.)&lt;/p&gt;&#10;&#10;&lt;p&gt;So it&amp;#8217;s not that the upgrade takes too long.  Google knew ahead of time Firefox 3.5 was coming and its users showed that the fix is fairly trivial. It&amp;#8217;s just that Google is dragging their feet. Because they aren&amp;#8217;t replying to users, no one knows why. (&lt;a href=&quot;/arrg&quot; title=&quot;Google, its customers, and its arrogance&quot;&gt;Does Google hate their customers? Or are they just arrogant?&lt;/a&gt;)&lt;/p&gt;&#10;&#10;&lt;p&gt;But users &lt;a href=&quot;http://groups.google.com/group/gears-users/msg/eab474ba361a32d7&quot; title=&quot;&apos;Perhaps Perhaps Google is intentionally delaying it&apos;s [sic] release because of Chrome?&apos;&quot;&gt;have their suspicions&lt;/a&gt;.  One wonders, and I join him, if this isn&amp;#8217;t a deliberate (and shady) attempt to get Firefox users to switch to Chrome.  Is it?  What other reason could be at play? The only alternative I can think of is just developer laziness and an incompetent manager or two.  Then again, many people at Google use Firefox, and there is no way this issue could have gone unnoticed.&lt;/p&gt;&#10;&#10;&lt;p&gt;How is this anti-competitive? Why is it internally inconsistent? Google says it wants an open, interoperable, Web with a diversity of browsers all supporting the same open standards and ideally with enhancements like Gears (which is, remember, open source) that make for a better experience.  But by denying Gears support for Firefox, they are pressuring Gmail users to switch to Chrome; using one product to artificially support another is anti-competitive and any attempt to homogenize browsers toward one (Chrome &amp;amp; the WebKit engine) betrays the vision of the open Web.&lt;/p&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;h3&gt;True feelings about the open web&lt;/h3&gt;&#10;&#10;&lt;p&gt;I wish I could summarize Google&amp;#8217;s true position, but the contradictions here are too great for an outsider like me to resolve.  The least we can conclude is their actions are considerably less benevolent than Google would have us believe.&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;a href=&quot;/contact?reason=google-anti-competitive&quot;&gt;Let me know&lt;/a&gt; if you have anything to add.&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; (February 14, 2010): Google Buzz, &lt;a href=&quot;http://alanhogan.com/buzz-is-already-dead&quot;&gt;which I believe will fail&lt;/a&gt;, so aggressively competitive that Dare Obasanjo notes they are &lt;a href=&quot;http://www.25hoursaday.com/weblog/2010/02/13/AutofollowingOnSocialNetworksAndUserPrivacyBecomingAPawnInACompetitiveChessGames.aspx&quot;&gt;using privacy as a pawn in a competitive chess game&lt;/a&gt;, even &lt;a href=&quot;http://www.scripting.com/stories/2010/02/14/googleDidSomethingSeriousl.html&quot;&gt;if it jeopardizes their very safety&lt;/a&gt;.&lt;/p&gt;&#10;&#10;&lt;div class=&quot;footnotes&quot;&gt;&#10;&lt;div class=&quot;hr&quot;&gt;&lt;hr /&gt;&lt;/div&gt;&#10;&lt;ol&gt;&#10;&#10;&lt;li id=&quot;fn:1&quot;&gt;&#10;&lt;p&gt;Hence the Chrome OS initiative.  My reaction is between the unthinkingly obsessive Arrington-style &amp;#8220;OMG this will be big&amp;#8221; and the piffling &amp;#8220;won&amp;#8217;t be anything&amp;#8221; response from others: I think Chrome will be just what it is planned to be, a competent entry for netbooks. That is, no, it won&amp;#8217;t ever gain much if any traction on traditional personal computers; but if done well, it could provide a smooth (if limited) experience on small, cheap devices used mostly for email and casual surfing.&amp;#160;&lt;a href=&quot;#fnref:1&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;li id=&quot;fn:2&quot;&gt;&#10;&lt;p&gt;Sounds a lot like what Apple&amp;#8217;s gung-ho true-web-technology push, as they embrace HTML5 wholeheartedly in Safari, extend CSS in innovative and backwards-compatible ways (transitions, gradients, transformations), make WebKit (the core of Safari) available for anyone to use for pretty much anything (from Chrome to Palm WebOS to NetNewsWire), and &lt;strong&gt;reject plugins&lt;/strong&gt; (as they should be able to do!) on the iPhone.  The inconvenience of missing Flash, in my view, is not a poor reflection on Apple but on everyone who has used Flash as if it were a Web technology. &lt;strong&gt;It is not.&lt;/strong&gt; It does not integrate well with the rest of the webpage and needs drawn in a separate pass from the rest of the rendering engine, unlike pure web technologies like HTML text, images, SVG, and even &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt;.  You couldn&amp;#8217;t apply a JavaScript event to a Flash movie component. You can&amp;#8217;t style Flash text with CSS. You can&amp;#8217;t (really) link to a &amp;#8220;page&amp;#8221; or view on a Flash site. You can&amp;#8217;t middle-click a Flash link to open it in a new tab. Flash is its own little island. It&amp;#8217;s not the Web.&amp;#160;&lt;a href=&quot;#fnref:2&quot; rev=&quot;footnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description>
   <guid>http://alanhogan.com/anti-competitive-google</guid>
   <link>http://alanhogan.com/anti-competitive-google</link>
   <category>Google</category>
   <category>business</category>
   <category>tech</category>
   <category>browsers</category>
   <category>web design</category>
   <category>Opera</category>
   <category>Firefox</category>
   <category>Safari</category>
   <category>Gmail</category>
   <category>HTML5</category>
   <title>The Anti-Competitive Google</title>
   <pubDate>Tue, 14 Jul 2009 19:18:05 -0400</pubDate>
  </item>
  <item>
   <description>&#10;&#10;&lt;p&gt;Google seems to be letting its arrogance dictate a position of indifference towards customers. I argue this is not a wise move.&lt;/p&gt;&#10;&#10;&lt;h3&gt;Google arrogantly thinks their customers have nothing to say.&lt;/h3&gt;&#10;&#10;&lt;p&gt;It would seem Google bloody hates their users.&lt;/p&gt;&#10;&#10;&lt;p&gt;How else can you explain they way they make feedback and dialog between users and themselves darn near impossible? Even using a solution like &lt;a href=&quot;http://getsatisfaction.com&quot;&gt;GetSatisfaction.com&lt;/a&gt; would be many steps ahead of their current mix of help pages (typically lacking any sort of &amp;#8220;contact&amp;#8221; link) and groups (in which users are supposed to guess at Google&amp;#8217;s intentions and/or solve each other&amp;#8217;s problems).  I say GetSatisfaction would be quite an improvement because it not only smartly attempts to consolidate multiple questions about the same thing into one page/discussion with a keyword matching algorithm based on questions users type, but critically, it provides the company (Google, in this case) a means to designate an official reply or status at the top of the page.  Compare this to scrolling and paging through up to hundreds of posts in Google Groups, hoping you can skim fast enough and well enough to see which, if any, posts are from someone claiming to be a Google employee.&lt;/p&gt;&#10;&#10;&lt;p&gt;Again, the technology is there. Google has money.  So the only reason they would be treating their customers so badly is that Google is so arrogant that they don&amp;#8217;t think their users matter.&lt;/p&gt;&#10;&#10;&lt;p&gt;I don&amp;#8217;t just mean users of, say, Gears, or even Gmail.  Even  customers generating revenue for Google, those using AdWords and Checkout, can&amp;#8217;t get a real human to help them out.&lt;/p&gt;&#10;&#10;&lt;h3&gt;The value of listening to customers&lt;/h3&gt;&#10;&#10;&lt;p&gt;I&amp;#8217;m sure many others have stated the value of listening to customers much better than I, but here is a quick list of benefits from my experience:&lt;/p&gt;&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;They catch bugs and regressions that developers miss.&lt;/li&gt;&#10;&lt;li&gt;They can have great ideas for your product (and are frustrated they can&amp;#8217;t share them).&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href=&quot;http://425talker.blogspot.com/search?q=google&quot;&gt;425Walker&lt;/a&gt; has one for Google&amp;#8217;s Blogger service.&lt;/li&gt;&#10;&lt;li&gt;I &lt;a href=&quot;http://detalles.livejournal.com/11134.html&quot;&gt;had a number of ideas for Gmail&lt;/a&gt; back in 2005,&#10;some of which were eventually implemented; but I never was able to actually suggest them to Google.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Update&lt;/strong&gt; (July 15, 2009): As &lt;a href=&quot;http://twitter.com/jamesgecko&quot;&gt;@JamesGecko&lt;/a&gt; points out, there actually are suggestion boxes for&#10;Gmail and Blogger (in fact, I have used the one for Gmail in the past).  However,&#10;not only are they hard to find, but apparently no one ever receives personal feedback (is anyone listening?).&lt;/li&gt;&#10;&lt;/ul&gt;&lt;/li&gt;&#10;&lt;li&gt;They can help you decide which features to implement. (Prime example: &lt;a href=&quot;http://uservoice.com/&quot; title=&quot;&quot;&gt;UserVoice&lt;/a&gt;)&lt;/li&gt;&#10;&lt;li&gt;They won&amp;#8217;t feel like your company is a giant, unfeeling corporation if you actually talk to them.&lt;/li&gt;&#10;&lt;li&gt;Problems can pop up for a particular user, and if these are not taken care of, that user can complain very loudly&#10;and/or the service is less functional for them. Additionally, these users&amp;#8217; problems may illustrate&#10;an edge case or bug your developers overlooked.&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;Example: When Twitter Search didn&amp;#8217;t index my tweets due to a simple server-side caching issue, my &#10;pleas for help went unanswered for half a year, coming back with robot-generated replies and frustrating&#10;me to no end until &lt;a href=&quot;http://twitter.com/tiger&quot;&gt;@tiger&lt;/a&gt; graciously helped me out.&#10;In the meantime, I began to resent Twitter&amp;#8217;s central authority, yearning for a distributed alternative.&#10;I also avoided #hashtags altogether as they were pointless; no one could find me on Twitter Search&#10;even if they searched for a hashtag I used.  Presumably their caching mechanism needed improved.&lt;/li&gt;&#10;&lt;li&gt;Example: Google Calendar&amp;#8217;s ICAL feed, which I ensured was not being cached, contained recurring events&#10;which I successfully deleted from the web interface; no one at Google ever replied to my&#10;requests for help. Obviously, though, there was a bug in their system which made using it&#10;highly annoying for me, as I had to ignore events that should have been deleted.&lt;/li&gt;&#10;&lt;/ul&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;p&gt;As my last example makes clear, Google could use the feedback of its users.&lt;/p&gt;&#10;&#10;&lt;h3&gt;The cost of listening to customers&lt;/h3&gt;&#10;&#10;&lt;p&gt;Assuming not too much weight is lent to users&amp;#8217; feature requests, the only real cost of listening and replying to them is money (in terms of staff).&lt;/p&gt;&#10;&#10;&lt;p&gt;Google has plenty of cash.&lt;/p&gt;&#10;&#10;&lt;h3&gt;Google not so feel-good anymore&lt;/h3&gt;&#10;&#10;&lt;p&gt;It seems to me that problem of ignoring users (like their &lt;a href=&quot;/gac&quot;&gt;anticompetitive tendencies&lt;/a&gt;) is contributing to an overall trend of increased distrust of Google and and increased&#10;perception of them as another faceless big company.  I hope to write more about this in the future.  If anyone has seen data showing the trends I expect, or disproving them, please &lt;a href=&quot;/contact?reason=google-perception-trends&amp;amp;from=/arrg&quot;&gt;let me know&lt;/a&gt;.&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; (July 15, 2009): Just today, Ani &lt;a href=&quot;http://blog.taragana.com/index.php/archive/microsoft-dethrones-google-as-uks-best-brand/&quot;&gt;reported&lt;/a&gt;&#10;that Google&amp;#8217;s public perception of being &amp;#8220;reliable, distinguished, and the best quality&amp;#8221; slipped below Microsoft&amp;#8217;s in a British survey.&lt;/p&gt;&#10;&#10;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; (February 14, 2010): Google Buzz, &lt;a href=&quot;http://alanhogan.com/buzz-is-already-dead&quot;&gt;which will fail&lt;/a&gt;, is another example of Google doing whatever it wants and not caring what users think, even &lt;a href=&quot;http://www.scripting.com/stories/2010/02/14/googleDidSomethingSeriousl.html&quot;&gt;if it jeopardizes their very safety&lt;/a&gt;.&lt;/p&gt;&#10;&#10;&lt;!--*This article can be shared as `http://alanhogan.com/arrg`* --&gt;&#10;</description>
   <guid>http://alanhogan.com/arrogance-of-google</guid>
   <link>http://alanhogan.com/arrogance-of-google</link>
   <category>Google</category>
   <category>business</category>
   <category>tech</category>
   <category>customer support</category>
   <category>Gmail</category>
   <category>Twitter</category>
   <title>The Arrogance of Google (and the effect on its users)</title>
   <pubDate>Tue, 14 Jul 2009 19:18:05 -0400</pubDate>
  </item>
  <item>
   <description>&#10;&#10;&lt;p&gt;You can &lt;strong&gt;&lt;a href=&quot;http://alanhogan.com/files/iphone_user_agent.xml&quot; title=&quot;XML import file for User Agent Switcher&quot;&gt;import this XML file&lt;/a&gt;&lt;/strong&gt;&#10;into your &lt;strong&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/59&quot;&gt;User Agent Switcher&lt;/a&gt; plugin for Firefox&lt;/strong&gt; so you can view and test the mobile or iPhone version of a site.  The user agent string is the one described in &lt;a href=&quot;http://paininthetech.com/2007/10/03/fake-iphone-user-agent/&quot;&gt;this tip&lt;/a&gt;.  (After installing &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/59&quot;&gt;User Agent Switcher&lt;/a&gt;, restart Firefox and go to Tools &amp;bull; User Agent Switcher &amp;bull; Options and click &amp;#8220;Import.&amp;#8221;)&lt;/p&gt;&#10;&#10;&lt;p&gt;Also of note is that the iPhone Simulator (part of the iPhone SDK from Apple) does include Mobile Safari and can actually navigate to your local development site (e.g. localhost:3000 or any other server running on your computer), not to mention the Web at large.&lt;/p&gt;&#10;&#10;&lt;p&gt;If this becomes painfully out of date, let me know by my &lt;a href=&quot;http://alanhogan.com/contact?reason=iphone_ua&quot;&gt;contact form&lt;/a&gt; or &lt;a href=&quot;http://twitter.com/alanhogan&quot;&gt;twitter&lt;/a&gt;.&lt;/p&gt;&#10;</description>
   <guid>http://alanhogan.com/tips/iphone-ua</guid>
   <link>http://alanhogan.com/tips/iphone-ua</link>
   <category>iPhone</category>
   <category>web dev</category>
   <category>tips</category>
   <category>downloads</category>
   <title>Import the iPhone User Agent into the Firefox plugin User Agent Switcher (download)</title>
   <pubDate>Wed, 20 May 2009 15:11:58 -0400</pubDate>
  </item>
 </channel>
</rss>