﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Glenn Jones</title>
	<atom:link href="http://glennjones.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://glennjones.net</link>
	<description>exploring semantic mark-up and data portability</description>
	<lastBuildDate>Wed, 11 Jan 2012 11:48:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>Web Intents Design Push</title>
		<link>http://glennjones.net/2012/01/web-intents-design-push/</link>
		<comments>http://glennjones.net/2012/01/web-intents-design-push/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 11:39:07 +0000</pubDate>
		<dc:creator>Glenn Jones</dc:creator>
				<category><![CDATA[Data Portability]]></category>
		<category><![CDATA[webintents]]></category>

		<guid isPermaLink="false">http://glennjones.net/?p=694</guid>
		<description><![CDATA[After giving a talking at UXCamp Brighton about Web Intents, I ended up talking to a few designers about it and how they would love to help with its development and adoption. In fact we all felt that the design community was sometimes left out of the development process, when it has a lot to [...]]]></description>
			<content:encoded><![CDATA[<p>After giving a talking at <a href="http://www.uxcampbrighton.org/">UXCamp Brighton</a> about Web Intents, I ended up talking to a few designers about it and how they would love to help with its development and adoption.  In fact we all felt that the design community was sometimes left out of the development process, when it has a lot to offer.</p>
<p>So, for the past couple of months I have been working with two of Brighton&#8217;s leading UX people <a href="http://dannyhope.co.uk/">Danny Hope</a> and <a href="http://dennisimo.com/">Andy Dennis</a> to organise a UX design event. We are trying a slightly new format that we&#8217;ve coined a “design push”. The idea is to take a current technology or topic and focus a group of UX designers on a day of open collaboration with the aim of positively adding to its traction by the wider community.</p>
<p><strong><a href="http://designpush.org/webintents/">Web Intents Design Push</a>, <span>25 February 2012</span> &#8211; Brighton, UK</strong></p>
<p>The first “design push” will be on Web Intents, an idea about how to standardise buttons such as Tweet, Like, Share, etc. on the web. My last few posts will give you some background. I have also created a brief screencast introduction to Web Intents.</p>
     
<video width="520" height="404" controls="true" tabindex="0">
                <source src="http://glennjones.net/downloads/webintentsb.mp4"></source>
                <source src="http://glennjones.net/downloads/webintentsb.webm"  type='video/webm; codecs="vp8, vorbis"'></source>
                <source src="http://glennjones.net/downloads/webintentsb.ogv" type='video/ogg; codecs="theora, vorbis"'></source>

                <!-- Flash fall back -->
                <object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="527" height="419"> 
		            <param name="movie" value="http://glennjones.net/downloads/player.swf" /> 
		            <param name="allowfullscreen" value="true" /> 
		            <param name="allowscriptaccess" value="always" /> 
		            <param name="flashvars" value="file=http://glennjones.net/downloads/webintentsb.mp4&image=http://glennjones.net/downloads/videostill.png" /> 
		            <embed 
			            type="application/x-shockwave-flash"
			            id="player2"
			            name="player2"
			            src="video/player.swf" 
			            width="527" 
			            height="419"
			            allowscriptaccess="always" 
			            allowfullscreen="true"
			            flashvars="file=http://glennjones.net/downloadswebintentsb.mp4&image=http://glennjones.net/downloadsvideostill.png" 
		            /> 
	            </object> 

            </video>
<p>I had some fun creating the screencast, I built a <a href="http://glennjones.net/presentations/web-ia-pres.htm">presentation using HTML</a> for the first time. It&#8217;s worth a play as I built the demo’s of Web Intents directly into the presentation. Best use Chrome if you want to play with the demo’s. </p>
]]></content:encoded>
			<wfw:commentRss>http://glennjones.net/2012/01/web-intents-design-push/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://glennjones.net/downloads/webintentsb.mp4" length="8035036" type="video/mp4" />
