<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Janko At Warp Speed</title>
    <description>Helps you build good looking and functional web sites</description>
    <link>http://www.jankoatwarpspeed.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.4.5.0</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://www.jankoatwarpspeed.com/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.jankoatwarpspeed.com/syndication.axd</blogChannel:blink>
    <dc:creator>Janko Jovanovic</dc:creator>
    <dc:title>Janko At Warp Speed</dc:title>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/JankoAtWarpSpeed" type="application/rss+xml" /><feedburner:emailServiceId>JankoAtWarpSpeed</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>Create YouTube-like adaptable view using CSS and jQuery</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f11%2fyoutube-adaptable.png" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
Besides &lt;a href="http://www.jankoatwarpspeed.com/post/2009/05/17/Use-jQuery-to-turn-off-the-lights-while-watching-videos.aspx"&gt;Turn off the lights&lt;/a&gt; feature I explained earlier, YouTube has more great stuff. I believe that you noticed &lt;a href="http://www.youtube.com/watch?v=jqxENMKaeCU"&gt;&amp;quot;change view&amp;quot; feature&lt;/a&gt; which allows you to &lt;strong&gt;switch between normal and wide mode&lt;/strong&gt; and thus expand/shrink movie area. I like this feature because in different circumstances, I need a different view. But the thing I like the most is that, although layout changes, it is done seamingly and all the information remains easily accessible. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jankoatwarpspeed.com/file.axd?file=2009%2f11%2fyoutube-adaptable.zip" class="download"&gt;Download source (29kb)&lt;/a&gt; &lt;a href="http://www.jankoatwarpspeed.com/examples/youtube-adaptable-view/" class="demo"&gt;View demo&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Wireframes above shows what happens when you change the view. By
changing to wide view sidebar goes down and content stretches fully.
Creating this is very simple. The trick is in properly defined
structure and a bit of jQuery.
&lt;/p&gt;
&lt;h2&gt;Structure&lt;/h2&gt;
&lt;p&gt;
This is the most important part of the story. In order to simulate YouTube structure we will define five sections: header, content, comments, sidebar and footer. The structure we need is quite simple:
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;div id=&amp;quot;header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;main&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id=&amp;quot;sidebar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id=&amp;quot;comments&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; 
&lt;/pre&gt;
&lt;p&gt;
The key is in CSS - content and comment areas will float to the left, while &lt;strong&gt;sidebar will float to the right&lt;/strong&gt;. This will allow for sidebar to go down when content streches without disturbing the layout. They will be placed inside container &amp;quot;main&amp;quot; that will clear all floats. There won&amp;#39;t be any special styling for header and footer.
&lt;/p&gt;
&lt;pre&gt;
#header, #content, #comments, #sidebar, #footer { margin:10px 0px; padding:30px;}
#header { width:900px; margin:0px auto;}
#main {width:960px; margin:0px auto; overflow:hidden;}
#content { width:540px; float:left;}
#comments { width:540px; float:left;}
#sidebar { width:280px; margin-left:20px; float:right;}
#footer { width:900px; margin:0px auto;}
&lt;/pre&gt;
&lt;p&gt;
Initially, content will be 600px wide (including paddings). When user changes to wide view it will stretch to 960px. To achieve this we will place a command link somewhere on the page, let&amp;#39;s say inside the content area. I used &lt;a href="http://css-tricks.com/css-sprites/"&gt;CSS Sprites&lt;/a&gt; for the command link in demo, but you can create a simple textual link as the one below. 
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;a id=&amp;quot;wideView&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Change View&amp;lt;/a&amp;gt; 
&lt;/pre&gt;
&lt;h2&gt;Interaction &lt;br /&gt;
&lt;/h2&gt;
&lt;p&gt;
Next we will add a simle jQuery function that will &lt;strong&gt;toggle CSS class named &amp;quot;wide&amp;quot;&lt;/strong&gt;. This class will determine the look of content section in wide mode.
&lt;/p&gt;
&lt;pre&gt;
$(document).ready(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#wideView&amp;quot;).click(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#content&amp;quot;).toggleClass(&amp;quot;wide&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; });
});
&lt;/pre&gt;
&lt;p&gt;
So &amp;quot;wide&amp;quot; CSS class wouldn&amp;#39;t contain nothing more than width property set to 900px (with paddings it will be 960px total, which is the with of out sample website).
&lt;/p&gt;
&lt;pre&gt;
#content.wide { width:900px;}  
&lt;/pre&gt;
&lt;p&gt;
The only thing you need to do next is to check the &lt;a href="http://www.jankoatwarpspeed.com/examples/youtube-adaptable-view/"&gt;demo&lt;/a&gt; and try clicking on &amp;quot;wide view&amp;quot; button ot go direclty to &lt;a href="http://www.youtube.com/watch?v=jqxENMKaeCU"&gt;YouTube - Projcet Home&lt;/a&gt; page and try playing with the layout. You can even watch that fantastic movie and see what we, humans, did to our planet. 
&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;
I really like adaptable views. In one of my previous articles, &lt;a href="http://www.jankoatwarpspeed.com/post/2009/07/07/Adaptable-view.aspx"&gt;Adaptable View - how do they do it&lt;/a&gt; I explained two great examples of this UI pattern. YouTube example is also a great solution that could could be very useful. Additionaly, you can remember users&amp;#39; choices and show wide view whenever they come to your site (or as long they have your cookie). &lt;strong&gt;Would you use this feature somewhere? &lt;/strong&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=mccKhv0BphI:Zjek6wMMw1g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=mccKhv0BphI:Zjek6wMMw1g:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=mccKhv0BphI:Zjek6wMMw1g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=mccKhv0BphI:Zjek6wMMw1g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=mccKhv0BphI:Zjek6wMMw1g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=mccKhv0BphI:Zjek6wMMw1g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=mccKhv0BphI:Zjek6wMMw1g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=mccKhv0BphI:Zjek6wMMw1g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=mccKhv0BphI:Zjek6wMMw1g:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/mccKhv0BphI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/mccKhv0BphI/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/11/08/YouTube-adaptable-view-css-jquery.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=4ba4ca6a-9fbf-4c6f-91c0-36f81aca1d52</guid>
      <pubDate>Sun, 08 Nov 2009 23:30:00 +0100</pubDate>
      <category>Tutorials</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=4ba4ca6a-9fbf-4c6f-91c0-36f81aca1d52</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=4ba4ca6a-9fbf-4c6f-91c0-36f81aca1d52</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/11/08/YouTube-adaptable-view-css-jquery.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=4ba4ca6a-9fbf-4c6f-91c0-36f81aca1d52</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=4ba4ca6a-9fbf-4c6f-91c0-36f81aca1d52</feedburner:origLink></item>
    <item>
      <title>Usability tips for visualizing Ajax requests</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f11%2fajax_indicators.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
The usage of Ajax in web applications and web sites is rapidly increasing. If not handled properly Ajax fucntionalities can break users&amp;#39; expectations and conventions. This is why it is important to help users easily identify what is going on with the system and prevent them to make errors during Ajax operations. 
&lt;/p&gt;
&lt;h2&gt;
Keep users informed&lt;br /&gt;
&lt;/h2&gt;
&lt;p&gt;
Ajax indicators are very important tools that help users to have an understanding of &lt;strong&gt;what is going on with the system and what are responses from the system&lt;/strong&gt;. Indicators should be shown as soon as request starts and hidden when request ends. I&amp;#39;ve seen so many times that indicator is visible even when it was obvious that request is finished (or even worse, in some cases there were not any visual clue of what is going on). 
&lt;/p&gt;
&lt;h3&gt;Simple indicators &lt;br /&gt;
&lt;/h3&gt;
&lt;p&gt;
Simple Ajax indicators provide a strong visual clue that request is in progress. They can be shown as simple text or as an image, usually animated. 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;If it is in a text form, be sure to provide meaningful message, like &amp;quot;Sending email...&amp;quot;. Messages like &amp;quot;Waiting...&amp;quot; could confuse users. What am I waiting for? Is something wrong with the system? &lt;br /&gt;
	&lt;/li&gt;
	&lt;li&gt;If it is an animated image they are usually represented by rotating animation. This is one of the rare good usages (if not only) of animated gifs today&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f11%2floadinfo.png" alt="" /&gt;&lt;a href="http://www.loadinfo.net/"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.loadinfo.net/"&gt;Loadinfo&lt;/a&gt;,
my favorite choice when it comes to indicators, offers a plenty of
animated gifs. Some of them are really fancy, like rotating hourglass.
&lt;/p&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;h3&gt;
Progress indicators&lt;br /&gt;
&lt;/h3&gt;
&lt;p&gt;
If an operation needs a &lt;strong&gt;longer time to execute&lt;/strong&gt; you should use progress indicators. This type of indicators provide a real time information about the progress status, usually by showing how much time has passed and how much has left to the end of request. Progress indicator can also show a status message explaining what is happening at the moment.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f11%2fgetdrobox_progress.png" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.getdropbox.com/"&gt;Dropbox&lt;/a&gt; provides graphical status indicator as well as textual status messages. This is the efficient way to communicate the status of long operations.
&lt;/p&gt;
&lt;h3&gt;Position &lt;br /&gt;
&lt;/h3&gt;
&lt;p&gt;
Whatever option you choose, you have to make sure that indicator is
&lt;strong&gt;clearly visible&lt;/strong&gt;. Depending on their purpose, indicators can be placed inside the same context as the element that started a request or they can be shown in a single position for all request. Previous example shows the case where progress indicator is shown in the upload area.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f11%2fgooglemail.png" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mail.google.com/"&gt;Google Mail&lt;/a&gt; has centralized Ajax indicators in the top of the window that is revealed upon any Ajax request.
&lt;/p&gt;
&lt;h3&gt;Which one to choose?&lt;/h3&gt;
&lt;p&gt;
I think it&amp;#39;s the best to quote Jakob Nielsen&amp;#39;s article &lt;a href="http://www.useit.com/papers/responsetime.html"&gt;Response Times: The Three Important Limits&lt;/a&gt;. I wouldn&amp;#39;t have anything to add here:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;0.1 second&lt;/strong&gt; is about the limit for having the user
	feel that the system is reacting instantaneously, meaning that no
	special feedback is necessary except to display the result.
	&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;1.0 second&lt;/strong&gt; is about the limit for the user&amp;#39;s
	flow of thought to stay uninterrupted, even though the user will notice
	the delay. Normally, no special feedback is necessary during delays of
	more than 0.1 but less than 1.0 second, but the user does lose the
	feeling of operating directly on the data.
	&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;10 seconds&lt;/strong&gt; is about the limit for keeping
	the user&amp;#39;s attention focused on the dialogue. For longer delays, users
	will want to perform other tasks while waiting for the computer to
	finish, so they should be given feedback indicating when the computer
	expects to be done. Feedback during the delay is especially important
	if the response time is likely to be highly variable, since users will
	then not know what to expect.
	&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Disable UI elements during Ajax request&lt;br /&gt;
&lt;/h2&gt;
&lt;p&gt;
While one Ajax request is in progress user can start another one which may bring about the risk of data damage. By double clicking the same button or by clicking on another users can even cause an application failure. But if that happens it&amp;#39;s not their fault. 
&lt;/p&gt;
&lt;p&gt;
This can be easily prevented by disabling UI elements during Ajax request. Depending on the case, you can &lt;strong&gt;disable a particular element or you can disable the entire user interface&lt;/strong&gt;. UI elements should be disabled when Ajax request starts and enabled again when request ends. In some cases your user interface will change view after Ajax request so you won&amp;#39;t enable disabled elements again. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f11%2fbuysellads_progress.png" alt="" /&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://buysellads.com/"&gt;BuySellAds&lt;/a&gt; shows Ajax indicator in centralized area on the screen while the rest of the user interface is disabled. This behavior is consistent through the application.
&lt;/p&gt;
&lt;h2&gt;
Highlight updated area
&lt;/h2&gt;When partially updating a page it is important to &lt;strong&gt;emphasize the outcome of Ajax request&lt;/strong&gt;. The goal of this method is to draw users&amp;#39; attention to updated area and enable them to easily confirm the update. This can be done by highlighting updated area for one second and then fade it away (you can even flash it once or twice). The usual color for highlighting updated area is pale yellow.&lt;br /&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f11%2fbasecamp.png" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://basecamphq.com/"&gt;Basecamp&lt;/a&gt; highlights the updated area with yellow color.
&lt;/p&gt;
&lt;h2&gt;
Conclusion
&lt;/h2&gt;
&lt;p&gt;
To make Ajax functionality easy to understand, you have to provide the information about state of the system&lt;strong&gt; during a request and after the request is finished&lt;/strong&gt;. Basically, when working with Ajax you should: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Use textual or animated Ajax indicators&lt;/li&gt;
	&lt;li&gt;If requests are long, use progress indicators &lt;br /&gt;
	&lt;/li&gt;
	&lt;li&gt;Disable UI elements during Ajax request to prevent potential errors &lt;/li&gt;
	&lt;li&gt;Highlight area updated by Ajax &lt;/li&gt;
	&lt;li&gt;And of course, you should always show &lt;a href="http://www.jankoatwarpspeed.com/post/2008/05/22/CSS-Message-Boxes-for-different-message-types.aspx"&gt;status message&lt;/a&gt; indicating whether operation failed or suceeded &lt;/li&gt;
&lt;/ul&gt;
&lt;strong&gt;What is your experience with visualizing Ajax requests? Is there any specific method you prefer?&lt;/strong&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=DtBJTyX4KEg:QOOEKI3-_-0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=DtBJTyX4KEg:QOOEKI3-_-0:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=DtBJTyX4KEg:QOOEKI3-_-0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=DtBJTyX4KEg:QOOEKI3-_-0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=DtBJTyX4KEg:QOOEKI3-_-0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=DtBJTyX4KEg:QOOEKI3-_-0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=DtBJTyX4KEg:QOOEKI3-_-0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=DtBJTyX4KEg:QOOEKI3-_-0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=DtBJTyX4KEg:QOOEKI3-_-0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/DtBJTyX4KEg" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/DtBJTyX4KEg/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/11/01/usability-tips-visualizing-ajax-requests.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=e14c54a2-6a65-4f34-9609-06e9eac44c0d</guid>
      <pubDate>Sun, 01 Nov 2009 23:00:00 +0100</pubDate>
      <category>Articles</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=e14c54a2-6a65-4f34-9609-06e9eac44c0d</pingback:target>
      <slash:comments>26</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=e14c54a2-6a65-4f34-9609-06e9eac44c0d</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/11/01/usability-tips-visualizing-ajax-requests.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=e14c54a2-6a65-4f34-9609-06e9eac44c0d</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=e14c54a2-6a65-4f34-9609-06e9eac44c0d</feedburner:origLink></item>
    <item>
      <title>Invoicera giveaway winners</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f10%2finvoicera.jpg" alt="Invoicera" /&gt;
&lt;/p&gt;
&lt;p&gt;
Three days ago &lt;a href="http://www.invoicera.com/"&gt;Invoicera&lt;/a&gt; decided to give away 3 subscriptions of their &lt;a href="http://www.invoicera.com/invoice-software-pricing.html"&gt;Classical package&lt;/a&gt; to jankoatwarpspeed.com readers. I am happy to announce lucky winners.
&lt;/p&gt;
&lt;p&gt;
The winners are:
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;span class="fn"&gt;Sid&lt;/span&gt;
	&lt;span class="adr"&gt;&lt;img style="border: 0px none " class="country-name flag" src="/pics/flags/us.png" alt="United States" title="United States" /&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span class="adr"&gt;&lt;/span&gt;&lt;span class="url fn"&gt;Nemke&lt;/span&gt;
	&lt;span class="adr"&gt;&lt;img style="border: 0px none " class="country-name flag" src="/pics/flags/cs.png" alt="" title="Serbia" width="16" height="11" /&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span class="adr"&gt;&lt;/span&gt;&lt;span class="url fn"&gt;Tony Gray&lt;/span&gt;
	&lt;span class="adr"&gt;&lt;img style="border: 0px none " class="country-name flag" src="/pics/flags/us.png" alt="" title="United States" /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f10%2frandomorg.png" alt="" /&gt;
&lt;p&gt;
Congratulations to the winners ans a lot of thanks to &lt;a href="http://www.invoicera.com/"&gt;Invoicera&lt;/a&gt; for this great giveway.&amp;nbsp; 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=Bh1_d6n_pMo:UJr0LKlio-M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=Bh1_d6n_pMo:UJr0LKlio-M:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=Bh1_d6n_pMo:UJr0LKlio-M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=Bh1_d6n_pMo:UJr0LKlio-M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=Bh1_d6n_pMo:UJr0LKlio-M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=Bh1_d6n_pMo:UJr0LKlio-M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=Bh1_d6n_pMo:UJr0LKlio-M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=Bh1_d6n_pMo:UJr0LKlio-M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=Bh1_d6n_pMo:UJr0LKlio-M:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/Bh1_d6n_pMo" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/Bh1_d6n_pMo/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/10/26/Invoicera-giveaway-winners.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=72d7506f-28f1-4d71-9191-c7a6a308b4dd</guid>
      <pubDate>Mon, 26 Oct 2009 23:55:00 +0100</pubDate>
      <category>Articles</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=72d7506f-28f1-4d71-9191-c7a6a308b4dd</pingback:target>
      <slash:comments>12</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=72d7506f-28f1-4d71-9191-c7a6a308b4dd</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/10/26/Invoicera-giveaway-winners.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=72d7506f-28f1-4d71-9191-c7a6a308b4dd</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=72d7506f-28f1-4d71-9191-c7a6a308b4dd</feedburner:origLink></item>
    <item>
      <title>Win a free license for Invoicera billing software</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f10%2finvoicera.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
I am pleased to announce that &lt;a href="http://www.invoicera.com/"&gt;Invoicera &lt;/a&gt;has kindly decided to &lt;strong&gt;giveaway 3 subscriptions&lt;/strong&gt; of their &lt;a href="http://www.invoicera.com/invoice-software-pricing.html"&gt;Classical package&lt;/a&gt; absolutely free to jankoatwarpspeed.com Readers! 
&lt;/p&gt;
&lt;h2&gt;A bit more about Invoicera&lt;/h2&gt;Invoicera is an online billing software which fortifies every individual and helps you to channelize your revenue without committing any invoicing errors. The software comes with many &lt;a href="http://www.invoicera.com/invoice-billing-features.html"&gt;features&lt;/a&gt;, many of them are listed below and many more are yet to come, which every freelancer or an entrepreneur will crave for. &lt;br /&gt;
&lt;h3&gt;Features:&lt;br /&gt;
&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;Report Generation&lt;/li&gt;
	&lt;li&gt;Automatic Invoicing for Recurring/Regular Billing&lt;/li&gt;
	&lt;li&gt;Export and Import your Documents&lt;/li&gt;
	&lt;li&gt;Multiple Payment Gateways&lt;/li&gt;
	&lt;li&gt;Staff Management&lt;/li&gt;
	&lt;li&gt;Create Professional Quotes and Estimates&lt;/li&gt;
	&lt;li&gt;Data Back-up&lt;/li&gt;
	&lt;li&gt;Multiple Currency Support&lt;/li&gt;
	&lt;li&gt;Alerts and Reminders&lt;/li&gt;
	&lt;li&gt;Invoice Scheduling&lt;/li&gt;
	&lt;li&gt;Late Fees Payment&lt;/li&gt;
	&lt;li&gt;Invoice/Estimate As an Attachment&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Is it free?&lt;/h2&gt;
&lt;p&gt;
Well, there is surely a &lt;a href="http://www.invoicera.com/invoice-software-pricing.html"&gt;free plan&lt;/a&gt; with limited features that will help you try it out. But as some say, &amp;ldquo;All good things come with a price&amp;rdquo;. Invoicera plans start from as low as $7/month. &lt;strong&gt;But the winners will be getting it absolutely free.&lt;/strong&gt;
&lt;/p&gt;
&lt;h2&gt;What to do to win?&lt;/h2&gt;
&lt;p&gt;
Well, it&amp;rsquo;s pretty simple; you can take part in this contest and stand a chance by &lt;strong&gt;tweeting about this contest and confirming your tweet by commenting here the twitter status URL&lt;/strong&gt; (you have Retweet button at the end of this post). ex. http://twitter.com/onlyyourspiyu/status/2604845236. You get this URL by clicking the link just below the twitter entry containing text like this: &amp;ldquo;about 2 hours ago from web&amp;rdquo;.
&lt;/p&gt;
&lt;h2&gt;Important Pointers&lt;/h2&gt;
&lt;ol&gt;
	&lt;li&gt;The winners will be decided via &lt;a href="http://www.random.org/"&gt;http://www.random.org/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Fill your name and e-mail address correctly because the winners will be contacted via e-mail only.&lt;/li&gt;
	&lt;li&gt;Post your comment before the contest ends. After the due date comments will be closed.&lt;/li&gt;
	&lt;li&gt;The contest is open till &lt;strong&gt;Monday, October 26th 2009, end of the day&lt;/strong&gt;, and the winners will be announced a few minutes after that. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;strong&gt;Good luck&lt;/strong&gt; and don&amp;rsquo;t forget to &lt;a href="http://twitter.com/invoicera"&gt;follow Invoicera&lt;/a&gt; on twitter!
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=eB82zH0-wS0:X6OeroTg03c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=eB82zH0-wS0:X6OeroTg03c:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=eB82zH0-wS0:X6OeroTg03c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=eB82zH0-wS0:X6OeroTg03c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=eB82zH0-wS0:X6OeroTg03c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=eB82zH0-wS0:X6OeroTg03c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=eB82zH0-wS0:X6OeroTg03c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=eB82zH0-wS0:X6OeroTg03c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=eB82zH0-wS0:X6OeroTg03c:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/eB82zH0-wS0" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/eB82zH0-wS0/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/10/24/Win-a-free-license-for-Invoicera-billing-software.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=10c5883a-e272-466b-999d-7d1f6d719a4e</guid>
      <pubDate>Sat, 24 Oct 2009 20:04:00 +0100</pubDate>
      <category>Articles</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=10c5883a-e272-466b-999d-7d1f6d719a4e</pingback:target>
      <slash:comments>17</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=10c5883a-e272-466b-999d-7d1f6d719a4e</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/10/24/Win-a-free-license-for-Invoicera-billing-software.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=10c5883a-e272-466b-999d-7d1f6d719a4e</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=10c5883a-e272-466b-999d-7d1f6d719a4e</feedburner:origLink></item>
    <item>
      <title>Adaptive web forms</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f10%2fadaptive_webforms.png" alt="" width="500" height="223" /&gt; 
&lt;/p&gt;
&lt;p&gt;
I believe it&amp;#39;s general knowledge that nobody likes filling in web forms. Neither you, nor me. The longer and more complicated the form, the more repellent it is to users. Understandable. Here, I&amp;#39;d like to present a concet which is very interesting to me - adaptive web forms. 
&lt;/p&gt;
&lt;p&gt;
For example, I&amp;#39;m a regular blog reader and often comment on them. This means that every time I have to enter my name, e-mail and url before posting a comment. Browsers do help here, however, by remembering data I&amp;#39;ve previously entered, but I still have to fill these fields in. Some blogs don&amp;#39;t even offer this. 
&lt;/p&gt;
&lt;h2&gt;Remember my input &lt;br /&gt;
&lt;/h2&gt;
&lt;p&gt;
You may have noticed that once you comment on any of my blog posts, &lt;strong&gt;your data is saved and the next time you visit&amp;nbsp;it has&amp;nbsp;already been filled in&lt;/strong&gt;. This is a way in&amp;nbsp;which regular readers are&amp;nbsp;enabled to quickly&amp;nbsp;post comments. However, besides saving just&amp;nbsp;data, the whole of user interface can be adapted to provide a different kind of interaction for returning readers. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f10%2fclever_forms_0.png" alt="" width="501" height="443" /&gt; 
&lt;/p&gt;
&lt;p&gt;
Here is the case: the idea is to save the data that I&amp;#39;ve entered when I visited&amp;nbsp;a blog for the first time (eg.&amp;nbsp;using a cookie). It is also a good idea to inform&amp;nbsp;visitors that the data is going to be saved for&amp;nbsp;next time. In the example above, the message is next to the title &amp;quot;Add comment&amp;quot;. The data is automatically filled in the next time I visit. However, &lt;strong&gt;it can also be hidden&lt;/strong&gt;. The&amp;nbsp;image below is showing a case of returning to the above blog. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f10%2fclever_forms_2.png" alt="" width="501" height="312" /&gt;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
As the data is read from the cookie, it can be saved to a database together with the comment, and almost the whole form (4 fields) can be hidden and replaced with the message&amp;nbsp;&amp;quot;Welcome again&amp;quot;. In this way, I would be not only focused on leaving the comment but it would affect the&amp;nbsp;overall user experience. At least, I think so. 
&lt;/p&gt;
&lt;p&gt;
Of course, in case you want to change your data, you can do so at any time by using a link on the right hand side of the welcome message (this message could be more meaningful, but you get it). By clicking that link, the hidden fields would become visible and the welcome message would be hidden. 
&lt;/p&gt;
&lt;h2&gt;Potential problems &lt;br /&gt;
&lt;/h2&gt;
&lt;p&gt;
Adaptive user interfaces in general have one serious problem - &lt;strong&gt;learnability&lt;/strong&gt;. Users must constantly adapt&amp;nbsp;(remember Microsoft Office Adaptive menus, they were discarded). But I don&amp;#39;t see this will be a big problem here. However, there is another potential problem here, and that&amp;#39;s trust ie. privacy. Advanced users understand how this data is kept, but&amp;nbsp;some users would definitely pose a question. 
&lt;/p&gt;
&lt;p&gt;
Both these problems have a solution in adding a &amp;quot;Remember my personal details&amp;quot; checkbox instead of a message that data is to be saved. This way, the control is back in the user&amp;#39;s hands, which should&amp;nbsp;be a rule. A short survey, I conducted, confirmed this. Around 76% of&amp;nbsp;users surveyed thought this option as the best one, 20% consider&amp;nbsp;a message to be enough while 4% don&amp;#39;t think this feature is necessary at all. 
Ok, I know that survey is not the best tool, but it&amp;#39;s still better than nothing.
&lt;/p&gt;
&lt;h2&gt;Conclusion &lt;br /&gt;
&lt;/h2&gt;
&lt;p&gt;
In the end, I think this is one way web forms could adapt to us instead of us adapting to them. Still, my enthusiasm to shorten the time spent in filling in web forms aside, this should definitely be tested. &lt;strong&gt;Do adaptive web forms make sense to you and do you know some other examples? 
&lt;/strong&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=IPi1-WK0rtM:Yne20nsGP7k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=IPi1-WK0rtM:Yne20nsGP7k:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=IPi1-WK0rtM:Yne20nsGP7k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=IPi1-WK0rtM:Yne20nsGP7k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=IPi1-WK0rtM:Yne20nsGP7k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=IPi1-WK0rtM:Yne20nsGP7k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=IPi1-WK0rtM:Yne20nsGP7k:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=IPi1-WK0rtM:Yne20nsGP7k:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=IPi1-WK0rtM:Yne20nsGP7k:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/IPi1-WK0rtM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/IPi1-WK0rtM/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/10/19/Adaptive-web-forms.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=1685348d-f9e6-469a-9bbf-b23b346d9f27</guid>
      <pubDate>Mon, 19 Oct 2009 09:30:00 +0100</pubDate>
      <category>Articles</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=1685348d-f9e6-469a-9bbf-b23b346d9f27</pingback:target>
      <slash:comments>35</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=1685348d-f9e6-469a-9bbf-b23b346d9f27</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/10/19/Adaptive-web-forms.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=1685348d-f9e6-469a-9bbf-b23b346d9f27</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=1685348d-f9e6-469a-9bbf-b23b346d9f27</feedburner:origLink></item>
    <item>
      <title>Fade colors using jQuery</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f10%2f913628_80306654.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.retweetradar.com/"&gt;Retweetradar&lt;/a&gt; has nice little effect in the footer - links in top lists fade, emphasizing the most popular links with strongest color intensity. This tutorial will explain how to fade a color in array of elements using jQuery.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jankoatwarpspeed.com/file.axd?file=2009%2f10%2ffade-colors-jquery.zip" class="download"&gt;Download source&lt;/a&gt;&amp;nbsp; &lt;a href="http://www.jankoatwarpspeed.com/examples/fade-colors/" class="demo"&gt;View demo 1&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
In the example in this tutorial we&amp;#39;ll will fade links in unordered list like in the example below. 
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;ul id=&amp;quot;links&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Some text here&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Some text here&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...
&amp;lt;/ul&amp;gt;
&lt;/pre&gt;
&lt;h2 id="line65"&gt;Fade links using opacity property &lt;br /&gt;
&lt;/h2&gt;
&lt;p id="line65"&gt;
In the first example, we will use opacity CSS property and apply different opacity to each link in unordered list. To do so we need two variables - the number of links and the number that will determine the step for decreasing the opacity. See in code that, for determing the step, we divide 90 with the number of links. This means that the last link will be 90% transparent. If we would divide 100 with the number of links, the last link will be completely transparent and thus invisible. 
&lt;/p&gt;
&lt;pre&gt;
function fadeElements(color) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var count = $(&amp;quot;ul#links li&amp;quot;).size();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var step = 90 / count;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;quot;ul#links li&amp;quot;).each(function(i) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var currentOpacity = 100 - (step * i);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(this).find(&amp;quot;a&amp;quot;).css(&amp;quot;color&amp;quot;, color)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.css(&amp;quot;opacity&amp;quot;, currentOpacity = 100 ? &amp;quot;1&amp;quot; : &amp;quot;0.&amp;quot; + parseInt(currentOpacity));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});
}
&lt;/pre&gt;
&lt;p&gt;
Next, we determine opacity intensity for each link (&lt;em&gt;currentOpacity&lt;/em&gt;) and assign it through CSS, together with chosen color (which is passed to the function by parameter). Note that I used inline &amp;quot;if&amp;quot; statement to assign opacity value of 1 if it is the first link, and less than one for all others.
&lt;/p&gt;
&lt;pre&gt;
$(document).ready(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; fadeElements(&amp;quot;#000&amp;quot;);
}); 
&lt;/pre&gt;
&lt;p&gt;
You can then call fadeElements function and pass it the color you wish to fade. In the example above it&amp;#39;s black. 
&lt;/p&gt;
&lt;h2&gt;Fade links using RGB values&lt;/h2&gt;
&lt;p&gt;
&lt;a href="http://www.jankoatwarpspeed.com/file.axd?file=2009%2f10%2ffade-colors-jquery.zip" class="download"&gt;Download source&lt;/a&gt;&amp;nbsp; &lt;a href="http://www.jankoatwarpspeed.com/examples/fade-colors/index_rgb.html" class="demo"&gt;View demo 2&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
If you don&amp;#39;t want to use opacity for whatever reason, here&amp;#39;s the complicated version - using &lt;strong&gt;RGB values&lt;/strong&gt;. Let me explain the code below. The first four functions (that I found on the Web long time ago and reuse since then) convert Hex color values to red, green and blue values. 
&lt;/p&gt;
&lt;pre&gt;
function HexToR(h) { return parseInt((cutHex(h)).substring(0, 2), 16) }
function HexToG(h) { return parseInt((cutHex(h)).substring(2, 4), 16) }
function HexToB(h) { return parseInt((cutHex(h)).substring(4, 6), 16) }
function cutHex(h) { return (h.charAt(0) == &amp;quot;#&amp;quot;) ? h.substring(1, 7) : h }
&lt;/pre&gt;
&lt;p&gt;
Function fadeElements that you&amp;#39;ve seen earlier in this tutorial is now slightly complicated. Basically, it is doing the same job and that is fading colors. Only this time it won&amp;#39;t make one color transparent but rathar &lt;strong&gt;scale original color and make several variations&lt;/strong&gt;. 
&lt;/p&gt;
&lt;pre&gt;
function fadeElements(color) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var count = $(&amp;quot;ul#links li&amp;quot;).size();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var r = HexToR(color);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var g = HexToG(color);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var b = HexToB(color);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var stepR = (230 - r) / count;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var stepG = (230 - g) / count;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var stepB = (230 - b) / count;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;quot;ul#links li&amp;quot;).each(function(i) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var valueR = parseInt(r + (stepR * i));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var valueG = parseInt(g + (stepG * i));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var valueB = parseInt(b + (stepB * i));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(this).find(&amp;quot;a&amp;quot;).css(&amp;quot;color&amp;quot;, &amp;quot;rgb(&amp;quot; + valueR + &amp;quot;,&amp;quot; + valueG + &amp;quot;,&amp;quot; + valueB + &amp;quot;)&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});
}
&lt;/pre&gt;
&lt;p&gt;
The logic is similar to the first example. We also determine the number of links and number to decrease red, green and blue values for each link. Number 230 is 90% of 255 which is the highest value of a color in RGB model. Next, for each link we create color by decresing values of red, green and blue component of original color. It doesn&amp;#39;t sound so complicated, isn&amp;#39;t it?
&lt;/p&gt;
&lt;h2&gt;Conclusion &lt;br /&gt;
&lt;/h2&gt;
&lt;p&gt;
This was just another demonstration of jQuery capabilities of its possible uses. The two examples are different although the output is similar. &lt;strong&gt;Which one would you use?
&lt;/strong&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=4k94q7JKudc:Huw12Nh5T-U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=4k94q7JKudc:Huw12Nh5T-U:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=4k94q7JKudc:Huw12Nh5T-U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=4k94q7JKudc:Huw12Nh5T-U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=4k94q7JKudc:Huw12Nh5T-U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=4k94q7JKudc:Huw12Nh5T-U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=4k94q7JKudc:Huw12Nh5T-U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=4k94q7JKudc:Huw12Nh5T-U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=4k94q7JKudc:Huw12Nh5T-U:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/4k94q7JKudc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/4k94q7JKudc/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/10/13/Fade-colors-jQuery.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=88c7f6ab-14c6-434b-bb74-c94d702dee62</guid>
      <pubDate>Tue, 13 Oct 2009 10:48:00 +0100</pubDate>
      <category>Tutorials</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=88c7f6ab-14c6-434b-bb74-c94d702dee62</pingback:target>
      <slash:comments>28</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=88c7f6ab-14c6-434b-bb74-c94d702dee62</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/10/13/Fade-colors-jQuery.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=88c7f6ab-14c6-434b-bb74-c94d702dee62</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=88c7f6ab-14c6-434b-bb74-c94d702dee62</feedburner:origLink></item>
    <item>
      <title>If you need additional feedback from your readers - just ask them</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f10%2ffeedback.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
Comments
are certainly one of the most important aspects of blogging. They keep blogs alive. They are  a communication tool that let your readers leave their
questions, thoughts, suggestions or advices. But are comments the only way of getting feedback?
&lt;/p&gt;
&lt;p&gt;
You can also get feedback by asking your readers a direct question. Do you like what you see? Do you want more of these? Here are two examples I stumbled on recently.
&lt;/p&gt;
&lt;h2&gt;
Noupe.com
&lt;/h2&gt;
&lt;p&gt;
At the end of the latest article on noupe.com &lt;a rel="bookmark" href="http://www.noupe.com/design/fresh-web-development-goodies-bag.html" title="Permanent Link to Fresh Web Development Goodies Bag"&gt;Fresh Web Development Goodies Bag&lt;/a&gt;, there is a call for readers to leave their opinion on the article.
This can help new owners (&lt;a href="http://www.smashingmagazine.com/"&gt;Smashing Magazine&lt;/a&gt;) to focus on right topics in the future.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f10%2fnoupe_example.jpg" alt="" /&gt;&amp;nbsp;
&lt;/p&gt;
&lt;h2&gt;
BoagWorld.com&lt;/h2&gt;
&lt;p&gt;
At the end of each article on &lt;a href="http://boagworld.com/"&gt;boagworld.com&lt;/a&gt; asks readers a simple question - do they like the article or not. 
&lt;/p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f10%2fboagworld_example.jpg" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Do you think this could be a way to get a relevant feedback from your readers? Do you know some other examples?&lt;/strong&gt;&amp;nbsp;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=OCKRbnZ-84w:So6xBo5w-yA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=OCKRbnZ-84w:So6xBo5w-yA:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=OCKRbnZ-84w:So6xBo5w-yA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=OCKRbnZ-84w:So6xBo5w-yA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=OCKRbnZ-84w:So6xBo5w-yA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=OCKRbnZ-84w:So6xBo5w-yA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=OCKRbnZ-84w:So6xBo5w-yA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=OCKRbnZ-84w:So6xBo5w-yA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=OCKRbnZ-84w:So6xBo5w-yA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/OCKRbnZ-84w" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/OCKRbnZ-84w/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/10/08/additional-feedback.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=6a1ea6c9-02d1-4580-a3c7-c2e0286fa1cf</guid>
      <pubDate>Thu, 08 Oct 2009 13:06:00 +0100</pubDate>
      <category>Articles</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=6a1ea6c9-02d1-4580-a3c7-c2e0286fa1cf</pingback:target>
      <slash:comments>29</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=6a1ea6c9-02d1-4580-a3c7-c2e0286fa1cf</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/10/08/additional-feedback.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=6a1ea6c9-02d1-4580-a3c7-c2e0286fa1cf</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=6a1ea6c9-02d1-4580-a3c7-c2e0286fa1cf</feedburner:origLink></item>
    <item>
      <title>Turn any webform into a powerful wizard with jQuery (FormToWizard plugin)</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f9%2fwizard.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
This detailed tutorial will show you how to turn long webform into a wizard with &amp;quot;steps left&amp;quot; information. A plugin is also available for download.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jankoatwarpspeed.com/file.axd?file=2009%2f9%2fFormToWizard.zip" class="download"&gt;Download plugin with example&lt;/a&gt;&amp;nbsp; &lt;a href="http://www.jankoatwarpspeed.com/examples/webform_to_wizard/" class="demo"&gt;View demo &lt;/a&gt;
&lt;/p&gt;
&lt;h2&gt;
What is our task?
&lt;/h2&gt;
&lt;p&gt;
If you would, for whatever reason, have a large webform all fields shoud be semantically divided into fieldsets. Each fieldset would clearly describe each group of fields. Although many examples on the web today look different, this is how it should be. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f9%2fwizard_explanation.png" alt="" /&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
So, we can say that each group of fields represent a
sub task of a larger task - filling the entire web form. Thus, each sub
task can become a step with a description, input fields and navigation
that is common for wizard forms - back and next.The entire process can be done in several simple steps. 
&lt;/p&gt;
&lt;h2&gt;
1. Create &amp;quot;steps&amp;quot;&lt;/h2&gt;
&lt;p&gt;
The code should look like the example below.
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;form id=&amp;quot;SignupForm&amp;quot; action=&amp;quot;&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;fieldset&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;-- input fields --&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;lt;/fieldset&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;lt;fieldset&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;-- input fields --&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/fieldset&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;fieldset&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;-- input fields --&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/fieldset&amp;gt;
&amp;lt;/form&amp;gt; 
&lt;/pre&gt;
&lt;p&gt;
Let&amp;#39;s explain the following code. In order to determine how much steps there will be, we need to select all fieldsets and get the size of this wrapped set. Next, we iterate through this wrapped set (that returned all fieldsets), wrap each fieldset into a div and append a paragraph that will hold &amp;quot;back&amp;quot; and &amp;quot;next&amp;quot; buttons.
&lt;/p&gt;
&lt;p&gt;
Now comes the funny part. If this is a first fieldset in wrapped set, we&amp;#39;ll create &amp;quot;next&amp;quot; button only and make this step visible. If it is the last fieldset in wrapped set, we&amp;#39;ll create only &amp;quot;back&amp;quot; button. In all other cases we&amp;#39;ll create both buttons.
Methods for creating buttons will be explained later in this tutorial. 
&lt;/p&gt;
&lt;pre&gt;
var steps = $(&amp;quot;#SignupForm fieldset&amp;quot;);&lt;br /&gt;
var count = steps.size();&lt;br /&gt;
steps.each(function(i) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(this).wrap(&amp;quot;&amp;lt;div id=&amp;#39;step&amp;quot; + i + &amp;quot;&amp;#39;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(this).append(&amp;quot;&amp;lt;p id=&amp;#39;step&amp;quot; + i + &amp;quot;commands&amp;#39;&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i == 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; createNextButton(i); &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // to do
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; selectStep(i);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to do
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (i == count - 1) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#step&amp;quot; + i).hide();
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; createPrevButton(i);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to do
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; else {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#step&amp;quot; + i).hide();
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; createPrevButton(i);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to do
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; createNextButton(i);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to do
}
}
&lt;/pre&gt;
&lt;p&gt;
Now let&amp;#39;s explain how to create buttons and how users will actually move through the wizard.
&lt;/p&gt;
&lt;h2&gt;
2. Create next and back buttons and add interatcion&lt;/h2&gt;
&lt;p&gt;
Creating the buttons isn&amp;#39;t that hard. Each button will have a unique name (e.g. step1next, or step3prev) and will be appended to their panels created in previous step. In order to add some interaction, and that is to enable moving between steps, we need to bind click event to each button. This is how they will work:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;When user presses back button it will hide the current step, show the previous one and call selectStep() method which will mark it as current.&lt;/li&gt;
	&lt;li&gt;When user presses next button it will hide the current step, show the next one and call selectStep() method which will mark it as current.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
function createPrevButton(i) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; var stepName = &amp;quot;step&amp;quot; + i;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#&amp;quot; + stepName + &amp;quot;commands&amp;quot;).append(&amp;quot;&amp;lt;a href=&amp;#39;#&amp;#39; id=&amp;#39;&amp;quot; + stepName + &amp;quot;Prev&amp;#39; class=&amp;#39;prev&amp;#39;&amp;gt;&amp;lt; Back&amp;lt;/a&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#&amp;quot; + stepName + &amp;quot;Prev&amp;quot;).bind(&amp;quot;click&amp;quot;, function(e) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#&amp;quot; + stepName).hide();
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#step&amp;quot; + (i - 1)).show();
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; selectStep(i - 1);
&amp;nbsp;&amp;nbsp;&amp;nbsp; });
}&lt;br /&gt;
function createNextButton(i) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; var stepName = &amp;quot;step&amp;quot; + i;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#&amp;quot; + stepName + &amp;quot;commands&amp;quot;).append(&amp;quot;&amp;lt;a href=&amp;#39;#&amp;#39; id=&amp;#39;&amp;quot; + stepName + &amp;quot;Next&amp;#39; class=&amp;#39;next&amp;#39;&amp;gt;Next &amp;gt;&amp;lt;/a&amp;gt;&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#&amp;quot; + stepName + &amp;quot;Next&amp;quot;).bind(&amp;quot;click&amp;quot;, function(e) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#&amp;quot; + stepName).hide();
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#step&amp;quot; + (i + 1)).show();
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; selectStep(i + 1);
&amp;nbsp;&amp;nbsp;&amp;nbsp; });
}
&lt;/pre&gt;
&lt;p&gt;
Function selectStep() that I mentioned before removes CSS class &amp;quot;current&amp;quot; from all steps and assign it only to the currently selected. 
&lt;/p&gt;
&lt;pre&gt;
function selectStep(i) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#steps li&amp;quot;).removeClass(&amp;quot;current&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#stepDesc&amp;quot; + i).addClass(&amp;quot;current&amp;quot;);
}
&lt;/pre&gt;
&lt;p&gt;
At this moment wizard is functional. But that&amp;#39;s not all. Let&amp;#39;s apply &lt;a href="http://ui-patterns.com/pattern/StepsLeft"&gt;Steps left UI design pattern&lt;/a&gt; here. 
&lt;/p&gt;
&lt;h2&gt;
3. Create &amp;quot;steps left&amp;quot; information&lt;/h2&gt;
&lt;p&gt;
This is easier than it might look like at the first sight. At the very beginning of our code we have to add unordered list that will be a container for steps left information. In addition to this we will hide signup button. We want it to be visible only in the last step. 
&lt;/p&gt;
&lt;pre&gt;
var steps = $(&amp;quot;#SignupForm fieldset&amp;quot;);
var count = steps.size();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
$(&amp;quot;#SaveAccount&amp;quot;).hide();
$(&amp;quot;#SignupForm&amp;quot;).before(&amp;quot;&amp;lt;ul id=&amp;#39;steps&amp;#39;&amp;gt;&amp;lt;/ul&amp;gt;&amp;quot;);
&lt;/pre&gt;
&lt;p&gt;
We also need to extend each() function and add information about steps for each fieldset in wrapped set. Each step will have it&amp;#39;s natural number, starting with 1. Below the step number we&amp;#39;ll add a description that is extracted from &amp;lt;legend&amp;gt; element. 
&lt;/p&gt;
&lt;pre&gt;
steps.each(function(i) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; var name = $(this).find(&amp;quot;legend&amp;quot;).html();
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#steps&amp;quot;).append(&amp;quot;&amp;lt;li id=&amp;#39;stepDesc&amp;quot; + i + &amp;quot;&amp;#39;&amp;gt;Step &amp;quot; + (i + 1) + &amp;quot;&amp;lt;span&amp;gt;&amp;quot; + name + &amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; ...
});
&lt;/pre&gt;
&lt;p&gt;
Let&amp;#39;s do just one more thing. Since submit button should be visible only in the last step, we&amp;#39;ll hide it every time user presses next. Only if user comes to the last step, it should be visible. 
&lt;/p&gt;
&lt;pre&gt;
$(&amp;quot;#&amp;quot; + stepName + &amp;quot;Prev&amp;quot;).bind(&amp;quot;click&amp;quot;, function(e) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#SaveAccount&amp;quot;).hide();
});
&lt;/pre&gt;
&lt;pre&gt;
$(&amp;quot;#&amp;quot; + stepName + &amp;quot;Next&amp;quot;).bind(&amp;quot;click&amp;quot;, function(e) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i + 2 == count)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#SaveAccount&amp;quot;).show();
});
&lt;/pre&gt;
&lt;p&gt;
If you want to see the full source code, &lt;a href="http://www.jankoatwarpspeed.com/file.axd?file=2009%2f9%2fFormToWizard.zip"&gt;download it&lt;/a&gt; or check out &lt;a href="http://www.jankoatwarpspeed.com/examples/webform_to_wizard/"&gt;the demo&lt;/a&gt;. 
&lt;/p&gt;
&lt;h2&gt;Plugin for easier use 
&lt;/h2&gt;
&lt;p&gt;
It would be a pity not to create a plugin that will enable all of this in just one line of code. I called it FormToWizard. I guess it&amp;#39;s clear what it does :) In order to apply the plugin you will have to add a reference to script file and apply it to y &amp;lt;form&amp;gt; element. 
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;formToWizard.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
$(&amp;quot;#SignupForm&amp;quot;).formToWizard();
&lt;/pre&gt;
&lt;p&gt;
If you want to hide a submit button (or placeholder for multiple buttons) you can add a parameter sumbitButton with the name of element you wish to be hidden. 
&lt;/p&gt;
&lt;pre&gt;
$(&amp;quot;#SignupForm&amp;quot;).formToWizard({ submitButton: &amp;#39;SaveAccount&amp;#39; }) 
&lt;/pre&gt;
&lt;h2&gt;Lightweight and Cross Browser compatible&lt;/h2&gt;
&lt;p&gt;
This plugin has only &lt;strong&gt;2,3KB&lt;/strong&gt; and with compression it can be even smaller. It is compatible with all major browsers: FireFox, Google Chrome, Safari, Opera, Internet Explorer 8, 7 and 6. The latter is collateral, I was surprised it actually works there :) 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;If you, however, find any bug or have some suggestion on how to improve this or extend it, please share!&lt;/strong&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=lSOYJGANqe0:njT-io0g4xg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=lSOYJGANqe0:njT-io0g4xg:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=lSOYJGANqe0:njT-io0g4xg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=lSOYJGANqe0:njT-io0g4xg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=lSOYJGANqe0:njT-io0g4xg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=lSOYJGANqe0:njT-io0g4xg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=lSOYJGANqe0:njT-io0g4xg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=lSOYJGANqe0:njT-io0g4xg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=lSOYJGANqe0:njT-io0g4xg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/lSOYJGANqe0" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/lSOYJGANqe0/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/09/28/webform-wizard-jquery.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=640a458c-d827-4c83-bdb3-828a52f514c0</guid>
      <pubDate>Mon, 28 Sep 2009 22:28:00 +0100</pubDate>
      <category>Tutorials</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=640a458c-d827-4c83-bdb3-828a52f514c0</pingback:target>
      <slash:comments>69</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=640a458c-d827-4c83-bdb3-828a52f514c0</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/09/28/webform-wizard-jquery.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=640a458c-d827-4c83-bdb3-828a52f514c0</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=640a458c-d827-4c83-bdb3-828a52f514c0</feedburner:origLink></item>
    <item>
      <title>Tips for writing an effective tutorial</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f9%2ftutorial_code.jpg" alt="" width="500" height="215" /&gt; 
&lt;/p&gt;
&lt;p&gt;
Writing a development tutorial requires a few more considerations in comparing to writing a&amp;nbsp;regular article. Readers would have to follow the steps, read code, view demos or examine a picture explaining some feature. Here are several tips that might help you write more efficient tutorials. 
&lt;/p&gt;
&lt;p&gt;
I won&amp;#39;t explain here how important it is to choose the right subject, good title and other things that you can read in many other articles about writing for the web. I will focus on things that are specific for tutorials. Alhtough some of these tips can be applied to any type of article, they are even more significant in tutorials. For more general guidelines on how to write for the&amp;nbsp;web, especially from usability perspective, I recommend you read&amp;nbsp;&lt;a href="http://www.useit.com/papers/webwriting/"&gt;Writing for the Web&lt;/a&gt; series of articles. 
&lt;/p&gt;
&lt;h2&gt;1. Make it short but to the point &lt;/h2&gt;
&lt;p&gt;
Let&amp;#39;s be honest, a very few readers will read the entire tutorial. As with any content on Web they will &lt;strong&gt;scan&amp;nbsp;the content instead of reading it&lt;/strong&gt;. Only if they find an interest in what you are showing they will read. Avoid long paragraphs and series of paragraphs without code snippets or images. Also avoid describing each tiny thing user should do, but rather show the key points in the path to tutorial completion. However, you shouldn&amp;#39;t omit anything important. For example, it is important to explain how an element will be animated with jQuery, but it is completely unnecesary to explain and show each line of HTML structure or CSS code used in tutorial. 
&lt;/p&gt;
&lt;h2&gt;2. Explain each task shortly &lt;/h2&gt;
&lt;p&gt;
You should be able to explan each task in a &lt;strong&gt;few simple sentences&lt;/strong&gt;. Einstein said &amp;quot;If you can&amp;#39;t explain it simply, you don&amp;#39;t understand it well enough&amp;quot;. Imagine what would readers think of your knowledge of the subject and how they would understand it. If you make it too long, go back and rewrite it. 
&lt;/p&gt;
&lt;h2&gt;3. Break it into logical steps &lt;/h2&gt;
&lt;p&gt;
This will help users read and follow a tutorial more easily, and get back to a specific step if they&amp;nbsp;need to. Each step should contain several tasks after which reader will be able to actually see some result. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f9%2fbuildinternet_example.jpg" alt="" width="500" height="281" /&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;a href="http://buildinternet.com/2009/08/crafting-an-animated-postcard-with-jquery/"&gt;Build Internet&lt;/a&gt; tutorials are easy to follow. Each tutorial is divided into logical steps and each step is easy to understand.&lt;/em&gt; 
&lt;/p&gt;
&lt;h2&gt;4. Include&amp;nbsp;code but&amp;nbsp;don&amp;#39;t over do it&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;
If you have&amp;nbsp;code to show, do it but don&amp;#39;t paste the entire demo in the&amp;nbsp;tutorial. No one will be interested in reading&amp;nbsp;couple of screens of markup. &lt;strong&gt;Show only key snippets&lt;/strong&gt;. You should, for example, show just a few fields of a large web form to enable readers to get&amp;nbsp;the big picture of what you are showing. Readers who are interested in the full code will check out the demo or download source code. Which bring us to the next tip. 
&lt;/p&gt;
&lt;h2&gt;5. Provide a demo &lt;/h2&gt;
&lt;p&gt;
Always try to provide a demo. I tested several of my previous tutorials and tests showed that nearly 70% of all readers view the demo. Many of them (63%) view demo first and if they like what they see they read the tutorial. Don&amp;#39;t forget to add a link to the tutorial on all demo pages so that readers can easily go back. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f9%2fclick_on_demo.jpg" alt="" width="500" height="178" /&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;The screenshot above is taken from one of the tests I mentioned. The link hidden behind clicks is a link to the demo page and it shows how important it is to include a&amp;nbsp;demo in&amp;nbsp;a tutorial.&lt;/em&gt; 
&lt;/p&gt;
&lt;h2&gt;6. Visualize the most complex tasks&lt;br /&gt;
&lt;/h2&gt;
&lt;p&gt;
You can also provide images explaining the most complex taks or steps. When readers see a demo they will understand how it works, but they will understand &lt;strong&gt;how it is made&lt;/strong&gt; only if they read the demo or see the image explaining the process of creation. Such images also help readers visualize some steps or the entire tutorial. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=WindowsLiveWriter/CreateVimeoliketopnavigation_DDE2/sample2_ce4f475a-23cd-451c-afc3-b37a4b5d1c16.png" alt="Viemo navigation" title="Viemo navigation" width="467" height="206" /&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;In one of my previous tutorials, &lt;a href="http://www.jankoatwarpspeed.com/post/2009/01/19/Create-Vimeo-like-top-navigation.aspx" class="taggedlink"&gt;Create Vimeo-like top navigation&lt;/a&gt; I provided two images that help users visualize the most complex tasks. &lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f9%2fdesignmag_example.jpg" alt="" width="500" height="253" /&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;In his latest tutorial &lt;a href="http://designm.ag/tutorials/fixed-position-banner/"&gt;How to Add a Fixed Position Banner to a Website&lt;/a&gt;, Steven Snell uses images effectively. He provides several live examples of the feature he decomposed. &lt;/em&gt;
&lt;/p&gt;
&lt;h2&gt;7. Always provide source code&lt;/h2&gt;
&lt;p&gt;
Some readers will like to have the code from the tutorial &lt;strong&gt;offline&lt;/strong&gt;. This way they can examine the code even if they are not able to access your tutorial for whatever reason. You should compress your files and give a meaningful name to the&amp;nbsp;compressed file. Same applies to all other files. You should also add a link to the&amp;nbsp;tutorial in your demo pages so that reader can easily go back if necessary. 
&lt;/p&gt;
&lt;h2&gt;8. Have download and demo links in prominent position &lt;/h2&gt;
&lt;p&gt;
This is one of the most important aspects in web dev&amp;nbsp;tutorials. As I mentioned before, a lot of users will take a look at the demo first and that&amp;#39;s why it is important to place a link to the demo &lt;strong&gt;at the top of the article&lt;/strong&gt; and make it&amp;nbsp;prominent. The usual position is below a&amp;nbsp;short introduction and/or image but before the first step in the&amp;nbsp;tutorial. I also tested three different versions of the same tutorial. 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Tutorial with a prominent link to demo page at the top of the tutorial &lt;/li&gt;
	&lt;li&gt;Tutorial with a plain link to demo page at the top of the tutorial &lt;/li&gt;
	&lt;li&gt;Tutorial with a link to demo page placed at the end of the tutorial&lt;/li&gt;
&lt;/ul&gt;
The results I mentioned in tip #5 refer to the&amp;nbsp;first version. Other two had significantly lower number of users that viewed&amp;nbsp;the demo, which is somewhat expected. 
&lt;p&gt;
The exception is the case when you have more than one demo; in which case, you should place links to each demo just below the heading of a&amp;nbsp;section describing it. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f9%2fcssglobe_example.jpg" alt="" width="500" height="397" /&gt; 
&lt;/p&gt;
&lt;p class="title"&gt;
&lt;em&gt;&lt;a href="http://cssglobe.com/post/6089/3-easy-and-fast-css-techniques-for-faux-image"&gt;3 Easy and Fast CSS Techniques for Faux Image Cropping&lt;/a&gt; tutorial on CSS Globe has three demos.&lt;/em&gt;&lt;a href="http://cssglobe.com/post/6089/3-easy-and-fast-css-techniques-for-faux-image"&gt;&lt;br /&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;h2&gt;9. Join the discussion &lt;/h2&gt;
&lt;p&gt;
Once you publish a tutorial your job is not done. Readers will have different opinions about your work. They might criticize the way you created something or they might have some suggestions and improvements. &lt;strong&gt;Answer those comments&lt;/strong&gt;. By joining the discussion you will send your readers a message that you care about their opinion and that your tutorials are really there to help. 
&lt;/p&gt;
&lt;p&gt;
You will also learn more and be able to see a specific problem from different angles. After all, you started it all by posting the tutorial ;) 
&lt;/p&gt;
&lt;h2&gt;10. Update the tutorial if needed &lt;/h2&gt;
&lt;p&gt;
If you made a mistake or if someone comes up with an improvement, you should update your tutorial. It will give &lt;strong&gt;satisfaction &lt;/strong&gt;to readers that noticed issues and also give &lt;strong&gt;motivations &lt;/strong&gt;for others to actually read your tutorials and comment on them. Not necessarily, but you can also give credits to people who spotted issues. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f9%2fmarcofolio_example.jpg" alt="" width="500" height="149" /&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Marco updated his tutorial &lt;a href="http://www.marcofolio.net/webdesign/a_fancy_apple.com-style_search_suggestion.html"&gt;A fancy Apple.com-style search suggestion&lt;/a&gt; with PHP4 version of the code provided by one of his readers&lt;/em&gt; 
&lt;/p&gt;
&lt;h2&gt;Your tips? &lt;br /&gt;
&lt;/h2&gt;
&lt;p&gt;
Would you add/change anything? What annoys you the most when you read tutorials? What do you like the most? 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=Tw6J5LYDORw:j6DAldISEQc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=Tw6J5LYDORw:j6DAldISEQc:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=Tw6J5LYDORw:j6DAldISEQc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=Tw6J5LYDORw:j6DAldISEQc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=Tw6J5LYDORw:j6DAldISEQc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=Tw6J5LYDORw:j6DAldISEQc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=Tw6J5LYDORw:j6DAldISEQc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=Tw6J5LYDORw:j6DAldISEQc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=Tw6J5LYDORw:j6DAldISEQc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/Tw6J5LYDORw" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/Tw6J5LYDORw/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/09/22/Tips-for-writing-an-effective-tutorial.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=7bb963f4-1d20-4d67-a819-63e605c6b7b6</guid>
      <pubDate>Tue, 22 Sep 2009 21:21:00 +0100</pubDate>
      <category>Articles</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=7bb963f4-1d20-4d67-a819-63e605c6b7b6</pingback:target>
      <slash:comments>59</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=7bb963f4-1d20-4d67-a819-63e605c6b7b6</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/09/22/Tips-for-writing-an-effective-tutorial.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=7bb963f4-1d20-4d67-a819-63e605c6b7b6</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=7bb963f4-1d20-4d67-a819-63e605c6b7b6</feedburner:origLink></item>
    <item>
      <title>Sixpack status - free icon pack</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f9%2fsixpack_status_icons.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Sixpack status&lt;/strong&gt; is a small set of high quality icons which can be used for &lt;a href="http://www.jankoatwarpspeed.com/post/2008/05/22/CSS-Message-Boxes-for-different-message-types.aspx"&gt;status messages&lt;/a&gt;. It is completely&lt;strong&gt; free for personal and commercial use&lt;/strong&gt;. Icons are available in four sizes, 32x32, 64x64, 128x128 and 256x256px. They are also available in vector (SVG) format, which can be edited using applications such as &lt;a href="http://www.inkscape.org/" title="Inkscape"&gt;Inkscape&lt;/a&gt; (they are actually made in Inkscape).
&lt;/p&gt;
&lt;p&gt;
Motivation for creating this icon set is simple. I needed six uniform icons with specific light effect  for status messages. Other, similar icons just didn&amp;#39;t fit! 
&lt;/p&gt;
&lt;p&gt;
Please don&amp;#39;t use direct download link if you refer to these icons but rather link back to this article. &lt;strong&gt;Reselling or redistributing is not allowed&lt;/strong&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jankoatwarpspeed.com/file.axd?file=2009%2f9%2fsixpack_status_icons.zip" class="download"&gt;Download PNG icons&lt;/a&gt; &lt;a href="http://www.jankoatwarpspeed.com/file.axd?file=2009%2f9%2fsixpack_icons_vector.zip" class="download"&gt;Download vector icons (SVG)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Enjoy!
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=2NS3YQdqAaQ:wLxOPIuy6kk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=2NS3YQdqAaQ:wLxOPIuy6kk:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=2NS3YQdqAaQ:wLxOPIuy6kk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=2NS3YQdqAaQ:wLxOPIuy6kk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=2NS3YQdqAaQ:wLxOPIuy6kk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=2NS3YQdqAaQ:wLxOPIuy6kk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=2NS3YQdqAaQ:wLxOPIuy6kk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=2NS3YQdqAaQ:wLxOPIuy6kk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=2NS3YQdqAaQ:wLxOPIuy6kk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/2NS3YQdqAaQ" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/2NS3YQdqAaQ/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/09/17/sixpack-status-icons.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=262e92f2-674f-4392-8c17-d5f8fd030ce8</guid>
      <pubDate>Thu, 17 Sep 2009 14:10:00 +0100</pubDate>
      <category>Freebies</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=262e92f2-674f-4392-8c17-d5f8fd030ce8</pingback:target>
      <slash:comments>57</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=262e92f2-674f-4392-8c17-d5f8fd030ce8</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/09/17/sixpack-status-icons.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=262e92f2-674f-4392-8c17-d5f8fd030ce8</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=262e92f2-674f-4392-8c17-d5f8fd030ce8</feedburner:origLink></item>
    <item>
      <title>Animate validation feedback using jQuery</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f9%2fanimate-validation-feedback.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
Yesterday, I came across &lt;a href="https://www.jumpchart.com/"&gt;Jumpchart.com&lt;/a&gt; and while I was checking out their website one thing catched my eye: &lt;a href="https://www.jumpchart.com/sign-up/go/1/"&gt;validation feedback was animated&lt;/a&gt;! In this tutorial I will explain how to create this nice little trick. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jankoatwarpspeed.com/file.axd?file=2009%2f9%2fanimate-validation-feedback.zip" class="download"&gt;Download source code&lt;/a&gt; &lt;a href="http://www.jankoatwarpspeed.com/examples/animate-validation-feedback/" class="demo"&gt;View demo&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The trick is very simple: after user presses signup button, validation occurs and all fields that are invalid get shaken a little bit. They have very simple web form as example below shows. I won&amp;#39;t explain the web form structure and styling here, but will rather focus on animation effect. 
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;ul&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li class=&amp;quot;first&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h3&amp;gt;Your Name&amp;lt;/h3&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; value=&amp;quot;First and Last name&amp;quot; id=&amp;quot;name&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h3&amp;gt;Email&amp;lt;/h3&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; value=&amp;quot;my@email.com&amp;quot; name=&amp;quot;email&amp;quot;&amp;nbsp; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h3&amp;gt;Password&amp;lt;/h3&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;passwd&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h3&amp;gt;Password confirmation&amp;lt;/h3&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;passwd_conf&amp;quot;&amp;nbsp; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h3&amp;gt;User name&amp;lt;/h3&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; value=&amp;quot;MyUserName&amp;quot; id=&amp;quot;userName&amp;quot; name=&amp;quot;user_name&amp;quot;&amp;nbsp; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
This is how this demo works: when user presses signup button, jQuery will get all  empty input fields. If there is at least one empty input field, an animation will be applied to field(s).
&lt;/p&gt;
&lt;pre&gt;
$(&amp;quot;#signup&amp;quot;).click(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; var emptyfields = $(&amp;quot;input[value=]&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (emptyfields.size() &amp;gt; 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; emptyfields.each(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // animation goes here
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
});&amp;nbsp;
&lt;/pre&gt;
&lt;p&gt;
Let&amp;#39;s see how to create simple animation. We want to move each field 10px to the left, then 10px to the right, repeat this one more time and set them back to their original positions. Example on Jumpchart even randomizes animations, but I will keep it simple here. 
&lt;/p&gt;
&lt;pre&gt;
$(&amp;quot;#signup&amp;quot;).click(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; var emptyfields = $(&amp;quot;input[value=]&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (emptyfields.size() &amp;gt; 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; emptyfields.each(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(this).stop()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .animate({ left: &amp;quot;-10px&amp;quot; }, 100).animate({ left: &amp;quot;10px&amp;quot; }, 100)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .animate({ left: &amp;quot;-10px&amp;quot; }, 100).animate({ left: &amp;quot;10px&amp;quot; }, 100)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .animate({ left: &amp;quot;0px&amp;quot; }, 100)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .addClass(&amp;quot;required&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
});
&lt;/pre&gt;
&lt;p&gt;
Signup on Jumpchart has one usability issue, though. After short animation user looses validation feedback. That is why we will add CSS class &amp;quot;required&amp;quot; to invalid fields that will change their borders to red. This is all you need.
&lt;/p&gt;
&lt;p class="title"&gt;
Please keep in mind that this animation can&amp;#39;t be substitution for static validation feedback. Each invalid input field should be clearly marked once validation fail. This only adds nice effect that helps catch the user&amp;#39;s attention. It&amp;#39;s the same as difference between saying &amp;quot;I am here&amp;quot; and &amp;quot;Hey, I&amp;#39;m here!&amp;quot;. You can read more about validation in &lt;a rel="bookmark" href="http://www.smashingmagazine.com/2009/07/07/web-form-validation-best-practices-and-tutorials/" title="Web Form Validation: Best Practices and Tutorials"&gt;Web Form Validation: Best Practices and Tutorials&lt;/a&gt; article.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Do you have some nice and original example of validation feedback?&lt;/strong&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=0JwX2KpneFM:05o9_Dy166s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=0JwX2KpneFM:05o9_Dy166s:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=0JwX2KpneFM:05o9_Dy166s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=0JwX2KpneFM:05o9_Dy166s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=0JwX2KpneFM:05o9_Dy166s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=0JwX2KpneFM:05o9_Dy166s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=0JwX2KpneFM:05o9_Dy166s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=0JwX2KpneFM:05o9_Dy166s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=0JwX2KpneFM:05o9_Dy166s:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/0JwX2KpneFM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/0JwX2KpneFM/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/09/16/Animate-validation-feedback-using-jQuery.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=ad0bcff0-6d77-43c2-a81e-bae32f6189d3</guid>
      <pubDate>Wed, 16 Sep 2009 09:46:00 +0100</pubDate>
      <category>Tutorials</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=ad0bcff0-6d77-43c2-a81e-bae32f6189d3</pingback:target>
      <slash:comments>46</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=ad0bcff0-6d77-43c2-a81e-bae32f6189d3</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/09/16/Animate-validation-feedback-using-jQuery.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=ad0bcff0-6d77-43c2-a81e-bae32f6189d3</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=ad0bcff0-6d77-43c2-a81e-bae32f6189d3</feedburner:origLink></item>
    <item>
      <title>Couple of issues with dates on web</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f9%2fcalendar.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
It&amp;#39;s surprising that many websites display dates in formats that can be very confusing to users. Take this date for an example: 11/04/09 - is this April 11th, or November 4th? Format MM/DD/YYY is common for&amp;nbsp; USA, but most of the Europe use DD/MM/YYYY. In Japan it&amp;#39;s YY/MM/DD. They would be very confused with such date. Is it April 2011 already?
&lt;/p&gt;
&lt;p&gt;
You should make dates understandable for all cultures and you can do it if you make it obvious. &lt;strong&gt;You should use month names&lt;/strong&gt; (localized if there is a need for that) and &lt;strong&gt;4 numbers for year&lt;/strong&gt;. So, our example from the beginning can look like this: 11 April 2009 (or April 11th 2009). This looks better.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f9%2fdesignmag.jpg" alt="" /&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Designm.ag shows date in a proper format 
&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Another common issue is showing only day and month information without a year. This is especially common for large calendars on blogs. You can often see &amp;quot;15 Aug&amp;quot; in a calendar. In cases like this it is hard for users to determine if the reading is relevant for them. This applies especially to novice users who are not  familiar with the topic. It would be good to show full date in order to enable them to quickly determine if reading is outdated or should they find some more up-to-date reading for particular area.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f9%2fusabilitypost.jpg" alt="" /&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Calendar on UsabilityPost shows date in a proper format 
&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Althought this looks obvious, many blogs and websites display dates in confusing or incomplete formats.&lt;strong&gt; Does this bothers you as well?&lt;/strong&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=AvHqYtGnTk4:VVArmE2Ktoc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=AvHqYtGnTk4:VVArmE2Ktoc:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=AvHqYtGnTk4:VVArmE2Ktoc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=AvHqYtGnTk4:VVArmE2Ktoc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=AvHqYtGnTk4:VVArmE2Ktoc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=AvHqYtGnTk4:VVArmE2Ktoc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=AvHqYtGnTk4:VVArmE2Ktoc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=AvHqYtGnTk4:VVArmE2Ktoc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=AvHqYtGnTk4:VVArmE2Ktoc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/AvHqYtGnTk4" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/AvHqYtGnTk4/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/09/07/Couple-of-issues-with-dates-on-web.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=bab0685b-f887-4ce0-a627-5cf6f717c85b</guid>
      <pubDate>Mon, 07 Sep 2009 14:00:00 +0100</pubDate>
      <category>Articles</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=bab0685b-f887-4ce0-a627-5cf6f717c85b</pingback:target>
      <slash:comments>41</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=bab0685b-f887-4ce0-a627-5cf6f717c85b</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/09/07/Couple-of-issues-with-dates-on-web.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=bab0685b-f887-4ce0-a627-5cf6f717c85b</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=bab0685b-f887-4ce0-a627-5cf6f717c85b</feedburner:origLink></item>
    <item>
      <title>Automatically generate table of contents using jQuery</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f8%2ftoc.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
Some time ago, I was debating with my friends on the topic: is there any use of generating table of contents automatically. The conclusion was that it can be useful in cases when the reading material is long enough and table of contents (TOC) has a fixed position on the screen. This tutorial will show you how to create such TOC in just a few lines of code.
&lt;/p&gt;
&lt;h3&gt;Extract information from HTML&lt;/h3&gt;
&lt;p&gt;
I will start with the basic example - where we just want to get title and subtitles and show them before the article itself.
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;div id=&amp;quot;toc&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;h1&amp;gt;Title goes her&amp;lt;/h1&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;h2&amp;gt;Subtitle goes here&amp;lt;/h2&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p&amp;gt;Text goes here...&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
Div element with &amp;quot;toc&amp;quot; id will be a container for TOC links (this can be also added dynamically but for this example, we&amp;#39;ll keep it in static structure). The actual article is placed in div element with id &amp;quot;content&amp;quot;. Check out &lt;a href="http://www.jankoatwarpspeed.com/examples/table-of-contents/demo1.html" target="_blank"&gt;demo 1&lt;/a&gt; for full lorem ipsum article. Now let&amp;#39;s create TOC. First we&amp;#39;ll append a paragraph inside &amp;quot;toc&amp;quot; container with text &amp;quot;In this article&amp;quot;. You might have seen this in some blog posts around. Next, we&amp;#39;ll find all H1, H2 and H3 elements and assign unique id (for this page) to each one of them. This will make them easily accessible on click. At the end, we&amp;#39;ll append a link for each heading. 
&lt;/p&gt;
&lt;pre&gt;
$(&amp;quot;#toc&amp;quot;).append(&amp;#39;&amp;lt;p&amp;gt;In this article:&amp;lt;/p&amp;gt;&amp;#39;)
$(&amp;quot;h1, h2, h3&amp;quot;).each(function(i) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; var current = $(this);
&amp;nbsp;&amp;nbsp;&amp;nbsp; current.attr(&amp;quot;id&amp;quot;, &amp;quot;title&amp;quot; + i);
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#toc&amp;quot;).append(&amp;quot;&amp;lt;a id=&amp;#39;link&amp;quot; + i + &amp;quot;&amp;#39; href=&amp;#39;#title&amp;quot; +
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i + &amp;quot;&amp;#39; title=&amp;#39;&amp;quot; + current.attr(&amp;quot;tagName&amp;quot;) + &amp;quot;&amp;#39;&amp;gt;&amp;quot; + 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; current.html() + &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;);
});
&lt;/pre&gt;
&lt;p&gt;
The output of this code looks like this:
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;div id=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;In this article:&amp;lt;/p&amp;gt;
&amp;lt;a id=&amp;quot;link0&amp;quot; title=&amp;quot;H1&amp;quot; href=&amp;quot;#title0&amp;quot;&amp;gt;Article title&amp;lt;/a&amp;gt;
&amp;lt;a id=&amp;quot;link1&amp;quot; title=&amp;quot;H2&amp;quot; href=&amp;quot;#title1&amp;quot;&amp;gt;Header Level 2&amp;lt;/a&amp;gt;
&amp;lt;a id=&amp;quot;link2&amp;quot; title=&amp;quot;H3&amp;quot; href=&amp;quot;#title2&amp;quot;&amp;gt;Header Level 3&amp;lt;/a&amp;gt;
&amp;lt;a id=&amp;quot;link3&amp;quot; title=&amp;quot;H3&amp;quot; href=&amp;quot;#title3&amp;quot;&amp;gt;Header level 3 again&amp;lt;/a&amp;gt;
&amp;lt;a id=&amp;quot;link4&amp;quot; title=&amp;quot;H3&amp;quot; href=&amp;quot;#title4&amp;quot;&amp;gt;Header level 3 once again&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt; 
&lt;/pre&gt;
&lt;p&gt;
And headings will have id&amp;#39;s like in the example below:
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;h1 id=&amp;quot;title0&amp;quot;&amp;gt;Article title&amp;lt;/h1&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;a href="http://www.jankoatwarpspeed.com/examples/table-of-contents/demo1.html" target="_blank" class="demo"&gt;View demo 1 &lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;Fixing TOC position&lt;/h3&gt;
&lt;p&gt;
In order to fix the position of TOC we have to do two things. First one is to wrap TOC and content into a div and center it on the screen (you can place TOC anywhere you like, but in this example we&amp;#39;ll fix it to the left of the content). 
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;div&lt;span class="attribute-name"&gt; id&lt;/span&gt;=&lt;span class="attribute-value"&gt;&amp;quot;container&amp;quot;&lt;/span&gt;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id=&amp;quot;toc&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;h1&amp;gt;Title goes her&amp;lt;/h1&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;h2&amp;gt;Subtitle goes here&amp;lt;/h2&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p&amp;gt;Text goes here...&amp;lt;/p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt; 
&lt;/pre&gt;
&lt;p&gt;
Next, set #toc to float left with fixed position and #content to float right.
&lt;/p&gt;
&lt;pre&gt;
#container { width:960px; overflow:hidden; margin:0px auto; position:relative;}
#content { width:660px; float:right;}
#toc { width:200px; position:fixed; float:left;}
#toc a { display:block; color:#0094FF;}
&lt;/pre&gt;
&lt;p&gt;
This will ensure that TOC remains on the screen on a fixed position while scrolling.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jankoatwarpspeed.com/examples/table-of-contents/demo2.html" target="_blank" class="demo"&gt;View demo 2 &lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;Scaled Table of Contents&lt;/h3&gt;
&lt;p&gt;
The idea is to get positions of all headings and scale them vertically on a page. This can give users the idea of how long sections are. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jankoatwarpspeed.com/examples/table-of-contents/" target="_blank" class="demo"&gt;View demo 3&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
We would have to modify the script from previous demo:
&lt;/p&gt;
&lt;pre&gt;
$(&amp;quot;h1, h2, h3&amp;quot;).each(function(i) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; var current = $(this);
&amp;nbsp;&amp;nbsp;&amp;nbsp; current.attr(&amp;quot;id&amp;quot;, &amp;quot;title&amp;quot; + i);
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; var pos = current.position().top / $(&amp;quot;#content&amp;quot;).height() * $(window).height();
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#toc&amp;quot;).append(&amp;quot;&amp;lt;a id=&amp;#39;link&amp;quot; + i + &amp;quot;&amp;#39; href=&amp;#39;#title&amp;quot; + i +
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;#39; title=&amp;#39;&amp;quot; + current.attr(&amp;quot;tagName&amp;quot;) + &amp;quot;&amp;#39;&amp;gt;&amp;quot; +
&amp;nbsp;&amp;nbsp;&amp;nbsp; current.html() + &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;#link&amp;quot; + i).css(&amp;quot;top&amp;quot;, pos);
});
&lt;/pre&gt;
&lt;p&gt;
This code determines the position of each heading (current.position().top) and scale it to fit in the window. After appending HTML anchor, a new position is assigned via CSS. Finally, we have to position HTML anchors absolutely. Also, each heading type has different font size. The CSS in demo 3 looks like this: 
&lt;/p&gt;
&lt;pre&gt;
#toc { width:200px; position:fixed; float:left; position:fixed;
&amp;nbsp;&amp;nbsp;&amp;nbsp; top:0px; background:transparent url(bkg.png) right; height:100%;}
#toc a { display:block; position:absolute; width:190px; text-align:right;
&amp;nbsp;&amp;nbsp;&amp;nbsp; background:transparent url(chapter_bullet.png) no-repeat right;
&amp;nbsp;&amp;nbsp;&amp;nbsp; color:#0094FF;&amp;nbsp; padding-right:10px;}
#toc a[title=H1] { font-size:18px;}
#toc a[title=H2] { font-size:14px;}
#toc a[title=H3] { font-size:10px;}
&lt;/pre&gt;
This is an interesting concept and would be even more interesting if the area between headings won&amp;#39;t be empty. Instead, it can show scaled preview of each paragraph. But this is a topic for other tutorial. &lt;strong&gt;What do you think?&lt;/strong&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=-hxNcdG-0uM:QdBW6LKVYhQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=-hxNcdG-0uM:QdBW6LKVYhQ:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=-hxNcdG-0uM:QdBW6LKVYhQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=-hxNcdG-0uM:QdBW6LKVYhQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=-hxNcdG-0uM:QdBW6LKVYhQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=-hxNcdG-0uM:QdBW6LKVYhQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=-hxNcdG-0uM:QdBW6LKVYhQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=-hxNcdG-0uM:QdBW6LKVYhQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=-hxNcdG-0uM:QdBW6LKVYhQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/-hxNcdG-0uM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/-hxNcdG-0uM/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/08/20/Table-of-contents-using-jQuery.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=03e0836c-c0d4-4047-9198-b52d81eb09ef</guid>
      <pubDate>Thu, 20 Aug 2009 08:00:00 +0100</pubDate>
      <category>Tutorials</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=03e0836c-c0d4-4047-9198-b52d81eb09ef</pingback:target>
      <slash:comments>73</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=03e0836c-c0d4-4047-9198-b52d81eb09ef</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/08/20/Table-of-contents-using-jQuery.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=03e0836c-c0d4-4047-9198-b52d81eb09ef</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=03e0836c-c0d4-4047-9198-b52d81eb09ef</feedburner:origLink></item>
    <item>
      <title>AllBusinessCards.com giveaway winners</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f8%2fbcwinners.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
Two days ago &lt;a href="http://www.allbusinesscards.com/"&gt;AllBusinessCards.com&lt;/a&gt; decided to give away 1000 business cards to 3 lucky winners of JankoAtWarpSpeed. After &lt;strong&gt;75 comments&lt;/strong&gt; I am happy to announce 3 winners of this amazing giveaway.
&lt;/p&gt;
&lt;p&gt;
The winners are:
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;span class="fn"&gt;German Pi&amp;ntilde;eros&lt;/span&gt;
	&lt;span class="adr"&gt;&lt;img style="border: medium none ; vertical-align: middle" class="country-name flag" src="/pics/flags/us.png" alt="United States" title="United States" /&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span class="url fn"&gt;Yelena Dobric&lt;/span&gt;
	&lt;span class="adr"&gt;&lt;img style="border: medium none ; vertical-align: middle" class="country-name flag" src="/pics/flags/us.png" alt="United States" title="United States" /&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span class="fn"&gt;Nicolas Pascual&lt;/span&gt;
	&lt;span class="adr"&gt;&lt;img style="border: medium none ; vertical-align: middle" class="country-name flag" src="/pics/flags/ar.png" alt="Argentina" title="Argentina" /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Here is the screenshot taken from &lt;a href="http://www.random.org/"&gt;random.org&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f8%2frandom_winners.jpg" alt="" /&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Congratulations to the winners ans a lot of thanks to &lt;a href="http://www.allbusinesscards.com/"&gt;AllBusinessCards.com&lt;/a&gt; for this fantastic giveway. 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=zkJC1bO_xRQ:--twfT9j6fs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=zkJC1bO_xRQ:--twfT9j6fs:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=zkJC1bO_xRQ:--twfT9j6fs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=zkJC1bO_xRQ:--twfT9j6fs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=zkJC1bO_xRQ:--twfT9j6fs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=zkJC1bO_xRQ:--twfT9j6fs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=zkJC1bO_xRQ:--twfT9j6fs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=zkJC1bO_xRQ:--twfT9j6fs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=zkJC1bO_xRQ:--twfT9j6fs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/zkJC1bO_xRQ" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/zkJC1bO_xRQ/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/08/19/allbusinesscards-giveaway-winners.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=04bdac75-0a71-4a96-b8c2-1d3aaf98bbcc</guid>
      <pubDate>Wed, 19 Aug 2009 23:59:00 +0100</pubDate>
      <category>Articles</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=04bdac75-0a71-4a96-b8c2-1d3aaf98bbcc</pingback:target>
      <slash:comments>18</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=04bdac75-0a71-4a96-b8c2-1d3aaf98bbcc</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/08/19/allbusinesscards-giveaway-winners.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=04bdac75-0a71-4a96-b8c2-1d3aaf98bbcc</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=04bdac75-0a71-4a96-b8c2-1d3aaf98bbcc</feedburner:origLink></item>
    <item>
      <title>1000 business cards giveaway from AllBusinessCards.com</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f8%2fallbusinesscards.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
Our friends from &lt;a href="http://www.allbusinesscards.com/"&gt;Allbusinesscards.com&lt;/a&gt; is giving away &lt;strong&gt;1000 professional &lt;a href="http://www.allbusinesscards.com/"&gt;business cards&lt;/a&gt;&lt;/strong&gt; to each of 3 lucky readers of JankoAtWarpSpeed. The cards could be single or double sided, printed on thick 16pt card
stock, and have a Glossy UV finish or a Silk Matte Finish. 
&lt;/p&gt;
&lt;h3&gt;How to participate?&lt;/h3&gt;
&lt;p&gt;
To participate, just leave the comment at the end of this post. Winners will be automatically determined using the &lt;a href="http://www.random.org/lists/"&gt;random list generator&lt;/a&gt; and will be contacted via email, so please provide real email address. &lt;strong&gt;The giveaway ends on &lt;u&gt;Wednesday, August 19th 2009&lt;/u&gt;, the end of the day (CET).&lt;/strong&gt; Comments will be closed after this period.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Please note that shipping is free for US residents only. 
&lt;/em&gt;
&lt;/p&gt;
Good luck!&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=3PjRlH_L0ag:sBloSBYqFsk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=3PjRlH_L0ag:sBloSBYqFsk:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=3PjRlH_L0ag:sBloSBYqFsk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=3PjRlH_L0ag:sBloSBYqFsk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=3PjRlH_L0ag:sBloSBYqFsk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=3PjRlH_L0ag:sBloSBYqFsk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=3PjRlH_L0ag:sBloSBYqFsk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=3PjRlH_L0ag:sBloSBYqFsk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=3PjRlH_L0ag:sBloSBYqFsk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/3PjRlH_L0ag" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/3PjRlH_L0ag/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/08/17/1000-business-cards-giveaway-from-AllBusinessCardscom.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=2e46a510-d124-42e7-8862-591a5c24466d</guid>
      <pubDate>Mon, 17 Aug 2009 21:03:00 +0100</pubDate>
      <category>Articles</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=2e46a510-d124-42e7-8862-591a5c24466d</pingback:target>
      <slash:comments>76</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=2e46a510-d124-42e7-8862-591a5c24466d</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/08/17/1000-business-cards-giveaway-from-AllBusinessCardscom.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=2e46a510-d124-42e7-8862-591a5c24466d</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=2e46a510-d124-42e7-8862-591a5c24466d</feedburner:origLink></item>
    <item>
      <title>Does twitter need another redesign?</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f8%2ftwitter_home.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
There are a lot of discussions going on lately about the redesign of twitter home page. Some people like the design, some criticize it. My overall opinion is that it doesn&amp;#39;t tell enough what twitter actually is. I love twitter. This home page isn&amp;#39;t twitter.  
&lt;/p&gt;
&lt;p&gt;
There are several things I noticed instantly:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f8%2ftwitter_issues.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
A - As regular twitter user, I don&amp;#39;t think this is an adequate tag line. At least I wouldn&amp;#39;t connect this tag line to the activities I perform each day on twitter. For instance, if I want to see what&amp;#39;s happening right now in the world I will check out some news site. 
&lt;/p&gt;
&lt;p&gt;
B - This large search box has too much emphasis and suggests that this site is some kind of search service, which twitter isn&amp;#39;t (as far as I can see).&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
C - This confused me at first. I guessed these are popular tags, but wasn&amp;#39;t sure about it until I saw the burried heading &amp;quot;popular topics by the minute, day and week&amp;quot;. The icons were not helpful at all. Besides this, there is a question mark that reveals a description about these topics. Having help for this area implies that you didn&amp;#39;t provide a clear way to show off information. Also, in my opinion, what&amp;#39;s popular this minute is irrelevant. 
&lt;/p&gt;
&lt;p&gt;
D - &amp;quot;Sign in&amp;quot; is often mistaken for &amp;quot;Sign up&amp;quot;. I think &amp;quot;Log in&amp;quot; would be better for this link.
&lt;/p&gt;
&lt;p&gt;
E - I like to see benefits of signing up to a service. Imagine you are a new user, coming first time to this page. Why would you signup? To search? To read about some topics? I am afraid it&amp;#39;s not good enough. 
&lt;/p&gt;
&lt;p&gt;
These are just a few of possible usability issues with new twitter home page. &lt;strong&gt;But what I really want to know is what do you think about it? Would you change anything? &lt;/strong&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=UjZR5FEn22U:mq_b8eE4SEE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=UjZR5FEn22U:mq_b8eE4SEE:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=UjZR5FEn22U:mq_b8eE4SEE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=UjZR5FEn22U:mq_b8eE4SEE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=UjZR5FEn22U:mq_b8eE4SEE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=UjZR5FEn22U:mq_b8eE4SEE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=UjZR5FEn22U:mq_b8eE4SEE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=UjZR5FEn22U:mq_b8eE4SEE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=UjZR5FEn22U:mq_b8eE4SEE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/UjZR5FEn22U" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/UjZR5FEn22U/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/08/10/Does-twitter-need-another-redesign.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=d1e92785-cbe0-4876-b222-942b978e1c8e</guid>
      <pubDate>Mon, 10 Aug 2009 22:19:00 +0100</pubDate>
      <category>Reviews</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=d1e92785-cbe0-4876-b222-942b978e1c8e</pingback:target>
      <slash:comments>60</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=d1e92785-cbe0-4876-b222-942b978e1c8e</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/08/10/Does-twitter-need-another-redesign.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=d1e92785-cbe0-4876-b222-942b978e1c8e</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=d1e92785-cbe0-4876-b222-942b978e1c8e</feedburner:origLink></item>
    <item>
      <title>What would you do if you weren't in development/design job?</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f8%2f2515349134_109fb490e8.jpg" alt="" width="500" height="260" /&gt; 
&lt;/p&gt;
&lt;p&gt;
I am sure we all sometimes ask ourselves this question, usually when we&amp;#39;re tired of our work and everyday things. I constantly question my work and goals. As developer, designer and solutions architect it&amp;#39;s really hard for me keep up with all the&amp;nbsp;work. Sometimes I just wish I became a painter or cook. 
&lt;/p&gt;
&lt;p&gt;
I like to paint, I have been painting since I was 12. And the older I get, the more I realize it&amp;#39;s a pitty I did&amp;#39;t take that path. But it&amp;#39;s never too late. What would I do in my retirement anyway? Creating diagrams through UML? No way! 
&lt;/p&gt;
&lt;p&gt;
I also like to cook. I know I will never be as good as my wife, but I love to do that. It&amp;#39;s also creative with endless possibilities. By the way, are there any crazy meals that you would recommend me to try? 
&lt;/p&gt;
&lt;p&gt;
Let&amp;#39;s hear your thoughts! &lt;strong&gt;What would you do if you weren&amp;#39;t in development/design job (well, IT in general)? &lt;/strong&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=gPdA72V9TF0:ynH-yAOQjAY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=gPdA72V9TF0:ynH-yAOQjAY:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=gPdA72V9TF0:ynH-yAOQjAY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=gPdA72V9TF0:ynH-yAOQjAY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=gPdA72V9TF0:ynH-yAOQjAY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=gPdA72V9TF0:ynH-yAOQjAY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=gPdA72V9TF0:ynH-yAOQjAY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=gPdA72V9TF0:ynH-yAOQjAY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=gPdA72V9TF0:ynH-yAOQjAY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/gPdA72V9TF0" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/gPdA72V9TF0/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/08/06/What-would-you-do-if-you-werent-in-developmentdesign-job.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=84b2dc47-58cb-4116-b567-dfd8806f2cce</guid>
      <pubDate>Thu, 06 Aug 2009 23:00:00 +0100</pubDate>
      <category>Articles</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=84b2dc47-58cb-4116-b567-dfd8806f2cce</pingback:target>
      <slash:comments>96</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=84b2dc47-58cb-4116-b567-dfd8806f2cce</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/08/06/What-would-you-do-if-you-werent-in-developmentdesign-job.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=84b2dc47-58cb-4116-b567-dfd8806f2cce</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=84b2dc47-58cb-4116-b567-dfd8806f2cce</feedburner:origLink></item>
    <item>
      <title>Reinventing a Drop Down with CSS and jQuery</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f7%2fdropdown.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
For me, standard HTML Select element is pretty much annoying. It&amp;#39;s ugly. It can&amp;#39;t be styled properly in Internet Explorer. And it can&amp;#39;t contain nothing but simple text. That is the reason why I needed to &lt;strong&gt;reinvent Drop Down element&lt;/strong&gt;. This tutorial shows how to do that (easily, believe it or not). 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jankoatwarpspeed.com/examples/reinventing-drop-down/" target="_blank" class="demo"&gt;View demo&lt;/a&gt; &lt;a href="http://www.jankoatwarpspeed.com/file.axd?file=2009%2f7%2fDropDown.zip" class="download"&gt;Download source code&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
There is an update at the end of this tutorial and the &lt;a href="http://www.jankoatwarpspeed.com/examples/reinventing-drop-down/Select2DropDown.html" target="_blank"&gt;second demo that shows the results of this updated code&lt;/a&gt;.
&lt;/p&gt;
&lt;h3&gt;Simple structure &lt;br /&gt;
&lt;/h3&gt;
&lt;p&gt;
Let me explain HTML structure that will be used here. In this example we will use a short list of 8 countries. List is created using Definition List (DL) element. Why this element? It is similar to unordered/ordered list - the only difference is that DL consists of two elements: DT (term) and DD (definition). &lt;strong&gt;This makes it perfect candidate for Drop Down element&lt;/strong&gt;. Element DT can be used to show collapsed state with currently selected option while DD can show all the available options in nested UL. Here is the sample structure:
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;dl class=&amp;quot;dropdown&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dt&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;span&amp;gt;Please select the country&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dd&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ul&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Brazil&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;France&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Germany&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;India&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Japan&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Serbia&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;United Kingdom&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;United States&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ul&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
In order to make Drop Down functional we have to add several important CSS styles. First of all we have to reset margins and paddings for DD, DT and UL. DD will be positioned relatively, so that nested UL can be absolutely positioned. As I mentioned earlier, in collapsed state, only DT will be visible. It contains link with span inside it and two elements make &lt;a href="http://www.jankoatwarpspeed.com/post/2008/04/30/make-fancy-buttons-using-css-sliding-doors-technique.aspx"&gt;sliding doors&lt;/a&gt;, a technique that is often used for creating buttons and tabs. Styling UL is simple, it will be positioned 2px below DT and initially hidden.
&lt;/p&gt;
&lt;pre&gt;
/* General dropdown styles */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
.dropdown dd, .dropdown dt, .dropdown ul { margin:0px; padding:0px; }
.dropdown dd { position:relative; }
/* DT styles for sliding doors */
.dropdown dt a {background:#e4dfcb url(arrow.png) no-repeat scroll right center;
&amp;nbsp;&amp;nbsp;&amp;nbsp; display:block; padding-right:20px; border:1px solid #d4ca9a; width:150px;}
.dropdown dt a span {cursor:pointer; display:block; padding:5px;}
/* UL styles */
.dropdown dd ul { background:#e4dfcb none repeat scroll 0 0; display:none;
&amp;nbsp;&amp;nbsp;&amp;nbsp; list-style:none; padding:5px 0px; position:absolute; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; left:0px; top:2px; width:auto; min-width:170px;}
.dropdown span.value { display:none;}
.dropdown dd ul li a { padding:5px; display:block;}
&lt;/pre&gt;
&lt;p&gt;
After adding some colors, borders and hover effects (check out source code on &lt;a href="http://www.jankoatwarpspeed.com/examples/reinventing-drop-down/" target="_blank"&gt;demo page&lt;/a&gt;), the result so far will be something that really looks like Drop Down.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f7%2fddl_collapsed.png" alt="" /&gt;
&lt;/p&gt;
&lt;h3&gt;Let&amp;#39;s make it work &lt;br /&gt;
&lt;/h3&gt;
&lt;p&gt;
It&amp;#39;s time to involve jQuery. Each click on DT (actually link inside DT) will toggle nested UL.
&lt;/p&gt;
&lt;pre&gt;
$(&amp;quot;.dropdown dt a&amp;quot;).click(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;.dropdown dd ul&amp;quot;).toggle();
});
&lt;/pre&gt;
&lt;p&gt;
This was the simplest part. Now let&amp;#39;s simulate other features of Select element. When you choose an option from the list (UL) it become selected option and is shown inside the link in DT. The function below replaces the HTML of currently selected item with the inner HTML of clicked link. At the end, it hides nested UL. 
&lt;/p&gt;
&lt;pre&gt;
$(&amp;quot;.dropdown dd ul li a&amp;quot;).click(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; var text = $(this).html();
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;.dropdown dt a span&amp;quot;).html(text);
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;.dropdown dd ul&amp;quot;).hide();
});&amp;nbsp;
&lt;/pre&gt;
&lt;p&gt;
This looks more like Drop Down, but there are still some things that need to be done. First, once you reveal nested UL by clicking on Drop Down &lt;strong&gt;it remains visible&lt;/strong&gt;. And that&amp;#39;s a bug. Although there can be better solutions, I&amp;#39;ve came up with this one:
&lt;/p&gt;
&lt;pre&gt;
$(document).bind(&amp;#39;click&amp;#39;, function(e) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; var $clicked = $(e.target);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (! $clicked.parents().hasClass(&amp;quot;dropdown&amp;quot;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;.dropdown dd ul&amp;quot;).hide();
});
&lt;/pre&gt;
&lt;p&gt;
The function above checks each click on a page and if click occurred on some elements outside the dropdown it hides nested UL. Now this looks like regular Select element. 
&lt;/p&gt;
&lt;h3&gt;What about selected value?&lt;/h3&gt;
&lt;p&gt;
Although it looks fine it will surely become a headache for developers. Select element has &amp;quot;value&amp;quot; attribute where you can store some data then needs to be sent to the server. This attribute is usually populated by ID&amp;#39;s of records stored in the database. In our example with list of countries, it is more likely that some country ID will be needed for any serious processing on the server. So how to store these values and how to get selected one?
&lt;/p&gt;
&lt;p&gt;
Let&amp;#39;s modify HTML structure from the beginning of this tutorial and add &amp;lt;span&amp;gt; element inside links in UL. Each &amp;lt;span&amp;gt; have class &amp;quot;value&amp;quot; and real value inside it. 
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;dl class=&amp;quot;dropdown&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dt&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;span&amp;gt;Please select the country&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dd&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ul&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Brazil&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;BR&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;France&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;FR&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Germany&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;DE&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;India&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;IN&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Japan&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;JP&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Serbia&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;CS&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;United Kingdom&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;UK&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;United States&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;US&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ul&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
It would be strange to have codes next to country names in the list, so let&amp;#39;s hide these spans.
&lt;/p&gt;
&lt;pre&gt;
.dropdown span.value { display:none;}
&lt;/pre&gt;
&lt;p&gt;
And that is the only change we&amp;#39;ll need to make in order to make this Drop Down fully functional. Take one more look at click handler for links in UL - it replaces inner HTML of link in DT with inner HTML of clicked link. This means tha tlink in DT element will have &amp;lt;span&amp;gt; with value included.
&lt;/p&gt;
&lt;pre&gt;
var text = $(this).html();
$(&amp;quot;.dropdown dt a span&amp;quot;).html(text);
&lt;/pre&gt;
&lt;p&gt;
It&amp;#39;s easy now to get selected value from our Drop Down. You can create a function like the one below to extract selected value. As the matter of fact, the very same function extracts selected value in the demo and shows this value under the Drop Down.
&lt;/p&gt;
&lt;pre&gt;
function getSelectedValue(id) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return $(&amp;quot;#&amp;quot; + id).find(&amp;quot;dt a span.value&amp;quot;).html();
}
&lt;/pre&gt;
&lt;p&gt;
The code works in all major browsers: Firefox, Safari, Google Chrome, Opera(9.64), Internet Explorer 7 and 8. It works even in IE6, althoug it needs some polishing :) 
&lt;/p&gt;
&lt;h3&gt;Update (29.07.2009): Creating DropDown from SELECT&amp;nbsp; &lt;/h3&gt;
&lt;p&gt;
Since many of you &lt;strong&gt;pointed out the issue with accessiblity&lt;/strong&gt; (and I agree with that) I made another example that creates DropDown dynamically from SELECT element and binds click event to it. It still doesn&amp;#39;t have up/down key navigation, though. 
&lt;/p&gt;
&lt;p&gt;
Instead of having hard-coded DL, we will have SELECT element with all the items here:
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;select id=&amp;quot;source&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;option selected=&amp;quot;selected&amp;quot; value=&amp;quot;BR&amp;quot;&amp;gt;Brasil&amp;lt;/option&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;option value=&amp;quot;FR&amp;quot;&amp;gt;France&amp;lt;/option&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;option value=&amp;quot;DE&amp;quot;&amp;gt;Germany&amp;lt;/option&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;option value=&amp;quot;IN&amp;quot;&amp;gt;India&amp;lt;/option&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;option value=&amp;quot;JP&amp;quot;&amp;gt;Japan&amp;lt;/option&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;option value=&amp;quot;RS&amp;quot;&amp;gt;Serbia&amp;lt;/option&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;option value=&amp;quot;UK&amp;quot;&amp;gt;United Kingdom&amp;lt;/option&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;option value=&amp;quot;US&amp;quot;&amp;gt;United States&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
We will then use jQuery to dynamically create list from SELECT:
&lt;/p&gt;
&lt;pre&gt;
function createDropDown(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var source = $(&amp;quot;#source&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var selected = source.find(&amp;quot;option[selected]&amp;quot;);  // get selected &amp;lt;option&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var options = $(&amp;quot;option&amp;quot;, source);  // get all &amp;lt;option&amp;gt; elements
&amp;nbsp;&amp;nbsp;&amp;nbsp; // create &amp;lt;dl&amp;gt; and &amp;lt;dt&amp;gt; with selected value inside it
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;quot;body&amp;quot;).append(&amp;#39;&amp;lt;dl id=&amp;quot;target&amp;quot; class=&amp;quot;dropdown&amp;quot;&amp;gt;&amp;lt;/dl&amp;gt;&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;quot;#target&amp;quot;).append(&amp;#39;&amp;lt;dt&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;#39; + selected.text() + 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;&amp;#39; + selected.val() + 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;quot;#target&amp;quot;).append(&amp;#39;&amp;lt;dd&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/dd&amp;gt;&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp; // iterate through all the &amp;lt;option&amp;gt; elements and create UL
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;options.each(function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;quot;#target dd ul&amp;quot;).append(&amp;#39;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;#39; + 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(this).text() + &amp;#39;&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;&amp;#39; + 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(this).val() + &amp;#39;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});
}
&lt;/pre&gt;
&lt;p&gt;
Let me briefly explain the code here (you can check the entire source code &lt;a href="http://www.jankoatwarpspeed.com/examples/reinventing-drop-down/Select2DropDown.html" target="_blank"&gt;in the second demo&lt;/a&gt;). It first reads all the &amp;lt;option&amp;gt; elements and selected &amp;lt;option&amp;gt; element as well. Next, it creates DL and DT with selected item inside it. After DL is being created, the code iterates throug &amp;lt;option&amp;gt; collection and create UL with list items inside it.
&lt;/p&gt;
&lt;p&gt;
In order to fully bind this DropDown to SELECT element we need to refresh SELECT each time new selection is made in DropDown.
We have to modify click event handler for links in UL. It will get
the selected item from the DL and assign a value from &amp;lt;span&amp;gt; to
SELECT element.
&lt;/p&gt;
&lt;pre&gt;
$(&amp;quot;.dropdown dd ul li a&amp;quot;).click(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var text = $(this).html();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;quot;.dropdown dt a&amp;quot;).html(text);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;quot;.dropdown dd ul&amp;quot;).hide();
&amp;nbsp;&amp;nbsp;&amp;nbsp; var source = $(&amp;quot;#source&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;source.val($(this).find(&amp;quot;span.value&amp;quot;).html())
});
&lt;/pre&gt;
&lt;p&gt;
That should fix the issue. Thanks everyone for pointing out this. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.jankoatwarpspeed.com/examples/reinventing-drop-down/Select2DropDown.html" target="_blank" class="demo"&gt;View SECOND demo &lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;Wasn&amp;#39;t that simple? &lt;/h3&gt;
&lt;p&gt;
I think that reinvention of Drop Down wasn&amp;#39;t that hard, although it might seems as is it. There are several features that need to be implemented in order to have a credible simulation, but each one of those is simple and straightforward. &lt;strong&gt;Have you ever had a need for reinventing Drop Down? What are your experiences? In any case, let me know your thoughts! 
&lt;/strong&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=DIakQNqQegI:IQnuutkukPA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=DIakQNqQegI:IQnuutkukPA:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=DIakQNqQegI:IQnuutkukPA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=DIakQNqQegI:IQnuutkukPA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=DIakQNqQegI:IQnuutkukPA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=DIakQNqQegI:IQnuutkukPA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=DIakQNqQegI:IQnuutkukPA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=DIakQNqQegI:IQnuutkukPA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=DIakQNqQegI:IQnuutkukPA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/DIakQNqQegI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/DIakQNqQegI/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/07/28/reinventing-drop-down-with-css-jquery.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=683d542c-5135-45a4-93a5-9800eade1e8f</guid>
      <pubDate>Tue, 28 Jul 2009 08:00:00 +0100</pubDate>
      <category>Tutorials</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=683d542c-5135-45a4-93a5-9800eade1e8f</pingback:target>
      <slash:comments>92</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=683d542c-5135-45a4-93a5-9800eade1e8f</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/07/28/reinventing-drop-down-with-css-jquery.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=683d542c-5135-45a4-93a5-9800eade1e8f</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=683d542c-5135-45a4-93a5-9800eade1e8f</feedburner:origLink></item>
    <item>
      <title>Fanurio giveaway winners</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f7%2ffanurio_winners.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
