<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>James Mc Parlane's Blog</title>
    <link>http://blog.metawrap.com/blog/</link>
    <description>More Fun Than A Room Full Of Nuns With Tourette's Syndrome</description>
    <copyright>James Mc Parlane</copyright>
    <lastBuildDate>Sun, 06 Sep 2009 00:45:19 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.7174.0</generator>
    <managingEditor>james@massive.com.au</managingEditor>
    <webMaster>james@massive.com.au</webMaster>
    <item>
      <trackback:ping>http://blog.metawrap.com/blog/Trackback.aspx?guid=340684a3-c251-4b8a-a932-afd19f51f579</trackback:ping>
      <pingback:server>http://blog.metawrap.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://blog.metawrap.com/blog/PermaLink.aspx?guid=340684a3-c251-4b8a-a932-afd19f51f579</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.metawrap.com/blog/CommentView.aspx?guid=340684a3-c251-4b8a-a932-afd19f51f579</wfw:comment>
      <wfw:commentRss>http://blog.metawrap.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=340684a3-c251-4b8a-a932-afd19f51f579</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
“MahTweets is a rich, awesome, twitter client, feature inline media, filtering, tracking
(saved searches) and much more”
</p>
        <p>
 <img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhereImageuploadnowsupportedbyMahTw_941F/image_6.png" width="311" height="352" /></p>
        <p>
MahTweets can be downloaded from <a href="http://theleagueofpaul.com/mahtweets/"><u><font color="#0000ff">http://theleagueofpaul.com/mahtweets/</font></u></a></p>
        <p>
The ThumbWhere plugin was developed by <a href="http://twitter.com/WillHughes" target="_blank">@WillHughes</a></p>
        <p>
It supports Image uploading and uses ThumbWhere’s URL shrinking service ( <a href="http://tny.tw">tny.tw</a> ).
</p>
        <p>
You can get a ThumbWhere account at <a href="http://thumbwhere.com">http://thumbwhere.com</a></p>
        <p>
Also you don’t have an account you can always MMS images, video and audio to <strong>+61-447-100-293</strong> and
ThumbWhere will publish it anonymously to the public feed.
</p>
        <img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=340684a3-c251-4b8a-a932-afd19f51f579" />
      </body>
      <title>ThumbWhere Image upload now supported by MahTweets</title>
      <guid isPermaLink="false">http://blog.metawrap.com/blog/PermaLink.aspx?guid=340684a3-c251-4b8a-a932-afd19f51f579</guid>
      <link>http://blog.metawrap.com/blog/ThumbWhereImageUploadNowSupportedByMahTweets.aspx</link>
      <pubDate>Sun, 06 Sep 2009 00:45:19 GMT</pubDate>
      <description>&lt;p&gt;
“MahTweets is a rich, awesome, twitter client, feature inline media, filtering, tracking
(saved searches) and much more”
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhereImageuploadnowsupportedbyMahTw_941F/image_6.png" width="311" height="352"&gt; 
&lt;/p&gt;
&lt;p&gt;
MahTweets can be downloaded from &lt;a href="http://theleagueofpaul.com/mahtweets/"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;http://theleagueofpaul.com/mahtweets/&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The ThumbWhere plugin was developed by &lt;a href="http://twitter.com/WillHughes" target="_blank"&gt;@WillHughes&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
It supports Image uploading and uses ThumbWhere’s URL shrinking service ( &lt;a href="http://tny.tw"&gt;tny.tw&lt;/a&gt; ).
&lt;/p&gt;
&lt;p&gt;
You can get a ThumbWhere account at &lt;a href="http://thumbwhere.com"&gt;http://thumbwhere.com&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Also you don’t have an account you can always MMS images, video and audio to &lt;strong&gt;+61-447-100-293&lt;/strong&gt; and
ThumbWhere will publish it anonymously to the public feed.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=340684a3-c251-4b8a-a932-afd19f51f579" /&gt;</description>
      <comments>http://blog.metawrap.com/blog/CommentView.aspx?guid=340684a3-c251-4b8a-a932-afd19f51f579</comments>
      <category>ThumbWhere.com</category>
      <category>Twitter</category>
    </item>
    <item>
      <trackback:ping>http://blog.metawrap.com/blog/Trackback.aspx?guid=da076fb4-ca59-4011-af17-d8f19b66956a</trackback:ping>
      <pingback:server>http://blog.metawrap.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://blog.metawrap.com/blog/PermaLink.aspx?guid=da076fb4-ca59-4011-af17-d8f19b66956a</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.metawrap.com/blog/CommentView.aspx?guid=da076fb4-ca59-4011-af17-d8f19b66956a</wfw:comment>
      <wfw:commentRss>http://blog.metawrap.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=da076fb4-ca59-4011-af17-d8f19b66956a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Been a bit quiet here for the last few months. I’ve been particularly busy at work
but also I’ve been working on a few other projects on the side.
</p>
        <p>
One of these is ThumbWhere. <a href="http://thumbwhere.com">http://thumbwhere.com</a> (try <a href="http://blog.thumbwhere.com">the
blog</a> for more info).
</p>
        <p>
ThumbWhere allows you to post text, images, video or audio to the web and to Twitter.
Support for other social media and social networking sites will be enabled in the
near future.
</p>
        <p>
Here is a post on <a href="http://twitter.com/DrMiaow">my Twitter stream</a> sent
in from ThumbWhere.
</p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_6.png">
            <img title="image" height="85" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_thumb_2.png" width="453" border="0" />
          </a> 
</p>
        <p>
If you use Twitter on your mobile phone you will find it’s <strong>very very fast. </strong>I
have no ads – I just link you directly to the media if you click on a <a href="http://tny.tw">http://tny.tw</a> shortlink
using a phone.
</p>
        <p>
If you just want to post something anonymously – send images, photos or video to +61-447-100-293
and it will be added to the public feed. Anyone can send via MMS and your content
will be added anonymously to the <a href="http://thumbwhere.com/items/public_timeline.html">public
timeline</a>. If you later on create an account, that content will be added to your
account and will no longer be anonymous, so don’t post anything embarrassing if you
intend to join up in the future :)
</p>
        <p>
I’m keeping out the email spammers for now but I’ll be enabling submissions via email
in the next few weeks – at the moment you need a phone that can MMS to the submission
number, so if you have an iPhone you will need version 3.0.
</p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_4.png">
            <img title="image" height="354" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_thumb_1.png" width="620" border="0" />
          </a>
        </p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_10.png">
            <img title="image" height="457" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_thumb_4.png" width="362" border="0" />
          </a>
        </p>
        <p>
The main web site is a very plain lightweight AJAX driven ‘white-site. It does not
look like much, but it’s doing some wonderful magic under the hood as it’s all driven
by my <a href="http://blog.metawrap.com/blog/PracticalApplicationsOfFiniteStateMachinesInWebDevelopment.aspx">state
machine language</a>. The back end is running my own custom pipeline processing engine
– it’s kind of a multi-dimensional-tree lazy evaluation version of <a href="http://en.wikipedia.org/wiki/MapReduce">map-reduce</a>.
This architecture means that it’s trivial for me to integrate job endpoints from on
demand computer systems such as <a href="http://www.microsoft.com/azure/default.mspx">Azure</a> and <a href="http://aws.amazon.com/ec2/">EC2</a>.
</p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_2.png">
            <img title="image" height="611" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_thumb.png" width="461" border="0" />
          </a>
        </p>
        <p>
I’ve set up a site to allow people to <a href="http://feedback.thumbwhere.com">request
features</a>. First off the rank will be submission via email.
</p>
        <p>
I’m also working on an iPhone app and an Azure endpoint for much of my processing
and transcoding pipeline.
</p>
        <p>
Its keeping me off the streets :)
</p>
        <img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=da076fb4-ca59-4011-af17-d8f19b66956a" />
      </body>
      <title>ThumbWhere.Com</title>
      <guid isPermaLink="false">http://blog.metawrap.com/blog/PermaLink.aspx?guid=da076fb4-ca59-4011-af17-d8f19b66956a</guid>
      <link>http://blog.metawrap.com/blog/ThumbWhereCom.aspx</link>
      <pubDate>Fri, 01 May 2009 06:17:08 GMT</pubDate>
      <description>&lt;p&gt;
Been a bit quiet here for the last few months. I’ve been particularly busy at work
but also I’ve been working on a few other projects on the side.
&lt;/p&gt;
&lt;p&gt;
One of these is ThumbWhere. &lt;a href="http://thumbwhere.com"&gt;http://thumbwhere.com&lt;/a&gt; (try &lt;a href="http://blog.thumbwhere.com"&gt;the
blog&lt;/a&gt; for more info).
&lt;/p&gt;
&lt;p&gt;
ThumbWhere allows you to post text, images, video or audio to the web and to Twitter.
Support for other social media and social networking sites will be enabled in the
near future.
&lt;/p&gt;
&lt;p&gt;
Here is a post on &lt;a href="http://twitter.com/DrMiaow"&gt;my Twitter stream&lt;/a&gt; sent
in from ThumbWhere.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_6.png"&gt;&lt;img title="image" height="85" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_thumb_2.png" width="453" border="0"&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
If you use Twitter on your mobile phone you will find it’s &lt;strong&gt;very very fast. &lt;/strong&gt;I
have no ads – I just link you directly to the media if you click on a &lt;a href="http://tny.tw"&gt;http://tny.tw&lt;/a&gt; shortlink
using a phone.
&lt;/p&gt;
&lt;p&gt;
If you just want to post something anonymously – send images, photos or video to +61-447-100-293
and it will be added to the public feed. Anyone can send via MMS and your content
will be added anonymously to the &lt;a href="http://thumbwhere.com/items/public_timeline.html"&gt;public
timeline&lt;/a&gt;. If you later on create an account, that content will be added to your
account and will no longer be anonymous, so don’t post anything embarrassing if you
intend to join up in the future :)
&lt;/p&gt;
&lt;p&gt;
I’m keeping out the email spammers for now but I’ll be enabling submissions via email
in the next few weeks – at the moment you need a phone that can MMS to the submission
number, so if you have an iPhone you will need version 3.0.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_4.png"&gt;&lt;img title="image" height="354" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_thumb_1.png" width="620" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_10.png"&gt;&lt;img title="image" height="457" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_thumb_4.png" width="362" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The main web site is a very plain lightweight AJAX driven ‘white-site. It does not
look like much, but it’s doing some wonderful magic under the hood as it’s all driven
by my &lt;a href="http://blog.metawrap.com/blog/PracticalApplicationsOfFiniteStateMachinesInWebDevelopment.aspx"&gt;state
machine language&lt;/a&gt;. The back end is running my own custom pipeline processing engine
– it’s kind of a multi-dimensional-tree lazy evaluation version of &lt;a href="http://en.wikipedia.org/wiki/MapReduce"&gt;map-reduce&lt;/a&gt;.
This architecture means that it’s trivial for me to integrate job endpoints from on
demand computer systems such as &lt;a href="http://www.microsoft.com/azure/default.mspx"&gt;Azure&lt;/a&gt; and &lt;a href="http://aws.amazon.com/ec2/"&gt;EC2&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_2.png"&gt;&lt;img title="image" height="611" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ThumbWhere.Com_E4FF/image_thumb.png" width="461" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I’ve set up a site to allow people to &lt;a href="http://feedback.thumbwhere.com"&gt;request
features&lt;/a&gt;. First off the rank will be submission via email.
&lt;/p&gt;
&lt;p&gt;
I’m also working on an iPhone app and an Azure endpoint for much of my processing
and transcoding pipeline.
&lt;/p&gt;
&lt;p&gt;
Its keeping me off the streets :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=da076fb4-ca59-4011-af17-d8f19b66956a" /&gt;</description>
      <comments>http://blog.metawrap.com/blog/CommentView.aspx?guid=da076fb4-ca59-4011-af17-d8f19b66956a</comments>
      <category>JavaScript</category>
      <category>ThumbWhere.com</category>
    </item>
    <item>
      <trackback:ping>http://blog.metawrap.com/blog/Trackback.aspx?guid=2a7b1829-5b91-403a-8b9c-6354162e0276</trackback:ping>
      <pingback:server>http://blog.metawrap.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://blog.metawrap.com/blog/PermaLink.aspx?guid=2a7b1829-5b91-403a-8b9c-6354162e0276</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.metawrap.com/blog/CommentView.aspx?guid=2a7b1829-5b91-403a-8b9c-6354162e0276</wfw:comment>
      <wfw:commentRss>http://blog.metawrap.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2a7b1829-5b91-403a-8b9c-6354162e0276</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Developed by some very dear friends of mine who used to work at <a href="http://www.massive.com.au">Massive</a>.
</p>
        <p>
          <span class="status-body">
            <span class="entry-content">
              <a href="http://pitapata.com/" target="_blank" rel="nofollow">
                <u>
                  <font color="#000080">http://pitapata.com/</font>
                </u>
              </a>
            </span>
          </span>
        </p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PitaPataTicketsAndWidgetsForYourPets_11427/image_2.png">
            <img title="image" height="405" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PitaPataTicketsAndWidgetsForYourPets_11427/image_thumb.png" width="381" border="0" />
          </a> 
</p>
        <p>
This is the same team that produced LilyPie <a href="http://lilypie.com/"><u><font color="#000080">http://lilypie.com/</font></u></a> which
provides Tickers and Widgets for your baby or child :)
</p>
        <img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=2a7b1829-5b91-403a-8b9c-6354162e0276" />
      </body>
      <title>PitaPata - Tickers And Widgets For Your Pets</title>
      <guid isPermaLink="false">http://blog.metawrap.com/blog/PermaLink.aspx?guid=2a7b1829-5b91-403a-8b9c-6354162e0276</guid>
      <link>http://blog.metawrap.com/blog/PitaPataTickersAndWidgetsForYourPets.aspx</link>
      <pubDate>Wed, 18 Mar 2009 08:38:18 GMT</pubDate>
      <description>&lt;p&gt;
