Congratulations!

[Valid Atom 1.0] This is a valid Atom 1.0 feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://lachy.id.au/log/feed

  1. <?xml version="1.0" encoding="UTF-8"?><feed
  2.  xmlns="http://www.w3.org/2005/Atom"
  3.  xmlns:thr="http://purl.org/syndication/thread/1.0"
  4.  xml:lang=""
  5.  >
  6.  <id>https://lachy.id.au/log/feed/atom</id>
  7.  <updated>2016-09-30T07:55:11Z</updated>
  8.  <title type="text">Lachy’s Log</title>
  9.  <subtitle type="text">If I start now, I&#039;ll be finished later!</subtitle>
  10.  <link rel="self" type="application/atom+xml" href="https://lachy.id.au/log/feed" />
  11.  <link rel="alternate" href="https://lachy.id.au/log" />
  12.  <rights type="text">Copyright 2010</rights>
  13.  <generator uri="http://wordpress.org/" version="6.1.7">WordPress</generator>
  14.      <entry>
  15.    <id>http://lachy.id.au/log/?p=203</id>
  16.    <title type="html"><![CDATA[The Content-Language Pragma Directive]]></title>
  17.    <updated>2013-09-07T16:35:48Z</updated>
  18.    <published>2010-06-29T11:56:01Z</published>
  19.    <author>
  20.      <name>Lachlan Hunt</name>
  21.      <email>lachlan.hunt@lachy.id.au</email>
  22. <uri>http://lachy.id.au/</uri>    </author>
  23.    <link rel="replies" type="application/atom+xml" href="https://lachy.id.au/log/2010/06/content-language/feed" thr:count="0"  />
  24.    <link rel="alternate" href="https://lachy.id.au/log/2010/06/content-language" />
  25.    <category scheme="https://lachy.id.au/log" term="MarkUp" />
  26.    <category scheme="https://lachy.id.au/log" term="W3C" />
  27.    <category scheme="https://lachy.id.au/log" term="WHATWG" />
  28.    <summary type="html"><![CDATA[This rationale is written in defence of a technically sound and reasoned approach to dealing with the Content-Language pragma directive issue within the HTML Working Group. ]]></summary>
  29.      <content type="html" xml:base="https://lachy.id.au/log/2010/06/content-language"><![CDATA[<p>This rationale is written in defence of a technically sound and reasoned
  30.   approach to dealing with the <code>Content-Language</code> pragma directive
  31.   issue within the HTML Working Group.  <a href="http://www.w3.org/html/wg/tracker/issues/88">ISSUE-88</a>
  32.   is a request for permitting multiple language tags to be used as the value of
  33.   the <code>Content-Language</code> pragma directive.  This article argues that
  34.   <a href="http://www.w3.org/html/wg/wiki/ChangeProposals/ContentLanguages">this change proposal</a>
  35.   is unsupported by logic or reason, and resolving in its favour will have an
  36.   overall negative effect for both authors and implementers.</p>
  37.  
  38. <h2>Summary</h2>
  39.  
  40. <p>This summary is presented as an overview of the arguments presented throughout this
  41.   article.  The supporting rationale in favour of these arguments is presented later.</p>
  42.  
  43. <ul>
  44.    <li>The change proposal is based upon the false premise that the
  45.        <code>Content-Language</code> HTTP header and pragma directive are equivalent.</li>
  46.    <li>The HTTP header is used to declare the languages of the intended
  47.        audience; the only defined function of the pragma directive is to be
  48.        used as a fallback language in the absence of the <code>lang</code> attribute.</li>
  49.    <li>The use of the pragma directive as part of server configuration is out
  50.        of scope of HTML.  Specific server side implementation choices need not
  51.        affect the conformance definition.</li>
  52.    <li>The pragma directive only fulfils its purpose of providing a fallback
  53.        language when one language tag is specified.  Multiple language tags
  54.        are, by definition of the implementation requirements, not useful or
  55.        beneficial.</li>
  56.    <li>There are no reasons given for why it is beneficial to leave the pragma
  57.        directive in the document when the <code>lang</code> attribute is present on the
  58.        root element.</li>
  59.    <li>Failing to offer a warning about its presence in all cases would
  60.        continue to mislead the author about its legitimacy.</li>
  61.    <li>The inconsistency of when warnings are issued would be confusing to
  62.        authors. It is better to offer a consistent warning about the
  63.        presence of a redundant feature.</li>
  64.    <li>The defined effect, per the implementation requirements, of declaring
  65.        multiple language tags is identical to that of omitting the pragma
  66.        directive entirely. No reasons are given to explain why declaring
  67.        multiple language tags is useful.</li>
  68.    <li>The syntax of the <code>Content-Language</code> HTTP header field is not affected by
  69.        the definition of the distinct <code>Content-Language</code> pragma directive in
  70.        HTML, with which it only shares a common name and does not share
  71.        significant functionality.  It is reasonable for this distinct feature
  72.        to use a distinct conforming syntax that is suitable for its purpose.</li>
  73.    <li>No reason is given explaining why only emitting the warning under
  74.        specific circumstances, as opposed to the current specification
  75.        requirement, would serve better in encouraging authors to use the
  76.        <code>lang</code> attribute instead.</li>
  77.    <li>The proposed replacement specification text contains unjustified
  78.        changes, inconsistencies, unimplementable requirements and is
  79.        overall inappropriate for use in the specification.</li>
  80.    <li>The claimed positive <del>benefits</del> <ins>effects</ins> are unsupported by evidence and, in
  81.        several cases, blatantly incorrect.</li>
  82.    <li>In practice, very few authors use multiple language tags in the pragma
  83.        directive, and doing so is not useful.  Restricting the syntax to one
  84.        language would not have a significant negative impact.</li>
  85. </ul>
  86.  
  87. <h2>Difference Between <code>Content-Language</code> HTTP Header and Pragma Directive</h2>
  88.  
  89. <p>This premise of the change proposal is that the <code>Content-Language</code> HTTP header
  90.   field is functionally equivalent to the <code>Content-Language</code> pragma directive
  91.   using the <code>meta</code> element.  This premise is used to support the idea that that
  92.   both should share the same syntax and client side processing requirements.
  93.   However, this premise is demonstrably wrong, and thus the change proposal is
  94.   unsupported by evidence and must be rejected.</p>
  95.  
  96. <p>In order to demonstrate the differences between the HTTP header and the
  97.   pragma directive, it is necessary to analyse the purpose and functionality of
  98.   each and see how they compare.</p>
  99.  
  100. <h3>Declaring the Language of the Intended Audience</h3>
  101.  
  102. <p>The HTTP <code>Content-Language</code> header field is used by HTTP servers to announce
  103.   the language of the intended audience for a given resource representation.
  104.   This and other related information exchanged between the client and server
  105.   can be used for content negotiation based on language.  When the server does
  106.   this, it is important for this information to be included in the HTTP header
  107.   where it can be seen by both the client and other intermediary servers.</p>
  108.  
  109. <p>The information declared within the document using the pragma directive is
  110.   unsuitable for this purpose, as it will not be parsed by intermediary servers
  111.   that would otherwise utilise the information for caching purposes.</p>
  112.  
  113. <h3>Server Configuration</h3>
  114.  
  115. <p>It has been claimed that the information declared using a pragma directive
  116.   within the document may be parsed by some server implementations, which
  117.   subsequently process and echo the value in the <code>Content-Language</code> HTTP header
  118.   field.  Since this header field is allowed to contain multiple language
  119.   values, it is claimed that this ability is limited by permitting only one
  120.   language in the pragma directive.  However, no evidence has been presented
  121.   to demonstrate how widely used this feature is, nor why such a feature should
  122.   even be defined within HTML.</p>
  123.  
  124. <p>This is a layering violation because information intended for server
  125.   side processing, and specific implementation details thereof, should not
  126.   unnecessarily affect the conformance definition of client side HTML.
  127.   That is, it is out of scope for HTML, as a client side markup language,
  128.   to define specific processing requirements or features to be used by
  129.   servers for implementing HTTP features. There is also no inherent need
  130.   for interoperability between different back end implementation details.</p>
  131.  
  132. <p>Defining the pragma directive in a way that is optimised for specific
  133.   server implementation details would be analogous to, for example,
  134.   defining an ASP specific feature within HTML for use on Microsoft IIS
  135.   platforms. While server implementations are otherwise free to make any
  136.   design decision, those design decisions need not affect HTML conformance
  137.   requirements.</p>
  138.  
  139. <h3>Default Document Language</h3>
  140.  
  141. <p>In practice, <code>Content-Language</code> used within the <code>meta</code> element in the
  142.   HTML serves as client side metadata. The functionality of
  143.   <code>Content-Language</code> in this case is restricted entirely to the purpose of
  144.   specifying a fallback language, to be used in the absence of the <code>lang</code>
  145.   attribute. This purpose differs significantly from the purpose of
  146.   declaring the languages of the intended audience.</p>
  147.  
  148. <p>Declaring multiple languages for the document&#8217;s intended audience
  149.   makes sense in some cases. However, there can only be one default
  150.   language. Thus, for this purpose, the functionality as defined requires
  151.   that only a single language value be specified. While the HTTP
  152.   <code>Content-Language</code> header field is also used for determining the fallback
  153.   language in cases where it only has a single language value, that is not
  154.   its primary purpose and is thus not a significant similarity between
  155.   these two independent features.</p>
  156.  
  157. <p>Permitting multiple language values to be specified in the pragma
  158.   directive is at odds with its implementation requirements. Thus, for the
  159.   client-side metadata functionality of the pragma directive, it is not
  160.   at all useful to have multiple languages specified, and so it does not
  161.   make sense for multiple languages to be considered conforming.</p>
  162.  
  163. <p>These 3 aspects of the functionality — declaring the language of the
  164.   intended audience, server side configuration and default document
  165.   language — clearly illustrate that the premise of this change proposal —
  166.   the shared functionality between the two features — is fundamentally
  167.   flawed. The reality is that the in-document <code>Content-Language</code> pragma
  168.   directive only shares its name with the HTTP header field, while its
  169.   functionality is closer to that of the <code>lang</code> attribute. And since server
  170.   side implementation details are out of scope of HTML, there is no need
  171.   for the document conformance definition to permit multiple language
  172.   values. The solution chosen for addressing this issue must take this
  173.   into account, and thus reject this change proposal.</p>
  174.  
  175. <h2>Arguments Against the Rationale</h2>
  176.  
  177. <p>The rationale for this change proposal states:</p>
  178.  
  179. <blockquote><p>[The current specification] offers no carrot for doing
  180.   the right thing. while the fallback language effect stops as soon as the
  181.   author adds <code>lang</code> on the root element, the spec requires conformance
  182.   checker to continue whining until the <code>http-equiv="Content-Language"</code> <code>meta</code>
  183.   element has been removed.</p></blockquote>
  184.  
  185. <p>The rationale fails to explain the benefit gained by leaving the
  186.   pragma directive in the document when a <code>lang</code> attribute has been
  187.   specified on the root element. While leaving it in the document under
  188.   those circumstances is mostly harmless, it is redundant metadata that
  189.   the author does not need to include in their document. Failing to offer
  190.   a warning would continue to mislead the author into thinking that the
  191.   pragma directive is both acceptable and useful, which it is not.</p>
  192.  
  193. <blockquote>
  194.    <p>That it prevents authors from legally using multiple
  195.       values to replicate the language fallback effect of doing the same thing
  196.       in a HTTP header — whether they want to replicate the effect of multiple
  197.       tags or a single tag.</p>
  198. </blockquote>
  199.  
  200. <p>The language fallback effect from using multiple language tags within
  201.   the value is that there is no default language. This is exactly the same
  202.   effect as would be achieved by omitting the pragma directive, and so the
  203.   given reason is blatantly wrong.
  204.  
  205.   </p><p>i.e. The effect of including a value with multiple languages, like the following:</p>
  206.  
  207.   <pre>&lt;meta http-equiv=&quot;<code>Content-Language</code>&quot; content=&quot;en, fr&quot;&gt;</pre>
  208.  
  209.   <p>is <em>identical</em> to that of omitting this pragma directive entirely.
  210.      This rationale also fails to provide a reason for wanting to replicate this
  211.      effect by copying the same syntax.</p>
  212.  
  213. <blockquote>
  214.    <p>That it underlines the confusion that may exist today, about the
  215.       nature of <code>lang</code> versus <code>Content-Language</code>, by requiring:</p>
  216.  
  217.    <ol>
  218.        <li>different syntax rules for features that are expected to be
  219.            identical (HTTP and <code>http-equiv</code>)</li>
  220.        <li>similar syntax rules for features that are different (<code>http-equiv</code> and
  221.            <code>lang</code>)</li>
  222.        <li>a warning message which asks authors to “use <code>lang</code> instead” – as if
  223.            they were juxtaposable alternatives.</li>
  224.    </ol>
  225. </blockquote>
  226.  
  227. <p>In actual fact, the confusion surrounding this issue is the idea that
  228.   the HTTP header and pragma directive are equivalent, as clearly illustrated
  229.   by this misguided change proposal.  They <em>are</em> different.  The HTTP
  230.   header is used for declaring the languages of the intended audience, the
  231.   pragma directive is used for specifying a default language.</p>
  232.  
  233. <p>The <code>lang</code> attribute, on the other hand, is an alternative to the
  234.   pragma directive when a single language is specified. When multiple
  235.   languages are specified, there is absolutely no defined effect, and so it
  236.   serves no valid purpose at all.  Therefore, the pragma directive is much
  237.   closer in functionality to the <code>lang</code> attribute, than it is to the
  238.   HTTP header, with which it shares its name.</p>
  239.  
  240. <blockquote>
  241.    <p>Instead of the above, this change proposal propose:</p>
  242.    <ol>
  243.        <li>the Zero-edit proposal’s warning about using <code>lang</code> instead of
  244.            <code>Content-Language</code> should be changed into a warning which informs that
  245.            a fallback language measure has kicked in, and recommend that
  246.            authors create a language declaration (via lang) rather than relying
  247.            on the fallback feature. This warning should be shown regardless of
  248.            whether the fallback comes from <code>http-equiv</code> or from the higher level
  249.            (HTTP).  Justification: Since it is a fallback feature, and with
  250.            other semantics, there is no guarantee that the author has used it
  251.            for the language effect.</li>
  252.    </ol>
  253. </blockquote>
  254.  
  255. <p>From the authors perspective, the inconsistency of issuing the
  256.   warning about the use of the pragma directive only when the <code>lang</code>
  257.   attribute is absent would be confusing. The better alternative is to
  258.   issue a consistent warning (or error) that simply says to remove the
  259.   pragma directive and use <code>lang</code> instead.</p>
  260.  
  261. <blockquote>
  262.    <ol start="2">
  263.        <li>to hold the syntax rules of HTTP (which permits multiple language
  264.            tags) as the conforming ones (rather than those of lang, which forbids
  265.            multiple languages), will have the effect of underlining that <code>lang</code> and
  266.            <code>Content-Language</code> have different purposes. For instance, since the
  267.            fallback algorithm doesn’t kick in whenever multiple languages are used
  268.            in the pragma or on the server, there would not be any warning in these
  269.            cases.</li>
  270.    </ol>
  271. </blockquote>
  272.  
  273. <p>The syntax requirements for the HTTP Content-Type header are not
  274.   affected by the HTML implementation requirements. Since the <code>lang</code>
  275.   attribute on the root element and the <code>Content-Language</code> pragma directive
  276.   with a single language value do have the same effect, which differs
  277.   significantly from the purpose of the HTTP <code>Content-Language</code> header, and
  278.   because it is misleading to pretend otherwise, the syntax of the former does not
  279.   need to match the syntax of the latter.</p>
  280.  
  281. <blockquote>
  282.    <ol start="3">
  283.        <li>a carrot: what we want from authors is that they rely on <code>lang</code> (and
  284.            xml:lang) for specifying the language — when the author does that,
  285.            he/she should get immediate reward in the form of removal of conformance
  286.            warning.</li>
  287.    </ol>
  288. </blockquote>
  289.  
  290. <p>This rationale fails to explain why that same effect of encouraging
  291.   authors to use the <code>lang</code> attribute would not be achieved by a more
  292.   consistent warning that states to use the <code>lang</code> attribute and remove the
  293.   pragma directive. There is no benefit gained by leaving the directive
  294.   in; and merely silencing the validator by inserting a <code>lang</code> attribute
  295.   does little to discourage the use of the redundant and totally
  296.   unnecessary pragma directive.</p>
  297.  
  298.  
  299. <h2>Arguments Against the Proposal Details</h2>
  300.  
  301. <p>The change proposal suggests replacing the terminology for
  302.   &#8220;pragma-set default language&#8221; with &#8220;pragma-set locale language&#8221;. None of
  303.   the given rationale explains the need for this change in terminology.</p>
  304.  
  305. <p>The proposed specification text states:</p>
  306.  
  307. <blockquote>
  308.    <p>This pragma contains a <code>Content-Language</code> list, whose semantics and syntax
  309.       is defined in the HTTP spec.</p>
  310. </blockquote>
  311.  
  312. <p>The semantics of the <code>Content-Language</code> header field as defined in RFC 2616
  313.   states:</p>
  314.  
  315. <blockquote>
  316.    <p>The <code>Content-Language</code> entity-header field describes the natural
  317.       language(s) of the intended audience for the enclosed entity.  Note that
  318.       this might not be equivalent to all the languages used within the
  319.       entity-body.</p>
  320. </blockquote>
  321.  
  322. <p>This semantic definition does not match the actual purpose of the
  323.   <code>Content-Language</code> pragma directive, for specifying a &#8220;pragma-set locale
  324.   language&#8221;. Therefore, referring to RFC 2616 for this semantic definition
  325.   is inappropriate. The syntax requirements from RFC 2616 are also
  326.   inappropriate, as it defines the following ABNF, which is not directly
  327.   compatible with the syntax of the <code>meta</code> element with <code>http-equiv</code> and
  328.   <code>content</code> attributes.</p>
  329.  
  330. <pre>Content-Language = "Content-Language" ":" 1#language-tag
  331. language-tag = primary-tag *( "-" subtag )
  332. primary-tag = 1*8ALPHA
  333. subtag = 1*8ALPHA</pre>
  334.  
  335. <p>For these syntax requirements to be applicable at all, the
  336.   specification would have to state that the value of the <code>content</code>
  337.   attribute must match the ABNF production for <code>language-tag</code>. However, see
  338.   below regarding the syntax defined in BCP 47.</p>
  339.  
  340. <blockquote>
  341.    <p>An HTML5 parser processes this list into a known or unknown pragma-set
  342.       locale language… The <code>Content-Language</code> list may also be defined in a
  343.       HTTP header, and will then result in a known or unknown HTTP header-set
  344.       locale language.</p>
  345. </blockquote>
  346.  
  347. <p>The proposed text fails to define what &#8220;known or unknown&#8221; means in that
  348.   context. It is not clear how the implementation determines whether a value is
  349.   known or unknown.  The phrasing of the requirement seems to indicate that
  350.   it would depend upon the result of parsing the value, rather than just the
  351.   presence or absence or absence of said value. But the parsing requirements do
  352.   not use such terminology, and so there is no way to determine whether a given
  353.   value qualifies as known or unknown.</p>
  354.  
  355. <p>The parsing requirements for the value of this pragma directive are
  356.   not specified by the change proposal. However, the change proposal also
  357.   does not state that the existing parsing requirements in the
  358.   specification are to be removed, replaced or modified in any way. Thus,
  359.   by adopting the details of this change proposal, the specification would
  360.   be left in an inconsistent state which says that multiple language
  361.   values are supported, but where the parsing requirements abort when more
  362.   than one value is used.</p>
  363.  
  364. <p>The aforementioned parsing requirements only focus on parsing the
  365.   value of the pragma directive, and as such, there is no implementation
  366.   requirement that sets the &#8220;HTTP header-set locale language&#8221;.</p>
  367.  
  368. <blockquote>
  369.    <p>When a document is lacking a language declaration in the
  370.       form of the <code>lang</code> or <code>xml:lang</code> attribute on the root element, the
  371.       document’s locale language (pragma-set or HTTP-set) is consulted by the
  372.       user agent and used as fallback value for the primary document
  373.       language.</p>
  374. </blockquote>
  375.  
  376. <p>Assuming the value of the &#8220;HTTP header-set locale language&#8221; comes
  377.   from the HTTP <code>Content-Language</code> header, this proposed text fails to
  378.   specify the order of precedence of the values specified in the pragma
  379.   directive or the HTTP header.</p>
  380.  
  381. <p>The use of the term &#8220;locale language&#8221; in this context clashes with
  382.   the existing use of the term in the specification to refer to the
  383.   language set by the user in the user agent&#8217;s preferences. This term is
  384.   used in the table within step 7 of the algorithm to determine the
  385.   character encoding.</p>
  386.  
  387. <p>The proposed text then goes on to state:</p>
  388.  
  389. <blockquote>
  390.    <p>The following info about the HTTP semantics and <code>Content-Language</code> usage,
  391.       is informative:</p>
  392. </blockquote>
  393.  
  394. <p>However, in the non-normative list given following that statement,
  395.   RFC 2119 terminology is incorrectly used to describe what appear to be
  396.   authoring requirements. In particular:</p>
  397.  
  398. <blockquote>
  399.    <p>… authors should not define the <code>Content-Language</code> list according to its
  400.       parser effect, but according to it semantics.</p>
  401. </blockquote>
  402.  
  403. <p>This non-normative example text also incorrectly states that “<code>en-US</code>”
  404.   would not be parsed into a useful value. However, this value complies
  405.   with the syntax requirements specified in RFC 2616, BCP 47 and also with
  406.   the existing parsing requirements in the HTML5 specification.</p>
  407.  
  408. <p>The proposal states that the following requirement is to be removed:</p>
  409.  
  410. <blockquote>
  411.    <p>Conformance checkers will include a warning if this pragma is used.
  412.       Authors are encouraged to use the <code>lang</code> attribute instead.</p>
  413. </blockquote>
  414.  
  415. <p>The rationale provided does not adequately justify the removal of
  416.   this warning, and nor does it adequately justify replacing it with a
  417.   more limited warning to be issued only when the pragma directive is in
  418.   the absence of the <code>lang</code> attribute.</p>
  419.  
  420. <p>The proposal then states to amend this requirement as follows:</p>
  421.  
  422. <blockquote>
  423.    <p>the <code>content</code> attribute must have a value consisting of a valid BCP 47
  424.       language tag, or a comma separated list of two or more BCP 47 language
  425.       tags.</p>
  426. </blockquote>
  427.  
  428. <p>However, the proposal stated earlier that the syntax for the value was
  429.   defined by RFC 2616. This requirement now conflicts with that by stating that
  430.   the syntax of the <code>content</code> attribute&#8217;s value is defined by
  431.   BCP 47. This inconsistency negatively affects the quality of the
  432.   specification.</p>
  433.  
  434. <p>The proposal states that this note is to be removed:</p>
  435.  
  436. <blockquote>
  437.    <p>This pragma is not exactly equivalent to the HTTP <code>Content-Language</code>
  438.       header, for instance it only supports one language.</p>
  439. </blockquote>
  440.  
  441. <p>The removal of this note would be misleading, because the note itself
  442.   is factually correct as-is with the current specification, and with the
  443.   details of this proposal, which, as stated above, leave the parsing
  444.   requirements unchanged. The proposal fails to include any implementation
  445.   requirements that actually permit multiple language tags to be used.</p>
  446.  
  447. <p>It has now been clearly demonstrated that the proposed specification
  448.   text provided by this change proposal is thoroughly inadequate for its
  449.   intended purpose. If the specification were to be amended as required by
  450.   this change proposal, the inconsistency and lack of clarity would
  451.   negatively affect the ability to read, understand and implement this
  452.   specification. As such, this proposal should also be rejected on the
  453.   basis that its proposal details are inadequate. However, if this working
  454.   group does make the wrong decision to permit multiple language tags,
  455.   then I ask that the editor be given full editorial discretion to phrase
  456.   the requirements in a way that more clearly expresses the requirements,
  457.   rather than being asked to accept the details of this proposal as
  458.   written.</p>
  459.  
  460. <h2>Arguments Against the Claimed Positive and Negative Effects</h2>
  461.  
  462. <blockquote>
  463.    <p>More positive: authors can get rid of the warning by adding something
  464.       — &lt;html lang=&quot;*&quot;&gt; — this is better than a focus on
  465.       removal of the (over all) harmless <code>Content-Language</code> <code>meta</code> element.</p>
  466. </blockquote>
  467.  
  468. <p>Likewise, authors can get rid of the warning as required by the
  469.   current specification by removing the <code>meta</code> element. No rationale is
  470.   provided to explain why the act of removing the pragma directive is
  471.   significantly more difficult than adding the <code>lang</code> attribute to the root
  472.   element. Depending on the authoring tool or CMS, both of these actions
  473.   are likely to be just as easy or just as difficult to perform. This
  474.   purported benefit is thus unsubstantiated and invalid.</p>
  475.  
  476. <blockquote>
  477.    <p>More stable: same syntax as before continue to be permitted.</p>
  478. </blockquote>
  479.  
  480. <p>As documented by <a href="http://lists.w3.org/Archives/Public/public-html/2010Apr/0307.html">the null change proposal</a>,
  481.   observation of the use of this pragma directive shows that only
  482.   <a href="http://lists.w3.org/Archives/Public/public-html/2010Apr/0088.html">a very small minority of authors use multiple language values</a>.
  483.   However, the claimed benefit of continuing to use this syntax is nullified by
  484.   the fact that, due to the implementation requirements, multiple language
  485.   values are not at all useful.</p>
  486.  
  487. <blockquote>
  488.    <p>More permissive: authors, CMS-es and browsers can continue to take
  489.       advantage of HTTP-EQUIV’s ability to reference what the HTTP header
  490.       is/was supposed to be, including replicating its fallback effect.</p>
  491. </blockquote>
  492.  
  493. <p>No rationale is provided to explain why that ability is in any way
  494.   beneficial.</p>
  495.  
  496. <blockquote>
  497.    <p>More correct: the difference between <code>lang</code> and <code>Content-Language</code> is pointed
  498.       out, while the link between <code>http-equiv</code> and HTTP is emphasized.</p>
  499. </blockquote>
  500.  
  501. <p>As has been demonstrated, this is blatantly wrong. The <code>lang</code> attribute
  502.   and the <code>Content-Language</code> pragma directive share more in common in terms
  503.   of functionality, than to the pragma directive and the <code>Content-Language</code>
  504.   HTTP header field.</p>
  505.  
  506. <blockquote>
  507.    <p>More useful: a warning that a fallback feature has kicked in, is more
  508.       useful than a warning which focuses on one of the places where the
  509.       fallback language could potentially kick in from. Why tell the author to
  510.       “please use <code>lang</code> instead” if the author has already made sure that the
  511.       <code>lang</code> attribute is in place?</p>
  512. </blockquote>
  513.  
  514. <p>It seems more useful for authors to be informed about the presence of
  515.   a redundant and useless feature, than to have them continue to
  516.   mistakenly believe that the pragma directive is in any way useful.
  517.   However, either way, both of these are highly subjective claims about
  518.   what may or may not be useful to authors, which cannot be objectively
  519.   evaluated without supporting data.</p>
  520.  
  521. <blockquote>
  522.    <p>Has positive side effect: Encouragement to place a <code>lang</code> attribute on the
  523.       starttag of the html element will lead authors to actually type in the
  524.       html root element, instead of relying on the parser to generate it for
  525.       them.</p>
  526. </blockquote>
  527.  
  528. <p>Relative to the status quo, the zero edit change proposal, or the
  529.    proposal to make <code>Content-Language</code> non-conforming, the above is not a
  530.    unique benefit. Both this and the other change proposals require
  531.    validators to notify the author about the issue and encourage the use of
  532.    the <code>lang</code> attribute.</p>
  533.  
  534. <blockquote>
  535.    <p>More accurate because it does not conceal the problems by introducing
  536.       an artificial technical and semantic difference between
  537.       <code>Content-Language</code> from the HTTP header and <code>Content-Language</code> inside the
  538.       <code>http-equiv</code> <code>meta</code> element.</p>
  539. </blockquote>
  540.  
  541. <p>This accuracy claim is undeniably wrong, given that the significant
  542.   differences between the HTTP header and pragma directive have already
  543.   been explained.</p>
  544.  
  545. <h2>Conclusion</h2>
  546.  
  547. <p>Based on the arguments presented in this article, it is clear that the change
  548.   proposal arguing for multiple language tags to be permitted is misguided, and
  549.   lacks any significant or valid supporting arguments.  The overall effect of
  550.   of the group accepting this change proposal would have a serious negative
  551.   impact upon the quality of the specification.  It is therefore my strongly
  552.   reasoned opinion that the HTMLWG must reject this change proposal either in
  553.   favour of the status quo, or in favour of making Content-Language entirely
  554.   non-conforming.</p>
  555. ]]></content>
  556.        </entry>
  557.    <entry>
  558.    <id>http://lachy.id.au/log/?p=194</id>
  559.    <title type="html"><![CDATA[Introducing WebM]]></title>
  560.    <updated>2013-09-07T16:36:00Z</updated>
  561.    <published>2010-05-19T16:32:47Z</published>
  562.    <author>
  563.      <name>Lachlan Hunt</name>
  564.      <email>lachlan.hunt@lachy.id.au</email>
  565. <uri>http://lachy.id.au/</uri>    </author>
  566.    <link rel="replies" type="application/atom+xml" href="https://lachy.id.au/log/2010/05/webm/feed" thr:count="0"  />
  567.    <link rel="alternate" href="https://lachy.id.au/log/2010/05/webm" />
  568.    <category scheme="https://lachy.id.au/log" term="Google" />
  569.    <category scheme="https://lachy.id.au/log" term="MarkUp" />
  570.    <category scheme="https://lachy.id.au/log" term="Mozilla" />
  571.    <category scheme="https://lachy.id.au/log" term="Opera" />
  572.    <category scheme="https://lachy.id.au/log" term="WHATWG" />
  573.    <summary type="html"><![CDATA[Today, Google, in co-operation witt Opera, Mozilla, CoreCodec (Matroska developers) and a range of other companies, have announced at Google I/O 2010 that WebM is the new royalty free video codec for the web. Earlier this year, Google purchased On2, the company that developed of a range of video codecs including VP3, VP6, VP7 and &#8230; <a href="https://lachy.id.au/log/2010/05/webm" class="more-link">Continue reading <span class="screen-reader-text">Introducing WebM</span> <span class="meta-nav">&#8594;</span></a>]]></summary>
  574.      <content type="html" xml:base="https://lachy.id.au/log/2010/05/webm"><![CDATA[<p>Today, <a href="http://www.google.com/" title="">Google</a>, in co-operation witt
  575. <a href="http://www.opera.com/">Opera</a>,
  576. <a href="http://www.mozilla.org/">Mozilla</a>,
  577. <a href="http://corecodec.com/" title="Home | CoreCodec">CoreCodec</a>
  578. (<a href="http://matroska.org/" title="Matroska Media Container - Homepage | Matroska">Matroska</a> developers)
  579. and a <a href="http://www.webmproject.org/about/supporters/" title="The WebM Project : about : WebM Supporters">range of other companies</a>,
  580. have announced at <a href="http://code.google.com/events/io/2010/" title="Google I/O 2010">Google I/O 2010</a>
  581. that <a href="http://www.webmproject.org/" title="The WebM Project : The WebM Project : Welcome to the WebM Project">WebM</a>
  582. is the new royalty free video codec for the web.</p>
  583.  
  584. <p>Earlier this year, Google purchased <a href="http://on2.com/" title="On2 Technologies - Making Video Possible, from Handhelds to HD">On2</a>, the company that developed
  585. of a range of video codecs including VP3, VP6, VP7 and VP8.  VP3 is a
  586. well known codec that formed the basis of Theora.  VP6 is a codec
  587. supported by Adobe Flash, VP7 is used by Skype for video conferencing.
  588. Their latest offering, VP8, now forms the basis of the new WebM video
  589. format.  <a href="http://www.webmproject.org/code/" title="The WebM Project : code : Explore the WebM Source Code">The code for the VP8 codec</a>
  590. has been released royalty free under the BSD licence.</p>
  591.  
  592. <p>WebM, which stands for Web Media, is a format based on 3
  593. technologies:</p>
  594.  
  595. <ol>
  596.    <li>Container: A variation of Matroska called WebM.</li>
  597.    <li>Video codec: VP8.</li>
  598.    <li>Audio codec: Vorbis.</li>
  599. </ol>
  600.  
  601. <h2>The Container Format</h2>
  602.  
  603. <p><a href="http://www.matroska.org/technical/specs/index.html" title="Specifications | Matroska">Matroska</a>
  604. is a widely supported container format, which is able to
  605. contain a wide range of codecs, including, among others, h.264, VC-1,
  606. Theora, AAC, AC3 and Vorbis.  This is due to the high degree of
  607. flexibility inherent in the design of Matroska.</p>
  608.  
  609. <p>Matroska itself if based on a binary markup language called EBML, the
  610. design of which was inspired by XML.  In short, EBML files contain a
  611. header that declares the DocType and version information, followed by a
  612. tree of elements and data, marked up using a special binary notation.
  613. The Matroska specification defines a range of elements, and their binary
  614. notation, that can be used for marking up the data in Matroska files.</p>
  615.  
  616. <p>The WebM format is a subset of Matroska, which has been optimised for
  617. streaming over HTTP.</p>
  618.  
  619. <p>WebM, which uses the DocType &#8220;webm&#8221;, can be distinguished from
  620. Matroska, which uses the DocType &#8220;matroska&#8221;.  Technically speaking, a
  621. valid WebM version 1 file supports a subset of elements from Matroska
  622. version 1, and WebM version 2 supports those in addition to some of the
  623. additional elements from Matroska version 2.</p>
  624.  
  625. <p>To further optimise WebM for use on the WebM, some additional formatting
  626. guidelines are imposed upon WebM files, over and above the Matroska counterpart.
  627. These guidelines include plaicing the indexing information at the beginning
  628. of the file, and keyframes stored at the beginning of clusters.</p>
  629.  
  630. <p>The WebM container is only permitted to contain the codecs VP8 and
  631. Vorbis, and browsers will not support any other codecs within WebM &#8211; not
  632. even Theora or h.264.  Although there are no technical limitations with
  633. WebM that inherently prevent such codecs from being used, this was an
  634. intentional decision to improve the usability of WebM.</p>
  635.  
  636. <p>The idea being that if you have a player that supports WebM, you can
  637. be more confiden that the file will play without having to install
  638. additional codecs.  This is a problem that has plagued container formats
  639. like AVI for years.  You can&#8217;t easily determine what it contains until
  640. you start playing it.  Some AVI files may contain DivX, Xvid, h.264 or a
  641. wide range of other codecs.</p>
  642.  
  643.  
  644. <h2>Benefits of Matroska</h2>
  645.  
  646. <p>Matroska presented some nice benefits over competing container
  647. formats, sucha s MP4, commonly used with h.264, or even Ogg, which is
  648. supported by Opera, Firefox and Chrome for Theora and Vorbis.  Like Ogg,
  649. Matroska is publicly specified and available to use freely, unlike, for
  650. example, MP4.</p>
  651.  
  652. <p>The main benefit of Matroska over Ogg is that the seeking information
  653. can be placed at the beginning, making it significantly easier to seek
  654. in a WebM file being transferred over HTTP.  When the user tries to
  655. seek, if that part of the video hasn&#8217;t yet downloaded, then the browser
  656. needs to request that section from the server.</p>
  657.  
  658. <p>For Ogg, browsers have to do at least 2 separate requests when a
  659. video loads — one to get the beginning of the file and a range request
  660. to get the end — before the length of the video can be determined, and
  661. before seeking can occur, which then potentially results in additional
  662. requests.</p>
  663.  
  664. <p>For WebM, all the information is presented up front, meaning that if
  665. a user seeks the video, the browser knows exactly where in the video to
  666. go, or which part of the file to request from the server.</p>
  667.  
  668. <p>This is not to say that Ogg itself is a bad format.  Quite the
  669. contrary, it&#8217;s just optimised for different use cases.  Ogg is very good
  670. to use as a streaming container format where seeking is not required, or
  671. for storing your Vorbis encoded music collection locally, where the
  672. player isn&#8217;t subject to the overhead of HTTP requests.</p>
  673.  
  674. <p>WebM, on the otherhand, had to be specifically designed for use with
  675. the HTML video element served over HTTP, and as such, benefited from the
  676. design decisions of Matroska.</p>
  677.  
  678.  
  679. <h2>Audio and Video Codecs</h2>
  680.  
  681. <p>The VP8 codec provides significant quality enhancements over its
  682. predecessors; most notably Theora.  Comparisons between Theora and h.264
  683. have shown that the quality of Theora is not up to scratch.  Thanks to
  684. Google, VP8 has now been released freely.</p>
  685.  
  686. <p>There haven&#8217;t yet been any serious, independent comparisons between
  687. h.264 and VP8, so it&#8217;s difficult to say which is better.  Although h.264
  688. is certainly more mature than VP8, and has a lot more hardware support
  689. in existing devices, VP8 is likely to continually improve over the
  690. coming years.</p>
  691.  
  692. <p>The main limitation with VP8 at the moment is the lack of hardware
  693. acceleration.  Firefox, Opera and Chrome all currently use software
  694. decoding of VP8, which means that it can increase CPU usage,
  695. particularly for high definition videos, and watching a lot of video
  696. will drain your battery more than hardware decoded h.264.</p>
  697.  
  698. <p>However, Google have announced that they are working with hardware
  699. partners, and its possible that we&#8217;ll see devices shipping with support
  700. within a year or two.</p>
  701.  
  702. <p>Vorbis, of course, has been supported by Firefox, Opera and Chrome
  703. for a while already, and so it was a natural choice to use in
  704. combination with VP8 in WebM.</p>
  705.  
  706.  
  707. <h2>YouTube</h2>
  708.  
  709. <p>Over the past few weeks, YouTube has been working to convert many
  710. existing videos into WebM.  To try this out using a browser
  711. that supports WebM, follow the
  712. <a href="http://www.webmproject.org/users/">instructions provided by the WebM Project</a>.
  713. While not all videos have been re-encoded yet, thousands of videos are already
  714. available in WebM format, and will work in Opera, Firefox and Chrome.</p>
  715.  
  716. <h2>Demo Time</h2>
  717.  
  718. <p>Just so you can see for yourself what VP8 looks like, get yourself a
  719. copy of the preview releases of Opera, Firefox and Chrome, sit back,
  720. relax and watch Elephant&#8217;s Dream from the Orange Open Movie Project
  721. (<a href="http://www.elephantsdream.org/" title="Elephants Dream">website</a>).
  722. I encoded this myself from the lossless source files using a special build of
  723. ffmpeg with libvpx_vp8 (the VP8 codec library).</p>
  724.  
  725. <video preload="none" src="http://lachy.id.au/lib/media/elephantsdream/Elephants_Dream-360p-Stereo.webm" width="640" height="360" controls></video>
  726.  
  727. <h2>Creating Your Own Videos</h2>
  728.  
  729. <p>The absolute easiest way to create your own WebM video is to upload
  730. your source video to <a href="http://www.youtube.com/">YouTube</a> and
  731. wait for it to be encoded.  Other services, including <a href="http://encoding.com" title="On Demand Video Encoding">encoding.com</a>
  732. and <a href="http://www.hdcloud.com/" title="HD Cloud - Video Encoding and Video Transcoding In The Cloud">HD Could</a> also offer transcoding
  733. services for a small fee.</p>
  734.  
  735. <p>If you want to encode the videos yourself, you need to get your hands
  736. dirty with a tool like ffmpeg with libvpx_vp8, or a commercial
  737. alternative.  Google have released the source code for libvpx_vp8, and
  738. builds of ffmpeg with it should be available shortly.  More information is
  739. available on the <a href="http://www.webmproject.org/tools/" title="">The WebM Project tools page</a></p>
  740.  
  741. <p>The Matroska developers have also been working on on updating their
  742. Matroska muxing software to support the WebM profile.  New tools called
  743. <a href="http://www.matroska.org/downloads/mkvalidator.html" title="mkvalidator tool | Matroska">mkvalidator</a> and
  744. <a href="http://www.matroska.org/downloads/mkclean.html" title="mkclean tool | Matroska">mkclean</a> will help you to validate your WebM files, and to
  745. clean and remux files that aren&#8217;t valid.  mkclean will also remux MKV files containing VP8/Vorbis to WebM.
  746.  
  747. <h2>Browser Support</h2>
  748.  
  749. </p><p>Preview releases have been released for <a href="http://labs.opera.com/news/2010/05/19/" title="Welcome, WebM &lt;video&gt;">Opera</a>,
  750. <a href="http://nightly.mozilla.org/webm/">Mozilla Firefox</a> and, of course,
  751. <a href="http://build.chromium.org/buildbot/snapshots">Google Chrome</a>.
  752.  
  753. </p><p>More details are available on <a href="http://webmproject.org/">WebMProject.org</a>.</p>
  754. ]]></content>
  755.        </entry>
  756.    <entry>
  757.    <id>http://lachy.id.au/log/?p=185</id>
  758.    <title type="html"><![CDATA[HTML 5: The Markup Language]]></title>
  759.    <updated>2013-09-07T16:36:58Z</updated>
  760.    <published>2009-02-24T23:35:30Z</published>
  761.    <author>
  762.      <name>Lachlan Hunt</name>
  763.      <email>lachlan.hunt@lachy.id.au</email>
  764. <uri>http://lachy.id.au/</uri>    </author>
  765.    <link rel="replies" type="application/atom+xml" href="https://lachy.id.au/log/2009/02/markup-spec/feed" thr:count="0"  />
  766.    <link rel="alternate" href="https://lachy.id.au/log/2009/02/markup-spec" />
  767.    <category scheme="https://lachy.id.au/log" term="MarkUp" />
  768.    <category scheme="https://lachy.id.au/log" term="Standards" />
  769.    <category scheme="https://lachy.id.au/log" term="W3C" />
  770.    <summary type="html"><![CDATA[A relatively new editor’s draft entitled HTML 5: The Markup Language has been proposed in the HTML working group as an attempt to define the vocabulary and syntax of HTML, without any implementation conformance criteria or associated DOM APIs.]]></summary>
  771.      <content type="html" xml:base="https://lachy.id.au/log/2009/02/markup-spec"><![CDATA[<p>A relatively new editor’s draft entitled
  772.   <a href="http://www.w3.org/html/wg/markup-spec/"
  773.      title="HTML 5: The Markup Language">HTML 5: The Markup Language</a>
  774.   has been proposed by Mike Smith.  This draft is an attempt to define the
  775.   vocabulary and syntax of HTML, without any implementation conformance
  776.   criteria or associated DOM APIs.  It’s being positioned as a replacement,
  777.   normative definition of the language over the existing HTML 5 spec, and its
  778.   proponents claim that it’s better for authors.  But don’t be deceived; this
  779.   draft isn’t what it claims to be, and is not really beneficial for the vast
  780.   majority of web developers.</p>
  781.  
  782.  
  783. <h3>About the Draft</h3>
  784.  
  785. <p>The document itself is largely generated from two primary sources, with
  786.   some additional explanatory material included manually.  It incorporates
  787.   selected statements and conformance criteria from the spec itself, which is
  788.   fine.  This is a useful technique to help ensure that it and the spec stay
  789.   relatively in sync with each other.  But it also incorporates the RelaxNG
  790.   schemas and regular expressions that are being developed for the HTML 5
  791.   Validator.  This is part of the source code from one particular validator
  792.   implementation, and it’s important to note that this code was not primarily
  793.   written for human consumption, but rather machine processing.</p>
  794.  
  795. <p>Yet, despite this, it is being pushed as a suitable, human readable method
  796.   for describing the conforming syntax and element content models of HTML.
  797.   In a sense, it’s analogous to the DTDs used within the HTML 4.01
  798.   specification, except that it’s more difficult to read.</p>
  799.  
  800. <p>From past experience, we know that many web developers were not comfortable
  801.   reading the DTD syntax, and preferred to check reference guides, tutorials,
  802.   or ask others on mailing lists or forums to explain things.  So the notion
  803.   that such a document would be useful for the majority of web developers is,
  804.   frankly, absurd.</p>
  805.  
  806. <p>But don’t just take my word for it.  Let’s take a look at some examples of
  807.   this notation and see for ourselves.  This is the regular expression that
  808.   describes the conforming DOCTYPE syntax:</p>
  809.  
  810. <p><code>doctype = &lt;![dD][oO][cC][tT][yY][pP][eE]\s+[hH][tT][mM][lL]\s*&gt;</code></p>
  811.  
  812. <p>If that’s not scary enough, how about this which defines the conforming values for the target attribute:</p>
  813.  
  814. <p><code>browsing-context-or-keyword = ()|([^_].*)|(_[bB][lL][aA][nN][kK])|(_[sS][eE][lL][fF])|(_[pP][aA][rR][eE][nN][tT])|(_[tT][oO][pP])</code></p>
  815.  
  816. <p>To be fair, it is accompanied by a plain text list of examples of the four
  817.   predefined values, but simply looking at the examples alone doesn’t the
  818.   reader anything about case insensitivity, nor indicate that other custom
  819.   values are not allowed to begin with an underscore.  The only way to deduce
  820.   that is from the above RegExp.</p>
  821.  
  822. <p>Finally, take a look at
  823.   <a href="http://www.w3.org/html/wg/markup-spec/#a">the definition of the
  824.      a element</a>, or any other, and see if you can understand what it
  825.   means.  Personally, I know how the a element is defined in the spec, but
  826.   even I can’t easily figure out what that schemas are trying to say.</p>
  827.  
  828. <p>The a element’s content model is actually defined as Transparent in the
  829.   spec, which you can think of as basically meaning that its content model is
  830.   inherited from the parent element.  (This is a slight over simplification
  831.   of its actual meaning, but we can ignore the subtleties for now.)
  832.   i.e. When it’s included as a child of an element that only permits phrasing
  833.   content, that applies to the a element too. But when it’s parent permits
  834.   flow content, so does the a element.  If you were able to decipher that on
  835.   your own from the proposed draft, then well done.  I couldn’t.</p>
  836.  
  837. <p>By now, you may be asking, if this proposal isn’t really suitable for web
  838.   developers, then who is it suitable for?  It’s a question that has been
  839.   asked several times on the mailing list, and yet one that has not yet been
  840.   adequately answered.  I’ll do my best to explain how I see it shortly.  But
  841.   first, there’s a little background to cover.</p>
  842.  
  843.  
  844. <h3>The Spec Splitters</h3>
  845.  
  846. <p>Within the working group, as expected, many people have a very diverse
  847.   range of opinions.  In particular, a number of individuals share the
  848.   opinion that the current HTML 5 spec is far too monolithic and that it
  849.   should be split.  There’s nothing inherently wrong with that position,
  850.   per se.  There are indeed sections of the spec that nearly everyone agrees
  851.   should be, or have already been, separated out into their own
  852.   specifications.</p>
  853.  
  854. <p>For instance, XMLHttpRequest was, at one time, part of HTML5.  This was
  855.   taken out a long time ago and moved to the WebApps working group, where it
  856.   has thrived independently from HTML5 ever since.  More recently, the web
  857.   sockets protocol and API have also been split into their own specs, as has
  858.   the the content sniffing, HTTP Origin header, <a href="http://lists.w3.org/Archives/Public/www-html/2009Jan/0049.html" title="Re: HTML5 and XHTML2 combined (a new approach) from Ian Hickson on 2009-01-22 (www-html@w3.org from January 2009)">and more</a>.</p>
  859.  
  860. <p>The issue is that a number of individuals want the spec split in ways that
  861.   aren’t entirely sensible.  This includes the idea of splitting the spec
  862.   along the lines of a conforming, declarative language definition and
  863.   separate implementation requirements.  There are even those who would go so
  864.   far as to say that only the former should be defined, effectively leaving
  865.   the implementers to fend for themselves.  But I’ll spare you from the
  866.   horror of such extremes, as the group moved beyond that debate long ago,
  867.   and merely deal with those who want to split the spec.</p>
  868.  
  869. <p>From high level perspective, the concept of splitting the spec along those
  870.   lines looks reasonable. These two seemingly independent components
  871.   intuitively feel like they could be defined separately.  That is, until you
  872.   start to appreciate just how intertwined these sections are, and where
  873.   exactly they want to draw the line.</p>
  874.  
  875. <p>It is argued that the language spec should only describe the conforming
  876.   syntax and content models of the HTML markup alone.  This would omit any
  877.   details about how such features are processed and provide limited
  878.   information about what they do.  It would also omit any and all details
  879.   about the associated DOM APIs.</p>
  880.  
  881. <p>The semantics of elements and attributes are closely related to what
  882.   functionality they provide, which is itself closely related to the
  883.   implementation requirements.  Consider, for example, the heading and
  884.   sectioning elements.  Their semantics are useful for providing hierarchical
  885.   document structures, with varying levels of headings. This is very closely
  886.   related to the processing requirements for creating an outline.  Authors
  887.   need to know how to mark up their heading structures, and implementers need
  888.   to know how to interpret them.</p>
  889.  
  890. <p>Consider also, many of the DOM APIs for many elements reflect the values of
  891.   the content attributes.  The processing requirements for getting and
  892.   setting such properties is very dependent upon the processing requirements
  893.   for the attributes themselves, which is itself dependent upon the
  894.   conforming values of those attributes.</p>
  895.  
  896. <p>There are many more examples of such interconnected dependencies, but I
  897.   won’t try to list them all.  Suffice it to say that the problem is that by
  898.   splitting the spec, it becomes much harder to manage the integration points
  899.   between these highly interconnected sections, and creates a greater risk of
  900.   things not being defined well.  Such a situation would inevitably lead to
  901.   interoperability problems, which doesn’t only end up hurting implementers,
  902.   but everyone involved including authors and users.</p>
  903.  
  904.  
  905. <h3>The Wedge Strategy</h3>
  906.  
  907. <p>Despite the significant resistance to splitting out the language
  908.   definition, there has still been a significant push for there to be a
  909.   document that normatively defines it separately from the implementation
  910.   requirements, and this draft has been put forth with the intention of doing
  911.   just that.</p>
  912.  
  913. <p>However, since the spec has not been split in the way described above, and
  914.   hopefully won’t be, we are left with a situation where we have two drafts,
  915.   the HTML5 spec itself and this proposal, each claiming to normatively
  916.   define the language.</p>
  917.  
  918. <p>But some people seem to be willing to use this to get their way, even if it
  919.   means normatively defining the language twice, in two separate specs.  This
  920.   is of course absurd.  With two normative documents, each defining things in
  921.   their own way, will inevitably lead to conflicts between the two specs,
  922.   which then raises the question of which takes precedence.</p>
  923.  
  924. <p>While people claim that it’s possible to define things normatively in two
  925.   separate specs and keep them in sync, there is no evidence to support that
  926.   situation and plenty of evidence against it.  But suffice it to say that it
  927.   won’t work and will lead to one of two possible outcomes:</p>
  928.  
  929. <ol>
  930. <li>The conforming language definition is split from the main spec,
  931.    leaving it to be defined only in this proposal.  This, as I explained
  932.    above, would be bad.</li>
  933. <li>The proposal becomes non-normative, leaving the spec itself as the
  934.    single authoritative normative source.  This is what I have been and
  935.    will continue to push for.</li>
  936. </ol>
  937.  
  938.  
  939. <h3>The Audience of the Proposal</h3>
  940.  
  941. <p>As I briefly explained above, given the content of the draft, it is not
  942.   really suitable for the vast majority of web developers.  In fact, its
  943.   audience is, in practice, despite claims to the contrary, severely limited
  944.   in scope to a small minority of people that are comfortable with reading
  945.   complicated schemas and regular expressions, and whom actually have some
  946.   use for them.</p>
  947.  
  948. <p>Schemas are primarily designed for the purpose of conformance checking.
  949.   Specifically, tools that read the document and compare it with the grammar
  950.   described in the schema.  This is effectively what validators do, although
  951.   it should be noted that schemas are not the only means of achieving this
  952.   goal.</p>
  953.  
  954. <p>So it is somewhat useful for people writing tools with conformance checking
  955.   features, since they can, if they choose, incorporate the schemas from the
  956.   spec into their own tools, or use them as a guide for creating their own.
  957.   However, it doesn’t provide all the information necessary for such
  958.   developers, as they will still need to turn to the main spec for many
  959.   implementation requirements, particularly parsing.</p>
  960.  
  961.  
  962. <h3>What about Web Developers?</h3>
  963.  
  964. <p>Web developers certainly haven’t been forgotten.  Their needs are just as
  965.   important to address as implementers.  But I and many others recognise that
  966.   such developers, many of whom aren’t comfortable with normative spec
  967.   language, need something specifically targeted at them.  For this, there
  968.   are now two separate, non-normative drafts, under development.</p>
  969.  
  970. <p>The first, currently entitled the
  971.   <a href="http://dev.w3.org/html5/html-author/"
  972.      title="HTML 5 Reference">HTML 5 Reference</a>, really a reference guide
  973.   for web developers that will explain the elements, attributes and their
  974.   semantics, the syntax and DOM APIs, and provide plenty of explanatory
  975.   material and examples showing how and why to use each feature.  This is a
  976.   draft that I’m working on and have recently started to make some
  977.   significant progress with it.</p>
  978.  
  979. <p>The second is a new proposal by Dan Connolly, but which there is currently
  980.   no draft available.  This document is intended to be more of a
  981.   step-by-step, cookbook-style guide to writing pages using HTML5, with a big
  982.   focus on the multimedia aspects.  e.g. It will provide things like:</p>
  983.  
  984. <ul>
  985. <li>How to embed a video within a page and provide customised controls
  986.    using the DOM API,</li>
  987. <li>How to indicate the completion status of a web application using a
  988.    progress bar.</li>
  989. <li>How to markup images with captions</li>
  990. <li>etc.</li>
  991. </ul>
  992. ]]></content>
  993.        </entry>
  994.    <entry>
  995.    <id>http://lachy.id.au/log/?p=182</id>
  996.    <title type="html"><![CDATA[Google’s Favicon: Yikes!]]></title>
  997.    <updated>2013-09-07T16:37:09Z</updated>
  998.    <published>2009-01-10T14:19:43Z</published>
  999.    <author>
  1000.      <name>Lachlan Hunt</name>
  1001.      <email>lachlan.hunt@lachy.id.au</email>
  1002. <uri>http://lachy.id.au/</uri>    </author>
  1003.    <link rel="replies" type="application/atom+xml" href="https://lachy.id.au/log/2009/01/google-favicon/feed" thr:count="0"  />
  1004.    <link rel="alternate" href="https://lachy.id.au/log/2009/01/google-favicon" />
  1005.    <category scheme="https://lachy.id.au/log" term="General" />
  1006.    <summary type="html"><![CDATA[Google’s new favicon is horrible!]]></summary>
  1007.      <content type="html" xml:base="https://lachy.id.au/log/2009/01/google-favicon"><![CDATA[<p><a href="http://googleblog.blogspot.com/2009/01/googles-new-favicon.html">Google’s new favicon is horrible!</a></p>
  1008.  
  1009. <p><img decoding="async" src="/lib/images/2009/google-favicon-20090110.png" alt=""/> The final icon</p>
  1010.  
  1011. <p>According to the Google blog, the icon was based on a submission from André Resende, which I think looks better than the final version. However, I still think both are absolutely horrible.</p>
  1012.  
  1013. <p><img decoding="async" src="/lib/images/2009/google-favicon-andre-20090110.png" alt=""/> André Resende’s original submission</p>
  1014.  
  1015. <p>As you can see, Google shifted the ‘g’ from the centre to the far left making it look unbalanced. Overall, I find it rather displeasing to the eye.  I guess I will have to find some way to either block the icon entirely or make my browser use a custom icon instead.</p>]]></content>
  1016.        </entry>
  1017.    <entry>
  1018.    <id>http://lachy.id.au/log/?p=178</id>
  1019.    <title type="html"><![CDATA[Selectors API 2nd Last Call]]></title>
  1020.    <updated>2013-09-07T16:37:19Z</updated>
  1021.    <published>2008-11-26T10:10:02Z</published>
  1022.    <author>
  1023.      <name>Lachlan Hunt</name>
  1024.      <email>lachlan.hunt@lachy.id.au</email>
  1025. <uri>http://lachy.id.au/</uri>    </author>
  1026.    <link rel="replies" type="application/atom+xml" href="https://lachy.id.au/log/2008/11/selectors-api-2nd-last-call/feed" thr:count="0"  />
  1027.    <link rel="alternate" href="https://lachy.id.au/log/2008/11/selectors-api-2nd-last-call" />
  1028.    <category scheme="https://lachy.id.au/log" term="Script" />
  1029.    <category scheme="https://lachy.id.au/log" term="Standards" />
  1030.    <category scheme="https://lachy.id.au/log" term="W3C" />
  1031.    <summary type="html"><![CDATA[Selectors API has been published as a Last Call for the second time and will proceed to Candidate Recommendation shortly.]]></summary>
  1032.      <content type="html" xml:base="https://lachy.id.au/log/2008/11/selectors-api-2nd-last-call"><![CDATA[<p>Selectors API was again <a href="http://www.w3.org/TR/2008/WD-selectors-api-20081114/">published as a Last Call</a> on 14 November.  For anyone who hasn&#8217;t heard about this before, this is an API designed for selecting elements in the DOM by querying using Selectors, as used in CSS.</p>
  1033.  
  1034. <p>This is expected to be the last round before proceeding to Candidate Recommendation around mid-December.  If you have any further comments to make, you have until 12 December to send them in, preferably to public-webapi@w3.org and to ensure I don&#8217;t miss it, please include <kbd>[selectors-api]</kbd> in the subject.</p>
  1035.  
  1036. <p>The implementations of API have progressed nicely, with each of the for major browsers: Firefox, Opera, Safari and IE, expected to include support in their next major release.  JavaScript libraries, such as JQuery, are also expected to take advantage of the feature in upcoming releases, which should mean performance improvements for users with updated browsers; although they will continue to fall back to their own script-based implementations in older browsers.</p>]]></content>
  1037.        </entry>
  1038.    <entry>
  1039.    <id>http://lachy.id.au/log/?p=176</id>
  1040.    <title type="html"><![CDATA[I Hate Religion]]></title>
  1041.    <updated>2013-09-07T16:37:33Z</updated>
  1042.    <published>2008-11-02T18:32:06Z</published>
  1043.    <author>
  1044.      <name>Lachlan Hunt</name>
  1045.      <email>lachlan.hunt@lachy.id.au</email>
  1046. <uri>http://lachy.id.au/</uri>    </author>
  1047.    <link rel="replies" type="application/atom+xml" href="https://lachy.id.au/log/2008/11/religion/feed" thr:count="0"  />
  1048.    <link rel="alternate" href="https://lachy.id.au/log/2008/11/religion" />
  1049.    <category scheme="https://lachy.id.au/log" term="Personal" />
  1050.    <summary type="html"><![CDATA[The story of how I became so vehemently opposed to religion.]]></summary>
  1051.      <content type="html" xml:base="https://lachy.id.au/log/2008/11/religion"><![CDATA[<p>The idea of an invisible, omniscient, omnipotent and omnipresent supernatural being, who was supposedly responsible for the creation of the universe, has <em>never really seemed plausible to me</em>.  From a young age, barely old enough to actually comprehend the ludicrous notions being taught in scripture, <em>I rejected it and all the mythology that came with it</em>.  I couldn’t, and still can’t, understand why people have to resort to explaining the origin of the universe by saying “<em>god did it</em>”, and yet be content with having no explanation of where this so-called “god” came from.  It made no sense to me then, and it still makes no sense to me now.</p>
  1052.  
  1053. <p>My disdain for religion began as a young schoolboy, of no more than about 7 or 8, possibly younger.  It’s difficult to be more specific than that.  Thankfully, I was never forced into religion by my parents, neither of whom are overly religious themselves.  Mum seems quite indifferent to the whole thing and while Dad still attends church every weekend, he <em>rejects</em> fundamentalist dogma and biblical literalism, like any rational person should.</p>
  1054.  
  1055. <p>Luckily, I attended a public school and so I didn’t have it forced down my throat there either.  However, students were still sent to scripture for about half an hour a week, for part of the year, separated into groups by denomination.  Unfortuantely, the separation of church and state in Australia isn’t quite as clear cut as it’s supposed to be in the USA, and so some religion is still allowed in public schools.</p>
  1056.  
  1057. <p>I wasn’t overly happy about that arrangement.  I didn’t want to go just to be taught stories <em>I didn’t believe</em>.  As far as I know, there was no alternative available for non-believers; or if there was, I don’t know why I wasn’t sent there.  So I did what any rebellious kid would do.  I acted out in various ways; not always, but frequently enough.  Unfortunately, the details of my exploits mostly elude me.  It’s hard to remember that far back.</p>
  1058.  
  1059. <p>But on one occasion that I do remember, we were given some kind of work sheet to fill out, with various questions about the fables being read to us.  I remember repeatedly scrawling phrases like “<strong>GOD DOES NOT EXIST!!!</strong>” and “<strong>JESUS WAS NOT THE SON OF GOD!!!</strong>” as my answers.  I haven’t a clue what the questions were.  I then spent the remaining time filling up the rest of the page with exclamation points as my way of emphasising the fact that I didn’t believe any of that nonsense and really didn’t want to be there.  Sadly, I can’t recall the response of the minister when he saw it.  I’m sure it wasn’t particularly positive.</p>
  1060.  
  1061. <p>So in a sense, I took <a href="http://www.blasphemychallenge.com/">The Blasphemy Challenge</a> about a decade and half before it was considered cool, and well before I knew it meant <em>my eternal damnation!</em>  But hey, now that I do, I have something to look forward to.</p>
  1062.  
  1063. <p>That was by no means my only form of protest during school scriptures.  Other times were a little more disruptive.  But it was around this time that I vowed, when I grew up, I would fight to have all religion abolished from public schools.  I still hope that this will happen one day.</p>
  1064.  
  1065. <p>Anyway, this may seem odd for a kid as young as I was back then to be so vehemently opposed to religious dogma.  I certainly knew of no other in my position—at least none of my friends were—and there was no-one else in my life from whom my <em>blasphemous anti-religious sentiments</em> spawned.  But the fact is, I was an <strong>atheist</strong> long before I even knew what the word meant, let alone knew of anyone else who shared my disbelief.  To be honest, I believed in Santa Claus and the Easter Bunny longer than I believed in a god.</p>
  1066.  
  1067. <p>Of course, all of this was well before I knew anything about the scientific explanations for the origin of <em>life, the universe and everything</em>.  I knew nothing of the Big Bang Theory, Evolution, nor anything else in between.  My rejection of religion was not based on scientific knowledge.  So then the question arises <em>how</em> and <em>why</em> did I manage to not only avoid, but to actively reject indoctrination, especially at such a young and impressionable age?  The answer to this will become apparent later.</p>
  1068.  
  1069. <p>But despite these views of mine, I did in fact occasionally attend scripture at church on Sundays.  Not because I was ever dragged there against my will, kicking and screaming; but by my own choice.  <em>It was a tough choice to make though</em>, and most of the time I chose not to.  By this stage, I had already firmly rejected any sort of faith-based beliefs, and there was no chance of me ever converting.  So why did I attend?  Simple: because my friends did and sometimes the activities were fun, as was running around playing in the church yard afterwards.</p>
  1070.  
  1071. <p>I still find it somewhat amusing that over the years, given my anti-religious convictions, two of my closest friends have been deeply religious.  One was the son of our church minister, who sometimes taught my scripture class at school.  I’ve no-doubt he was on the receiving end of my aforementioned protests, most likely on more than one occasion.  Although he actually respected my views and never tried to force his onto me, and we developed a kind of mutual respect for each other.  I suppose it helped that his son and I were good friends.  But the irony of this was that I spent many afternoons, after school, hanging out a minister’s house — almost the <em>last place</em> you’d expect to find a <em>radical atheist</em>.</p>
  1072.  
  1073. <p>Unfortunately they moved to another town during the later years of primary school and I’ve not seen much of them since.  After this, I never voluntarily attended scripture again.</p>
  1074.  
  1075. <p>But the problem was not only did one of my good friends move away, the replacement minister, who happened to move into that same house I’d spent so many memorable afternoons, was not nearly as pleasant or respectful.  I despised him for the way he treated me unfairly from the rest of the students in the class, largely because of our diametrically opposed views.  But, I must admit, it was probably partially compounded by my occasional disruptive, rebellious conduct.  But let’s just say he started it and he still owes me a <a href="http://www.nestle.com.au/schoolprojects/smarties.asp">Mintie</a>, and leave it that.</p>
  1076.  
  1077. <p>The other one of my closest friends considers himself to be a born-again, fundamentalist christian who I’m pretty sure still believes <em>everything I don’t</em>.  I’m not entirely certain though, as we stopped discussing religion after our arguments started getting in the way of our friendship.</p>
  1078.  
  1079. <p>We’re still friends today, but our arguments largely centred around the non-existence of God and the implausibility of many of the biblical myths that he took so literally, such as Adam and Eve; Noah’s Ark; Moses parting the Red Sea; God dictating the Ten Commandments to him; the “virgin” birth; the many miracles claimed to be performed by Jesus; the resurrection, and many other stories that any rationally thinking person would unquestionably reject as myths and allegories, had they not been indoctrinated into believing from childhood.</p>
  1080.  
  1081. <p>When I questioned how he could believe, or <em>know</em> any of it was true, the answer always came down to one thing: <strong>faith</strong>.  <em>Nothing but blind, unwavering, unsupported and utterly irrational faith!</em>  I’m sure that comes as no surprise, as it’s a fairly typical requirement of any religious person.  But it’s the concept of faith that I was never able to grasp, and this is why I rejected religion so early in my life.</p>
  1082.  
  1083. <p>I simply could not accept as true: outlandish stories which could not be verified, depended upon unfounded assumptions or invoked supernatural beings or powers, based on nothing more than faith.  Nor could I understand what could possibly make any one religion more true or at least <em>more believable</em> than any other.</p>
  1084.  
  1085. <p>I viewed all of these myths as outright lies handed down from one generation to the next, infecting peoples minds with irrational belief in what can only be described as fairy tales.  It destroys all sense of reason.  It discourages critical thinking by encouraging belief <em>in spite of reason</em>.  This anti-intellectualism, I thought, was quite dangerous in and of itself, and it had to be stopped.  Though it wasn’t till much later in life that I realised just how dangerous religion can be towards not only science and progress in general, but to civilisation as a whole.  I now realise that it absolutely must be stopped.</p>
  1086.  
  1087. <p>Until this point, my exposure to religion, specifically christianity, had been largely limited to the toned down versions of the biblical myths aimed at children.  I had never actually read the real bible in its entirety, and still haven’t read most of it to this day.  But I’ve now read enough of it to see how violent, discriminatory, bigoted, immoral and just plain evil that the characters and events depicted in the bible, including “God” himself, can be.  <strong>It’s disgusting!</strong></p>
  1088.  
  1089. <p>If there’s one place in the western civilisation where the anti-intellectual, anti-scientific nature of religion is most clearly illustrated, it’s in the god-fearing, bible bashing, United States of America.  Led by organisations like <a href="http://www.answersingenesis.org/" title="Answers in Genesis - Creation, Evolution, Christian Apologetics"><i>Answers in Genesis</i></a>, <a href="http://www.drdino.com/" title="Creation Science Evangelism - Creation, Evolution, Dinosaurs, and the Bible."><i>Creation Science Evangelism</i></a> and the <a href="http://www.icr.org/"><i>Institute for Creation Research</i></a>, among others, the USA’s constitutional separation of church and state has been and is still being attacked and eroded by fundamentalists.</p>
  1090.  
  1091. <p>Ranging from getting the phrase “In God We Trust” added to the US currency; the words “Under God” inserted into the pledge of allegiance; hijacking the Boy Scouts of America and turning it into a homophobic christian organisation; right up to the continuing, though thankfully failed, attempts to get Creationism, Intelligent Design, “Teach the Controversy” or whatever you want to call it next, taught in public schools.  It certainly doesn’t help that the current US President considers himself to be a born-again christian, nor that the candidates for the upcoming election aren’t any better in this respect.</p>
  1092.  
  1093. <p>To an outside observer, the <a href="http://www.creationmuseum.org/">Creation Museum</a> surely seems like an hilarious attempt at mocking the faith and highlighting the absurdities of these Bronze Age myths.  Well, <em>it would be</em> if the anti-science organisation responsible for it wasn’t so serious about actually believing such propaganda.  In reality, it’s just sad.</p>
  1094.  
  1095. <p>I should point out that even though I’ve focussed largely on the myths and lies of Christianity, that’s only because it’s the one religion I’ve had the most exposure too.  But rest assured, when it comes to <strong><em>insulting religion</em></strong>, I’m an <em>equal opportunity offender</em>.</p>
  1096.  
  1097. <p>For instance, imagine for the moment that I had been born into an Islamic nation and attended an Islamic school, yet still developed my same contempt for religion.  I’m quite sure I’d have been stoned to death by now for my blasphemy.  Sadly, that particular sin still carries the death penalty in some <em>sick</em> middle eastern countries that are ruled by an Islamic theocracy.  Although I’m quite sure there are some christians who would support the same penalty.</p>
  1098.  
  1099. <p>Both the Bible and Qur’an are filled with countless examples of brutally stoning people, rape, torture, discrimination against homosexuals, segregation of women and other horrendous acts.  It really is a wonder how any Christian or Muslim can honestly claim their faith as the <em>basis of morality</em>.  It’s just absurd.</p>
  1100.  
  1101. <p>The bottom line is, I have no respect for religion at all.  At least, not the theistic religions.  I have mildly more respect for non-theistic religions like Buddhism, which I view as really more of a philosophy and way of life, than a religion, though I’m not really familiar with it.</p>
  1102.  
  1103. <p>I respect people, and I not only respect, but would defend anyone’s freedom to believe whatever they want, including religion; but I have no for respect religious belief itself.</p>
  1104.  
  1105. <p><em>I hate religion</em>.  Fuck Christianity.  Fuck Islam.  Fuck Judaism and Hinduism.  Fuck Scientology and all other crazy cults.  Fuck ’em all.  <strong>Respect people, not religion</strong>.  The world would be a much better place without it.</p>
  1106. ]]></content>
  1107.        </entry>
  1108.    <entry>
  1109.    <id>http://lachy.id.au/log/?p=174</id>
  1110.    <title type="html"><![CDATA[about:internets]]></title>
  1111.    <updated>2013-09-07T16:37:43Z</updated>
  1112.    <published>2008-09-03T00:20:10Z</published>
  1113.    <author>
  1114.      <name>Lachlan Hunt</name>
  1115.      <email>lachlan.hunt@lachy.id.au</email>
  1116. <uri>http://lachy.id.au/</uri>    </author>
  1117.    <link rel="replies" type="application/atom+xml" href="https://lachy.id.au/log/2008/09/aboutinternets/feed" thr:count="0"  />
  1118.    <link rel="alternate" href="https://lachy.id.au/log/2008/09/aboutinternets" />
  1119.    <category scheme="https://lachy.id.au/log" term="Google" />
  1120.    <category scheme="https://lachy.id.au/log" term="Humour" />
  1121.    <category scheme="https://lachy.id.au/log" term="User Agents" />
  1122.    <summary type="html"><![CDATA[The internets really is a <em>series of tubes</em>!]]></summary>
  1123.      <content type="html" xml:base="https://lachy.id.au/log/2008/09/aboutinternets"><![CDATA[<p>Many people didn&#8217;t believe <a href="http://en.wikipedia.org/wiki/Ted_Stevens">Senator Ted Stevens</a> when he said that the Internet was a <a href="http://en.wikipedia.org/wiki/Series_of_tubes">series of tubes</a>. Well now, thanks to Google, there is proof that he was right! In <a href="http://www.google.com/chrome/">Google Chrome</a>, if you have it, visit <code>about:internets</code>. This provides a graphical illustration of the internet which looks very much like a series of tubes to me.</p>
  1124.  
  1125. <p>It appears to based upon the Windows 3D Pipes screensaver. It uses the mixed joints, but I&#8217;m not sure if it also includes the teapots, like the real screensaver. If you see one, let me know.</p>]]></content>
  1126.        </entry>
  1127.    <entry>
  1128.    <id>http://lachy.id.au/log/?p=173</id>
  1129.    <title type="html"><![CDATA[Google Chrome]]></title>
  1130.    <updated>2013-09-07T16:38:10Z</updated>
  1131.    <published>2008-09-01T23:33:36Z</published>
  1132.    <author>
  1133.      <name>Lachlan Hunt</name>
  1134.      <email>lachlan.hunt@lachy.id.au</email>
  1135. <uri>http://lachy.id.au/</uri>    </author>
  1136.    <link rel="replies" type="application/atom+xml" href="https://lachy.id.au/log/2008/09/google-chrome/feed" thr:count="0"  />
  1137.    <link rel="alternate" href="https://lachy.id.au/log/2008/09/google-chrome" />
  1138.    <category scheme="https://lachy.id.au/log" term="Google" />
  1139.    <category scheme="https://lachy.id.au/log" term="Mozilla" />
  1140.    <category scheme="https://lachy.id.au/log" term="Opera" />
  1141.    <category scheme="https://lachy.id.au/log" term="User Agents" />
  1142.    <summary type="html"><![CDATA[Google Chrome has been announced as Google's new web browser.]]></summary>
  1143.      <content type="html" xml:base="https://lachy.id.au/log/2008/09/google-chrome"><![CDATA[<p>The rumours have been going around the web for years about the possibility of the Google browser, with some rather wild speculation about what exactly it would be like. John Rhodes seems to be one of the earliest to float the idea of <a href="http://webword.com/moving/googleclient.html">the Google Client</a> in September 2001, and in August 2004, based on Google’s relationship with Mozilla at the time, <a href="http://kottke.org/04/08/the-google-browser">Kottke predicted a Mozilla-based Google browser</a>.</p>
  1144.  
  1145. <p>In February this year, it was reported that <a href="http://thetruthaboutmozilla.wordpress.com/2008/02/25/the-google-browser/">Google had assembled a team to work on on a WebKit based browser</a>, then known as <em>GBrowser</em>.  Now just over 7 months later, all the rumours and predictions have finally been realised. <a href="http://blogoscoped.com/archive/2008-09-01-n47.html" title="Google Chrome, Google's Browser Project">Google Blogoscoped announced</a> and leaked a <a href="http://blogoscoped.com/google-chrome/" title="Google on Google Chrome - comic book">comic book entitled Google Chrome</a> earlier today describing many of the innovative features developed for the new browser.  Shortly afterwards, the official Google blog <a href="http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html">admitted that it was mistakenly released a day early</a>.</p>
  1146.  
  1147. <p>It should be noted that the concept also includes a few ideas based on features in other browsers, such as Opera’s Speed Dial, and both Firefox and Opera’s address bar (a.k.a. Awesome bar), called omnibox.
  1148.  
  1149. </p><p>The comic was drawn and created by <a href="http://en.wikipedia.org/wiki/Scott_McCloud" title="Scott McCloud - Wikipedia, the free encyclopedia">Scott McCloud</a> and has been released under a <a href="http://creativecommons.org/licenses/by-nc-nd/2.5" title="Creative Commons
  1150.    Attribution-Noncommercial-No Derivative Works 2.5 Generic">Creative Commons by-nc-nd 2.5 licence</a>.  <del datetime="2008-09-01T23:35:33+00:00">The comic has currently been taken down due to server load</del> <ins datetime="2008-09-01T23:35:33+00:00">(it&#8217;s up again)</ins>, but I have published <a href="http://lachy.id.au/dev/2008/google-chrome/">a copy of the whole comic</a> here for you to see it, if you haven&#8217;t already.  You can also download a <a href="http://lachy.id.au/lib/images/2008/google-chrome/google-chrome.tar.gz">tarball of all the images</a>.</p>]]></content>
  1151.        </entry>
  1152.    <entry>
  1153.    <id>http://lachy.id.au/log/?p=172</id>
  1154.    <title type="html"><![CDATA[Internet Explorer 8 Beta 2]]></title>
  1155.    <updated>2013-09-07T16:38:31Z</updated>
  1156.    <published>2008-08-30T23:36:50Z</published>
  1157.    <author>
  1158.      <name>Lachlan Hunt</name>
  1159.      <email>lachlan.hunt@lachy.id.au</email>
  1160. <uri>http://lachy.id.au/</uri>    </author>
  1161.    <link rel="replies" type="application/atom+xml" href="https://lachy.id.au/log/2008/08/internet-explorer-8-beta-2/feed" thr:count="0"  />
  1162.    <link rel="alternate" href="https://lachy.id.au/log/2008/08/internet-explorer-8-beta-2" />
  1163.    <category scheme="https://lachy.id.au/log" term="Microsoft" />
  1164.    <category scheme="https://lachy.id.au/log" term="User Agents" />
  1165.    <summary type="html"><![CDATA[Internet Explorer 8 beta 2 released, and demonstrating a solution to run multiple versions of IE simultaneiously.]]></summary>
  1166.      <content type="html" xml:base="https://lachy.id.au/log/2008/08/internet-explorer-8-beta-2"><![CDATA[<p>A few days ago, <a href="http://blogs.msdn.com/ie/archive/2008/08/27/internet-explorer-8-beta-2-now-available.aspx">the 2nd beta of IE8 was released</a>.  Although I haven’t had much time to play with it and find out what it does and doesn’t support, I have come across a few bugs with it.</p>
  1167.  
  1168. <p>But one of the big problems we still have with IE is the inability to run several versions side by side.  The one solution continually offered by Microsoft is the ability to <a href="http://blogs.msdn.com/ie/archive/2008/08/29/updated-vpc-images-now-available.aspx">download virtual machines</a>, which are set to expire after a limited amount of time.  The problem with this is that you still need a separate virtual machine for each version of IE you want to run, and after they expire, you need to get a new one.</p>
  1169.  
  1170. <p>Anyway, I have a found an even better solution.  One that lets me run IE6, IE7, IE8b1 and IE8b2 side by side, all within the same copy of Windows XP, which I also have running in a single virtual machine on Mac OS X.  I don’t have time to elaborate on the solution now, but I will try to do so over the next few days.  For now, <a href="http://lachy.id.au/lib/images/2008/simultaneous-ie-versions.png">here’s a screenshot</a> showing them all running together, with each demonstrating how badly they fail Acid 3.</p>]]></content>
  1171.        </entry>
  1172.    <entry>
  1173.    <id>http://lachy.id.au/log/?p=170</id>
  1174.    <title type="html"><![CDATA[Interview about HTML5 on Boagworld]]></title>
  1175.    <updated>2013-09-07T16:38:22Z</updated>
  1176.    <published>2008-07-02T23:14:42Z</published>
  1177.    <author>
  1178.      <name>Lachlan Hunt</name>
  1179.      <email>lachlan.hunt@lachy.id.au</email>
  1180. <uri>http://lachy.id.au/</uri>    </author>
  1181.    <link rel="replies" type="application/atom+xml" href="https://lachy.id.au/log/2008/07/boagworld-interview/feed" thr:count="0"  />
  1182.    <link rel="alternate" href="https://lachy.id.au/log/2008/07/boagworld-interview" />
  1183.    <category scheme="https://lachy.id.au/log" term="Security" />
  1184.    <category scheme="https://lachy.id.au/log" term="Style" />
  1185.    <category scheme="https://lachy.id.au/log" term="User Agents" />
  1186.    <category scheme="https://lachy.id.au/log" term="WebKit" />
  1187.    <summary type="html"><![CDATA[Boagworld is a web design and development podcast based in the UK. In today&#8217;s episode, they interview me about HTML5. In it, we discuss the current state of HTML5, some of the new features that are currently, or are being implemented, and what we can expect in the future.]]></summary>
  1188.      <content type="html" xml:base="https://lachy.id.au/log/2008/07/boagworld-interview"><![CDATA[<p>Boagworld is a web design and development podcast based in the UK.  In <a href="http://boagworld.com/podcast/124/">today&#8217;s episode</a>, they interview me about HTML5.  In it, we discuss the current state of HTML5, some of the new features that are currently, or are being implemented, and what we can expect in the future.</p>]]></content>
  1189.        </entry>
  1190.  </feed>
  1191.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid Atom 1.0" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//lachy.id.au/log/feed

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda