<?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/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>In usability we trust &#187; Articles</title>
	<atom:link href="http://www.svennerberg.com/category/articles/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.svennerberg.com</link>
	<description>A blog about web developement and usability.</description>
	<lastBuildDate>Thu, 22 Jul 2010 23:18:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Google Maps API 3 – Mobile devices</title>
		<link>http://www.svennerberg.com/2010/07/google-maps-api-3-%e2%80%93-mobile-devices/</link>
		<comments>http://www.svennerberg.com/2010/07/google-maps-api-3-%e2%80%93-mobile-devices/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 23:06:13 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=2662</guid>
		<description><![CDATA[A lot of the web browsing these days takes place on mobile devices. Therefore it&#8217;s important to know how to design web pages and maps for these. When it comes to incorporating Google Maps on a web page, it&#8217;s done pretty much the same way as for desktop browsers, at least for advanced devices like [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2010/07/iphone-100.png" alt="" class="alignright" />A lot of the web browsing these days takes place on mobile devices. Therefore it&#8217;s important to know how to design web pages and maps for these. When it comes to incorporating Google Maps on a web page, it&#8217;s done pretty much the same way as for desktop browsers, at least for advanced devices like the iPhone and Android based phones. There are however some things to consider. In this article I will explain what these things are and how it&#8217;s done.</p>
<p><span id="more-2662"></span></p>
<p>As opposed to previous version of Google Maps <acronym title="Application Programming Interface">API</acronym>, version 3 is designed specifically with mobile devices in mind. What this means is that the performance on mobile devices is a lot better. Version 3 of the <acronym title="Application Programming Interface">API</acronym> loads, for example, more than twice as fast on the iPhone as the old version. This makes it especially well suited for mobile browsing. You don&#8217;t have to do anything particular to make it work on these devices but there are a few things that you need to consider.</p>
<p class="note"><strong>Tip:</strong> If you don&#8217;t yet know how to use the Google Maps <acronym title="Application Programming Interface">API</acronym> v3, I suggest that you read the previous articles in this series before plunging into this one.</p>
<h3>Maximizing the Viewport</h3>
<p>Since the screens of mobile devices are a lot smaller than on desktop platforms the first thing you want to do is to make sure that as much screen estate as possible is used for the map. This is done by setting the width and the height of the map to <code>100%</code>. Assuming that the element containing the map has the <code>ID="map"</code>, here&#8217;s what the <acronym title="Cascading Style Sheets">CSS</acronym> will look like:</p>
<pre name="code" class="css">
html, body {
  height: 100%;
  margin: 0;
}
#map {
  width: 100%;
  height: 100%;
}
</pre>
<p>Notice that the height of the <code>&lt;html&gt;</code> and <code>&lt;body&gt;</code> tags are set to <code>100%</code> with zero margin. The reason for this is to make sure that the web page covers the entire height of the browser and that there&#8217;s no white space around the map.</p>
<div class="image">
<a href="http://media.svennerberg.com/2010/07/both-maps.png"><img src="http://media.svennerberg.com/2010/07/both-maps-410x283.png" alt="" /></a></p>
<p>In the left image the default margin prevents the map from covering the entire screen, whereas in the right image the margin is set to zero.</p>
</div>
<h3>Disabling page zoom</h3>
<p>Mobile devices with touch screens often uses the pinch maneuver for zooming the web page. When you have a map on that page, you probably want the map to zoom rather than the entire web page. Fortunately there&#8217;s a special <code>&lt;meta&gt;</code> tag that can be used to disable page zooming. It must be placed in the <code>&lt;head&gt;</code> section of the page and looks like this:</p>
<pre name="code" class="html">
&lt;meta name="viewport" content="initial-scale=1.0, user-scalable=no" /&gt;
</pre>
<p>Using this you make sure that the map work as expected. Browsers that doesn&#8217;t support this tag will simply ignore it, so it&#8217;s safe to use.</p>
<h3>No hover state</h3>
<p>One final consideration that needs to be made is that there&#8217;s no such thing as hover state (mouseover) on mobile devices. Therefore you need to make sure that you don&#8217;t use this for essential interactions such as showing vital information.</p>
<h3>Live demo</h3>
<p>To see that this demo actually works as expected you need to access it from an iPhone or an Android based phone. But it is of course entirely usable by desktop browsers too. What you get is a web page with a maximized map regardless of what device you use to access it.</p>
<p><a href="http://www.svennerberg.com/examples/mobile-map/">Check out the live demo</a>.</p>
<h3>Conclusion</h3>
<p>Developing maps for mobile devices is really not that different from developing them for desktop browsers. As long as you&#8217;re aware of their limitations you should be fine. If you want to learn more about developing for the iPhone, check out the <a href="http://developer.apple.com/webapps/docs/documentation/AppleApplications/Reference/SafariWebContent/Introduction/Introduction.html">Safari Dev Center</a>. To learn more about developing for Android based phones, check out the <a href="http://developer.android.com/">Android documentation</a>.</p>
<p>Do you know of any other considerations that need to be made when developing maps for mobile devices? Please share in the comments!</p>
<div class="book_push">
<img src="http://media.svennerberg.com/2009/09/bgma3-70.png" alt="" /></p>
<h3>My Google Maps book</h3>
<p>If you found this article useful you might be interested in my book <a href="/bgma3/" title="Read more about my book - Beginning Google Maps API 3"><strong>Beginning Google Maps <acronym title="Application Programming Interface">API</acronym> 3</strong></a>. It covers everything you need to know to create awesome maps on your web sites. <a href="http://www.amazon.com/gp/product/1430228024?ie=UTF8&#038;tag=inusabiwetrus-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=1430228024" title="Buy Beginning Google Maps Applications from Amazon.com">Buy it on Amazon.com</a><img src="http://www.assoc-amazon.com/e/ir?t=inusabiwetrus-20&#038;l=as2&#038;o=1&#038;a=1430228024" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2010/07/google-maps-api-3-%e2%80%93-mobile-devices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Google Maps API 3]]></series:name>
	</item>
		<item>
		<title>The difference between add(), find() and filter() in jQuery</title>
		<link>http://www.svennerberg.com/2009/09/the-difference-between-add-find-and-filter-in-jquery/</link>
		<comments>http://www.svennerberg.com/2009/09/the-difference-between-add-find-and-filter-in-jquery/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 15:39:58 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=2236</guid>
		<description><![CDATA[There&#8217;s a few methods used for traversing the DOM-tree in jQuery that is confusingly similar, well at least they were for me. This article will explain the difference between them and when you should use which one. The methods I&#8217;m talking about are add(), find() and filter(). They are all used to extend or refine [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2009/09/jquery-logo-160.png" alt="" class="alignright size-full wp-image-2289" />There&#8217;s a few methods used for traversing the <acronym title="Document Object Model">DOM</acronym>-tree in jQuery that is confusingly similar, well at least they were for me. This article will explain the difference between them and when you should use which one.</p>
<p><span id="more-2236"></span></p>
<p>The methods I&#8217;m talking about are <code>add()</code>, <code>find()</code> and <code>filter()</code>. They are all used to extend or refine a selection of html objects that you&#8217;ve already got. Typically you&#8217;ve already got a selection using the jQuery method, or $(expression), but need to refine it further. </p>
<p>All three of these methods have, that they take a <em>jQuery expression</em> as an argument, in common. A jQuery expression typically looks like a regular <acronym title="Cascading Style Sheets">CSS</acronym> selector like for example &#8220;#content&#8221;. You can use any kind of <acronym title="Cascading Style Sheets">CSS</acronym> selector, including the ones found in <acronym title="Cascading Style Sheets">CSS</acronym> 3. On top of that you can also use jQuery specific selectors. It&#8217;s a really powerful way of finding the right elements in a <acronym title="HyperText Markup Language">HTML</acronym> document. To read more about how a expression could be constructed, check out the <a href="http://docs.jquery.com/Selectors">section about selectors</a> in the jQuery documentation.</p>
<p>We will take a closer look on how these methods really works in the following section.</p>
<h3>Examples and explanations</h3>
<p>Consider the following <acronym title="HyperText Markup Language">HTML</acronym>.</p>
<pre name="code" class="html">
&lt;div id="div1"&gt;
  &lt;p&gt;Some text&lt;/p&gt;
&lt;/div&gt;
&lt;div id="div2"&gt;
  &lt;p&gt;Some more text&lt;/p&gt;
&lt;/div&gt;
</pre>
<p>We&#8217;re going to use this <acronym title="HyperText Markup Language">HTML</acronym> to do some selections from.</p>
<h4>add()</h4>
<p>As the name implies this method is used to add more elements to a collection that you&#8217;ve already got. So if you have a &lt;div&gt; with the id &#8220;div1&#8243; in your selection and wants to add a &lt;div&gt; with the id &#8220;div2&#8243; to it, <code>add()</code> is the method to use:</p>
<pre name="code" class="js">
// This code will add div2 to the collection that already contains div1
$('#div1').add('#div2');
</pre>
<p><a href="http://docs.jquery.com/Traversing/add">Read about add() in the jQuery documentation</a>.</p>
<h4>find()</h4>
<p><code>Find()</code> on the other hand is used to find descendant element from your selection. So instead of adding more elements to it it narrows it down to fewer elements. It searches what&#8217;s inside the parent element(s) in your selection. In the example below it will search for content inside of the selected &lt;div&gt; that matches the expression.</p>
<pre name="code" class="js">
// Refine the selection to contain only the &lng;p&lt; elements inside of #div1
$('#div1').find('p');
</pre>
<p><a href="http://docs.jquery.com/Traversing/find">Read about find() in the jQuery documentation</a>.</p>
<h4>filter()</h4>
<p><code>Filter()</code> is quite similar to <code>find()</code> but instead of searching the descendant elements of the selection it &#8220;searches&#8221;, or rather filters, the elements that are in the selection. </p>
<pre name="code" class="js">
// Reduces the selection to only contain the &lt;div&gt; with the id "div1"
$('div').filter('#div1');
</pre>
<p><a href="http://docs.jquery.com/Traversing/filter">Read about filter() in the jQuery documentation</a>.</p>
<h3>Demo page</h3>
<p>I&#8217;ve constructed a simple <a href="http://www.svennerberg.com/examples/add_find_filter/">demo page</a> which demonstrates how these methods work. Please try it out.</p>
<h3>Conclusion</h3>
<p>All of these methods are very useful but it&#8217;s important to know which one to choose in a given situation. If you want to <strong>extend your selection</strong> to include more elements you should use <code>add()</code>. If you want to <strong>narrow down your selection</strong> you need too use either <code>find()</code> or <code>filter()</code>.</p>
<p>Of course there are many other useful methods to traverse the <acronym title="Document Object Model">DOM</acronym> in jQuery. Which ones are your favorites? </p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2009/09/the-difference-between-add-find-and-filter-in-jquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Maps API 3 – InfoWindows</title>
		<link>http://www.svennerberg.com/2009/09/google-maps-api-3-infowindows/</link>
		<comments>http://www.svennerberg.com/2009/09/google-maps-api-3-infowindows/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 18:10:17 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[Google Maps API 3]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=2208</guid>
		<description><![CDATA[Using InfoWindows is a brilliant way to display information about a certain location. Since they provides you with a space to put text or whatever HTML you please, they can be used in very interesting ways. In this article, which is the fourth in a series about Google Maps API 3, I will show you [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2009/06/gmmlogo.gif" alt="" class="alignright size-full wp-image-1991" />Using InfoWindows is a brilliant way to display information about a certain location. Since they provides you with a space to put text or whatever <acronym title="HyperText Markup Language">HTML</acronym> you please, they can be used in very interesting ways. In this article, which is the fourth in a series about Google Maps <acronym title="Application Programming Interface">API</acronym> 3,  I will show you how to make good use of this great feature. </p>
<p><span id="more-2208"></span></p>
<h3 class="clear">The InfoWindow object</h3>
<p>The InfoWindow object will open an InfoWindow somewhere on a map. It looks like a speech bubble and the tip of its stem typically points to a certain object on the map. Often it&#8217;s pointing at a marker, but it doesn&#8217;t have to be. It can point at any other object or any coordinate on the map.</p>
<p>The object resides in the <code>google.map.InfoWindow</code> namespace and takes an optional argument which is <code>options</code>. Options is an object literal in which you can define all the properties for the InfoWindow. This means that you can create an empty InfoWindow object for later use, but most of the time you&#8217;ll probably want to fill it with some sort of content right away. To fill it with content you&#8217;ll need to use the property <code>content</code>. It can be set either on creation of the object or afterwards using the <code>setContent()</code> method. It can be either a text string, a string containing <acronym title="HyperText Markup Language">HTML</acronym>, or a reference to an existing <acronym title="HyperText Markup Language">HTML</acronym> node.</p>
<h4>Setting the scene</h4>
<p>We will start with a map with one marker on it. If you don&#8217;t know how to create a map and add markers to it, I suggest that you read the <a href="http://www.svennerberg.com/series/google-maps-api-3/">previous articles in this series</a> first.</p>
<p>For those of you that are already familiar with the concepts, here&#8217;s the code for creating a map and adding a marker to it:</p>
<pre name="code" class="js">
// Creating an option object for the map
var options = {
	zoom: 7,
	center: new google.maps.LatLng(56.83, 15.16),
	mapTypeId: google.maps.MapTypeId.ROADMAP
};
// Initializing the map
var map = new google.maps.Map(document.getElementById('map'), options);
// Creating a marker
var marker = new google.maps.Marker({
  position: new google.maps.LatLng(56.8848, 14.7730),
  map: map,
  title: 'My workplace'
});
</pre>
<p>This will result in a map that looks like this:</p>
<p><img src="http://media.svennerberg.com/2009/09/InfoWindowHidden.png" alt="" class="alignnone size-full wp-image-2256" /></p>
<h4>Adding an InfoWindow</h4>
<p>Now that we have the scene set, lets add an InfoWindow to it. In this example we will instantly fill the InfoWindow with some content, in this case the classic text string &#8220;Hello world&#8221;:</p>
<pre name="code" class="js">
// Creating an InfoWindow object
var infowindow = new google.maps.InfoWindow({
  content: 'Hello world'
});
</pre>
<h4>Showing the InfoWindow</h4>
<p>We have now created an InfoWindow object but not yet added it to the map. To make it appear we have to first open it and that&#8217;s done with its method <code>open()</code>. This method takes two arguments: the map object which it will be added to and optionally an anchor where it will point to. The anchor must be an object on the map that exposes a position property. As of now this will probably be a marker.</p>
<p>If you don&#8217;t pass on the second argument you must provide the InfoWindow object with a position. This is done with either the attribute <code>position</code> in options or via its <code>setPosition()</code> method. In this example however, we will pass our marker as the second argument so that the InfoWindow will point straight at it.</p>
<pre name="code" class="js">
infowindow.open(map, marker);
</pre>
<p>Now the InfoWindow will be visible on the map and will look like this:</p>
<p><img src="http://media.svennerberg.com/2009/09/InfoWindow.png" alt="" class="alignnone size-full wp-image-2254" /></p>
<p>Note that the default behavior of the map is that it pans so that all of the InfoWindow is visible. This behavior can be overridden by setting the property <code>disableAutoPan</code> to <code>false</code>.</p>
<h4>Adding a click event</h4>
<p>As of now our InfoWindow is automatically opened when our map loads. Most of the time we want it to open when something is clicked and that&#8217;s exactly the functionality we&#8217;re going to add next. We&#8217;re going to add a click event to the marker so that when it&#8217;s being clicked the InfoWindow will open.</p>
<p>To add an event to the marker we will need to use the <code>addListener()</code> method found in <code>google.maps.event</code>. This method takes 3 arguments, the first one being the object it will be attached to, in this case the <em>marker</em>. The second argument defines what kind of event we want to add, in this case a <em>click</em> event. The third argument is a function which will be called when the event is being triggered. In this case we will use an anonymous function and we will move the code that opens the InfoWindow inside it.</p>
<p>Doing that the code will look like this:</p>
<pre name="code" class="js">
google.maps.event.addListener(marker, 'click', function() {
  infowindow.open(map, marker);
});
</pre>
<p>Now, when we load our page the InfoWindow will not be visible until we click the marker. Then it will pop up.</p>
<h3>Using multiple InfoWindows</h3>
<p>You may have noticed that we create the InfoWindow outside the click event of the marker. Perhaps you&#8217;re thinking that we might as well could have put all of the code regarding the InfoWindow inside it. But there&#8217;s a good reason for not doing that. By creating the InfoWindow outside the event handler, we ensure that there only exists one InfoWindow at a time. If we had put the code for creating the InfoWindow inside the event handler we would have created a new InfoWindow each time the marker was clicked. Leaving us with several identical InfoWindows on top of each other. </p>
<p>Now there are ways to deal with this. We could for example check if the InfoWindow existed before creating it, but by creating it only once we completely avoid the problem all together.</p>
<p>If you&#8217;ve been programming in version 2 of the Google Maps <acronym title="Application Programming Interface">API</acronym> you&#8217;ll notice a significant difference here. In the old <acronym title="Application Programming Interface">API</acronym> we could only have one InfoWindow at a time, but now we can have several. Because of this we have to change how we think about them. There might be occasions when we want to display several of them at once, but often we will only want to display them one at a time.</p>
<h3>More control over the Info Window</h3>
<p>There are some other properties that you can add to options for added control of the InfoWindow. I&#8217;ve already mentioned <code>content</code> which defines what will be displayed inside of it and <code>position</code> which in lack of an anchor defines the position of the InfoWindow. But here&#8217;s all of the properties available for controlling the look and behavior of the InfoWindow:</p>
<h4>content</h4>
<p>This property defines the content of the InfoWindow. It can be either plain text, <acronym title="HyperText Markup Language">HTML</acronym> or a reference to an existing <acronym title="HyperText Markup Language">HTML</acronym> element. The InfoWindow will automatically adjust its size to fit the content.</p>
<h4>disableAutoPan [boolean]</h4>
<p>If set to <code>true</code> the map is no longer automatically panned to fit the InfoWindow. Default value is <code>false</code>. </p>
<h4>maxWidth [number]</h4>
<p>Sets the maximum width of the InfoWindow in pixels. It must be set before the InfoWindow is opened. </p>
<p>Another way of controlling the size of the InfoWindow is to add <acronym title="HyperText Markup Language">HTML</acronym> with certain dimensions to it. This way you can control its size from you <acronym title="Cascading Style Sheets">CSS</acronym>.</p>
<h4>pixelOffset [size]</h4>
<p>If position is used to place the InfoWindow, pixelOffset defines how far away from this point the window should be positioned.</p>
<h4>position [LatLng]</h4>
<p>Defines the position the InfoWindow should be pointing at. If an anchor (the second argument of the open() method is set, it will override this property.</p>
<h4>zIndex [number]</h4>
<p>When displaying multiple InfoWindows at the same time, this property will determine the stack order of those.</p>
<h3>Live demo</h3>
<p><a href="http://www.svennerberg.com/examples/google_maps_3/info_windows.html" title="Google Maps API 3 - InfoWindows"><img src="http://media.svennerberg.com/2009/09/screendump_info_windows-410x458.png" alt=""  class="alignnone size-medium wp-image-2261" /></a></p>
<p><a href="http://www.svennerberg.com/examples/google_maps_3/info_windows.html" title="Google Maps API 3 - InfoWindows">Check out the Live Demo</a> showing the example used in this article.</p>
<p>Hopefully this article has provided you with a basic understanding of how to use InfoWindows in your maps but there are a lot more that can be done with them. They still lack a lot of the functionality found in the old <acronym title="Application Programming Interface">API</acronym>, like displaying a detail map inside it or having tabbed content. Some of these features will probably never find its way into the new <acronym title="Application Programming Interface">API</acronym> but fortunately it&#8217;s quite easy to build this functionality yourself. Keep your eyes open for my upcoming book where I will explain how to do some of this stuff.</p>
<h3>Further reading</h3>
<p>For more information about the InfoWindow object, check out the <a href="http://code.google.com/intl/sv-SE/apis/maps/documentation/v3/reference.html#InfoWindow" title="Google Maps API V3 Reference - InfoWindow">Official Google Maps Reference</a>. You might also want to check out the section in the documentation about <a href="http://code.google.com/apis/maps/documentation/v3/overlays.html#InfoWindows" title="Maps API V3 Overlays">Overlays</a>.</p>
<div class="book_push">
<img src="http://media.svennerberg.com/2009/09/bgma3-70.png" alt="" /></p>
<h3>My Google Maps book</h3>
<p>If you found this article useful you might be interested in my book <a href="/bgma3/" title="Read more about my book - Beginning Google Maps API 3"><strong>Beginning Google Maps <acronym title="Application Programming Interface">API</acronym> 3</strong></a>. It covers everything you need to know to create awesome maps on your web sites. <a href="http://www.amazon.com/gp/product/1430228024?ie=UTF8&#038;tag=inusabiwetrus-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=1430228024" title="Buy Beginning Google Maps Applications from Amazon.com">Buy it on Amazon.com</a><img src="http://www.assoc-amazon.com/e/ir?t=inusabiwetrus-20&#038;l=as2&#038;o=1&#038;a=1430228024" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2009/09/google-maps-api-3-infowindows/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
	
		<series:name><![CDATA[Google Maps API 3]]></series:name>
	</item>
		<item>
		<title>Google Maps API 3 &#8211; Markers</title>
		<link>http://www.svennerberg.com/2009/07/google-maps-api-3-markers/</link>
		<comments>http://www.svennerberg.com/2009/07/google-maps-api-3-markers/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 17:51:33 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[Google Maps API 3]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=2115</guid>
		<description><![CDATA[Markers are the perfect way to put places of interest on a map and that’s probably one of the most used features in digital maps. In this article, which is the third in a series about Google Maps API 3, I will show you how to use them in Google Maps API 3. If you [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2009/06/gmmlogo.gif" alt="" class="alignright" />Markers are the perfect way to put places of interest on a map and that’s probably one of the most used features in digital maps. In this article, which is the third in a series about Google Maps <acronym title="Application Programming Interface">API</acronym> 3, I will show you how to use them in Google Maps <acronym title="Application Programming Interface">API</acronym> 3.</p>
<p><span id="more-2115"></span></p>
<p>If you aren&#8217;t already familiar with the map object, I recommend that you first read the two previous articles in this series.</p>
<h3 class="clear">The marker object</h3>
<p>The marker object resides in the <code>google.maps.Marker</code> namespace and takes a single argument, options. Options is an object literal called <code>Marker options</code> that can have several properties of which two are required:</p>
<ul>
<li><strong>map [Map]</strong><br />
Map is a reference to the map where you want to add the marker.</li>
<li><strong>position [LatLng]</strong><br />
This property indicates the position of the marker and is of type <code>google.maps.LatLng</code></li>
</ul>
<p>Lets start by creating a map and adding a regular marker with the standard look and behavior. If you&#8217;ve read the prior articles in this series you should already be familiar with the code that creates the map. Please note that I&#8217;ve used a somewhat more compact syntax here than in previous examples.</p>
<pre name="code" class="js">
// Creating a map
var map = new google.maps.Map(document.getElementById('map'), {
  zoom: 7,
  center: new google.maps.LatLng(56.83, 15.16),
  mapTypeId: google.maps.MapTypeId.ROADMAP
});

// Creating a marker and positioning it on the map
var marker = new google.maps.Marker({
  position: new google.maps.LatLng(56.8848, 14.7730),
  map: map
});
</pre>
<p>This code would result in a marker being added to the map, incidentally marking the place where I work. Note that the marker is immediately added to the map upon creation. So there&#8217;s no need, like in the old <acronym title="Application Programming Interface">API</acronym>, to explicitly add it to the map after it has been created.</p>
<p><img src="http://media.svennerberg.com/2009/07/marker.png" alt="" class="alignnone" /></p>
<h3>Adding a tooltip</h3>
<p>A common thing one might want to do is to add a tooltip to the marker. The tooltip is displayed when a user hovers with the mouse pointer over the marker. This is easily done by adding the property <code>title</code> to the marker options object. </p>
<p>Since this marker won&#8217;t be clickable I want to somehow indicate this. That is done by setting the property <code>clickable</code> to <code>false</code>. This results in that the mouse cursor won&#8217;t change on hover. </p>
<pre name="code" class="js">
var marker = new google.maps.Marker({
  position: new google.maps.LatLng(56.8848, 14.7730),
  map: map,
  title: 'My workplace',
  clickable: false
});
</pre>
<p>Here&#8217;s how this will look like on the map.</p>
<p><img src="http://media.svennerberg.com/2009/07/marker_tooltip.png" alt="" class="alignnone" /></p>
<h4>Definition</h4>
<ul>
<li><strong>title [string]</strong><br />
Sets the tooltip of the marker.</li>
<li><strong>clickable [boolean]</strong><br />
Defines whether the marker is clickable/draggable or not. If set to <code>false</code> it will not display a special mouse cursor on hover. Default value is <code>true</code>.</li>
</ul>
<h3>Changing the default marker icon</h3>
<p>Often we want to use a different marker than the default one. The <acronym title="Application Programming Interface">API</acronym> offers a simple way of doing this with the property <code>icon</code>. <code>Icon</code>takes either an <acronym title="Uniform Resource Locator">URL</acronym> pointing to an image or a <code>MarkerIcon</code> as its value. In this example I will use the more simpler, <acronym title="Uniform Resource Locator">URL</acronym>, and point it to this image.</p>
<p><img src="http://google-maps-icons.googlecode.com/files/factory.png" alt="" class="alignnone" /></p>
<p>This icon is taken from Nicolas Mollet&#8217;s map icon set at <a href="http://code.google.com/p/google-maps-icons/">http://code.google.com/p/google-maps-icons/</a>. There&#8217;s lots of similiar icons that you can use. </p>
<p>Here&#8217;s the code for creating a marker with a custom marker icon.</p>
<pre name="code" class="js">
var marker = new google.maps.Marker({
  position: new google.maps.LatLng(56.8848, 14.7730),
  map: map,
  title: 'My workplace',
  clickable: false,
  icon: 'http://google-maps-icons.googlecode.com/files/factory.png'
});
</pre>
<p>Now the map and the marker will look like this:</p>
<p><img src="http://media.svennerberg.com/2009/07/marker_custom_icon.png" alt="" class="alignnone" /></p>
<p>There are some other properties for more advanced control of the marker icon, such as <code>shadow</code> and <code>shape</code>. <code>Shadow</code> defines the shadow cast by the icon and <code>shape</code> defines the clickable/draggable area of the marker but I will not explain them further in this article.</p>
<h4>Definition</h4>
<ul>
<li><strong>icon [string|MarkerImage]</strong><br />
Defines the marker icon. It can either be an <acronym title="Uniform Resource Locator">URL</acronym> pointing to a suitable image or an object of type MarkerImage.</li>
<li><strong>shadow [string|MarkerImage]</strong><br />
Sets the shadow of a marker icon. Takes either an <acronym title="Uniform Resource Locator">URL</acronym> or a <code>MarkerImage</code> as its value.</li>
<li><strong>shape [object]</strong><br />
Defines the clickable/draggable area of a marker. It takes an object as its value. The object contains coordinates that define a polygon much the same way an imageMap is defined.</li>
<li><strong>flat [boolean]</strong><br />
If set to <code>true</code> disables the shadow of the marker.</li>
</ul>
<p class="note"><strong>Note:</strong> By explicitly setting <code>icon</code>, the property <code>shadow</code> is reset. So even if we don&#8217;t provide <code>shadow</code> with a value, it will not inherit the shadow of the default marker. I could be argued that in this case the property <code>flat</code> should be set to <code>true</code>, but it&#8217;s not necessary for the marker to not have a shadow.</p>
<h3>Other properties</h3>
<p>Additionally there are a few other properties you can use to control the marker.</p>
<ul>
<li><strong>cursor [string]</strong><br />
This property changes the way the cursor look when the mouse pointer hovers over the marker.</li>
<li><strong>visible [boolean]</strong><br />
This property determains if the marker should be visible or not. Set it to <code>false</code> to make the marker invisible. The default value is <code>true</code>.</li>
<li><strong>zIndex [number]</strong><br />
Sets the stack order of markers. Could be handy if several markers sits on top of each other.</li>
</ul>
<h3>Live demo</h3>
<p><a href="http://www.svennerberg.com/examples/google_maps_3/markers.html"><img src="http://media.svennerberg.com/2009/07/markers_screenshot-410x440.png" alt="" class="alignnone" /></a></p>
<p>Be sure to checkout the <a href="http://www.svennerberg.com/examples/google_maps_3/markers.html">Live Demo</a> to see the code shown in this article in action. </p>
<h3>Other resources</h3>
<p>For a full and most recent definition of the marker object check out the <a href="http://code.google.com/intl/sv-SE/apis/maps/documentation/v3/reference.html#Marker" title="Google Maps API Reference"><acronym title="Application Programming Interface">API</acronym> reference</a>. Also check out the section about <a href="http://code.google.com/intl/sv-SE/apis/maps/documentation/v3/overlays.html" title="Maps API V3 Overlays">overlays</a> in the documentation.</p>
<div class="book_push">
<img src="http://media.svennerberg.com/2009/09/bgma3-70.png" alt="" /></p>
<h3>My Google Maps book</h3>
<p>If you found this article useful you might be interested in my book <a href="/bgma3/" title="Read more about my book - Beginning Google Maps API 3"><strong>Beginning Google Maps <acronym title="Application Programming Interface">API</acronym> 3</strong></a>. It covers everything you need to know to create awesome maps on your web sites. <a href="http://www.amazon.com/gp/product/1430228024?ie=UTF8&#038;tag=inusabiwetrus-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=1430228024" title="Buy Beginning Google Maps Applications from Amazon.com">Buy it on Amazon.com</a><img src="http://www.assoc-amazon.com/e/ir?t=inusabiwetrus-20&#038;l=as2&#038;o=1&#038;a=1430228024" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2009/07/google-maps-api-3-markers/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
	
		<series:name><![CDATA[Google Maps API 3]]></series:name>
	</item>
		<item>
		<title>Google Maps API 3 – Map settings</title>
		<link>http://www.svennerberg.com/2009/06/google-maps-api-3-map-settings/</link>
		<comments>http://www.svennerberg.com/2009/06/google-maps-api-3-map-settings/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 19:48:10 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=2004</guid>
		<description><![CDATA[In the first article in this series we discussed how to create a simple Map with Google Maps API 3. In this article we will explore the available properties when creating a map and see how we can change the look and behaviour of the map with the help of them. The required properties As [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2009/06/gmmlogo.gif" alt="" class="alignright size-full wp-image-1991" />In the first article in this series we discussed how to create a simple Map with Google Maps <acronym title="Application Programming Interface">API</acronym> 3. In this article we will explore the available properties when creating a map and see how we can change the look and behaviour of the map with the help of them.</p>
<p><span id="more-2004"></span></p>
<h3 class="clear">The required properties</h3>
<p>As we saw in the last article there are 3 required properties when creating a map. These are: </p>
<ul>
<li><strong>center</strong><br />
Takes a coordinate in the form of a <code>google.maps.LatLng</code> that defines the center of the map</li>
<li><strong>zoom</strong><br />
Sets the initial zoom level of the map. It have to be an integer between 0 and 19 where 0 is fully zoomed out and 19 is fully zoomed in.</li>
<li><strong>mapTypeId</strong><br />
Takes a constant of type <code>google.maps.MapTypeId</code> that defines what the initial map type would be</li>
</ul>
<p>It&#8217;s pretty obvious how the two first properties work, but the last one, mapTypeId, requires a brief explanation. What it does is to tell the map what kind of map to display by providing it with a constant. There are a few map types to choose from and they are all contained in the namespace <code>google.maps.MapTypeId</code>. These are:</p>
<ul>
<li><strong>ROADMAP</strong><br />
A normal map</li>
<li><strong>SATELLITE</strong><br />
Satellite images </li>
<li><strong>HYBRID</strong><br />
Displays satellite images with roads and labels overlayed on it</li>
<li><strong>TERRAIN</strong><br />
Displays a map with physical features such as terrain and vegetation</li>
</ul>
<p>So for example, constructing a simple map with the maptype SATELLITE is done like this:</p>
<pre name="code" class="js">
// Creating an object literal containing the properties we want to pass to the map
var options = {
  zoom: 6,
  center: new google.maps.LatLng(57.8, 14.0),
  mapTypeId: google.maps.MapTypeId.SATELLITE
};
// Calling the constructor, thereby initializing the map
var map = new google.maps.Map(document.getElementById('map'), options);
</pre>
<p>That code would produce a map that looks something like this.<br />
<img src="http://media.svennerberg.com/2009/06/sattelite.png" alt="" class="alignnone" /></p>
<h3>Controlling the UI</h3>
<p>Note that some user controls are displayed on the map by default. In the old <acronym title="Application Programming Interface">API</acronym> you had to explicitly define which controls that would show but in version 3 it works the other way around, you have to explicitly define which controls <strong>not</strong> to show. </p>
<h4>disableDefaultUI [boolean]</h4>
<p>Default value is <code>false</code>. By setting this to <code>true</code> you will disable the default UI. That is: the default zoom control and the map type chooser will not be displayed, much as the default behavior in the old <acronym title="Application Programming Interface">API</acronym>. You can however also enable or disable these controls individually.</p>
<h4>mapTypeControl [boolean]</h4>
<p>With this property you control whether the mapTypeControl will be displayed or not. The mapTypeControl is the control positioned in the upper right corner of the map from which you can choose what map type to show. Set it to <code>true</code> to display it and to <code>false</code> to hide it. The default value is <code>true</code>.</p>
<h4>mapTypeControlOption</h4>
<p>With this property you control how the mapTypeControl will be displayed. It can have one of the following values which all resides in the <code>google.maps.MapTypeControlStyle</code> namespace.</p>
<ul>
<li><strong>DEFAULT</strong><br />
The DEFAULT value will vary the look of the mapTypeControl depending of the size of the window and possibly other factors. </li>
<li><strong>HORIZONTAL_BAR</strong><br />
This option will display the standard bar.<br />
<img src="http://media.svennerberg.com/2009/06/horizontal_bar.png" alt="" class="alignnone" />
</li>
<li><strong>DROPDOWN_MENU</strong><br />
This will display the control as a drop-down list. It can be handy if the map is small or you want it to take as little space as possible for some other reason. It currently looks a little weird since the arrow is positioned over the text, but I suspect that it&#8217;s a temporary glitch that will be fixed in future releases.<br />
<img src="http://media.svennerberg.com/2009/06/dropdown_menu.png" alt="" class="alignnone" />
</li>
</ul>
<p>If for example you want this control to display like a drop-down menu you define it like this:</p>
<pre name="code" class="js">
var options = {
  zoom: 6,
  center: new google.maps.LatLng(57.8, 14.0),
  mapTypeId: google.maps.MapTypeId.ROADMAP,
  mapTypeControlOptions: {
    style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
  }
};
</pre>
<p>Note that its parameter is an object literal with one property, <code>style</code>, which takes one of the constants in <code>google.maps.MapTypeControlStyle</code> as its value. This design might seem a little cumbersome at first but is actually pretty smart. It makes it easy to add more settings for the map type control in future releases of the <acronym title="Application Programming Interface">API</acronym>.</p>
<h4>navigationControl [boolean]</h4>
<p>This property displays or hides the navigation control. That is the control that typically resides in the upper left part of the map with which you can zoom and sometimes pan the map. Its appearance has changed a bit since the old version of the <acronym title="Application Programming Interface">API</acronym> but essentially works the same way. The major difference being that in the old <acronym title="Application Programming Interface">API</acronym> the large control had a &#8220;reset&#8221; button that reset the map to its initial state. This feature has been dropped in the new <acronym title="Application Programming Interface">API</acronym> for unknown reasons.</p>
<h4>navigationControlOptions</h4>
<p>The style of the navgationControl comes in 4 flavors that all resides in the 					  <code>google.maps.NavigationControlStyle</code> namespace. These are:</p>
<ul>
<li><strong>DEFAULT</strong><br />
If set to this value, the control will vary according the map size and other factors. As of now that means that it will either display the small or the large control but that might change in future releases.</li>
<li><strong>SMALL</strong><br />
This is the small control that only lets you to zoom the map.<br />
<img src="http://media.svennerberg.com/2009/06/szc3d.png" class="alignnone size-full wp-image-2057" /></li>
<li><strong>ANDROID</strong><br />
This control looks like the SMALL one, but is supposed to be specifically tailored for the Android mobile platform.</li>
<li><strong>ZOOM_PAN</strong><br />
This is the large control that lets you to both zoom and pan the map.<br />
<img src="http://media.svennerberg.com/2009/06/zoom_pan.png" alt="" class="alignnone size-full wp-image-2068" /></li>
</ul>
<p>Here&#8217;s some example code on how to display the large control (zoom_pan).</p>
<pre name="code" class="js">
var options = {
  zoom: 6,
  center: new google.maps.LatLng(57.8, 14.0),
  mapTypeId: google.maps.MapTypeId.ROADMAP,
  navigationControlOptions: {
    style: google.maps.NavigationControlStyle.ZOOM_PAN
  }
};
</pre>
<h4>scaleControl [boolean]</h4>
<p>This property determines whether the scale control will be displayed or not. Set it to <code>true</code> to display the control and <code>false</code> to hide it. This control is not displayed by default, so if you want it to show you have to explicitly set this property to <code>true</code>.</p>
<p>The scale control is typically positioned in the lower left corner of the map and are used to get a sense of the scale of the map. It looks like this:<br />
<img src="http://media.svennerberg.com/2009/06/scale_control.png" alt="" class="alignnone" /></p>
<h4>scaleControlOptions</h4>
<p>You can control how the scale control will be displayed with the help of this property. It currently only has one option which is <code>STANDARD</code> so there&#8217;s really not much you can do, but this might change in future releases.</p>
<h4>keyboardShortcuts [boolean]</h4>
<p>There are some keyboard shortcuts for controlling the map. These are the arrowkeys for panning and +/- for zooming.</p>
<p>Default value is <code>true</code>. If set to <code>false</code> it will disable the keyboard shortcuts. </p>
<h3>Map div behavior</h3>
<p>The Map div is the <acronym title="HyperText Markup Language">HTML</acronym> element that contains the map. Typically it&#8217;s a <code>
<div></code> with <code>id="map"</code> or something similar. There are some properties that controls the behavior of this.</p>
<h4>noClear [boolean]</h4>
<p>The default setting of this is false, and what it does is to clear the content of the div that contains the map. If set to <code>true</code> it will not clear the initial content of it.</p>
<h4>backgroundColor [string]</h4>
<p>This property also affects the map div. It sets the color of the div&#8217;s background which shows when you pan the map and before the map tiles have been loaded.</p>
<h4>noResize [boolean]</h4>
<p>Default value is <code>false</code>. If set to <code>true</code> it prevents the map from doing automatic resize checking.</p>
<h3>Cursor behavior</h3>
<p>Finally there are a couple of properties to control how the cursor will look like. These are:</p>
<h4>draggableCursor</h4>
<p>Sets the name or <acronym title="Uniform Resource Locator">URL</acronym> of the cursor that is displayed on a draggable object.</p>
<h4>draggingCursor</h4>
<p>Sets the name or <acronym title="Uniform Resource Locator">URL</acronym> of the cursor that is displayed when an object is dragged.</p>
<p class="note"><strong>Note:</strong> As of the time of writing these properties doesn&#8217;t seem to work properly. This will hopefully be fixed in a near future.</p>
<h3>Live Demo</h3>
<p>I&#8217;ve put together a Live Demo where you can try out some of the properties of the map and see how they affect it.</p>
<div class="image">
<a href="http://www.svennerberg.com/examples/google_maps_3/properties.php" title="Google Maps API 3 - Properties"><img src="http://media.svennerberg.com/2009/06/properties_screenshot-410x430.png" alt="properties_screenshot" class="alignnone size-medium wp-image-2082" /></a><br />
<a href="http://www.svennerberg.com/examples/google_maps_3/properties.php" title="Google Maps API 3 - Properties">Try out the Live Demo</a>
</div>
<h3>Conclusion</h3>
<p>In this article we&#8217;ve examined the properties available when initializing a map in Google Maps <acronym title="Application Programming Interface">API</acronym> 3. These properties affect the look and behavior of the map. There are additional methods that can be used to alter these properties, but they will be covered in a future article. In the next article we will look at how to work with markers in the new <acronym title="Application Programming Interface">API</acronym>.</p>
<div class="book_push">
<img src="http://media.svennerberg.com/2009/09/bgma3-70.png" alt="" /></p>
<h3>My Google Maps book</h3>
<p>If you found this article useful you might be interested in my book <a href="/bgma3/" title="Read more about my book - Beginning Google Maps API 3"><strong>Beginning Google Maps <acronym title="Application Programming Interface">API</acronym> 3</strong></a>. It covers everything you need to know to create awesome maps on your web sites. <a href="http://www.amazon.com/gp/product/1430228024?ie=UTF8&#038;tag=inusabiwetrus-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=1430228024" title="Buy Beginning Google Maps Applications from Amazon.com">Buy it on Amazon.com</a><img src="http://www.assoc-amazon.com/e/ir?t=inusabiwetrus-20&#038;l=as2&#038;o=1&#038;a=1430228024" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2009/06/google-maps-api-3-map-settings/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<series:name><![CDATA[Google Maps API 3]]></series:name>
	</item>
		<item>
		<title>Google Maps API 3 &#8211; The basics</title>
		<link>http://www.svennerberg.com/2009/06/google-maps-api-3-the-basics/</link>
		<comments>http://www.svennerberg.com/2009/06/google-maps-api-3-the-basics/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 06:29:09 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[Google Maps API 3]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=1948</guid>
		<description><![CDATA[The Google Maps API has evolved to version 3. This version is a complete rewrite and focuses primarily on speed. The new API also features new ways of using it. This article is the first in a series exploring version 3 of the Google Maps API. This first article will take a look on how [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2009/06/gmmlogo.gif" alt="gmmlogo" title="gmmlogo" width="48" height="48" class="alignright size-full wp-image-1991" />The Google Maps <acronym title="Application Programming Interface">API</acronym> has evolved to version 3. This version is a complete rewrite and focuses primarily on speed. The new <acronym title="Application Programming Interface">API</acronym> also features new ways of using it. This article is the first in a series exploring version 3 of the Google Maps <acronym title="Application Programming Interface">API</acronym>. This first article will take a look on how to create a simple map and explain some differences from the previous version.</p>
<p><span id="more-1948"></span></p>
<h3 class="clear">Background information</h3>
<p>First of all, this is an early release of the new <acronym title="Application Programming Interface">API</acronym> and it&#8217;s still in Labs. It doesn&#8217;t contain all the features of the old <acronym title="Application Programming Interface">API</acronym> and will probably never do so since the old <acronym title="Application Programming Interface">API</acronym> is bloated with lots of helper methods for doing all sorts of things like making <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> calls and showing log windows. Nowadays we have libraries like <a href="http://www.jquery.com/">jQuery</a> and <a href="http://www.prototypejs.org/">Prototype</a> and tools such as <a href="http://getfirebug.com/">Firebug</a> to take care of these things. Therefor these features will not be included in the new <acronym title="Application Programming Interface">API</acronym>, since it&#8217;s main focus is to be streamlined in order to be as fast as possible. Other missing features such as polygons and polylines will however probably eventually be included.</p>
<p>Secondly, since it&#8217;s an early release it&#8217;s still undergoing major changes. Features will be added as we go along and some changes of how to do certain things might be introduced.</p>
<p>That said, I think that the new <acronym title="Application Programming Interface">API</acronym> is mature enough to use and certainly to experiment with. It also contains the most common features seen in implementations on Google Maps on the Web. </p>
<p>Enough with the background info already! Let&#8217;s take a look of what the new <acronym title="Application Programming Interface">API</acronym> looks like.</p>
<h3>Inserting a reference to the <acronym title="Application Programming Interface">API</acronym></h3>
<p>The first thing you will notice is that <strong>the <acronym title="Application Programming Interface">API</acronym> key is no longer necessary</strong>. In the previous versions the <acronym title="Application Programming Interface">API</acronym> key was inserted as a querystring into the script reference but not so anymore. This means that you don&#8217;t have to apply for a new <acronym title="Application Programming Interface">API</acronym> key for every domain you want to have a map at. It also means that the <acronym title="Uniform Resource Identifier">URI</acronym> to the <acronym title="Application Programming Interface">API</acronym> is a lot shorter. </p>
<p>So the only thing you have to tell, while referencing the <acronym title="Application Programming Interface">API</acronym>, is whether your device has a sensor or not. <code>sensor=false</code> if you don&#8217;t have a sensor and <code>sensor=true</code> if you do. With a sensor is meant some way to determine your present location, like if you have a GPS in your device. This information is attached as querystring at the end of the <acronym title="Uniform Resource Identifier">URI</acronym>.</p>
<pre name="code" class="html">
&lt;script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"&gt;&lt;/script&gt;
</pre>
<h3>Creating a map</h3>
<h4>A new namespace</h4>
<p>In previous versions of the <acronym title="Application Programming Interface">API</acronym> there were lots of global variables, distinguishing them selfs by having  a capital G in the beginning, like <code>GMap</code> and <code>GLatLng</code>. In the new <acronym title="Application Programming Interface">API</acronym> the namespace <code>google.maps</code> is used. So what was formerly called <code>GLatLng</code> is now called <code>google.maps.LatLng</code>. Using namespaces is good coding praxis. One should avoid cluttering the global namespace as much as possible in order to avoid collisions with other code. Read more about why in <a href="http://www.svennerberg.com/2009/02/global-variables-in-javascript/">Global variables in Javascript</a>.</p>
<p>So in practical terms, here&#8217;s how to create a new coordinate object the old way and how to do it the new way. The <code>LatLng()</code> method takes two arguments, an x and an y coordinate.</p>
<pre name="code" class="js">
// The old way
var latlng = new GLatLng(57.8, 14.0);
// The new way
var latlng = new google.maps.LatLng(57.8, 14.0);
</pre>
<h4>Object literals</h4>
<p>The new <acronym title="Application Programming Interface">API</acronym> makes <strong>heavy use of object literals to pass arguments</strong> to it&#8217;s methods. The old <acronym title="Application Programming Interface">API</acronym> used object literals as well, but in this version they&#8217;ve taken it a step further which I think is positive. I think this is a really beautiful way of coding.  It&#8217;s easy to use, easy to maintain and easy to expand. For you who doesn&#8217;t know what an object literal is, it looks like this:</p>
<pre name="code" class="js">
var myObj = {
  id: '1',
  name: 'Whatever'
};
alert(myObj.name); // Will alert Whatever
</pre>
<p>It&#8217;s basically a fast and easy way to create a Javscript object. Some of you might also recognize it as <a href="http://www.json.org/js.html" title="JSON in JavaScript">JSON</a>, and that&#8217;s exactly what it is. JSON stands for Javascript Object Notation and is in fact a Javascript Object.</p>
<h4>Initializing the map</h4>
<p>To initialize the map we need to call the constructor of the Map class. It takes two arguments the first one being a reference to a <acronym title="HyperText Markup Language">HTML</acronym> elemtn where you want the map to be inserted (often <code>&lt;div id="map"&gt;</code>) and the second one being an object literal (options) containing a set of properties. </p>
<p>This is much like how it works in the old <acronym title="Application Programming Interface">API</acronym>. The big difference is that in the old <acronym title="Application Programming Interface">API</acronym> you had to call the method <code>setCenter()</code> immediately after calling the constructor in order for the map to display. <code>setCenter()</code> told the map what location would be the center of the map and what  the initial zoom level would be. In the new <acronym title="Application Programming Interface">API</acronym> this is not neccesary since both these properties are passed in the option parameter. So instead of making two calls, you now have to do only one. An approach that I think makes a lot more sense.</p>
<p>Before we get into the details of what properties <code>option</code> contains, lets have a look at what the code to create a map looks like.</p>
<pre name="code" class="js">
// Creating a LatLng object containing the coordinate for the center of the map
var latlng = new google.maps.LatLng(57.8, 14.0);
// Creating an object literal containing the properties we want to pass to the map
var options = {
  zoom: 6,
  center: latlng,
  mapTypeId: google.maps.MapTypeId.ROADMAP
};
// Calling the constructor, thereby initializing the map
var map = new google.maps.Map(document.getElementById('map'), options);
</pre>
<h4>Options</h4>
<p>The option parameter is, as mentioned before, an object literal containing the properties we want to pass to the map object. There are three required properties that must be passed to the map on initialization. These are:</p>
<ul>
<li><strong>center</strong><br />
This property sets the center of the map and takes a coordinate of the type google.maps.LatLng</li>
<li><strong>zoom</strong><br />
This is a number that sets the initial zoom-level of the map</li>
<li><strong>mapTypeId</strong><br />
This property sets what kind of map type that would initially be used. The most common type is google.maps.MapTypeId.ROADMAP</li>
</ul>
<p>There are of course lots of other properties that you can use when initializing the map, including which controls to display and which features to enable or disable. For a full list see <a href="http://code.google.com/intl/sv-SE/apis/maps/documentation/v3/reference.html#Map%20options" title="Google Maps JavaScript API V3 - Map options">the documentation</a>.</p>
<h3>Live example</h3>
<div class="image">
<a href="http://www.svennerberg.com/examples/google_maps_3/"><img src="http://media.svennerberg.com/2009/06/simple_map_example-410x452.png" alt="simple_map_example" title="simple_map_example" width="410" height="452" class="alignnone size-medium wp-image-1972" /></a></p>
<p>A live demonstration of a simple map</p>
</div>
<p>I&#8217;ve put together a <a href="http://www.svennerberg.com/examples/google_maps_3/">live example</a> of how to add a Google Map v3 on a web page.</p>
<h3>Conclusion</h3>
<p>In conclusion I would say that the Google Maps <acronym title="Application Programming Interface">API</acronym> team has done several things right here. First of all by using a proper namespace, thereby not cluttering the global namespace. Secondly by heavy use of object literals to pass arguments. This way the <acronym title="Application Programming Interface">API</acronym> is more consistent and also easier to expand in future releases. </p>
<p>Please note that the <acronym title="Application Programming Interface">API</acronym> is still under development and is still undergoing changes. The way it works might change before the final release.</p>
<p>This is the first article in a series about the Google Maps <acronym title="Application Programming Interface">API</acronym> V3, so keep your eyes open for the next one which will explore the different properties for the map object and how you can use these to make the map behave and look differently.</p>
<div class="book_push">
<img src="http://media.svennerberg.com/2009/09/bgma3-70.png" alt="" /></p>
<h3>My Google Maps book</h3>
<p>If you found this article useful you might be interested in my book <a href="/bgma3/" title="Read more about my book - Beginning Google Maps API 3"><strong>Beginning Google Maps <acronym title="Application Programming Interface">API</acronym> 3</strong></a>. It covers everything you need to know to create awesome maps on your web sites. <a href="http://www.amazon.com/gp/product/1430228024?ie=UTF8&#038;tag=inusabiwetrus-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=1430228024" title="Buy Beginning Google Maps Applications from Amazon.com">Buy it on Amazon.com</a><img src="http://www.assoc-amazon.com/e/ir?t=inusabiwetrus-20&#038;l=as2&#038;o=1&#038;a=1430228024" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2009/06/google-maps-api-3-the-basics/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<series:name><![CDATA[Google Maps API 3]]></series:name>
	</item>
		<item>
		<title>The value of a holistic view</title>
		<link>http://www.svennerberg.com/2009/05/the-value-of-a-holistic-view/</link>
		<comments>http://www.svennerberg.com/2009/05/the-value-of-a-holistic-view/#comments</comments>
		<pubDate>Mon, 04 May 2009 08:18:31 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Industry]]></category>
		<category><![CDATA[Project management]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=1858</guid>
		<description><![CDATA[In development project teams there are often several specialized roles, like programmers, database designers, interaction designers, user researchers, business analysts and so on. Studies has shown that the more these different roles collaborate and are aware of the different aspects of the project as a whole as well as what the other project members are [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2009/05/collaboration-150x150.jpg" alt="" class="alignright border" />In development project teams there are often several specialized roles, like programmers, database designers, interaction designers, user researchers, business analysts and so on. Studies has shown that the more these different roles collaborate and are aware of the different aspects of the project as a whole as well as what the other project members are doing, the more successful the project is.</p>
<p><span id="more-1858"></span></p>
<p>In Joseph Selbie article <a href="http://www.boxesandarrows.com/view/bringing-holistic">Bringing Holistic Awareness to Your Design</a> at Boxes and Arrows, he discusses the value of a holistic view. In a best-practice study conducted at Selbie&#8217;s company Tristream the following was revealed:</p>
<blockquote cite="http://www.boxesandarrows.com/view/bringing-holistic"><p>Those teams that achieved the highest degree of shared, holistic understanding consistently designed the best web applications. The more each team member understood the business goals, the user needs, and the capabilities and limitations of the IT environment—a holistic view—the more successful the project. In contrast, the more each team member was “siloed” into knowing just their piece of the whole, the less successful the project.</p></blockquote>
<p>The conclusion from this is that each member of a project team, should at some level, be involved in the user research process. There should also be lots of information sharing between team members, preferably through participation and by oral presentations and discussions of results.</p>
<h3>The dangers of siloing in</h3>
<p>Joseph Selbie also writes: </p>
<blockquote cite="http://www.boxesandarrows.com/view/bringing-holistic"><p>The members of the teams that performed less well not only tended not to understand the application as a whole, they saw no need to understand it as a whole: programmers did not care to know about users, user researchers did not care to know about programming limitations, and stakeholders were uninvolved and were considered “clueless” by the rest of the development team.</p></blockquote>
<p>This was a surprisingly common situation in many project teams, but one that clearly should be avoided.</p>
<p>Read more about this and what to do about it in the original article, <a href="http://www.boxesandarrows.com/view/bringing-holistic">Bringing Holistic Awareness to Your Design</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2009/05/the-value-of-a-holistic-view/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The rise of Zooming User Interfaces</title>
		<link>http://www.svennerberg.com/2009/02/the-rise-of-zooming-interfaces/</link>
		<comments>http://www.svennerberg.com/2009/02/the-rise-of-zooming-interfaces/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 19:24:06 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[ZUI]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=1007</guid>
		<description><![CDATA[The first time I ever read anything about Zooming User Interfaces was when I was reading The Humane Interface by Jef Raskin, where he introduced the concept of Zoom World, a whole OS based on a Zooming User Interface (ZUI). Of course this wasn&#8217;t my first encounter with this type of user interface since I&#8217;ve, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2009/02/hard_rock_cafe_memorabilia-150x150.jpg" alt="" class="alignright" />The first time I ever read anything about Zooming User Interfaces was when I was reading <a href="http://www.amazon.com/gp/product/0201379376?ie=UTF8&#038;tag=inusabiwetrus-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0201379376">The Humane Interface</a> by Jef Raskin, where he introduced the concept of <a href="http://books.google.se/books?id=D39vjmLfO3kC&#038;pg=PA152&#038;lpg=PA152&#038;source=bl&#038;ots=COpBdY3U-7&#038;sig=mMeY8iFAemtaViSfpUqq1sV28a0&#038;hl=sv&#038;sa=X&#038;oi=book_result&#038;resnum=3&#038;ct=result#PPA152,M1">Zoom World</a>, a whole <acronym title="Operating System">OS</acronym> based on a Zooming User Interface (ZUI). Of course this wasn&#8217;t my first encounter with this type of user interface since I&#8217;ve, among other things, been using Interactive maps like Google Maps. But it was the first time that I started considering a Zooming Interface a viable alternative to the traditional interaction idioms.</p>
<p>In this article I will explore some of the Zooming User Interfaces out there today and also take a sneak peak of what&#8217;s around the corner.</p>
<p><span id="more-1007"></span></p>
<h3>Why Zooming User Interfaces</h3>
<p>Consider this. You&#8217;re in a maze, unable to find your way out. Relying on maps you quickly lose your way since the human mind is not well suited for remembering long sequences of turns. Now imagine rising up in the air so that you can watch the maze from above. Suddenly it&#8217;s really easy to find your way out, or to find you way to any part of the maze.</p>
<p>The maze in this analogy are applications today, confined inside the constraints of the desktop metaphore. The map are menus, bookmarks and other aids we use to find our way. </p>
<p>Through the evolution of man we&#8217;ve relied on recognizing landmarks as means to find our way around. This is called spatial memory. We&#8217;ve relied on it to remember where we put our tools and hid our food. In ZUI&#8217;s we use this ability to find our way through vast amounts of data.</p>
<p>Are ZUI&#8217;s difficult to use or hard to understand? Personally I think that the widespread use of interactive maps such as Google Maps and Yahoo Maps have paved the way for Zooming User Interfaces. The zooming paradigm is natural once you&#8217;ve tried it and I suspect that it will be more and more common.</p>
<h3>Examples of ZUI&#8217;s</h3>
<p>Ever since I first got interested in ZUI&#8217;s I&#8217;ve seen an increase of them. Here are a several examples of applications using a Zooming User Interface today.</p>
<h4>Prezi</h4>
<p><img src="http://media.svennerberg.com/2009/01/prezi_logo.png" alt=""" class="alignnone" /></p>
<p><a href="http://prezi.com/">Prezi</a> is a tool for making zooming presentations. With an intuitive user interface it&#8217;s easy to create pretty impressive presentations. The cool thing is that the tools your working with in Prezi blends seamlessly with the presentation. </p>
<p>I&#8217;ve made a simple presentation called  <a href="http://prezi.com/4892/">Zooming Interfaces</a> on Prezi. Check it out to see what I&#8217;m talking about.</p>
<h4>Seadragon</h4>
<p><img src="http://media.svennerberg.com/2009/02/seadragon21.jpg" alt="Seadragon" class="alignnone" /></p>
<p>Seadragon is a tool from Microsoft Live Labs that let&#8217;s you use really high resolution images which you can zoom in and out of. In the first part of this video from TED Talks Blaise Aguera y Arcas from Microsoft Labs demonstrates it.</p>
<p><object width="446" height="326"><param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"></param><param name="allowFullScreen" value="true" /><param name="wmode" value="transparent"></param><param name="bgColor" value="#ffffff"></param><param name="flashvars" value="vu=http://video.ted.com/talks/embed/BlaiseAguerayArcas_2007-embed_high.flv&#038;su=http://images.ted.com/images/ted/tedindex/embed-posters/BlaiseAguerayArcas-2007.embed_thumbnail.jpg&#038;vw=432&#038;vh=240&#038;ap=0&#038;ti=129" /><embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="446" height="326" allowFullScreen="true" flashvars="vu=http://video.ted.com/talks/embed/BlaiseAguerayArcas_2007-embed_high.flv&#038;su=http://images.ted.com/images/ted/tedindex/embed-posters/BlaiseAguerayArcas-2007.embed_thumbnail.jpg&#038;vw=432&#038;vh=240&#038;ap=0&#038;ti=129"></embed></object></p>
<h4>The Seadragon <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> Library</h4>
<p>With the Seadragon <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> Library it&#8217;s easy to embed single high-res images into a web page. This image is about 35 megapixel. Click around in it to zoom in and out.</p>
<div class="image">
<script type="text/javascript" src="http://seadragon.com/ajax/embed.js"></script><script type="text/javascript">Seadragon.embed("400px", "300px", "http://photozoom.mslivelabs.com/DZ/100/2/Image/alias/Svennerberg/album/2/fef00db9-380a-4e51-8985-7368ae01f750.xml", 8834, 4000, 448, 0, "jpg");</script></p>
<p>Image from iStockPhoto</p>
</div>
<h4>DeepZoom</h4>
<p>Seadragon is implemented in Silverlight through DeepZoom. This combination enables you to create amazing applications where you can seamlessely zoom through huge amount of image data. It&#8217;s also possible to add other information aswell. Check out the examples below to get a sense of how it works. I think that the Hard Rock Café Memorabilia is really impressive.</p>
<p>Here&#8217;s some great examples of implementations of DeepZoom.</p>
<ul>
<li><strong><a href="http://memorabilia.hardrock.com/">Hardrock Café Memorabilia</a></strong><br />
This is a display of memorabilia from Hardrock Café. By zooming and panning you can explore the content. When you zoom in on an object additional information about it is displayed.
</li>
<li><strong><a href="http://www.vertigo.com/deepzoom.aspx">DeepZoom demo at Vertigo</a></strong><br />
This demo illustrates how to navigate content with a zooming interface.
</li>
</ul>
<h4>Mooncake</h4>
<p><a href="http://mooncake.nxmix.com">Mooncake</a> is another implementation of Seadragon. It allows you to pick pictures from a Flickr or SmugMug account. It then automatically process them into Seadragon images. </p>
<p>Here&#8217;s a simple example made from photos from my flickr account.</p>
<div id="MooncakeViewerContainer"><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="600" height="400"><param name="source" value="http://mooncake.nxmix.com/ClientBin/MoonCakeViewer.xap"/><param name="background" value="white" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="autoUpgrade" value="true" /><param name="InitParams" value="DynamicCollectionPath=http://mooncake.nxmix.com//DZFiles/8c7d6df8-001e-9d8a-11dd-f28f1eef9023/metadata.xml"><a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"><img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/></a></object><iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe></div>
<h4>Zoomorama</h4>
<p><img src="http://media.svennerberg.com/2009/02/zoomorama.png" alt="Zoomorama" class="alignnone" /></p>
<p><a href="http://www.zoomorama.com/">Zoomorama</a> is a Flash based tool for making zoomable image albums. You can either add images directly through a web interface or install a desktop application. The desktop application provides you with more powerful tools to design the album as you like. You can for example add captions and arrange the images just as you like in it, something that&#8217;s not possible in the web app.</p>
<h5>Example</h5>
<p>This is an example of a Zoomorama album created with the web application. </p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300"><param name="movie" value="http://app.zoomorama.com/1.0/zoombrowser@zoomorama.com/release/latest/browser.swf?indexURL=http://zml.zoomorama.com/1.0/legacyproxy/4221825e186909079babe6debf2f2be1/8603c1f06f4fdafe7703a9dcc94f2f04/document.1.zml"/><param name="wmode" value="window" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><embed src="http://app.zoomorama.com/1.0/zoombrowser@zoomorama.com/release/latest/browser.swf?indexURL=http://zml.zoomorama.com/1.0/legacyproxy/4221825e186909079babe6debf2f2be1/8603c1f06f4fdafe7703a9dcc94f2f04/document.1.zml" wmode="window" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash" width="400" height="300"></embed></object></p>
<h4>OpenZoom</h4>
<p><a href="http://openzoom.org/">OpenZoom</a> is an open source framework for the use of high-resolution images and Zoomable User Interfaces on the web. It uses an implementation of the Deep Zoom technique in Flash.</p>
<p>In part three of Daniel Gasienica article series <a href="http://gasi.ch/blog/inside-deep-zoom-3/">Inside Deep Zoom</a> there are several examples of implementations of this technique.</p>
<h4>Google Maps</h4>
<p>With creative use of the Google Maps <acronym title="Application Programming Interface">API</acronym> some people have created pretty cool ZUI&#8217;s. I&#8217;m sure that this was not the intended use for the <acronym title="Application Programming Interface">API</acronym>, but hey, why not?</p>
<h5>Example of Zooming User Interfaces using the Google Maps <acronym title="Application Programming Interface">API</acronym></h5>
<ul>
<li><strong><a href="http://www.thekremercollection.com/art/">The Kremer Collection</a></strong><br />
The Kremer Collection is a collection of paintings where you can examine the details of a painting by zooming in.</li>
<li><strong><a href="http://www.zkimmer.com/Space/LA/2007/December/">zkimmer</a></strong><br />
Zkimmer uses the Google Maps <acronym title="Application Programming Interface">API</acronym> to display magazines.</li>
</ul>
<h4> Zooming User Interfaces in Comics</h4>
<p>Cartoonist Daniel Merlin Goodbrey are experimenting with new ways to experience comics. In the comic <a href="http://www.e-merl.com/pocom.htm">PoCom-UK-001</a> he uses a Zooming User Interfaces for the viewer to read the cartoon.</p>
<h3> Zooming User Interfaces on Mobile devices</h3>
<p>On mobile devices where screen estate is very limited a Zooming User Interfaces has proved its value to organize information. </p>
<p><img src="http://media.svennerberg.com/2009/02/safari_small.jpg" alt="" class="alignright" /></p>
<h4>Safari web browser</h4>
<p>The Safari browser on the iPhone is one example of this. By being able to zoom in and out of web pages, we overcome the limitations of the small screen. On the iPhone there&#8217;s also the wonders of the multitouch screen which makes it natural to zoom in or out by tapping or by using the pinch maneuver. </p>
<p><a href="http://www.apple.com/iphone/features/safari.html#safarifeature">Watch a video on how this works on apple.com</a></p>
<h4>Firefox Concept Mobile Browser</h4>
<p>Aza Raskin, Head of User Experience at Mozilla Labs, has developed a concept for a Firefox Mobile browser that utilizes a zooming interface among other interesting interaction techniques. </p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="525" height="317" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.vimeo.com/moogaloop.swf?clip_id=1152218&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=cc6600&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="525" height="317" src="http://www.vimeo.com/moogaloop.swf?clip_id=1152218&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=cc6600&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Read more about it on<a href="http://labs.mozilla.com/2008/06/firefox-mobile-concept-video" title="Firefox Mobile Concept Video">Mozilla Labs</a> and on <a href="http://www.azarask.in/blog/post/firefox-mobile-concept-video/" title="Firefox Mobile Concept Video">www.azarask.in</a>.</p>
<h3>Future concepts</h3>
<h4>Aurora</h4>
<p>Aurora is a future concept browser that Adaptive Path has developed for Mozilla Labs. It utilizes a lot of new interaction ideoms, zooming being one of them.</p>
<p>About 2 minutes into this movie, theres a sequence that nicely illustrates a Zooming User Interfaces to browse data. In this interface there&#8217;s also the Z-axel which represents time. The older the content, the farther away it is. It also fades with time. Check out my article <a href="http://www.svennerberg.com/2008/09/visualizing-the-age-of-content/">Visualizing the age of content</a> to read more about this concept.</p>
<p><object width="400" height="225"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=1450211&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=1450211&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"></embed></object><br /><a href="http://vimeo.com/">Aurora (Part 1)</a> from <a href="http://vimeo.com/user524591">Adaptive Path</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<h3>What others have written</h3>
<p>Dmitry Fadeyev at Usability Post recently wrote an article called <a href="http://www.usabilitypost.com/2009/02/09/zoomable-user-interfaces/">Zoomable User Interfaces</a>,  where he discusses the benefit of ZUI&#8217;s as well as providing some examples. </p>
<p>There&#8217;s also an article on Wikipedia on <a href="http://en.wikipedia.org/wiki/Zooming_User_Interface">Zooming User Interfaces</a>. </p>
<h3>Conclusion</h3>
<p>I can definitely see a trend in ZUI&#8217;s. Ever since I first started getting interested about it I&#8217;ve seen an increase in examples of it. I feel pretty confident that we&#8217;re going to see a lot more of this in a not so distant future. Do you have more examples of the use of ZUI&#8217;s?</p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2009/02/the-rise-of-zooming-interfaces/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Twitter is exploding</title>
		<link>http://www.svennerberg.com/2009/02/twitter-is-exploding/</link>
		<comments>http://www.svennerberg.com/2009/02/twitter-is-exploding/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 07:53:52 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=1543</guid>
		<description><![CDATA[Is it just me or is Twitter exploding right now? Apart from noticing that I got more followers the last days, I&#8217;ve also noticed that several Twitter services such as Tweetburner and Mr. Tweet has been down for maintenance. That might be a sign of overload! At a seminar I attended last week on Social [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2009/02/twitter-bird.png" alt="" class="alignright" />Is it just me or is Twitter exploding right now? Apart from noticing that I got more followers the last days, I&#8217;ve also noticed that several Twitter services such as <a href="http://tweetburner.com/">Tweetburner</a> and  <a href="http://mrtweet.net/">Mr. Tweet</a> has been down for maintenance. That might be a sign of overload!</p>
<p>At a seminar I attended last week on Social Media one of the speakers <a href="http://www.ronnestam.com/">Johan Ronnestam</a> said that the reason Twitter is exploding right now is Barack Obama successful use of it during his election campaign. Every marketer worth his salt has now studied the phenomena and is busy trying to get everyone at their companies to use Twitter. </p>
<p>Today I also learned that Dalai Lama is now on Twitter. Watch his profile at <a href="http://twitter.com/ohhdl">@OHHDL</a>. Pretty soon everyone will be on board, I&#8217;m just waiting to find my mothers Twitter profile! <img src='http://www.svennerberg.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>If you want to join the trend, <a href="http://twitter.com/svennerberg">follow me on Twitter</a>!</p>
<h3>Update</h3>
<p>Dalai Lama is now following me on Twitter! Even though I realize that it&#8217;s probably not Dalai Lama himself following me but rather someone administrating it for him, I can&#8217;t help thinking that it&#8217;s pretty cool!<br />
<img src="http://media.svennerberg.com/2009/02/dhalai_lama.png" alt="" class="alignnone" /></p>
<h3>Update 2</h3>
<p>Dalai Lama was apparently a fake. That&#8217;s too bad because he was quickly becoming the most popular person on Twitter. Read all about it at <a href="http://thenextweb.com/2009/02/09/fake-dalai-lama-twitter-bad-karma/">the Next Web</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2009/02/twitter-is-exploding/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How Spotify have changed the way I listen to music</title>
		<link>http://www.svennerberg.com/2009/01/how-spotify-have-changed-the-way-i-listen-to-music/</link>
		<comments>http://www.svennerberg.com/2009/01/how-spotify-have-changed-the-way-i-listen-to-music/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 15:25:49 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Spotify]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=1422</guid>
		<description><![CDATA[A while I go I wrote an article called Spotify is right on the spot where I described a service called Spotify that let&#8217;s you listen to music over the Internet. I was impressed of how well it worked and of how good the music player was. I&#8217;ve been using Spotify for about four months [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2008/10/spotify_logo.png" alt="Spotify" class="alignright" />A while I go I wrote an article called <a href="http://www.svennerberg.com/2008/11/spotify-is-right-on-the-spot/">Spotify is right on the spot</a> where I described a service called Spotify that let&#8217;s you listen to music over the Internet. I was impressed of how well it worked and of how good the music player was.</p>
<p>I&#8217;ve been using <a href="http://www.spotify.com/">Spotify</a> for about four months now and that has been four month of more intense music consumption than usual for me. I&#8217;ve noticed that Spotify has made me listen to music in new ways.</p>
<p><span id="more-1422"></span></p>
<h3>New behavioral patterns</h3>
<ul>
<li><strong>I Listen to more old music</strong><br />
I find myself rediscovering music I listened to 10 or even 20 years ago.
</li>
<li><strong>I Listen to more new music</strong><br />
I find more new music to listen to, often after being tipped by a friend but also after finding it through the applications related artists section called <em>Artist radio</em>.</li>
<li><strong>I Tip friends about music and get tipped by friends more</strong><br />
I frequently send and receive Spotify <acronym title="Uniform Resource Identifier">URI</acronym>&#8217;s to/from friends that also use Spotify</li>
</ul>
<h4>Reasons</h4>
<p>I think that the reason for my changed behavior depends on two key feature in Spotify.</p>
<ol>
<li><strong>Instant availability</strong><br />
Since a lot of music is instantly available it lowers the threshold for finding new music. It encourages me to explore. A key factor here is the fast performance of the search box. Another important factor is that in the song list I&#8217;m able to click album name and artist name to get more information related to that.</li>
<li><strong>Share music</strong><br />
By being able to easily share music with friends also using Spotify I frequently discovers new music which increases my music interest.</li>
</ol>
<p>I think this is an interesting example of how technology changes the way we behave. This service has certainly changed the way i consume music and in the process enriched my life. That&#8217;s how it should work and I&#8217;m happy, when it on these rare occasions, do.</p>
<p>Spotify has clearly met a latent need that I had. It would be interesting to know more about the research behind it.</p>
<h3>Improvements</h3>
<p>While I&#8217;m able to share music with others I still think it&#8217;s an area where there&#8217;s plenty of room for improvements. In the current version I have to right-click a song/album/playlist and choose <em>Copy Spotify <acronym title="Uniform Resource Identifier">URI</acronym></em>. </p>
<p><a href="http://media.svennerberg.com/2009/01/copy_uri.png" title="Copying a Spotify URI" rel="lightbox[imageset]"><img src="http://media.svennerberg.com/2009/01/copy_uri-410x248.png" alt="" class="alignnone" /></a></p>
<p>I then have to send this <acronym title="Uniform Resource Identifier">URI</acronym> to a friend someway who have to execute it somehow, for example with <em>Run&#8230;</em> in Windows. </p>
<p><img src="http://media.svennerberg.com/2009/01/run.png" alt="" class="alignnone" /></p>
<p>I think that the natural progression should be some sort of Social aspect in Spotify. In it&#8217;s simplest form it could be being able to connect with friends using Spotify. You could then easily send them songs through the UI of the application.</p>
<h3>Conclusion</h3>
<p>I think that Spotify is great. It&#8217;s made me listen to more music. Has it changed the way that you listen to music?</p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2009/01/how-spotify-have-changed-the-way-i-listen-to-music/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Most popular articles of 2008</title>
		<link>http://www.svennerberg.com/2009/01/most-popular-articles-of-2008/</link>
		<comments>http://www.svennerberg.com/2009/01/most-popular-articles-of-2008/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 16:10:58 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=1295</guid>
		<description><![CDATA[2008 was the first year of this blog. It has been really interesting and it&#8217;s encouraging to see that the number of readers is steadily increasing. Thanks to all of you who has read and commented on my articles. A big reason for me running this blog is to learn more about the stuff I [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2009/01/globe.png" alt="" class="alignright" />2008 was the first year of this blog. It has been really interesting and it&#8217;s encouraging to see that the number of readers is steadily increasing. Thanks to all of you who has read and commented on my articles. A big reason for me running this blog is to learn more about the stuff I write about and your comments and feedback contributes to that goal.</p>
<p><span id="more-1295"></span></p>
<h3>Most popular articles</h3>
<p>Looking back at the year that has passed and after reviewing the statistics for 2008, these are the five articles that got the most pageviews.</p>
<ol>
<li>
<h4><a href="http://www.svennerberg.com/2008/09/the-use-of-buttons-in-web-forms/">The use of buttons in web forms</a></h4>
<p>After Luke Wroblewski wrote about this article on his site <a href="http://lukew.com/ff/entry.asp?740">Functioning Form</a> I&#8217;ve had a great increase in traffic. It&#8217;s really nice to see that so many have an interest in this.</li>
<li>
<h4><a href="http://www.svennerberg.com/2008/10/polylines-in-google-maps/">Polylines in Google Maps [Part 1]</a></h4>
<p>Pamela Fox at the Google Maps <acronym title="Application Programming Interface">API</acronym> team was kind enough to link to this article from the Google Maps <acronym title="Application Programming Interface">API</acronym> documentation. That of course led to a massive increase in pageviews. It seems like this topic is of great interest to a lot more people than just me.</li>
<li>
<h4><a href="http://www.svennerberg.com/2008/09/imagemap-rollover/">Imagemap rollover</a></h4>
<p>This tutorial shows how to code an efficient imagemap rollover. It explains how to solve a few bugs that I couldn&#8217;t find an explanation for anywhere else on the web.</li>
<li>
<h4><a href="http://www.svennerberg.com/2008/11/polylines-in-google-maps-part-2/">Polylines in Google Maps [Part 2]</a></h4>
<p>This article which is the second part of two articles about Polylines in Google Maps, also got linked to from the Google Maps <acronym title="Application Programming Interface">API</acronym> Documentation. It explains how to encode a polyline on the server side.</li>
<li>
<h4><a href="http://www.svennerberg.com/2008/10/user-controls-in-aspnet-mvc-preview-release-5/">User Controls in <acronym title="Active Server Pages">ASP</acronym>.NET MVC Preview Release 5</a></h4>
<p>During 2008 I have tried to wrap my head around the <acronym title="Active Server Pages">ASP</acronym>.NET MVC Framwork, which by the way is a really great framework. One of the confusing issues with it was how to work with User Controls in it. This article explains it all.</li>
</ol>
<h3>Most popular articles on Usability and Interaction Design</h3>
<p>It seems that the tutorials are the most popular posts but I&#8217;ve also written some articles on different<br />
aspects of Usability and Interaction Design. Here are the top 5 articles in that category.</p>
<ol>
<li>
<h4><a href="http://www.svennerberg.com/2008/07/no-undo-redo/">No undo? Redo!</a></h4>
<p>Undo is a feature found in almost every desktop application. How come it&#8217;s so rare in web applications? This article explains the importance of this.</li>
<li>
<h4><a href="http://www.svennerberg.com/2008/09/gradual-engagement/">Gradual Engagement</a></h4>
<p>Gradual engagement is the concept of getting engaged visitors. This article explains the concept and presents a few examples.</li>
<li>
<h4><a href="http://www.svennerberg.com/2008/09/visualizing-the-age-of-content/">Visualizing the age of content</a></h4>
<p>How do we visualize how fresh a piece of content is? This article presents a few possible solutions.</li>
<li>
<h4><a href="http://www.svennerberg.com/2008/12/page-load-times-vs-conversion-rates/">Page Load Times vs Conversion Rates</a></h4>
<p>After reading Andy King&#8217;s book Website Optimization, I was surprised by some of the statistics presented. This is one of them.</li>
<li>
<h4><a href="http://www.svennerberg.com/2008/05/locus-of-attention/">Change your focus to locus</a></h4>
<p>The late Jef Raskin, also known as the father of Macintosh, presented some pretty interesting concepts during his life time. Here&#8217;s one of them.</li>
</ol>
<h3>2009</h3>
<p>I look forward to see what happens with this blog during 2009. As of now I have a few more articles on Google Maps lined up, and I plan to write more tutorials and articles on stuff relating to web interfaces. I do however also plan to increase the number of articles on Usability and Interaction Design this year.</p>
<p>What kind of articles do you enjoy and what do you think I should primarily write about? </p>
<p>Have a good 2009 everyone!</p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2009/01/most-popular-articles-of-2008/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Page Load Times vs Conversion Rates</title>
		<link>http://www.svennerberg.com/2008/12/page-load-times-vs-conversion-rates/</link>
		<comments>http://www.svennerberg.com/2008/12/page-load-times-vs-conversion-rates/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 22:25:56 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=1133</guid>
		<description><![CDATA[I recently read Andy B. King&#8217;s book Website Optimization and was surprised by some of the statistics in it. It shows that there&#8217;s a very clear connection between page load times and conversion rates. Statistics from Google and Amazon show that an increase in load time has a direct and profound impact on user engagement. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2008/12/speedometer.png" alt="" class="alignright" />I recently read Andy B. King&#8217;s book Website Optimization and was surprised by some of the statistics in it. It shows that there&#8217;s a very clear connection between page load times and conversion rates. Statistics from Google and Amazon show that an increase in load time has a direct and profound impact on user engagement.</p>
<p><span id="more-1133"></span></p>
<h3>The results</h3>
<p>For <strong>Google</strong> an increase in page load time from 0.4 second to 0.9 seconds decreased traffic and ad revenues by 20%. For <strong>Amazon</strong> every 100 ms increase in load times decreased sales with 1%.</p>
<p>I&#8217;m surprised that such relatively small changes in load times had such a massive impact on conversion rates. </p>
<h4>The importance of speed</h4>
<p>These statistics makes me even more convinced that speed is one of the most important factors for how users experience your application/web site. According to Andy speed is crucial for engaging the user.</p>
<blockquote cite="Website Optimization - Andrew B. King, page 148"><p>
Speed is the most important factor, after site attractiveness, to increasing flow in users. People who are more engaged while browsing your site will learn faster and show an improved attitude and behavior toward your site</p>
<p>- Andy King, Website Optimization, page 148
</p></blockquote>
<h4>Decrease in tolerance for load times</h4>
<p>A rule of thumb have been that if page load time exceed 8 to 10 seconds, the user&#8217;s frustration increases. Newer research has shown that about a third of all broadband users are reluctant to wait more than 4 seconds for a web page to load. For narrowband users almost half of them won&#8217;t wait more than six seconds.</p>
<h4>Optimize for speed</h4>
<p>It has always been important to optimize for speed, but maybe it&#8217;s even more important now than before. The audience is more demanding and the competition is harder. A great start if you want to learn more about how to optimize your site is Andys book, <a href="http://www.svennerberg.com/2008/12/website-optimization-book-review/" title="Website Optimization [Book Review]">Website Optimization</a>.</p>
<p class="footnote">Illustration by <a href="http://web.mac.com/paulanthonymoline">Paul Moline Designs</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2008/12/page-load-times-vs-conversion-rates/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Shopping for groceries in style</title>
		<link>http://www.svennerberg.com/2008/11/shopping-for-groceries-in-style/</link>
		<comments>http://www.svennerberg.com/2008/11/shopping-for-groceries-in-style/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 14:44:57 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=725</guid>
		<description><![CDATA[Conchango is developing a shopping system for the British grocery store Tesco. It&#8217;s supposed to help customers when buying/ordering food and has a graphically rich interface. I&#8217;m for one hate shopping for groceries. If I could have a system like this that remembers what groceries I normally buy and suggests a shopping list according to [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2008/11/yogurt.jpg" alt="" class="alignright border" /><a href="http://www.conchango.com/">Conchango</a> is developing a shopping system for the British grocery store <a href="http://www.tesco.com/">Tesco</a>. It&#8217;s supposed to help customers when buying/ordering food and has a graphically rich interface. </p>
<p>I&#8217;m for one hate shopping for groceries. If I could have a system like this that remembers what groceries I normally buy and suggests a shopping list according to my dinner plans, I would be more than delighted. In fact, if I didn&#8217;t even had to physically go to the grocery store, I would be even more delighted.</p>
<p><span id="more-725"></span></p>
<h3>The UI</h3>
<p>From what I can tell from the video it&#8217;s very much inspired by the iPhone interface. It&#8217;s probably the touchscreen and visual effects that gives that impression. The user interface looks really cool, but it do seem to lag and respond a little slow. </p>
<p>The UI has a lot of 3d effects. One pretty cool thing is that you can choose a product and then rotate it to read the text on the package. I&#8217;m not sure though, if that&#8217;s the optimal way to display that sort of information, but it sure looks cool.</p>
<h3>Technology</h3>
<p>Apparently it&#8217;s built with Microsoft&#8217;s <a href="http://en.wikipedia.org/wiki/Windows_Presentation_Foundation" title="Windows Presentation Foundation">WPF</a> technology, the same technology that Silverlight is built upon. I haven&#8217;t seen much built with this technology so it&#8217;s nice to a example of what you can do with it.</p>
<p>In the video Paul Dawson and Matthew Adams demonstrates and explains how it&#8217;s all supposed to work. They also tell some about how they built it. </p>
<p>Right now it&#8217;s an early beta, but they&#8217;re soon going to perform trials with customer.</p>
<p><iframe style="float: none; margin: 1em 0;" src="http://channel9.msdn.com/shows/Continuum/440408/player/" frameborder="0" height="325" scrolling="no" width="320"></iframe></p>
<p>Read more about <a href="http://channel9.msdn.com/shows/Continuum/ConchangoTescoProject/">Conchango and the Tesco project</a> on <acronym title="Microsoft Developer Network">MSDN</acronym>.</p>
<p>Thanks Peter, for showing me this.</p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2008/11/shopping-for-groceries-in-style/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery + ASP.NET = true</title>
		<link>http://www.svennerberg.com/2008/10/jquery-aspnet-true/</link>
		<comments>http://www.svennerberg.com/2008/10/jquery-aspnet-true/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 07:01:58 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=466</guid>
		<description><![CDATA[jQuery is going to be a part of Visual Studio. This is a great, and I must say, an unexpected development of things. For me personally, who&#8217;s already using jQuery along with ASP.NET, the main difference will be the intellisense annotation support for jQuery. This will be a welcomed enhancement of my development environment. Needless [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2008/08/jquery-logo.gif" alt="" class="alignright" />jQuery is going to be a part of Visual Studio. This is a great, and I must say, an unexpected development of things.</p>
<p>For me personally, who&#8217;s already using jQuery along with <acronym title="Active Server Pages">ASP</acronym>.NET, the main difference will be the intellisense annotation support for jQuery. This will be a welcomed enhancement of my development environment. Needless to say the asp.net team at Microsoft will also build ready-to-use controls in the <acronym title="Active Server Pages">ASP</acronym>.NET <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> Control Toolkit that builds upon jQuery.</p>
<p>According to Scott Guthrie there will be a free download with the jQuery Intellisense support in a few weeks. The <acronym title="Active Server Pages">ASP</acronym>.NET MVC download will also contain it and the jQuery library.</p>
<p>Read more about it on <a href="http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx">Scott Guthrie&#8217;s blog</a> and in <a href="http://jquery.com/blog/2008/09/28/jquery-microsoft-nokia/">John Reisig&#8217;s blog post</a> on jQuery.com.</p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2008/10/jquery-aspnet-true/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visualizing the age of content</title>
		<link>http://www.svennerberg.com/2008/09/visualizing-the-age-of-content/</link>
		<comments>http://www.svennerberg.com/2008/09/visualizing-the-age-of-content/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 18:09:06 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Definitions]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=415</guid>
		<description><![CDATA[How do one visualize the age dimension of content? In the real world it&#8217;s not a problem. Physical objects, like paper, clearly wears the mark of time. Paper turns yellow and get torn. Other things get scratched or changes it&#8217;s appearance in some other way that makes it obvious that it&#8217;s not new. The digital [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://media.svennerberg.com/2008/09/clock.jpg" title="The age of time" rel="lightbox[imageset]"><img src="http://media.svennerberg.com/2008/09/clock-150x150.jpg" alt="" class="alignright" /></a>How do one visualize the age dimension of content?</p>
<p>In the real world it&#8217;s not a problem. Physical objects, like paper, clearly wears the mark of time. Paper turns yellow and get torn. Other things get scratched or changes it&#8217;s appearance in some other way that makes it obvious that it&#8217;s not new. </p>
<p><span id="more-415"></span></p>
<h3>The digital world</h3>
<p>There are a few pretty common ways of displaying the age of content on web pages. These are primarily date stamps, telling when something was created or last edited. There&#8217;s also different color on visited links, that in a sense also is a way of telling that content is older. At least you know that you&#8217;ve already visited the page.</p>
<p>But that&#8217;s about it. And often, even those cues aren&#8217;t used.</p>
<h3>New ideas</h3>
<p>Robert Hoekman Jr. has written some about in the book, Designing the Obvious and in the article <a href="http://rhjr.net/theblog/2007/01/17/design-stories-sorted-link-lists-using-ambient-signifiers/">Design Stories: Sorted link-lists using “ambient signifiers”</a> on rhjr.net. His idea is to show the age of links by displaying them in different colors. The older they are, the lighter the color.</p>
<p>The term to describe this is <em>ambient signifiers</em>. It&#8217;s not restricted to just illustrate the age of content but is the concept of giving subtle cues, to help people interpret context. </p>
<p>Ross Howard has written about this in the article <a href="http://www.boxesandarrows.com/view/ambient_signifi" title="Ambient Signifiers - How I Learned to Stop Getting Lost and Love Tokyo Rail">Ambient Signifiers</a> on Boxes and Arrows which, I think, is where the term got coined. He describes his experiences with the Tokyo subway system, where a unique chime is played on each station, giving a subtle cue for the frequent commuter of where he currently is. This gave him the idea of ambient signifiers in digital media. </p>
<p>Currently there are some use of ambient signifiers in the applications we use. In Firefox for example, the address bar turns yellow when you enter a secure site. On sites the current status is often visualized in some way, like if you&#8217;re logged in to a site or not.</p>
<h3>Aurora &#8211; Mozilla Concept Browser</h3>
<p>Adaptive Path and Mozilla Labs has developed a concept of a future browser with lot of new ways of interacting with data. It&#8217;s kind of a zooming interface where you can browse your content in a 3d view where the z-axe represents time. They visualize the age of content in two ways. First of all the farther away the content the older it is. Secondly the content fades with time. I think that is a very natural way of visualizing it and a great illustration of how ambient signifiers can be used.</p>
<p>Watch the concept in action in this video from Adaptive Path.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="225" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=1450211&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="225" src="http://vimeo.com/moogaloop.swf?clip_id=1450211&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<a href="http://vimeo.com/1450211?pg=embed&amp;sec=1450211">Aurora (Part 1)</a> from <a href="http://vimeo.com/user524591?pg=embed&amp;sec=1450211">Adaptive Path</a> on <a href="http://vimeo.com?pg=embed&amp;sec=1450211">Vimeo</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2008/09/visualizing-the-age-of-content/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Where&#8217;s me back button?</title>
		<link>http://www.svennerberg.com/2008/09/wheres-me-back-button/</link>
		<comments>http://www.svennerberg.com/2008/09/wheres-me-back-button/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 07:00:36 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=426</guid>
		<description><![CDATA[My Firefox installation got upgraded to 3.0.2 today. And to my surprise the back and forward buttons is gone! At first I thought that this was a either a major bug that slipped in the new release, or maybe some clever enhancement a´la the Awesome bar. But after checking with a coworker, who&#8217;s also got [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2008/06/firefox-logo1.png" alt="" class="alignright" />My Firefox installation got upgraded to 3.0.2 today. And to my surprise the back and forward buttons is gone!</p>
<p><span id="more-426"></span></p>
<p>At first I thought that this was a either a major bug that slipped in the new release, or maybe some clever enhancement a´la the <a href="http://mozillalinks.org/wp/2007/11/firefox-3-location-bar-just-became-almighty/">Awesome bar</a>. But after checking with a coworker, who&#8217;s also got the new version but still has the buttons, I suspect that this might be something strange happening on my computer. </p>
<p><a href="http://media.svennerberg.com/2008/09/firefox_back_button_missing.png" rel="lightbox[imageset]" title="Where's me back button gone?"><img src="http://media.svennerberg.com/2008/09/firefox_back_button_missing-409x308.png" alt="" /></a></p>
<p>I don&#8217;t think Jakob Nielsen will take lightly on this as he says that according to his research, <a href="http://www.useit.com/alertbox/990530.html">the back button is the second most used navigation feature</a>. <img src='http://www.svennerberg.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  The back button indeed act as sort of an undo function. Enabling the user to back out from unwanted pages.</p>
<p>I&#8217;ve tried to restart Firefox but that didn&#8217;t help. Maybe rebooting the computer can fix it?</p>
<p>Does anyone else experience the same problem?</p>
<div class="note">
<p><strong>Update:</strong> While looking in to this a little further I&#8217;ve managed to get my back button back again. By right-clicking the menubar and select &#8220;Customize&#8221; from the context menu, I found my missing buttons and could easily drag them back where they belong.</p>
<p><a href="http://media.svennerberg.com/2008/09/customize.png" rel="lightbox[imageset] title="The customize dialog in Firefox 3"><img src="http://media.svennerberg.com/2008/09/customize-410x299.png" alt="" /></a></p>
<p>The question is what made them disappear in the first place.
</p></div>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2008/09/wheres-me-back-button/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The use of buttons in web forms</title>
		<link>http://www.svennerberg.com/2008/09/the-use-of-buttons-in-web-forms/</link>
		<comments>http://www.svennerberg.com/2008/09/the-use-of-buttons-in-web-forms/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 21:01:47 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=327</guid>
		<description><![CDATA[Action buttons exists at the bottom of almost every web form. They&#8217;re so common that we often doesn&#8217;t even reflect on how to actually design them. By gathering information from a few of the great minds in the field of web usability and also from my own experiences, I&#8217;ve tried to come up with a [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2008/09/puff.gif" alt="" class="alignright" />Action buttons exists at the bottom of almost every web form. They&#8217;re so common that we often doesn&#8217;t even reflect on how to actually design them. By gathering information from a few of the great minds in the field of web usability and also from my own experiences, I&#8217;ve tried to come up with a set of best practices on how to design them efficiently. </p>
<p><span id="more-327"></span></p>
<h3>Position</h3>
<p>According to <strong>Jakob Nielsen</strong>, the order of the buttons doesn&#8217;t matter that much. Both positions has it&#8217;s pros and cons. The important thing is to be consistent and if possible follow platform <acronym title="Graphical User Interface">GUI</acronym> standards [<a href="#ref_1">1</a>]. </p>
<p>Outside the web world there are <acronym title="Graphical User Interface">GUI</acronym> standard. The problem is that they are different on different platforms. On the Windows platform the <acronym title="Graphical User Interface">GUI</acronym> guidelines state that OK should be positioned to the left and Cancel to the right. On the Apple platform it&#8217;s the other way around.</p>
<p><a href="http://media.svennerberg.com/2008/09/win_xp.png" rel="lightbox[imageset]" title="Form from Windows XP"><img src="http://media.svennerberg.com/2008/09/xp-buttons.png" alt="" class="alignleft" /><a href="http://media.svennerberg.com/2008/09/mac_os.png" rel="lightbox[imageset]" title="Form from Max OS X"><img src="http://media.svennerberg.com/2008/09/mac_os_buttons.png" alt="" class="alignleft" /></a></p>
<p class="clear">On the Web there really is no standard on how to do this, so we have to try to find out which position is the smartest on our own.</p>
<p><strong>Luke Wroblewski</strong> elaborates on this topic in his article <a href="http://www.lukew.com/resources/articles/web_forms.html">Web Application Form Design</a> [<a href="#ref_2">2</a>]. His recommendation is to position the Primary action (OK) aligned to the left part of the form and the Secondary action (Cancel) to the right.</p>
<p>He elaborates even further on this topic in the book <a href="http://www.svennerberg.com/2008/09/web-form-design-book-review/">Web Form Design</a> [<a href="#ref_3">3</a>], where he presents the finding from a usability test performed on a form with different designs. What the test showed is that having the Primary action left-aligned and the Secondary action to the right of it makes for the fastest performance.</p>
<p><img src="http://media.svennerberg.com/2008/09/form.png" alt="" /></p>
<p><strong>Robert Hoekman, jr.</strong> has also thought a lot about this and presents his thoughts in the book <a href="http://www.svennerberg.com/2008/06/book-review-designing-the-moment/">Designing the Moment</a> [<a href="#ref_4">4</a>].</p>
<p>He agrees with Luke Wroblewski that the Primary action should be left-aligned with the form. The reason for this is that this forms a nice line for the eye to follow, working it’s way down the form, thereby making it easy to scan. Another reason is that if the user is navigating the form with the tab-key, the Primary action comes before the Secondary action in the tab order.</p>
<h3>Labeling the actions</h3>
<p>Robert Hoekman, jr. also have some thoughts about the labeling of buttons. Instead of just labeling the buttons OK and Cancel it’s better to label them after what they actually do [<a href="#ref_4">4</a>]. If it’s to save a note, then why not label the OK-button “Save note” instead. Jakob Nielsen also recommends using a label that explains what it does instead of just a generic label [<a href="#ref_1">1</a>]. By doing this the user is more confident using the form since he knows what to expect when he pushes that button.</p>
<p><img src="http://media.svennerberg.com/2008/09/buttons_2.png" alt="" /></p>
<h3>Visual distinction</h3>
<p>One other thing Robert Hoekman, jr. discusses is to visually distinguish the actions making it easier for the user to pick the right one.</p>
<p>Luke Wroblewski also concludes that making the Primary action stand out more than the Secondary action is a good thing. In the findings of the usability test, he finds that it takes the user a little more time to complete the form if the Primary and Secondary action has a different design. But on the other hand it makes the user more confident and less prone to choose the wrong one. He suggest making the buttons in different colors or making the Secondary action a plain link. </p>
<p>A simple way to visually distinguish the two that I sometimes do, is to use a bold font weight on the Primary action and a normal font weight on the Secondary.</p>
<p><img src="http://media.svennerberg.com/2008/09/buttons_3.png" alt="" /></p>
<p>Robert Hoekman, jr. recommends using a plain link for the Secondary action [<a href="#ref_4">4</a>]. He’s arguments for this is that it makes it clear which one is the most prominent. But it also applies to Fitt’s Law, which suggest that the distance and the size of a target determines how long it takes to reach it and click it. The bigger the target the faster. The Primary action should therefor be bigger than the Secondary action.</p>
<p><img src="http://media.svennerberg.com/2008/09/form_finished.png" alt="" /></p>
<p>In user tests that I’ve conducted I&#8217;ve found that some users can get a little confused by a plain link “acting as a button”. I think that this might be because of never having encountered it in a form before. But as this practice gets more common in both web- and windows applications, I think that this is probably not a persistent problem.</p>
<h3>The Reset button</h3>
<p>The Reset button is used to reset an entire form. It was pretty common in the early days of the web but is rarely seen nowadays. Nevertheless I thought I would say a few words about this button too since when it appears in a form, it&#8217;s usually paired with the Primary action.</p>
<p>In most situations it&#8217;s best not to use this button at all. All to often users click the Reset button by mistake thereby deleting everything they&#8217;ve entered. (I did it as I wrote in <a href="http://www.svennerberg.com/2007/09/confusing-northface-contact-form/">Confusing Northface contact form</a>) And seriously, how often do you want to reset an entire form, and if you do, how hard is it? </p>
<p>The risk with this button is simply to big compared to the possible benefit of it. Plus in most cases it just adds more clutter to the form.</p>
<p>Or as Jakob Nielsen put it in his alertbox column <a href="http://www.useit.com/alertbox/20000416.html">Reset and Cancel Buttons</a> [<a href="#ref_5">5</a>]:</p>
<blockquote cite="http://www.useit.com/alertbox/20000416.html"><p>
The Web would be a happier place if virtually all Reset buttons were removed. This button almost never helps users, but often hurts them.
</p></blockquote>
<p>Possibly the only time when a Reset button is called for, is when a form is used repeatedly by the same user and the information entered differs from each use.</p>
<p>Luke Wroblewski has an idea about the Reset button [<a href="#ref_3">3</a>]. He thinks that if you provide one you should also provide an undo for it. By changing the Reset button into an Undo after being clicked the user can restore the form. This means that you have to temporarily store the form data, but that’s a small price to pay for the convenience of the user.</p>
<h3>Best practices</h3>
<p>Taking all of the opinions above in consideration, plus my own experience in using and designing web forms, I&#8217;ve come up with these best practices.</p>
<ul>
<li>
<h4>Position the Primary action to the left</h4>
<p>Having the buttons aligned with the left side of the form makes a clear path for the eye to follow. By putting the Primary action to the left of the Secondary action it&#8217;s  also positioned first in the tab order.</li>
<li>
<h4>Label the actions in a natural language</h4>
<p>By describing what the action actually does, the user feels more comfortable using it since he know what to expect.</li>
<li>
<h4>Make the Primary action stand out</h4>
<p>This makes it easier for the user to choose the option that&#8217;s most likely without making it harder to find the other option.</li>
<li>
<h4>(Almost) Never use a Reset button</h4>
<p>Reset buttons often hurts user more than it helps them. The only time it&#8217;s called for is in a form that the same user uses over and over again with different input. If you use a Reset, also try to provide an undo function.</li>
</ul>
<p>Do you agree with my conclusions or do you have a different opinion about this? Please share!</p>
<h3>References</h3>
<ol>
<li id="ref_1"><a href="http://www.useit.com/alertbox/ok-cancel.html">OK–Cancel or Cancel–OK?, Jakob Nielsen 2008</a></li>
<li id="ref_2"><a href="http://www.lukew.com/resources/articles/web_forms.html">Web Application Form Design</a></li>
<li id="ref_3"><a href="http://www.rosenfeldmedia.com/books/webforms/">Web Form Design, Chapter 6, Luke Wroblewski 2008</a></li>
<li id="ref_4"><a href="http://www.amazon.com/Designing-Moment-Interface-Design-Concepts/dp/0321535081">Designing the Moment, Chapter 13, Robert Hoekman, jr. 2008</a></li>
<li id="ref_5"><a href="http://www.useit.com/alertbox/20000416.html">Reset and Cancel Buttons, Jakob Nielsen 2000</a></li>
</ol>
<h3>Translations</h3>
<p>This article is also available in:</p>
<ul>
<li><strong>Chinese:</strong> <a href="http://mysmth2003.spaces.live.com/blog/cns!3190FED269E9434E!1346.entry?ppud=4&#038;wa=wsignin1.0&#038;sa=571735814">web表单按钮的使用</a> (Translation by <a href="http://cid-3190fed269e9434e.profile.live.com/">2003</a>)</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2008/09/the-use-of-buttons-in-web-forms/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Gradual Engagement</title>
		<link>http://www.svennerberg.com/2008/09/gradual-engagement/</link>
		<comments>http://www.svennerberg.com/2008/09/gradual-engagement/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 06:35:15 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Definitions]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=282</guid>
		<description><![CDATA[I wrote about it in my blogpost Easiest sign up ever one and a half year ago, where I described the sign-up process of Geni, a site about building your own family tree. I didn&#8217;t know the name of the concept then, but after reading Luke Wroblewski&#8217;s Web Form Design I certainly do. (A review [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote about it in my blogpost <a href="http://www.svennerberg.com/2007/04/easiest-sign-up-ever/">Easiest sign up ever</a> one and a half year ago, where I described the sign-up process of <a href="http://www.geni.com/">Geni</a>, a site about building your own family tree. I didn&#8217;t know the name of the concept then, but after reading Luke Wroblewski&#8217;s <a href="http://www.rosenfeldmedia.com/books/webforms/">Web Form Design</a> I certainly do. (A review of the book is coming up here soon)</p>
<p><em>Gradual Engagement</em> is simply the concept of not throwing a big fat sign-up form in the face of the first-time visitor before he has a chance to try out the site. A better approach is to try to get him engaged in what the site is all about before trying to get tons of information from him.</p>
<p><span id="more-282"></span></p>
<p><a href="http://www.lukew.com/">Luke Wroblewski</a> is also using Geni, among a few other sites, as an example of this concept.</p>
<h3>The Geni example</h3>
<p>In the Geni example it&#8217;s an almost transparent sign-up process since you immediately start to build your family tree, naturally starting with yourself, thereby entering your name and email-address. You&#8217;re instantly engaged in building your tree and are investing time and effort  in the web site. </p>
<p><a href="http://media.svennerberg.com/2008/09/geni-signup.png" rel="lightbox[imageset]" title="The Geni Sign-up Page"><img src="http://media.svennerberg.com/2008/09/geni-signup-410x271.png" alt=""  /></a></p>
<p>An email is sent to you with a temporary password and a link back to the site where you can set a permanent password. Making it easy for you to get back to the site and continue where you left off.</p>
<h3>Conclusions</h3>
<p>This is still the best example I seen so far in getting the user to interact with the product right away. They sure have nailed the concept of <em>Gradual Engagement</em>, but also manages to clearly communicate what the site is all about in a single page.</p>
<p>It&#8217;s probably not a coincident that they&#8217;ve managed to get over 20 million profiles. Trying to remove as many barriers as possible in getting the user engaged is crucial for the success of web applications.</p>
<p>I think this is something we all can learn from, especially when it comes to social media and web applications. </p>
<p>Do you know of other examples of <em>Gradual Engagement</em>?</p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2008/09/gradual-engagement/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WebSlices, evolution of RSS?</title>
		<link>http://www.svennerberg.com/2008/08/webslices-evolution-of-rss/</link>
		<comments>http://www.svennerberg.com/2008/08/webslices-evolution-of-rss/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 23:21:24 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Microformats]]></category>
		<category><![CDATA[Webslices]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=217</guid>
		<description><![CDATA[In the upcoming new version of Internet Explorer 8, which is in public Beta 1 right now, there&#8217;s support for a new technique called WebSlices. Is this yet another proprietary feature of Microsoft or is it a really useful evolution of RSS that will be adopted as a web standard? Since it follows the patterns [...]]]></description>
			<content:encoded><![CDATA[<p>In the upcoming new version of Internet Explorer 8, which is in public Beta 1 right now, there&#8217;s support for a new technique called WebSlices. Is this yet another proprietary feature of Microsoft or is it a really useful evolution of <acronym title="Really Simple Syndication">RSS</acronym> that will be adopted as a web standard? Since it follows the patterns of the Microformat <a href="http://microformats.org/wiki/hatom">hAtom</a>, which is an unobtrusive way of marking up content with standard <acronym title="HyperText Markup Language">HTML</acronym>, I think that it might actually be a pretty good innovation.</p>
<p><img src="http://media.svennerberg.com/2008/08/ie8beta_logo.gif" alt="Internet Explorer 8 Beta" /></p>
<p><span id="more-217"></span></p>
<p>The basic concept is to allow users to subscribe to a part of a page. Similar to how you subscribe to <acronym title="Really Simple Syndication">RSS</acronym> feeds. This is done by making parts of a web page into WebSlices. For example if you interested in an object on eBay, you can subscribe to the information about that particular object if it&#8217;s marked up as a WebSlice.</p>
<p>Because it has the form of a Microformat it&#8217;s a very safe technique to use. If your browser is WebSlice enabled you will benefit from it, if it&#8217;s not you won&#8217;t notice anything unusual.</p>
<h3>The WebChunks add-on</h3>
<p><img src="http://media.svennerberg.com/2008/08/webchunks_logo.png" alt="" class="alignright" />There&#8217;s already an add-on for Firefox called <a href="https://addons.mozilla.org/en-US/firefox/addon/8494">WebChunks</a> that handles WebSlices in a similar way that IE8 does. I wouldn&#8217;t be surprised if the next version of Firefox also will handle this (and other Microformats) natively. </p>
<p>Actually Firefox has something similar which they call <a href="https://wiki.mozilla.org/Microsummaries">Microsummaries</a>. It works just about the same way but is trickier to implement, plus the feature is hidden deep inside the browser where no one, except geeks, will find it.</p>
<p>In this example I add a Suunto watch from an eBay auction to my WebChunk toolbar. You can try it yourself at <a href="http://ie8.ebay.com/">eBays WebSlice enhanced search page</a>. </p>
<p>When you put the mouse cursor over a WebSlice, a blue icon appears next to the content (in IE8 it&#8217;s purple).</p>
<p><img src="http://media.svennerberg.com/2008/08/subscribe_to_a_webchunk_1.png" alt="" /></p>
<p>You store the Webslice by clicking on the icon.</p>
<p><img src="http://media.svennerberg.com/2008/08/subscribe_to_a_webchunk_2.png" alt="" /></p>
<p>With WebChunks you get an extra toolbar in Firefox where your saved &#8220;chunks&#8221; appears, kind of the same way as Active bookmarks does. If the content has changed since you last looked at it, the text will be bold. You access the Webslice by clicking on it and are presented with just that part of the original web page, readily accessible regardless of what page your currently at. </p>
<p><img src="http://media.svennerberg.com/2008/08/webchunks-ebay.png" alt=""  /></p>
<p>Other pages you can try this on is <a href="http://en.wikipedia.org/wiki/Acid3">an article on Wikipedia about the Acid3 test</a> and <a href="http://www.stumbleupon.com/ie8/ie8_feed.php">Internet Buzz on StumbleUpon</a>. Of course you first have to install either <a href="http://www.microsoft.com/windows/products/winfamily/ie/ie8/getitnow.mspx">Internet Explorer 8 Beta 1 for Developers</a> or the<a href="https://addons.mozilla.org/en-US/firefox/addon/8494"> WebChunk Firefox Add-on</a>.</p>
<h3>How to code it</h3>
<p>Like all other Microformats, WebSlices relies on standard <acronym title="HyperText Markup Language">HTML</acronym> elements and attributes to mark up the content.</p>
<h4>WebSlice</h4>
<p>First of all the WebSlices must be contained inside a containing element with the attribute <code>class="hslice"</code>. This element must also have an unique id attribute.</p>
<h4>Entry Title</h4>
<p>It also have to have an <em>Entry Title</em>. This could for example be the name of an eBay object and could be contained in a <code>&lt;h3&gt;</code> with the attribute <code>class="entry-title"</code>. This is the same as the hAtom standard property. </p>
<h4>Entry Content</h4>
<p>There&#8217;s a third optional attribute that&#8217;s also important, and that&#8217;s <em>Entry Content</em>. It contains the content of the WebSlice and is marked up with the attribute <code>class="entry-content"</code>. Preferable inside a <code>&lt;div&gt;</code>.</p>
<p>This results in the very simple code below. It has all the ingredients of a nice WebSlice.</p>
<pre>
<code>&lt;div class="hslice" id="item-1"&gt;
	&lt;h3 class="entry-title"&gt;Suunto X-lander watch&lt;/h3&gt;
 	&lt;div class="entry-content"&gt;
		&lt;img src="x-lander.jpg" alt="" /&gt;
		&lt;p&gt;Nice wristop computer watch. Price: $229.99&lt;/p&gt;
	&lt;/div&gt;
&lt;/div&gt;</code>
</pre>
<p>Other optional attributes are: </p>
<h4>Expiration</h4>
<p>This optional attribute indicates the end time of an object. Like for example when an auction is finished. It&#8217;s expressed with the attribute <code>class="endtime"</code>.</p>
<pre>
<code>&lt;p&gt;End time: &lt;abbr class="endtime" title="2008-08-28T12:00:00-05:00"&gt; 6 hours&lt;/abbr&gt;&lt;/p&gt;</code>
</pre>
<h4>Bandwidth</h4>
<p>This optional attribute indicates how often the item is updated. It&#8217;s value must be an integer and expresses the number of minutes before update. It&#8217;s expressed with the attribute <code>class="ttl"</code>. (ttl=Time To Live)</p>
<pre>
<code>&lt;p&gt;This item updates every &lt;span class="ttl"&gt;15&lt;/span&gt; minutes.&lt;/p&gt;</code>
</pre>
<h4>Feed <acronym title="Uniform Resource Locator">URL</acronym></h4>
<p>This optional attribute indicates if there&#8217;s a different source to get updates from. It&#8217;s contained in an anchor element <code>&lt;a&gt;</code> with the attribute <code>rel="feedurl".</code></p>
<pre>
<code>&lt;a rel="feedurl" href="http://www.ebay.com/feed.xml"&gt;Subscribe to Feed&lt;/a&gt;</code>
</pre>
<p>If you&#8217;re familiar with the concept of Microformats, this is very straight forward and easy to code.</p>
<h3>Conclusions</h3>
<p>Will WebSlices catch on? Who knows? I think that because it builds on existing standards it might stand a chance. The beauty and simplicity of Microformats will make it easy for web developers to implement. But of course, in the end it&#8217;s up to the web surfers if they find this technique useful or not, that will ultimately determine it&#8217;s future.</p>
<p>Will it evolutionize <acronym title="Really Simple Syndication">RSS</acronym>? Personally I think that if WebSlices catch on, <acronym title="Really Simple Syndication">RSS</acronym> will probably coexist with it<br />
since it&#8217;s more lightweight presentation is more suitable for some types of content. </p>
<p>Anyway I think it&#8217;s nice to see that Microsoft is doing an effort in the same direction as the Microformat initiative, elevating existing standards instead of trying to do something completely propitiatory. I think that they are starting to play well with the rest of the web development community and that&#8217;s really nice to see.</p>
<h3>Further resources</h3>
<ul>
<li><a href="http://www.microsoft.com/windows/products/winfamily/ie/ie8/default.mspx">Internet Explorer 8</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/cc304073(VS.85).aspx">About Webslices on <acronym title="Microsoft Developer Network">MSDN</acronym></a></li>
<li><a href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ie8whitepapers&#038;ReleaseId=567">Download whitepapers</a></li>
<li><a href="http://download.microsoft.com/download/B/D/2/BD294C35-7BBD-4AF5-9ECA-5D902116C260/ie8b1_webslices_overview.wmv">Demo Video: how to use Webslices in IE8 Beta 1</a></li>
</ul>
<p>Finally I&#8217;d like to thank <a href="http://www.freddes.se/">Fredde</a>, for showing me this technology and pointing me in the right direction.</p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2008/08/webslices-evolution-of-rss/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://download.microsoft.com/download/B/D/2/BD294C35-7BBD-4AF5-9ECA-5D902116C260/ie8b1_webslices_overview.wmv" length="5834411" type="video/x-ms-wmv" />
		</item>
		<item>
		<title>ASP.NET MVC Preview Release 4</title>
		<link>http://www.svennerberg.com/2008/08/aspnet-mvc-preview-release-4/</link>
		<comments>http://www.svennerberg.com/2008/08/aspnet-mvc-preview-release-4/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 20:36:08 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=105</guid>
		<description><![CDATA[To my delight I noticed that during my vacation the ASP.NET MVC Preview Release 4 have been released. This is nice since I&#8217;ve been trying to wrap my head around this framework for a project I&#8217;m currently working on. The MVC framework certainly solves a lot of the issues I have with ASP.NET and actually [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2008/08/aspnetlogo_200.gif" alt="Microsoft ASP.NET" class="alignright" />To my delight I noticed that during my vacation the <acronym title="Active Server Pages">ASP</acronym>.NET MVC Preview Release 4 have been released. This is nice since I&#8217;ve been trying to wrap my head around this framework for a project I&#8217;m currently working on. </p>
<p>The MVC framework certainly solves a lot of the issues I have with <acronym title="Active Server Pages">ASP</acronym>.NET and actually makes it possible to create standard compliant websites without having to bend over backwards with all the awkward quirks of the <acronym title="Active Server Pages">ASP</acronym>.NET Web Forms model. </p>
<p><span id="more-105"></span></p>
<p><a href="http://weblogs.asp.net/scottgu/about.aspx">Scott Guthrie</a> has written about the new release, describing what&#8217;s different from the last one. One thing that I found particular nice is that it&#8217;s now really easy to implement functions for handling logins and such. The new template even includes basic examples that you can easily adapt to your own needs.</p>
<h3>Action Filter Attributes</h3>
<p>Action filters is a way to intercept an Action Method and perform something before and/or after it has been executed. They are not new since they been around since preview release 2, but the news is that there are some really useful ones built in. You can also easily make your own.</p>
<p>They are very easy to use. You just define them on a class within a Controller or directly on an Action Method like this:</p>
<pre>
<code>[FilterName]
Public Class ClassName : Controller
{
	[FilterName]
	public object MethodName() 
	{
		//Code...
		return View();
	}
}</code>
</pre>
<p>Two of the built in filters I find most interesting are the OutputCache Filter and the Authorization Filter. The OutputCache Filter enables you to easily cache certain content via <acronym title="Active Server Pages">ASP</acronym>.NET&#8217;s output cache features. The Authorization Filter lets you integrate authorization control on different content in a very simple manner. This in combination with the built in user handling makes it really easy to build websites with login functionality.</p>
<p>To read more about these enhancements and others, visit <a href="http://weblogs.asp.net/scottgu/archive/2008/07/14/asp-net-mvc-preview-4-release-part-1.aspx">Scott Guthris blog</a>.</p>
<p><a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=15389">Download <acronym title="Active Server Pages">ASP</acronym>.NET MVC Preview Release 4 from Codeplex</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2008/08/aspnet-mvc-preview-release-4/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>5 essential books on usability</title>
		<link>http://www.svennerberg.com/2008/07/5-essential-books-on-usability/</link>
		<comments>http://www.svennerberg.com/2008/07/5-essential-books-on-usability/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 20:08:40 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=64</guid>
		<description><![CDATA[I&#8217;ve compiled a short list of book on usability and UX design that I&#8217;ve found both valuable and inspiring. All of these books have given me important insights and helped me to better understand the different aspects of the area. I&#8217;ve listed them in the order I think one should read them and I&#8217;ve also [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.svennerberg.com/2008/07/all_books.png" alt="" title="all_books" width="191" height="182" class="alignleft size-full wp-image-92" /><br />
I&#8217;ve compiled a short list of book on usability and UX design that I&#8217;ve found both valuable and inspiring. All of these books have given me important insights and helped me to better understand the different aspects of the area. </p>
<p>I&#8217;ve listed them in the order I think one should read them and I&#8217;ve also written a small text about each. </p>
<p><span id="more-64"></span></p>
<h3 class="clear">1. The Inmates are Running the Asylum</h3>
<p>by Alan Cooper<br />
<a href="http://media.svennerberg.com/2008/06/the-inmates-are-running-the-asylum.jpg" rel="lightbox[imageset]" title="The Inmates are Running the Asylum"><img src="http://media.svennerberg.com/2008/06/the-inmates-are-running-the-asylum-small.png" alt="" class="alignright" /></a><br />
This book is not a how-to-book but rather a book about what&#8217;s wrong with how we look at software/web development. It&#8217;s suitable not only for designers and developers but everyone that&#8217;s involved in the development process. Everybody from project owners and project leaders to interaction designers and programmers.</p>
<p>It was a real eye-opener for me back when I first read it and made me reconsider my whole attitude towards the industry and the processes that drives it. This book was what really started my passion about creating good user experiences.</p>
<p>I wish more people would read this book as it gives a whole new perspective on the business of creating software. I think it would enable people in different roles to communicate more effectively and have a better understanding of each others work and priorities.</p>
<p><strong><a href="http://www.amazon.com/gp/product/0672326140?ie=UTF8&#038;tag=inusabiwetrus-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0672326140">The Inmates Are Running the Asylum</a></strong><img src="http://www.assoc-amazon.com/e/ir?t=inusabiwetrus-20&#038;l=as2&#038;o=1&#038;a=0672326140" width="1" height="1" alt="" style="border:none !important; margin:0px !important;" /><br />
<strong>Author</strong>: Alan Cooper<br />
<strong>Publisher</strong>: Sams &#8211; Pearson Education, 2004<br />
<strong>ISBN-10</strong>: 0-672-32614-0<br />
<strong>ISBN-13</strong>: 978-0-672-32614-1</p>
<h3>2. Don&#8217;t Make Me Think</h3>
<p>by Steve Krug</p>
<p><a href="http://media.svennerberg.com/2008/06/dont_make_me_think_2nd.png" rel="lightbox[imageset]" title="Don't make me think"><img src="http://media.svennerberg.com/2008/06/dont_make_me_think_2nd_small.png" alt="" class="alignright" /></a></p>
<p>I really love this book. It&#8217;s written in a fun and engaging way and is also pretty short, making it shock full of valuable tips and insights. Steve Krug has a really pragmatic attitude towards interaction design and usability, making his points understandable for everyone. Or as he himself puts it: &#8220;It&#8217;s not Rocket Surgery&#8221;.</p>
<p>If you&#8217;re looking for a good introduction to usability and  usability testing. I can&#8217;t think of a better book than this.</p>
<p><strong><a href="http://www.amazon.com/gp/product/0321344758?ie=UTF8&#038;tag=inusabiwetrus-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0321344758">Don&#8217;t Make Me Think</a></strong><img src="http://www.assoc-amazon.com/e/ir?t=inusabiwetrus-20&#038;l=as2&#038;o=1&#038;a=0321344758" width="1" height="1" alt="" style="border:none !important; margin:0px !important;" /><br />
<strong>Author</strong>: Steve Krug<br />
<strong>Publisher</strong>: New Riders Press; 2nd edition, 2005<br />
<strong>ISBN-10</strong>: 0-321-34475-8<br />
<strong>ISBN-13</strong>: 978-0-321-34475-5</p>
<h3>3. The Design of Everyday Things</h3>
<p>by Donald Norman</p>
<p><a href="http://media.svennerberg.com/2008/06/the-design-of-everyday-things.jpg" rel="lightbox[imageset]" title="The Design of Everyday Things"><img src="http://media.svennerberg.com/2008/06/the-design-of-everyday-things-small.png" alt="" class="alignright" /></a></p>
<p>Donald Norman is a true giant in the field of usability. This book is a classic and an essential read for anyone working with user interface design.</p>
<p><em>The Design of Everyday Things</em> is not so much a book about software design, but a book about how people perceives the world and interacts with it. He talks about everyday objects like doors and water taps and what makes them easy or hard to use. It&#8217;s a lot about how the human brain works and how we interpret different objects according to how they look and feel. </p>
<p>I promise that you&#8217;ll never look at a door the same way after reading this book. At least I didn&#8217;t. <img src='http://www.svennerberg.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong><a href="http://www.amazon.com/gp/product/0465067107?ie=UTF8&#038;tag=inusabiwetrus-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0465067107">The Design of Everyday Things</a></strong><img src="http://www.assoc-amazon.com/e/ir?t=inusabiwetrus-20&#038;l=as2&#038;o=1&#038;a=0465067107" width="1" height="1" alt="" style="border:none !important; margin:0px !important;" /><br />
<strong>Author</strong>: Donald A. Norman<br />
<strong>Publisher</strong>: Basic Books, 2002<br />
<strong>ISBN-10</strong>: 0-465-06710-7<br />
<strong>ISBN-13</strong>: 978-0-465-06710-7</p>
<h3>4. About Face 3</h3>
<p>by Alan Cooper, Robert Reimann, and David Cronin</p>
<p><a href="http://media.svennerberg.com/2008/06/about-face-3.png" rel="lightbox[imageset]" title="About Face 3"><img src="http://media.svennerberg.com/2008/06/about-face-3-small.png" alt="" class="alignright" /></a></p>
<p><em>About Face 3</em> with the subtitle <em>The Essentials of Interaction Design</em> is sort of the sequel to <em>The Inmates are Running the Asylum</em>. Where the latter book have more of a business perspective on usability this book is about how to actually put those ideas into action. Alan Cooper is a strong advocate for <a href="http://en.wikipedia.org/wiki/User-centered_design">User Centered Design</a> (UCD) and was the one coming up with the concept of <a href="http://en.wikipedia.org/wiki/Personas">personas</a>. Which, as a side note, was first introduced in <em>The Inmates are Running the Asylum</em>.</p>
<p>The book is divided in three parts where the first part, &#8220;Understanding Goal-Directed Design&#8221;, deals with how to research the needs of the users and how to use this information to create usable designs. The second part is about &#8220;Designing behavior and form&#8221; and the third part is about &#8220;Designing Interaction Details&#8221;</p>
<p>I think that the first part of the book is the most valuable one. It provides you with the tools to perform effective user research, and how to analyze the gathered data. It also provides fundamental insights into what kind of different users there are and what different needs they have.</p>
<p>The two other parts is more of best practices when it comes to the actual design of interactions. One thing that&#8217;s really useful is the lists of &#8220;Design Principles&#8221; that is compiled in a single list at the end of the book.</p>
<p><strong><a href="http://www.amazon.com/gp/product/0470084111?ie=UTF8&#038;tag=inusabiwetrus-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0470084111">About Face 3</a></strong><img src="http://www.assoc-amazon.com/e/ir?t=inusabiwetrus-20&#038;l=as2&#038;o=1&#038;a=0470084111" width="1" height="1" alt="" style="border:none !important; margin:0px !important;" /></p>
<p><strong>Author</strong>: Alan Cooper, Robert Reimann, and David Cronin<br />
<strong>Publisher</strong>: Wiley 2007<br />
<strong>ISBN-10</strong>: 0-470-08411-1<br />
<strong>ISBN-13</strong>: 978-0-470-08411-3</p>
<h3>5. Designing the Obvious</h3>
<p>by Robert Hoekman Jr</p>
<p><a href="http://media.svennerberg.com/2008/06/designing-the-obvious.jpg" rel="lightbox[imageset]" title="Designing the Obvious"><img src="http://media.svennerberg.com/2008/06/designing-the-obvious-small.png" alt="" class="alignright" /></a></p>
<p>The dominant usability method right now is User Centered Design (UCD). Lately there&#8217;s been an intense debate over at <a href="http://www.ixda.org/discuss.php?post=30642" title="Is UCD really broken?">IxDA</a> wether it&#8217;s a good practice or not. Robert Hoekman Jr is one among others that believes that it&#8217;s not such a good approach. He has introduced his own concept which he calls, Activity and Behavior Centered Design (ABCD), which he describes in the three part article: Redefining User-centered design [<a href="http://www.peachpit.com/guides/content.aspx?g=webdesign&#038;seqNum=352">1</a>] [<a href="http://www.peachpit.com/guides/content.aspx?g=webdesign&#038;seqNum=355">2</a>] [<a href="http://www.peachpit.com/guides/content.aspx?g=webdesign&#038;seqNum=358">3</a>] </p>
<p>In Designing the Obvious he doesn&#8217;t talk about ABCD but he does present seven principles of interaction design that has proved useful in his own work. This book is really nice in its pragmatic approach and will provide you with tons of good advice and a lot of good examples of great design.</p>
<p>I liked it so much that I&#8217;ve read it twice! </p>
<p><a href="http://www.svennerberg.com/2008/06/book-review-designing-the-moment/">Also read the review I wrote on his latest book: Designing the Moment</a>.</p>
<p><strong><a href="http://www.amazon.com/gp/product/032145345X?ie=UTF8&#038;tag=inusabiwetrus-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=032145345X">Designing the Obvious</a></strong><img src="http://www.assoc-amazon.com/e/ir?t=inusabiwetrus-20&#038;l=as2&#038;o=1&#038;a=032145345X" width="1" height="1" alt="" style="border:none !important; margin:0px !important;" /><br />
<strong>Author</strong>: Robert Hoekman, Jr.<br />
<strong>Publisher</strong>: New Riders 2007<br />
<strong>ISBN-10</strong>: 0-321-45345-X<br />
<strong>ISBN-13</strong>: 978-0-321-45345-7</p>
<p>All of these books have been important for me in my understanding of usability and UX design and I highly recommend all of them. What do you think? Have you read any of these books or other books that you think are essential reading for people working with these things? </p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2008/07/5-essential-books-on-usability/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>I miss X-Ray</title>
		<link>http://www.svennerberg.com/2008/07/i-miss-x-ray/</link>
		<comments>http://www.svennerberg.com/2008/07/i-miss-x-ray/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 07:20:09 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=90</guid>
		<description><![CDATA[I really hope that Stuart Robertsson, the maker of the ingenious Firefox Add-on X-Ray, updates it to work with Firefox 3 soon! I don&#8217;t think I&#8217;ve realized how much I&#8217;ve relied on this add-on in my daily work until now that it doesn&#8217;t work anymore. So what is X-Ray? For you who don&#8217;t know what [...]]]></description>
			<content:encoded><![CDATA[<p>I really hope that Stuart Robertsson, the maker of the ingenious Firefox Add-on <a href="https://addons.mozilla.org/en-US/firefox/addon/1802">X-Ray</a>, updates it to work with Firefox 3 soon! I don&#8217;t think I&#8217;ve realized how much I&#8217;ve relied on this add-on in my daily work until now that it doesn&#8217;t work anymore.</p>
<p><img src="http://media.svennerberg.com/2008/07/x-ray.png" alt="" class="center" /></p>
<p><span id="more-90"></span></p>
<h3>So what is X-Ray?</h3>
<p>For you who don&#8217;t know what X-Ray is. It&#8217;s an add-on for Firefox that enables you to see the <acronym title="HyperText Markup Language">HTML</acronym> on a web page without having to look at the source code. It justs shows tags around the different elements directly on a web page and gives you an instant glimpse of how the page is built.</p>
<p>I use it to get a quick understanding of how web pages others built are structured but also to see what class or id a certain element has, which header level a heading has and things like that on the pages I&#8217;m currently working on. It&#8217;s one of those small tools that have proved to be really useful.</p>
<p>So please, <a href="http://www.designmeme.com/">Stuart Robertson</a>, update X-Ray to work with Firefox 3 as soon as possible!</p>
<p class="note"><strong>Update [2008-07-10]:</strong> I just discovered that Stuart has <a href="http://www.designmeme.com/2006/01/06/new-firefox-extension-x-ray/#comment-148868">posted a comment at designmeme.com</a> that he actually have submitted an updated version to addons.mozilla.org, but I can&#8217;t find it. Is there anybody else who has?</p>
<p class="note"><strong>Update 2 [2008-08-21]:</strong> It&#8217;s finally here! And it&#8217;s been available for the last six days, I just haven&#8217;t noticed. It&#8217;s with pure joy I can say that I yet again can use X-Ray in my daily work. Install it now from <a href="https://addons.mozilla.org/en-US/firefox/addon/1802">addons.mozilla.org</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2008/07/i-miss-x-ray/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>No undo? Redo!</title>
		<link>http://www.svennerberg.com/2008/07/no-undo-redo/</link>
		<comments>http://www.svennerberg.com/2008/07/no-undo-redo/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 23:45:59 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Design patterns]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://www.svennerberg.com/?p=37</guid>
		<description><![CDATA[Why is it that web apps very often lack something that we take for granted in most window applications, namely the undo function? Is it because it&#8217;s not needed? Is it too hard to implement or is it simply just because it&#8217;s something that developers don&#8217;t think is needed? The most common solution to prevent [...]]]></description>
			<content:encoded><![CDATA[<p>Why is it that web apps very often lack something that we take for granted in most window applications, namely the undo function? Is it because it&#8217;s not needed? Is it too hard to implement or is it simply just because it&#8217;s something that developers don&#8217;t think is needed?</p>
<p>The most common solution to prevent user errors is to simply throw an alertbox warning about potential damage or loss of data that the action might cause. Even otherwise awesome web applications often resorts to this behavior. Take for example <a href="http://www.backpackit.com/">Backpack</a> from 37 signals, which I regard a very usable and overall great product. When you try to delete a note they throw this alert in your face: </p>
<p><img src="http://media.svennerberg.com/2008/07/backpack_alert.png" alt="Are you sure you want to delete this note?" class="centered" /></p>
<p>This is, from the developers point of view, the easiest way to handle it. It&#8217;s almost too easy to implement an alert and many developers habitually do it without giving it a second thought.</p>
<p>A far better solution is to use an undo function. Although harder to implement it maps so much better to the users mental model and behavior patterns. As Alan Cooper puts it in About Face 3:</p>
<blockquote cite="Alan Cooper, About Face 3, page 336"><p>Users generally don&#8217;t believe, or at least don&#8217;t want to believe, that they make mistakes. This is another way of saying that the persona&#8217;s mental model typically doesn&#8217;t include error on his part. Following a persona&#8217;s mental model means absolving him of blame. The implementation model, however, is based on an error-free CPU. Following the implementation model means proposing that all culpability must rest with the user. Thus, most <em>software</em> assumes that it is blameless, and any problems are purely the fault of the user.<br />
<cite>Alan Cooper, Aboute Face 3</cite>
</p></blockquote>
<p>An undo function enables the user to easily recover from mistakes and also encourage him to explore the interface without fear of doing irreversible damage. It transfers the responsibility of handling errors from the user to the system, where it righteously belongs.</p>
<p><span id="more-37"></span></p>
<h3>Problems with alerts</h3>
<p>Alerts seems to be the dominant solution to handle potentially &#8220;harmful&#8221; action but there are several problems with them. </p>
<ol>
<li><strong>Interrupts workflow</strong><br />
It makes the user have to stop and consider what it says or just ignore it and dismiss it as fast as possible.</li>
<li><strong>Locks up the whole browser</strong><br />
Alerts that are <em>application modal</em>, locks the whole browser, preventing the user from doing anything before he dismisses the alert. This is plain rude behavior! Sure there are times when it&#8217;s motivated but often it&#8217;s not. As a developer you have to ask yourself: &#8220;Is this action so serious that I have to give the user the strongest possible warning. Maybe there&#8217;s other ways of doing it?</li>
<li><strong>Users tend to just click &#8220;OK&#8221;</strong><br />
If the system throws alerts all the time during normal tasks, the user eventually tends to ignore them and just habitually click &#8220;OK&#8221;. When he realizes that he&#8217;s deleted the wrong document, it&#8217;s already too late.</li>
</ol>
<h4>Document modal alerts</h4>
<p><em>Document modal alerts</em> has gained popularity on the web but are little better than application modal dialogs. It&#8217;s the kind of alert that looks like lightbox showing an image (Click one of the images below to see what I mean). The only difference from <em>application modal alerts</em> is that they don&#8217;t lock up the whole browser but only the page you currently at. They do however share the same problems.</p>
<h3>Examples</h3>
<p>Here are some examples of web sites that have implemented different variations of an undo function.</p>
<h4>Flickr</h4>
<p><a href="http://www.flickr.com/">Flickr</a> has a nice way of showing important messages. The message is a link that takes you to the important information and in the right part of the message box there&#8217;s a close button. </p>
<p><a href="http://media.svennerberg.com/2008/06/flickr_message.png" rel="lightbox[imageset]"><img src="http://media.svennerberg.com/2008/07/flickr_message_small.png" alt="" /></a></p>
<p>When you click the close button the content of the message box changes into a short note that the message will disappear the next time the page loads. But there&#8217;s also an undo-link that gives the user the opportunity to change his mind. </p>
<p><a href="http://media.svennerberg.com/2008/06/flickr_message_undo.png" rel="lightbox[imageset]"><img src="http://media.svennerberg.com/2008/07/flickr_message_undo_small.png" alt="" /></a></p>
<p>This design pattern encourages the user to click things and explore the interface. The ignorant user is not punished for clicking the &#8220;x&#8221; not knowing what it will do. If it didn&#8217;t have the desired effect he can very easily recover from his mistake and still be able to read the important message. If it did what he thought it would he can just carry going about his business.</p>
<h4>Gmail</h4>
<p>I think <a href="http://www.gmail.com/">Gmail</a> was the first web app that I seen using this design pattern. Their implementation gives the user the chance to undo the latest performed action. </p>
<p><a href="http://media.svennerberg.com/2008/06/gmail_undo_delete.png" rel="lightbox[imageset]"><img src="http://media.svennerberg.com/2008/07/gmail_undo_delete_small.png" alt="" /></a></p>
<h4>Google Docs</h4>
<p>In <a href="http://www.google.com/docs">Google Docs</a> there&#8217;s a similar solution. Whenever you perform an action such as moving or deleting a document. You have the opportunity to undo it until you perform another action.</p>
<p><a href="http://media.svennerberg.com/2008/06/google_docs_undo_delete.png" rel="lightbox[imageset]"><img src="http://media.svennerberg.com/2008/07/google_docs_undo_delete_small.png" alt="" /></a></p>
<h4>Writeboard</h4>
<p>37Signals <a href="http://www.writeboard.com/">Writeboard</a> facilitates a different kind of undo. When a Writeboard is deleted the following message appears enabling the user to, for a pretty long time, undo the deletion.</p>
<p><a href="http://media.svennerberg.com/2008/06/writeboard_recover_message.png" rel="lightbox[imageset]"><img src="http://media.svennerberg.com/2008/07/writeboard_recover_message_small.png" alt="" /></a></p>
<h4>Mixx</h4>
<p><a href="http://www.mixx.com/">Mixx</a> takes on a different approach with a time-limited undo. When you submit a new story, you have 15 minutes to edit or delete it. After that you can no longer do anything with it.</p>
<p><a href="http://media.svennerberg.com/2008/06/time-limited-undo.png" rel="lightbox[imageset]" title="Time-limited undo at mixx.com"><img src="http://media.svennerberg.com/2008/06/time-limited-undo-small.png" alt="" /></a></p>
<h3>Final thoughts</h3>
<p>Although some web apps implements an undo function it&#8217;s still very simple ones, enabling the user to undo only the last action performed. The next logical step should be to implement a multi step undo, giving the user real confidence in exploring the application.</p>
<p>Aza Raskin has in his blogpost <a href="http://humanized.com/weblog/2007/09/14/undo-made-easy-with-ajax-part-1/">Undo made easy with Ajax (Part 1)</a> and (<a href="http://humanized.com/weblog/2007/10/22/undo_with_ajax_2/">Part 2</a>) made an attempt to implement an undo function. He have, with the help of <a href="http://www.jquery.com/" title="jQuery: The Write Less, Do More, Javascript Library">jQuery</a>, made a simple one. It&#8217;s not without flaws but is still a good example of one way to implement it. He has also written an article on the subject, published on A list apart called <a href="http://www.alistapart.com/articles/neveruseawarning">Never Use a Warning When you Mean Undo.<br />
</a><br />
Paul Boag over at <a href="http://www.boagworld.com/usability/the_importance_of_undo/" title="Boagworld - The importance of undo">Boagworld</a> also have some interesting thoughts around undo.</p>
<p>What do you think about the undo function?</p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2008/07/no-undo-redo/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Change your focus to locus</title>
		<link>http://www.svennerberg.com/2008/05/locus-of-attention/</link>
		<comments>http://www.svennerberg.com/2008/05/locus-of-attention/#comments</comments>
		<pubDate>Mon, 19 May 2008 21:43:11 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Definitions]]></category>
		<category><![CDATA[Design patterns]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://blog.svennerberg.com/?p=18</guid>
		<description><![CDATA[Locus of attention is a term that describes where our attention is focused. In contrary to focus of attention it&#8217;s not entirely up to us where we choose to have our attention. If, for example a bang goes of right besides us, our focus involuntarily is placed on that. And that is our Locus of [...]]]></description>
			<content:encoded><![CDATA[<p><em>Locus of attention</em> is a term that describes where our attention is focused. In contrary to <em>focus of attention</em> it&#8217;s not entirely up to us where we choose to have our attention. If, for example a bang goes of right besides us, our focus involuntarily is placed on that. And that is our <em>Locus of attention</em>. Our <em>focus of attention</em> is alway where we consciously choose to put our attention.</p>
<p>When we are designing user interfaces  it&#8217;s important to be aware of where the users <em>locus of attention</em> are, so that we are able to show crucial information where the user has his or her attention.</p>
<p><span id="more-28"></span>The term was coined by the late Jef Raskin who were one of the pioneers of designing the first Macintosh. He is sometimes actually referred to as &#8220;The father of Macintosh&#8221;.</p>
<blockquote><p>&#8220;I use the term locus because it means place, or site. The term focus, which is sometimes used in a similar connection, can be read as a verb; thus , it conveys a misimpression of how attention works.&#8221;</p>
<p>The Humane Interface &#8211; Jef Raskin, 2000</p></blockquote>
<h3>Real world example</h3>
<p>One way to implement this concept is to allow input where there is output. The edit-in-place design pattern, as for example seen on <a href="http://www.flickr.com/">Flickr</a>, where you can edit a heading by just clicking on it, is a perfect example of this.</p>
<p>1. You want to change the title of a photo so you click where you have your<em> locus of attention</em>: The title.</p>
<p><img class="border" alt="Flickr title" id="image25" src="http://media.svennerberg.com/2008/05/flickr-in-edit-1.jpg" /></p>
<p>2. The title becomes editable and you enter a new title.</p>
<p><img class="border" alt="Flickr edit title" id="image26" src="http://media.svennerberg.com/2008/05/flickr-in-edit-2.jpg" /></p>
<p>3. When you click the Save button a message telling you that the title is being saved appears right where your <em>locus of attention</em> are.</p>
<p><img alt="Flickr - Saving" id="image27" class="border" src="http://media.svennerberg.com/2008/05/flickr-in-edit-3.jpg" /></p>
<p>4. And just like magic the new title appears.</p>
<p><img class="border" id="image28" alt="Flickr - New title" src="http://media.svennerberg.com/2008/05/flickr-in-edit-4.jpg" /></p>
<h3>External links</h3>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Jef_Raskin">Jef Raskin on Wikipedia</a></li>
<li><a href="http://www.amazon.com/Humane-Interface-Directions-Designing-Interactive/dp/0201379376/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1211897545&#038;sr=8-1">The Humane Interface</a></li>
<li><a title=" 	(Review) A Design Manifesto: Rethinking the User Interface" href="http://jef.raskincenter.org/humane_interface/hollands_review.html">Review of The Humane Interface</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2008/05/locus-of-attention/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Confusing Northface contact form</title>
		<link>http://www.svennerberg.com/2007/09/confusing-northface-contact-form/</link>
		<comments>http://www.svennerberg.com/2007/09/confusing-northface-contact-form/#comments</comments>
		<pubDate>Sat, 29 Sep 2007 12:11:29 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://blog.svennerberg.com/?p=13</guid>
		<description><![CDATA[I recently wanted to contact Northface regarding a jacket of mine which zipper has broke. I went to www.northface.com and searched their web site for an email address or something. After some searching I found a button labeled &#8220;Email us&#8221; and clicked on it expecting my email client to launch, but instead I was transferred [...]]]></description>
			<content:encoded><![CDATA[<p>I recently wanted to contact Northface regarding a jacket of mine which zipper has broke. I went to www.northface.com and searched their web site for an email address or something. After some searching I found a button labeled &#8220;Email us&#8221; and clicked on it expecting my email client to launch, but instead I was transferred to a page with a <a href="http://www.thenorthface.com/eu/contact-us-email.html">contact form</a>.</p>
<p><img id="image16" alt="The North Face Contact Form" src="http://media.svennerberg.com/2007/09/nf-contactform-comp.gif" /></p>
<p><span id="more-27"></span>Very well I started filling it out the form and wrote a long explanation what was wrong with my jacket. When I was finished I and wanted to post the form I accedentely clicked the Reset button. Everything I&#8217;d written was instantly deleted. Why did I click the &#8220;Reset-button&#8221; one may ask. The reason is very simple, it was the only button available in the bottom of the form. When I looked closer at the form I noticed a small text saying &#8220;Send&#8221; to the left of the reset-button. Apparently the link to the image mimicking a button was broken and instead of the image the alt-text was shown.</p>
<p>Often users doesn&#8217;t read labels but rather just click on the thing that looks most appropriate, in this case the button. <em>Send</em> is the primary action and <em>reset </em>the secondary action therefore the send-button should be the most prominent one. But in this case it&#8217;s the other way around.<br />
The use of a reset-button  is also very questionable. In this case it provides very little value because in a form this small it&#8217;s really no effort to change or delete the the values I&#8217;ve already entered in the fields if I want to. But very annoying to accidentally reset the whole form. The risk by far outweighs the benefits of the reset-button.</p>
<p>One thing they did right though is to place the primary action before the secondary. That way the user, if using the tab key to navigate the form, will reach the primary action before the secondary.</p>
<p>One other good thing about this solution is that they provided the send-button with an alt-text so even though it&#8217;s not rendered it can still be understood and clicked. To provide these kind of fall backs is crucial when developing web interfaces. A person with images turned off can for example still use the functionality of the form. And in cases like this when an image is missing, the usability of the form decreases but the user can still complete the task at hand.</p>
<h3>Lessons learned</h3>
<ul>
<li>Consider using native form elements for buttons etc, thereby avoiding this problem altogether.</li>
<li>If you still decides to use images, make sure the link to the image is not broken and also provide an alt-text.</li>
<li>Don&#8217;t provide a reset button in simple forms, the cost of error is simply too high.</li>
<li>Make the primary action stand out more than the secondary action thus hinting the user of the correct action to take.</li>
<li>Place the primary action before the secondary action to make it a little more convenient for the user.</li>
</ul>
<p>Do you have any other ideas how to further improve this form. Please leave a comment and share your ideas.</p>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2007/09/confusing-northface-contact-form/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Easiest sign up ever</title>
		<link>http://www.svennerberg.com/2007/04/easiest-sign-up-ever/</link>
		<comments>http://www.svennerberg.com/2007/04/easiest-sign-up-ever/#comments</comments>
		<pubDate>Thu, 12 Apr 2007 20:54:48 +0000</pubDate>
		<dc:creator>Gabriel Svennerberg</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Webb apps]]></category>

		<guid isPermaLink="false">http://blog.svennerberg.com/?p=6</guid>
		<description><![CDATA[I&#8217;ve just discovered a new site called Geni. The site is all about genealogy and building your own family tree. The first thing you do when you enter the site is to start building your own family tree, and naturally you start with yourself. You enter your name and email address and without hardly realizing [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just discovered a new site called <a href="http://www.geni.com">Geni</a>. The site is all about genealogy and building your own family tree. The first thing you do when you enter the site is to start building your own family tree, and naturally you start with yourself. You enter your name and email address and without hardly realizing it you have started you family tree and signed up for the web application at the same time!</p>
<p><img alt="" src="http://media.svennerberg.com/2007/04/signup.gif" /></p>
<p><span id="more-24"></span></p>
<p>In all web application requiring users to sign up before they can use it. One big barrier is to get the user to actually sign up in the first place. By instantly giving her some kind of gratification, like in the Geni example, you significantly lower that barrier. The user only have to enter a minimum, and in this case very relevant, amount of information before they can reap their rewards. No bloated forms to fill out. You just get started right away.</p>
<p>All other information you need from the user can be added later, when the user&#8217;s already up and running. After having invested time and effort in the application she is much more likely to give away more information about herself.</p>
<p>Do you have other examples of web applications who has managed to make the sign up process almost invisible?</p>
<h3>External links</h3>
<ul>
<li><a href="http://www.geni.com/">www.geni.com</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.svennerberg.com/2007/04/easiest-sign-up-ever/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