Developed by some very dear friends of mine who used to work at &lt;a href="http://www.massive.com.au"&gt;Massive&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;span class=status-body&gt;&lt;span class=entry-content&gt;&lt;a href="http://pitapata.com/" target=_blank rel=nofollow&gt;&lt;u&gt;&lt;font color=#000080&gt;http://pitapata.com/&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PitaPataTicketsAndWidgetsForYourPets_11427/image_2.png"&gt;&lt;img title=image height=405 alt=image src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PitaPataTicketsAndWidgetsForYourPets_11427/image_thumb.png" width=381 border=0&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
This is the same team that produced LilyPie &lt;a href="http://lilypie.com/"&gt;&lt;u&gt;&lt;font color=#000080&gt;http://lilypie.com/&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; which
provides Tickers and Widgets for your baby or child :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=2a7b1829-5b91-403a-8b9c-6354162e0276" /&gt;</description>
      <comments>http://blog.metawrap.com/blog/CommentView.aspx?guid=2a7b1829-5b91-403a-8b9c-6354162e0276</comments>
      <category>Music &amp; Art</category>
      <category>Web2.0</category>
    </item>
    <item>
      <trackback:ping>http://blog.metawrap.com/blog/Trackback.aspx?guid=f71db522-83f8-4e44-9a66-dcff6b9be347</trackback:ping>
      <pingback:server>http://blog.metawrap.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://blog.metawrap.com/blog/PermaLink.aspx?guid=f71db522-83f8-4e44-9a66-dcff6b9be347</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.metawrap.com/blog/CommentView.aspx?guid=f71db522-83f8-4e44-9a66-dcff6b9be347</wfw:comment>
      <wfw:commentRss>http://blog.metawrap.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f71db522-83f8-4e44-9a66-dcff6b9be347</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Australia is gripped in debate over it's government’s push to introduce <a href="http://www.abc.net.au/news/stories/2007/12/31/2129471.htm?section=justin">Mandatory
ISP Level Filtering</a>. Yes and the policy is about as well thought out as it is
acronymed.
</p>
        <p>
Out of that debate <a href="http://broadbannedrevolution.blogspot.com">Jon Seymour</a> has
come up with “<a href="http://broadbannedrevolution.blogspot.com/2008/11/conroy-rule.html">The
Conroy Rule</a>”, named after <a href="http://www.minister.dbcde.gov.au/">Stephen
Conroy</a>, the senator spearheading this ‘initiative’. 
</p>
        <p>
Simply put, it’s related to "The Hitler Rule” and “<a href="http://en.wikipedia.org/wiki/Godwin's_Law">Godwin’s
Law</a>” and is formulated thusly.
</p>
        <blockquote>
          <p>
            <span class="Apple-style-span" style="word-spacing: 0px; font: italic 13px/20px georgia; text-transform: none; color: rgb(51,51,51); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: left; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">The
first person to equate free speech with an unrestricted right to access child pornography,
loses.</span>
          </p>
        </blockquote>
        <p>
This rule has become necessary because the government seems to be using the “<span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"><a href="http://en.wikipedia.org/wiki/Fallacy_of_many_questions">Are
you still beating your wife?”</a> approach to anyone who questions the policy. Essentially,
if you are against the filter, you must be for child pornography – we are trying to
protect children from child pornography.</span></p>
        <p>
          <span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">The
proposed “<a href="http://nocleanfeed.com/">clean feed</a>” is easily bypassed by
a <a href="http://en.wikipedia.org/wiki/Vpn">VPN</a> (which comes for free with Windows
and Apple computers) which not only masks someone's true IP address, it also adds
an extra bonus layer of encryption.</span>
        </p>
        <p>
          <span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">
            <span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">I’d
argue that its easier to catch criminals when they don’t use a VPN to mask their actual
IP address and encrypt their traffic. Just seems like common sense to me.</span>
          </span>
        </p>
        <p>
          <span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">At
best its going to make the incompetent pedophiles harder to catch because they will
be forced to learn how to use a VPN to get what they want. </span>
        </p>
        <p>
          <span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">I’d
also imagine that many police leads come from the inexperienced ones who get caught,
and this allows police to infiltrate their social sphere. I’d like to know if anyone
has any statistics, information or evidence either way that shows that a lack of encryption
by one member has ever allowed the police to break up a pedophile ring.</span>
        </p>
        <p>
          <span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">It’s
arguable that this will force them further underground and make them harder to detect,
which will in effect mean that this ‘initiative’ will make the Internet safer for
incompetent pedophiles.</span>
        </p>
        <p>
          <span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">I’d
suggest the Clean Feed should have the following tag-line. “</span>
          <span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">
            <strong>The
Clean Feed – <em>Forcing pedophiles to use stronger encryption</em></strong>”. Because
in the end, that’s going to be the effect. </span>There has been no evidence presented
of children “stumbling onto child porn”. I would argue that the clean feed would make
this less likely as it would become much harder to find – so one part of their argument
at least stacks up. Shame about all the collateral damage.
</p>
        <img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=f71db522-83f8-4e44-9a66-dcff6b9be347" />
      </body>
      <title>The Conroy Rule</title>
      <guid isPermaLink="false">http://blog.metawrap.com/blog/PermaLink.aspx?guid=f71db522-83f8-4e44-9a66-dcff6b9be347</guid>
      <link>http://blog.metawrap.com/blog/TheConroyRule.aspx</link>
      <pubDate>Thu, 27 Nov 2008 05:02:43 GMT</pubDate>
      <description>&lt;p&gt;
Australia is gripped in debate over it's government’s push to introduce &lt;a href="http://www.abc.net.au/news/stories/2007/12/31/2129471.htm?section=justin"&gt;Mandatory
ISP Level Filtering&lt;/a&gt;. Yes and the policy is about as well thought out as it is
acronymed.
&lt;/p&gt;
&lt;p&gt;
Out of that debate &lt;a href="http://broadbannedrevolution.blogspot.com"&gt;Jon Seymour&lt;/a&gt; has
come up with “&lt;a href="http://broadbannedrevolution.blogspot.com/2008/11/conroy-rule.html"&gt;The
Conroy Rule&lt;/a&gt;”, named after &lt;a href="http://www.minister.dbcde.gov.au/"&gt;Stephen
Conroy&lt;/a&gt;, the senator spearheading this ‘initiative’. 
&lt;/p&gt;
&lt;p&gt;
Simply put, it’s related to "The Hitler Rule” and “&lt;a href="http://en.wikipedia.org/wiki/Godwin's_Law"&gt;Godwin’s
Law&lt;/a&gt;” and is formulated thusly.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;span class="Apple-style-span" style="word-spacing: 0px; font: italic 13px/20px georgia; text-transform: none; color: rgb(51,51,51); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: left; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;The
first person to equate free speech with an unrestricted right to access child pornography,
loses.&lt;/span&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
This rule has become necessary because the government seems to be using the “&lt;span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;&lt;a href="http://en.wikipedia.org/wiki/Fallacy_of_many_questions"&gt;Are
you still beating your wife?”&lt;/a&gt; approach to anyone who questions the policy. Essentially,
if you are against the filter, you must be for child pornography – we are trying to
protect children from child pornography.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;The
proposed “&lt;a href="http://nocleanfeed.com/"&gt;clean feed&lt;/a&gt;” is easily bypassed by
a &lt;a href="http://en.wikipedia.org/wiki/Vpn"&gt;VPN&lt;/a&gt; (which comes for free with Windows
and Apple computers) which not only masks someone's true IP address, it also adds
an extra bonus layer of encryption.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;&lt;span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;I’d
argue that its easier to catch criminals when they don’t use a VPN to mask their actual
IP address and encrypt their traffic. Just seems like common sense to me.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;At
best its going to make the incompetent pedophiles harder to catch because they will
be forced to learn how to use a VPN to get what they want. &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;I’d
also imagine that many police leads come from the inexperienced ones who get caught,
and this allows police to infiltrate their social sphere. I’d like to know if anyone
has any statistics, information or evidence either way that shows that a lack of encryption
by one member has ever allowed the police to break up a pedophile ring.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;It’s
arguable that this will force them further underground and make them harder to detect,
which will in effect mean that this ‘initiative’ will make the Internet safer for
incompetent pedophiles.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;I’d
suggest the Clean Feed should have the following tag-line. “&lt;/span&gt;&lt;span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;&lt;strong&gt;The
Clean Feed – &lt;em&gt;Forcing pedophiles to use stronger encryption&lt;/em&gt;&lt;/strong&gt;”. Because
in the end, that’s going to be the effect. &lt;/span&gt;There has been no evidence presented
of children “stumbling onto child porn”. I would argue that the clean feed would make
this less likely as it would become much harder to find – so one part of their argument
at least stacks up. Shame about all the collateral damage.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=f71db522-83f8-4e44-9a66-dcff6b9be347" /&gt;</description>
      <comments>http://blog.metawrap.com/blog/CommentView.aspx?guid=f71db522-83f8-4e44-9a66-dcff6b9be347</comments>
      <category>Politics</category>
      <category>Rants</category>
    </item>
    <item>
      <trackback:ping>http://blog.metawrap.com/blog/Trackback.aspx?guid=d65e5485-d310-4195-9f1d-9fa2292dd41f</trackback:ping>
      <pingback:server>http://blog.metawrap.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://blog.metawrap.com/blog/PermaLink.aspx?guid=d65e5485-d310-4195-9f1d-9fa2292dd41f</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.metawrap.com/blog/CommentView.aspx?guid=d65e5485-d310-4195-9f1d-9fa2292dd41f</wfw:comment>
      <wfw:commentRss>http://blog.metawrap.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d65e5485-d310-4195-9f1d-9fa2292dd41f</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>Will the Real XHTML5 Spec Please Stand Up?</title>
      <guid isPermaLink="false">http://blog.metawrap.com/blog/PermaLink.aspx?guid=d65e5485-d310-4195-9f1d-9fa2292dd41f</guid>
      <link>http://blog.metawrap.com/blog/WillTheRealXHTML5SpecPleaseStandUp.aspx</link>
      <pubDate>Thu, 13 Nov 2008 02:59:42 GMT</pubDate>
      <description>&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font&gt;&lt;font size="3"&gt;In &lt;/font&gt;&lt;a href="http://www.massive.com.au/mw/sneakpeek/screenshot1.gif"&gt;&lt;font size="3"&gt;1999
I created a semantic markup language&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt; that could be dynamically
transcoded into output targeted for the requesting device.&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;font&gt;&lt;/font&gt; 
&lt;p&gt;
&lt;font size="3"&gt;&lt;font&gt;I’d been using XML since 1995, I just didn’t know it. I was lucky
enough to be exposed to SGML and developing my own markup engines in the late 80’s
for demo-scene magazines and &lt;/font&gt;&lt;font&gt;professional in the early 90’s so I had
a kind of a head start.&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;font&gt;&lt;/font&gt; 
&lt;p&gt;
&lt;font size="3"&gt;It was initially used for set-top box content transcoding. The language
could be entirely or partially executed on the server. Partial execution involved
some translation into JavaScript on some browsers or a custom microbrowser on a set-top
box or device.&lt;/font&gt;
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/WilltheRealXHTML5SpecPleaseStandUp_C4C9/image_4.png"&gt;&lt;font size="3"&gt;&lt;img title="image" height="296" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/WilltheRealXHTML5SpecPleaseStandUp_C4C9/image_thumb_1.png" width="406" border="0"&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;It was also of course applicable to mobile phone development and with
WAP on the way it was very little effort to adapt it. &lt;/font&gt;
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;font size="3"&gt;&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/WilltheRealXHTML5SpecPleaseStandUp_C4C9/image_6.png"&gt;&lt;font size="3"&gt;&lt;img title="image" height="167" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/WilltheRealXHTML5SpecPleaseStandUp_C4C9/image_thumb_2.png" width="185" border="0"&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/WilltheRealXHTML5SpecPleaseStandUp_C4C9/image_8.png"&gt;&lt;font size="3"&gt;&lt;img title="image" height="77" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/WilltheRealXHTML5SpecPleaseStandUp_C4C9/image_thumb_3.png" width="234" border="0"&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/WilltheRealXHTML5SpecPleaseStandUp_C4C9/image_10.png"&gt;&lt;font size="3"&gt;&lt;img title="image" height="202" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/WilltheRealXHTML5SpecPleaseStandUp_C4C9/image_thumb_4.png" width="254" border="0"&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;It could take an XML feed from a server or &lt;/font&gt;&lt;a href="http://www.massive.com.au/mw/sneakpeek/screenshot2.gif"&gt;&lt;font size="3"&gt;transcode
existing HTML into XML feeds&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt; and then break the content
up into chucks suitable for a mobile device. When we tried to sell this award winning
software, nobody was interested as we were just in time for the collapse of the tech
bubble. I’ve been told that if we had done this a year earlier it would have sold
for tens of millions – but those are the breaks.&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;So just in time for the credit crunch I’ve recently launched my little
image transcoding service. &lt;/font&gt;&lt;a href="http://qr.tl"&gt;&lt;font size="3"&gt;http://qr.tl&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt; and
have built into it the option to resize an image to the ideal for the mobile device
doing the requesting using a semantic hint. eg. wallpaper, logo, button or as a percentage
of screen height or width.&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;Now I’m turning my eye back to serving complete applications because
I have a need to have a web app running under multiple devices.&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;Now I’ve been keeping my eye on &lt;/font&gt;&lt;a href="http://www.w3.org/TR/xhtml2/"&gt;&lt;font size="3"&gt;XHTML2&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt; and &lt;/font&gt;&lt;a href="http://www.w3.org/TR/html5/"&gt;&lt;font size="3"&gt;HTML5&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt; in
the hope of adopting this as my new starting application format for mobile devices
and widgets.&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;XHTML5 has some handy semantic tags such as section, header and footer
which make it ideal and scarily close to my old semantic format.&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;One of the issues is the sordid history of HTML5 . The short version
goes something like this. (Please correct me If I am wrong).&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;A group (&lt;/font&gt;&lt;a href="http://www.whatwg.org/"&gt;&lt;font size="3"&gt;WHATWG&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt;)
, unhappy with the speed at which the W3C was progressing with the next version of
HTML, started a new standard called HTML5. This was eventually adopted by the W3C
by forming the &lt;/font&gt;&lt;a href="http://www.w3.org/html/wg/"&gt;&lt;font size="3"&gt;W3CHWG&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt; as
the starting point of the next generation of HTML now commonly refereed to as X/HTML5.&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;There are three different locations where you can see the progress
– its rather confusing if you don’t realise that the two versions on the W3C&amp;nbsp;
site are a delayed/filtered version of the same document.&lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/WilltheRealXHTML5SpecPleaseStandUp_C4C9/image_12.png"&gt; 
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;
&lt;/a&gt;&gt;&lt;font size="3"&gt;&lt;/font&gt;&amp;nbsp;&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;strong&gt;&lt;font size="3"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;Working
Draft&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;
&lt;font size="3"&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;a href="http://www.w3.org/TR/html5/"&gt;&lt;u&gt;&lt;font color="#800080" size="3"&gt;http://www.w3.org/TR/html5/&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;
&lt;font size="3"&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;strong&gt;&lt;font size="3"&gt;Latest Editors draft&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;
&lt;font size="3"&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;a href="http://www.w3.org/html/wg/html5/"&gt;&lt;u&gt;&lt;font color="#800080" size="3"&gt;http://www.w3.org/html/wg/html5/&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;
&lt;font size="3"&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;strong&gt;&lt;font size="3"&gt;Current Draft&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;
&lt;font size="3"&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;a href="http://www.whatwg.org/specs/web-apps/current-work/"&gt;&lt;u&gt;&lt;font color="#800080" size="3"&gt;http://www.whatwg.org/specs/web-apps/current-work/&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/o:p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;As it says on the WHATWG’s website. &lt;/font&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt"&gt;
&lt;font size="3"&gt;&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/WilltheRealXHTML5SpecPleaseStandUp_C4C9/image_12.png"&gt;&lt;img title="image" height="76" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/WilltheRealXHTML5SpecPleaseStandUp_C4C9/image_thumb_5.png" width="697" border="0"&gt;&lt;/a&gt;&lt;/font&gt;&gt;&lt;font size="3"&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="3"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=d65e5485-d310-4195-9f1d-9fa2292dd41f" /&gt;</description>
      <comments>http://blog.metawrap.com/blog/CommentView.aspx?guid=d65e5485-d310-4195-9f1d-9fa2292dd41f</comments>
      <category>MetaWrap Server</category>
      <category>Nostalgia for Misspent Youth</category>
      <category>qr.tl</category>
      <category>Rants</category>
      <category>Web2.0</category>
      <category>XML</category>
    </item>
    <item>
      <trackback:ping>http://blog.metawrap.com/blog/Trackback.aspx?guid=d348097a-32d1-4cf6-b63e-8d7d0bd24d1f</trackback:ping>
      <pingback:server>http://blog.metawrap.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://blog.metawrap.com/blog/PermaLink.aspx?guid=d348097a-32d1-4cf6-b63e-8d7d0bd24d1f</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.metawrap.com/blog/CommentView.aspx?guid=d348097a-32d1-4cf6-b63e-8d7d0bd24d1f</wfw:comment>
      <wfw:commentRss>http://blog.metawrap.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d348097a-32d1-4cf6-b63e-8d7d0bd24d1f</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Looking at the Browser <a href="http://getclicky.com/global-marketshare-statistics">Global
Marketshare Statistics on getclicky.com</a>, there is an obvious 7 day cycle with
5 days high, 2 days low for IE and 5 days low, 2 days high for Firefox – both in perfect
sync.
</p>
        <p>
My interpretation of this is that people use IE at work but on the weekend at home
they use Firefox.
</p>
        <p>
I’m guessing it reflects IE’s dominance in office Intranets and its integration into
Microsoft’s applications (outlook webmail etc.).
</p>
        <p>
          <img title="image" height="340" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/IEAtWorkAndFireFoxAtHome_9BBF/image_11.png" width="416" border="0" />
        </p>
        <p>
          <img title="image" height="348" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/IEAtWorkAndFireFoxAtHome_9BBF/image_12.png" width="429" border="0" />
        </p>
        <p>
 
</p>
        <p>
On a side note – it looks like Chrome is staying steady on just over 1.5% 
</p>
        <p>
 <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/IEAtWorkAndFireFoxAtHome_9BBF/image_15.png"><img title="image" height="366" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/IEAtWorkAndFireFoxAtHome_9BBF/image_thumb_5.png" width="431" border="0" /></a></p>
        <img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=d348097a-32d1-4cf6-b63e-8d7d0bd24d1f" />
      </body>
      <title>IE At Work And FireFox At Home</title>
      <guid isPermaLink="false">http://blog.metawrap.com/blog/PermaLink.aspx?guid=d348097a-32d1-4cf6-b63e-8d7d0bd24d1f</guid>
      <link>http://blog.metawrap.com/blog/IEAtWorkAndFireFoxAtHome.aspx</link>
      <pubDate>Mon, 03 Nov 2008 00:04:33 GMT</pubDate>
      <description>&lt;p&gt;
Looking at the Browser &lt;a href="http://getclicky.com/global-marketshare-statistics"&gt;Global
Marketshare Statistics on getclicky.com&lt;/a&gt;, there is an obvious 7 day cycle with
5 days high, 2 days low for IE and 5 days low, 2 days high for Firefox – both in perfect
sync.
&lt;/p&gt;
&lt;p&gt;
My interpretation of this is that people use IE at work but on the weekend at home
they use Firefox.
&lt;/p&gt;
&lt;p&gt;
I’m guessing it reflects IE’s dominance in office Intranets and its integration into
Microsoft’s applications (outlook webmail etc.).
&lt;/p&gt;
&lt;p&gt;
&lt;img title="image" height="340" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/IEAtWorkAndFireFoxAtHome_9BBF/image_11.png" width="416" border="0"&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;img title="image" height="348" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/IEAtWorkAndFireFoxAtHome_9BBF/image_12.png" width="429" border="0"&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
On a side note – it looks like Chrome is staying steady on just over 1.5% 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/IEAtWorkAndFireFoxAtHome_9BBF/image_15.png"&gt;&lt;img title="image" height="366" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/IEAtWorkAndFireFoxAtHome_9BBF/image_thumb_5.png" width="431" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=d348097a-32d1-4cf6-b63e-8d7d0bd24d1f" /&gt;</description>
      <comments>http://blog.metawrap.com/blog/CommentView.aspx?guid=d348097a-32d1-4cf6-b63e-8d7d0bd24d1f</comments>
    </item>
    <item>
      <trackback:ping>http://blog.metawrap.com/blog/Trackback.aspx?guid=cd545bcd-ead3-45b5-b1d9-a9f1fa47fb15</trackback:ping>
      <pingback:server>http://blog.metawrap.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://blog.metawrap.com/blog/PermaLink.aspx?guid=cd545bcd-ead3-45b5-b1d9-a9f1fa47fb15</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.metawrap.com/blog/CommentView.aspx?guid=cd545bcd-ead3-45b5-b1d9-a9f1fa47fb15</wfw:comment>
      <wfw:commentRss>http://blog.metawrap.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=cd545bcd-ead3-45b5-b1d9-a9f1fa47fb15</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <title>Introducing qr.tl &amp;ndash; Command Line Photoshop</title>
      <guid isPermaLink="false">http://blog.metawrap.com/blog/PermaLink.aspx?guid=cd545bcd-ead3-45b5-b1d9-a9f1fa47fb15</guid>
      <link>http://blog.metawrap.com/blog/IntroducingQrtlNdashCommandLinePhotoshop.aspx</link>
      <pubDate>Fri, 31 Oct 2008 04:32:39 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://qr.tl/"&gt;http://qr.tl&lt;/a&gt; (pronounced ‘qwertle’) is a real time image
manipulation service that lets you crop, compose, scale, tint, slice, dice images
and generate QR codes without having to have any software installed on your webserver
or PC.
&lt;/p&gt;
&lt;p&gt;
The way it works: 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
In your code you generate image tags in your HTML eg. &amp;lt;img src=”http://qr.tl?m=INSTRUCTIONS”&amp;gt;. 
&lt;/p&gt;
&lt;p&gt;
qr.tl generates images based on the instructions in the URL
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
eg
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://qr.tl/?m=(N200x200Yellow)G10x10R1,1-8x8(Q100http://qr.tl/)O(http://img2.freeimagehosting.net/uploads/f9efc01cee.png)J"&gt;http://qr.tl?m=(N200x200Yellow)G10x10R1,1-8x8(Q100http://qr.tl/)O(http://img2.freeimagehosting.net/uploads/f9efc01cee.png)J&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Generates
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_26.png"&gt;&lt;img title=image height=190 alt=image src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_thumb_12.png" width=240 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
There is no website for qr.tl at the moment to describe the service or to help you
generate your own sets of instructions, but the service is up and running and ready
for you to play with.
&lt;/p&gt;
&lt;p&gt;
For now if you want to use qr.tl you need to learn the instruction format. (read on
:) ) 
&lt;/p&gt;
&lt;p&gt;
The master plan for the website is to create a tool that will allow you to visually
create instructions based on qr.tl templates.
&lt;/p&gt;
&lt;p&gt;
For now this blog post will function as the official instructions and forum.
&lt;/p&gt;
&lt;p&gt;
Here are some examples with detailed descriptions to give you a basic idea of what
qr.tl can do.
&lt;/p&gt;
&lt;h3&gt;Some Examples
&lt;/h3&gt;
&lt;h4&gt;Overlay Composition
&lt;/h4&gt;
&lt;p&gt;
&lt;a href="http://qr.tl/?m=(http://www.watchingcw.com/wp-content/uploads/2008/07/kittens.jpg)(http://upload.wikimedia.org/wikipedia/commons/thumb/7/70/Censored_rubber_stamp.svg/550px-Censored_rubber_stamp.svg.png)O"&gt;&lt;u&gt;&lt;font color=#000080&gt;http://qr.tl?m=(&lt;font color=#ff0000&gt;http://www.watchingcw.com/wp-content/uploads/2008/07/kittens.jpg&lt;/font&gt;)(&lt;font color=#008000&gt;http://upload.wikimedia.org/wikipedia/commons/thumb/7/70/Censored_rubber_stamp.svg/550px-Censored_rubber_stamp.svg.png&lt;/font&gt;)&lt;/font&gt;&lt;font color=#ff8000&gt;O&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
This will overlay one image over the top of another which results in the following
image.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_2.png"&gt;&lt;img title=image style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=214 alt=image src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_thumb.png" width=240 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
If you look carefully at the URL will see that it consists of three distinct elements
marked red, green and orange.
&lt;/p&gt;
&lt;p&gt;
It is the execution of these instructions in the specified order that produces the
end result. The aim is to end up with only one image on the stack. If you have more
than one image, the server will generate an error message long the lines of.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_20.png"&gt;&lt;img title=image height=25 alt=image src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_thumb_9.png" width=298 border=0&gt;&lt;/a&gt;&amp;nbsp;
Not very informative – hopefully the next release will have something to help you
debug errors in your instructions.
&lt;/p&gt;
&lt;p&gt;
Now if we run through these instructions one by one.
&lt;/p&gt;
&lt;ol&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;u&gt;&lt;font color=#000080&gt;(&lt;/font&gt;&lt;font color=#ff0000&gt;&lt;a href="http://www.watchingcw.com/wp-content/uploads/2008/07/kittens.jpg"&gt;http://www.watchingcw.com/wp-content/uploads/2008/07/kittens.jpg&lt;/a&gt;&lt;/font&gt;&lt;font color=#000080&gt;)&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt; Push
this image onto the stack – this is the top and only image on the stack. 
&lt;li&gt;
&lt;strong&gt;&lt;u&gt;&lt;font color=#000080&gt;(&lt;/font&gt;&lt;font color=#008000&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/7/70/Censored_rubber_stamp.svg/550px-Censored_rubber_stamp.svg.png"&gt;http://upload.wikimedia.org/wikipedia/commons/thumb/7/70/Censored_rubber_stamp.svg/550px-Censored_rubber_stamp.svg.png&lt;/a&gt;&lt;/font&gt;&lt;font color=#000080&gt;)&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt; Push
this image onto the stack. This becomes the new top of the stack. There are now two
images on the stack. 
&lt;li&gt;
&lt;strong&gt;&lt;u&gt;&lt;font color=#ff8000&gt;O &lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;Executes the Overlay instruction.
This will take two instructions down off the stack – overlay the image from the top
of the stack and push the result back onto the stack.&lt;/li&gt;
&lt;/ol&gt;
&gt;
&lt;p&gt;
There is also an underlay instruction U. In the previous example, if you reverse the
order of the image push instructions and use the U instead of O as the last instruction
you will end up with the same result.
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;&lt;font color=#000080&gt;&lt;a href="http://qr.tl/?m=(http://upload.wikimedia.org/wikipedia/commons/thumb/7/70/Censored_rubber_stamp.svg/550px-Censored_rubber_stamp.svg.png)(http://www.watchingcw.com/wp-content/uploads/2008/07/kittens.jpg)U"&gt;http://qr.tl?m=(http://upload.wikimedia.org/wikipedia/commons/thumb/7/70/Censored_rubber_stamp.svg/550px-Censored_rubber_stamp.svg.png)(http://www.watchingcw.com/wp-content/uploads/2008/07/kittens.jpg)U&lt;/a&gt;&lt;/font&gt;&lt;/u&gt;
&lt;/p&gt;
&lt;h4&gt;&amp;nbsp;
&lt;/h4&gt;
&lt;h4&gt;Generating Cropped Thumbnails
&lt;/h4&gt;
&lt;p&gt;
Here is another example – lets say that I want to display some thumbnails on a web-site,
and all I have are some larger images that are the wrong aspect ratio.
&lt;/p&gt;
&lt;p&gt;
So starting with this larger image
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://silkiestar-siberian-cats.co.uk/images/kitten4.jpg"&gt;&lt;u&gt;&lt;font color=#000080&gt;http://silkiestar-siberian-cats.co.uk/images/kitten4.jpg&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_6.png"&gt;&lt;img title=image height=337 alt=image src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_thumb_2.png" width=408 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Can I fit it into a smaller thumbnail?
&lt;/p&gt;
&lt;p&gt;
Yes.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://qr.tl/?m=(N200x200White)CZ(http://www.watchingcw.com/wp-content/uploads/2008/07/kittens.jpg)O"&gt;&lt;u&gt;&lt;font color=#000080&gt;http://qr.tl?m=&lt;font color=#ff0000&gt;(N200x200White)&lt;/font&gt;&lt;font color=#008000&gt;CZ&lt;/font&gt;&lt;/font&gt;&lt;font color=#8080ff&gt;(http://www.watchingcw.com/wp-content/uploads/2008/07/kittens.jpg)&lt;/font&gt;&lt;font color=#ff8000&gt;O&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_10.png"&gt;&lt;img title=image height=294 alt=image src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_thumb_4.png" width=240 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
In this case we have 
&lt;/p&gt;
&lt;ol&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;font color=#ff0000&gt;&lt;strong&gt;&lt;u&gt;(N200x200White) &lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font color=#000000&gt;created
a new 200x200 image with a white background and push that onto the stack&lt;/font&gt; 
&lt;li&gt;
&lt;font color=#008000&gt;&lt;strong&gt;&lt;u&gt;CZ &lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font color=#000000&gt;set the
Cropping type to Zoom on that image’s Cropping Type register.&lt;/font&gt; 
&lt;li&gt;
&lt;u&gt;&lt;font color=#8080ff&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;a href="http://www.watchingcw.com/wp-content/uploads/2008/07/kittens.jpg"&gt;http://www.watchingcw.com/wp-content/uploads/2008/07/kittens.jpg&lt;/a&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;/u&gt; Push
this image onto the stack. 
&lt;li&gt;
&lt;font color=#ff8000&gt;&lt;strong&gt;&lt;u&gt;O &lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font color=#000000&gt;Executes
the Overlay instruction. This will take two instructions down off the stack – overlay
the image from the top of the stack and push the result back onto the stack.&lt;/font&gt;
&lt;/li&gt;
&lt;/ol&gt;
&gt;
&lt;p&gt;
In this case the cropping type instruction is the key.
&lt;/p&gt;
&lt;p&gt;
You can choose CZ = Crop Zoom, CF = Crop Fit and CN = Crop None.
&lt;/p&gt;
&lt;h4&gt;QR Code Generation
&lt;/h4&gt;
&lt;p&gt;
Here is an example of generating a &lt;a href="http://en.wikipedia.org/wiki/QR_Code"&gt;QR
Code&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://qr.tl/?m=(http://farm2.static.flickr.com/1336/612092698_dc7da3349b.jpg)(Qhttp://m.twitter.com/DrMiaow)J"&gt;&lt;u&gt;&lt;font color=#800080&gt;http://qr.tl?m=&lt;font color=#ff0000&gt;(http://farm2.static.flickr.com/1336/612092698_dc7da3349b.jpg)&lt;/font&gt;&lt;font color=#008040&gt;(Qhttp://m.twitter.com/DrMiaow)&lt;/font&gt;&lt;/font&gt;&lt;font color=#ff8040&gt;J&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_12.png"&gt;&lt;img title=image height=189 alt=image src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_thumb_5.png" width=341 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Here I have taken an image and placed a QR code next to it.
&lt;/p&gt;
&lt;ol&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;u&gt;&lt;font color=#ff0000&gt;(&lt;a href="http://farm2.static.flickr.com/1336/612092698_dc7da3349b.jpg"&gt;http://farm2.static.flickr.com/1336/612092698_dc7da3349b.jpg&lt;/a&gt;)&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt; Push
this this image onto the stack. Yes that’s me. 
&lt;li&gt;
&lt;font color=#008040&gt;&lt;strong&gt;&lt;u&gt;(Qhttp://m.twitter.com/DrMiaow) &lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font color=#000000&gt;created
a QR code image that points to my twitter feed&lt;/font&gt; 
&lt;li&gt;
&lt;strong&gt;&lt;u&gt;&lt;font color=#ff8040&gt;J&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt; and then joined the two images
together. The default join alignment is ‘to the right’&lt;/li&gt;
&lt;/ol&gt;
&gt;
&lt;h4&gt;&amp;nbsp;
&lt;/h4&gt;
&lt;h4&gt;Generating Lolcats
&lt;/h4&gt;
&lt;p&gt;
And of course what system would be complete that could not generate lolcats?
&lt;/p&gt;
&lt;p&gt;
qr.tl implements the now famous&amp;nbsp; :) &lt;a href="http://blog.metawrap.com/blog/CategoryView.aspx?category=LOL-STAR"&gt;LOL-STAR
markup language&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://qr.tl?m=(http://www.reallyfunnypictures.co.uk/animals/pics/25.08.07/tenniscat.jpg)[&lt;Oh%20hai,%20can%20Has..//&gt;WTF!!]" temp_href="http://qr.tl?m=(http://www.reallyfunnypictures.co.uk/animals/pics/25.08.07/tenniscat.jpg)[&lt;Oh%20hai,%20can%20Has..//&gt;WTF!!]"&gt;&lt;u&gt;&lt;font color=#000080&gt;http://qr.tl?m=&lt;font color=#ff0000&gt;(http://www.reallyfunnypictures.co.uk/animals/pics/25.08.07/tenniscat.jpg)&lt;/font&gt;&lt;/font&gt;&lt;font color=#008000&gt;[&amp;lt;Oh%20hai,%20can%20Has..//&amp;gt;WTF!!]&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_18.png"&gt;&lt;img title=image height=348 alt=image src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_thumb_8.png" width=306 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href="http://www.reallyfunnypictures.co.uk/animals/pics/25.08.07/tenniscat.jpg)"&gt;&lt;u&gt;&lt;font color=#000080&gt;(http://www.reallyfunnypictures.co.uk/animals/pics/25.08.07/tenniscat.jpg)&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; Push
this image onto the stack 
&lt;li&gt;
&lt;font color=#000080&gt;&lt;u&gt;[&amp;lt;Oh%20hai,%20can%20Has..//&amp;gt;WTF!!] &lt;/u&gt;&lt;/font&gt;&lt;font color=#000000&gt;Annotate
the image using this text.&lt;/font&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&amp;nbsp;
&lt;/h3&gt;
&lt;h3&gt;Under The Hood In Detail
&lt;/h3&gt;
&lt;p&gt;
Essentially the qr.tl implements a simple image processing virtual machine. The VM
consists of a ‘&lt;a href="http://en.wikipedia.org/wiki/Stack_(data_structure)"&gt;Stack’&lt;/a&gt; of
images. The topmost image on the stack has Registers (variables) that can be set by
other instructions. Images on the stack can be manipulated by instructions.
&lt;/p&gt;
&lt;p&gt;
The instructions are specified in &lt;a href="http://en.wikipedia.org/wiki/Reverse_Polish_notation"&gt;RPN&lt;/a&gt; order.
&lt;/p&gt;
&lt;p&gt;
A set of qr.tl instructions is valid if it leaves one image left on the stack after
all possible instructions have been executed.
&lt;/p&gt;
&lt;p&gt;
There are three classes of instructions
&lt;/p&gt;
&lt;h4&gt;&lt;u&gt;Image Push&lt;/u&gt;
&lt;/h4&gt;
&lt;p&gt;
These are always of the form ‘(‘ something ‘)’ and they push an image onto the Stack.
This new image becomes the top of the stack.
&lt;/p&gt;
&lt;p&gt;
(&lt;strong&gt;URL&lt;/strong&gt;) Loads an image.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
eg.
&lt;/p&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
(&lt;a href="http://farm2.static.flickr.com/1336/612092698_dc7da3349b.jpg"&gt;http://farm2.static.flickr.com/1336/612092698_dc7da3349b.jpg&lt;/a&gt;)
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
(N&lt;strong&gt;Width&lt;/strong&gt;x&lt;strong&gt;Height&lt;em&gt;Color&lt;/em&gt;&lt;/strong&gt;) Creates a new image
of dimensions WidthxHeight (pixels) with a background color of Color . Color is optional.
Default at the moment is Transparent.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
eg.
&lt;/p&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
(N100x100)
&lt;/p&gt;
&lt;p&gt;
(N100x100Transparent)
&lt;/p&gt;
&lt;p&gt;
(N100x100Blue)
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
(Q&lt;strong&gt;&lt;em&gt;Size&lt;/em&gt;String&lt;/strong&gt;) Creates a QR code based on the supplied String.
Size is optional.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
eg.
&lt;/p&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;&lt;font color=#005bba&gt;(Qhttp://m.twitter.com/DrMiaow)&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color=#005bba&gt;(QTesting 1 2 3)&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#005bba&gt;&lt;strong&gt;(Q400http://m.twitter.com/DrMiaow) &lt;/strong&gt;&lt;/font&gt;&lt;font color=#000000&gt;Create
QR code that is 400x400 pixels.&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;h4&gt;&amp;nbsp;
&lt;/h4&gt;
&lt;h4&gt;&lt;u&gt;Image Register Assignment&lt;/u&gt;
&lt;/h4&gt;
&lt;p&gt;
Each image on the stack has a set of registers, By executing these instructions you
are able to set the registers on the topmost image.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h5&gt;ADigit = set alignment
&lt;/h5&gt;
&lt;blockquote&gt; 
&lt;p&gt;
This will set the alignment. Digit is any value from 0 to 9 and corresponds with the
keys on a mobile phone keypad.
&lt;/p&gt;
&lt;p&gt;
This has an impact on 
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
where an image is drawn when it is overlaid or underlain into a region where it does
not take up all the available space. 
&lt;li&gt;
where an image is placed for a join operation.&lt;/li&gt;
&lt;/ol&gt;
&lt;table cellspacing=0 cellpadding=2 width=344 border=0&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign=top width=114&gt;
&lt;strong&gt;A1&lt;/strong&gt; = Top Left&lt;/td&gt;
&lt;td valign=top width=106&gt;
&lt;strong&gt;A2&lt;/strong&gt; = Top Center&lt;/td&gt;
&lt;td valign=top width=122&gt;
&lt;strong&gt;A3&lt;/strong&gt; = Top Right&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=top width=114&gt;
&lt;strong&gt;A4&lt;/strong&gt; = Left&lt;/td&gt;
&lt;td valign=top width=106&gt;
&lt;strong&gt;A5&lt;/strong&gt; = Center&lt;/td&gt;
&lt;td valign=top width=122&gt;
&lt;strong&gt;A6&lt;/strong&gt; = Right&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=top width=114&gt;
&lt;strong&gt;A7&lt;/strong&gt; = Bottom Left&lt;/td&gt;
&lt;td valign=top width=106&gt;
&lt;strong&gt;A8&lt;/strong&gt; = Bottom&lt;/td&gt;
&lt;td valign=top width=122&gt;
&lt;strong&gt;A9&lt;/strong&gt; = Bottom Right&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;h5&gt;CType = Set cropping type.
&lt;/h5&gt;
&lt;p&gt;
Sets the centering algorithm
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
CZ = Zoom - Image will be cropped to fit the available space.
&lt;/p&gt;
&lt;p&gt;
CF = Image will be fitted resized into the available space
&lt;/p&gt;
&lt;p&gt;
CN = No resize
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;h5&gt;TColor = transparency color&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/h5&gt;
&lt;p&gt;
This defines the color that will be treated as transparent
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
eg.
&lt;/p&gt;
&lt;p&gt;
TRed
&lt;/p&gt;
&lt;p&gt;
TTransparent
&lt;/p&gt;
&lt;p&gt;
TOrange
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
GWidthxHeight = Project a grid over the topmost image on the stack that is used in
combination with the Rectangle (R) instruction
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;eg.,&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
G10x10 projects a 10x10 virtual grid over the image. 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
RTop,Left-WidthxHeight = Set the drawing rectangle within the grid.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;eg.,&lt;/strong&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
R2,2-3x3 Sets the rectangle to start at position 2,2 and be 3x3 wide. The units for
this on the image are defined by the Grid (G) instruction. 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;TTransparency = set image transparency. &lt;/strong&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
This defines the value of the transparency 
&lt;/p&gt;
&lt;p&gt;
eg.
&lt;/p&gt;
&lt;p&gt;
T.5 = 50% transparent.
&lt;/p&gt;
&lt;p&gt;
T.75 = 75% 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;h4&gt;&lt;u&gt;Instructions&lt;/u&gt;
&lt;/h4&gt;
&lt;h5&gt;O = Overlay
&lt;/h5&gt;
&lt;p&gt;
Takes the top of the stack and the next image after that on the stack, removes them
from the stack. Overlays one on the other (overlays top of stack on top of&amp;nbsp; next
on stack).
&lt;/p&gt;
&lt;p&gt;
Overlay is influenced by several registers.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
The grid and rectangle register pair defines where the overlay is performed.
&lt;/p&gt;
&lt;p&gt;
The alignment register affects where the overlaid image is positioned within the rectangle. 
&lt;/p&gt;
&lt;p&gt;
The transparency register defines how the images are combined. 
&lt;/p&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
The transparency color register defines which color is treated as transparent.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h5&gt;U = Underlay
&lt;/h5&gt;
&lt;p&gt;
Takes the top of the stack and the next image after that on the stack, removes them
from the stack. Overlays one on the other (underlays top of stack under next on stack).
&lt;/p&gt;
&lt;p&gt;
Overlay obeys several registers.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
The grid and rectangle register pair defines where the underlay is performed.
&lt;/p&gt;
&lt;p&gt;
The alignment register affects how the underlaid image is aligned. 
&lt;/p&gt;
&lt;p&gt;
The transparency register defines how the images are combined.
&lt;/p&gt;
&lt;p&gt;
The transparency color register defines which color is treated as transparent.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;h5&gt;&amp;nbsp;
&lt;/h5&gt;
&lt;h5&gt;J = Join
&lt;/h5&gt;
&lt;p&gt;
Takes the top of the stack and the next image after that on the stack, removes them
from the stack. Joins one image to another.
&lt;/p&gt;
&lt;p&gt;
The alignment register affects how the underlaid image is aligned. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h4&gt;Some More Complicated Formatting
&lt;/h4&gt;
&lt;p&gt;
Now lets pull it all together with this example
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://qr.tl/?m=(http://farm2.static.flickr.com/1336/612092698_dc7da3349b.jpg)[SMS%204223G33K//]A9G20x20R12,12-7x7(Qhttp://m.twitter.com/DrMiaow)OA8(http://assets1.twitter.com/images/twitter_logo_s.png)J"&gt;http://qr.tl?m=(http://farm2.static.flickr.com/1336/612092698_dc7da3349b.jpg)[SMS%204223G33K//]A9G20x20R12,12-7x7(Qhttp://m.twitter.com/DrMiaow)OA8(http://assets1.twitter.com/images/twitter_logo_s.png)J&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;img height=253 src="http://qr.tl/?m=(http://farm2.static.flickr.com/1336/612092698_dc7da3349b.jpg)[SMS%204223G33K//]A9G20x20R12,12-7x7(Qhttp://m.twitter.com/DrMiaow)OA8(http://assets1.twitter.com/images/twitter_logo_s.png)J" width=257&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;font color=#005bba&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;a href="http://farm2.static.flickr.com/1336/612092698_dc7da3349b.jpg"&gt;http://farm2.static.flickr.com/1336/612092698_dc7da3349b.jpg&lt;/a&gt;&lt;strong&gt;) &lt;/strong&gt;&lt;/font&gt;&lt;font color=#000000&gt;Push
this image onto the stack. Yes it’s still me.&lt;/font&gt; 
&lt;li&gt;
&lt;strong&gt;&lt;font color=#005bba&gt;[SMS%204223G33K//] &lt;/font&gt;&lt;/strong&gt;Annotate the image
with the text SMS 4224G33K (I’ll leave it up to you to determine the significance
of the numbers 42 and 23) 
&lt;li&gt;
&lt;strong&gt;&lt;font color=#005bba&gt;A9&lt;/font&gt;&lt;/strong&gt; Set alignment to 9 (bottom right hand
corner) Look at your mobile phone numeric pad. 
&lt;li&gt;
&lt;strong&gt;&lt;font color=#005bba&gt;G20x20&lt;/font&gt;&lt;/strong&gt; Define a virtual 20x20 unit grid
over the top of the image 
&lt;li&gt;
&lt;strong&gt;&lt;font color=#005bba&gt;R12,12-7x7&lt;/font&gt;&lt;/strong&gt; Set our drawing rectangle at
position 12,12 and make it 7x7 units. 
&lt;li&gt;
&lt;strong&gt;&lt;font color=#005bba&gt;(Qhttp://m.twitter.com/DrMiaow)&lt;/font&gt;&lt;/strong&gt; 
&lt;li&gt;
&lt;strong&gt;&lt;font color=#005bba&gt;O&lt;/font&gt;&lt;/strong&gt; Overlay the top of the stack onto the
one below it. Removes both from the stack and pushes this new image. 
&lt;li&gt;
&lt;font color=#005bba&gt;&lt;strong&gt;A8 &lt;/strong&gt;&lt;/font&gt;&lt;font color=#000000&gt;Set alignment to
8 (bottom) Look at your mobile phone numeric pad.&lt;/font&gt; 
&lt;li&gt;
&lt;strong&gt;&lt;font color=#005bba&gt;(&lt;a href="http://assets1.twitter.com/images/twitter_logo_s.png"&gt;http://assets1.twitter.com/images/twitter_logo_s.png&lt;/a&gt;)&lt;/font&gt;&lt;/strong&gt; Push
this image onto the stack 
&lt;li&gt;
&lt;strong&gt;&lt;font color=#005bba&gt;J&lt;/font&gt;&lt;/strong&gt; Join the top two images to each other.,
Because we are using &lt;font color=#005bba&gt;&lt;strong&gt;A8 &lt;/strong&gt;&lt;/font&gt;&lt;font color=#000000&gt;(bottom)
the twitter logo (top of the stack) will be placed below the next image on the stack&lt;/font&gt;
&lt;/li&gt;
&lt;/ol&gt;
&gt;
&lt;h4&gt;Notes
&lt;/h4&gt;
&lt;p&gt;
Its alpha – so don’t be alarmed if it spits the dummy at you at some point or gives
you a cryptic error. 
&lt;/p&gt;
&lt;p&gt;
The most common error you will get will be…
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_20.png"&gt;&lt;img title=image height=25 alt=image src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/Introducingqr.tlCommandLinePhotoshop_F5B7/image_thumb_9.png" width=298 border=0&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
…&amp;nbsp; which just means that you have either left more than one image on the stack
or you have executed an instruction the requires more images on the stack than you
have.
&lt;/p&gt;
&lt;p&gt;
At the moment the service is open for anyone to use with some restrictions on size
and dimensions of the images imported and generated. If you embed any &amp;lt;img&amp;gt;
tags in your HTML that link to qr.tl generation instructions – at some point in the
future they will cease to work without some kind of account with qr.tl. Yes I have
plans to monetise this.
&lt;/p&gt;
&lt;p&gt;
Yes you can return .png or other formats, but I’m not going to say how yet.
&lt;/p&gt;
&lt;p&gt;
Some browsers may require that your instructions are strictly URL encoded &lt;a href="http://www.w3schools.com/TAGS/ref_urlencode.asp"&gt;http://www.w3schools.com/TAGS/ref_urlencode.asp&lt;/a&gt;.
I’ve not seen a modern browser that still has this problem – but best practice is
always to ‘urlencode’ them. Url Encoding is a standard function every web development
language I have seen. 
&lt;/p&gt;
&lt;p&gt;
I can be contacted at &lt;a href="mailto:drmiaow@gmail.com"&gt;drmiaow@gmail.com&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=cd545bcd-ead3-45b5-b1d9-a9f1fa47fb15" /&gt;</description>
      <comments>http://blog.metawrap.com/blog/CommentView.aspx?guid=cd545bcd-ead3-45b5-b1d9-a9f1fa47fb15</comments>
      <category>LOL-STAR</category>
      <category>qr.tl</category>
      <category>ThumbWhere.com</category>
      <category>Web2.0</category>
    </item>
    <item>
      <trackback:ping>http://blog.metawrap.com/blog/Trackback.aspx?guid=ecd1b9dd-8550-4e63-8ed8-6a9652fd1ad4</trackback:ping>
      <pingback:server>http://blog.metawrap.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://blog.metawrap.com/blog/PermaLink.aspx?guid=ecd1b9dd-8550-4e63-8ed8-6a9652fd1ad4</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.metawrap.com/blog/CommentView.aspx?guid=ecd1b9dd-8550-4e63-8ed8-6a9652fd1ad4</wfw:comment>
      <wfw:commentRss>http://blog.metawrap.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ecd1b9dd-8550-4e63-8ed8-6a9652fd1ad4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px 'Trebuchet MS'; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: justify; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">
          <p>
In my last post I described the basic <a href="http://blog.metawrap.com/blog/JavaScriptFiniteStateMachineTheoremProver.aspx">State
Machine/Theorem Prover developed in JavaScript</a> – here is a recap, update and continuation
of that post based on the latest development.
</p>
          <p>
And BTW - This is my presentation for <a href="http://webjam.com.au/webjam8">WebJam
08</a> Sydney Australia so if this post seems a little scattered its because its kind
of half blog, half crib sheet for a 3 minute presentation.
</p>
          <h3>JavaScript Finite State-Machine Engine
</h3>
          <p>
What is a Finite State Machine?
</p>
          <p align="center">
            <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/244px-Finite_state_machine_example_with_comments.svg_2.png">
              <em>
                <img title="244px-Finite_state_machine_example_with_comments.svg" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="402" alt="244px-Finite_state_machine_example_with_comments.svg" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/244px-Finite_state_machine_example_with_comments.svg_thumb.png" width="283" border="0" />
              </em>
            </a>
            <em> </em>
          </p>
          <p align="center">
            <span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">
              <em>
                <span class="Apple-converted-space"> </span>
                <b>finite
state machine (FSM)</b>
                <span class="Apple-converted-space"> </span>or<span class="Apple-converted-space"> </span><b>finite
state automaton</b><span class="Apple-converted-space"> </span>(plural:<span class="Apple-converted-space"> </span>automata)
or simply a<span class="Apple-converted-space"> </span><b>state machine</b>,
is a model of behavior composed of a finite number of<span class="Apple-converted-space"> </span></em>
              <a title="State (computer science)" style="background-image: none; color: rgb(0,43,184); text-decoration: none; -webkit-background-clip: initial; -webkit-background-origin: initial" href="http://blog.metawrap.com/wiki/State_(computer_science)">
                <em>states</em>
              </a>
              <em>,
transitions between those states, and actions. A finite state machine is an abstract
model of a machine with a primitive internal memory. Source: <a href="http://en.wikipedia.org/wiki/Finite_state_machine">Wikipedia</a></em>
            </span>
          </p>
          <p align="center">
            <span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">
              <em>
              </em>
            </span> 
</p>
          <p>
The state-machine is a formalised description of the possible states of a system.
States are either 'active' or 'inactive'.  My state-machine is multi-dimensional
(states have sub-states) and multi-state (more than one state can active). 
</p>
          <p>
The state-machine description consists of an XML file that describes a list of states
and a legal ways for transitioning between those states.
</p>
          <p>
            <img title="The state-machine description consists of a list of states. " style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="128" alt="The state-machine description consists of a list of states. " src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_52.png" width="240" border="0" /> 
</p>
          <p>
Each state has a collection of sub-states which can only be active if their parent
is active.
</p>
          <p>
            <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="340" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_51.png" width="288" border="0" />
          </p>
          <p>
Each state has...
</p>
          <p>
A list of passive rules for validating states which allow for a degree of asserting
contracts between states.
</p>
          <blockquote>
            <p>
A state can<span class="Apple-converted-space"> </span><strong>'exclude'</strong><span class="Apple-converted-space"> </span>another
state. Which is a way of saying that if this state is active then the other state
should be inactive. If not, a fault will be indicated by an exception.
</p>
          </blockquote>
          <blockquote>
            <p>
A state can<span class="Apple-converted-space"> </span><strong>'include'</strong><span class="Apple-converted-space"> </span>another
state. Which is a way of saying that if this state is active then the other state
should also be active. If not, a fault will be indicated by an exception.
</p>
          </blockquote>
          <p>
A list of passive rules that describe how a state is affected by the activation of
other states or the return from JavaScript calls.
</p>
          <blockquote>
            <p>
A state can<span class="Apple-converted-space"> require that a state is <strong>active</strong> or <strong>inactive</strong>.</span></p>
            <p>
              <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="56" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_3.png" width="254" border="0" />
            </p>
            <p>
              <span class="Apple-converted-space"> And require</span>
              <span class="Apple-converted-space"> that
a </span>JavaScript function returns true. Any sub-state automatically requires its
parent state. If you find a state requires only one or more states to be active then
it should probably be a child of one of those states.
</p>
            <p>
              <img title="state can only be active if isInviteSent() returns true" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="75" alt="state can only be active if isInviteSent() returns true" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_50.png" width="240" border="0" />
            </p>
          </blockquote>
          <p>
A list of active rules that describe how a states can control that activation of other
states.
</p>
          <blockquote>
            <p>
A state can<span class="Apple-converted-space"> </span><strong>'negate'</strong><span class="Apple-converted-space"> </span>a
specified state in which case when the state becomes active it will try and make the
specified state inactive.
</p>
          </blockquote>
          <blockquote>
            <p>
A state can<span class="Apple-converted-space"> </span><strong>'affirm'</strong><span class="Apple-converted-space"> </span>a
specified state in which case when the state becomes active it will try and make the
specified state active.
</p>
            <p>
              <img title="When x has won, the game is over." style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="81" alt="When x has won, the game is over." src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_47.png" width="240" border="0" />
            </p>
          </blockquote>
          <p>
A list of triggers that are fired when the pattern of active states changes. The trigger
is the call to a JavaScript function.
</p>
          <blockquote>
            <p>
A trigger can fire when a states<span class="Apple-converted-space"> </span><strong>'enter'</strong><span class="Apple-converted-space"> </span>(become
active).
</p>
            <p>
A trigger can fire when a states<span class="Apple-converted-space"> </span><strong>'exit'</strong><span class="Apple-converted-space"> </span>(become
inactive).
</p>
            <p>
A trigger can fire when two specified states transitions<span class="Apple-converted-space"> </span><strong>'from'</strong><span class="Apple-converted-space"> </span>or<span class="Apple-converted-space"> </span><strong>'to'</strong><span class="Apple-converted-space"> </span>active/inactive
between determining states.
</p>
            <p>
              <img title="When we transition to 'off' from 'on' then call some javascript." style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="122" alt="When we transition to 'off' from 'on' then call some javascript." src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_46.png" width="284" border="0" />
            </p>
            <p>
A state can have a<span class="Apple-converted-space"> </span><strong>lock</strong><span class="Apple-converted-space"> </span>which
forces it into its current state until the state machine is reset.
</p>
            <p>
              <img title="When an O is placed at position 1,2 - we ensure that X can't be placed there and that this state can't change by locking it." style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="89" alt="When an O is placed at position 1,2 - we ensure that X can't be placed there and that this state can't change by locking it." src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_45.png" width="240" border="0" />
            </p>
          </blockquote>
          <p>
The state machine has the following public accessible JavaScript functions
</p>
          <p>
            <strong>MetaWrap.State.testState(stateName)</strong>
            <span class="Apple-converted-space"> </span>-
Returns true if the named state is active
</p>
          <p>
            <strong>MetaWrap.State.negateState(stateName)</strong>
            <span class="Apple-converted-space"> </span>-
Tries to set the named state to inactive then determines the new state and fires transitions.
Returns true if state is 'inactive'
</p>
          <p>
            <strong>MetaWrap.State.affirmState(stateName)</strong>
            <span class="Apple-converted-space"> </span>-
Tries to set the named state to active then determines the new state and fires transitions.
Returns true if state is 'active'
</p>
          <p>
            <strong>MetaWrap.State.flipState(stateName)</strong>
            <span class="Apple-converted-space"> </span>-
Flips the named the named state from active to inactive or visa versa. Returns true
if state is was flipped.
</p>
          <p>
            <strong>MetaWrap.State.determineState()</strong>  - Calculates the current state.
Called after changes to the model are made that may require the state machine to re-evaluate.'
</p>
          <p>
 
</p>
          <h4>JavaScript State Machine Examples
</h4>
          <h5>Toaster Example
</h5>
          <p>
NOTE – This won’t work in Safari or Opera.. yet. Neither of these browsers support
client side XSLT. I’m working on a simple solution for this.
</p>
          <p>
            <a href="http://test.metawrap.com/javascript/tests/state/test_10_state.html">http://test.metawrap.com/javascript/tests/state/test_10_state.html</a>
          </p>
          <p>
My first serious example was to model a simple toaster in a way that used most of
the functionality of the state machine.
</p>
          <p>
I wanted to model two classes of behavior.
</p>
          <p>
The first are based on the explicit physical properties of the toaster (power on/off,
bread in/out, lever up/down). I added the typical toaster behavior that you can’t
push the lever down if the toaster is not on.
</p>
          <p>
The second are based on the higher level states build up on the physical states, for
instance if the power is on, the bread is in and the lever down, then the toast is
cooking. I have also added the state where if you put the lever down after the toast
has cooked, it will burn the toast.
</p>
          <p>
            <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_5.png">
              <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="725" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_1.png" width="514" border="0" />
            </a>
          </p>
          <p>
 
</p>
          <p>
            <a style="font-weight: bold; color: rgb(0,65,131); text-decoration: none" href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_4.png">
              <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="224" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_thumb_1.png" width="320" border="0" />
            </a>
          </p>
          <p>
            <a style="font-weight: bold; color: rgb(0,65,131); text-decoration: none" href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_6.png">
              <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="239" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_thumb_2.png" width="319" border="0" />
            </a>
          </p>
          <h5>Tic Tac Toe Example
</h5>
          <p>
I think it was Lela who suggested that I try and model Tic Tac Toe. So I sat down
and defined the finite state machine.
</p>
          <p>
NOTE – This won’t work in Safari or Opera.. yet. Neither of these browsers support
client side XSLT. Two Simple solutions soon.
</p>
          <p>
            <a href="http://test.metawrap.com/javascript/tests/state/test_13_state.html">http://test.metawrap.com/javascript/tests/state/test_13_state.html</a>
          </p>
          <p>
            <a style="font-weight: bold; color: rgb(0,65,131); text-decoration: none" href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_23.png">
              <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="235" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_thumb_9.png" width="344" border="0" />
            </a>
          </p>
          <p>
One pleasant surprise is that formally describing the states as a whole makes you
think about them as a….. whole :) . And the formal description can make some things
obvious. For example. In the way I modeled Tic Tac Toe, it could be X’s turn or O’s
turn.
</p>
          <p>
            <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="86" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_43.png" width="240" border="0" />
          </p>
          <p>
And I set it up for one to deny the other (note that x_turn defaults to true, so X
goes first).  This means in the JavaScript my code is nice and simple.
</p>
          <p>
            <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="444" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_42.png" width="484" border="0" />
          </p>
          <p>
Once the game is over, who’s turn is it? There is a fault in my current model that
became obvious after examination. I thought I was being clever by inversely relating
x_turn and o_turn because it gave me a way of tracking the turn inside of the state
machine which would then flip the current state.
</p>
          <p>
However at the end of the game when I want to make it nobody's turn, if I negate x_turn,
o_turn becomes true and then when I negate o_turn, x_turn becomes true. I solved the
issue by locking the turns.
</p>
          <p>
I’m probably going to modify lock so that you can specify a value to lock it on and
get it to suspend all further affirmations and negations down the chain, but I need
to work out what the implications for that could be.
</p>
          <p>
 <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_7.png"><img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="706" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_2.png" width="289" border="0" /></a></p>
          <p>
            <a style="font-weight: bold; color: rgb(0,65,131); text-decoration: none" href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_21.png">
              <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="232" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_thumb_8.png" width="342" border="0" />
            </a> 
</p>
          <p>
 
</p>
          <h4>So you say that’s really…. neat and BTW how is the Asperger’s treating you?… …but
how can we use this in web development?
</h4>
          <p>
My thesis is, in a nutshell that as developers we often end up dealing with complex
logical situations in a user interface that are best explained by this sketch from<span class="Apple-converted-space"> </span><a href="http://en.wikipedia.org/wiki/Monty_Python's_The_Meaning_of_Life">Monty
Python's The Meaning Of Life.</a></p>
          <blockquote>
            <p>
              <em>
                <strong>MR HUMPHREY:</strong>
                <span class="Apple-converted-space"> </span>I
begin the lesson, will those of you who are playing in the match this afternoon move
your clothes down onto the lower peg immediately after lunch, before you write your
letter home, if you're not getting your hair cut, unless you've got a younger brother
who is going out this weekend as the guest of another boy, in which case, collect
his note before lunch, put it in your letter after you've had your hair cut, and make
sure he moves your clothes down onto the lower peg for you. Now,--<br /><strong>WYMER:<span class="Apple-converted-space"> </span></strong>Sir?<br /><strong>MR HUMPHREY:</strong><span class="Apple-converted-space"> </span>Yes,
Wymer?<br /><strong>WYMER:</strong><span class="Apple-converted-space"> </span>My younger
brother's going out with Dibble this weekend, sir, but I'm not having my hair cut
today, sir. So, do I move my clothes down, or--<br /><strong>MR HUMPHREY:</strong><span class="Apple-converted-space"> </span>I do
wish you'd listen, Wymer. It's perfectly simple. If you're not getting your hair cut,
you don't have to move your brother's clothes down to the lower peg. You simply collect
his note before lunch, after you've done your scripture prep, when you've written
your letter home, before rest, move your own clothes onto the lower peg, greet the
visitors, and report to Mr. Viney that you've had your chit signed.</em>
            </p>
            <em>
            </em>
          </blockquote>
          <blockquote>
            <p>
              <br />
            </p>
          </blockquote>
          <p align="center">
            <object width="425" height="344">
              <param name="movie" value="http://www.youtube.com/v/mTMlZSKEu-Y&amp;hl=en&amp;fs=1" />
              <param name="allowFullScreen" value="true" />
              <embed src="http://www.youtube.com/v/mTMlZSKEu-Y&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344">
              </embed>
            </object>
          </p>
          <p align="center">
Monty Python Sex Education Sketch From “The Meaning Of Life” <strong>0:15 to (0:40
short) - (1:12 full)</strong></p>
          <p>
Now, like me your probably written an application with a user interface that ends
up after a few rounds of maintenance and changes with complex logic all over the place
and a single change results in unpredictably strange consequences. As you make changes
to this the code complexity grows. As developers, the best we have been able to come
up with is<span class="Apple-converted-space"> </span><a href="http://en.wikipedia.org/wiki/Model-view-controller">MVC</a>,
which puts all that logic in the controller, <strong>however this is distributed throughout
the source code files of the controller</strong> and there is no guarantee that you
won't end up dabbling in the<span class="Apple-converted-space"> </span><a href="http://en.wikipedia.org/wiki/Kafkaesque">Kafkaesque</a>.
</p>
          <p>
 
</p>
          <p align="center">
 <img src="http://ash-mvc.org/media/Image/ash-mvc-architecture.gif" /><img src="http://www.slash7.com/images/mvc.png" /></p>
          <p align="center">
Two random images from the web describing Model View Controller
</p>
          <p>
 
</p>
          <p>
Ideally I want some way of
</p>
          <ol>
            <li>
Describing a set of integrated rules in one location in a<span class="Apple-converted-space"> <a href="http://en.wikipedia.org/wiki/Domain_Specific_Language">domain
specific language</a></span>. 
</li>
            <li>
Decoupling this description as much as possible from the the Views. 
</li>
            <li>
Allows those rules to be provable and enforced via contracts. 
</li>
            <li>
Allow the system to be intelligent enough that it exhibits emergent behavior via its
logical roots, this emergent behavior can then be leaned upon and provide complex
yet intuitive behaviors to users for free.</li>
          </ol>
          <p>
My aim was to break the controller up into a state machine based rules system and
a layer that could mediate between the state and view.  The states could be mathematically
provable with contracts ensuring that no illegal state combination could be entered. 
Combining this with a direct mapping layer between states and views, could result
in a lot of code being abstracted away into the state machine and result in a more
compact code-base.
</p>
          <p>
 
</p>
          <p align="center">
 <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/Drawing3_2.png"><img title="Drawing3" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="450" alt="Drawing3" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/Drawing3_thumb.png" width="448" border="0" /></a></p>
          <p align="center">
            <font size="1">A state machine interrogates a model via user defined JavaScript functions.The
state view map defines what views and aspects of the view should be visible and triggers
their display.</font> 
</p>
          <p>
 
</p>
          <h3>Aspect Orientated Views In JavaScript
</h3>
          <p>
Lets start with a simple HTML based template system which exposes something I can
control with the state machine.
</p>
          <p>
The basic thing we need to control is a View – so I recycled a JavaScript template
engine system I built in late 2005.
</p>
          <p>
I desired a system that enabled me to edit and compose the CSS and HTML without special
tool chain or publishing or ingestion process slowing me down. Ideally wanted to allow
people to use WYSIWYG editors or preview a template browser. Quick feedback for developing
CSS.
</p>
          <p>
I use a &lt;span&gt; inside of a &lt;div&gt;. Working on making this more compact.
Can have multiple spans inside of a div to provide alternative view. At the moment
the templating system prototype works on server side as well so I can strip out elements
and send fragments back up from the server.
</p>
          <p>
I built this about a year before AJAX.NET came out – but was thrilled that it did
the same kind of fragment update. Obviously on the right track. 
</p>
          <p>
May end up with span only notation. At the moment this gives me more flexibility at
the cost of forcing the developer to add &lt;div&gt;s at logical locations – which
may or may not be a bad thing. 
</p>
          <p>
            <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_9.png">
              <img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="531" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_3.png" width="1050" border="0" />
            </a>
          </p>
          <p>
            <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_11.png">
              <img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="242" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_4.png" width="488" border="0" />
            </a>
          </p>
          <p>
So I can see everything in the base view in activated state. If I want to edit in
a particular state I play with CSS  to show hide what I want.
</p>
          <p>
I want this aspect based and I want the aspects to cross multiple parts of a page
and across views so I added aspects.
</p>
          <p>
Eg  the Logged in aspect.
</p>
          <p>
            <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_17.png">
              <img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="65" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_7.png" width="861" border="0" />
            </a>
          </p>
        </span>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_15.png">
            <img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="62" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_6.png" width="379" border="0" />
          </a>
        </p>
        <p>
So if I turn on the aspect ‘loggedin’ these will show unless they are inside an aspect
that is off. Aspects are hierarchical. Visibility obeys the laws of physics.
</p>
        <p>
So consider this statemachine and in particular the part for managing the classical
Web 2.0 Invite system.
</p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_21.png">
            <img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="667" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_9.png" width="439" border="0" />
          </a>
        </p>
        <p>
So now we need to map between the states and the views
</p>
        <h3>The State View Map
</h3>
        <p>
The state view map is a formalised description of mappings from a state to a view
and a set of aspects of that view.
</p>
        <p>
A state view map description consists of a list of states and the pages and aspects
that should be visible.
</p>
        <p>
A state can be mapped to a particular page – so if that state is true then it switches
to that page/view.
</p>
        <p>
A state can be mapped to an aspect. For this example check out the invite mappings.
This is a very simple example – I only have three minutes! :)
</p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_19.png">
            <img title="image" height="705" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_8.png" width="544" border="0" />
          </a>
        </p>
        <p>
Bringing it all together in an application. Template for the view. If you include
the history iframe it will do the classic AJAX history tracking.
</p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_27.png">
            <img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="95" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_12.png" width="467" border="0" />
          </a>
        </p>
        <p>
The function that starts it all.
</p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_23.png">
            <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_10.png" width="929" border="0" />
          </a> 
</p>
        <p>
Every time there is a key hit in the invite email input, we re-determine the current
state.
</p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_29.png">
            <img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="51" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_13.png" width="948" border="0" />
          </a>
        </p>
        <p>
When we re-determine the state the state machine definition knows that for the send
invite button to be ready we need to return true from isInviteReady()
</p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_33.png">
            <img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="93" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_15.png" width="421" border="0" />
          </a> 
</p>
        <p>
And that function simply returns true if there is a regex match on an the content
of the invite email field.
</p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_31.png">
            <img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="272" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_14.png" width="742" border="0" />
          </a>
        </p>
        <p>
And here is a <a href="http://api.staging.thumbwhere.com/metawrap/javascript/tests/state/test_14_state_views.html">Demo</a> of
it in action.
</p>
        <p>
          <strong>The End</strong>
        </p>
        <p>
          <strong>James Mc Parlane </strong>
          <a href="http://blog.metawrap.com/">http://blog.metawrap.com/</a>
        </p>
        <p>
          <u>
            <font color="#800080">
              <a href="http://twitter.com/DrMiaow">http://twitter.com/DrMiaow</a>
            </font>
          </u>
        </p>
        <p>
Next Presentation At WebJam – Adding a dynamic <a href="http://communitytools.massive.com.au/videos/CE_layout.html">Layout</a> / <a href="http://communitytools.massive.com.au/videos/CE_style.html">Skinning</a> engine
to State/View engine.
</p>
        <h3>Oh and BTW…
</h3>
        <h3>Massive Are Hiring HTML/JS/CSS Front End developers 
</h3>
        <h3>Knowing XML/XSLT Is a bonus!
</h3>
        <h3>Mail <a href="mailto:work@massive.com.au">work@massive.com.au</a></h3>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_35.png">
            <img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="318" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_16.png" width="606" border="0" />
          </a>
        </p>
        <img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=ecd1b9dd-8550-4e63-8ed8-6a9652fd1ad4" />
      </body>
      <title>Practical Applications Of Finite State Machines In Web Development</title>
      <guid isPermaLink="false">http://blog.metawrap.com/blog/PermaLink.aspx?guid=ecd1b9dd-8550-4e63-8ed8-6a9652fd1ad4</guid>
      <link>http://blog.metawrap.com/blog/PracticalApplicationsOfFiniteStateMachinesInWebDevelopment.aspx</link>
      <pubDate>Thu, 25 Sep 2008 07:34:41 GMT</pubDate>
      <description>&lt;span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px 'Trebuchet MS'; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: justify; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt; 