<enclosure url="http://glennjones.net/downloads/webintentsb.webm" length="7469463" type="video/webm" />
<enclosure url="http://glennjones.net/downloads/webintentsb.ogv" length="6207397" type="video/ogg" />
		</item>
		<item>
		<title>Beyond the page &#8211; Fullfrontal 2011</title>
		<link>http://glennjones.net/2011/11/beyond-the-page-fullfrontal-2011/</link>
		<comments>http://glennjones.net/2011/11/beyond-the-page-fullfrontal-2011/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 19:01:16 +0000</pubDate>
		<dc:creator>Glenn Jones</dc:creator>
				<category><![CDATA[Data Portability]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Microformats]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[webintents]]></category>

		<guid isPermaLink="false">http://glennjones.net/?p=675</guid>
		<description><![CDATA[Well what an amazing experience fullfrontal was this year. Had lots of fun doing the talk once I got my computer to display the slides (sorry about that). Big thank you to Remy for giving me the opportunity to speak and for putting on Fullfrontal. View more presentations from Glenn Jones. Drag and drop demo&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Well what an amazing experience <a href="http://2011.full-frontal.org/">fullfrontal</a> was this year.  Had lots of fun doing the talk once I got my computer to display the slides (sorry about that).  Big thank you to <a href="http://remysharp.com/">Remy</a> for giving me the opportunity to speak and for putting on Fullfrontal.</p>
<div style="width:425px" id="__ss_10122856"><object id="__sse10122856" width="425" height="278"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fullfrontal11v2-111111124502-phpapp02&#038;stripped_title=beyond-the-page-10122856&#038;userName=glennjones" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse10122856" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fullfrontal11v2-111111124502-phpapp02&#038;stripped_title=beyond-the-page-10122856&#038;userName=glennjones" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="278"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/glennjones">Glenn Jones</a>.</div>
</div>
<p><strong>Drag and drop demo&#8217;s from the talk</strong></p>


            <video height="312" width="520" controls="true" tabindex="0">
                    <source src="http://glennjones.net/downloads/skillswap2011.mp4"></source>
                    <source src="http://glennjones.net/downloads/skillswap2011.webm"  type='video/webm; codecs="vp8, vorbis"'></source>
                    <source src="http://glennjones.net/downloads/skillswap2011.ogv" type='video/ogg; codecs="theora, vorbis"'></source>

                    <!-- Flash fall back -->
                    <object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="312" height="520"> 
		                <param name="movie" value="http://glennjones.net/downloads/player.swf" /> 
		                <param name="allowfullscreen" value="true" /> 
		                <param name="allowscriptaccess" value="always" /> 
		                <param name="flashvars" value="file=http://glennjones.net/downloads/skillswap.mp4&image=http://glennjones.net/downloads/skillswap2011.png" /> 
		                <embed 
			                type="application/x-shockwave-flash"
			                id="player2"
			                name="player2"
			                src="http://glennjones.net/downloads/player.swf" 
			                width="527" 
			                height="419"
			                allowscriptaccess="always" 
			                allowfullscreen="true"
			                flashvars="file=http://glennjones.net/downloads/skillswap2011.mp4&image=http://glennjones.net/downloads/skillswap2011.png" 
		                /> 
	                </object> 

                </video>

<p><strong>Web Intents</strong><br />
I had lots of positive feedback about <a href="http://webintents.org/">web intents</a>, I am trying to put together a UX/design workshop in early January to help build community involvement in its development. I will be posting and tweeting more information about that in the near future. </p>
<p><strong>The <a href="http://codebits.glennjones.net/webintents/contact-intent.html">Web Intents</a> demo </a> </strong></p>
<p><strong>PeopleStore</strong><br />
Quite a few people asked me about PeopleStore, am I going to make it into a product or open source it? At the moment it is still a just side project and a playground for new ideas, so sorry it’s not public. That said, after such a lot of interest I am rethinking what to do with this project. If you’re interested in code examples from PeopleStore take a look at the codebits section of this site, a lot of features are explored there.</p>
<p>&nbsp;</p>
<h3>My hi-lights from this year’s talks:</h3>
<p><strong>You gotta do what you gotta do</strong><br />
Was lucky enough to sit with <a href="http://www.aresluna.org/">Marcin Wichary</a> during the speakers meal and hear first-hand about his work at Google.  I loved the slide deck built completely in HTML and the fact that he linked Safari and Chrome together over sockets to get accelerometer data he needed for just one small part of his presentation. I think the most interesting thing about Marcin’s talk was all the small insights he gave about the design process needed to come up with ideas for the Google search page. </p>
<p><strong>CoffeeScript Design Decisions</strong><br />
Jeremy Ashkenas talk on <a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a> really made me want to try it out. I have a fundamental dislike of any language/abstraction that is designed to write another language. Jeremy’s overview of the architectural ethos of CoffeeScript made me believe it could be a possible exception to my rule. Some of the features they have added to CoffeeScript  go to the heart of everyday problems I have  with JavaScript. The talk also pointed out how much room there is for improvements to JavaScript itself. </p>
<p><strong>Excessive Enhancement &#8211; Are we taking proper care of the Web?</strong><br />
<a href="http://hawksworx.com/">Phil Hawksworth</a> <a href="http://speakerdeck.com/u/philhawksworth/p/excessive-enhancement">talk</a> focused on the central issue of just because we can do something does not mean we should. One of his other main themes is something I often talk about with designers/developers which is having a respect for the medium we work in. At art college we used the term “go with the grain” in its widest sense this meant to fully understand the properties of a medium and work to bring them out to their full potential. ubelly.com have done a <a href="http://www.ubelly.com/2011/11/careoftheweb/">write up of Phil’s talk</a> which is worth a read. </p>
<p><strong>Brendan Dawes has infectious passion</strong><br />
I have seen <a href="http://www.brendandawes.com/">Brendan</a> speak at a few events over the years and he has an infectious passion for innovation and experimentation that just has to be admired. It’s so interesting to see his love for the design of physical objects move him in new directions. I hope I get to see him talk again as I never seem to get bored of hearing about his adventures in design. ubelly.com also <a href="http://www.ubelly.com/2011/11/brendan-dawes-at-full-frontal/">interviewed</a> Brendon</p>
<p><strong>Scalable JavaScript Application Architecture</strong><br />
<a href="http://www.nczonline.net/">Nicholas Zakas</a> took us all on a <a href="http://www.slideshare.net/nzakas/scalable-javascript-application-architecture">tour of the concepts of module code architecture</a> and how to loosely-couple JavaScript. These ideas are so important to any complex project, yet the nature of JavaScript use on the web today means we often cut many corners in our code design.  Note to self: review this slide deck again before starting large JavaScript projects.</p>
<p><strong>Code editing</strong><br />
<a href="http://marijnhaverbeke.nl/">Marijn Haverbeke</a> and Rik Arends both did talks on the various aspects of online code editing. I cannot even begin to imagine the effort that it takes to develop one of these code editing environments, they look very impressive. Might be time to put down Visual Studio and move over to a hosted application for code editing. Hope they have drag and drop support <img src='http://glennjones.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Links</p>
<ul>
<li><a href="http://mark-kirby.co.uk/2011/full-frontal-conference-2011-review/">Mark Kirby&#8217;s write up</a></li>
<li><a href="http://www.flickr.com/photos/psd/6340428423/in/photostream">Paul Downey doodles and notes</a></li>
<li><a href="http://softwareas.com/glenn-jones-beyond-the-page-full-frontal-live-blog">Michael Mahemoff&#8217;s live blogging</a></li>
<li><a href="http://hawksworx.com/blog/reflecting-on-fullfrontal-2011/">Phil Hawksworth&#8217;s write up</a></li>
<li><a href="http://www.scottlogic.co.uk/2011/11/full-frontal-conference-2011/">Chris Price&#8217;s write up</a></li>
<li><a href="http://christianheilmann.com/2011/11/15/full-frontal-2011-some-notes/">Christian Heilmann&#8217;s write up</a></li>
<li><a href="http://www.headlondon.com/our-thoughts/technology/posts/full-frontal-conference-2011-uks-best-front-end-developers-conference">Mairead Buchan&#8217;s write up</a></li>
<li><a href="http://dumitruglavan.com/impressions-from-full-frontal-javascript-conference-2011/">Dumitru Glavan&#8217;s write up</a></li>
<li><a href="https://workflowy.com/shared/e21d4034-8939-895c-47f7-52ab5e5475d0/">Peter Bowyer&#8217;s notes</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://glennjones.net/2011/11/beyond-the-page-fullfrontal-2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://glennjones.net/downloads/skillswap2011.mp4" length="8179696" type="video/mp4" />
<enclosure url="http://glennjones.net/downloads/skillswap2011.webm" length="19921391" type="video/webm" />
<enclosure url="http://glennjones.net/downloads/skillswap2011.ogv" length="5793987" type="video/ogg" />
		</item>
		<item>
		<title>Microformats and SEO</title>
		<link>http://glennjones.net/2011/10/microformats-and-seo/</link>
		<comments>http://glennjones.net/2011/10/microformats-and-seo/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 15:54:46 +0000</pubDate>
		<dc:creator>Glenn Jones</dc:creator>
				<category><![CDATA[Microformats]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://glennjones.net/?p=667</guid>
		<description><![CDATA[This Friday I gave small talk on microformats and SEO at the web agency Fresh Egg. They focus heavily on SEO as part of their offering and have become interested in marking up semantic data in web pages. This year Googles rich snippets have brought a whole new group of web authors to microformats. Taking [...]]]></description>
			<content:encoded><![CDATA[<p>This Friday I gave small talk on microformats and SEO at the web agency <a href="http://www.freshegg.com/">Fresh Egg</a>. They focus heavily on SEO as part of their offering and have become interested in marking up semantic data in web pages. This year <a href="http://www.google.com/support/webmasters/bin/topic.py?hl=en-GB&#038;topic=21997">Googles rich snippets</a> have brought a whole new group of web authors to microformats. Taking a look at Googles new <a href="http://www.google.com/search?q=Yorkshire+Puddings&#038;tbs=rcp%3A1">recipe search</a> I can see why microformats has become a hot topic in the SEO industry.</p>
<p>Rather than just provide a general overview I decided it would be fun to mark-up a <a href="http://codebits.glennjones.net/semantic/hrecipe.html">Yorkshire Pudding recipe</a>.  You never know, one day it may appear at the top Googles recipe search.</p>
<div style="width:425px" id="__ss_9939696"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/glennjones/microformats-and-seo" title="Microformats and SEO" target="_blank">Microformats and SEO</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9939696" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/glennjones" target="_blank">Glenn Jones</a> </div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://glennjones.net/2011/10/microformats-and-seo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Choosing the Right Words &#8211; Web Intents</title>
		<link>http://glennjones.net/2011/10/choosing-the-right-words-web-intents/</link>
		<comments>http://glennjones.net/2011/10/choosing-the-right-words-web-intents/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 22:15:16 +0000</pubDate>
		<dc:creator>Glenn Jones</dc:creator>
				<category><![CDATA[Data Portability]]></category>
		<category><![CDATA[User Experience Design]]></category>
		<category><![CDATA[webintents]]></category>

		<guid isPermaLink="false">http://glennjones.net/?p=631</guid>
		<description><![CDATA[I ran a small session at UXCampBrighton last weekend about Web Intents. At the end of the session I was hoping for a discussion about the use of verbs in Web Intents, but the questions where a lot more wide ranging. As people grasped the concept they rightfully asked some questions of it. I thought [...]]]></description>
			<content:encoded><![CDATA[<p>I ran a small session at <a href="http://www.uxcampbrighton.org/">UXCampBrighton</a> last weekend <a href="http://glennjones.net/2011/08/web-intentsgluing-web-functionality-together/">about Web Intents</a>. At the end of the session I was hoping for a discussion about the use of verbs in Web Intents, but the questions where a lot more wide ranging. </p>
<p>As people grasped the concept they rightfully asked some questions of it. I thought it would be useful to document an aggregation of these conservations and my answers.</p>
<ul>
<li><a href="#brandedbuttons">Will social media companies let go of branded buttons</a></li>
<li><a href="#gettheconcept">Users will never get the concept</a></li>
<li><a href="#facebookdominate">Why don’t we just let Facebook/Twitter dominate – do users really want choice?</a></li>
<li><a href="#pagevschrome">In page UI vs chrome UI</a></li>
<li><a href="#commoniconography">Common iconography and verbs</a></li>
</ul>
<h2>The slides</h2>
<div style="width:425px" id="__ss_9507348"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/glennjones/uxcampbrighton" title="Choosing the Right Words - Web Intents/Actions" target="_blank">Choosing the Right Words &#8211; Web Intents/Actions</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9507348" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/glennjones" target="_blank">Glenn Jones</a> </div>
</p></div>
<h2><a name="brandedbuttons">Will social media companies let go of branded buttons?</a></h2>
<p><em>We discussed the value to companies of having buttons that both advertise and endorse a brand through the use of logos and trademarked phrases. I was asked the question; would social media companies provide services through Web Intents if it meant letting go of this visual branding?</em></p>
<p><strong>The network effect of sharing social media outweighs any value gained from the promotion of visual identity on buttons.</strong></p>
<p>That’s to say Twitter, Facebook etc. have expanded by linking people as they share social media objects (text, images etc.). Traditional visual branding is not as important as engaging users in the experience of using a service, in this case sharing social media objects. </p>
<p>In a small way we can already see this effect in action as the social media/networking sites allow publishers to re-work their visual identities by removing the terminology and phrases they’ve carefully crafted and promoted. In the BBC example below, the designers did not use the buttons provided by the services, instead they have greyed out the logos and removed the terms ‘tweet’ and ‘recommend/like’.   </p>
<p><a href="http://glennjones.net/wp-content/uploads/2011/10/sharebuttonexamples.jpg"><img src="http://glennjones.net/wp-content/uploads/2011/10/sharebuttonexamples.jpg" style="border: none; margin-top: 10px; margin-bottom: 10px;" alt="" title="Share button examples" width="520" height="216" class="alignnone size-full wp-image-640" /></a></p>
<p>Most large companies have strict visual guidelines for the legal use of their logo’s and trademarks. Take a look at the <a href="https://support.twitter.com/entries/77641">Twitter</a> and <a href="https://developer.linkedin.com/documents/branding-guidelines">LinkedIn</a> guidelines as an example. I would suggest in this context that these companies don’t care about small infringements of their visual identity as long as people are encouraged to share using their networks. </p>
<p>The caveat here is that the speed of visual recognition and trust engendered by some of these buttons/logos may help increase traffic to these services.  Web Intents would need to create the same or greater levels of traffic to these services while using generic iconography and terminology. If it did not, I am sure the social media companies will not be as happy to embrace Web Intents. </p>
<h2><a name="gettheconcept">Users will never get the concept</a></h2>
<p><strong>At one level Web Intents can be seen not as a new idea but the standardisation of a pre-existing design pattern into the UI of the browser</strong></p>
<p>Earlier this year the StumbleUpon “Stumble” button <a href="http://mashable.com/2011/08/10/stumbleupon-25-billion-clicks">passed 25 billion clicks</a>. On AddThis network StumbleUpon has 1.69% marketshare (2 Oct 2011) across all the <a href="http://www.addthis.com/services">services</a> it offers. This gives you some idea of the level of interaction which can be mapped to the type of design pattern Web Intents is trying to capture.  As long as the user experience developed for Web Intents does not add a lot more complexity, it should be widely understood by the current users of services such as StumbleUpon.</p>
<h2><a name="facebookdominate">Why don’t we just let Facebook/Twitter dominate – do users really want choice?</a></h2>
<p><strong>Yes, the AddThis statistics make stark reading with 67% of market share in the hands of Facebook and Twitter. Even in light of this, there is a long tail of hundreds of other services that fit the design pattern of Web Intents. Maybe it is the inability to provide choice that defines the current usage patterns not the other way around. </strong></p>
<p>The current status quo has publishers coalescing around a handful of the biggest services, because they have no means of knowing which services are the ones an individual user would prefer.  If a site could deliver individualised button/links based on a user’s choice, there should be a substantial gain in utility to the user and traffic for the publisher and the service.  This change may not inevitability reduce traffic to large service providers, but instead, increase traffic to smaller ones. </p>
<p>You need also to consider that different communities around the world embrace different services and that sharing a web link is only one type of many services. </p>
<p><strong>The level of choice.</strong><br />
Hick’s Law or Hick–Hyman Law, roughly states that the time it takes to make a decision increases with the number and complexity of choices. As the decision time increases, the user experience suffers.</p>
<h3>Satisfaction curve</h3>
<p><a href="http://glennjones.net/wp-content/uploads/2011/10/graph.jpg"><img src="http://glennjones.net/wp-content/uploads/2011/10/graph.jpg" alt="" title="graph" width="312" height="294" style="border: none;" class="alignnone size-full wp-image-645" /></a></p>
<p>I am interested in finding out how publishers define the optimum number of services to display to the user. What factors are foremost; is it purely about screen space; the market share of services or is it Hick’s Law playing a part in these design decisions? More importantly, what results would I get if I could test user choice vs decision complexity in this context?</p>
<h2><a name="pagevschrome">In page UI vs chrome UI</a></h2>
<p><strong>I believe that keeping the complexity of interactions to an absolute minimum will be a deciding factor in the success of Web Intents</strong> </p>
<p>A browser is split into two heavily defined surfaces. There is the web content/page and the chrome. Building interactions that span these two areas is not easy. Building any type of browser UI that overlay’s the HTML content brings up some security concerns.</p>
<p>Taking into account all the above, I still think keeping all the UI contextual to the original area of interaction in the web content is very important. Popping windows away from the original click event or navigating between full pages will cause more mental load for the user. There are already working models we should look to such as current proprietary buttons for sharing and the OAuth UI flow. These have been heavily researched and tested in the real world and should form a starting point for any UI design. In the end it will be the browser development teams that frame the main UI flow.</p>
<h2><a name="commoniconography">Common iconography and verbs</a></h2>
<p><strong>I think it is obvious to most people that a common iconography and language is needed for Web Intents. The calls to action need to be both understandable and recognisable as their proprietary counterparts i.e. Twitter ‘tweet’ and Facebook ‘like’</strong></p>
<p>It is unlikely that all the elements of language/ iconography will be fully developed in the API specification process being undertaken by the Chrome and Mozilla teams as they will be surfaced in the HTML of the publishers of sites. </p>
<p>I would like to see a two phased approach. Engage the UX community in an open process to quickly define the visual language for calls to action i.e. the buttons. Then create a simple wizard on webintents.org to generate the code for people to use. Guidelines and wizards for site publishers are fundamental to generating up-take. </p>
<h2>In conclusion</h2>
<p>Although I was asked many questions the overall response to Web Intents was positive.  I was even approached by some UX designers about getting together a workshop/design meet-up to look at the whole UX flow. </p>
<p>The answers above are written from a personal view point. If you’re new to the topic, I would recommend reading the <a href="https://groups.google.com/group/web-intents">discussion forum</a> to gain a broader insight.</p>
]]></content:encoded>
			<wfw:commentRss>http://glennjones.net/2011/10/choosing-the-right-words-web-intents/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Web Intents – Gluing web functionality together</title>
		<link>http://glennjones.net/2011/08/web-intentsgluing-web-functionality-together/</link>
		<comments>http://glennjones.net/2011/08/web-intentsgluing-web-functionality-together/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 10:32:41 +0000</pubDate>
		<dc:creator>Glenn Jones</dc:creator>
				<category><![CDATA[Data Portability]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[User Experience Design]]></category>
		<category><![CDATA[webintents]]></category>

		<guid isPermaLink="false">http://glennjones.net/?p=564</guid>
		<description><![CDATA[There is a new concept forming at the moment called Web Intents. The name is a reference to the Android feature which allows applications to register their &#8220;intent&#8221; to handle certain types of actions. The screenshot above shows all the options for sharing an image on my Android phone. The underlying application does not have [...]]]></description>
			<content:encoded><![CDATA[<p>There is a new concept forming at the moment called Web Intents. The name is a reference to the <a href="http://developer.android.com/reference/android/content/Intent.html">Android feature</a> which allows applications to register their &#8220;intent&#8221; to handle certain types of actions. </p>
<p><a href="http://glennjones.net/wp-content/uploads/2011/08/androidintents.jpg"><img src="http://glennjones.net/wp-content/uploads/2011/08/androidintents.jpg" alt="Android Images Intent Screen" title="androidintents" width="240" height="400" class="alignnone size-full wp-image-577" /></a></p>
<p>The screenshot above shows all the options for sharing an image on my Android phone. The underlying application does not have the ability to share images itself, so it asks the OS to list the applications that can.  The user is then presented with the choices above and the two applications exchange the data required for the feature to work.</p>
<p>Intents work in a similar way to how applications on a desktop register their ability to open and modify a particular file type.  An Intent takes things one stage further registering not just a content type, but also a verb to describe an action i.e.</p>
<ul>
<li>Post a Status</li>
<li>Edit an Image</li>
<li>Share a Bookmark</li>
<li>Reply to Post</li>
<li>etc</li>
</ul>
<p>We already have perfect examples of this pattern in use today in the shape of the many social media buttons which are proliferating across the web.  At the moment they are not built using the concept of Intents, but they could be.</p>
<p><script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script><br />
<a href="http://twitter.com/share" class="twitter-share-button">Tweet</a><g:plusone annotation="inline"></g:plusone><br />
etc.<br />
<!-- Place this render call where appropriate --><br />
<script type="text/javascript">
  (function() {
    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    po.src = 'https://apis.google.com/js/plusone.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
  })();
</script><br />
On web sites we are often presented with a collection of buttons for services we do not use and more importantly not presented with the ones we do. Erin Jo Richey called these types of sites “<a href="http://www.flatfrogblog.com/2011/08/07/web-actions/">button sluts</a>”. There are some unsatisfactory user interface fixes for this issue such as “<a href="http://www.addthis.com/">AddThis</a>” which extend the user’s choice by extending a broken pattern. I don’t think these really solve the underlying problem.</p>
<p>Web Intents could provide a whole new generation of interactions on the web which would complement how it already works. They could give more user choice and de-clutter the web of the visual and mental load created by all these buttons. If widely implemented it would allow large publishers and individuals to provide services on an equal footing.</p>
<h2>Two driving forces for the adoption of Web Intents</h2>
<p><strong>Social buttons</strong><br />
We already have multiple use cases for Web Intents in the shape of the many social media buttons.  At the moment these buttons are a jumble of proprietary iframe code, which seems set to reinforce the NASCAR problem.</p>
<p>Currently, Twitter’s Web Intents is the most progressive implementation of social buttons. <a href="https://dev.twitter.com/docs/intents">Twitter’s Web Intents</a> API is not the same as the Web Intents API being developed by the Chrome and Mozilla teams, but it is an interesting architecture in its own right.  I admire how they used a simple HTTP Get request to form a powerful API and then deployed JavaScript to hijack HTML links to create the buttons. </p>
<p><strong>Web app/service discovery</strong><br />
The second driving force comes from the search to create a simple discovery mechanism for web app/services. Michael Hanson of Mozilla Labs wrote a post at the beginning of this year about <a href="http://www.open-mike.org/entry/using-web-applications-for-service-discovery">the growing need for a new way to glue web functionally together</a>.  The theoretical work around web  app/service discovery and social buttons have the same architectural patterns. Mozilla have called their approach “<a href="http://mozillalabs.com/blog/2011/07/web-apps-update-experiments-in-web-activities-app-discovery/">Web Activities</a>” and you can see a demo in a video they posted in July.</p>
<h2>Building it into the browsers</h2>
<p>Paul Kinlan from Google <a href="http://paul.kinlan.me/web-intents-a-fresh-look/">conceived the idea of Web Intents</a>. He has started documenting their development at <a href="http://webintents.org/">http://webintents.org/</a>.  Most importantly the <a href="http://mozillalabs.com/blog/2011/07/web-apps-update-experiments-in-web-activities-app-discovery/">Mozilla Lab</a> and <a href="http://blog.chromium.org/2011/08/connecting-web-apps-with-web-intents.htm">Chrome</a> teams have started to work together on a common API to implement Web Intents into their browsers.  </p>
<h2>User interface and experience ideas</h2>
<p>Having a design background I tend to think visually and built an early mental picture of what the user interface for Web Intents could look like.  I visualised this before Paul Kinlan published the <a href="http://examples.webintents.org/">http://examples.webintents.org/</a> site and Mozilla Labs posted their video.  In doing so I made some assumptions which I thought would be interesting to share; especially as they vary from Paul’s initial demo. It is also worth taking a look at <a href="http://www.flatfrogblog.com/2011/08/07/web-actions/">Erin Jo Richey mock ups</a> which provide a slightly different perspective to the user interface design. </p>
<p><strong>Registration of Web Intents</strong><br />
As a user I would like to be prompted about the registration of a service, if nothing else to make sure I only register with services from sites I trust. The closest model for prompting the user to allow data/service access is the Geo API. It would not take much to reuse the pattern to provide a Web Intents acceptance prompt.</p>
<p><a href="http://glennjones.net/wp-content/uploads/2011/08/prompt.jpg"><img src="http://glennjones.net/wp-content/uploads/2011/08/prompt.jpg" alt="" title="prompt" width="500" height="100" class="alignnone size-full wp-image-590" /></a></p>
<p>The question of registering multiple services at once would need to be considered. I personally think site authors should be encouraged to create URLs where multiple Web Intents could be registered at once. </p>
<p><strong>Managing Web Intents</strong></p>
<p><a href="http://glennjones.net/wp-content/uploads/2011/08/controlpanel.jpg"><img src="http://glennjones.net/wp-content/uploads/2011/08/controlpanel.jpg" alt="" title="controlpanel" width="500" height="318" class="alignnone size-full wp-image-585" /></a></p>
<p>Over time our preference for which services we use on the web will change, so browsers will need to provide an interface for us to manage this. In the wireframe above I used a 2-tier-tree navigation. The first tier represents the action verbs like” share” and the other tier content types such as “link”. Technical names such as “mime-types” should not be used and exchanged for more friendly language.</p>
<p>I would also expect some fine grained controls such as the ability to enable and disable services and to change their order of display. With all of these controls we end up with a user interface not too dissimilar to those used to manage our browser plug-in/extensions. </p>
<p><strong>Using a Web Intent</strong></p>
<p><a href="http://glennjones.net/wp-content/uploads/2011/08/drop.jpg"><img src="http://glennjones.net/wp-content/uploads/2011/08/drop.jpg" alt="" title="drop" width="250" height="132" class="alignnone size-full wp-image-586" /></a></p>
<p>Where a page subscribes to a Web Intent such as sharing a link, I believe the most functional interface would be button with a drop-down menu.  This would allow the user to quickly choose from a set of options. Any service which requires further input from the user, like the assignment of tags, would be done through secondary windows.</p>
<p>At first sight the drop-down looks like we are recreating the NASCAR problem. What has to be remembered is that these options were chosen and curated by the user. It follows that they will be limited in number and always be meaningful options for that individual.</p>
<p><strong>Silent registration &#8211; the most complex UX problem</strong><br />
The interface could either silently register the Intents or prompt the user.  The designers of Andriod’s  OS took the decision to silently register so my wish for more control may not be what the majority of users want. </p>
<h2>The Web Intents architecture</h2>
<p>The user interface for Web Intents really needs to be built into the browser, but for the time being Paul Kinlan has built a temporary JavaScript library which allows us to experience Web Intents. The code examples below are based on using that library. There are three parts to the architecture.</p>
<p><br/><br />
<strong>Registering a web intent (Site A)</strong><br />
Registering a new service is simple. Once you have included the webintents.js from the JavaScript library, you add an Intent tag into the header of a page.<br />
[sourcecode language="html"]<br />
&lt;script src=&quot;/webintents.js&quot;&gt;&lt;/script&gt;<br />
&lt;intent<br />
      action=&quot;http://webintents.org/share&quot;<br />
      type=&quot;text/uri-list&quot;<br />
      href=&quot; http://examples.webintents.org/intents/share/sharelink.html&quot;<br />
      title=&quot;Kinlan&#8217;s Link Share&quot; /&gt;<br />
[/sourcecode]</p>
<p><br/><br />
<strong>Subscribing to a web intent (Site B)</strong><br />
Again you need to include the webintents.js file from the JavaScript library and also build an Intent object. This object describes the type of Intent and also passes the data.<br />
[sourcecode language="javascript"]<br />
&lt;script src=&quot;/webintents.js&quot;&gt;&lt;/script&gt;</p>
<p>var intent = new Intent();<br />
intent.action = &quot;http://webintents.org/share&quot;;<br />
intent.type = &quot;text/uri-list&quot;;<br />
intent.data = [ url ];</p>
<p>window.navigator.startActivity(intent);<br />
[/sourcecode]</p>
<p><br/><br />
<strong>Collecting the data at the end point URL (Site A)</strong><br />
At the service endpoint you need a small piece of JavaScript to collect the data. The magic bit is how Web Intents passes the data between the windows as they are opened.  The sites at both ends of this interaction do not need to know anything about each other. The browser or in this case the JavaScript library negotiates this for the two parties.<br />
[sourcecode language="javascript"]<br />
&lt;script src=&quot;/webintents.js&quot;&gt;&lt;/script&gt;</p>
<p>  &lt;script&gt;<br />
    attachEventListener(window, &quot;load&quot;, function(e) {<br />
      var output = document.getElementById(&quot;output&quot;);<br />
      if(intent.data instanceof Array)<br />
        setText(output, intent.data[0]);<br />
      else<br />
        setText(output, intent.data);</p>
<p>      intent.data.postResult(intent.data);<br />
    }, false);<br />
  &lt;/script&gt;<br />
[/sourcecode]</p>
<p>The API is still in flux as the Chrome and Mozilla teams align their work. The code examples above will change as this happens.  You should visit the <a href="http://webintents.org/">webintents.org</a> site for the most up-to-date reference.  If you wish to keep informed of how the development of the API is going I would suggest registering to the <a href="https://groups.google.com/group/web-intents">Google Group</a>. </p>
<h2>The Future</h2>
<p>I think the future is bright for Web Intents, as it seems to have support from the Chrome and Mozilla teams.  There are a number of technical issues outstanding, but none that should derail the project.</p>
<p><strong>The role of brand equity </strong><br />
I have not heard many people talk about the role of brand equity in the rise of social buttons. I have no idea how much it would cost to put my company’s logo on all the sites that host the Tweet or Follow button &#8211; it would be a lot. </p>
<p>Even considering social buttons as a form of advertising underplays their true value. In fact they are more like an endorsement from one brand to another.  The Guardian newspaper carrying the tweet button on all its articles is the equivalent to it saying, “we believe that Twitter is the premium sharing service”.  One has to ask how interested some service providers will be in a feature which hides this type of brand promotion, even if it is in the best interests of their users.</p>
<p>Although I am wary of the commercial issues and the user experience has yet to be proven in the real world, Web Intents has compelling properties. I think it is well worth promoting.</p>
<h2>Useful Links</h2>
<p><strong>Reference Sites</strong><br />
<a href="http://webintents.org/">http://webintents.org/</a><br />
<a href="http://examples.webintents.org/">http://examples.webintents.org/</a><br />
<a href="http://usecases.webintents.org/">http://usecases.webintents.org/</a><br />
<a href="https://groups.google.com/group/web-intents">https://groups.google.com/group/web-intents</a></p>
<p>
<strong>Blog Post</strong><br />
Paul Kinlans – <a href="http://paul.kinlan.me/web-intents-a-fresh-look/">Web Intents a fresh look</a><br />
Tantek Çelik – <a href="http://tantek.com/2011/220/b1/web-actions-a-new-building-block">Web Actions a new building block</a> (<a href="https://plus.google.com/109182513536739786206/posts/TC7sqHXvDg2">Google+ comments</a>)<br />
Erin Jo Richey – <a href="http://www.flatfrogblog.com/2011/08/07/web-actions/">Button Sluts and Web Actions</a><br />
Tom Gibara – <a href="http://blog.tomgibara.com/post/8488175554/web-intents-reservations">Reservations about the Web Intents system</a>
</p>
<p>
Chrome – <a href="http://blog.chromium.org/2011/08/connecting-web-apps-with-web-intents.htm">Connecting Web Apps with Web Intents</a><br />
Mozilla Labs – <a href="http://mozillalabs.com/blog/2011/07/web-apps-update-experiments-in-web-activities-app-discovery/">Web Apps Update – experiments in Web Activities, App Discovery</a>
</p>
<p>
<strong>IndieWebCamp</strong><br />
Chris Messina&nbsp; – <a href="http://indiewebcamp.com/Standardizing_Web_Intents">Session: Standardizing Web Intents</a><br />
Ben Ward – <a href="http://indiewebcamp.com/How_the_Indie_Web_Hooks_into_Hosted_Communities">Sessions: How the Indie Web Hooks into Hosted Communities</a>
</p>
<p>
<strong>Reference Technologies</strong><br />
<a href="http://developer.android.com/reference/android/content/Intent.html">Android Intents</a><br />
<a href="http://web-send.org/introducer/">Web Introducer</a><br />
<a href="http://wiki.activitystrea.ms/">Activitystreams</a><br />
<a href="https://dev.twitter.com/docs/intents">Twitter Web Intents API</a><br /><a href="http://msdn.microsoft.com/en-us/library/cc287851%2528VS.85%2529.aspx">OpenService Accelerators</a></p>
]]></content:encoded>
			<wfw:commentRss>http://glennjones.net/2011/08/web-intentsgluing-web-functionality-together/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Indiewebcamp and Web Intents</title>
		<link>http://glennjones.net/2011/08/indiewebcamp-and-web-intents/</link>
		<comments>http://glennjones.net/2011/08/indiewebcamp-and-web-intents/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 10:32:26 +0000</pubDate>
		<dc:creator>Glenn Jones</dc:creator>
				<category><![CDATA[Data Portability]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[webintents]]></category>

		<guid isPermaLink="false">http://glennjones.net/?p=562</guid>
		<description><![CDATA[In June 2011 I made the journey to IndieWebcamp in Portland where Web Intents became quite a big topic. For an introduction to Web Intents read my last blog post “Web Intents – Gluing web functionally together” On the first day Chris Messina led a discussion that started with the architecture and focused in the [...]]]></description>
			<content:encoded><![CDATA[<p>In June 2011 I made the journey to <a href="http://indiewebcamp.com/">IndieWebcamp</a> in Portland where <a href="http://webintents.org/">Web Intents</a> became quite a big topic. For an introduction to Web Intents read my last blog post “<a href="http://glennjones.net/2011/08/web-intents-gluing-web-functionality-together">Web Intents – Gluing web functionally together</a>”</p>
<p>On the first day Chris Messina led a <a href="http://indiewebcamp.com/Standardizing_Web_Intents">discussion</a> that started with the architecture and focused in the possibilities of hijacking social buttons and turning them into Web Intents. Ben Ward carried on the discussion in <a href="http://indiewebcamp.com/How_the_Indie_Web_Hooks_into_Hosted_Communities">another session</a>. </p>
<p>The Web Intents could possibly fix the unwanted button issue and also allow large publishers and individuals to provide services on an equal footing. It’s this property which was so interesting to the people at IndieWebcamp. </p>
<h2>Brainstorm user experience</h2>
<p>At the end of IndieWebcamp Tantek Çelik and Erin Jo Richey brainstormed the current social sharing user experience and Web Intents.  Erin posted a blog entry which has her thoughts on a <a href="http://www.flatfrogblog.com/2011/08/07/web-actions/">possible user interface design</a>. Tantek also posted a thoughtful piece that tries to give a <a href="http://tantek.com/2011/220/b1/web-actions-a-new-building-block">historical context and future path</a> for development through the studying of current use cases. There are some interesting <a href="https://plus.google.com/109182513536739786206/posts/TC7sqHXvDg2">comments on Goggle+</a> about Tantek’s post.  Erin and Tantek have also put forward a <a href="http://panelpicker.sxsw.com/ideas/view/11705">talk for SXSWi</a> on the subject.</p>
<h2>Declarative mark-up for current social button patterns</h2>
<p>Some of the discussion at IndieWebcamp was focused on whether we could use a browser extension to hijack current social buttons and overlay the Web Intents concept. The question asked was could we change a Facebook ‘Like’ button into a share button that used the registered Web Intents instead? </p>
<p>At the hacking session I started to build a prototype browser extension.  It was primarily aimed at exploring the use of declarative mark-up as social button design pattern. </p>
<p>You need three elements to make Web Intents work the first is a browser based management interface. In this case I created a Firefox extension, a method to register the intent and a method to subscribe to the intent. </p>
<h2>Web Intent registration</h2>
<p>Ben Ward codified a <a href="http://codebits.glennjones.net/webintents/twitter-intents.html">hypothetical manifest structure for the Twitter Web Intents</a>. It contains concepts for property name mapping and proprietary requirements. He based it on his experience of the Twitter Web Intents API.  I have since added to the structure a little.</p>
<p>The registration of a service or group of services using JavaScript would typically look like this:<br />
[sourcecode language="javascript"]<br />
function init(){<br />
    window.intents.register({<br />
        &#8216;vendor&#8217;: &#8216;Twitter&#8217;,<br />
        &#8216;intents&#8217;: [<br />
            {<br />
                'name': &quot;Tweet Link&quot;,<br />
                'verb': 'share',<br />
                'type': 'url',<br />
                'required_params': ['url'],<br />
                &#8216;url&#8217;: &#8216;http://twitter.com/share&#8217;},<br />
            {<br />
                &#8216;name&#8217;: &quot;Retweet&quot;,<br />
                &#8216;verb&#8217;: &#8216;share&#8217;,<br />
                &#8216;type&#8217;: &#8216;status&#8217;,<br />
                &#8216;required_params&#8217;: ['tweet_id'],<br />
                &#8216;url&#8217;: &#8216;http://twitter.com/intent/retweet&#8217;,<br />
                &#8216;param_map&#8217;: {&#8216;object_id&#8217;: &#8216;tweet_id&#8217;}<br />
            }<br />
        ]<br />
    });<br />
}</p>
<p>window.addEventListener(&#8216;load&#8217;, init, false);<br />
[/sourcecode]</p>
<h2>Subscribing to a Web Intent</h2>
<p>I built the subscription around the use of HTML5 ‘data-‘  attributes. This type of attribute can be used to provide all the additional information for a Web Intent.  Its use would allow for progressive enhancement of a standard HTML link. </p>
<p>There are two distinct groups of attribute. The first group contains ‘<code>data-verb</code>’, ‘<code>data-type</code>’ and ‘<code>data-url</code>‘ which would be mandatory. Providing all the data needed to define a Web Intent.</p>
<p>[sourcecode language="html"]<br />
&lt;a href=&quot;http://www.delicious.com/save?v=5&amp;noui=&amp;jump=close&amp;url=http%3A%2F%2Fbbc.in%2Fiert2M&amp;title=BBC%20News%20-%20Public%20sector%20strike%20hits%20services%20and%20schools&quot;<br />
data-verb=&quot;share&quot;<br />
data-type=&quot;bookmark&quot;<br />
data-url=&quot;http://www.bbc.co.uk/news/uk-13967580&quot;<br />
date-text=&quot;Public sector strike hits services and schools&quot;&gt;Bookmark link&lt;/a&gt;<br />
[/sourcecode]</p>
<p>The ‘<code>date-text</code>’ attribute is an example of an optional data type. Supplying additional data would help the services to pre-fill forms that are presented to the user and improve the user experience.</p>
<p>Conceptually this design would use an agreed set of attributes for each verb/content-type combination, with a parameter mapping system so pre-existing URL end points would not have to be changed.  We also added a proprietary naming scheme for extensions of optional data e.g. ‘<code>data-v-twitter-via</code>’</p>
<h2>The Firefox extension</h2>
<p>Although only half finished it is possible to try out some of the prototype functionality.<br />
You can register a Web Intent</p>
<ul>
<li>Allows for basic management through an interface</li>
<li>Finds the declarative HTML mark-up for subscriptions</li>
</ul>
<p>To try this out, <strong><a href="http://codebits.glennjones.net/webintents/webintents.xpi">download the extension</a></strong>.  It should install directly into Firefox then view the <a href="http://codebits.glennjones.net/webintents/register-intent.html">registration page</a> and select “Allow” in the dialog</p>
<p><a href="http://glennjones.net/wp-content/uploads/2011/08/register.jpg"><img src="http://glennjones.net/wp-content/uploads/2011/08/register.jpg" alt="" title="register" width="500" height="285" class="alignnone size-full wp-image-605" /></a></p>
<p>There should be a small blue “in” icon in the Add-on bar at the bottom of the browser. Clicking this will bring up the management interface.</p>
<p><a href="http://glennjones.net/wp-content/uploads/2011/08/manage.jpg"><img src="http://glennjones.net/wp-content/uploads/2011/08/manage.jpg" alt="" title="manage" width="500" height="299" class="alignnone size-full wp-image-606" /></a></p>
<p>Finally, navigating to the <a href="http://codebits.glennjones.net/webintents/subscribe-intent.html">subscription page</a> will show you an alert for each of the Web Intent subscriptions it discovers in the HTML. That’s as far as I got (it was only a few hours of hacking !).</p>
<h2>Why have I not finished the prototype?</h2>
<p>If we map out the approaches taken to implement the current social buttons you find 3 distinct models. They all use a URL endpoint for each service, but vary in how they exchange data. </p>
<ol>
<li>Uses the query string parameters which are pre or dynamically populated </li>
<li>Extracts data from the referring URL. The service parses the HTML</li>
<li>Exchanges data hidden behind a JavaScript interface</li>
</ol>
<p>In practice you can see a combination of the above being used in a single implementation.  Each model has different strengths and weaknesses.  What is important is that all the current common use cases for social buttons are captured and that the Web Intent design has the widest coverage. </p>
<p>The design I envisaged passed data using the URL query string. This follows the design of Twitter’s Web Intents API and a lot of the other social button APIs.  The Chrome and Mozilla teams are taking another approach still using a URL endpoint for each service but passing data as JSON objects through the context of the browser. This is arguably much more flexible.</p>
<p>Having read Tom Gibara’s post <a href="http://blog.tomgibara.com/post/8488175554/web-intents-reservations">Reservations about the Web Intents system</a> I do not agree with most of the points, but I can see the possible need to delegate URLs endpoints.</p>
<blockquote><p>“…allows one web application to hijack an “intended” link to another. Example: an intent to view a Flickr photo by linking to its URL could be delegated to an application that displays Flickr photos in a way that is more to the users liking.”</p></blockquote>
<p>Twitter has taken the approach of supporting just about every way of defining the data for a social button. They have also prioritised the order in which they discover it.  The list below is taken from their <a href="https://dev.twitter.com/docs/tweet-button">button API documentation</a>:</p>
<ol>
<li>Look for url in the share link query string.</li>
<li>If not found, look for the data-url attribute of the Tweet Button anchor tag</li>
<li>If not found, look for the rel=&#8221;canonical&#8221; link tag in the head of the document</li>
<li>If not found use the URL of the webpage</li>
</ol>
<p>If you added delegated URL endpoints to Twitter’s data entry this would be an extremely flexible solution. The question is whether this level of flexibility adds too much complexity. Only reviewing the use cases can give this answer.</p>
<p>I would like to spend some time considering this and as the Web Intent API is still in major flux while the Chrome and Mozilla teams align their work,  I think this project is best left a while. </p>
<p>&nbsp;</p>
<p><strong>IMPORTANT</strong><br />
The examples/code in this document are different to both Paul Kinlan webintents.org API and Mozilla Labs Web Activities API. In the past couple of months a lot has happened in this area and I now consider this work to be at a tangent to the main body of development taking place.</p>
]]></content:encoded>
			<wfw:commentRss>http://glennjones.net/2011/08/indiewebcamp-and-web-intents/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The page and the desktop &#8211; Skillswap talk</title>
		<link>http://glennjones.net/2011/08/the-page-and-the-desktop/</link>
		<comments>http://glennjones.net/2011/08/the-page-and-the-desktop/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 21:19:56 +0000</pubDate>
		<dc:creator>Glenn Jones</dc:creator>
				<category><![CDATA[Data Portability]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://glennjones.net/?p=536</guid>
		<description><![CDATA[A couple of weeks ago I gave a talk at Brighton Skillswap called “The page and the desktop”. With some of the newer HTML5 APIs it is now possible to redesign how your web pages interact with the desktop. Web pages are all too often little islands that fail to interact well with the wider [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago I gave a talk at Brighton Skillswap called “<a href="http://skillswap.org/brighton/">The page and the desktop</a>”. With some of the newer HTML5 APIs it is now possible to redesign how your web pages interact with the desktop. Web pages are all too often little islands that fail to interact well with the wider user interfaces of our devices. The talk tries to explain how the new Drag/Drop and File APIs could make web pages more equal in the world of applications.</p>
<p>The talked started with a series of demos that show what is currently possible. I have recreated the demos in a short screencast, hopefully it will give more context to the slides.</p>


            <video height="312" width="520" controls="true" tabindex="0">
                    <source src="http://glennjones.net/downloads/skillswap2011.mp4"></source>
                    <source src="http://glennjones.net/downloads/skillswap2011.webm"  type='video/webm; codecs="vp8, vorbis"'></source>
                    <source src="http://glennjones.net/downloads/skillswap2011.ogv" type='video/ogg; codecs="theora, vorbis"'></source>

                    <!-- Flash fall back -->
                    <object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="312" height="520"> 
		                <param name="movie" value="http://glennjones.net/downloads/player.swf" /> 
		                <param name="allowfullscreen" value="true" /> 
		                <param name="allowscriptaccess" value="always" /> 
		                <param name="flashvars" value="file=http://glennjones.net/downloads/skillswap.mp4&image=http://glennjones.net/downloads/skillswap2011.png" /> 
		                <embed 
			                type="application/x-shockwave-flash"
			                id="player2"
			                name="player2"
			                src="http://glennjones.net/downloads/player.swf" 
			                width="527" 
			                height="419"
			                allowscriptaccess="always" 
			                allowfullscreen="true"
			                flashvars="file=http://glennjones.net/downloads/skillswap2011.mp4&image=http://glennjones.net/downloads/skillswap2011.png" 
		                /> 
	                </object> 

                </video>


<div style="width:520px" id="__ss_8651326"><iframe src="http://www.slideshare.net/slideshow/embed_code/8651326" width="520" height="428" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></div>

<p></p>
<h2>Example code</h2>
<ul>
<li><a href="http://codebits.glennjones.net/downloadhack/downloadhack.htm">The Firefox Virtual File Hack</a><br />A hack to create virtual file download using the anchor tag type attribute and the JavaScript window object</li>
<li><a href="http://codebits.glennjones.net/downloadurl/virtualdownloadurl.htm">DownloadURL and Data URL support</a><br />A test using the DownloadURL type and Data URL together</li>
<li><a href="http://codebits.glennjones.net/downloadurl/downloadurl.htm">DownloadURL support</a><br />A test using the DownloadURL type for a drag and drop method setDate</li>
<li><a href="http://codebits.glennjones.net/editing/enterbox.htm">Enterbox Idea</a><br />An experimental UI component that accepts HTML drop and paste</li>
<ul>
]]></content:encoded>
			<wfw:commentRss>http://glennjones.net/2011/08/the-page-and-the-desktop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://glennjones.net/downloads/skillswap2011.mp4" length="8179696" type="video/mp4" />
<enclosure url="http://glennjones.net/downloads/skillswap2011.webm" length="19921391" type="video/webm" />
<enclosure url="http://glennjones.net/downloads/skillswap2011.ogv" length="5793987" type="video/ogg" />
		</item>
		<item>
		<title>Small snippits of shinny ideas and tests</title>
		<link>http://glennjones.net/2011/04/small-snippits-of-shinny-ideas-and-tests/</link>
		<comments>http://glennjones.net/2011/04/small-snippits-of-shinny-ideas-and-tests/#comments</comments>
		<pubDate>Wed, 27 Apr 2011 09:31:25 +0000</pubDate>
		<dc:creator>Glenn Jones</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://glennjones.net/?p=515</guid>
		<description><![CDATA[As I build projects I often try out new ideas, these sometimes get lost as I move on to other things. Codebits is a place for small snippits of shinny ideas and tests of all things web. I am going to use it to remind myself of how things work, but hopefully it will be [...]]]></description>
			<content:encoded><![CDATA[<p>As I build projects I often try out new ideas, these sometimes get lost as I move on to other things. <a href="http://codebits.glennjones.net/">Codebits</a> is a place for small snippits of shinny ideas and tests of all things web. I am going to use it to remind myself of how things work, but hopefully it will be helpful to others.</p>
<p>The first set of code sketches are all on the subject of copy and pasting. Over the next few weeks I will try and post up more stuff on &#8216;drag and drop&#8217; and file APIs. </p>
]]></content:encoded>
			<wfw:commentRss>http://glennjones.net/2011/04/small-snippits-of-shinny-ideas-and-tests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Semantic form mark-up discussion</title>
		<link>http://glennjones.net/2011/04/semantic-form-mark-up-discussion/</link>
		<comments>http://glennjones.net/2011/04/semantic-form-mark-up-discussion/#comments</comments>
		<pubDate>Thu, 14 Apr 2011 08:34:42 +0000</pubDate>
		<dc:creator>Glenn Jones</dc:creator>
				<category><![CDATA[Microformats]]></category>
		<category><![CDATA[forms]]></category>

		<guid isPermaLink="false">http://glennjones.net/?p=498</guid>
		<description><![CDATA[As part of the mircoformats meet up in Brighton this week a group of us took some time to discuss the semantic mark-up of forms. This was based on my previous thoughts on the subject. We also look at this issue in light of Tantek’s proposal for the version 2 of microformats. Please forgive that [...]]]></description>
			<content:encoded><![CDATA[<p>As part of the mircoformats <a href="http://microformats.org/wiki/events/2011-04-12-uk">meet up in Brighton</a> this week a group of us took some time to discuss the semantic mark-up of forms. This was based on my <a href="http://glennjones.net/2011/03/microformats-and-autofill-forms/">previous thoughts  on the subject</a>. We also look at this issue in light of Tantek’s <a href="http://microformats.org/wiki/microformats-2">proposal for the version 2 of microformats</a>.
</p>
<p>Please forgive that fact that I have not noted everyone’s name who took part. The main people contributing were; <a href="http://aralbalkan.com/">Aral Balkan</a>, <a href="http://glennjones.net">Glenn Jones</a>, <a href="http://adactio.com/">Jeremy Keith</a>, <a href="http://blog.joshemerson.co.uk/">Josh Emerson</a> and <a href="http://tantek.com/">Tantek Çelik</a>. The session was broken down into 7 small discussions of specific problem areas. I have summarised below.</p>
<h2>Using the class attribute and hierarchies</h2>
<p>There was full agreement for the use of the className attribute instead of the form field name attribute.  The name attribute can only take a single value and does not give enough flexibility to the author of a form as the name maybe dictated by the server side code.</p>
<p>For the current version of microformats, the use of hierarchical structures was agreed upon. The structures will be flattened in version 2 of microformats. In principle, form mark-up should follow the hierarchical structure of the microformat.<br />
Examples used for the discussion:</p>
<p>[sourcecode language="html"]<br />
&lt;fieldset class=&quot;adr&quot;&gt;<br />
    &lt;input class=&quot;locality&quot; name=&quot;city&quot; type=&quot;text&quot; /&gt;<br />
    &lt;input class=&quot;country-name&quot; name=&quot;country&quot; type=&quot;text&quot; /&gt;<br />
&lt;/fieldset&gt;</p>
<p>&lt;div class=&quot;tel&quot;&gt;<br />
    &lt;input class=&quot;value&quot; name=&quot;telephone-number&quot; type=&quot;text&quot; /&gt;<br />
    &lt;select class=&quot;type&quot; name=&quot;telephone-type&quot; multiple=&quot;multiple&quot;&gt;<br />
        &lt;option value=&quot;none&quot;&gt;Select phone type&lt;/option&gt;<br />
        &lt;option value=&quot;home&quot;&gt;Home&lt;/option&gt;<br />
        &lt;option value=&quot;work&quot;&gt;Work&lt;/option&gt;<br />
        &lt;option value=&quot;pref&quot;&gt;Pref&lt;/option&gt;<br />
        &lt;option value=&quot;fax&quot;&gt;Fax&lt;/option&gt;<br />
        &lt;option value=&quot;cell&quot;&gt;Mobile&lt;/option&gt;<br />
        &lt;option value=&quot;cell&quot;&gt;Pager&lt;/option&gt;<br />
    &lt;/select&gt;<br />
&lt;/div&gt;<br />
[/sourcecode]</p>
<h2>Defining types in the className attribute</h2>
<p>There is a problem adding ‘type’ information i.e. home, work and pref to inputs that take telephone numbers or email addresses. There are many use cases where the author wants to define a specific ‘type’ of a property, such as a mobile telephone number, to a single input. To accommodate this we somehow have to add the ‘type’ metadata as well as the property name.</p>
<p>In the current version of microformats, most people at the meeting were happy with the type information being added into the className attribute. For version2 of microformts, Tantek suggested adding a prefix of ‘l’ standing for label.</p>
<p>There was some discussion of using the HTML label element to define the microformat property. But it was dropped as we could not think of an authoring use case and it would add complexity.</p>
<p>Tanteks microformats v2 idea:<br />
[sourcecode language="html"]<br />
&lt;input class=&quot;p-tel l-cell&quot; name=&quot;mobile-number&quot; type=&quot;text&quot; /&gt;<br />
&lt;input class=&quot;p-tel l-fax&quot; name=&quot;fax-number&quot; type=&quot;text&quot; /&gt;<br />
[/sourcecode]</p>
<p>Example used for the discussion:<br />
[sourcecode language="html"]<br />
&lt;input class=&quot;tel cell&quot; name=&quot;mobile-number&quot; type=&quot;text&quot; /&gt;<br />
&lt;input class=&quot;tel fax&quot; name=&quot;fax-number&quot; type=&quot;text&quot; /&gt;<br />
[/sourcecode]</p>
<h2>Repeating microformat properties</h2>
<p>This was generally agreed between everyone except Tantek. There are a large number of use cases where we find repeating patterns. These patterns allow a user to add multiples of one item.  The most common example in hCard is the URL property. We discussed the use of a “repeatable” class that would cause an auto-fill application to duplicate the whole DOM node and append it as a sibling underneath the original.</p>
<p>The word “repeatable” was preferred over “repeat”. Although there are use cases to back up this type of functionally Tantek thought it broke the layers of abstraction and we could never be a 100% sure it would not damage the layout designed by the author. Tantek rejected this as a possible solution. No agreement/conclusions were reached about this point.</p>
<p>Example used for the discussion:<br />
[sourcecode language="html"]<br />
&lt;div class=&quot;tel repeat&quot;&gt;<br />
    &lt;label for=&quot;tel&quot;&gt;telephone&lt;/label&gt;<br />
    &lt;input class=&quot;value&quot; name=&quot;tel&quot; type=&quot;text&quot; /&gt;<br />
&lt;/div&gt;<br />
[/sourcecode]</p>
<h2>Repeating microformat structures within one form</h2>
<p>This item is similar to the previous item and as such everyone took a similar point of view. Jeremy believed that he could see good real world uses for this pattern of mark-up. Again “repeatable” would be a better className. Tantek’s previous objections were carried forward to this pattern.</p>
<p>Example used for the discussion:<br />
[sourcecode language="html"]<br />
&lt;form&gt;<br />
    &lt;div class=&quot; vcard repeat&quot;&gt;<br />
        &lt;label for=&quot;name&quot;&gt;Name&lt;/label&gt;<br />
        &lt;input class=&quot;fn&quot; name=&quot;name&quot; type=&quot;text&quot; /&gt;<br />
    &lt;/div&gt;<br />
    &#8230;<br />
&lt;/form&gt;<br />
[/sourcecode]</p>
<h2>Logical operator “or”</h2>
<p>There are times where an author may wish to use more than one property if it’s available. If we were to use this pattern the “or” is not required.  Tantek pointed out that there is no order to the className attribute and we should not force one artificially to enable this feature.
<p/>
<p>Example used for the discussion:<br />
[sourcecode language="html"]<br />
&lt;input class=&quot;title role or&quot; name=&quot;job-title&quot; type=&quot;text&quot; /&gt;<br />
&lt;input class=&quot;extended-address street-address or&quot; name=&quot;address1&quot; type=&quot;text&quot; /&gt;<br />
&lt;input class=&quot;extended-address street-address or&quot; name=&quot;address2&quot; type=&quot;text&quot; /&gt;<br />
&lt;input class=&quot;extended-address street-address or&quot; name=&quot;address3&quot; type=&quot;text&quot; /&gt;<br />
[/sourcecode]</p>
<h2>String concatenation</h2>
<p>There are a number of circumstances where concatenating a plural microfromats property into a single string is required. The best example of this is a number of individual tags into a single string.</p>
<p>Jeremy suggested using the multiple attribute or a className multiple. As the multiple attribute can currently only be applied to a file input or a select element we will have to use the word ‘multiple’ in the class attribute. There was some discussion about dropping the formatting instructions.</p>
<p>Example used for the discussion:<br />
[sourcecode language="html"]<br />
&lt;input class=&quot;category comma-space-delimited&quot; name=&quot;tags&quot; type=&quot;text&quot; /&gt;<br />
[/sourcecode]</p>
<p>The group’s solution:<br />
[sourcecode language="html"]<br />
&lt;input class=&quot;category multiple&quot; name=&quot;tags&quot; type=&quot;text&quot; /&gt;<br />
[/sourcecode]</p>
<h3>Additional – Inputs inheriting parent className values</h3>
<p>As we talked, it became apparent that it would be useful for a form element to inherit its parent className value. The form field would have to be the only form field of the parent. This type of structure would be required to ease the authoring of the ‘repeatable pattern’.</p>
<p>The group’s solution:<br />
[sourcecode language="html"]<br />
&lt;p class=&quot;tel repeatable&quot;&gt;<br />
    &lt;label for=&quot;telephone&quot;&gt;Phone: &lt;/label&gt;<br />
    &lt;input id=&quot;telephone&quot; name=&quot;telephone&quot; type=&quot;text&quot; /&gt;<br />
&lt;/p&gt;<br />
[/sourcecode]</p>
<h3>Related microformat wiki documents</h3>
<ul>
<li>
<a href="http://microformats.org/wiki/hcard-input-brainstorming">http://microformats.org/wiki/hcard-input</a>
</li>
<li>
<a href="http://microformats.org/wiki/hcard-input-brainstorming">http://microformats.org/wiki/hcard-input-examples</a>
</li>
<li>
<a href="http://microformats.org/wiki/hcard-input-brainstorming">http://microformats.org/wiki/hcard-input-formats</a></li>
<li>
<a href="http://microformats.org/wiki/microformats-2">http://microformats.org/wiki/microformats-2</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://glennjones.net/2011/04/semantic-form-mark-up-discussion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Experimental Firefox and Chrome extensions to copy and paste contacts</title>
		<link>http://glennjones.net/2011/04/contact-extensions/</link>
		<comments>http://glennjones.net/2011/04/contact-extensions/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 22:45:19 +0000</pubDate>
		<dc:creator>Glenn Jones</dc:creator>
				<category><![CDATA[Data Portability]]></category>
		<category><![CDATA[Microformats]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://glennjones.net/?p=432</guid>
		<description><![CDATA[The extensions below allow you to copy, store and then later paste contacts into forms. They are proof of concept prototypes taken from a larger project. I have released the extensions now to help inform the discussion at the upcoming mircoformats meetup. You need either Firefox 4.0+ or the latest Chrome browser. Download Firefox extension [...]]]></description>
			<content:encoded><![CDATA[<p>The extensions below allow you to copy, store and then later paste contacts into forms. They are proof of concept prototypes taken from a larger project. I have released the extensions now to help inform the discussion at the upcoming <a href="http://microformats.org/wiki/events/2011-04-uk">mircoformats meetup</a>.</p>
<p>You need either Firefox 4.0+ or the latest Chrome browser.</p>
<p><a class="img-link" href="http://glennjones.net/downloads/copycontacts01.xpi"><img src="http://glennjones.net/wp-content/uploads/2011/04/firefox1.png" title="Firefox Logo" width="32" height="32" />Download Firefox extension </a> (0.1.2 updated 16 Apr 2011)</p>
<p><a class="img-link" href="http://glennjones.net/downloads/copycontacts01.crx"><img src="http://glennjones.net/wp-content/uploads/2011/04/chrome1.png" title="Chrome Logo" width="32" height="32" />Download Chrome extension</a> (0.1.2 updated 16 Apr 2011)
</p>
<h2>2 minute video overview</h2>


            <video height="395" width="527" controls="true" tabindex="0">
                    <source src="http://glennjones.net/downloads/contactextensions.mp4"></source>
                    <source src="http://glennjones.net/downloads/contactextensions.webm"  type='video/webm; codecs="vp8, vorbis"'></source>
                    <source src="http://glennjones.net/downloads/contactextensions.ogv" type='video/ogg; codecs="theora, vorbis"'></source>

                    <!-- Flash fall back -->
                    <object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="527" height="419"> 
		                <param name="movie" value="http://glennjones.net/downloads/player.swf" /> 
		                <param name="allowfullscreen" value="true" /> 
		                <param name="allowscriptaccess" value="always" /> 
		                <param name="flashvars" value="file=http://glennjones.net/downloads/contactextensions.mp4&image=http://glennjones.net/downloads/contactextensions.png" /> 
		                <embed 
			                type="application/x-shockwave-flash"
			                id="player2"
			                name="player2"
			                src="http://glennjones.net/downloads/player.swf" 
			                width="527" 
			                height="419"
			                allowscriptaccess="always" 
			                allowfullscreen="true"
			                flashvars="file=http://glennjones.net/downloads/contactextensions.mp4&image=http://glennjones.net/downloads/contactextensions.png" 
		                /> 
	                </object> 

                </video>

<h2>How the extensions work</h2>
<h3>Copying contact details</h3>
<p>Navigate to a page which contains a contact marked-up in hCard and right click on it. The context menu should then contain an item “Copy [Name] contact details”. Selecting this menu item will store the data in the browser.  </p>
<h3>Pasting the contact details</h3>
<p>Navigate to a page which contains a form for contact details and right click on it. The context menu should then contain an item “Paste contacts…”. Choose a contact from the submenu and the extension will paste the data into the form for you.</p>
<h2>Design considerations for the future</h2>
<h3>Issues of discoverability</h3>
<p>The largest problem for the copy and paste of semantic data embedded in web pages is discoverability.  It is difficult to indicate where and what data is available without over complicating the browser interface. I think the solution lays within joining  the copy and paste functionality with other forms of interaction and/or visual flagging that will provide discovery.  </p>
<h3>Forms need to be marked-up  semantically</h3>
<p>At the moment most applications that auto fill web forms do not work very well. The common approach of “guessing” what data goes in which field is error-prone. Often the browsers/extensions  use regular expressions  to match the form field name.</p>
<p>Matching rule for a job title looks like this <code>(?:occupation)|(?:job)|(?:title)</code></p>
<p>There are more sophisticated approaches which record matching rules from users, but even these are not perfect.  What we really need is a way to semantically mark-up forms so there is little or no ambiguity.   I have done some conceptual work on how microformats could be used to mark-up forms. </p>
<h3>Labelling UX</h3>
<p>Although the extensions currently work by parsing hCards I have used the terminology ‘Contacts’. This is for two reasons the first is that users do care about underlying schemas. The second is that a future interface design may abstract the data and display it differently to how it’s parsed from the page. For example, how do we deal with hResumes, do we just extract one contact or several based on work or educational history.  If an hCard contains both a work and home address is it displayed as two contacts. Re-displaying the data in its raw form may not give the most intuitive interface.</p>
<h3>Data source has to be comprehensive</h3>
<p>Contacts found on the web are often just constructed of a few elements and not comprehensive enough to auto-fill a range of forms.  The data may need to come from another more fully structured source than a web page for auto-fill to work relatively well.  I also believe the user would need to be able to view what was to be copied, what is in the data store before making copy and paste choices.</p>
]]></content:encoded>
			<wfw:commentRss>http://glennjones.net/2011/04/contact-extensions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://glennjones.net/downloads/contactextensions.mp4" length="3086726" type="video/mp4" />
<enclosure url="http://glennjones.net/downloads/contactextensions.webm" length="8199164" type="video/webm" />
<enclosure url="http://glennjones.net/downloads/contactextensions.ogv" length="1959811" type="video/ogg" />
		</item>
	</channel>
</rss>