Last week, people from &lt;a href="http://www.fanuriotimetracking.com/index.html"&gt;Fanurio&lt;/a&gt; decided to &lt;a href="http://www.jankoatwarpspeed.com/post/2009/07/24/Fanurio-Giveaway.aspx"&gt;give away three licenses&lt;/a&gt; for Fanurio Time Tracking software. Seems as if many of you were interested in this great piece of software, and after checking out trial version I can say that it is worth buying.
&lt;/p&gt;
&lt;p&gt;
There were 69 comments on the contest and I am pleased to announce three lucky winners:
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;
	&lt;span class="url fn"&gt;Mayank Raichura&lt;/span&gt;
	&lt;span class="adr"&gt;&lt;img style="border: medium none ; vertical-align: middle" class="country-name flag" src="/pics/flags/in.png" alt="India" title="India" /&gt;&lt;/span&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;span class="url fn"&gt;Nikola Plejic&lt;/span&gt;
	&lt;span class="adr"&gt;&lt;img style="border: medium none ; vertical-align: middle" class="country-name flag" src="/pics/flags/hr.png" alt="Croatia" title="Croatia" /&gt;&lt;/span&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;span class="fn"&gt;Hamid Jooon&lt;/span&gt;
	&lt;span class="adr"&gt;&lt;img style="border: medium none ; vertical-align: middle" class="country-name flag" src="/pics/flags/us.png" alt="United States" title="United States" /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Here is a screenshot taken from &lt;a href="http://www.random.org/"&gt;random.org&lt;/a&gt;:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f7%2ffanurio_winners_random.jpg" alt="" /&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Congrats to all the winners, I hope Fanurio will make your freelancing easier. I would like to take this opportunity to thank to people over at &lt;a href="http://www.fanuriotimetracking.com/index.html"&gt;Fanurio&lt;/a&gt; for offering a valuable price.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=cyTfZJ5oSvA:DaVdu2Vs9Jc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=cyTfZJ5oSvA:DaVdu2Vs9Jc:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=cyTfZJ5oSvA:DaVdu2Vs9Jc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=cyTfZJ5oSvA:DaVdu2Vs9Jc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=cyTfZJ5oSvA:DaVdu2Vs9Jc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=cyTfZJ5oSvA:DaVdu2Vs9Jc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=cyTfZJ5oSvA:DaVdu2Vs9Jc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=cyTfZJ5oSvA:DaVdu2Vs9Jc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=cyTfZJ5oSvA:DaVdu2Vs9Jc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/cyTfZJ5oSvA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/cyTfZJ5oSvA/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/07/28/Fanurio-giveaway-winners.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=97a702d7-dec2-4488-8efc-93995cee996c</guid>
      <pubDate>Tue, 28 Jul 2009 00:01:00 +0100</pubDate>
      <category>Articles</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=97a702d7-dec2-4488-8efc-93995cee996c</pingback:target>
      <slash:comments>8</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=97a702d7-dec2-4488-8efc-93995cee996c</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/07/28/Fanurio-giveaway-winners.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=97a702d7-dec2-4488-8efc-93995cee996c</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=97a702d7-dec2-4488-8efc-93995cee996c</feedburner:origLink></item>
    <item>
      <title>Win a free license for Fanurio, software for freelancers</title>
      <description>&lt;p&gt;