&lt;p&gt;
In my last post I described the basic &lt;a href="http://blog.metawrap.com/blog/JavaScriptFiniteStateMachineTheoremProver.aspx"&gt;State
Machine/Theorem Prover developed in JavaScript&lt;/a&gt; – here is a recap, update and continuation
of that post based on the latest development.
&lt;/p&gt;
&lt;p&gt;
And BTW - This is my presentation for &lt;a href="http://webjam.com.au/webjam8"&gt;WebJam
08&lt;/a&gt; Sydney Australia so if this post seems a little scattered its because its kind
of half blog, half crib sheet for a 3 minute presentation.
&lt;/p&gt;
&lt;h3&gt;JavaScript Finite State-Machine Engine
&lt;/h3&gt;
&lt;p&gt;
What is a Finite State Machine?
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/244px-Finite_state_machine_example_with_comments.svg_2.png"&gt;&lt;em&gt;&lt;img title="244px-Finite_state_machine_example_with_comments.svg" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="402" alt="244px-Finite_state_machine_example_with_comments.svg" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/244px-Finite_state_machine_example_with_comments.svg_thumb.png" width="283" border="0"&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;&lt;em&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;finite
state machine (FSM)&lt;/b&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;or&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;finite
state automaton&lt;/b&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;(plural:&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;automata)
or simply a&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;state machine&lt;/b&gt;,
is a model of behavior composed of a finite number of&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/em&gt;&lt;a title="State (computer science)" style="background-image: none; color: rgb(0,43,184); text-decoration: none; -webkit-background-clip: initial; -webkit-background-origin: initial" href="http://blog.metawrap.com/wiki/State_(computer_science)"&gt;&lt;em&gt;states&lt;/em&gt;&lt;/a&gt;&lt;em&gt;,
transitions between those states, and actions. A finite state machine is an abstract
model of a machine with a primitive internal memory. Source: &lt;a href="http://en.wikipedia.org/wiki/Finite_state_machine"&gt;Wikipedia&lt;/a&gt;&lt;/em&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;span class="Apple-style-span" style="word-spacing: 0px; font: 13px/19px -webkit-sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;&lt;em&gt;&lt;/em&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
The state-machine is a formalised description of the possible states of a system.
States are either 'active' or 'inactive'.&amp;nbsp; My state-machine is multi-dimensional
(states have sub-states) and multi-state (more than one state can active). 
&lt;/p&gt;
&lt;p&gt;
The state-machine description consists of an XML file that describes a list of states
and a legal ways for transitioning between those states.
&lt;/p&gt;
&lt;p&gt;
&lt;img title="The state-machine description consists of a list of states. " style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="128" alt="The state-machine description consists of a list of states. " src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_52.png" width="240" border="0"&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Each state has a collection of sub-states which can only be active if their parent
is active.
&lt;/p&gt;
&lt;p&gt;
&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="340" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_51.png" width="288" border="0"&gt;
&lt;/p&gt;
&lt;p&gt;
Each state has...
&lt;/p&gt;
&lt;p&gt;
A list of passive rules for validating states which allow for a degree of asserting
contracts between states.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
A state can&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;'exclude'&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;another
state. Which is a way of saying that if this state is active then the other state
should be inactive. If not, a fault will be indicated by an exception.
&lt;/p&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
A state can&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;'include'&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;another
state. Which is a way of saying that if this state is active then the other state
should also be active. If not, a fault will be indicated by an exception.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
A list of passive rules that describe how a state is affected by the activation of
other states or the return from JavaScript calls.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
A state can&lt;span class="Apple-converted-space"&gt; require that a state is &lt;strong&gt;active&lt;/strong&gt; or &lt;strong&gt;inactive&lt;/strong&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="56" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_3.png" width="254" border="0"&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;span class="Apple-converted-space"&gt; And require&lt;/span&gt;&lt;span class="Apple-converted-space"&gt; that
a &lt;/span&gt;JavaScript function returns true. Any sub-state automatically requires its
parent state. If you find a state requires only one or more states to be active then
it should probably be a child of one of those states.
&lt;/p&gt;
&lt;p&gt;
&lt;img title="state can only be active if isInviteSent() returns true" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="75" alt="state can only be active if isInviteSent() returns true" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_50.png" width="240" border="0"&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
A list of active rules that describe how a states can control that activation of other
states.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
A state can&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;'negate'&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;a
specified state in which case when the state becomes active it will try and make the
specified state inactive.
&lt;/p&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
A state can&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;'affirm'&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;a
specified state in which case when the state becomes active it will try and make the
specified state active.
&lt;/p&gt;
&lt;p&gt;
&lt;img title="When x has won, the game is over." style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="81" alt="When x has won, the game is over." src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_47.png" width="240" border="0"&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
A list of triggers that are fired when the pattern of active states changes. The trigger
is the call to a JavaScript function.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
A trigger can fire when a states&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;'enter'&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;(become
active).
&lt;/p&gt;
&lt;p&gt;
A trigger can fire when a states&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;'exit'&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;(become
inactive).
&lt;/p&gt;
&lt;p&gt;
A trigger can fire when two specified states transitions&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;'from'&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;or&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;'to'&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;active/inactive
between determining states.
&lt;/p&gt;
&lt;p&gt;
&lt;img title="When we transition to 'off' from 'on' then call some javascript." style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="122" alt="When we transition to 'off' from 'on' then call some javascript." src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_46.png" width="284" border="0"&gt;
&lt;/p&gt;
&lt;p&gt;
A state can have a&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;lock&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;which
forces it into its current state until the state machine is reset.
&lt;/p&gt;
&lt;p&gt;
&lt;img title="When an O is placed at position 1,2 - we ensure that X can't be placed there and that this state can't change by locking it." style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="89" alt="When an O is placed at position 1,2 - we ensure that X can't be placed there and that this state can't change by locking it." src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_45.png" width="240" border="0"&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
The state machine has the following public accessible JavaScript functions
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;MetaWrap.State.testState(stateName)&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;-
Returns true if the named state is active
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;MetaWrap.State.negateState(stateName)&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;-
Tries to set the named state to inactive then determines the new state and fires transitions.
Returns true if state is 'inactive'
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;MetaWrap.State.affirmState(stateName)&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;-
Tries to set the named state to active then determines the new state and fires transitions.
Returns true if state is 'active'
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;MetaWrap.State.flipState(stateName)&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;-
Flips the named the named state from active to inactive or visa versa. Returns true
if state is was flipped.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;MetaWrap.State.determineState()&lt;/strong&gt;&amp;nbsp; - Calculates the current state.
Called after changes to the model are made that may require the state machine to re-evaluate.'
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h4&gt;JavaScript State Machine Examples
&lt;/h4&gt;
&lt;h5&gt;Toaster Example
&lt;/h5&gt;
&lt;p&gt;
NOTE – This won’t work in Safari or Opera.. yet. Neither of these browsers support
client side XSLT. I’m working on a simple solution for this.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://test.metawrap.com/javascript/tests/state/test_10_state.html"&gt;http://test.metawrap.com/javascript/tests/state/test_10_state.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
My first serious example was to model a simple toaster in a way that used most of
the functionality of the state machine.
&lt;/p&gt;
&lt;p&gt;
I wanted to model two classes of behavior.
&lt;/p&gt;
&lt;p&gt;
The first are based on the explicit physical properties of the toaster (power on/off,
bread in/out, lever up/down). I added the typical toaster behavior that you can’t
push the lever down if the toaster is not on.
&lt;/p&gt;
&lt;p&gt;
The second are based on the higher level states build up on the physical states, for
instance if the power is on, the bread is in and the lever down, then the toast is
cooking. I have also added the state where if you put the lever down after the toast
has cooked, it will burn the toast.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_5.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="725" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_1.png" width="514" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a style="font-weight: bold; color: rgb(0,65,131); text-decoration: none" href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_4.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="224" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_thumb_1.png" width="320" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a style="font-weight: bold; color: rgb(0,65,131); text-decoration: none" href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_6.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="239" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_thumb_2.png" width="319" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h5&gt;Tic Tac Toe Example
&lt;/h5&gt;
&lt;p&gt;
I think it was Lela who suggested that I try and model Tic Tac Toe. So I sat down
and defined the finite state machine.
&lt;/p&gt;
&lt;p&gt;
NOTE – This won’t work in Safari or Opera.. yet. Neither of these browsers support
client side XSLT. Two Simple solutions soon.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://test.metawrap.com/javascript/tests/state/test_13_state.html"&gt;http://test.metawrap.com/javascript/tests/state/test_13_state.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a style="font-weight: bold; color: rgb(0,65,131); text-decoration: none" href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_23.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="235" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_thumb_9.png" width="344" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
One pleasant surprise is that formally describing the states as a whole makes you
think about them as a….. whole :) . And the formal description can make some things
obvious. For example. In the way I modeled Tic Tac Toe, it could be X’s turn or O’s
turn.
&lt;/p&gt;
&lt;p&gt;
&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="86" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_43.png" width="240" border="0"&gt;
&lt;/p&gt;
&lt;p&gt;
And I set it up for one to deny the other (note that x_turn defaults to true, so X
goes first).&amp;nbsp; This means in the JavaScript my code is nice and simple.
&lt;/p&gt;
&lt;p&gt;
&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="444" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_42.png" width="484" border="0"&gt;
&lt;/p&gt;
&lt;p&gt;
Once the game is over, who’s turn is it? There is a fault in my current model that
became obvious after examination. I thought I was being clever by inversely relating
x_turn and o_turn because it gave me a way of tracking the turn inside of the state
machine which would then flip the current state.
&lt;/p&gt;
&lt;p&gt;
However at the end of the game when I want to make it nobody's turn, if I negate x_turn,
o_turn becomes true and then when I negate o_turn, x_turn becomes true. I solved the
issue by locking the turns.
&lt;/p&gt;
&lt;p&gt;
I’m probably going to modify lock so that you can specify a value to lock it on and
get it to suspend all further affirmations and negations down the chain, but I need
to work out what the implications for that could be.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_7.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="706" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_2.png" width="289" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a style="font-weight: bold; color: rgb(0,65,131); text-decoration: none" href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_21.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="232" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/JavaScriptStateMachineTheoremProver_DA6A/image_thumb_8.png" width="342" border="0"&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h4&gt;So you say that’s really…. neat and BTW how is the Asperger’s treating you?… …but
how can we use this in web development?
&lt;/h4&gt;
&lt;p&gt;
My thesis is, in a nutshell that as developers we often end up dealing with complex
logical situations in a user interface that are best explained by this sketch from&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Monty_Python's_The_Meaning_of_Life"&gt;Monty
Python's The Meaning Of Life.&lt;/a&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;&lt;strong&gt;MR HUMPHREY:&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;I
begin the lesson, will those of you who are playing in the match this afternoon move
your clothes down onto the lower peg immediately after lunch, before you write your
letter home, if you're not getting your hair cut, unless you've got a younger brother
who is going out this weekend as the guest of another boy, in which case, collect
his note before lunch, put it in your letter after you've had your hair cut, and make
sure he moves your clothes down onto the lower peg for you. Now,--&lt;br&gt;
&lt;strong&gt;WYMER:&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;Sir?&lt;br&gt;
&lt;strong&gt;MR HUMPHREY:&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;Yes,
Wymer?&lt;br&gt;
&lt;strong&gt;WYMER:&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;My younger
brother's going out with Dibble this weekend, sir, but I'm not having my hair cut
today, sir. So, do I move my clothes down, or--&lt;br&gt;
&lt;strong&gt;MR HUMPHREY:&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;I do
wish you'd listen, Wymer. It's perfectly simple. If you're not getting your hair cut,
you don't have to move your brother's clothes down to the lower peg. You simply collect
his note before lunch, after you've done your scripture prep, when you've written
your letter home, before rest, move your own clothes onto the lower peg, greet the
visitors, and report to Mr. Viney that you've had your chit signed.&lt;/em&gt;
&lt;/p&gt;
&lt;em&gt;&lt;/em&gt;&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p align="center"&gt;
&lt;object width="425" height="344"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/mTMlZSKEu-Y&amp;amp;hl=en&amp;amp;fs=1"&gt;&gt;
&lt;param name="allowFullScreen" value="true"&gt;&gt;&lt;embed src="http://www.youtube.com/v/mTMlZSKEu-Y&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;/p&gt;
&lt;p align="center"&gt;
Monty Python Sex Education Sketch From “The Meaning Of Life” &lt;strong&gt;0:15 to (0:40
short) - (1:12 full)&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Now, like me your probably written an application with a user interface that ends
up after a few rounds of maintenance and changes with complex logic all over the place
and a single change results in unpredictably strange consequences. As you make changes
to this the code complexity grows. As developers, the best we have been able to come
up with is&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Model-view-controller"&gt;MVC&lt;/a&gt;,
which puts all that logic in the controller, &lt;strong&gt;however this is distributed throughout
the source code files of the controller&lt;/strong&gt; and there is no guarantee that you
won't end up dabbling in the&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Kafkaesque"&gt;Kafkaesque&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p align="center"&gt;
&amp;nbsp;&lt;img src="http://ash-mvc.org/media/Image/ash-mvc-architecture.gif"&gt;&lt;img src="http://www.slash7.com/images/mvc.png"&gt;
&lt;/p&gt;
&lt;p align="center"&gt;
Two random images from the web describing Model View Controller
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Ideally I want some way of
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Describing a set of integrated rules in one location in a&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Domain_Specific_Language"&gt;domain
specific language&lt;/a&gt;&lt;/span&gt;. 
&lt;li&gt;
Decoupling this description as much as possible from the the Views. 
&lt;li&gt;
Allows those rules to be provable and enforced via contracts. 
&lt;li&gt;
Allow the system to be intelligent enough that it exhibits emergent behavior via its
logical roots, this emergent behavior can then be leaned upon and provide complex
yet intuitive behaviors to users for free.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
My aim was to break the controller up into a state machine based rules system and
a layer that could mediate between the state and view.&amp;nbsp; The states could be mathematically
provable with contracts ensuring that no illegal state combination could be entered.&amp;nbsp;
Combining this with a direct mapping layer between states and views, could result
in a lot of code being abstracted away into the state machine and result in a more
compact code-base.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p align="center"&gt;
&amp;nbsp;&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/Drawing3_2.png"&gt;&lt;img title="Drawing3" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="450" alt="Drawing3" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/Drawing3_thumb.png" width="448" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;font size="1"&gt;A state machine interrogates a model via user defined JavaScript functions.The
state view map defines what views and aspects of the view should be visible and triggers
their display.&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;Aspect Orientated Views In JavaScript
&lt;/h3&gt;
&lt;p&gt;
Lets start with a simple HTML based template system which exposes something I can
control with the state machine.
&lt;/p&gt;
&lt;p&gt;
The basic thing we need to control is a View – so I recycled a JavaScript template
engine system I built in late 2005.
&lt;/p&gt;
&lt;p&gt;
I desired a system that enabled me to edit and compose the CSS and HTML without special
tool chain or publishing or ingestion process slowing me down. Ideally wanted to allow
people to use WYSIWYG editors or preview a template browser. Quick feedback for developing
CSS.
&lt;/p&gt;
&lt;p&gt;
I use a &amp;lt;span&amp;gt; inside of a &amp;lt;div&amp;gt;. Working on making this more compact.
Can have multiple spans inside of a div to provide alternative view. At the moment
the templating system prototype works on server side as well so I can strip out elements
and send fragments back up from the server.
&lt;/p&gt;
&lt;p&gt;
I built this about a year before AJAX.NET came out – but was thrilled that it did
the same kind of fragment update. Obviously on the right track. 
&lt;/p&gt;
&lt;p&gt;
May end up with span only notation. At the moment this gives me more flexibility at
the cost of forcing the developer to add &amp;lt;div&amp;gt;s at logical locations – which
may or may not be a bad thing. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_9.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="531" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_3.png" width="1050" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_11.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="242" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_4.png" width="488" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
So I can see everything in the base view in activated state. If I want to edit in
a particular state I play with CSS&amp;nbsp; to show hide what I want.
&lt;/p&gt;
&lt;p&gt;
I want this aspect based and I want the aspects to cross multiple parts of a page
and across views so I added aspects.
&lt;/p&gt;
&lt;p&gt;
Eg&amp;nbsp; the Logged in aspect.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_17.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="65" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_7.png" width="861" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;/span&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_15.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="62" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_6.png" width="379" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
So if I turn on the aspect ‘loggedin’ these will show unless they are inside an aspect
that is off. Aspects are hierarchical. Visibility obeys the laws of physics.
&lt;/p&gt;
&lt;p&gt;
So consider this statemachine and in particular the part for managing the classical
Web 2.0 Invite system.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_21.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="667" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_9.png" width="439" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
So now we need to map between the states and the views
&lt;/p&gt;
&lt;h3&gt;The State View Map
&lt;/h3&gt;
&lt;p&gt;
The state view map is a formalised description of mappings from a state to a view
and a set of aspects of that view.
&lt;/p&gt;
&lt;p&gt;
A state view map description consists of a list of states and the pages and aspects
that should be visible.
&lt;/p&gt;
&lt;p&gt;
A state can be mapped to a particular page – so if that state is true then it switches
to that page/view.
&lt;/p&gt;
&lt;p&gt;
A state can be mapped to an aspect. For this example check out the invite mappings.
This is a very simple example – I only have three minutes! :)
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_19.png"&gt;&lt;img title="image" height="705" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_8.png" width="544" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Bringing it all together in an application. Template for the view. If you include
the history iframe it will do the classic AJAX history tracking.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_27.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="95" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_12.png" width="467" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The function that starts it all.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_23.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_10.png" width="929" border="0"&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Every time there is a key hit in the invite email input, we re-determine the current
state.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_29.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="51" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_13.png" width="948" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
When we re-determine the state the state machine definition knows that for the send
invite button to be ready we need to return true from isInviteReady()
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_33.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="93" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_15.png" width="421" border="0"&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
And that function simply returns true if there is a regex match on an the content
of the invite email field.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_31.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="272" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_14.png" width="742" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
And here is a &lt;a href="http://api.staging.thumbwhere.com/metawrap/javascript/tests/state/test_14_state_views.html"&gt;Demo&lt;/a&gt; of
it in action.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The End&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;James Mc Parlane &lt;/strong&gt;&lt;a href="http://blog.metawrap.com/"&gt;http://blog.metawrap.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;&lt;font color="#800080"&gt;&lt;a href="http://twitter.com/DrMiaow"&gt;http://twitter.com/DrMiaow&lt;/a&gt;&lt;/font&gt;&lt;/u&gt;
&lt;/p&gt;
&lt;p&gt;
Next Presentation At WebJam – Adding a dynamic &lt;a href="http://communitytools.massive.com.au/videos/CE_layout.html"&gt;Layout&lt;/a&gt; / &lt;a href="http://communitytools.massive.com.au/videos/CE_style.html"&gt;Skinning&lt;/a&gt; engine
to State/View engine.
&lt;/p&gt;
&lt;h3&gt;Oh and BTW…
&lt;/h3&gt;
&lt;h3&gt;Massive Are Hiring HTML/JS/CSS Front End developers 
&lt;/h3&gt;
&lt;h3&gt;Knowing XML/XSLT Is a bonus!
&lt;/h3&gt;
&lt;h3&gt;Mail &lt;a href="mailto:work@massive.com.au"&gt;work@massive.com.au&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_35.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="318" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/PracticalApplicationsOfFiniteStateMachin_C2DB/image_thumb_16.png" width="606" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=ecd1b9dd-8550-4e63-8ed8-6a9652fd1ad4" /&gt;</description>
      <comments>http://blog.metawrap.com/blog/CommentView.aspx?guid=ecd1b9dd-8550-4e63-8ed8-6a9652fd1ad4</comments>
      <category>JavaScript</category>
      <category>Massive</category>
      <category>Web2.0</category>
      <category>XML</category>
    </item>
    <item>
      <trackback:ping>http://blog.metawrap.com/blog/Trackback.aspx?guid=72490522-68c4-4277-8e18-65aae59dd3ea</trackback:ping>
      <pingback:server>http://blog.metawrap.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://blog.metawrap.com/blog/PermaLink.aspx?guid=72490522-68c4-4277-8e18-65aae59dd3ea</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.metawrap.com/blog/CommentView.aspx?guid=72490522-68c4-4277-8e18-65aae59dd3ea</wfw:comment>
      <wfw:commentRss>http://blog.metawrap.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=72490522-68c4-4277-8e18-65aae59dd3ea</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://twitter.com/DavidVandenberg">David Vandenberg</a> (One of my co-workers
at <a href="http://www.massive.com.au">Massive</a>) attended <a href="http://www.startup-australia.org/startupcamplaunch">StartupCamp</a> 
this weekend and in 24 hours created <a href="http://ut.ag/">uT.ag</a> (here is the <a href="http://www.youtube.com/watch?v=LcNPI85TZ_c">elevator
pitch video</a>) which allows you to create a compressed url like <a href="http://tinyurl.com/"><u><font color="#0000ff">http://tinyurl.com/</font></u></a> and <a href="http://is.gd/"><span>http://is.gd/</span></a> but
goes one step further and loads the site in a &lt;iframe&gt; with Google ads at the
top.
</p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ut.agLaunchesAtSydneyStartupCamp_1510A/image_4.png">
            <img title="image" style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="244" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ut.agLaunchesAtSydneyStartupCamp_1510A/image_thumb_1.png" width="553" border="0" />
          </a>
        </p>
        <p>
uTag allows you to generate these urls one at a time <strong>AND </strong>you can
insert some JavaScript into your website which rewrites all the external urls to go
via their &lt;iframe&gt; host page. The end result is that all links out from your
site end up showing ads at the top, and uTag send you the money.
</p>
        <p>
And yes, if you have clicked on a link in my blog by now you will see that I have
added it to my site.
</p>
        <p>
          <a href="http://ut.ag">http://ut.ag</a> is one of those clever, simple ideas that
could just work, or it could start a war, maybe both. 
</p>
        <p>
I can’t see how it violates the <a href="https://www.google.com/adsense/support/bin/answer.py?answer=48182&amp;sourceid=aso&amp;subid=ww-ww-et-asui&amp;medium=link&amp;gsessionid=8Seyno8FJK8">Google
Adsense TOS</a> unless they argue that it interferes with Navigation, or they stretch
the interpretation of  <span class="Apple-style-span" style="WORD-SPACING: 0px; FONT: 13px arial; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"><em>“No
Google ad may be placed on pages published specifically for the purpose of showing
ads, whether or not the page content is relevant.”</em></span></p>
        <p>
Its  going to be up to the web community to decide wether or not this form of
advertising is viable. 
</p>
        <p>
The cure is to add a single line of <a href="http://www.quirksmode.org/js/framebust.html">framebusting</a> JavaScript
to your site.
</p>
        <pre>&lt;script type="text/javascript"&gt;
   if(top.location != location) {top.location.href = document.location.href;}
&lt;/script&gt;</pre>
        <p>
But would they counter with the <a href="http://crypto.stanford.edu/framebust/">anti-framebusting
hack for Opera And IE</a>? Are we at the dawn of a JavaScript driven adverting arms
race? Will Google’s new partial JavaScript execution its webcrawler be used to counter
this by affecting the page-rank of the source pages?
</p>
        <p>
          <span class="Apple-style-span" style="WORD-SPACING: 0px; FONT: 13px arial; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">
            <font face="Trebuchet MS">I’m
also curious to know what will happen to blog trackbacks.</font>
          </span>
        </p>
        <p>
I can see how people running ads in their sites (like me) may feel that this dilutes
their own advertising’s attention share on the target page. 
</p>
        <p>
I can also see how it shares some of the advertising revenue around and rewards sites
that direct people toward relevant information.
</p>
        <p>
          <span class="Apple-style-span" style="WORD-SPACING: 0px; FONT: 13px arial; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">
            <font face="Trebuchet MS">Is
this an acceptable way for content owners to extract revenue from traffic out of their
site? </font>
          </span>
        </p>
        <p>
          <span class="Apple-style-span" style="WORD-SPACING: 0px; FONT: 13px arial; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">
            <font face="Trebuchet MS">In
the case of blogs, if the revenue could be split between the source and destination
sites could this be a basis for some kind of treaty? </font>
          </span>
        </p>
        <p>
          <span class="Apple-style-span" style="WORD-SPACING: 0px; FONT: 13px arial; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">
            <font face="Trebuchet MS">If
they checked for ads on the target site and left sites with ads untreated, would that
make it more acceptable?</font>
          </span>
        </p>
        <p>
Check out the Utag blog <a href="http://ut.ag/Blog/"><u><font color="#0000ff">http://ut.ag/Blog/</font></u></a> and
the StartupCamp live stream from <a href="http://www.ut.ag/URL.aspx?id=00jtM">uStream</a>.
At the time of writing this they had all gone to bed, but should be up again in 10
hours or so :)
</p>
        <img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=72490522-68c4-4277-8e18-65aae59dd3ea" />
      </body>
      <title>uT.ag Launches At StartupCamp &amp;ndash; Automatically Add Contextual Advertising To Outbound Links In Your Blog</title>
      <guid isPermaLink="false">http://blog.metawrap.com/blog/PermaLink.aspx?guid=72490522-68c4-4277-8e18-65aae59dd3ea</guid>
      <link>http://blog.metawrap.com/blog/uTagLaunchesAtStartupCampNdashAutomaticallyAddContextualAdvertisingToOutboundLinksInYourBlog.aspx</link>
      <pubDate>Sat, 06 Sep 2008 15:17:03 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://twitter.com/DavidVandenberg"&gt;David Vandenberg&lt;/a&gt; (One of my co-workers
at &lt;a href="http://www.massive.com.au"&gt;Massive&lt;/a&gt;) attended &lt;a href="http://www.startup-australia.org/startupcamplaunch"&gt;StartupCamp&lt;/a&gt;&amp;nbsp;
this weekend and in 24 hours created &lt;a href="http://ut.ag/"&gt;uT.ag&lt;/a&gt; (here is the &lt;a href="http://www.youtube.com/watch?v=LcNPI85TZ_c"&gt;elevator
pitch video&lt;/a&gt;) which allows you to create a compressed url like &lt;a href="http://tinyurl.com/"&gt;&lt;u&gt;&lt;font color=#0000ff&gt;http://tinyurl.com/&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; and &lt;a href="http://is.gd/"&gt;&lt;span&gt;http://is.gd/&lt;/span&gt;&lt;/a&gt; but
goes one step further and loads the site in a &amp;lt;iframe&amp;gt; with Google ads at the
top.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ut.agLaunchesAtSydneyStartupCamp_1510A/image_4.png"&gt;&lt;img title=image style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=244 alt=image src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/ut.agLaunchesAtSydneyStartupCamp_1510A/image_thumb_1.png" width=553 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
uTag allows you to generate these urls one at a time &lt;strong&gt;AND &lt;/strong&gt;you can
insert some JavaScript into your website which rewrites all the external urls to go
via their &amp;lt;iframe&amp;gt; host page. The end result is that all links out from your
site end up showing ads at the top, and uTag send you the money.
&lt;/p&gt;
&lt;p&gt;
And yes, if you have clicked on a link in my blog by now you will see that I have
added it to my site.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://ut.ag"&gt;http://ut.ag&lt;/a&gt; is one of those clever, simple ideas that
could just work, or it could start a war, maybe both. 
&lt;/p&gt;
&lt;p&gt;
I can’t see how it violates the &lt;a href="https://www.google.com/adsense/support/bin/answer.py?answer=48182&amp;amp;sourceid=aso&amp;amp;subid=ww-ww-et-asui&amp;amp;medium=link&amp;amp;gsessionid=8Seyno8FJK8"&gt;Google
Adsense TOS&lt;/a&gt; unless they argue that it interferes with Navigation, or they stretch
the interpretation of&amp;nbsp; &lt;span class=Apple-style-span style="WORD-SPACING: 0px; FONT: 13px arial; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;&lt;em&gt;“No
Google ad may be placed on pages published specifically for the purpose of showing
ads, whether or not the page content is relevant.”&lt;/em&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Its&amp;nbsp; going to be up to the web community to decide wether or not this form of
advertising is viable. 
&lt;/p&gt;
&lt;p&gt;
The cure is to add a single line of &lt;a href="http://www.quirksmode.org/js/framebust.html"&gt;framebusting&lt;/a&gt; JavaScript
to your site.
&lt;/p&gt;
&lt;pre&gt;&amp;lt;script type="text/javascript"&amp;gt;
   if(top.location != location) {top.location.href = document.location.href;}
&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;p&gt;
But would they counter with the &lt;a href="http://crypto.stanford.edu/framebust/"&gt;anti-framebusting
hack for Opera And IE&lt;/a&gt;? Are we at the dawn of a JavaScript driven adverting arms
race? Will Google’s new partial JavaScript execution its webcrawler be used to counter
this by affecting the page-rank of the source pages?
&lt;/p&gt;
&lt;p&gt;
&lt;span class=Apple-style-span style="WORD-SPACING: 0px; FONT: 13px arial; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;&lt;font face="Trebuchet MS"&gt;I’m
also curious to know what will happen to blog trackbacks.&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
I can see how people running ads in their sites (like me) may feel that this dilutes
their own advertising’s attention share on the target page. 
&lt;/p&gt;
&lt;p&gt;
I can also see how it shares some of the advertising revenue around and rewards sites
that direct people toward relevant information.
&lt;/p&gt;
&lt;p&gt;
&lt;span class=Apple-style-span style="WORD-SPACING: 0px; FONT: 13px arial; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;&lt;font face="Trebuchet MS"&gt;Is
this an acceptable way for content owners to extract revenue from traffic out of their
site? &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span class=Apple-style-span style="WORD-SPACING: 0px; FONT: 13px arial; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;&lt;font face="Trebuchet MS"&gt;In
the case of blogs, if the revenue could be split between the source and destination
sites could this be a basis for some kind of treaty? &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span class=Apple-style-span style="WORD-SPACING: 0px; FONT: 13px arial; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"&gt;&lt;font face="Trebuchet MS"&gt;If
they checked for ads on the target site and left sites with ads untreated, would that
make it more acceptable?&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Check out the Utag blog &lt;a href="http://ut.ag/Blog/"&gt;&lt;u&gt;&lt;font color=#0000ff&gt;http://ut.ag/Blog/&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; and
the StartupCamp live stream from &lt;a href="http://www.ut.ag/URL.aspx?id=00jtM"&gt;uStream&lt;/a&gt;.
At the time of writing this they had all gone to bed, but should be up again in 10
hours or so :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=72490522-68c4-4277-8e18-65aae59dd3ea" /&gt;</description>
      <comments>http://blog.metawrap.com/blog/CommentView.aspx?guid=72490522-68c4-4277-8e18-65aae59dd3ea</comments>
      <category>Axonomics</category>
      <category>Web2.0</category>
    </item>
    <item>
      <trackback:ping>http://blog.metawrap.com/blog/Trackback.aspx?guid=92ccf570-e3ef-4939-acd1-1682f3094689</trackback:ping>
      <pingback:server>http://blog.metawrap.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://blog.metawrap.com/blog/PermaLink.aspx?guid=92ccf570-e3ef-4939-acd1-1682f3094689</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.metawrap.com/blog/CommentView.aspx?guid=92ccf570-e3ef-4939-acd1-1682f3094689</wfw:comment>
      <wfw:commentRss>http://blog.metawrap.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=92ccf570-e3ef-4939-acd1-1682f3094689</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Times seem to ahead by an hour. Suspect some kind of JavaScript bug.
</p>
        <p>
GMail far RHS column in IE7
</p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/BugInChromeInGmail_11355/image_4.png">
            <img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="172" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/BugInChromeInGmail_11355/image_thumb_1.png" width="95" border="0" />
          </a>
        </p>
        <p>
GMail far RHS column in Chrome.
</p>
        <p>
          <a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/BugInChromeInGmail_11355/image_6.png">
            <img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="180" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/BugInChromeInGmail_11355/image_thumb_2.png" width="110" border="0" />
          </a>
        </p>
        <img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=92ccf570-e3ef-4939-acd1-1682f3094689" />
      </body>
      <title>Bug In Chrome In Gmail</title>
      <guid isPermaLink="false">http://blog.metawrap.com/blog/PermaLink.aspx?guid=92ccf570-e3ef-4939-acd1-1682f3094689</guid>
      <link>http://blog.metawrap.com/blog/BugInChromeInGmail.aspx</link>
      <pubDate>Fri, 05 Sep 2008 09:34:50 GMT</pubDate>
      <description>&lt;p&gt;
Times seem to ahead by an hour. Suspect some kind of JavaScript bug.
&lt;/p&gt;
&lt;p&gt;
GMail far RHS column in IE7
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/BugInChromeInGmail_11355/image_4.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="172" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/BugInChromeInGmail_11355/image_thumb_1.png" width="95" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
GMail far RHS column in Chrome.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/BugInChromeInGmail_11355/image_6.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="180" alt="image" src="http://blog.metawrap.com/blog/content/binary/2008/WindowsLiveWriter/BugInChromeInGmail_11355/image_thumb_2.png" width="110" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.metawrap.com/blog/aggbug.ashx?id=92ccf570-e3ef-4939-acd1-1682f3094689" /&gt;</description>
      <comments>http://blog.metawrap.com/blog/CommentView.aspx?guid=92ccf570-e3ef-4939-acd1-1682f3094689</comments>
      <category>Browsers</category>
      <category>Chrome</category>
      <category>Whining</category>
    </item>
  </channel>
</rss>