&lt;img src="http://www.jankoatwarpspeed.com/image.axd?picture=2009%2f7%2ffanurio.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
I am aware of the fact that many freelancers struggle with effective time tracking and billing. Therefore, I am happy to give &lt;strong&gt;&lt;u&gt;three licenses&lt;/u&gt; of Fanurio Time Tracking software&lt;/strong&gt; to my readers! Since many of you are freelancers I am sure you fill find this software useful.
&lt;/p&gt;
&lt;p style="color: #ff0000"&gt;
Important info: This contest is closed.
&lt;/p&gt;
&lt;h3&gt;What is Fanurio? &lt;/h3&gt;
&lt;p&gt;
&lt;a href="http://www.fanuriotimetracking.com/"&gt;Fanurio&lt;/a&gt; is a software application that helps freelancers to track time and manage invoices. Time tracking is very simple with manual and smart timers. Fanurio helps you track taxes, invoices and payments. Reports are very detailed and can help you analyze your performance. For detailed information about all the features, check out &lt;a href="http://www.fanuriotimetracking.com/features.html"&gt;Fanurio Features Overview page&lt;/a&gt;. 
&lt;/p&gt;
&lt;h3&gt;How can you participate&lt;/h3&gt;
&lt;p&gt;
To participate, just leave the comment at the end of this post. Winners will be automatically determined using the &lt;a href="http://www.random.org/lists/"&gt;random list generator&lt;/a&gt; and will be contacted via email, so please provide real email address. &lt;strong&gt;The giveaway ends on &lt;u&gt;Monday July 27th 2009&lt;/u&gt;, the end of the day (CET).&lt;/strong&gt; Comments will be closed after this period.
&lt;/p&gt;
&lt;p&gt;
Everyone can participate because Fanurio works on multiple platforms! &lt;strong&gt;Good luck!&lt;/strong&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=STDO-oKPJNc:tU2Vhi-0E_E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=STDO-oKPJNc:tU2Vhi-0E_E:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=STDO-oKPJNc:tU2Vhi-0E_E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=STDO-oKPJNc:tU2Vhi-0E_E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=STDO-oKPJNc:tU2Vhi-0E_E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=STDO-oKPJNc:tU2Vhi-0E_E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=STDO-oKPJNc:tU2Vhi-0E_E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?i=STDO-oKPJNc:tU2Vhi-0E_E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?a=STDO-oKPJNc:tU2Vhi-0E_E:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JankoAtWarpSpeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JankoAtWarpSpeed/~4/STDO-oKPJNc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/JankoAtWarpSpeed/~3/STDO-oKPJNc/post.aspx</link>
      <author>this.nospam@nospam.jankoatwarpspeed.com (Janko)</author>
      <comments>http://www.jankoatwarpspeed.com/post/2009/07/24/Fanurio-Giveaway.aspx#comment</comments>
      <guid isPermaLink="false">http://www.jankoatwarpspeed.com/post.aspx?id=85797eb9-aa00-44ab-8b5b-f8f29f0577c2</guid>
      <pubDate>Fri, 24 Jul 2009 08:00:00 +0100</pubDate>
      <category>Articles</category>
      <dc:publisher>Janko</dc:publisher>
      <pingback:server>http://www.jankoatwarpspeed.com/pingback.axd</pingback:server>
      <pingback:target>http://www.jankoatwarpspeed.com/post.aspx?id=85797eb9-aa00-44ab-8b5b-f8f29f0577c2</pingback:target>
      <slash:comments>70</slash:comments>
      <trackback:ping>http://www.jankoatwarpspeed.com/trackback.axd?id=85797eb9-aa00-44ab-8b5b-f8f29f0577c2</trackback:ping>
      <wfw:comment>http://www.jankoatwarpspeed.com/post/2009/07/24/Fanurio-Giveaway.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.jankoatwarpspeed.com/syndication.axd?post=85797eb9-aa00-44ab-8b5b-f8f29f0577c2</wfw:commentRss>
    <feedburner:origLink>http://www.jankoatwarpspeed.com/post.aspx?id=85797eb9-aa00-44ab-8b5b-f8f29f0577c2</feedburner:origLink></item>
  </channel>
</rss>
