<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUQNRHg6eip7ImA9WhRVGE4.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214</id><updated>2012-01-17T22:56:35.612+01:00</updated><category term="mobile" /><category term="jokes" /><category term="household buget" /><category term="How To" /><category term="GWT" /><category term="Microsoft" /><category term="finance" /><category term="funny" /><category term="GWT Ext" /><category term="GWT 2.0" /><category term="movies" /><category term="family budget" /><category term="Review" /><category term="AJAX" /><category term="GWT-Ext" /><category term="Apple" /><category term="WEB" /><category term="GUI" /><category term="Testing" /><category term="Swing" /><category term="synchronize" /><category term="nokia" /><category term="Andrei Gheorghe" /><category term="O'Reilly" /><category term="personal budget" /><category term="tv" /><category term="sub movies" /><category term="code" /><category term="personal finance" /><category term="Android" /><category term="Yahoo" /><category term="ExtJS" /><category term="offset" /><category term="IMAGE RESOURCE" /><category term="Song" /><category term="IBM" /><category term="in direct" /><category term="tricks" /><category term="CSS" /><category term="REST" /><category term="bataie" /><category term="example" /><category term="games" /><category term="Collector" /><category term="Developement" /><category term="Java" /><category term="Elipse" /><category term="Compilation" /><category term="fight" /><category term="sample" /><category term="Gathers" /><category term="Google" /><category term="SDK" /><category term="Office 2010 Beta" /><category term="time shifter" /><category term="Browser" /><category term="iPhone" /><category term="Database" /><category term="HTML" /><category term="Debug" /><category term="CENTER" /><category term="subtitles" /><category term="JavaScript" /><category term="GXT" /><category term="DIV" /><category term="Optimization" /><category term="money" /><title>GUI, GWT, GXT, SmartGWT, GWT-Ext, JAVA SWING, C++/C#</title><subtitle type="html">Tricks, examples, books, tutorials about building GUIs with&lt;br&gt; GWT, ExtJS, SmartGWT, GWT-Ext, Java Swing, C#/C++&lt;br&gt;
for mobile devices - iphone, android and so on.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://ui-programming.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>80</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/GwtExtSwingAnyGuis" /><feedburner:info uri="gwtextswinganyguis" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DUUMQn49eCp7ImA9WhZWGUw.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-6250811573189641744</id><published>2011-05-20T20:40:00.005+02:00</published><updated>2011-05-20T20:48:03.060+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-20T20:48:03.060+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="sample" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="GUI" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><category scheme="http://www.blogger.com/atom/ns#" term="Browser" /><title>EJS Charts parameters</title><content type="html">&lt;div style="color: black; display: inline; font-family: &amp;quot;Calibri&amp;quot;; font-style: normal; font-weight: normal; text-decoration: none;"&gt;&lt;div dir="ltr" style="color: black; font-family: &amp;quot;Calibri&amp;quot;;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;a href="http://ejschart.com/"&gt;EJS Chart&lt;/a&gt; may be a solution, if you  need a JavaScript charting to put it on your web application. It means that you  don't need to install any plugin, like Adobe Flash Player; you just need to  enable the JS scripts for your browser.&lt;/span&gt;  &lt;/div&gt;&lt;div dir="ltr" style="color: black; font-family: tahoma;"&gt;&lt;/div&gt;&lt;div dir="ltr" style="color: black; font-family: tahoma;"&gt;&lt;/div&gt;&lt;div dir="ltr" style="color: black; font-family: &amp;quot;Calibri&amp;quot;;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;This particular library is  a little obsolete, it seems that the last touch was in 2009 -- so I wouldn't  recommend it, if you start a brand new application. But for the older ones,  which are already using it, I have some tips:&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr" style="color: black; font-family: &amp;quot;Calibri&amp;quot;;"&gt;&lt;/div&gt;&lt;div dir="ltr" style="color: black; font-family: &amp;quot;Calibri&amp;quot;;"&gt;&lt;/div&gt;&lt;div dir="ltr" style="color: black; font-family: &amp;quot;Calibri&amp;quot;;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;b&gt;Configuration&lt;/b&gt; of the  chart (create, choose settings, formatters etc) is done strictly in JavaScript.  So if you use the GWT, you need to write your JSI native wrappers, like I did  :)&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr" style="color: black; font-family: &amp;quot;Calibri&amp;quot;;"&gt;&lt;/div&gt;&lt;div dir="ltr" style="color: black; font-family: &amp;quot;Calibri&amp;quot;;"&gt;&lt;/div&gt;&lt;div dir="ltr" style="color: black; font-family: &amp;quot;Calibri&amp;quot;;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;b&gt;Data&lt;/b&gt;&amp;nbsp; can be  passed to the chart in 3 formats:&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr" style="color: black; font-family: &amp;quot;Calibri&amp;quot;;"&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;JSON objects  &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;XML format&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="text-indent: 0px !important;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma; text-indent: 0px !important;"&gt;CSV format&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;JSON and XML are pretty  simple and easy to understand, but the CSV documentation is poor. So, if you  need for example to format your balloon tips (tooltip) you have access to some  variables, which are defined in the data structure, like it's shown  below.&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;b&gt;CSV formats&lt;/b&gt; are the  following (where the separators are &lt;b&gt;|&lt;/b&gt; and &lt;b&gt;,&lt;/b&gt; with these meaning: |  for the separating the attributes for one point, and comma for separating the  points):&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;Pie:&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  x | label &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;Example:  12|point 1|,13|point2&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;will define the slices (12, point 1) and (13, point 2).&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;Bar vertical:&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;x | y |  label&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&lt;span class="Apple-tab-span" style="text-indent: 0px !important; white-space: pre;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;Example: point 1|12|label1,point2|13|label2 &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&lt;span class="Apple-tab-span" style="text-indent: 0px !important; white-space: pre;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;will define  the bars (12, point 1, label 1) and (13, point 2, label 2).&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;Bar  horizontal:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;x | y |  label&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&lt;span class="Apple-tab-span" style="text-indent: 0px !important; white-space: pre;"&gt;&amp;nbsp; &lt;/span&gt;&amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;Example: 12|point 1|label1,13|point2|label2&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&lt;span class="Apple-tab-span" style="text-indent: 0px !important; white-space: pre;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;will define the bars (12, point 1, label 1) and (13,  point 2, label 2).&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;Line:&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;x | y | label &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&lt;span class="Apple-tab-span" style="text-indent: 0px !important; white-space: pre;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;Example:  x_val1|y_val1|label1,x_val2|y_val2|label2&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&lt;span class="Apple-tab-span" style="text-indent: 0px !important; white-space: pre;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;will define the points (x1, y1, label1) and (x2, y2,  label2).&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&lt;/span&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&lt;b&gt;Note&lt;/b&gt; that the string values which are components  of the CSV data must be sure that are escaped, in order to don't break the  parsing of it.&amp;nbsp; Also, there is something called "userdata", if you need to  configure some URL links, to follow when you click on a slice, bar or line  point. I haven't use it, so I'm not talking about it.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&lt;b&gt;Escaping the separator characters&lt;/b&gt; is done like  this:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;,&amp;nbsp;&amp;nbsp;=&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&amp;nbsp; &lt;/span&gt;&amp;amp; # 44 ;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;|&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;=&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&amp;nbsp; &lt;/span&gt;&amp;amp; # 124  ;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;Also the labels support simple HTML tags, like  &amp;amp;lt;label&amp;gt;, &amp;amp;lt;br/&amp;gt;, &amp;amp;lt;b&amp;gt;, &amp;amp;lt;u&amp;gt;,  &amp;amp;lt;i&amp;gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;So, if you need custom tooltips, then use the "label"  variable, which can be passed through attribute &lt;b&gt;hint_string&lt;/b&gt; for the bar  and line, but not for the pie (perhaps because of some bug, whatever you put  here it's ignored).&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;Anyways, In pie case there is a workaround, you have to  define the function &lt;b&gt;onShowHint()&lt;/b&gt;, like this:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;var chart = new EJSC.Chart (...);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;chart.onShowHint = function() {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return  '&amp;lt;label&amp;gt;[parent_title]&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;[series_title]:  [x]&amp;lt;br/&amp;gt;[label] ([percent]%) ';&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;For the other chart types (bar and line) you can do it  like below, set the hint_string in the definition of the series:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hint_string='[label] ([percent]%)'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;The &lt;b&gt;known variables&lt;/b&gt;  are, which can be used in formatting the tooltips:&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;pie: [x], [label], [percent], [total], [series_title], [parent_title], [min],  [max]&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="text-indent: 0px !important;"&gt;&lt;span class="Apple-style-span" style="font-family: tahoma; text-indent: 0px !important;"&gt;bar: [x], [y], [label], [percent], [total],  [series_title], [parent_title], [min], [max], [xaxis],  [yaxis]&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="text-indent: 0px !important;"&gt;&lt;span class="Apple-style-span" style="font-family: tahoma; text-indent: 0px !important;"&gt;line: &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;[x], [y],  [label], [percent], [total], [series_title], [parent_title], [min],  [max]&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;, [xaxis], [yaxis]&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;&lt;/span&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;div style="text-indent: 0px !important;"&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;So, having  said these, I hope you are better informed about EJS Charts!&lt;/span&gt;&lt;/div&gt;&lt;div style="text-indent: 0px !important;"&gt;&lt;/div&gt;&lt;div style="text-indent: 0px !important;"&gt;&lt;span class="Apple-style-span" style="font-family: tahoma;"&gt;Happy  charting!&lt;/span&gt;&lt;/div&gt;&lt;div style="text-indent: 0px !important;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-6250811573189641744?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tfMI7VqfCfpNdU4sxDU8XC9Q8LY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tfMI7VqfCfpNdU4sxDU8XC9Q8LY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tfMI7VqfCfpNdU4sxDU8XC9Q8LY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tfMI7VqfCfpNdU4sxDU8XC9Q8LY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/PJAqGPFdSos" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/6250811573189641744/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2011/05/ejs-charts-parameters_20.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/6250811573189641744?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/6250811573189641744?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/PJAqGPFdSos/ejs-charts-parameters_20.html" title="EJS Charts parameters" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>0</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2011/05/ejs-charts-parameters_20.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cNRH0_fip7ImA9WhZWEEs.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-6316620153271834485</id><published>2011-03-06T18:13:00.004+01:00</published><updated>2011-05-10T22:58:15.346+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-10T22:58:15.346+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><title>How to Use GWT for Large Scale Applications</title><content type="html">&lt;div style="font-family: verdana, helvetica, sans-serif; font-size: 12pt;"&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 630px;"&gt;&lt;tbody&gt;&lt;&gt;&amp;lt;&amp;gt;&lt;a href="http://draft.blogger.com/post-edit.g?blogID=8512530298255458214&amp;amp;postID=6316620153271834485" name="News" rel="nofollow"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="color: #929292; font-size: small;"&gt;News&lt;/span&gt;&lt;/b&gt; &lt;hr align="left" color="#d4d4d4" noshade="noshade" size="2" width="65%" /&gt;&lt;blockquote&gt;&lt;a href="http://go.techtarget.com/r/13377075/2796201" rel="nofollow" style="text-decoration: none;" target="_blank"&gt;&lt;b&gt;&lt;span style="color: #23238e; font-size: small;"&gt;How to Use GWT for Large Scale Applications&lt;/span&gt;&lt;/b&gt; &lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;Cameron McKenzie&lt;/b&gt;&lt;/span&gt; &lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Google Web Toolkit is great for creating Ajax enabled content spots on your web pages. But what about creating large web applications with GWT? The DayZipping tech blog asserts that there are benefits to be had from using GWT, including a reduced server load, social integration and some SEO help through the history manager. &lt;/span&gt;&lt;/blockquote&gt;&lt;a href="http://draft.blogger.com/post-edit.g?blogID=8512530298255458214&amp;amp;postID=6316620153271834485" rel="nofollow"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="color: #929292; font-size: small;"&gt;Site Highlights&lt;/span&gt;&lt;/b&gt; &lt;hr align="left" color="#d4d4d4" noshade="noshade" size="2" width="65%" /&gt;&lt;blockquote&gt;&lt;a href="http://go.techtarget.com/r/13377076/2796201" rel="nofollow" style="text-decoration: none;" target="_blank"&gt;&lt;b&gt;&lt;span style="color: #23238e; font-size: small;"&gt;Snapshots in the cloud: The Developer's friend&lt;/span&gt;&lt;/b&gt; &lt;/a&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small;"&gt;What's the best tasting part of the cloud, especially if you're working on a Java development team? Cheap storage space and snapshots that cost very little to administer or produces make life much easier for the enterprise developer. &lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;a href="http://go.techtarget.com/r/13377077/2796201" rel="nofollow" style="text-decoration: none;" target="_blank"&gt;&lt;b&gt;&lt;span style="color: #23238e; font-size: small;"&gt;Optimizing your mobile website for all devices&lt;/span&gt;&lt;/b&gt; &lt;/a&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Should UI testing be automated or exploratory? Learn when each type of testing is appropriate and how, when used together, they can provide the most comprehensive UI test coverage. &lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;a href="http://go.techtarget.com/r/13377078/2796201" rel="nofollow" style="text-decoration: none;" target="_blank"&gt;&lt;b&gt;&lt;span style="color: #23238e; font-size: small;"&gt;REST: Preferred architecture and infrastructure for Web applications&lt;/span&gt;&lt;/b&gt; &lt;/a&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Explore REST as a primary design pattern for cloud computing architecture in this new tip with insight from Gartner analyst Anne Thomas Manes. &lt;/span&gt;&lt;/blockquote&gt;&lt;a href="http://draft.blogger.com/post-edit.g?blogID=8512530298255458214&amp;amp;postID=6316620153271834485" rel="nofollow"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="color: #929292; font-size: small;"&gt;TSSJS Spotlight&lt;/span&gt;&lt;/b&gt; &lt;hr align="left" color="#d4d4d4" noshade="noshade" size="2" width="65%" /&gt;&lt;blockquote&gt;&lt;a href="http://go.techtarget.com/r/13377079/2796201" rel="nofollow" style="text-decoration: none;" target="_blank"&gt;&lt;b&gt;&lt;span style="color: #23238e; font-size: small;"&gt;Session Spotlight: Do You Really Get Class Loaders?&lt;/span&gt;&lt;/b&gt; &lt;/a&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Class loaders are at the core of the Java language. Java EE containers, OSGi, NetBeans modules, Tapestry 5, Grails and many others use class loaders heavily. Yet when something goes wrong, would you know how to solve it? Jevgeni's session explores the Java class loading mechanism, both from JVM and developer point of view covering: • How different delegation systems are built • How synchronization works • The difference between finding classes and resources • Which incorrect assumptions have been made and are now supported Find out more about &lt;a href="http://go.techtarget.com/r/13377080/2796201" rel="nofollow" target="_blank"&gt;Do You Really Get Class Loaders?&lt;/a&gt; at TheServerSide Java Symposium 2011. &lt;/span&gt;&lt;/blockquote&gt;&lt;/&gt;&lt;/&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;/center&gt;&lt;span style="color: black; font-family: trebuchet MS, arial; font-size: x-small;"&gt;&lt;a href="http://draft.blogger.com/post-edit.g?blogID=8512530298255458214&amp;amp;postID=6316620153271834485" name="sponsor2" rel="nofollow"&gt;&lt;/a&gt;&lt;table align="right" border="0" style="width: 200px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td width="20"&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;img height="5" src="http://media.techtarget.com/TheServerSideCOM/images/spacer.gif" width="1" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;a href="http://draft.blogger.com/post-edit.g?blogID=8512530298255458214&amp;amp;postID=6316620153271834485" rel="nofollow"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="color: #929292; font-size: small;"&gt;Key Headlines&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;
&lt;hr align="left" color="#d4d4d4" noshade="noshade" size="2" width="65%" /&gt;&lt;blockquote&gt;&lt;span style="color: black; font-family: trebuchet MS, arial; font-size: x-small;"&gt;&lt;a href="http://go.techtarget.com/r/13377081/2796201" rel="nofollow" style="text-decoration: none;" target="_blank"&gt;&lt;b&gt;&lt;span style="color: #23238e; font-size: small;"&gt;Bean Definitions for Spring Framework&lt;/span&gt;&lt;/b&gt; &lt;/a&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Spring framework's core features are around dependency injection and beans lifecycle management. What this means is that programmers don't write code to inject bean definitions. Instead, Spring framework injects the dependency to beans. &lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="color: black; font-family: trebuchet MS, arial; font-size: x-small;"&gt;&lt;a href="http://go.techtarget.com/r/13377082/2796201" rel="nofollow" style="text-decoration: none;" target="_blank"&gt;&lt;b&gt;&lt;span style="color: #23238e; font-size: small;"&gt;Get started with JDK 7 and Netbeans 7.0 Beta 2&lt;/span&gt;&lt;/b&gt; &lt;/a&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small;"&gt;In order help early adopters explore Java 7 we've put up a series of blog posts starting with installing the latest JDK 7 binary build, followed by installing NetBeans 7.0 (Beta 2). Regular blog posts featuring code samples and the weekly state of Java 7 progress will commence starting from this week. &lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="color: black; font-family: trebuchet MS, arial; font-size: x-small;"&gt;&lt;a href="http://go.techtarget.com/r/13377083/2796201" rel="nofollow" style="text-decoration: none;" target="_blank"&gt;&lt;b&gt;&lt;span style="color: #23238e; font-size: small;"&gt;Chronon "time travel debugger" now in open beta and available for download&lt;/span&gt;&lt;/b&gt; &lt;/a&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Chronon is a new technology that consists of a a??flight data recordera?? for Java programs which can record every line of code executed inside a program and save it to a file on the disk. The file can be shared among developers and played back in a special time traveling debugger (which is a plugin To Eclipse) to instantly find the root cause of an issue. &lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="color: black; font-family: trebuchet MS, arial; font-size: x-small;"&gt;&lt;a href="http://go.techtarget.com/r/13377084/2796201" rel="nofollow" style="text-decoration: none;" target="_blank"&gt;&lt;b&gt;&lt;span style="color: #23238e; font-size: small;"&gt;ZK 5.0.6 Released - a new SEO content generator among other features&lt;/span&gt;&lt;/b&gt; &lt;/a&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small;"&gt;This latest ZK release introduces a new custom SEO content generator, a more intelligent mechanism that fits layout to content, a new interactive tree model, additional built in jQuery effects and others. &lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: black; font-family: trebuchet MS, arial; font-size: x-small;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #929292; font-family: trebuchet MS, arial; font-size: small;"&gt;About this Newsletter&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;hr align="left" color="#d4d4d4" noshade="noshade" size="2" width="65%" /&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;img height="1" src="http://theserversidecom.techtarget.com/TheServerSideCOM/images/spacer.gif" width="10" /&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;img alt="TechTarget" border="0" height="98" src="http://searchtechtarget.techtarget.com/images/ttlogofooter_white-lg.gif" width="101" /&gt;&lt;/td&gt;&lt;td&gt;&lt;img height="1" src="http://theserversidecom.techtarget.com/TheServerSideCOM/images/spacer.gif" width="15" /&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="color: black; font-family: arial, trebuchet, verdana; font-size: x-small;"&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small;"&gt;This e-newsletter is published by TheServerSide.com, part of the TechTarget network. TechTarget provides IT professionals with the resources they need to perform their jobs: Web sites, newsletters, forums, blogs, white papers, webcasts, events and more.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: black; font-family: arial, trebuchet, verdana; font-size: x-small;"&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Copyright 2011 &lt;a href="http://go.techtarget.com/r/13377085/2796201" rel="nofollow" target="_blank"&gt;&lt;span style="font-family: arial, trebuchet, verdana; font-size: x-small;"&gt;TechTarget&lt;/span&gt;&lt;/a&gt;. All rights reserved. Designated trademarks and brands are the property of their respective owners. &lt;br /&gt;
&lt;br /&gt;
Contact Us: TechTarget, Member Services, 275 Grove Street, Newton, MA 02466, Contact: &lt;a href="mailto:Webmaster@techtarget.com" rel="nofollow" target="_blank" ymailto="mailto:webmaster@techtarget.com"&gt;Webmaster@techtarget.com&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: black; font-family: arial, trebuchet, verdana; font-size: x-small;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;img height="1" src="http://go.techtarget.com/clear.jpg?g=250261&amp;amp;u=2796201" width="1" /&gt; &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-6316620153271834485?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vRSbJMjmVO80IHftlmzYfWOlWik/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vRSbJMjmVO80IHftlmzYfWOlWik/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vRSbJMjmVO80IHftlmzYfWOlWik/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vRSbJMjmVO80IHftlmzYfWOlWik/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/BWga39rQQLk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/6316620153271834485/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2011/03/how-to-use-gwt-for-large-scale.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/6316620153271834485?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/6316620153271834485?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/BWga39rQQLk/how-to-use-gwt-for-large-scale.html" title="How to Use GWT for Large Scale Applications" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>0</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2011/03/how-to-use-gwt-for-large-scale.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMHRXYzfCp7ImA9Wx9VFko.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-8248243705458978123</id><published>2011-01-30T17:07:00.010+01:00</published><updated>2011-02-02T21:27:14.884+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-02T21:27:14.884+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tricks" /><category scheme="http://www.blogger.com/atom/ns#" term="WEB" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT-Ext" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="DIV" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="sample" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT" /><category scheme="http://www.blogger.com/atom/ns#" term="Debug" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="ExtJS" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT Ext" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><category scheme="http://www.blogger.com/atom/ns#" term="Browser" /><category scheme="http://www.blogger.com/atom/ns#" term="GUI" /><title>GWT-Ext: How to show tooltips for the ColumnTree (tree-grid, tree-column) widget</title><content type="html">One day, a friend of ours has asked this:&lt;br /&gt;
&lt;br /&gt;
"&lt;i&gt;Hi, how to set the tooltip on the columns of a &lt;/i&gt;&lt;a href="http://www.gwt-ext.com/demo/#columnTree" target="blank_"&gt;&lt;i&gt;ColumnTree&lt;/i&gt;&lt;/a&gt;&lt;i&gt; ? The structure is as follows:&lt;/i&gt;&lt;br /&gt;
&lt;pre class="brush:java"&gt;ColumnTree.Column cols[] = new ColumnTree.Column[9]; 
cols[0] = columnTree.new Column("header", 290, "dataIndex");
cols[1] = columnTree.new Column("",50,"dataIndex");
cols[2] = columnTree.new Column("",100,"dataIndex");
cols[3] = columnTree.new Column("",170 , "dataIndex");
cols[4] = columnTree.new Column("",170,"dataIndex");
cols[5] = columnTree.new Column("", 70, "dataIndex"); 
cols[6] = columnTree.new Column("", 120, "dataIndex"); 
cols[7] = columnTree.new Column("", 70, "dataIndex"); 
cols[8] = columnTree.new Column("", 70, "dataIndex"); 
&lt;/pre&gt;&lt;i&gt;Columns are valued with the TreeLoader .&lt;/i&gt;"&lt;br /&gt;
&lt;br /&gt;
The answer cannot be that simple, due to the defunct library GWT-Ext, which isn't under dev for long time. Anyhow, because I used this library first time, and I really like it, I found a way to solve this problem.&lt;br /&gt;
&lt;br /&gt;
The column tree is the implementation of the very known tree-column, or tree-grid widget. This can be editable as well.&lt;br /&gt;
&lt;br /&gt;
So the solution contains 2 files:&lt;br /&gt;
- 1. an updated &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ColumnNodeUI.js&lt;/span&gt; that sets the &lt;i&gt;title&lt;/i&gt; DOM attribute for each cell with the &lt;i&gt;value&lt;/i&gt; of the cell.&lt;br /&gt;
- 2. a Java class, called &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SccColumnTreeEditor.java&lt;/span&gt; that updates the &lt;i&gt;title&lt;/i&gt; attribute of the cell element, after the completion of the edit action.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gZXNW3qKT34/TUWViWa6NvI/AAAAAAAAAdM/_EFoI8c6cPw/s1600/treecolumn-cell-tooltip.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="302" s5="true" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TUWViWa6NvI/AAAAAAAAAdM/_EFoI8c6cPw/s400/treecolumn-cell-tooltip.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;You can download these files from here:&lt;br /&gt;
- &lt;a href="http://moneyonthread.free.fr/code/treecolumn/ColumnNodeUI.js"&gt;ColumnNodeUI.js&lt;/a&gt;&lt;br /&gt;
- &lt;a href="http://moneyonthread.free.fr/code/treecolumn/SccColumnTreeEditor.java"&gt;SccColumnTreeEditor.java&lt;/a&gt;&lt;br /&gt;
- &lt;a href="http://moneyonthread.free.fr/code/treecolumn/GWTExt_TreeColumn.java"&gt;GWTExt_TreeColumn.java&lt;/a&gt; -- a test class, where you can see how&amp;nbsp;everything is used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cheers!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Here's the solution found by our friend Faber:&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
Hi SCC, I wanted to post my solution on a tooltip using the TreeLoader. I did not want to change the javascript so I did the following:&lt;br /&gt;
&lt;br /&gt;
- a function:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush:java"&gt;private String getToolTip (Integer value, String tooltip) {
   StringBuilder text = new StringBuilder ();
   text.append ("&amp;lt;div ext:qtitle = \"\" " + "ext:qtip = \"");
   text.append (tooltip);
   text.append ("\"/&amp;gt; "+ value + "&amp;lt;/div&amp;gt;");
   return text.toString();
}&lt;/pre&gt;&lt;br /&gt;
and then inside the JSONObject build my tooltip with data that I want.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush:java"&gt;StringBuilder tooltip = new StringBuilder ();
MyJSon JSONObject = new JSONObject (); / / JsonObject data
tooltip.append ("Label");
tooltip.append (myBean.getValue ()+"  ");
myJSon.put ("value", getToolTip (myBean.getValue (), tooltip.toString ()));
 &lt;/pre&gt;This obviously is server-side.&lt;br /&gt;
&lt;br /&gt;
Thanks Faber!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-8248243705458978123?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-j8GD1ju8snF_F7YnvvwqlgL8WA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-j8GD1ju8snF_F7YnvvwqlgL8WA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-j8GD1ju8snF_F7YnvvwqlgL8WA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-j8GD1ju8snF_F7YnvvwqlgL8WA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/Zb3kCrl_qv0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/8248243705458978123/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2011/01/gwt-ext-how-to-show-tooltips-for.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/8248243705458978123?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/8248243705458978123?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/Zb3kCrl_qv0/gwt-ext-how-to-show-tooltips-for.html" title="GWT-Ext: How to show tooltips for the ColumnTree (tree-grid, tree-column) widget" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_gZXNW3qKT34/TUWViWa6NvI/AAAAAAAAAdM/_EFoI8c6cPw/s72-c/treecolumn-cell-tooltip.png" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2011/01/gwt-ext-how-to-show-tooltips-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MHRHY6fyp7ImA9Wx9WFkg.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-3898126179935267578</id><published>2011-01-21T23:34:00.004+01:00</published><updated>2011-01-22T00:10:35.817+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-22T00:10:35.817+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tricks" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Swing" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="sample" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="GUI" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><title>Java Swing - Date Picker dialog to select a date</title><content type="html">This is addressed to the few Java Swing developers, who may still be out there and looking for cool widgets.&lt;br /&gt;
&lt;br /&gt;
How many times did you need a date picker widget? you know, like the one from the GWT for example, and there are many others available. &lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://code.google.com/webtoolkit/doc/latest/RefWidgetGallery.html" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" s5="true" src="http://4.bp.blogspot.com/_gZXNW3qKT34/TToHl3Z7ueI/AAAAAAAAAck/A2AVrxzdc88/s1600/GWT-DatePicker.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Unfortunatelly the Java Swing library doesn't have a built-in one. Anyways, I found a good starting point here, &lt;a href="http://sourceforge.net/projects/datepicker/"&gt;http://sourceforge.net/projects/datepicker/&lt;/a&gt;&amp;nbsp;-- which is a very nicely done example, a little incomplete, but still good to go. &lt;br /&gt;
&lt;br /&gt;
Because I wanted this widget to be perfect, I've updated and enhanced and it can do the followings:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;automatic extract the name of the days and months from the Java locale (not like the original from a properties file).&lt;/li&gt;
&lt;li&gt;automatic detects and display the first day of the week according with the used locale (not like the original that uses hard-coded only US style).&lt;/li&gt;
&lt;li&gt;correct the coloring in red of the weekend days (not like original that had only Sundays on red, and Saturdays on gray).&amp;nbsp;&lt;/li&gt;
&lt;li&gt;corrected the button images to have all the same size (better header than the original)&lt;/li&gt;
&lt;li&gt;implemented the "close on away click" feature to easily close the picker dialog when click away.&lt;/li&gt;
&lt;/ul&gt;These are the results of the Java Swing widget:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gZXNW3qKT34/TToH1Aqvc6I/AAAAAAAAAco/e7E3F2_fbnc/s1600/java-swing-date-picker-001.PNG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" s5="true" src="http://4.bp.blogspot.com/_gZXNW3qKT34/TToH1Aqvc6I/AAAAAAAAAco/e7E3F2_fbnc/s200/java-swing-date-picker-001.PNG" width="200" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_gZXNW3qKT34/TToH8L_psfI/AAAAAAAAAcs/U59gn3fVXk4/s1600/java-swing-date-picker-002.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="199" s5="true" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TToH8L_psfI/AAAAAAAAAcs/U59gn3fVXk4/s200/java-swing-date-picker-002.PNG" width="200" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;
The first image is a read-only text-field and a button, which will open the date-picker dialog, as seen in the second image.&lt;br /&gt;
&lt;br /&gt;
We can fast scroll though months and years, or quickly select from the 2 combos, and for the days just press on the date, which you want to select.&lt;br /&gt;
&lt;br /&gt;
Hope you like it -- the source code is available &lt;a href="http://scristescu.free.fr/SccDatePicker.zip"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Cheers!&lt;br /&gt;
&lt;br /&gt;
PS: you can see this widget at work, in my free application &lt;a href="http://money-on-thread.blogspot.com/"&gt;Money On Thread&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-3898126179935267578?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OHB1jdgU7gaV6aLF4VmKzVVpjAU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OHB1jdgU7gaV6aLF4VmKzVVpjAU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OHB1jdgU7gaV6aLF4VmKzVVpjAU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OHB1jdgU7gaV6aLF4VmKzVVpjAU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/RGyUD-twWZ0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/3898126179935267578/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2011/01/java-swing-date-picker-dialog-to-select.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/3898126179935267578?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/3898126179935267578?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/RGyUD-twWZ0/java-swing-date-picker-dialog-to-select.html" title="Java Swing - Date Picker dialog to select a date" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_gZXNW3qKT34/TToHl3Z7ueI/AAAAAAAAAck/A2AVrxzdc88/s72-c/GWT-DatePicker.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2011/01/java-swing-date-picker-dialog-to-select.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQNRHk7fSp7ImA9Wx9RGUs.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-7096848955939562001</id><published>2010-12-21T22:53:00.000+01:00</published><updated>2010-12-21T22:53:15.705+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-21T22:53:15.705+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="WEB" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="IBM" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><title>IBM - Recommended reading list: Java EE and WebSphere Application Server</title><content type="html">&lt;div class="author" style="text-align: right;"&gt;&lt;a class="dwauthor" hoverintent_t="undefined" href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#author1" jquery1292968015921="15" rel="#authortip1" title=""&gt;&lt;span style="color: #4c6e94;"&gt;Sree Anand Ratnasinghe&lt;/span&gt;&lt;/a&gt; (&lt;a href="mailto:sreer@us.ibm.com?subject=Java EE and WebSphere Application Server"&gt;&lt;span style="color: #4c6e94;"&gt;sreer@us.ibm.com&lt;/span&gt;&lt;/a&gt;), Certified IT Specialist, IBM　　&lt;/div&gt;&lt;div class="author"&gt;&lt;/div&gt;&lt;b&gt;Summary:&lt;/b&gt;&amp;nbsp; Learn about using Java™ Enterprise Edition (Java EE) and IBM® WebSphere® Application Server with this list of essential reading, compiled for customers, consultants, and other technical specialists by IBM Software Services for WebSphere. &lt;strong&gt;Updated with resources for new related products, technologies, and feature packs&lt;/strong&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://draft.blogger.com/" name="intro"&gt;&lt;span class="atitle"&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;Introduction&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
This list of recommended reading connects you to documents that contain essential information that practitioners should know and understand before diving into Java™ EE application design and implementation using IBM® WebSphere® Application Server.&lt;br /&gt;
This list is intended for anyone interested in using or learning more about WebSphere Application Server.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;About versions: &lt;/strong&gt;Unless otherwise noted, the items in this list contain information that is &lt;em&gt;generally applicable to all currently-supported versions of WebSphere Application Server&lt;/em&gt;, even though the information might be discussed in the context of older releases. When an item pertains only to one or more specific versions of WebSphere Application Server (or other IBM software), the applicable versions are noted after the title.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;About other products: &lt;/strong&gt;Although this list provides some starting points for learning about Web application development using other IBM products and related technologies, the focus here is on the WebSphere Application Server product family. Check the &lt;a href="http://www.ibm.com/developerworks/rational/"&gt;&lt;span style="color: #4c6e94;"&gt;IBM developerWorks Rational® zone&lt;/span&gt;&lt;/a&gt; for more comprehensive reference material on Web development and IBM Rational products, the &lt;a href="http://www.ibm.com/developerworks/webservices/"&gt;&lt;span style="color: #4c6e94;"&gt;SOA and Web services zone&lt;/span&gt;&lt;/a&gt; for Service Oriented Architecture articles and design tips, and the &lt;a href="http://www.projectzero.org/"&gt;&lt;span style="color: #4c6e94;"&gt;Project Zero&lt;/span&gt;&lt;/a&gt; development community for information about using IBM WebSphere sMash to build rich Internet applications.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://draft.blogger.com/" name="list"&gt;&lt;span class="atitle"&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;The list&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The items in this list are organized into these categories:&lt;br /&gt;
&lt;ol type="A"&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec1"&gt;&lt;span style="color: #4c6e94;"&gt;Fundamentals&lt;/span&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec2"&gt;&lt;span style="color: #4c6e94;"&gt;Architecture&lt;/span&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec3"&gt;&lt;span style="color: #4c6e94;"&gt;Administration&lt;/span&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec-migration"&gt;&lt;span style="color: #4c6e94;"&gt;Migration&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec4"&gt;&lt;span style="color: #4c6e94;"&gt;Data integration&lt;/span&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec5"&gt;&lt;span style="color: #4c6e94;"&gt;Web services&lt;/span&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec6"&gt;&lt;span style="color: #4c6e94;"&gt;Application development&lt;/span&gt;&lt;/a&gt; &lt;ol type="a"&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec6a"&gt;&lt;span style="color: #4c6e94;"&gt;Rational Application Developer basics&lt;/span&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec6b"&gt;&lt;span style="color: #4c6e94;"&gt;Java EE development&lt;/span&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec6c"&gt;&lt;span style="color: #4c6e94;"&gt;Web 2.0&lt;/span&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec6d"&gt;&lt;span style="color: #4c6e94;"&gt;Service Component Architecture&lt;/span&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec-osgi"&gt;&lt;span style="color: #4c6e94;"&gt;OSGi&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec-xml"&gt;&lt;span style="color: #4c6e94;"&gt;Development with XML&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec6e"&gt;&lt;span style="color: #4c6e94;"&gt;Other frameworks&lt;/span&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec7"&gt;&lt;span style="color: #4c6e94;"&gt;Security&lt;/span&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec8"&gt;&lt;span style="color: #4c6e94;"&gt;Problem determination&lt;/span&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec10"&gt;&lt;span style="color: #4c6e94;"&gt;Performance, scalability, and high availability&lt;/span&gt;&lt;/a&gt; &lt;ol type="a"&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec10a"&gt;&lt;span style="color: #4c6e94;"&gt;High availability&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec10b"&gt;&lt;span style="color: #4c6e94;"&gt;Performance tuning&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec-virtual"&gt;&lt;span style="color: #4c6e94;"&gt;Virtualization&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec11"&gt;&lt;span style="color: #4c6e94;"&gt;WebSphere DataPower Appliances&lt;/span&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610#sec12"&gt;&lt;span style="color: #4c6e94;"&gt;Maintenance&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
More you can find &lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html?cmp=dw&amp;amp;cpb=dwweb&amp;amp;ct=dwnew&amp;amp;cr=dwnen&amp;amp;ccy=zz&amp;amp;csr=121610"&gt;here &amp;gt;&amp;gt;&amp;gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-7096848955939562001?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eDOCsbkWDMxEo0dCsa_C_ylovOs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eDOCsbkWDMxEo0dCsa_C_ylovOs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eDOCsbkWDMxEo0dCsa_C_ylovOs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eDOCsbkWDMxEo0dCsa_C_ylovOs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/MaABcdDeKrM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/7096848955939562001/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/12/ibm-recommended-reading-list-java-ee.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/7096848955939562001?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/7096848955939562001?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/MaABcdDeKrM/ibm-recommended-reading-list-java-ee.html" title="IBM - Recommended reading list: Java EE and WebSphere Application Server" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>2</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/12/ibm-recommended-reading-list-java-ee.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkINRH04fSp7ImA9Wx9RFEg.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-8059344602251370392</id><published>2010-12-16T00:09:00.000+01:00</published><updated>2010-12-16T00:09:55.335+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-16T00:09:55.335+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT" /><category scheme="http://www.blogger.com/atom/ns#" term="Testing" /><category scheme="http://www.blogger.com/atom/ns#" term="Debug" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="ExtJS" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT Ext" /><category scheme="http://www.blogger.com/atom/ns#" term="Browser" /><category scheme="http://www.blogger.com/atom/ns#" term="GUI" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><title>How to make GWT - GXT applications testable with Selenium?</title><content type="html">As you are working on your WEB application, you have learnt to use the GWT, then you wanted nicer UI controls (if you are a Java developer at core) from another framework, 'cause you have not time and interest to tweak (play) with .CSS styles. So, eventually you may end up, like many of us, with the GXT library from &lt;a href="http://www.sencha.com/"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Sencha&lt;/span&gt;&lt;/a&gt; (fromer ExtJS).&lt;br /&gt;
&lt;br /&gt;
And as long as you kept the development within the pure GWT, you managed the IDs and names of your controls. Doing this (all manually hard work) it pays back, because you can easily use the Selenium for testing your application.&lt;br /&gt;
&lt;br /&gt;
"&lt;a href="http://en.wikipedia.org/wiki/Selenium_(software)#Selenium_IDE"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Selenium&lt;/span&gt;&lt;/a&gt; is a portable software testing framework for web applications. Selenium provides a record/playback tool for authoring tests without learning a test scripting language. Selenium provides a test domain specific language (DSL) to write tests in a number of popular programming languages, including C#, Java, Ruby, Groovy, Python, PHP, and Perl. Test playback is possible in most modern web browsers. Selenium deploys on Windows, Linux, and Macintosh platforms." from Wikipedia, the free encyclopedia.&lt;br /&gt;
&lt;br /&gt;
Now if you use the GXT (official name is called Ext GWT, not to be confused with the old dead framework GWT-Ext) you'll see that all controls have an automatic generated ID (i.e. "&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;x-auto-234&lt;/span&gt;") in the class "&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;Component&lt;/span&gt;", which is the base of all GXT UI widgets, using the helper function &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: x-small;"&gt;XDOM.&lt;i&gt;&lt;span style="font-size: x-small;"&gt;getUniqueId()&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Now the problem is simple, because the UI widgets have these IDs auto-increment generated, depending of the workflow of your application (which dialogs, windows&amp;nbsp;you open first)&amp;nbsp; you'll have for sure different IDs for the same controls. You can say, "&lt;em&gt;no problem, we can always overide the IDs, or set the names of the controls&lt;/em&gt;" (which is true), but what about the built-in dialogs like &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;MessageBox&lt;/span&gt;, which are very "&lt;em&gt;enclosed&lt;/em&gt;", and you cannot override or set anything from its implementation?&lt;br /&gt;
&lt;br /&gt;
I found not solution yet, but I'm still digging, so if you have any ideas or solutions, please don't be shy to share them with everybody here, in a small comment !&lt;br /&gt;
&lt;br /&gt;
Cheers and happy testing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-8059344602251370392?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ovO9RLA16EwLDITy8-4uqBmjXqo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ovO9RLA16EwLDITy8-4uqBmjXqo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ovO9RLA16EwLDITy8-4uqBmjXqo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ovO9RLA16EwLDITy8-4uqBmjXqo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/dXmJhLWS_d0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/8059344602251370392/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/12/how-to-make-gwt-gxt-applications.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/8059344602251370392?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/8059344602251370392?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/dXmJhLWS_d0/how-to-make-gwt-gxt-applications.html" title="How to make GWT - GXT applications testable with Selenium?" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>2</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/12/how-to-make-gwt-gxt-applications.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cMRng9fSp7ImA9Wx9TGU4.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-3652176121151278334</id><published>2010-11-25T00:18:00.005+01:00</published><updated>2010-11-28T10:04:47.665+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-28T10:04:47.665+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WEB" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="SDK" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><category scheme="http://www.blogger.com/atom/ns#" term="Browser" /><title>Web Frameworks Comparison</title><content type="html">&lt;span class="Apple-style-span" style="font-family: arial, verdana, helvetica, sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Matt Raible posted a slideshow from his preso at Devoxx,&amp;nbsp;&lt;a href="http://www.slideshare.net/mraible/comparing-jvm-web-frameworks" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #2e5e8d; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank"&gt;comparing web frameworks&lt;/a&gt;. Spring MVC won, although GWT and Ruby on Rails were right there with it. He's a struts snob so it wasn't even considered, and struts 2 was only okay; he posted the&amp;nbsp;&lt;a href="http://spreadsheets.google.com/pub?key=0AtkkDCT2WDMXdC1HOEtnUHpCejJMbUhGeGJWUmh5dVE&amp;amp;hl=en&amp;amp;output=html" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #2e5e8d; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank"&gt;actual ratings on google docs&lt;/a&gt;.&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Things that stand out from the spreadsheet:&lt;/div&gt;&lt;ol style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; list-style-image: initial; list-style-position: initial; list-style-type: decimal; margin-bottom: 25px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; margin-bottom: 0px; margin-left: 40px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Each grading point was equal. Developer perception gets one point. Same for risk, same for published books, same for REST support, and all the opinions were subjective.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; margin-bottom: 0px; margin-left: 40px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Tapestry got a 13.5. Struts 2 got a 14.5. Grails got 16.5, and Wicket got 14.5. (&lt;a href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt;, &lt;a href="http://rubyonrails.org/core"&gt;Ruby on Rails&lt;/a&gt;, and &lt;a href="http://www.springsource.org/"&gt;Spring MVC&lt;/a&gt; all got 17.) I know I'm subjective too, but Tapestry would have gotten like a 3 based on the people I've talked to, and Wicket would have gotten a 24 or so, because its fanboys would have stuffed the ballot boxes like wolverines.&lt;/li&gt;
&lt;/ol&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gZXNW3qKT34/TO2dDkrHZMI/AAAAAAAAAbY/MHzEPOWPDb0/s1600/web-frameworks-comparison.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="328" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TO2dDkrHZMI/AAAAAAAAAbY/MHzEPOWPDb0/s640/web-frameworks-comparison.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;Check out this SlideShare Presentation:&amp;nbsp;&lt;strong style="display: inline !important; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 12px;"&gt;Comparing JVM Web Frameworks&lt;/strong&gt;&lt;br /&gt;
&lt;div id="__ss_5821659" style="text-align: center; width: 425px;"&gt;&lt;div style="text-align: center;"&gt;&lt;object height="355" id="__sse5821659" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=comparingjvmwebframeworksdevoxx2010-101118055856-phpapp01&amp;stripped_title=comparing-jvm-web-frameworks&amp;userName=mraible" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse5821659" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=comparingjvmwebframeworksdevoxx2010-101118055856-phpapp01&amp;stripped_title=comparing-jvm-web-frameworks&amp;userName=mraible" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/mraible"&gt;Matt Raible&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similar articles:&lt;br /&gt;
* &amp;nbsp;&lt;a href="http://ui-programming.blogspot.com/2010/01/comparation-ext-gwt-gxt-vs-gwt-ext-vs.html"&gt;Best GWT Libraries: Ext GWT (GXT) vs GWT-Ext vs SmartGWT&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-3652176121151278334?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Alm8LiQroYXN8cselG69oOg24WA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Alm8LiQroYXN8cselG69oOg24WA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Alm8LiQroYXN8cselG69oOg24WA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Alm8LiQroYXN8cselG69oOg24WA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/FX08UGKaXNM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/3652176121151278334/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/11/web-frameworks-comparison.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/3652176121151278334?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/3652176121151278334?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/FX08UGKaXNM/web-frameworks-comparison.html" title="Web Frameworks Comparison" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_gZXNW3qKT34/TO2dDkrHZMI/AAAAAAAAAbY/MHzEPOWPDb0/s72-c/web-frameworks-comparison.PNG" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/11/web-frameworks-comparison.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIDRn87fSp7ImA9Wx5bFU4.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-5579318359911729767</id><published>2010-10-31T14:07:00.002+01:00</published><updated>2010-10-31T14:09:37.105+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-31T14:09:37.105+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tricks" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Testing" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="sample" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><title>JavaSpecialists.EU - Interlocker - Interleaving Threads</title><content type="html">&lt;table align="center" border="0" cellpadding="0" cellspacing="0" style="font-family: Arial, Verdana; font-size: 16px; width: 546px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td colspan="3"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="text-align: right;"&gt;&lt;span class="Apple-style-span" style="color: #5a5a5a; font-size: 11px;"&gt;&amp;nbsp;by Heinz Kabutz 2010&amp;nbsp;&lt;/span&gt;&lt;/div&gt;A few months ago, one of my subscribers sent me an interesting question. How can you alternately call a method from two threads? Imagine you have two threads, first thread 1 calls a method, then thread 2, then thread 1 again, and so on. One thread should never call the method twice in a row.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Mohammed sent me several different solutions to this puzzle. My first step was to make our testing a bit more robust, so that we could catch any mistakes early. I also spent a while renaming the classes, to make our intentions clearer. Lastly, I marked up the classes with the new&amp;nbsp;&lt;a href="http://www.jpatterns.org/" rel="nofollow" style="color: #399221; font-weight: bold; text-decoration: none;" target="_blank"&gt;&lt;span class="yshortcuts" id="lw_1288530288_6"&gt;jpatterns annotations&lt;/span&gt;&lt;/a&gt;&amp;nbsp;to indicate where we were using which design patterns.&amp;nbsp;The&lt;a href="http://jpatterns.org/" style="color: #399221; font-weight: bold; text-decoration: none;" target="_blank"&gt;&lt;span class="yshortcuts" id="lw_1288530288_7"&gt;jpatterns.org&lt;/span&gt;&lt;/a&gt;&amp;nbsp;annotations are a new project started by&amp;nbsp;&lt;a href="http://www.javaspecialists.eu/club" rel="nofollow" style="color: #399221; font-weight: bold; text-decoration: none;" target="_blank"&gt;&lt;span class="yshortcuts" id="lw_1288530288_8"&gt;The Java Specialist Club&lt;/span&gt;&lt;/a&gt;. You are welcome to participate in the project if you would like to.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Disclaimer: I cannot think of a practical application of where such an "interlocker" would be useful. However, some of the discoveries might be useful in highly communicative systems. such as the lock-free approach to solving the problem. Only use if you know exactly what you are doing :-)&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;As a first class, we define Interlocker, which uses the template method to start threads that will call the Runnables. The execute() method will block until all the threads have finished. The Runnable objects returned by the getRunnable() method should guarantee that the InterlockTask is called interleaved by the threads. They do not have to guarantee which thread starts, but the total call count must be correct.&lt;/div&gt;&lt;pre style="font-family: 'Lucida Sans Typewriter', 'Bitstream Vera Sans Mono', 'Courier New';"&gt;&lt;b&gt;&lt;span style="color: navy;"&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;&lt;pre style="font-family: 'Lucida Sans Typewriter', 'Bitstream Vera Sans Mono', 'Courier New';"&gt;&lt;b&gt;&lt;span style="color: navy;"&gt;package&lt;/span&gt;&lt;/b&gt; interlock;

&lt;b&gt;&lt;span style="color: navy;"&gt;import&lt;/span&gt;&lt;/b&gt; org.jpatterns.gof.*;

/**
 * This special executor guarantees that the call() method of the
 * task parameter is invoked in turns by two threads.  There is
 * probably no practical application for this class, except as a
 * learning experience.
 */
@TemplateMethodPattern.AbstractClass
&lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;abstract&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;class&lt;/span&gt;&lt;/b&gt; Interlocker {
  @TemplateMethodPattern.PrimitiveOperation
  &lt;b&gt;&lt;span style="color: navy;"&gt;protected&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;abstract&lt;/span&gt;&lt;/b&gt; Runnable[] getRunnables(InterlockTask task);

  @TemplateMethodPattern.TemplateMethod
  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;final&lt;/span&gt;&lt;/b&gt; &lt;t&gt; T execute(InterlockTask&lt;t&gt; task)
      &lt;b&gt;&lt;span style="color: navy;"&gt;throws&lt;/span&gt;&lt;/b&gt; InterruptedException {
    Runnable[] jobs = getRunnables(task);
    Thread[] threads = &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; Thread[jobs.length];
    &lt;b&gt;&lt;span style="color: navy;"&gt;for&lt;/span&gt;&lt;/b&gt; (&lt;b&gt;&lt;span style="color: navy;"&gt;int&lt;/span&gt;&lt;/b&gt; i = &lt;span style="color: blue;"&gt;0&lt;/span&gt;; i &amp;lt; threads.length; i++) {
      threads[i] = &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; Thread(jobs[i]);
      threads[i].start();
    }
    &lt;b&gt;&lt;span style="color: navy;"&gt;for&lt;/span&gt;&lt;/b&gt; (Thread thread : threads) {
      thread.join();
    }
    &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt; task.get();
  }
}
  &lt;/t&gt;&lt;/t&gt;&lt;/pre&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Before we look at some possible solutions, let us view the InterlockTask interface. It is self explanatory.&lt;/div&gt;&lt;pre style="font-family: 'Lucida Sans Typewriter', 'Bitstream Vera Sans Mono', 'Courier New';"&gt;&lt;b&gt;&lt;span style="color: navy;"&gt;package&lt;/span&gt;&lt;/b&gt; interlock;

&lt;b&gt;&lt;span style="color: navy;"&gt;import&lt;/span&gt;&lt;/b&gt; org.jpatterns.gof.*;

@StrategyPattern.Strategy
&lt;span class="yshortcuts" id="lw_1288530288_9"&gt;&lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;interface&lt;/span&gt;&lt;/b&gt;&lt;/span&gt; InterlockTask&lt;t&gt; {
  &lt;b&gt;&lt;span style="color: navy;"&gt;boolean&lt;/span&gt;&lt;/b&gt; isDone();

  /**
   * The call() method is called interleaved by the the threads
   * in a round-robin fashion.
   */
  &lt;b&gt;&lt;span style="color: navy;"&gt;void&lt;/span&gt;&lt;/b&gt; call();

  /**
   * Returns the result after all the call()'s have completed.
   */
  T get();

  &lt;b&gt;&lt;span style="color: navy;"&gt;void&lt;/span&gt;&lt;/b&gt; reset();
}
  &lt;/t&gt;&lt;/pre&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;In the first test case, we want to simply increment a value. Since we are accessing the field from multiple threads, we need to declare it as volatile, but since only one thread is invoking the call() method, we do not need to synchronize. Since this test does very little, we can also use it to measure the overhead of our thread coordination mechanism.&lt;/div&gt;&lt;pre style="font-family: 'Lucida Sans Typewriter', 'Bitstream Vera Sans Mono', 'Courier New';"&gt;&lt;b&gt;&lt;span style="color: navy;"&gt;package&lt;/span&gt;&lt;/b&gt; interlock.test;

&lt;b&gt;&lt;span style="color: navy;"&gt;import&lt;/span&gt;&lt;/b&gt; org.jpatterns.gof.*;
&lt;b&gt;&lt;span style="color: navy;"&gt;import&lt;/span&gt;&lt;/b&gt; interlock.*;

@StrategyPattern.ConcreteStrategy

&lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;class&lt;/span&gt;&lt;/b&gt; EmptyInterlockTask &lt;b&gt;&lt;span style="color: navy;"&gt;implements&lt;/span&gt;&lt;/b&gt;
    InterlockTask&lt;integer&gt; {
  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;final&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;int&lt;/span&gt;&lt;/b&gt; upto;
  &lt;b&gt;&lt;span style="color: navy;"&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;volatile&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;int&lt;/span&gt;&lt;/b&gt; count;

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; EmptyInterlockTask(&lt;b&gt;&lt;span style="color: navy;"&gt;int&lt;/span&gt;&lt;/b&gt; upto) {
    &lt;b&gt;&lt;span style="color: navy;"&gt;this&lt;/span&gt;&lt;/b&gt;.upto = upto;
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;boolean&lt;/span&gt;&lt;/b&gt; isDone() {
    &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt; count &amp;gt;= upto;
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;void&lt;/span&gt;&lt;/b&gt; call() {
    count++;
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; Integer get() {
    &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt; count;
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;void&lt;/span&gt;&lt;/b&gt; reset() {
    count = &lt;span style="color: blue;"&gt;0&lt;/span&gt;;
  }
}
  &lt;/integer&gt;&lt;/pre&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;The next test verifies that the call() method was invoked by alternating threads. We do this by inserting the current call number into a LinkedHashMap, with the number as key and the thread as a value. Afterwards, when we call get(), we verify that the result is correct. This is returned in the VerifyResult object.&lt;/div&gt;&lt;pre style="font-family: 'Lucida Sans Typewriter', 'Bitstream Vera Sans Mono', 'Courier New';"&gt;&lt;b&gt;&lt;span style="color: navy;"&gt;package&lt;/span&gt;&lt;/b&gt; interlock.test;

&lt;b&gt;&lt;span style="color: navy;"&gt;import&lt;/span&gt;&lt;/b&gt; org.jpatterns.gof.*;

&lt;b&gt;&lt;span style="color: navy;"&gt;import&lt;/span&gt;&lt;/b&gt; java.util.*;

&lt;b&gt;&lt;span style="color: navy;"&gt;import&lt;/span&gt;&lt;/b&gt; java.util.concurrent.atomic.*;

&lt;b&gt;&lt;span style="color: navy;"&gt;import&lt;/span&gt;&lt;/b&gt; interlock.*;

@StrategyPattern.ConcreteStrategy
&lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;class&lt;/span&gt;&lt;/b&gt; InterleavedNumberTestingStrategy &lt;b&gt;&lt;span style="color: navy;"&gt;implements&lt;/span&gt;&lt;/b&gt;
    InterlockTask&lt;verifyresult&gt; {
  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;final&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;int&lt;/span&gt;&lt;/b&gt; upto;
  &lt;b&gt;&lt;span style="color: navy;"&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;final&lt;/span&gt;&lt;/b&gt; Map&lt;integer, thread=""&gt; numbers =
      &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; LinkedHashMap&lt;integer, thread=""&gt;();
  &lt;b&gt;&lt;span style="color: navy;"&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;final&lt;/span&gt;&lt;/b&gt; AtomicInteger count = &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; AtomicInteger(&lt;span style="color: blue;"&gt;0&lt;/span&gt;);

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; InterleavedNumberTestingStrategy(&lt;b&gt;&lt;span style="color: navy;"&gt;int&lt;/span&gt;&lt;/b&gt; upto) {
    &lt;b&gt;&lt;span style="color: navy;"&gt;this&lt;/span&gt;&lt;/b&gt;.upto = upto;
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;boolean&lt;/span&gt;&lt;/b&gt; isDone() {
    &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt; count.get() &amp;gt;= upto;
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;void&lt;/span&gt;&lt;/b&gt; call() {
    &lt;b&gt;&lt;span style="color: navy;"&gt;int&lt;/span&gt;&lt;/b&gt; next = count.getAndIncrement();
    numbers.put(next, Thread.currentThread());
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; VerifyResult get() {
    &lt;b&gt;&lt;span style="color: navy;"&gt;if&lt;/span&gt;&lt;/b&gt; (numbers.size() &amp;lt; upto) {
      &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; VerifyResult(&lt;b&gt;&lt;span style="color: green;"&gt;"Only "&lt;/span&gt;&lt;/b&gt; + numbers.size() +
          &lt;b&gt;&lt;span style="color: green;"&gt;" numbers were entered"&lt;/span&gt;&lt;/b&gt;);
    }
    Object previous = &lt;b&gt;&lt;span style="color: navy;"&gt;null&lt;/span&gt;&lt;/b&gt;;
    &lt;b&gt;&lt;span style="color: navy;"&gt;int&lt;/span&gt;&lt;/b&gt; i = &lt;span style="color: blue;"&gt;0&lt;/span&gt;;
    &lt;b&gt;&lt;span style="color: navy;"&gt;for&lt;/span&gt;&lt;/b&gt; (Map.Entry&lt;integer, thread=""&gt; entry : numbers.entrySet()) {
      &lt;b&gt;&lt;span style="color: navy;"&gt;if&lt;/span&gt;&lt;/b&gt; (i != entry.getKey()) {
        &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; VerifyResult(&lt;b&gt;&lt;span style="color: green;"&gt;"numbers out of sequence"&lt;/span&gt;&lt;/b&gt;);
      }
      &lt;b&gt;&lt;span style="color: navy;"&gt;if&lt;/span&gt;&lt;/b&gt; (entry.getValue() == previous) {
        &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; VerifyResult(&lt;b&gt;&lt;span style="color: green;"&gt;"Did not alternate threads"&lt;/span&gt;&lt;/b&gt;);
      }
      previous = entry.getValue();
      i++;
    }
    Set&lt;thread&gt; values = &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; HashSet&lt;thread&gt;(numbers.values());
    &lt;b&gt;&lt;span style="color: navy;"&gt;if&lt;/span&gt;&lt;/b&gt; (values.size() != &lt;span style="color: blue;"&gt;2&lt;/span&gt;) {
      &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; VerifyResult(
          &lt;b&gt;&lt;span style="color: green;"&gt;"More than two threads were inserting values"&lt;/span&gt;&lt;/b&gt;);
    }
    &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; VerifyResult();
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;void&lt;/span&gt;&lt;/b&gt; reset() {
    numbers.clear();
    count.set(&lt;span style="color: blue;"&gt;0&lt;/span&gt;);
  }
}


&lt;b&gt;&lt;span style="color: navy;"&gt;package&lt;/span&gt;&lt;/b&gt; interlock.test;

&lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;class&lt;/span&gt;&lt;/b&gt; VerifyResult {
  &lt;b&gt;&lt;span style="color: navy;"&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;final&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;boolean&lt;/span&gt;&lt;/b&gt; success;
  &lt;b&gt;&lt;span style="color: navy;"&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;final&lt;/span&gt;&lt;/b&gt; String failReason;

  &lt;b&gt;&lt;span style="color: navy;"&gt;private&lt;/span&gt;&lt;/b&gt; VerifyResult(&lt;b&gt;&lt;span style="color: navy;"&gt;boolean&lt;/span&gt;&lt;/b&gt; success, String failReason) {
    &lt;b&gt;&lt;span style="color: navy;"&gt;this&lt;/span&gt;&lt;/b&gt;.success = success;
    &lt;b&gt;&lt;span style="color: navy;"&gt;this&lt;/span&gt;&lt;/b&gt;.failReason = failReason;
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; VerifyResult(String failReason) {
    &lt;b&gt;&lt;span style="color: navy;"&gt;this&lt;/span&gt;&lt;/b&gt;(&lt;b&gt;&lt;span style="color: navy;"&gt;false&lt;/span&gt;&lt;/b&gt;, failReason);
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; VerifyResult() {
    &lt;b&gt;&lt;span style="color: navy;"&gt;this&lt;/span&gt;&lt;/b&gt;(&lt;b&gt;&lt;span style="color: navy;"&gt;true&lt;/span&gt;&lt;/b&gt;, &lt;b&gt;&lt;span style="color: navy;"&gt;null&lt;/span&gt;&lt;/b&gt;);
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;boolean&lt;/span&gt;&lt;/b&gt; isSuccess() {
    &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt; success;
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; String getFailReason() {
    &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt; failReason;
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; String toString() {
    &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt; success ? &lt;b&gt;&lt;span style="color: green;"&gt;"Success"&lt;/span&gt;&lt;/b&gt; : &lt;b&gt;&lt;span style="color: green;"&gt;"Failure - "&lt;/span&gt;&lt;/b&gt; + failReason;
  }
}
  &lt;/thread&gt;&lt;/thread&gt;&lt;/integer,&gt;&lt;/integer,&gt;&lt;/integer,&gt;&lt;/verifyresult&gt;&lt;/pre&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Another task could print the threads, for example:&lt;/div&gt;&lt;pre style="font-family: 'Lucida Sans Typewriter', 'Bitstream Vera Sans Mono', 'Courier New';"&gt;// *snip*
  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;boolean&lt;/span&gt;&lt;/b&gt; isDone() {
    &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt; row.get() &amp;gt;= upto;
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;void&lt;/span&gt;&lt;/b&gt; call() {
    System.out.println(Thread.currentThread().getName());
    row.incrementAndGet();
  }
  &lt;/pre&gt;&lt;h4&gt;Interlocker Solutions&lt;/h4&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;The easiest solution is to use semaphores. We start with two semaphores. The first has 1 barrier, the second zero. From thread 1, we acquire semaphore 1, do the call(), then release semaphore 2. From thread 2, we acquire semaphore 2, do the call(), then release semaphore 1. The reason this works is that you can release a semaphore from a thread that has not acquired it. This is quite different to locks, where only the thread that acquired the lock can release it.&lt;/div&gt;&lt;pre style="font-family: 'Lucida Sans Typewriter', 'Bitstream Vera Sans Mono', 'Courier New';"&gt;&lt;b&gt;&lt;span style="color: navy;"&gt;package&lt;/span&gt;&lt;/b&gt; interlock.impl;


&lt;b&gt;&lt;span style="color: navy;"&gt;import&lt;/span&gt;&lt;/b&gt; interlock.*;

&lt;b&gt;&lt;span style="color: navy;"&gt;import&lt;/span&gt;&lt;/b&gt; java.util.concurrent.*;

&lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;class&lt;/span&gt;&lt;/b&gt; SemaphoreInterlocker &lt;b&gt;&lt;span style="color: navy;"&gt;extends&lt;/span&gt;&lt;/b&gt; Interlocker {
  &lt;b&gt;&lt;span style="color: navy;"&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;static&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;class&lt;/span&gt;&lt;/b&gt; Job &lt;b&gt;&lt;span style="color: navy;"&gt;implements&lt;/span&gt;&lt;/b&gt; Runnable {
    &lt;b&gt;&lt;span style="color: navy;"&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;final&lt;/span&gt;&lt;/b&gt; InterlockTask task;
    &lt;b&gt;&lt;span style="color: navy;"&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;final&lt;/span&gt;&lt;/b&gt; Semaphore first;
    &lt;b&gt;&lt;span style="color: navy;"&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;final&lt;/span&gt;&lt;/b&gt; Semaphore second;

    &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; Job(InterlockTask task,
               Semaphore first, Semaphore second) {
      &lt;b&gt;&lt;span style="color: navy;"&gt;this&lt;/span&gt;&lt;/b&gt;.task = task;
      &lt;b&gt;&lt;span style="color: navy;"&gt;this&lt;/span&gt;&lt;/b&gt;.first = first;
      &lt;b&gt;&lt;span style="color: navy;"&gt;this&lt;/span&gt;&lt;/b&gt;.second = second;
    }

    &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;void&lt;/span&gt;&lt;/b&gt; run() {
      &lt;b&gt;&lt;span style="color: navy;"&gt;while&lt;/span&gt;&lt;/b&gt; (!task.isDone()) {
        first.acquireUninterruptibly();
        &lt;b&gt;&lt;span style="color: navy;"&gt;if&lt;/span&gt;&lt;/b&gt; (task.isDone()) &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt;;
        task.call();
        second.release();
      }
    }
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;protected&lt;/span&gt;&lt;/b&gt; Runnable[] getRunnables(InterlockTask task) {
    Semaphore even = &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; Semaphore(&lt;span style="color: blue;"&gt;1&lt;/span&gt;);
    Semaphore odd = &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; Semaphore(&lt;span style="color: blue;"&gt;0&lt;/span&gt;);
    &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; Runnable[]{
        &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; Job(task, even, odd),
        &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; Job(task, odd, even)
    };
  }
}    
  &lt;/pre&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;When running this code, I noticed that it was rather slow. For example, to increment an int one million times took&amp;nbsp;&lt;span style="color: blue;"&gt;4&lt;/span&gt;&amp;nbsp;seconds on my machine, of which most was context switching:&lt;/div&gt;&lt;pre style="font-family: 'Lucida Sans Typewriter', 'Bitstream Vera Sans Mono', 'Courier New';"&gt;InterlockTask task = &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; EmptyInterlockTask(&lt;span style="color: blue;"&gt;1000&lt;/span&gt; * &lt;span style="color: blue;"&gt;1000&lt;/span&gt;);
Interlocker generator = &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; SemaphoreInterlocker();

&lt;b&gt;&lt;span style="color: navy;"&gt;long&lt;/span&gt;&lt;/b&gt; time = System.currentTimeMillis();
generator.execute(task);
time = System.currentTimeMillis() - time;
System.out.println(time);
  &lt;/pre&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;The other solutions that we developed, using wait-notify and Java 5 Condition, were similar in performance characteristic. We will leave those Interlockers as an exercise for the reader :-) If you want to attempt them, remember the effects that spurious wakeups can have on your Object.wait() and Condition.await().&lt;/div&gt;&lt;h4&gt;Lock Free Interlocker&lt;/h4&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I wanted to write a fast Interlocker implementation, ideally not locking at all and using a volatile field as a communication mechanism. Here is what I did:&lt;/div&gt;&lt;pre style="font-family: 'Lucida Sans Typewriter', 'Bitstream Vera Sans Mono', 'Courier New';"&gt;&lt;b&gt;&lt;span style="color: navy;"&gt;package&lt;/span&gt;&lt;/b&gt; interlock.impl;

&lt;b&gt;&lt;span style="color: navy;"&gt;import&lt;/span&gt;&lt;/b&gt; interlock.*;

&lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;class&lt;/span&gt;&lt;/b&gt; LockFreeInterlocker &lt;b&gt;&lt;span style="color: navy;"&gt;extends&lt;/span&gt;&lt;/b&gt; Interlocker {
  &lt;b&gt;&lt;span style="color: navy;"&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;volatile&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;boolean&lt;/span&gt;&lt;/b&gt; evenHasNextTurn = &lt;b&gt;&lt;span style="color: navy;"&gt;true&lt;/span&gt;&lt;/b&gt;;

  &lt;b&gt;&lt;span style="color: navy;"&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;class&lt;/span&gt;&lt;/b&gt; Job &lt;b&gt;&lt;span style="color: navy;"&gt;implements&lt;/span&gt;&lt;/b&gt; Runnable {
    &lt;b&gt;&lt;span style="color: navy;"&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;final&lt;/span&gt;&lt;/b&gt; InterlockTask task;
    &lt;b&gt;&lt;span style="color: navy;"&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;final&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;boolean&lt;/span&gt;&lt;/b&gt; even;

    &lt;b&gt;&lt;span style="color: navy;"&gt;private&lt;/span&gt;&lt;/b&gt; Job(InterlockTask task, &lt;b&gt;&lt;span style="color: navy;"&gt;boolean&lt;/span&gt;&lt;/b&gt; even) {
      &lt;b&gt;&lt;span style="color: navy;"&gt;this&lt;/span&gt;&lt;/b&gt;.task = task;
      &lt;b&gt;&lt;span style="color: navy;"&gt;this&lt;/span&gt;&lt;/b&gt;.even = even;
    }

    &lt;b&gt;&lt;span style="color: navy;"&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;void&lt;/span&gt;&lt;/b&gt; run() {
      &lt;b&gt;&lt;span style="color: navy;"&gt;while&lt;/span&gt;&lt;/b&gt; (!task.isDone()) {
        &lt;b&gt;&lt;span style="color: navy;"&gt;while&lt;/span&gt;&lt;/b&gt; (even ^ evenHasNextTurn);
        &lt;b&gt;&lt;span style="color: navy;"&gt;if&lt;/span&gt;&lt;/b&gt; (task.isDone()) {
          &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt;;
        }
        task.call();
        evenHasNextTurn = !even;
      }
    }
  }

  &lt;b&gt;&lt;span style="color: navy;"&gt;protected&lt;/span&gt;&lt;/b&gt; Runnable[] getRunnables(InterlockTask task) {
    &lt;b&gt;&lt;span style="color: navy;"&gt;return&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; Runnable[]{
        &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; Job(task, &lt;b&gt;&lt;span style="color: navy;"&gt;true&lt;/span&gt;&lt;/b&gt;), &lt;b&gt;&lt;span style="color: navy;"&gt;new&lt;/span&gt;&lt;/b&gt; Job(task, &lt;b&gt;&lt;span style="color: navy;"&gt;false&lt;/span&gt;&lt;/b&gt;)
    };
  }
}
  &lt;/pre&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;This approach to thread communication is faster when the call() method completes quickly. Since we are doing a&amp;nbsp;&lt;i&gt;busy wait&lt;/i&gt;, we will burn up CPU cycles in the waiting thread. For a long call() method, one of your CPUs would be running at 100% polling a field value. This is not a good idea unless you have lots of spare CPUs that you do not know what to do with. However, if you want to just do a very task inside call(), then this approah is substantially faster.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Where this might be handy is if you have a lot of thread communication that you need to speed up. Some financial applications might find this information useful.&lt;/div&gt;&lt;h4&gt;Caveat: Livelock (or "unbreakable hard spin")&lt;/h4&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;If we modify the LockFreeInterlocker slightly to use a boolean XOR instead of bitwise, then we can cause the JVM to hang up. I called this a livelock, for want of a better term. When I demonstrated this to Doug Lea, he named it an "unbreakable hard spin". Cliff Click also had a look at it and thinks it might be because the server hotspot compiler is not inserting a safepoint at the right place. This problem occurs in OpenJDK / Sun JDK server HotSpot compilers running on at least 2 physical cores and from JDK 1.6.0_14 onwards. Code available on request.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-5579318359911729767?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/J88s0V-mkr3P1uejau-GrZpAZsw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J88s0V-mkr3P1uejau-GrZpAZsw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/J88s0V-mkr3P1uejau-GrZpAZsw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J88s0V-mkr3P1uejau-GrZpAZsw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/K5liHYr3bSk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/5579318359911729767/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/10/javaspecialistseu-interlocker.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/5579318359911729767?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/5579318359911729767?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/K5liHYr3bSk/javaspecialistseu-interlocker.html" title="JavaSpecialists.EU - Interlocker - Interleaving Threads" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>0</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/10/javaspecialistseu-interlocker.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAMQHo-eyp7ImA9Wx5VGEU.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-2213074146414444516</id><published>2010-10-12T08:23:00.003+02:00</published><updated>2010-10-12T12:53:01.453+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-12T12:53:01.453+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IMAGE RESOURCE" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT 2.0" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="GUI" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><title>GWT 2.1 RC1 is now available</title><content type="html">&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px; margin-bottom: 0px; padding-bottom: 0px;"&gt;&lt;/div&gt;&lt;h2 class="date-header" style="color: #666666; font: normal normal normal 95%/normal Arial, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: right;"&gt;Posted by Chris Ramsdale - Monday, October 11, 2010 at 6:50:00 PM&lt;/h2&gt;&lt;br /&gt;
&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px; margin-bottom: 0px; padding-bottom: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px; margin-bottom: 0px; padding-bottom: 0px;"&gt;Building on the three previous milestones, we're happy to announce the first&amp;nbsp;&lt;a href="http://code.google.com/webtoolkit/download_2_1_rc1.html"&gt;release candidate (RC1)&lt;/a&gt;&amp;nbsp;of GWT 2.1. While we're still focused on the overall theme of making it easier to build&amp;nbsp;&lt;a href="http://code.google.com/cloudportability/"&gt;cloud portable&lt;/a&gt;&amp;nbsp;business apps via some help from our friends at&amp;nbsp;&lt;a href="http://www.vmware.com/"&gt;VMware&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.springsource.org/"&gt;Spring&lt;/a&gt;, there are more than a few aspects that make this milestone a RC.&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px; margin-bottom: 0px; padding-bottom: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px; margin-bottom: 0px; padding-bottom: 0px;"&gt;First we've rounded out the list of components and features that will ship with&amp;nbsp;&lt;a href="http://code.google.com/webtoolkit/doc/latest/ReleaseNotes.html"&gt;GWT 2.1&lt;/a&gt;. One of these components is a new Editor framework that allows you to bind your DTOs to a customizable UI which handles all of necessary grunt work of validating and syncing change sets. Another is the availability of the&lt;a href="http://code.google.com/webtoolkit/doc/latest/ReleaseNotes.html#SafeHtml"&gt;SafeHTML&lt;/a&gt;&amp;nbsp;component and its integration within the cell-based widgets. After all, we've optimized these new widgets by injecting HTML, we better do it in a secure manner.&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px; margin-bottom: 0px; padding-bottom: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px; margin-bottom: 0px; padding-bottom: 0px;"&gt;Along with the new components and features, we've solidified the&amp;nbsp;&lt;a href="http://code.google.com/webtoolkit/doc/latest/ReleaseNotes.html#MvpFramework"&gt;Activities/Places&lt;/a&gt;,&amp;nbsp;&lt;a href="http://code.google.com/webtoolkit/doc/latest/ReleaseNotes.html#RequestFactory"&gt;RequestFactory&lt;/a&gt;, Editor framework, and&amp;nbsp;&lt;a href="http://code.google.com/webtoolkit/doc/latest/ReleaseNotes.html#CellWidgets"&gt;Cell-based widget&lt;/a&gt;&amp;nbsp;APIs. So, if you're looking to start a project with GWT 2.1, you can feel confident that your team won't have to refactor code because we've switched out interfaces between now and the final release.&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px; margin-bottom: 0px; padding-bottom: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px; margin-bottom: 0px; padding-bottom: 0px;"&gt;Also, if you're looking to get started with GWT 2.1 we have an initial draft of the new Developer Guides. These can be found at the links below (the Editor framework Developer Guide is coming soon).&lt;/div&gt;&lt;ul style="color: #333333; font-family: Arial, sans-serif; font-size: 13px;"&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/doc/trunk/DevGuideMvpActivitiesAndPlaces.html"&gt;Activities/Places&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/doc/trunk/DevGuideRequestFactory.html"&gt;RequestFactory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/doc/trunk/DevGuideUiCellWidgets.html"&gt;Cell-based widgets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px; margin-bottom: 0px; padding-bottom: 0px;"&gt;&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px; margin-bottom: 0px; padding-bottom: 0px;"&gt;As with previous milestones, there will be an associated Spring Roo RC1 and SpringSource Tool Suite RC1, that will be available in the next few days. Keep your eye on the&amp;nbsp;&lt;a href="http://blog.springsource.com/"&gt;SpringSource blog&lt;/a&gt;, as Christian and Ben are active contributors.&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px; margin-bottom: 0px; padding-bottom: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; padding-bottom: 0px;"&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px;"&gt;GWT 2.1 RC is available on our Google Code&amp;nbsp;&lt;a href="http://google-web-toolkit.googlecode.com/files/gwt-2.1.0.rc1.zip"&gt;download site&lt;/a&gt;&amp;nbsp;and as version 2.1-SNAPSHOT in the&amp;nbsp;&lt;a href="https://oss.sonatype.org/content/repositories/google-snapshots/"&gt;Google Maven Snapshot Repository&lt;/a&gt;. We’d love to hear your feedback and thoughts on this release, and our&amp;nbsp;&lt;a href="http://groups.google.com/group/Google-Web-Toolkit"&gt;GWT Developer Forum&lt;/a&gt;&amp;nbsp;would be the best place to post this information.&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif;"&gt;&lt;b&gt;&lt;u&gt;New features:&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Helvetica, Arial, sans-serif; font-size: 17px; font-weight: bold;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;b&gt;&lt;i&gt;Data Presentation Widgets&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div style="color: #333333; font-family: Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Helvetica, Arial, sans-serif;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;&lt;a href="http://code.google.com/webtoolkit/doc/trunk/DevGuideUiCellWidgets.html" style="color: #0000cc;"&gt;Data Presentation Widgets&lt;/a&gt;&amp;nbsp;(Cell Widgets) allow developers to to create highly efficient views on top of large data sets. These widgets have two unique design strengths. One, they're able to render subsets of a dataset in the same way they would if they had fetched the entire dataset. For your end-users this means the initial load of a view is fast, even if that view is tied to millions of records on the backend. Secondly, cell widgets use a 'flyweight' design. Rather than being a container of other widgets, which can tend to be heavy, they build up chunks of HTML that is injected into the DOM. This not only speeds up initialization, but also reduces the event handling overhead that can slow down user experience when there are hundreds of widgets in a view.&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="border-color: initial; border-width: initial;"&gt;&lt;img 191;="" 503;="" height:="" left;="" src="http://code.google.com/webtoolkit/images/data_presentation_widgets.png" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width:="" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;b&gt;&lt;i&gt;&lt;div style="margin-bottom: 0px; padding-bottom: 0px;"&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;MVP Framework (Activities and Places)&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;The&amp;nbsp;&lt;a href="http://code.google.com/webtoolkit/doc/trunk/DevGuideMvpActivitiesAndPlaces.html" style="color: #0000cc;"&gt;MVP framework&lt;/a&gt;&amp;nbsp;is an application framework that supports development of large scale GWT applications with the Model - View - Presenter pattern. The MVP framework provides a client-side EventBus, manages Activities, and synchronizes Places with browser history.&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;To make developing apps of this style easier,&amp;nbsp;&lt;a href="http://www.springsource.org/roo" style="color: #0000cc;"&gt;Spring Roo&lt;/a&gt;, though not required, can generate and maintain the boilerplate code associated with connecting your app's components with GWT's MVP Framework.&lt;/div&gt;&lt;b&gt;&lt;i&gt;&lt;div style="margin-bottom: 0px; padding-bottom: 0px;"&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;RequestFactory&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;&lt;a href="http://code.google.com/webtoolkit/doc/trunk/DevGuideRequestFactory.html" style="color: #0000cc;"&gt;RequestFactory&lt;/a&gt;&amp;nbsp;is an alternative to GWT-RPC for creating data-oriented services. RequestFactory and its related interfaces (RequestContext and EntityProxy) make it easy to build data-oriented (CRUD) apps with an ORM-like interface on the client. It is designed to be used with an ORM layer like JDO or JPA on the server, although this is not required.&lt;/div&gt;&lt;b&gt;&lt;i&gt;&lt;div style="margin-bottom: 0px; padding-bottom: 0px;"&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;Server-side Speed Traces&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;We've mentioned before that Speed Tracer is a tool that helps you identify and fix performance problems in web applications. Until now the problems it can help you fix have be limited to client-side code.&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;With Speed Tracer, you can now view sever-side timing data for apps running on Google App Engine and SpringSource's TC Server Developer Edition. With this integration, you'll be able to view metrics for database calls, memcache hits, resources fetches, as well as other server-side service calls. The new metrics views are integrated into the existing Speed Tracer UI, all you need to do is navigate to the Network (resources) and you'll start see your server-side traces.&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="border-color: initial; border-width: initial;"&gt;&lt;img 411;="" 510;="" height:="" left;="" src="http://code.google.com/webtoolkit/images/st_server_trace.png" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width:="" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;b&gt;&lt;i&gt;&lt;div style="margin-bottom: 0px; padding-bottom: 0px;"&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;Logging&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;&lt;a href="http://code.google.com/webtoolkit/doc/trunk/DevGuideLogging.html" style="color: #0000cc;"&gt;Logging of client-side code&lt;/a&gt;&amp;nbsp;in GWT applications is new. Logging helps you understand how the application executes and make it easier to troubleshoot issues encountered by developers and users. In GWT, you can log client-side code directly to handlers on the client side, or you can use remote logging to log client-side code to handlers on the server side.&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;The logging framework emulates java.util.logging, so it uses the same syntax and has the same behavior as server side logging code. This allows you to share logging code between the client and server side code.&lt;/div&gt;&lt;b&gt;&lt;i&gt;&lt;div style="margin-bottom: 0px; padding-bottom: 0px;"&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;Safe HTML&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;&lt;a href="http://code.google.com/webtoolkit/doc/trunk/DevGuideSecuritySafeHtml.html" style="color: #0000cc;"&gt;SafeHtml&lt;/a&gt;&amp;nbsp;provides a library that, when used with the coding guidelines, supports the development of GWT applications that are free from a large class of XSS vulnerabilities. It provides this benefit while minimizing overhead in runtime and development effort. This class of potential XSS vulnerabilities in GWT apps arises from the use of methods that cause the browser to evaluate their argument as HTML, for example, setInnerHTML and setHTML, as well as the constructors of HTML-containing widgets such as HTML.&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="color: #333333; font-family: Arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-2213074146414444516?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uHqrsTN7c5kHAjTY_Ab_ailVhL4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uHqrsTN7c5kHAjTY_Ab_ailVhL4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uHqrsTN7c5kHAjTY_Ab_ailVhL4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uHqrsTN7c5kHAjTY_Ab_ailVhL4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/Lkyit9O-Tc0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/2213074146414444516/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/10/gwt-21-rc1-is-now-available.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/2213074146414444516?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/2213074146414444516?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/Lkyit9O-Tc0/gwt-21-rc1-is-now-available.html" title="GWT 2.1 RC1 is now available" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>0</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/10/gwt-21-rc1-is-now-available.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UDQnw5fip7ImA9Wx5VGEU.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-258148239419576836</id><published>2010-10-10T19:59:00.005+02:00</published><updated>2010-10-12T13:01:13.226+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-12T13:01:13.226+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GWT-Ext" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="GXT" /><category scheme="http://www.blogger.com/atom/ns#" term="Elipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT 2.0" /><category scheme="http://www.blogger.com/atom/ns#" term="Testing" /><category scheme="http://www.blogger.com/atom/ns#" term="Debug" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="ExtJS" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT Ext" /><category scheme="http://www.blogger.com/atom/ns#" term="Browser" /><category scheme="http://www.blogger.com/atom/ns#" term="GUI" /><title>Cool development tools from Google</title><content type="html">&lt;b&gt;&lt;u&gt;The classic GWT tools:&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;table class="download" id="sdk" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-bottom-style: none; border-collapse: collapse; border-color: initial; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; clear: right; font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 1em; margin-left: 1px; margin-right: 0px; margin-top: 1em;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: none; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(187, 187, 187); border-left-style: none; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: none; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: none; border-top-width: 1px; border-width: initial; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: middle;"&gt;&lt;img src="http://code.google.com/webtoolkit/images/sdk-sm.png" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; float: left; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/td&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: none; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(187, 187, 187); border-left-style: none; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: none; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: none; border-top-width: 1px; border-width: initial; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: middle;"&gt;&lt;h3 style="font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.7em; position: relative; top: 0.4em;"&gt;&lt;a href="http://google-web-toolkit.googlecode.com/files/gwt-2.0.4.zip"&gt;SDK&lt;/a&gt;&lt;/h3&gt;&lt;br /&gt;
The Google Web Toolkit SDK contains the core libraries and compiler that you need to write web applications. See the&amp;nbsp;&lt;a href="http://code.google.com/webtoolkit/release-notes.html#Release_Notes_2_0_4" style="color: #0000cc;"&gt;Release Notes for this latest version&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;table class="download" id="speedtracer" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-bottom-style: none; border-collapse: collapse; border-color: initial; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; clear: right; font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 1em; margin-left: 1px; margin-right: 0px; margin-top: 1em;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: none; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(187, 187, 187); border-left-style: none; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: none; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: none; border-top-width: 1px; border-width: initial; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: middle;"&gt;&lt;img src="http://code.google.com/webtoolkit/images/speedtracer-large.png" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; float: left; height: 80px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 80px;" /&gt;&lt;/td&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: none; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(187, 187, 187); border-left-style: none; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: none; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: none; border-top-width: 1px; border-width: initial; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: middle;"&gt;&lt;h3 style="font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.7em; position: relative; top: 0.4em;"&gt;&lt;a href="http://code.google.com/webtoolkit/speedtracer/get-started.html#downloading"&gt;Speed Tracer&lt;/a&gt;&lt;/h3&gt;&lt;br /&gt;
Speed Tracer is a Chrome Extension that allows you to pinpoint performance problems in your &lt;br /&gt;
web applications.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;table class="download" it="gpe" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-bottom-style: none; border-collapse: collapse; border-color: initial; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; clear: right; font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 1em; margin-left: 1px; margin-right: 0px; margin-top: 1em;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: none; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(187, 187, 187); border-left-style: none; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: none; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: none; border-top-width: 1px; border-width: initial; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: middle;"&gt;&lt;img src="http://code.google.com/eclipse/images/google-plugin.png" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; float: left; height: 80px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 80px;" /&gt;&lt;/td&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: none; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(187, 187, 187); border-left-style: none; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: none; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: none; border-top-width: 1px; border-width: initial; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: middle;"&gt;&lt;h3 style="font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.7em; position: relative; top: 0.4em;"&gt;&lt;a href="http://code.google.com/eclipse/docs/download.html"&gt;Plugin for Eclipse&lt;/a&gt;&lt;/h3&gt;&lt;br /&gt;
The Google Plugin for Eclipse provides IDE support for Google Web Toolkit and App Engine web projects.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;New tools:&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table class="download" id="gwtdesigner" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-bottom-style: none; border-collapse: collapse; border-color: initial; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; clear: right; font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 1em; margin-left: 1px; margin-right: 0px; margin-top: 1em;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: none; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(187, 187, 187); border-left-style: none; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: none; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: none; border-top-width: 1px; border-width: initial; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: middle;"&gt;&lt;img src="http://code.google.com/webtoolkit/images/gwtdesigner.png" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; float: left; height: 80px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 80px;" /&gt;&lt;/td&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: none; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(187, 187, 187); border-left-style: none; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: none; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: none; border-top-width: 1px; border-width: initial; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: middle;"&gt;&lt;h3 style="font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.7em; position: relative; top: 0.4em;"&gt;&lt;a href="http://code.google.com/webtoolkit/tools/download-gwtdesigner.html"&gt;GWT Designer&lt;/a&gt;&lt;/h3&gt;&lt;br /&gt;
Create rich web applications with GWT Designer, a powerful set of Eclipse-based development tools that enables Java developers to quickly create Ajax web applications using the Google Web Toolkit (GWT). -- ex-Instantiations&amp;nbsp;--&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;table class="download" idi="wintester" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-bottom-style: none; border-collapse: collapse; border-color: initial; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; clear: right; font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 1em; margin-left: 1px; margin-right: 0px; margin-top: 1em;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: none; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(187, 187, 187); border-left-style: none; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: none; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: none; border-top-width: 1px; border-width: initial; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: middle;"&gt;&lt;img src="http://code.google.com/webtoolkit/images/wintester.png" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; float: left; height: 80px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 80px;" /&gt;&lt;/td&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: none; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(187, 187, 187); border-left-style: none; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: none; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: none; border-top-width: 1px; border-width: initial; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: middle;"&gt;&lt;h3 style="font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.7em; position: relative; top: 0.4em;"&gt;&lt;a href="http://code.google.com/webtoolkit/tools/download-wintester.html"&gt;WindowTester Pro&lt;/a&gt;&lt;/h3&gt;&lt;br /&gt;
Streamline testing of Java rich client applications with WindowTester Pro, including tools for automated recording, test generation, code coverage and playback of GUI interactions that can occur within an application. WindowTester Pro includes support for SWT and Swing.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;table class="download" id="codepro" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-bottom-style: none; border-collapse: collapse; border-color: initial; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; clear: right; font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 1em; margin-left: 1px; margin-right: 0px; margin-top: 1em;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: none; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(187, 187, 187); border-left-style: none; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: none; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: none; border-top-width: 1px; border-width: initial; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: middle;"&gt;&lt;img src="http://code.google.com/webtoolkit/images/codepro.png" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; float: left; height: 70px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 70px;" /&gt;&lt;/td&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: none; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(187, 187, 187); border-left-style: none; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: none; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: none; border-top-width: 1px; border-width: initial; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: middle;"&gt;&lt;h3 style="font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.7em; position: relative; top: 0.4em;"&gt;&lt;a href="http://code.google.com/webtoolkit/tools/download-codepro.html"&gt;CodePro AnalytiX&lt;/a&gt;&lt;/h3&gt;&lt;br /&gt;
Employ the comprehensive automated software code quality and security analysis toolkit CodePro AnalytiX to automatically improve software quality, reliability, and maintainability in developer applications.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: 18px; font-weight: bold;"&gt;Cloud portability from Google and VMware&lt;/span&gt;&lt;br /&gt;
&lt;h3 style="margin-bottom: 0px;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Develop and deploy rich web apps for your enterprise, across multiple environments and devices.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div style="font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;Google and VMware have enhanced our open source Java development tools, allowing enterprise developers to rapidly build rich web apps, run them on multiple devices, and deploy them on-premise or in the cloud of your choice. Familiar tools turn Java developers into cloud developers, and standard APIs avoid cloud lock-in.&lt;/div&gt;&lt;ul id="cloudList" style="font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; list-style-type: none; margin-bottom: 0px; margin-left: 15px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li id="SpringRoo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: url(http://code.google.com/cloudportability/images/spring-roo.png); background-origin: initial; background-position: 0% 50%; background-repeat: no-repeat no-repeat; margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 110px; padding-right: 0px; padding-top: 0px;"&gt;&lt;h4 style="font-size: 14px; margin-bottom: 0px; margin-top: 1em;"&gt;&lt;a href="http://www.springsource.org/roo"&gt;Spring Roo&lt;/a&gt;&lt;/h4&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.6em; padding-left: 0px; padding-right: 0px; padding-top: 0.5em;"&gt;With Spring Roo, a next-generation rapid application development tool, Java developers can easily build full Java applications in minutes, using the Java Persistence API (JPA) to connect them to new or existing databases. Roo outputs standard Java code, so it’s easy to refine the back end with the SpringSource Tool Suite and the front end with the Google Web Toolkit SDK, using Roo as much or as little as desired.&lt;/div&gt;&lt;/li&gt;
&lt;li id="GWTSDK" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: transparent; background-origin: initial; background-position: 20px 50%; background-repeat: no-repeat no-repeat; margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 110px; padding-right: 0px; padding-top: 0px;"&gt;&lt;h4 style="font-size: 14px; margin-bottom: 0px; margin-top: 1em;"&gt;&lt;a href="http://www.springsource.com/developer/sts"&gt;SpringSource Tool Suite&lt;/a&gt;&lt;/h4&gt;&lt;/li&gt;
&lt;li id="SpringSourceSuite" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: url(http://code.google.com/cloudportability/images/spring-source.png); background-origin: initial; background-position: 0% 50%; background-repeat: no-repeat no-repeat; margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 110px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.6em; padding-left: 0px; padding-right: 0px; padding-top: 0.5em;"&gt;Using the Eclipse-based SpringSource Tool Suite, developers can now choose to deploy their application on&amp;nbsp;&lt;a href="http://code.google.com/appengine/business/" style="color: #0000cc;"&gt;Google App Engine for Business&lt;/a&gt;, a VMware environment (your vSphere infrastructure, your choice of vCloud partners, or VMforce), or other infrastructure such as Amazon EC2. We call this cloud portability.&lt;/div&gt;&lt;/li&gt;
&lt;li id="GWTSpeed" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 20px 50%; background-repeat: no-repeat no-repeat; margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 110px; padding-right: 0px; padding-top: 0px;"&gt;&lt;h4 style="font-size: 14px; margin-bottom: 0px; margin-top: 1em;"&gt;&lt;a href="http://code.google.com/webtoolkit/business.html"&gt;Google App Engine for Business&lt;/a&gt;&lt;/h4&gt;&lt;/li&gt;
&lt;li id="AppEngineBusiness" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: url(http://code.google.com/cloudportability/images/app-engine.png); background-origin: initial; background-position: 20px 50%; background-repeat: no-repeat no-repeat; margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 110px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.6em; padding-left: 0px; padding-right: 0px; padding-top: 0.5em;"&gt;&lt;a href="http://code.google.com/appengine/business/" style="color: #0000cc;"&gt;Google App Engine for Business&lt;/a&gt;&amp;nbsp;enables organizations to build and host web apps on the same systems that power Google applications and includes new enterprise-level features, a 99.9% uptime SLA, support and flat-rate pricing. Google App Engine for Business is a first-class choice for deploying enterprise apps to the cloud as part of a cloud portability strategy, whether for seasonal apps, bursty apps, disaster recovery, or simply for friction-free deployment of new apps.&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
I don't know about you regarding the GWT Designer, but I tried it some time ago, and it worked very well with the standard GWT widgets, supported&amp;nbsp;pretty&amp;nbsp;well the&amp;nbsp;widgets&amp;nbsp;from GWT-Ext library, with small bugs, which were fixed along ... and now we can use the ones from GXT (ext-ExtJs or Scencha nowadays). It's a good&amp;nbsp;prototype-maker&amp;nbsp;though.&lt;br /&gt;
&lt;br /&gt;
The tester tool seems a good alternative to FireFox plugin called Selenium (&lt;a href="http://seleniumhq.org/"&gt;http://seleniumhq.org/&lt;/a&gt;) &amp;nbsp;-- need to have a careful look at it.&lt;br /&gt;
&lt;br /&gt;
What's more interesting is the CodePro tool, which helps you to clean up your code of potential bugs or bad coding&amp;nbsp;habits. It's very very good tool.&lt;br /&gt;
&lt;br /&gt;
So, we need to used them daily to improve the result of our work -- the software application.&lt;br /&gt;
&lt;br /&gt;
Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-258148239419576836?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1mZ-VMGcPuWwpi0Auw_-eddCovw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1mZ-VMGcPuWwpi0Auw_-eddCovw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1mZ-VMGcPuWwpi0Auw_-eddCovw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1mZ-VMGcPuWwpi0Auw_-eddCovw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/wm-yOuaox5Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/258148239419576836/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/10/cool-development-tools-from-google.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/258148239419576836?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/258148239419576836?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/wm-yOuaox5Q/cool-development-tools-from-google.html" title="Cool development tools from Google" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>0</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/10/cool-development-tools-from-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIEQ3Y7fSp7ImA9Wx5UF0s.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-4426017975756289412</id><published>2010-10-09T04:06:00.001+02:00</published><updated>2010-10-22T19:28:22.805+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-22T19:28:22.805+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="movies" /><category scheme="http://www.blogger.com/atom/ns#" term="Collector" /><category scheme="http://www.blogger.com/atom/ns#" term="Gathers" /><category scheme="http://www.blogger.com/atom/ns#" term="Browser" /><title>Cool Movie Browser</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://cool-movie-browser.blogspot.com/"&gt;Cool Movie Browser&lt;/a&gt; is discovering and gathering all your video files, which are distributed on different computers and hard-drives, into a single place. After that, you can play them in your favorite (you choose) media player application (VLC Player, Windows Media Player, QuickTime Player etc.)&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;table style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href="http://4.bp.blogspot.com/_gZXNW3qKT34/TKuhbOJOvoI/AAAAAAAAAZk/u50G9j-ifeM/s1600/cool-video-browser.PNG" style="text-decoration: none;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;img border="2" height="163" src="http://4.bp.blogspot.com/_gZXNW3qKT34/TKuhbOJOvoI/AAAAAAAAAZk/u50G9j-ifeM/s1600/cool-video-browser.PNG" style="-webkit-box-shadow: rgba(0, 0, 0, 0.199219) 0px 0px 0px; background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: orange; border-bottom-left-radius: 0px 0px; border-bottom-right-radius: 0px 0px; border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-left-color: orange; border-left-style: solid; border-left-width: 1px; border-right-color: orange; border-right-style: solid; border-right-width: 1px; border-top-color: orange; border-top-left-radius: 0px 0px; border-top-right-radius: 0px 0px; border-top-style: solid; border-top-width: 1px; border-width: initial; padding-bottom: 8px; padding-left: 8px; padding-right: 8px; padding-top: 8px; position: relative;" width="130" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://3.bp.blogspot.com/_gZXNW3qKT34/TJ9757AVsnI/AAAAAAAAAX4/NIHkXUrJcsM/s1600/cool-movie-browser-settings.png" style="text-decoration: none;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;img border="2" height="163" src="http://3.bp.blogspot.com/_gZXNW3qKT34/TJ9757AVsnI/AAAAAAAAAX4/NIHkXUrJcsM/s200/cool-movie-browser-settings.png" style="-webkit-box-shadow: rgba(0, 0, 0, 0.199219) 0px 0px 0px; background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: orange; border-bottom-left-radius: 0px 0px; border-bottom-right-radius: 0px 0px; border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-left-color: orange; border-left-style: solid; border-left-width: 1px; border-right-color: orange; border-right-style: solid; border-right-width: 1px; border-top-color: orange; border-top-left-radius: 0px 0px; border-top-right-radius: 0px 0px; border-top-style: solid; border-top-width: 1px; border-width: initial; padding-bottom: 8px; padding-left: 8px; padding-right: 8px; padding-top: 8px; position: relative;" width="130" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://4.bp.blogspot.com/_gZXNW3qKT34/TJ98NYGGHoI/AAAAAAAAAX8/zrPYPQir6IE/s1600/cool-movie-browser-playlists.PNG" style="text-decoration: none;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;img border="2" height="163" src="http://4.bp.blogspot.com/_gZXNW3qKT34/TJ98NYGGHoI/AAAAAAAAAX8/zrPYPQir6IE/s200/cool-movie-browser-playlists.PNG" style="-webkit-box-shadow: rgba(0, 0, 0, 0.199219) 0px 0px 0px; background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: orange; border-bottom-left-radius: 0px 0px; border-bottom-right-radius: 0px 0px; border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-left-color: orange; border-left-style: solid; border-left-width: 1px; border-right-color: orange; border-right-style: solid; border-right-width: 1px; border-top-color: orange; border-top-left-radius: 0px 0px; border-top-right-radius: 0px 0px; border-top-style: solid; border-top-width: 1px; border-width: initial; padding-bottom: 8px; padding-left: 8px; padding-right: 8px; padding-top: 8px; position: relative;" width="130" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://3.bp.blogspot.com/_gZXNW3qKT34/TKuhj_5msDI/AAAAAAAAAZs/mHrVj638v18/s1600/cool-video-browser-online-sports.PNG" style="text-decoration: none;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;img border="2" height="163" src="http://3.bp.blogspot.com/_gZXNW3qKT34/TKuhj_5msDI/AAAAAAAAAZs/mHrVj638v18/s1600/cool-video-browser-online-sports.PNG" style="-webkit-box-shadow: rgba(0, 0, 0, 0.199219) 0px 0px 0px; background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: orange; border-bottom-left-radius: 0px 0px; border-bottom-right-radius: 0px 0px; border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-left-color: orange; border-left-style: solid; border-left-width: 1px; border-right-color: orange; border-right-style: solid; border-right-width: 1px; border-top-color: orange; border-top-left-radius: 0px 0px; border-top-right-radius: 0px 0px; border-top-style: solid; border-top-width: 1px; border-width: initial; padding-bottom: 8px; padding-left: 8px; padding-right: 8px; padding-top: 8px; position: relative;" width="130" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;The last version 1.2.101005 has added the online sport TV panel, which gives you all the live streams from net with the games of the day.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;As said, it allows you to play each movie with its own media player (i.e. you can set .avi files to be played with VLC Player, and all .mpg movies with Windows Media Player).&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;For each discovered movie it will bring the poster image from the "cloud" (Internet), so you don't have to worry about identifying quickly your preferred TV show.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;Also, you can create and manage (create, edit, delete, reorder, play) your own playlists.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;u&gt;Buzz&lt;/u&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;: This application can centralize different kind of files, not only movies. Because it's flexible and configurable, we can choose the extension of the file, which we need to see (.doc), and instead of setting the command line for WMPlayer, we can put the one for Office Word. Doing this you can easily manage all Word documents from your different hard-drives, in one single place. Indeed it's cool!&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;u&gt;See more:&lt;/u&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;a href="http://cool-movie-browser.blogspot.com/2010/09/installation-of-cool-movie-browser.html" style="text-decoration: none;"&gt;Installation&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://cool-movie-browser.blogspot.com/2010/09/cool-movie-browser-settings.html" style="text-decoration: none;"&gt;Settings - part 1&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://cool-movie-browser.blogspot.com/2010/09/cool-movie-browser-settings-part-2.html" style="text-decoration: none;"&gt;Settings - part 2&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://cool-movie-browser.blogspot.com/2010/09/cool-movie-player-playlists.html" style="text-decoration: none;"&gt;Playlists - part 1&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://cool-movie-browser.blogspot.com/2010/09/cool-movie-player-playlists-part-2.html" style="text-decoration: none;"&gt;Playlist2 - part 2&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://cool-movie-browser.blogspot.com/p/store.html" style="text-decoration: none;"&gt;Download&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-4426017975756289412?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x1coEKWVgafnP0V6mYeDpaoCm5E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x1coEKWVgafnP0V6mYeDpaoCm5E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x1coEKWVgafnP0V6mYeDpaoCm5E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x1coEKWVgafnP0V6mYeDpaoCm5E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/TZzXjOZEQXU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/4426017975756289412/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/10/cool-movie-browser.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/4426017975756289412?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/4426017975756289412?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/TZzXjOZEQXU/cool-movie-browser.html" title="Cool Movie Browser" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_gZXNW3qKT34/TKuhbOJOvoI/AAAAAAAAAZk/u50G9j-ifeM/s72-c/cool-video-browser.PNG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/10/cool-movie-browser.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMFR3w7eCp7ImA9Wx5XFko.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-1959511836506386331</id><published>2010-09-17T00:31:00.001+02:00</published><updated>2010-09-17T00:33:36.200+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-17T00:33:36.200+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Review" /><category scheme="http://www.blogger.com/atom/ns#" term="GUI" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><title>What is the difference between User Interface and User Experience design?</title><content type="html">I've found an interesting exchange of ideas about &amp;nbsp;GUI on&amp;nbsp;&lt;a href="http://www.linkedin.com/"&gt;http://www.linkedin.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;a class="commenter" href="http://www.linkedin.com/groups?viewMemberFeed=&amp;amp;gid=142890&amp;amp;memberID=2103312" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006699; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="See this member's activity"&gt;Kedron Rhodes&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;•&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;There is an unfortunate trend to use the two titles interchangeably, but I assure you, they are not the same.&amp;nbsp;A UX professional is the storyteller, where as the UI professional would be the editor. They often work hand-in-hand, but they see the project from entirely different perspectives.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;a class="commenter" href="http://www.linkedin.com/groups?viewMemberFeed=&amp;amp;gid=142890&amp;amp;memberID=64502579" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006699; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="See this member's activity"&gt;Karl D'Souza&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&amp;nbsp;•&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Even though they are two seperate skillsets, in todays world of UI design, all UI designers need to start integrating UX into their design. They aren't interchangeable but they definitely need to start getting integrated.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;a class="commenter" href="http://www.linkedin.com/groups?viewMemberFeed=&amp;amp;gid=142890&amp;amp;memberID=5378997" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006699; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="See this member's activity"&gt;Jamie Lemon&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&amp;nbsp;•&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;If the UI designer doesn't have an appreciation of UX then they are going to be less able to implement the "correct" design. I've seen UX fail because the UI people weren't in the loop. I believe one person with both UX and UI ability is more valuable than 2 separate people with those skill sets.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;a class="commenter" href="http://www.linkedin.com/groups?viewMemberFeed=&amp;amp;gid=142890&amp;amp;memberID=594042" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006699; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="See this member's activity"&gt;Gavin Lew&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&amp;nbsp;•&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;The provided references do a good job of making the distinction betweeen UX and UI, but I believe that the user experience of a product goes beyond the interaction and really impacts all the touch points for service or product delivery.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;a class="commenter" href="http://www.linkedin.com/groups?viewMemberFeed=&amp;amp;gid=142890&amp;amp;memberID=7504074" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006699; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="See this member's activity"&gt;Geof Harries&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&amp;nbsp;•&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;I think only on big teams do most people have the luxury of two distinct roles. As others have mentioned, we're starting to get to the point, if we're not there already, where UI designers need to have serious UX skills to be proficient and effective. In my mind, there's no seperation of the skillsets if you consider yourself a well-rounded professional.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;a class="commenter" href="http://www.linkedin.com/groups?viewMemberFeed=&amp;amp;gid=142890&amp;amp;memberID=561663" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006699; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="See this member's activity"&gt;Christen Williams&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&amp;nbsp;•&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;User Interface (UI) design is the act of laying out the information architecture of an application or website including, but not limited to, the layout of the information on each screen. You can design a UI solely based on business needs or can design a UI with the users as the focus - User Centered [UI] Design or UCD.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;br /&gt;
User Experience (UEX) design is the act of designing a UI always with a focus on the user and ease of use concepts and best practices to ensure the overall "experience" of using the application or website is a good one.&lt;br /&gt;
&lt;br /&gt;
That said, UEX professionals almost always will design the UI, but add the value of a UCD focus. UCD or UEX helps save time and money by consulting with the users during design phases which ultimately avoids costs associated with redesign due to designs that don't take the user into consideration as much.&lt;br /&gt;
&lt;br /&gt;
In summary, if you're looking to hire someone with either skillset, your best bet is to find a UI Designer with a UEX or UCD background.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;a class="commenter" href="http://www.linkedin.com/groups?viewMemberFeed=&amp;amp;gid=142890&amp;amp;memberID=9299509" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006699; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="See this member's activity"&gt;Sean Pook&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&amp;nbsp;•&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Christen has answered the question superbly. The UI is a part of the overall user experience and good User Experience should always be user-centred.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;br /&gt;
Job titles can be confusing and I often see UX Designer and UI Designer meaning the same thing. They shouldn't though.&lt;br /&gt;
&lt;br /&gt;
If you have a role in mind but are not sure of the job title, let me know. I'm a specialist UX recruiter and am happy to advise (no strings attached) :-)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;a class="commenter" href="http://www.linkedin.com/groups?viewMemberFeed=&amp;amp;gid=142890&amp;amp;memberID=12710957" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006699; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="See this member's activity"&gt;Adrian Mendoza&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&amp;nbsp;•&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;As a UX professional I tell clients that the Big distinction is that UX designers must respond to ROI. ROI and business rules must always be in the mind of a good user experience. Sometimes a good UI design might not be the right solution for business rules.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;a class="commenter" href="http://www.linkedin.com/groups?viewMemberFeed=&amp;amp;gid=142890&amp;amp;memberID=9299509" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006699; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="See this member's activity"&gt;Sean Pook&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&amp;nbsp;•&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;UI can be wholly independant of UX design (but shouldn't be) and UX Design can certainly be wholly indpendant from UI Design (because if we're talking a digital UI, the Product / service, may not even have one).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;br /&gt;
However, how often do we see the term UX when it's not associated with a digital user interface?&lt;br /&gt;
&lt;br /&gt;
User centred design can also be independant of business needs and focus exclusivly on the users. But logically a user base is also a customer base and this comes back to business ROI. So they are definitely interlinked.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;a class="commenter" href="http://www.linkedin.com/groups?viewMemberFeed=&amp;amp;gid=142890&amp;amp;memberID=8842911" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006699; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="See this member's activity"&gt;Simon Rohrbach&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&amp;nbsp;•&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;I usually refer to User Experience Design as the science of looking at and designing the touchpoints a (potential) customers interacts with over time. These can include both digital touchpoints (website, mobile apps, etc) but also offline entities such as high street shops, customer service, etc.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;br /&gt;
User Interface Design to me is much more about designing a digital interface, e.g. the web service, the app, etc.&lt;br /&gt;
&lt;br /&gt;
A good UI can only influence the overall UEX to a certain extent - if, say, Brand XYZ's web app provides an excellent UI, the high street shop can still be crowded and noisy, so that the customer will walk away with a "negative" user experience and a negative impression of Brand XYZ.&lt;br /&gt;
&lt;br /&gt;
A smart company will always try to look at the overall user experience and try to map out strategies and guidelines for each of the touchpoints - both online and offline - to provide an excellent, consistent experience in their respective field.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;a class="commenter" href="http://www.linkedin.com/groups?viewMemberFeed=&amp;amp;gid=142890&amp;amp;memberID=13346675" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006699; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="See this member's activity"&gt;Bipin Daftardar&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&amp;nbsp;•&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;UI and UXD should be working together. Many a times UI designers / developers 'assume' about the user and not consider the end-users, as in the case of UXDesigner, the basic need is to understand the business objectives and study user behavior, expectations and tasks and then move ahead with strategic interaction design. Technical aspect of prototyping may be lacking in UXDesigners, which is also important.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="text" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="comment-body" data-li-comment-text="" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;References:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;a href="http://www.linkedin.com/redirect?url=http%3A%2F%2Fen%2Ewikipedia%2Eorg%2Fwiki%2FUser_Experience_%2528UX%2529_Design&amp;amp;urlhash=qtwy" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006699; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank" title="New window will open"&gt;http://en.wikipedia.org/wiki/User_Experience_%28UX%29_Design&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&lt;a href="http://www.linkedin.com/redirect?url=http%3A%2F%2Fen%2Ewikipedia%2Eorg%2Fwiki%2FUser_Interface_Design&amp;amp;urlhash=tYl3" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006699; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank" title="New window will open"&gt;http://en.wikipedia.org/wiki/User_Interface_Design&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 13px; line-height: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 15px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 15px;"&gt;So, you can add more comments to the above ones -- Cheers!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-1959511836506386331?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kmKfsk7cPlCZ1Aap2sIISkxc2FI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kmKfsk7cPlCZ1Aap2sIISkxc2FI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kmKfsk7cPlCZ1Aap2sIISkxc2FI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kmKfsk7cPlCZ1Aap2sIISkxc2FI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/8SNsvL3UZtE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/1959511836506386331/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/09/what-is-difference-between-user.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/1959511836506386331?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/1959511836506386331?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/8SNsvL3UZtE/what-is-difference-between-user.html" title="What is the difference between User Interface and User Experience design?" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>0</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/09/what-is-difference-between-user.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UCRHk-eSp7ImA9Wx5XEEs.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-1081032511311332464</id><published>2010-09-09T21:32:00.003+02:00</published><updated>2010-09-09T21:41:05.751+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-09T21:41:05.751+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="sample" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><title>JavaScript - Regular Expressions</title><content type="html">&lt;div id="abw" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-top-color: transparent; border-top-style: solid; border-top-width: 3px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: auto; margin-right: auto; margin-top: 0px; max-width: 930px; min-width: 741px; padding-bottom: 0px; padding-left: 15px; padding-right: 15px; padding-top: 0px; position: relative; text-align: left; text-decoration: inherit;"&gt;&lt;div class="clear" id="abm" style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; zoom: 1;"&gt;&lt;div id="abc" style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: -336px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; width: 930px;"&gt;&lt;div id="articlebody" style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 351px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: static; text-decoration: inherit;"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; empty-cells: show; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td colspan="2" style="vertical-align: top;"&gt;&lt;h1 style="color: #3e3e3e; font-family: inherit; font-size: 22px; font-style: inherit; font-weight: inherit; font: normal normal normal 22px/1.2 Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;/h1&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="vertical-align: top;"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="vertical-align: top;"&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;A regular expression is a pattern that uses a special syntax to describe the content of a text field. It can be used either to validate that the string contains a valid value or alternatively it can be used to format a value entered so that it matches the specified format.&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;Regular expressions were introduced into Javascript in version 1.2 and so can be used to perform field validations in all modern browsers. While the actual syntax of regular expressions is quite complex compared to most other Javascript commands, once you have the code for a particular regular expression using that expression to perform validation on an input field is very easy.&lt;/div&gt;&lt;div style="margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; text-decoration: inherit;"&gt;Here are a couple of regular expressions :&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; text-decoration: inherit;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;emailRe = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*\.(\w{2}|(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum))$/&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;phoneRe = /^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;
Note that the expressions are fairly long and that in order for them to work correctly they each need to be coded completely on one line (if you select the code in the above box and paste it into a text editor you should get the code set out correctly). These examples define valid formats for email addresses and phone numbers respectively.&lt;br /&gt;
&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;The email address regular expression accepts email addresses in the format username @ domain name. There are a couple of other valid email address formats (eg. username @ [ip address]) but this regular expression only accepts the more common format.&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;The phone number regular expression accepts phone number in both local format (eg. 02 1234 5678 or 123 123 4567) or international format (eg. +61 (0) 2 1234 5678 or +1 123 123 4567). It also accepts an optional extention of up to five digits prefixed by x or ext (eg. 123 123 4567 x89).&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;Rather than performing a whole series of validations to validate that a given field contains an email address or phone number you can perform one test using the appropriate regular expression instead. For example, the following code could be used with the above regular expressions to validate two fields on your form.&lt;/div&gt;&lt;div class="code" style="background-color: #ffffcc; border-bottom-color: rgb(102, 102, 102); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(102, 102, 102); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(102, 102, 102); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(102, 102, 102); border-top-style: solid; border-top-width: 1px; clear: both; color: #333333; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; font: normal normal normal 14px/22px Arial, Helvetica, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-decoration: inherit; width: 400px;"&gt;if (!emailRe.test(myform.replyemail.value))&lt;br /&gt;
alert(myform.replyemail.value + ' is invalid');&lt;br /&gt;
if (!phoneRe.test(myform.phone.value))&lt;br /&gt;
alert(myform.phone.value + ' is invalid');&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;Note that like any other validations that you perform against form fields using Javascript, you cannot validate that the entered value actually exists and is correct. All you can do is to check that it matches to an expected pattern. Any more substantial validation would require server side processing as Javascript does not have access to anything that allows it to perform that additional validation.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div id="coda" style="clear: both; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 351px; margin-top: 0px; min-height: 9em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; zoom: 1;"&gt;&lt;div id="resources" style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;div id="related" style="clear: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; width: 289px; z-index: 5;"&gt;&lt;div class="n5" style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;Related Articles&lt;/div&gt;&lt;ul style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; z-index: 0;"&gt;&lt;li style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 18px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/c/ec/36.htm" style="color: #3366cc; cursor: pointer; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;" zt="18/1YL/Zn"&gt;Javascript Regular Expressions&lt;/a&gt;&lt;/li&gt;
&lt;li style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 18px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/library/blre19.htm" style="color: #3366cc; cursor: pointer; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;" zt="18/1YL/Zn"&gt;The RegExp Object&lt;/a&gt;&lt;/li&gt;
&lt;li style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 18px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/library/blre01.htm" style="color: #3366cc; cursor: pointer; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;" zt="18/1YL/Zn"&gt;Pattern Matching&lt;/a&gt;&lt;/li&gt;
&lt;li style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 18px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://linux.about.com/cs/linux101/g/Regular_Express.htm" style="color: #3366cc; cursor: pointer; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;" zt="18/1YL/Zn"&gt;Regular Expressions - What is Regular Expressions&lt;/a&gt;&lt;/li&gt;
&lt;li style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 18px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://linux.about.com/cs/linux101/g/regularexpressi.htm" style="color: #3366cc; cursor: pointer; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;" zt="18/1YL/Zn"&gt;Regular Expressions - What is Regular Expressions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id="guideinfo" style="border-bottom-color: rgb(234, 234, 234); border-bottom-style: solid; border-bottom-width: 1px; bottom: 0px; color: #666666; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; font: normal normal normal 11px/1.3 Verdana; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; right: 0px; text-decoration: inherit; width: 260px; zoom: 1;"&gt;&lt;div class="cntnr" style="font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-height: 79px; padding-bottom: 6px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; zoom: 1;"&gt;&lt;div id="thumb" style="bottom: 0px; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; font: normal normal normal 11px/1.3 Georgia; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; right: 6px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/bio/Stephen-Chapman-12274.htm" style="color: #3366cc; cursor: pointer; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" zt="18/1YK"&gt;&lt;img alt="Stephen Chapman" src="http://0.tqn.com/d/g/12274.jpg" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; display: block;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 91px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/bio/Stephen-Chapman-12274.htm" style="color: #3366cc; cursor: pointer; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" zt="18/1YO"&gt;Stephen Chapman&lt;/a&gt;&lt;br /&gt;
JavaScript Guide&lt;/div&gt;&lt;ul style="color: #333333; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; font: normal normal normal 11px/1.5 Verdana; margin-bottom: 0px; margin-left: 0px; margin-right: 91px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; z-index: 0;"&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://0.tqn.com/f/t1/bl2.png); background-origin: initial; background-position: 0px 0.45em; background-repeat: no-repeat no-repeat; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 10px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/gi/pages/stay.htm" style="color: #3366cc; cursor: pointer; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" zt="18/1YS"&gt;&lt;strong style="font-family: inherit; font-size: 11px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;"&gt;Sign up&lt;/strong&gt;&amp;nbsp;for my Newsletter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;ul class="social" style="color: #333333; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; font: normal normal normal 11px/1.5 Verdana; margin-bottom: 0px; margin-left: 0px; margin-right: 91px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; z-index: 0; zoom: 1;"&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://0.tqn.com/f/t1/bl2.png); background-origin: initial; background-position: 0px 0.45em; background-repeat: no-repeat no-repeat; float: left; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 5px; margin-top: 0px; padding-bottom: 0px; padding-left: 10px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/b/" style="color: #ff6600; cursor: pointer; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" zt="18/1YM"&gt;My Blog&lt;/a&gt;&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://0.tqn.com/f/t1/bl2.png); background-origin: initial; background-position: 0px 0.45em; background-repeat: no-repeat no-repeat; float: left; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 5px; margin-top: 0px; padding-bottom: 0px; padding-left: 10px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://forums.about.com/n/pfx/forum.aspx?nav=messages&amp;amp;webtag=ab-javascript" style="color: #ff6600; cursor: pointer; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" zt="18/1YN"&gt;My Forum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-1081032511311332464?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/j8ClbU9kM9qoNU4PFrpp1gnUdDA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j8ClbU9kM9qoNU4PFrpp1gnUdDA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/j8ClbU9kM9qoNU4PFrpp1gnUdDA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j8ClbU9kM9qoNU4PFrpp1gnUdDA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/yWbYQyCXptk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/1081032511311332464/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/09/javascript-regular-expressions.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/1081032511311332464?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/1081032511311332464?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/yWbYQyCXptk/javascript-regular-expressions.html" title="JavaScript - Regular Expressions" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>0</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/09/javascript-regular-expressions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UFQ3s_fyp7ImA9Wx5QEk0.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-8981816677255936042</id><published>2010-08-30T22:44:00.001+02:00</published><updated>2010-08-30T22:46:52.547+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-30T22:46:52.547+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="WEB" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><category scheme="http://www.blogger.com/atom/ns#" term="GUI" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><title>Web: Polymorphic JavaScript Functions</title><content type="html">&lt;div id="abw" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-top-color: rgb(255, 51, 0); border-top-width: 3px; font-family: inherit; font-size: 12px; font-style: inherit; margin-bottom: 1.5em; margin-left: auto; margin-right: auto; margin-top: 0px; max-width: 930px; min-width: 741px; padding-bottom: 0px; padding-left: 15px; padding-right: 15px; padding-top: 0px; position: relative; text-align: left; text-decoration: inherit;"&gt;&lt;div class="clear" id="abm" style="font-family: inherit; font-size: 12px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; zoom: 1;"&gt;&lt;div id="abc" style="font-family: inherit; font-size: 12px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: -336px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; width: 930px;"&gt;&lt;div id="articlebody" style="font-family: inherit; font-size: 12px; font-style: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 351px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: static; text-decoration: inherit;"&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;div style="text-align: right;"&gt;&lt;b&gt;by Stephen Chapman&lt;/b&gt;&lt;/div&gt;&lt;div style="font-weight: inherit;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-weight: inherit;"&gt;One aspect that not many people ever think about with JavaScript is that if you define multiple functions with the same name then the last one defined will be the one that actually runs. JavaScript functions are not polymorphic the way that functions in many other languages are in that JavaScript doesn't care if the actual arguments defined for the functions are different as it can't distinguish between them on that basis. Where in other languages you might have&amp;nbsp;&lt;b style="font-weight: bold;"&gt;myfunc(oneparm)&lt;/b&gt;&amp;nbsp;and&amp;nbsp;&lt;b style="font-weight: bold;"&gt;myfunc(parmone, parmtwo)&lt;/b&gt;&amp;nbsp;as two separate functions with the one that gets run depending on the number of parameters passed, in JavaScript the last one defined will always be the one run regardless of the number of parameters.&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;The only time most people will ever even think about this aspect of how JavaScript works is when they accidentally create two functions of the same name (perhaps by incorprating two different scripts into the same page) and then wondering why their code doesn't work properly.&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;Instead of being a failing in the JavaScript language though, this way of handling duplicated function names actually provides us with a way to make JavaScript even more polymorphic with its function processing. To start with, it is relatively simple to recode our multiple functions so that they will behave polymorphically, we just need to give each a separate nale and then set up one extra function that will be the one that we call which itself examines the number and types of the parameters passed in order to decide which of those other functions to call.&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;Doing that is not as efficient in terms of the required code as languages that do that selection automatically are but it does make available to us a way to make our JavaScript functions even more polymorphic than is possible in other languages. Instead of the parameters passed to the function being polymorphic we can set things up in JavaScript so that the function itself is polymorphic and changes itself.&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;A good example of this was included in the presentation given by Dan Webb at the @media Ajax 2007 conference. In his presentation he used the following example.&lt;/div&gt;&lt;div class="code" style="background-color: #ffffcc; border-bottom-color: rgb(102, 102, 102); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(102, 102, 102); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(102, 102, 102); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(102, 102, 102); border-top-style: solid; border-top-width: 1px; clear: both; color: #333333; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; font: normal normal normal 14px/22px Arial, Helvetica, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-decoration: inherit; width: 400px;"&gt;function addEvent(obj,evt,fn) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if (document.addEventListener) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;addEvent = function (obj,evt,fn) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.addEventListener(evt,fn,false);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;else if (document.attachEvent) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;addEvent = function (obj,evt,fn) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.attachEvent('on'+evt,fn);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;addEvent(obj,evt,fn);&lt;br /&gt;
}&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;This function effectively rewrites itself the first time it is called by creating another function having the same name as the original function. As this new function has been added to the page after the original function, it will be the one that is used for all subsequent calls to that function name but because the second function by that name has not yet been added to the page the first time the function is called, te original function (the one that recreates itself) will be the one called the&amp;nbsp;&lt;b style="font-weight: bold;"&gt;first&lt;/b&gt;&amp;nbsp;time that the function is called.&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;This allows us to dramatically reduce the feature sensing code that we would otherwise need in our scripts in order to determine what code we need to run based on the features supported.&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;This particular example uses feature sensing to add event processing to the web page. If the browser is running JavaScript that supports addEventListener() then the addEvent() function will replace itself with a function that calls addEventListener. If the browser is running JScript which supports attachEvent() then the function will replace itself with a function that calls attachEvent. In effect there are three different addEvent() functions in our web page. The first is called the first time the function is called. That function works out which of the two features that the browser supports and replaces itself with a function that uses that feature to do the processing. It then calls that replacement function in order to perform that task. Subsequent calls to the function will reference the added function directly as it has been added to the page after the original function. Since this function does not perform the feature sensing it will run more efficiently. As it is impossible for a browser to suddenly stop supporting one feature and start supporting another in the middle of processing a script we do not need to perform feature sensing tests more than once in processing the page and so a polymorphic function like this is way more efficient than the more conventional approach of testing the feature every time would be.&lt;/div&gt;&lt;/div&gt;&lt;div id="coda" style="clear: both; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 351px; margin-top: 0px; min-height: 9em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; zoom: 1;"&gt;&lt;div id="resources" style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;div id="related" style="clear: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; width: 289px; z-index: 5;"&gt;&lt;div class="n5" style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;Related Articles&lt;/div&gt;&lt;ul style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; z-index: 0;"&gt;&lt;li style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 18px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/od/3functions/a/functions.htm" style="color: #3366cc; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;" zt="18/1YL/Zn"&gt;Modular Code Using JavaScript Functions&lt;/a&gt;&lt;/li&gt;
&lt;li style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 18px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/od/learnmodernjavascript/a/tutorial01_2.htm" style="color: #3366cc; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;" zt="18/1YL/Zn"&gt;Unobtrusive JavaScript - Hello World - The Script Code&lt;/a&gt;&lt;/li&gt;
&lt;li style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 18px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/library/bltut06.htm" style="color: #3366cc; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;" zt="18/1YL/Zn"&gt;Functions&lt;/a&gt;&lt;/li&gt;
&lt;li style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 18px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://printscan.about.com/bltut06.htm" style="color: #3366cc; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;" zt="18/1YL/Zn"&gt;Functions&lt;/a&gt;&lt;/li&gt;
&lt;li style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 18px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/library/blnewornot.htm" style="color: #3366cc; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;" zt="18/1YL/Zn"&gt;Functions and Object Constructors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id="guideinfo" style="border-bottom-color: rgb(234, 234, 234); border-bottom-style: solid; border-bottom-width: 1px; bottom: 0px; color: #666666; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; font: normal normal normal 11px/1.3 Verdana; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; right: 0px; text-decoration: inherit; width: 260px; zoom: 1;"&gt;&lt;div class="cntnr" style="font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-height: 79px; padding-bottom: 6px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; zoom: 1;"&gt;&lt;div id="thumb" style="bottom: 0px; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; font: normal normal normal 11px/1.3 Georgia; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; right: 6px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/bio/Stephen-Chapman-12274.htm" style="color: #3366cc; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" zt="18/1YK"&gt;&lt;img alt="Stephen Chapman" src="http://0.tqn.com/d/g/12274.jpg" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; display: block;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 91px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/bio/Stephen-Chapman-12274.htm" style="color: #3366cc; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" zt="18/1YO"&gt;Stephen Chapman&lt;/a&gt;&lt;br /&gt;
JavaScript Guide&lt;/div&gt;&lt;ul style="color: #333333; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; font: normal normal normal 11px/1.5 Verdana; margin-bottom: 0px; margin-left: 0px; margin-right: 91px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; z-index: 0;"&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://0.tqn.com/f/t1/bl2.png); background-origin: initial; background-position: 0px 0.45em; background-repeat: no-repeat no-repeat; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 10px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/gi/pages/stay.htm" style="color: #3366cc; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" zt="18/1YS"&gt;&lt;strong style="font-family: inherit; font-size: 11px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;"&gt;Sign up&lt;/strong&gt;&amp;nbsp;for my Newsletter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;ul class="social" style="color: #333333; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; font: normal normal normal 11px/1.5 Verdana; margin-bottom: 0px; margin-left: 0px; margin-right: 91px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; z-index: 0; zoom: 1;"&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://0.tqn.com/f/t1/bl2.png); background-origin: initial; background-position: 0px 0.45em; background-repeat: no-repeat no-repeat; float: left; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 5px; margin-top: 0px; padding-bottom: 0px; padding-left: 10px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/b/" style="color: #ff6600; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" zt="18/1YM"&gt;My Blog&lt;/a&gt;&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://0.tqn.com/f/t1/bl2.png); background-origin: initial; background-position: 0px 0.45em; background-repeat: no-repeat no-repeat; float: left; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 5px; margin-top: 0px; padding-bottom: 0px; padding-left: 10px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://forums.about.com/n/pfx/forum.aspx?nav=messages&amp;amp;webtag=ab-javascript" style="color: #ff6600; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" zt="18/1YN"&gt;My Forum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-8981816677255936042?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EO3p_qk3VATkReWIyVzxdsedSqs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EO3p_qk3VATkReWIyVzxdsedSqs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EO3p_qk3VATkReWIyVzxdsedSqs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EO3p_qk3VATkReWIyVzxdsedSqs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/8wQbJEGW1mQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/8981816677255936042/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/08/web-polymorphic-javascript-functions.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/8981816677255936042?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/8981816677255936042?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/8wQbJEGW1mQ/web-polymorphic-javascript-functions.html" title="Web: Polymorphic JavaScript Functions" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>0</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/08/web-polymorphic-javascript-functions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UARHs_fip7ImA9Wx5QEk0.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-5733135062350143069</id><published>2010-08-30T22:33:00.002+02:00</published><updated>2010-08-30T22:47:25.546+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-30T22:47:25.546+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WEB" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="IMAGE RESOURCE" /><category scheme="http://www.blogger.com/atom/ns#" term="DIV" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="sample" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><category scheme="http://www.blogger.com/atom/ns#" term="GUI" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><title>Web: Drawing with Stylesheets and Javascript</title><content type="html">&lt;div id="abw" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-top-color: rgb(255, 51, 0); border-top-style: transparent; border-top-width: 3px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: auto; margin-right: auto; margin-top: 0px; max-width: 930px; min-width: 741px; padding-bottom: 0px; padding-left: 15px; padding-right: 15px; padding-top: 0px; position: relative; text-align: left; text-decoration: inherit;"&gt;&lt;div class="clear" id="abm" style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; zoom: 1;"&gt;&lt;div id="abc" style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: -336px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; width: 930px;"&gt;&lt;div id="articlebody" style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 351px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: static; text-decoration: inherit;"&gt;&lt;div id="abw" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-top-color: rgb(255, 51, 0); border-top-width: 3px; font-family: inherit; font-size: 12px; font-style: inherit; margin-bottom: 1.5em; margin-left: auto; margin-right: auto; margin-top: 0px; max-width: 930px; min-width: 741px; padding-bottom: 0px; padding-left: 15px; padding-right: 15px; padding-top: 0px; position: relative; text-align: left; text-decoration: inherit;"&gt;&lt;div class="clear" id="abm" style="font-family: inherit; font-size: 12px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; zoom: 1;"&gt;&lt;div id="abc" style="font-family: inherit; font-size: 12px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: -336px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; width: 930px;"&gt;&lt;div id="articlebody" style="font-family: inherit; font-size: 12px; font-style: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 351px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: static; text-decoration: inherit;"&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: right;"&gt;&lt;b&gt;by Stephen Chapman&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; empty-cells: show; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td colspan="2" style="vertical-align: top;"&gt;&lt;h1 style="color: #3e3e3e; font-family: inherit; font-size: 22px; font-style: inherit; font-weight: inherit; font: normal normal normal 22px/1.2 Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div id="abw" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-top-color: rgb(255, 51, 0); border-top-style: transparent; border-top-width: 3px; display: inline !important; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: auto; margin-right: auto; margin-top: 0px; max-width: 930px; min-width: 741px; padding-bottom: 0px; padding-left: 15px; padding-right: 15px; padding-top: 0px; position: relative; text-align: left; text-decoration: inherit;"&gt;&lt;div class="clear" id="abm" style="display: inline !important; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; zoom: 1;"&gt;&lt;div id="abc" style="display: inline !important; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: -336px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; width: 930px;"&gt;&lt;div id="articlebody" style="display: inline !important; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 351px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: static; text-decoration: inherit;"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; display: inline !important; empty-cells: show; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;tbody style="display: inline !important;"&gt;
&lt;tr style="display: inline !important;"&gt;&lt;td colspan="2" style="display: inline !important; vertical-align: top;"&gt;&lt;h2 style="color: inherit; display: inline !important; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; font: normal normal normal 14px/1.3 Verdana; margin-bottom: 1.3em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;1. Introduction and Sample&lt;/h2&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/h1&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="vertical-align: top;"&gt;&lt;img alt="clr gif" height="6" src="http://z.about.com/" width="1" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="vertical-align: top;"&gt;&lt;div class="lkbx" style="clear: right; float: right; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;div class="obO" style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;h5 style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;Join the Discussion&lt;/h5&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/mpboards.htm" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://0.tqn.com/f/t1/bl1.png); background-origin: initial; background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; color: #3366cc; display: block; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 2px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1.3em; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: underline;"&gt;Questions? Comments?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="obO" style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;h5 style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;More of this Feature&lt;/h5&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/library/bldraw2.htm" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://0.tqn.com/f/t1/bl1.png); background-origin: initial; background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; color: #3366cc; display: block; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 2px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1.3em; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: underline;"&gt;Stylesheet&lt;/a&gt;&lt;a href="http://javascript.about.com/library/bldraw3.htm" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://0.tqn.com/f/t1/bl1.png); background-origin: initial; background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; color: #3366cc; display: block; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 2px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1.3em; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: underline;"&gt;HTML&lt;/a&gt;&lt;a href="http://javascript.about.com/library/bldraw4.htm" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://0.tqn.com/f/t1/bl1.png); background-origin: initial; background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; color: #3366cc; display: block; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 2px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1.3em; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: underline;"&gt;Javascript Generated&lt;/a&gt;&lt;a href="http://javascript.about.com/library/bldraw5.htm" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://0.tqn.com/f/t1/bl1.png); background-origin: initial; background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; color: #3366cc; display: block; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 2px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1.3em; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: underline;"&gt;Animate the Drawing&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;Did you know that you can place animated drawings on your web page using nothing more than a few simple stylesheet entries and a few lines of javascript? Most people know that Javascript can animate things on your page. Not so many people realize that you can use just &amp;nbsp;a few simple stylesheet commands to produce quite complex drawings and then use javascript to reduce the amount of code required to place them on your page.&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;Well now I am going to explain to you how you can do it. Here's the example animated drawing that we are going to use - a keyboard where the keys light up when the mouse moves over them.&lt;/div&gt;&lt;div id="key" style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;div class="kclear" style="clear: both; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;div class="wt w14 l k0" style="background-color: white; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 12px;"&gt;&lt;/div&gt;&lt;div class="bl k1" style="background-color: black; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 11px;"&gt;&lt;/div&gt;&lt;div class="wt w12 k2" style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 9px;"&gt;&lt;/div&gt;&lt;div class="bl k3" style="background-color: black; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 11px;"&gt;&lt;/div&gt;&lt;div class="wt w14 k4" style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 12px;"&gt;&lt;/div&gt;&lt;div class="wt w14 l k5" style="background-color: white; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 12px;"&gt;&lt;/div&gt;&lt;div class="bl k6" style="background-color: black; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 11px;"&gt;&lt;/div&gt;&lt;div class="wt w12 k7" style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 9px;"&gt;&lt;/div&gt;&lt;div class="bl k8" style="background-color: black; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 11px;"&gt;&lt;/div&gt;&lt;div class="wt w12 k9" style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 9px;"&gt;&lt;/div&gt;&lt;div class="bl k10" style="background-color: black; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 11px;"&gt;&lt;/div&gt;&lt;div class="wt w14 k11" style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 12px;"&gt;&lt;/div&gt;&lt;div class="wt w14 l k12" style="background-color: white; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 12px;"&gt;&lt;/div&gt;&lt;div class="bl k13" style="background-color: black; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 11px;"&gt;&lt;/div&gt;&lt;div class="wt w12 k14" style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 9px;"&gt;&lt;/div&gt;&lt;div class="bl k15" style="background-color: black; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 11px;"&gt;&lt;/div&gt;&lt;div class="wt w14 k16" style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 12px;"&gt;&lt;/div&gt;&lt;div class="wt w14 l k17" style="background-color: white; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 12px;"&gt;&lt;/div&gt;&lt;div class="bl k18" style="background-color: black; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 11px;"&gt;&lt;/div&gt;&lt;div class="wt w12 k19" style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 9px;"&gt;&lt;/div&gt;&lt;div class="bl k20" style="background-color: black; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 11px;"&gt;&lt;/div&gt;&lt;div class="wt w12 k21" style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 9px;"&gt;&lt;/div&gt;&lt;div class="bl k22" style="background-color: black; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 11px;"&gt;&lt;/div&gt;&lt;div class="wt w14 k23" style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 12px;"&gt;&lt;/div&gt;&lt;div class="wt w14 l k24" style="background-color: white; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 12px;"&gt;&lt;/div&gt;&lt;div class="bl k25" style="background-color: black; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 11px;"&gt;&lt;/div&gt;&lt;div class="wt w12 k26" style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 9px;"&gt;&lt;/div&gt;&lt;div class="bl k27" style="background-color: black; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 11px;"&gt;&lt;/div&gt;&lt;div class="wt w14 k28" style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 12px;"&gt;&lt;/div&gt;&lt;div class="wt w14 l k29" style="background-color: white; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 12px;"&gt;&lt;/div&gt;&lt;div class="bl k30" style="background-color: black; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 11px;"&gt;&lt;/div&gt;&lt;div class="wt w12 k31" style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 9px;"&gt;&lt;/div&gt;&lt;div class="bl k32" style="background-color: black; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 11px;"&gt;&lt;/div&gt;&lt;div class="wt w12 k33" style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 9px;"&gt;&lt;/div&gt;&lt;div class="bl k34" style="background-color: black; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 11px;"&gt;&lt;/div&gt;&lt;div class="wt w14 k35" style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 12px;"&gt;&lt;/div&gt;&lt;div class="lr1 k36" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 60px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 1px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="kclear" style="clear: both; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;div class="wb w20 k0" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 18px;"&gt;&lt;/div&gt;&lt;div class="wb w23 k2" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 20px;"&gt;&lt;/div&gt;&lt;div class="wb w19 k4" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 17px;"&gt;&lt;/div&gt;&lt;div class="wb w20 k5" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 18px;"&gt;&lt;/div&gt;&lt;div class="wb w23 k7" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 20px;"&gt;&lt;/div&gt;&lt;div class="wb w23 k9" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 20px;"&gt;&lt;/div&gt;&lt;div class="wb w19 k11" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 17px;"&gt;&lt;/div&gt;&lt;div class="wb w20 k12" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 18px;"&gt;&lt;/div&gt;&lt;div class="wb w23 k14" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 20px;"&gt;&lt;/div&gt;&lt;div class="wb w19 k16" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 17px;"&gt;&lt;/div&gt;&lt;div class="wb w20 k17" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 18px;"&gt;&lt;/div&gt;&lt;div class="wb w23 k19" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 20px;"&gt;&lt;/div&gt;&lt;div class="wb w23 k21" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 20px;"&gt;&lt;/div&gt;&lt;div class="wb w19 k23" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 17px;"&gt;&lt;/div&gt;&lt;div class="wb w20 k24" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 18px;"&gt;&lt;/div&gt;&lt;div class="wb w23 k26" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 20px;"&gt;&lt;/div&gt;&lt;div class="wb w19 k28" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 17px;"&gt;&lt;/div&gt;&lt;div class="wb w20 k29" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 18px;"&gt;&lt;/div&gt;&lt;div class="wb w23 k31" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 20px;"&gt;&lt;/div&gt;&lt;div class="wb w23 k33" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 20px;"&gt;&lt;/div&gt;&lt;div class="wb w19 k35" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(255, 255, 255); border-right-style: solid; border-right-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 17px;"&gt;&lt;/div&gt;&lt;div class="lr2 k36" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; float: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 30px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit; width: 1px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="kclear" style="clear: both; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; height: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;Now if you had seen this on some other page you would probably think it was created using images and perhaps has them laid out in a complicated table in order to get them laid out correctly. Well the entire drawing is actually created using nothing more than 12 stylesheet commands and about 15 lines of Javascript and that includes the animated effect.&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;Of course the drawing that you want to include in your page will probably look completely different from this example but the description of how I created and animated this drawing should provide you with a reasonable idea of how you can go about creating and animating a drawing of your own using nothing more than a few stylesheet commands and a few lines of Javascript.&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;We'll start by looking at the&amp;nbsp;&lt;a href="http://javascript.about.com/library/bldraw2.htm" style="color: #3366cc; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;"&gt;stylesheet commands&lt;/a&gt;&amp;nbsp;that I used.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div id="coda" style="clear: both; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 351px; margin-top: 0px; min-height: 9em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; zoom: 1;"&gt;&lt;div id="resources" style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;div id="related" style="clear: left; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; width: 289px; z-index: 5;"&gt;&lt;div class="n5" style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;Related Articles&lt;/div&gt;&lt;ul style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; z-index: 0;"&gt;&lt;li style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 18px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/library/bldraw4.htm" style="color: #3366cc; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;" zt="18/1YL/Zn"&gt;Javascript Generated Drawing&lt;/a&gt;&lt;/li&gt;
&lt;li style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 18px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://drawsketch.about.com/cs/drawinglessons/a/contourdrawing_2.htm" style="color: #3366cc; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;" zt="18/1YL/Zn"&gt;Contour Drawing Exercise&lt;/a&gt;&lt;/li&gt;
&lt;li style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 18px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/od/learnmodernjavascript/a/tutorial24.htm" style="color: #3366cc; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;" zt="18/1YL/Zn"&gt;Unobtrusive JavaScript - Updating the Web Page&lt;/a&gt;&lt;/li&gt;
&lt;li style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 18px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://delphi.about.com/library/bluc/text/uc052102b.htm" style="color: #3366cc; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;" zt="18/1YL/Zn"&gt;GDI Graphics in Delphi - page 2/9&lt;/a&gt;&lt;/li&gt;
&lt;li style="font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 18px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/od/hintsandtips/a/twodoms.htm" style="color: #3366cc; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;" zt="18/1YL/Zn"&gt;JavaScript can Work With Two Different DOMs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id="guideinfo" style="border-bottom-color: rgb(234, 234, 234); border-bottom-style: solid; border-bottom-width: 1px; bottom: 0px; color: #666666; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; font: normal normal normal 11px/1.3 Verdana; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; right: 0px; text-decoration: inherit; width: 260px; zoom: 1;"&gt;&lt;div class="cntnr" style="font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-height: 79px; padding-bottom: 6px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; zoom: 1;"&gt;&lt;div id="thumb" style="bottom: 0px; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; font: normal normal normal 11px/1.3 Georgia; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; right: 6px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/bio/Stephen-Chapman-12274.htm" style="color: #3366cc; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" zt="18/1YK"&gt;&lt;img alt="Stephen Chapman" src="http://0.tqn.com/d/g/12274.jpg" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; display: block;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 91px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/bio/Stephen-Chapman-12274.htm" style="color: #3366cc; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" zt="18/1YO"&gt;Stephen Chapman&lt;/a&gt;&lt;br /&gt;
JavaScript Guide&lt;/div&gt;&lt;ul style="color: #333333; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; font: normal normal normal 11px/1.5 Verdana; margin-bottom: 0px; margin-left: 0px; margin-right: 91px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; z-index: 0;"&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://0.tqn.com/f/t1/bl2.png); background-origin: initial; background-position: 0px 0.45em; background-repeat: no-repeat no-repeat; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 10px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/gi/pages/stay.htm" style="color: #3366cc; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" zt="18/1YS"&gt;&lt;strong style="font-family: inherit; font-size: 11px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;"&gt;Sign up&lt;/strong&gt;&amp;nbsp;for my Newsletter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;ul class="social" style="color: #333333; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; font: normal normal normal 11px/1.5 Verdana; margin-bottom: 0px; margin-left: 0px; margin-right: 91px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; text-decoration: inherit; z-index: 0; zoom: 1;"&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://0.tqn.com/f/t1/bl2.png); background-origin: initial; background-position: 0px 0.45em; background-repeat: no-repeat no-repeat; float: left; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 5px; margin-top: 0px; padding-bottom: 0px; padding-left: 10px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://javascript.about.com/b/" style="color: #ff6600; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" zt="18/1YM"&gt;My Blog&lt;/a&gt;&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://0.tqn.com/f/t1/bl2.png); background-origin: initial; background-position: 0px 0.45em; background-repeat: no-repeat no-repeat; float: left; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 5px; margin-top: 0px; padding-bottom: 0px; padding-left: 10px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;&lt;a href="http://forums.about.com/n/pfx/forum.aspx?nav=messages&amp;amp;webtag=ab-javascript" style="color: #ff6600; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" zt="18/1YN"&gt;My Forum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-5733135062350143069?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BYizEwHc0ApoKWvudCf0fnC27_s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BYizEwHc0ApoKWvudCf0fnC27_s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BYizEwHc0ApoKWvudCf0fnC27_s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BYizEwHc0ApoKWvudCf0fnC27_s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/zRQdzXaMQpE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/5733135062350143069/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/08/web-drawing-with-stylesheets-and.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/5733135062350143069?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/5733135062350143069?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/zRQdzXaMQpE/web-drawing-with-stylesheets-and.html" title="Web: Drawing with Stylesheets and Javascript" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>0</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/08/web-drawing-with-stylesheets-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMFQ387eip7ImA9Wx5RGEg.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-3370497610130975816</id><published>2010-08-26T20:37:00.003+02:00</published><updated>2010-08-26T23:16:52.102+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-26T23:16:52.102+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WEB" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Song" /><category scheme="http://www.blogger.com/atom/ns#" term="funny" /><category scheme="http://www.blogger.com/atom/ns#" term="tv" /><category scheme="http://www.blogger.com/atom/ns#" term="jokes" /><title>Lady Java Music Video for JavaZone (High quality)</title><content type="html">&lt;object height="385" width="640"&gt;&lt;param name="movie" 
value="http://www.youtube.com/v/1JZnj4eNHXE?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param 
name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" 
value="always"&gt;&lt;/param&gt;&lt;embed 
src="http://www.youtube.com/v/1JZnj4eNHXE?fs=1&amp;amp;hl=en_US" 
type="application/x-shockwave-flash" allowscriptaccess="always" 
allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
This is very cool song dedicated to the Java programming language ... good job!&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-3370497610130975816?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/m-wIVI4om8jq1FD8FrSYGJB3vGg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m-wIVI4om8jq1FD8FrSYGJB3vGg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/m-wIVI4om8jq1FD8FrSYGJB3vGg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m-wIVI4om8jq1FD8FrSYGJB3vGg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/5Xjep8trrMo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/3370497610130975816/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/08/lady-java-music-video-for-javazone-high_26.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/3370497610130975816?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/3370497610130975816?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/5Xjep8trrMo/lady-java-music-video-for-javazone-high_26.html" title="Lady Java Music Video for JavaZone (High quality)" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>0</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/08/lady-java-music-video-for-javazone-high_26.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQEQHw5fyp7ImA9Wx9SGEk.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-314336349817146003</id><published>2010-07-20T22:41:00.013+02:00</published><updated>2010-12-08T23:28:21.227+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-08T23:28:21.227+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="sample" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT 2.0" /><category scheme="http://www.blogger.com/atom/ns#" term="Review" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="ExtJS" /><category scheme="http://www.blogger.com/atom/ns#" term="GUI" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><title>GWT - How to draw in the browser with GWTCanvas</title><content type="html">It's time to have better graphics and drawing capabilities in the Web applications. The big guys are working to support HTML5, but until then, we can use the GWTCanvas widget from the GWT.&lt;br /&gt;
&lt;br /&gt;
Here is a sample of how to extends the base GWTCanvas with more nicer and simpler features, like the mouse and keys events.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush:java"&gt;/**
 * The class SccCanvas extends GWTCanvas with mouse event listeners.
 *
 * @author SCC
 */
public class SccCanvas extends GWTCanvas {
   /** graphics helper */
   private final SccGraphics graphics_;

   /** Default constructor */
   public SccCanvas() {
      super();
      graphics_ = new SccGraphics(this);
      sinkEvents(Event.MOUSEEVENTS);
   }

   /** Creates a canvas with specified sizes for drawing and pixels */
   public SccCanvas(int coordX, int coordY, int pixelX, int pixelY) {
      super(coordX, coordY, pixelX, pixelY);
      graphics_ = new SccGraphics(this);
      sinkEvents(Event.MOUSEEVENTS);
   }

   /** Creates a canvas with specified size */
   public SccCanvas(int coordX, int coordY) {
      super(coordX, coordY);
      graphics_ = new SccGraphics(this);
      sinkEvents(Event.MOUSEEVENTS);
   }

   public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) {
      return addDomHandler(handler, MouseDownEvent.getType());
   }

   public HandlerRegistration addMouseMoveHandler(MouseMoveHandler handler) {
      return addDomHandler(handler, MouseMoveEvent.getType());
   }

   public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) {
      return addDomHandler(handler, MouseOutEvent.getType());
   }

   public HandlerRegistration addMouseOverHandler(MouseOverHandler handler) {
      return addDomHandler(handler, MouseOverEvent.getType());
   }

   public HandlerRegistration addMouseUpHandler(MouseUpHandler handler) {
      return addDomHandler(handler, MouseUpEvent.getType());
   }

   public HandlerRegistration addMouseWheelHandler(MouseWheelHandler handler) {
      return addDomHandler(handler, MouseWheelEvent.getType());
   }

   /**
    * @return the graphics_;
    */
   public SccGraphics getGraphics() {
      return graphics_;
   }
}

&lt;/pre&gt;&lt;br /&gt;
We have defined a helper class, called SccGraphics, similar with the "Graphics" context from Swing to implement the drawing primitives:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush:java"&gt;/** helper class for the simple drawing primitives */
public class SccGraphics {
   private final SccCanvas canvas_;


   public SccGraphics(final SccCanvas canvas) {
      canvas_ = canvas;
   }


   /** draws a line between 2 points (x1,y1) and (x2,y2) */
   public void drawLine(int x1, int y1, int x2, int y2) {
      canvas_.beginPath();
      canvas_.moveTo(x1, y1);
      canvas_.lineTo(x2, y2);
      canvas_.closePath();
      canvas_.stroke();
   }


   /** draws a rectangle, top corner (x,y) and size (w,h) */
   public void drawRect(int x, int y, int w, int h) {
      canvas_.beginPath();
      canvas_.rect(x, y, w, h);
      canvas_.closePath();
      canvas_.stroke();
   }


   /**
   * Draw an arc.
   * 
   * @param x
   * int value for centre X
   * @param y
   * int value for centre Y
   * @param r
   * int value for radius
   * @param startAngle
   * int value of start angle in degree 0 - 360
   * @param endAngle
   * int value of end angle in degree 0 - 360
   * @param antiClock
   * true value for antiClockwise sense
   */
   public void drawArc(int x, int y, int r, int startAngle, int endAngle,
         boolean antiClock) {
     canvas_.beginPath();
     final double start = Math.PI * startAngle / 180;
     final double end = Math.PI * endAngle / 180;
     canvas_.arc(x, y, r, start, end, antiClock);
     canvas_.closePath();
     canvas_.stroke();
  }
}
&lt;/pre&gt;&lt;br /&gt;
And this is the testing code, which allow us to mark the mouse position with a hair-cross lines, and also basic shape of rectangle and circle.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush:java"&gt;private int startX_;
private int startY_;


public void testGWTCanvas() {
   final SccCanvas c = new SccCanvas(350, 350);
   c.setBackgroundColor(Color.WHITE);


   final SccGraphics g = c.getGraphics();


   RootPanel.get().add(c);
   final Label lbl = new Label();


   c.addMouseMoveHandler(new MouseMoveHandler() {
      @Override
      public void onMouseMove(final MouseMoveEvent event) {
         c.clear();
         int mx = event.getX();
         int my = event.getY();
         lbl.setText(mx + "," + my);


         c.setLineWidth(.20);
         c.setStrokeStyle(Color.BLACK);
         g.drawLine(mx, 0, mx, 350);
         g.drawLine(0, my, 350, my);


         if (startX_ &gt; 0) {


            c.setLineWidth(.65);
            c.setStrokeStyle(Color.RED);
            g.drawRect(startX_, startY_, mx - startX_, my - startY_);
         }
      }
   });


   c.addMouseUpHandler(new MouseUpHandler() {
      @Override
      public void onMouseUp(MouseUpEvent event) {
         int mx = event.getX();
         int my = event.getY();


         c.setLineWidth(1);
         c.setStrokeStyle(Color.GREEN);
         int w = mx - startX_;
         int h = my - startY_;


         g.drawRect(startX_, startY_, w, h);


         int r = Math.min(Math.abs(w / 2), Math.abs(h / 2));
         g.drawArc((startX_ + mx) / 2, (startY_ + my) / 2, r, 0, 360,
         true);


         startX_ = -1;
         startY_ = -1;


      }
   });


   c.addMouseDownHandler(new MouseDownHandler() {
      @Override
      public void onMouseDown(final MouseDownEvent event) {
         int b = event.getNativeButton();
         int mx = event.getX();
         int my = event.getY();
         if (b == NativeEvent.BUTTON_LEFT) {
            lbl.setText("LEFT-CLICK @ " + mx + "," + my);
            startX_ = mx;
            startY_ = my;


         } else if (b == NativeEvent.BUTTON_MIDDLE) {
            lbl.setText("MIDDLE-CLICK @ " + mx + "," + my);


         } else if (b == NativeEvent.BUTTON_RIGHT) {
            lbl.setText("RIGHT-CLICK @ " + mx + "," + my);
         }
      }
   });


   Window win = new Window ();
   win.setBottomComponent(lbl);
   win.setSize (500, 400);
   win.add (c);
   win.show();
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
An here's the result of the above code:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_gZXNW3qKT34/TEYQnFIi8BI/AAAAAAAAAWM/0qm09UCQpGs/s1600/GWTCanvas+sample.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_gZXNW3qKT34/TEYQnFIi8BI/AAAAAAAAAWM/0qm09UCQpGs/s400/GWTCanvas+sample.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
So, it's just matter of time to see very powerful applications and systems. Examples are lots on web&amp;nbsp;&lt;a href="http://www.chromeexperiments.com/"&gt;http://www.chromeexperiments.com/&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-314336349817146003?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DAG6ay_P3XEnIA6zygQCDd0acoM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DAG6ay_P3XEnIA6zygQCDd0acoM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DAG6ay_P3XEnIA6zygQCDd0acoM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DAG6ay_P3XEnIA6zygQCDd0acoM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/i0FET4F66qk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/314336349817146003/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/07/gwt-how-to-draw-in-browser-with.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/314336349817146003?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/314336349817146003?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/i0FET4F66qk/gwt-how-to-draw-in-browser-with.html" title="GWT - How to draw in the browser with GWTCanvas" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_gZXNW3qKT34/TEYQnFIi8BI/AAAAAAAAAWM/0qm09UCQpGs/s72-c/GWTCanvas+sample.PNG" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/07/gwt-how-to-draw-in-browser-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8EQ3o9fyp7ImA9WxFbFUU.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-4269954613770208982</id><published>2010-07-08T11:56:00.006+02:00</published><updated>2010-07-08T12:26:42.467+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-08T12:26:42.467+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tricks" /><category scheme="http://www.blogger.com/atom/ns#" term="WEB" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="Review" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="sample" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><title>Powerful applications can be implemented into the browser</title><content type="html">This seems to be the next 10 years computing, the nice powerful application that don't need any installer or &amp;nbsp;hard-drive space, just a simple URL. You open the browser, invoke the URL and then "poof" magic, your application is on. Of course, this allows the application providers to charge you on usage-time, which will means that you'll pay all the time, but in the bright side, always you'll have access to the latest version.&lt;br /&gt;
&lt;br /&gt;
Here's a sample of powerful online application, which is working with any modern browser (Chrome, FF, IE9, IE8 + &lt;a href="http://code.google.com/chrome/chromeframe/" target="blank_"&gt;Chrome Frame plugin&lt;/a&gt;) &amp;nbsp;-- just try to draw something, and you'll see how nice it is:&lt;br /&gt;
&lt;br /&gt;
&lt;iframe height="500" src="http://svg-edit.googlecode.com/svn/tags/stable/editor/svg-editor.html" width="700"&gt;&amp;amp;lt;p&amp;amp;gt;&amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; Cheers!&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;gt;&amp;amp;lt;/p&amp;amp;gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;br /&gt;
Cheers!&lt;br /&gt;
&lt;br /&gt;
Happy browsing...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-4269954613770208982?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OW5a7033gpAgpbJn7EWEeg6wa7o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OW5a7033gpAgpbJn7EWEeg6wa7o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OW5a7033gpAgpbJn7EWEeg6wa7o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OW5a7033gpAgpbJn7EWEeg6wa7o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/pLOmxqydJBM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/4269954613770208982/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/07/powerful-applications-can-be.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/4269954613770208982?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/4269954613770208982?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/pLOmxqydJBM/powerful-applications-can-be.html" title="Powerful applications can be implemented into the browser" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>2</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/07/powerful-applications-can-be.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EARnk4cSp7ImA9WxFXFkQ.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-8795593047544164854</id><published>2010-05-24T11:13:00.003+02:00</published><updated>2010-05-24T12:07:27.739+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-24T12:07:27.739+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GWT-Ext" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="sample" /><category scheme="http://www.blogger.com/atom/ns#" term="GXT" /><category scheme="http://www.blogger.com/atom/ns#" term="Elipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT 2.0" /><category scheme="http://www.blogger.com/atom/ns#" term="Compilation" /><category scheme="http://www.blogger.com/atom/ns#" term="Debug" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="ExtJS" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT Ext" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><category scheme="http://www.blogger.com/atom/ns#" term="GUI" /><title>GWT - Upgrade to GWT 2.1 M1 and fix the module loading errors</title><content type="html">If you try to use the just released GWT 2.1M1 library on your old projects you'll have some errors:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;11:10:41.734 [ERROR] [gwt21m1test] Errors in 'jar:file:/C:/Borland/eclipse/plugins/com.google.gwt.eclipse.sdkbundle.2.1.0_2.1.0.m1-201005191217/gwt-2.1.0.M1/gwt-bikeshed.jar!/com/google/gwt/valuestore/ui/AbstractRecordListActivity.java'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;11:10:41.796 [ERROR] [gwt21m1test] Line 89: No source code is available for type com.google.gwt.requestfactory.shared.Receiver&lt;v&gt;; did you forget to inherit a required module?&lt;/v&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
To fix them add to your module .gwt.xml file the following line:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;inherits name='com.google.gwt.requestfactory.RequestFactory' /&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;inherits name="com.google.gwt.requestfactory.RequestFactory"&gt;&lt;/inherits&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Now your modules will load properly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Cheers!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-8795593047544164854?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6CDMLaI9O19CgEpEZPSatyLqlbs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6CDMLaI9O19CgEpEZPSatyLqlbs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6CDMLaI9O19CgEpEZPSatyLqlbs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6CDMLaI9O19CgEpEZPSatyLqlbs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/NYwHCzxvF2U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/8795593047544164854/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/05/gwt-upgrade-to-gwt-21-m1-and-fix-module.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/8795593047544164854?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/8795593047544164854?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/NYwHCzxvF2U/gwt-upgrade-to-gwt-21-m1-and-fix-module.html" title="GWT - Upgrade to GWT 2.1 M1 and fix the module loading errors" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>0</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/05/gwt-upgrade-to-gwt-21-m1-and-fix-module.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08CQnY5fip7ImA9WxFQFk0.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-6345122494791653892</id><published>2010-05-11T21:07:00.001+02:00</published><updated>2010-05-11T21:24:23.826+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-11T21:24:23.826+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="sample" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT 2.0" /><category scheme="http://www.blogger.com/atom/ns#" term="Compilation" /><category scheme="http://www.blogger.com/atom/ns#" term="Debug" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="GUI" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><category scheme="http://www.blogger.com/atom/ns#" term="Optimization" /><title>GWT - Large scale application development and MVP</title><content type="html">&lt;div style="text-align: right;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: small;"&gt;&lt;i&gt;Chris Ramsdale, Google Developer Relations&lt;/i&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: small;"&gt;&lt;div style="text-align: right;"&gt;&lt;i&gt;Updated March 2010&lt;/i&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em; text-align: right;"&gt;&lt;b&gt;Also see&amp;nbsp;&lt;a href="http://code.google.com/webtoolkit/articles/mvp-architecture-2.html" style="color: #0000cc;"&gt;Part II&lt;/a&gt;&amp;nbsp;of this article.&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em; text-align: left;"&gt;Building any large scale application has its hurdles, and GWT apps are no exception. Multiple developers working simultaneously on the same code base, while maintaining legacy features and functionality, can quickly turn into messy code. To help sort things out we introduce design patterns to create compartmentalized areas of responsibility within our project.&lt;/div&gt;&lt;div style="font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em; text-align: left;"&gt;There are various design patterns to choose from; Presentation-abstraction-control, Model-view-controller, Model-view-presenter, etc... And while each pattern has its benefits, we have found that a Model-view-presenter (MVP) architecture works best when developing GWT apps for two main reasons. First the MVP model, much like other design patterns, decouples development in a way that allows multiple developers to work simultaneously. Secondly, this model allows us to minimize our use of&amp;nbsp;&lt;a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/junit/client/GWTTestCase.html" style="color: #0000cc;"&gt;GWTTestCase&lt;/a&gt;&amp;nbsp;and, for the bulk of our code, write lightweight (and fast) JRE tests.&lt;/div&gt;&lt;div style="font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;At the heart of this pattern is the separation of functionality into components that logically make sense, but in the case of GWT there is a clear focus on making the&amp;nbsp;&lt;a href="http://code.google.com/webtoolkit/articles/mvp-architecture.html#view" style="color: #0000cc;"&gt;view&lt;/a&gt;&amp;nbsp;as simple as possible in order to minimize our reliance on&amp;nbsp;&lt;a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/junit/client/GWTTestCase.html" style="color: #0000cc;"&gt;GWTTestCase&lt;/a&gt;&amp;nbsp;and reduce the overall time spent running tests.&lt;/div&gt;&lt;div style="font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;Building an MVP based application can be straightforward and easy once you understand the fundamentals behind this design pattern. To help explain these concepts we will use a simple Contacts application as an example. This application will allow users to view, edit, and add contacts to a list of contacts that are stored on the server.&lt;/div&gt;&lt;div style="font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;To begin we will break our application up into the following components:&lt;/div&gt;&lt;ul style="font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 15px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://code.google.com/webtoolkit/articles/mvp-architecture.html#model" style="color: #0000cc;"&gt;Model&lt;/a&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://code.google.com/webtoolkit/articles/mvp-architecture.html#view" style="color: #0000cc;"&gt;View&lt;/a&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://code.google.com/webtoolkit/articles/mvp-architecture.html#presenter" style="color: #0000cc;"&gt;Presenter&lt;/a&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://code.google.com/webtoolkit/articles/mvp-architecture.html#app_controler" style="color: #0000cc;"&gt;AppController&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;We'll then look into how each of these components interact by digging into:&lt;/div&gt;&lt;ul style="font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 15px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://code.google.com/webtoolkit/articles/mvp-architecture.html#binding" style="color: #0000cc;"&gt;Binding presenters and views&lt;/a&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://code.google.com/webtoolkit/articles/mvp-architecture.html#events" style="color: #0000cc;"&gt;Events and the event bus&lt;/a&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://code.google.com/webtoolkit/articles/mvp-architecture.html#history" style="color: #0000cc;"&gt;History and view transitions&lt;/a&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://code.google.com/webtoolkit/articles/mvp-architecture.html#testing" style="color: #0000cc;"&gt;Testing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small; line-height: 16px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small; line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="line-height: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small; line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="line-height: normal;"&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;The sample project, referenced throughout this tutorial, can be found&amp;nbsp;&lt;a href="http://code.google.com/webtoolkit/doc/latest/tutorial/projects/Contacts.zip" style="color: #0000cc;"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-size: medium; line-height: normal;"&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Model&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;A model encompasses business objects, and in the case of our Contacts application we have:&lt;/div&gt;&lt;ul style="line-height: 16px; margin-bottom: 0px; margin-left: 15px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Contact: A representation of a contact within the contact list. For simplicity, this object contains a first name, last name, and email address. In a more complex application, this object would have more fields.&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;ContactDetails: A light version of the Contact that contains only the unique identifier and display name. This "light" version of the Contact object will make the Contact list retrieval more efficient, as there will be fewer bits to serialize and transport across the wire. In the case of our example application, this optimization has less impact than it would in a more complex app where Contact objects have substantially more fields. The initial RPC will return a list of ContactDetails, and we've added a display name field so that there is some amount of data that can be displayed (within the ContactsView) without having to making subsequent RPCs.&lt;/li&gt;
&lt;/ul&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-size: medium; line-height: normal;"&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;View&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;A view contains all of the UI components that make up our application. This includes any tables, labels, buttons, textboxes, etc... Views are responsible for the layout of the UI components and have no notion of the model. That is to say a view doesn't know that it is displaying a Contact, it simply knows that it has, for example, 3 labels, 3 textboxes, and 2 buttons that are organized in a vertical fashion. Switching between views is tied to the&amp;nbsp;&lt;a href="http://code.google.com/webtoolkit/articles/mvp-architecture.html#history" style="color: #0000cc;"&gt;history management&lt;/a&gt;&amp;nbsp;within the&amp;nbsp;&lt;a href="http://code.google.com/webtoolkit/articles/mvp-architecture.html#presenter" style="color: #0000cc;"&gt;presentation&lt;/a&gt;&amp;nbsp;layer.&lt;/div&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;The views in our Contacts application are:&lt;/div&gt;&lt;ul style="line-height: 16px; margin-bottom: 0px; margin-left: 15px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;ContactsView&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;EditContactView&lt;/li&gt;
&lt;/ul&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;The EditContactView will be used to add new contacts as well as editing existing contacts.&lt;/div&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-size: medium; line-height: normal;"&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Presenter&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;A presenter contains all of the logic for our Contacts application, including&amp;nbsp;&lt;a #events"="" href="http://code.google.com/webtoolkit/articles/mvp-architecture.html#history&amp;gt;history management&amp;lt;/a&amp;gt;, viewtransition and data sync via RPCs back to the server. As a general rule, forevery view you'll want a presenter to drive theview and handle &amp;lt;a href=" style="color: #0000cc;"&gt;events&lt;/a&gt;&amp;nbsp;that are sourced from the UI widgets within the view.&lt;/div&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;For our sample we have the following Presenters:&lt;/div&gt;&lt;ul style="line-height: 16px; margin-bottom: 0px; margin-left: 15px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;ContactsPresenter&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;EditContactPresenter&lt;/li&gt;
&lt;/ul&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;Just as with the view, the EditContactPresenter will add new contacts as well as editing existing contacts.&lt;/div&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;b&gt;&lt;u&gt;AppController&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;To handle logic that is not specific to any presenter and instead resides at the application layer, we'll introduce the AppController component. This component contains the&amp;nbsp;&lt;a href="http://code.google.com/webtoolkit/articles/mvp-architecture.html#history" style="color: #0000cc;"&gt;history management&lt;/a&gt;&amp;nbsp;and view transition logic. View transition is directly tied to the&amp;nbsp;&lt;a href="http://code.google.com/webtoolkit/articles/mvp-architecture.html#history" style="color: #0000cc;"&gt;history management&lt;/a&gt;&amp;nbsp;and is discussed in greater length below.&lt;/div&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;&lt;a href="http://code.google.com/webtoolkit/articles/mvp-architecture.html"&gt;READ MORE HERE &amp;gt;&amp;gt;&amp;gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;Cheers!&lt;/div&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;PS: I thought this is a very good and instructive article, so I got it from GWT blog site, to be able to expose to more developers :-)&lt;/div&gt;&lt;div style="line-height: 16px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em;"&gt;&lt;br /&gt;
Other interesting resource: &lt;a href="http://www.atomicobject.com/files/PresenterFirstAgile2006.pdf"&gt;Organizing&amp;nbsp;Complex GUI Applications&amp;nbsp;for Test-Driven Development&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-6345122494791653892?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DG6ZbGUGJKz_zTy4nH8bMRP7ERk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DG6ZbGUGJKz_zTy4nH8bMRP7ERk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DG6ZbGUGJKz_zTy4nH8bMRP7ERk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DG6ZbGUGJKz_zTy4nH8bMRP7ERk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/jF3qEo34Z6k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/6345122494791653892/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/05/gwt-large-scale-application-development.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/6345122494791653892?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/6345122494791653892?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/jF3qEo34Z6k/gwt-large-scale-application-development.html" title="GWT - Large scale application development and MVP" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>0</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/05/gwt-large-scale-application-development.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8CR3o7eCp7ImA9WxFSF0Q.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-2280158958574225914</id><published>2010-04-20T21:08:00.008+02:00</published><updated>2010-04-20T21:47:46.400+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-20T21:47:46.400+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WEB" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT-Ext" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="sample" /><category scheme="http://www.blogger.com/atom/ns#" term="GXT" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT 2.0" /><category scheme="http://www.blogger.com/atom/ns#" term="Debug" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="ExtJS" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="GWT Ext" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><category scheme="http://www.blogger.com/atom/ns#" term="GUI" /><title>GXT - How to select items in non-editable ComboBox by pressing keys</title><content type="html">We have a non-editable GXT ComboBox with quite&amp;nbsp;numerous&amp;nbsp;items (100-200), which is hard to select by scrolling (even if they are alphabetically ordered). It would be nice and faster to have the&amp;nbsp;possibility&amp;nbsp;to select items by typing the keys.&amp;nbsp;Unfortunately&amp;nbsp;this feature isn't built-in GXT non-editable combo-box, like it's done for the editable one.&lt;br /&gt;
&lt;br /&gt;
In this case we can fix it by extending the ComboBox class and add to it a key listener and a timer. When we press a key we collect the chars into a buffer and then we look for the item that starts with that text. If we didn't type anything for more than 1 second, then we reset the buffer to allow trying another letters, if the one typed earlier aren't good.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;*** The GXT solution&lt;/b&gt; is the implementation of the selectable combo-box (preferred&amp;nbsp;ordered, but not a mandatory requirement) by keys is presented below:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;public class SccComboBox&amp;lt;D extends ModelData&amp;gt;&lt;d extends="" modeldata=""&gt; extends ComboBox&amp;lt;D&amp;gt;&lt;d&gt;&amp;nbsp;{&lt;/d&gt;&lt;/d&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private final StringBuilder buffer;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private final DelayedTask resetBufferTimer;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/** constructor */&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public SccComboBox () {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffer = new StringBuilder();&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;resetBufferTimer = new DelayedTask(new Listener&amp;lt;BaseEvent&amp;gt;&lt;baseevent&gt;() {&lt;/baseevent&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;@Override&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;public void handleEvent(final BaseEvent be) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;                &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;buffer.delete(0, buffer.length());&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;});&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * {@inheritDoc}&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;@Override&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected void onKeyPress(FieldEvent fe) {&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (isExpanded()) {&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!fe.isSpecialKey()) {&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;buffer.append((char) fe.getKeyCode());&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (fe.getKeyCode() == KeyCodes.KEY_BACKSPACE) {&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;int idx = buffer_.length() - 1;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;if (idx &amp;gt;= 0) {&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; buffer.deleteCharAt(idx);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (D d : store.getModels()) {&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;String v = propertyEditor.getStringValue(d);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;if (v.toLowerCase()&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.startsWith(buffer.toString().toLowerCase())) {&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;select(d);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* timer timeout 1 second */&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; resetBufferTimer.delay(1000);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super.onKeyPress(fe);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * {@inheritDoc}&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;@Override&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public void expand() {&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffer.delete(0, buffer.length());&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super.expand();&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
** &lt;b&gt;The solution for pure GWT implementation&lt;/b&gt;&amp;nbsp;is similar with the above code, but with few small changes. We need to replace the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;DelayedTask &lt;/span&gt;&lt;/span&gt;with my previous pure GWT implementation of the DelayedTask,&amp;nbsp;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Courier New', Courier, monospace; font-size: 13px; line-height: 20px;"&gt;&lt;a href="http://ui-programming.blogspot.com/2010/02/gwt-how-to-implement-delayedtask-in.html"&gt;LastCallBurstEventsMgr&lt;/a&gt;&lt;/span&gt;, like in the below code:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;First of all, remove the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;resetBufferTimer &lt;/span&gt;&lt;/span&gt;local member variable from the SccComboBox, definition and constructor.&lt;/li&gt;
&lt;li&gt;Secondly, at the line &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;/* timer timeout 1 second */&lt;/span&gt;&lt;/span&gt; we replace the next code line with the following ones:&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; /* timer timeout 1 second */&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; LastCallBurstEventMgr.addEvent (new BurstEvent ("reset-buffer-timer", new Function() {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; public void execute () {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&amp;nbsp;          &lt;/span&gt;buffer.delete(0, buffer.length());&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; }, 1000));&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
So, having this logic added to the ComboBox will resolve your "selection in long combo-box" problem.&lt;br /&gt;
&lt;br /&gt;
Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-2280158958574225914?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/X_QMm4N8ZFxH72jsHomZ8bcaIKw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X_QMm4N8ZFxH72jsHomZ8bcaIKw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/X_QMm4N8ZFxH72jsHomZ8bcaIKw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X_QMm4N8ZFxH72jsHomZ8bcaIKw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/3_2uXThqdgg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/2280158958574225914/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/04/gxt-select-item-for-non-editable.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/2280158958574225914?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/2280158958574225914?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/3_2uXThqdgg/gxt-select-item-for-non-editable.html" title="GXT - How to select items in non-editable ComboBox by pressing keys" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>2</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/04/gxt-select-item-for-non-editable.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4FR3gycCp7ImA9Wx9RFU4.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-1188306203547192492</id><published>2010-04-04T21:49:00.004+02:00</published><updated>2010-12-16T23:01:56.698+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-16T23:01:56.698+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="O'Reilly" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="Review" /><category scheme="http://www.blogger.com/atom/ns#" term="Compilation" /><category scheme="http://www.blogger.com/atom/ns#" term="Debug" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><category scheme="http://www.blogger.com/atom/ns#" term="Optimization" /><title>Things Every Programmer Should Know: $25, #26, #27</title><content type="html">&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Arial;"&gt;Here are the 97 Things Every Programmer Should Know project, pearls of wisdom for programmers collected from leading practitioners&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: Times New Roman;"&gt;, published by &lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://programmer.97things.oreilly.com/" target="blank_"&gt;&lt;strong&gt;&lt;span style="font-family: Times New Roman; font-size: small;"&gt;O'Reilly&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;(&lt;a href="http://creativecommons.org/licenses/by/3.0/us/"&gt;license link&lt;/a&gt;).&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;You can go to read the previous very interesting points&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;a href="http://ui-programming.blogspot.com/2010/03/things-every-programmer-should-know-22.html"&gt;#22 #23, #24&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
25. &lt;b&gt;Don't Be Cute with Your Test Data&lt;/b&gt; by Rod Begbie&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 16px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;&lt;i&gt;It was getting late. I was throwing in some placeholder data to test the page layout I'd been working on.&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;&lt;i&gt;I appropriated the members of The Clash for the names of users. Company names? Song titles by the Sex Pistols would do. Now I needed some stock ticker symbols — just some four letter words in capital letters.&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;&lt;i&gt;I used&amp;nbsp;&lt;b&gt;those&lt;/b&gt;&amp;nbsp;four letter words.&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;&lt;i&gt;It seemed harmless. Just something to amuse myself, and maybe the other developers the next day before I wired up the real data source.&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;&lt;i&gt;The following morning, a project manager took some screenshots for a presentation.&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;Programming history is littered with these kinds of war stories. Things that developers and designers did "that no one else would see" which unexpectedly became visible.&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;The leak type can vary but, when it happens, it can be deadly to the person, team, or company responsible. Examples include:&lt;/div&gt;&lt;ul style="line-height: 1.5em; list-style-type: square; margin: 0.3em 0px 0px 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;During a status meeting, a client clicks on an button which is as yet unimplemented. They are told: "Don't click that again, you moron."&lt;/li&gt;
&lt;/ul&gt;&lt;ul style="line-height: 1.5em; list-style-type: square; margin: 0.3em 0px 0px 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;A programmer maintaining a legacy system has been told to add an error dialog, and decides to use the output of existing behind-the-scenes logging to power it. Users are suddenly faced with messages such as "Holy database commit failure, Batman!" when something breaks.&lt;/li&gt;
&lt;/ul&gt;&lt;ul style="line-height: 1.5em; list-style-type: square; margin: 0.3em 0px 0px 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;Someone mixes up the test and live administration interfaces, and does some "funny" data entry. Customers spot a $1m "Bill Gates-shaped personal massager" on sale in your online store.&lt;/li&gt;
&lt;/ul&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;To appropriate the old saying that "a lie can travel halfway around the world while the truth is putting on its shoes," in this day and age a screw-up can be Dugg, Twittered, and Flibflarbed before anyone in the developer's timezone is awake to do anything about it.&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;Even your source code isn't necessarily free of scrutiny. In 2004, when a tarball of the Windows 2000 source code made its way onto file sharing networks, some folks merrily grepped through it for profanity, insults, and&amp;nbsp;&lt;a class="external text" href="http://www.kuro5hin.org/story/2004/2/15/71552/7795" rel="nofollow" style="background-clip: initial; background-image: none; background-origin: initial; color: #3366bb; padding-right: 13px; text-decoration: none;" target="blank_" title="http://www.kuro5hin.org/story/2004/2/15/71552/7795"&gt;other funny content&lt;/a&gt;. (The comment&amp;nbsp;&lt;code style="background-color: #f9f9f9;"&gt;// TERRIBLE HORRIBLE NO GOOD VERY BAD HACK&lt;/code&gt;&amp;nbsp;has, I will admit, become appropriated by me from time to time since!)&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;In summary, when writing any text in your code — whether comments, logging, dialogs, or test data — always ask yourself how it will look if it becomes public. It will save some red faces all round.&lt;/div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
26. &lt;b&gt;Don't Ignore that Error!&lt;/b&gt; by Pete Goodliffe&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 16px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;&lt;i&gt;I was walking down the street one evening to meet some friends in a bar. We hadn't shared a beer in some time and I was looking forward to seeing them again. In my haste, I wasn't looking where I was going. I tripped over the edge of a curb and ended up flat on my face. Well, it serves me right for not paying attention, I guess.&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;&lt;i&gt;It hurt my leg, but I was in a hurry to meet my friends. So I pulled myself up and carried on. As I walked further the pain was getting worse. Although I'd initially dismissed it as shock, I rapidly realized there was something wrong.&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;&lt;i&gt;But I hurried on to the bar regardless. I was in agony by the time I arrived. I didn't have a great night out, because I was terribly distracted. In the morning I went to the doctor and found out I'd fractured my shin bone. Had I stopped when I felt the pain, I'd've prevented a lot of extra damage that I caused by walking on it. Probably the worst morning after of my life.&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;Too many programmers write code like my disastrous night out.&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;&lt;i&gt;Error, what error? It won't be serious. Honestly. I can ignore it.&lt;/i&gt;&amp;nbsp;This is&amp;nbsp;&lt;i&gt;not&lt;/i&gt;&amp;nbsp;a winning strategy for solid code. In fact, it's just plain laziness. (The wrong sort.) No matter how unlikely you think an error is in your code, you should always check for it, and always handle it. Every time. You're not saving time if you don't: You're storing up potential problems for the future.&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;We report errors in our code in a number of ways, including:&lt;/div&gt;&lt;ul style="line-height: 1.5em; list-style-type: square; margin: 0.3em 0px 0px 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;&lt;b&gt;Return codes&lt;/b&gt;&amp;nbsp;can be used as the resulting value of a function to mean "it didn't work." Error return codes are far too easy to ignore. You won't see anything in the code to highlight the problem. Indeed, it's become standard practice to ignore some standard C functions' return values. How often do you check the return value from&amp;nbsp;&lt;code style="background-color: #f9f9f9;"&gt;printf&lt;/code&gt;?&lt;/li&gt;
&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;&lt;b&gt;errno&lt;/b&gt;&amp;nbsp;is a curious C aberration, a separate global variable set to signal error. It's easy to ignore, hard to use, and leads to all sorts of nasty problems — for example, what happens when you have multiple threads calling the same function? Some platforms insulate you from pain here; others do not.&lt;/li&gt;
&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;&lt;b&gt;Exceptions&lt;/b&gt;&amp;nbsp;are a more structured language-supported way of signaling and handling errors. And you can't possibly ignore them. Or can you? I've seen lots of code like this:&lt;/li&gt;
&lt;/ul&gt;&lt;pre style="background-color: #f9f9f9; border-bottom: rgb(47,111,171) 1px dashed; border-left: rgb(47,111,171) 1px dashed; border-right: rgb(47,111,171) 1px dashed; border-top: rgb(47,111,171) 1px dashed; color: black; line-height: 1.1em; padding-bottom: 1em; padding-left: 1em; padding-right: 1em; padding-top: 1em;"&gt;try {
    // ...do something...
}
catch (...) {} // ignore errors
&lt;/pre&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;The saving grace of this awful construct is that it highlights the fact you're doing something morally dubious.&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;If you ignore an error, turn a blind eye, and pretend that nothing has gone wrong, you run great risks. Just as my leg ended up in a worse state than if I'd stopped walking on it immediately, plowing on regardless can lead to very complex failures. Deal with problems at the earliest opportunity. Keep a short account.&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;Not handling errors leads to:&lt;/div&gt;&lt;ul style="line-height: 1.5em; list-style-type: square; margin: 0.3em 0px 0px 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;&lt;b&gt;Brittle code&lt;/b&gt;. Code that's filled with exciting, hard-to-find bugs.&lt;/li&gt;
&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;&lt;b&gt;Insecure code&lt;/b&gt;. Crackers often exploit poor error handling to break into software systems.&lt;/li&gt;
&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;&lt;b&gt;Poor structure&lt;/b&gt;. If there are errors from your code that are tedious to deal with continually, you have probably have a poor interface. Express it so that the errors are less intrusive and the their handling is less onerous.&lt;/li&gt;
&lt;/ul&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;Just as you should check all potential errors in your code, you need to expose all potentially erroneous conditions in your interfaces. Do not hide them, pretending that your services will always work.&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;Why don't we check for errors? There are a number of common excuses. Which of these do you agree with? How would you counter each one?&lt;/div&gt;&lt;ul style="line-height: 1.5em; list-style-type: square; margin: 0.3em 0px 0px 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;Error handling clutters up the flow of the code, making it harder to read, and harder to spot the "normal" flow of execution.&lt;/li&gt;
&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;It's extra work and I have a deadline looming.&lt;/li&gt;
&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;I know that this function call will&amp;nbsp;&lt;i&gt;never&lt;/i&gt;&amp;nbsp;return an error (&lt;code style="background-color: #f9f9f9;"&gt;printf&lt;/code&gt;&amp;nbsp;always works,&amp;nbsp;&lt;code style="background-color: #f9f9f9;"&gt;malloc&lt;/code&gt;&amp;nbsp;always returns new memory — if it fails we have bigger problems...).&lt;/li&gt;
&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;It's only a toy program, and needn't be written to a production-worthy level.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
27. &lt;b&gt;Don't Just Learn the Language, Understand its Culture&lt;/b&gt; by Anders Norås&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 16px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;In high school, I had to learn a foreign language. At the time I thought that I'd get by nicely being good at English so I chose to sleep through three years of French class. A few years later I went to Tunisia on vacation. Arabic is the official language there and, being a former French colony, French is also commonly used. English is only spoken in the touristy areas. Because of my linguistic ignorance, I found myself confined at the poolside reading&amp;nbsp;&lt;i&gt;Finnegans Wake&lt;/i&gt;, James Joyce's tour de force in form and language. Joyce's playful blend of more than forty languages was a surprising albeit exhausting experience. Realizing how interwoven foreign words and phrases gave the author new ways of expressing himself is something I've kept with me in my programming career.&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;In their seminal book,&amp;nbsp;&lt;i&gt;The Pragmatic Programmer&lt;/i&gt;, Andy Hunt and Dave Thomas encourage us to learn a new programming language every year. I've tried to live by their advice and throughout the years I've had the experience of programming in many languages. My most important lesson from my polyglot adventures is that it takes more than just learning the syntax to learn a language: You need to understand its culture.  You can write Fortran in any language, but to truly learn a language you have to embrace the language.  Don't make excuses if your C# code is a long&amp;nbsp;&lt;code style="background-color: #f9f9f9;"&gt;Main&lt;/code&gt;&amp;nbsp;method with mostly&amp;nbsp;&lt;code style="background-color: #f9f9f9;"&gt;static&lt;/code&gt;&amp;nbsp;helper methods, but learn why classes make sense. Don't shy away if you have a hard time understanding the lambda expressions used in functional languages, force yourself to use them. &lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;Once you've learned the ropes of a new language, you'll be surprised how you'll start using languages you already know in new ways.  I learned how to use delegates effectively in C# from programming Ruby, releasing the full potential of .NETs generics gave me ideas on how I could make Java generics more useful, and LINQ made it a breeze to teach myself Scala.&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;You'll also get a better understanding of design patterns by moving between different languages. C programmers find that C# and Java have commoditized the iterator pattern. In Ruby and other dynamic languages you might still use a visitor, but your implementation won't look like the example from the Gang of Four book.&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;Some might argue that&amp;nbsp;&lt;i&gt;Finnegans Wake&lt;/i&gt;&amp;nbsp;is unreadable, while others applaud it for its stylistic beauty. To make the book a less daunting read, single language translations are available. Ironically, the first of these was in French.  Code is in many ways similar. If you write&amp;nbsp;&lt;i&gt;Wakese&lt;/i&gt;&amp;nbsp;code with a little Python, some Java, and a hint of Erlang, your projects will be a mess. If you instead explore new languages to expand your mind and get fresh ideas on how you can solve things in different ways, you will find that the code you write in your trusty old language gets more beautiful for every new language you've learned.&lt;/div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;The 'episodes' #28, #29, #30 will come in the next posting :)&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;Cheers!&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-1188306203547192492?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Wa1HUeUy_t_KZJFsWc5qNy3vcl0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Wa1HUeUy_t_KZJFsWc5qNy3vcl0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Wa1HUeUy_t_KZJFsWc5qNy3vcl0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Wa1HUeUy_t_KZJFsWc5qNy3vcl0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/zIE9IitfI3w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/1188306203547192492/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/04/things-every-programmer-should-know-25.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/1188306203547192492?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/1188306203547192492?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/zIE9IitfI3w/things-every-programmer-should-know-25.html" title="Things Every Programmer Should Know: $25, #26, #27" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>2</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/04/things-every-programmer-should-know-25.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEANRnY9fip7ImA9Wx9RFU4.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-5350626777287297068</id><published>2010-03-28T12:50:00.009+02:00</published><updated>2010-12-16T22:59:57.866+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-16T22:59:57.866+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><category scheme="http://www.blogger.com/atom/ns#" term="Optimization" /><title>Things Every Programmer Should Know: $22, #23, #24</title><content type="html">&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Arial;"&gt;Here are the 97 Things Every Programmer Should Know project, pearls of wisdom for programmers collected from leading practitioners&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: Times New Roman;"&gt;, published by &lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://programmer.97things.oreilly.com/" target="blank_"&gt;&lt;strong&gt;&lt;span style="font-family: Times New Roman; font-size: small;"&gt;O'Reilly&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&lt;span style="color: black; font-family: Times New Roman; font-size: small;"&gt;&amp;nbsp;(&lt;/span&gt;&lt;a href="http://creativecommons.org/licenses/by/3.0/us/" target="blank_"&gt;&lt;span style="font-family: Times New Roman; font-size: small;"&gt;license link&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: Times New Roman;"&gt;)&lt;strong&gt;.&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;You can go to read the previous very interesting points&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;a href="http://ui-programming.blogspot.com/2010/03/things-every-programmer-should-know-19.html"&gt;#19, #20, #21&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
22. &lt;b&gt;Do Lots of Deliberate Practice&lt;/b&gt; by Jon Jagger&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 16px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 16px;"&gt;Deliberate practice is not simply performing a task. If you ask yourself "Why am I performing this task?" and your answer is "To complete the task," then you're not doing deliberate practice.&lt;/span&gt;&lt;br /&gt;
&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;You do deliberate practice to improve your ability to perform a task. It's about skill and technique. Deliberate practice means repetition. It means performing the task with the aim of increasing your mastery of one or more aspects of the task. It means repeating the repetition. Slowly, over and over again. Until you achieve your desired level of mastery. You do deliberate practice to master the task not to complete the task.&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;The principal aim of paid development is to finish a product whereas the principal aim of deliberate practice is to improve your performance. They are not the same. Ask yourself, how much of your time do you spend developing someone else's product? How much developing yourself?&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;How much deliberate practice does it take to acquire expertise?&lt;/div&gt;&lt;blockquote&gt;&lt;ul style="line-height: 1.5em; list-style-type: square; margin: 0.3em 0px 0px 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;Peter Norvig&amp;nbsp;&lt;a class="external text" href="file:///C:/Documents%20and%20Settings/Sorinel/My%20Documents/97programmer/Do_Lots_of_Deliberate_Practice.htm" rel="nofollow" style="background-clip: initial; background-image: none; background-origin: initial; color: #3366bb; padding-right: 13px; text-decoration: none;" title="http://norvig.com/21-days.html" tppabs="http://norvig.com/21-days.html"&gt;writes&lt;/a&gt;&amp;nbsp;that "It may be that 10,000 hours [...] is the magic number."&lt;/li&gt;
&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;In&amp;nbsp;&lt;i&gt;Leading Lean Software Development&lt;/i&gt;&amp;nbsp;Mary Poppendieck notes that "It takes elite performers a minimum of 10,000 hours of deliberate focused practice to become experts."&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;The expertise arrives gradually over time — not all at once in the 10,000th hour! Nevertheless, 10,000 hours is a lot: about 20 hours per week for 10 years. Given this level of commitment you might be worrying that you're just not expert material. You are. Greatness is largely a matter of conscious choice.&amp;nbsp;&lt;i&gt;Your&lt;/i&gt;&amp;nbsp;choice. Research over the last two decades has shown the main factor in acquiring expertise is time spent doing deliberate practice. Innate ability is&amp;nbsp;&lt;i&gt;not&lt;/i&gt;&amp;nbsp;the main factor.&lt;/div&gt;&lt;blockquote&gt;&lt;ul style="line-height: 1.5em; list-style-type: square; margin: 0.3em 0px 0px 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;Mary: "There is broad consensus among researchers of expert performance that inborn talent does not account for much more than a threshold; you have to have a minimum amount of natural ability to get started in a sport or profession. After that, the people who excel are the ones who work the hardest."&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;There is little point deliberately practicing something you are already an expert at. Deliberate practice means practicing something you are&amp;nbsp;&lt;i&gt;not&lt;/i&gt;&amp;nbsp;good at.&lt;/div&gt;&lt;blockquote&gt;&lt;ul style="line-height: 1.5em; list-style-type: square; margin: 0.3em 0px 0px 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;Peter: "The key [to developing expertise] is&amp;nbsp;&lt;i&gt;deliberative&lt;/i&gt;&amp;nbsp;practice: not just doing it again and again, but challenging yourself with a task that is just beyond your current ability, trying it, analyzing your performance while and after doing it, and correcting any mistakes."&lt;/li&gt;
&lt;li style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 0.1em;"&gt;Mary: "Deliberate practice does not mean doing what you are good at; it means challenging yourself, doing what you are not good at. So it's not necessarily fun."&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;Deliberate practice is about learning. About learning that changes you; learning that changes your behavior. Good luck.&lt;/div&gt;&lt;br /&gt;
23. &lt;b&gt;Domain-Specific Languages&lt;/b&gt; by Michael Hunger&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 16px;"&gt;Whenever you listen to a discussion by experts in any domain, be it chess players, kindergarten teachers, or insurance agents, you'll notice that their vocabulary is quite different from everyday language. That's part of what domain-specific languages (DSLs) are about: A specific domain has a specialized vocabulary to describe the things that are particular to that domain.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px; line-height: 16px;"&gt;In the world of software, DSLs are about executable expressions in a language specific to a domain with limited vocabulary and grammar that is readable, understandable, and — hopefully — writable by domain experts. DSLs targeted at software developers or scientists have been around for a long time. For example, the Unix 'little languages' found in configuration files and the languages created with the power of LISP macros are some of the older examples.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DSLs are commonly classified as either internal or external:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Internal DSLs are written in a general purpose programming language whose syntax has been bent to look much more like natural language. This is easier for languages that offer more syntactic sugar and formatting possibilities (e.g., Ruby and Scala) than it is for others that do not (e.g., Java). Most internal DSLs wrap existing APIs, libraries, or business code and provide a wrapper for less mind-bending access to the functionality. They are directly executable by just running them. Depending on the implementation and the domain, they are used to build data structures, define dependencies, run processes or tasks, communicate with other systems, or validate user input. The syntax of an internal DSL is constrained by the host language. There are many patterns — e.g., expression builder, method chaining, and annotation — that can help you to bend the host language to your DSL. If the host language doesn't require recompilation, an internal DSL can be developed quite quickly working side by side with a domain expert.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;External DSLs are textual or graphical expressions of the language — although textual DSLs tend to be more common than graphical ones. Textual expressions can be processed by a tool chain that includes lexer, parser, model transformer, generators, and any other type of post-processing. External DSLs are mostly read into internal models which form the basis for further processing. It is helpful to define a grammar (e.g., in EBNF). A grammar provides the starting point for generating parts of the tool chain (e.g., editor, visualizer, parser generator). For simple DSLs, a handmade parser may be sufficient — using, for instance, regular expressions. Custom parsers can become unwieldy if too much is asked of them, so it makes sense to look at tools designed specifically for working with language grammars and DSLs — e.g., openArchitectureWare, ANTlr, SableCC, AndroMDA. Defining external DSLs as XML dialects is also quite common, although readability is often an issue — especially for non-technical readers.&lt;/li&gt;
&lt;/ul&gt;You must always take the target audience of your DSL into account. Are they developers, managers, business customers, or end users? You have to adapt the technical level of the language, the available tools, syntax help (e.g., intellisense), early validation, visualization, and representation to the intended audience. By hiding technical details, DSLs can empower users by giving them the ability to adapt systems to their needs without requiring the help of developers. It can also speed up development because of the potential distribution of work after the initial language framework is in place. The language can be evolved gradually. There are also different migration paths for existing expressions and grammars available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
24. &lt;b&gt;Don't Be Afraid to Break Things&lt;/b&gt; by Mike Lewis&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 16px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 16px;"&gt;Everyone with industry experience has undoubtedly worked on a project where the codebase was precarious at best. The system is poorly factored, and changing one thing always manages to break another unrelated feature. Whenever a module is added, the coder's goal is to change as little as possible, and hold their breath during every release. This is the software equivalent of playing Jenga with I-beams in a skyscraper, and is bound for disaster.&lt;/span&gt;&lt;br /&gt;
&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;The reason that making changes is so nerve wracking is because the system is sick. It needs a doctor, otherwise its condition will only worsen. You already know what is wrong with your system, but you are afraid of breaking the eggs to make your omelet. A skilled surgeon knows that cuts have to be made in order to operate, but the skilled surgeon also knows that the cuts are temporary and will heal. The end result of the operation is worth the initial pain, and the patient should heal to a better state than they were in before the surgery.&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;Don't be afraid of your code. Who cares if something gets temporarily broken while you move things around? A paralyzing fear of change is what got your project into this state to begin with. Investing the time to refactor will pay for itself several times over the life cycle of your project. An added benefit is that your team's experience dealing with the sick system makes you all experts in knowing how it&amp;nbsp;&lt;i&gt;should&lt;/i&gt;&amp;nbsp;work. Apply this knowledge rather than resent it. Working on a system you hate is not how anybody should have to spend their time.&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;Redefine internal interfaces, restructure modules, refactor copy–pasted code, and simplify your design by reducing dependencies. You can significantly reduce code complexity by eliminating corner cases, which often result from improperly coupled features. Slowly transition the old structure into the new one, testing along the way. Trying to accomplish a large refactor in "one big shebang" will cause enough problems to make you consider abandoning the whole effort midway through.&lt;/div&gt;&lt;div style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.5em; margin: 0.4em 0px 0.5em;"&gt;Be the surgeon who isn't afraid to cut out the sick parts to make room for healing. The attitude is contagious and will inspire others to start working on those cleanup projects they've been putting off. Keep a "hygiene" list of tasks that the team feels are worthwhile for the general good of the project. Convince management that even though these tasks may not produce visible results, they will reduce expenses and expedite future releases. Never stop caring about the general "health" of the code.&lt;/div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;The 'episodes' &lt;span id="goog_1844399667"&gt;&lt;/span&gt;#25, #26, #27&lt;span id="goog_1844399668"&gt;&lt;/span&gt;&amp;nbsp;come in the &lt;a href="http://ui-programming.blogspot.com/2010/04/things-every-programmer-should-know-25.html"&gt;next posting&lt;/a&gt; :)&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;Cheers!&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8512530298255458214-5350626777287297068?l=ui-programming.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MnkfOUXBwYVH8dgwwpSfTfnGHow/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MnkfOUXBwYVH8dgwwpSfTfnGHow/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MnkfOUXBwYVH8dgwwpSfTfnGHow/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MnkfOUXBwYVH8dgwwpSfTfnGHow/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GwtExtSwingAnyGuis/~4/U9POzDPqnxw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ui-programming.blogspot.com/feeds/5350626777287297068/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ui-programming.blogspot.com/2010/03/things-every-programmer-should-know-22.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/5350626777287297068?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8512530298255458214/posts/default/5350626777287297068?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GwtExtSwingAnyGuis/~3/U9POzDPqnxw/things-every-programmer-should-know-22.html" title="Things Every Programmer Should Know: $22, #23, #24" /><author><name>SCC</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="29" src="http://1.bp.blogspot.com/_gZXNW3qKT34/TGfJIArnnaI/AAAAAAAAAWY/vGHjd5lO6g4/S220/simple+human+3.PNG" /></author><thr:total>0</thr:total><feedburner:origLink>http://ui-programming.blogspot.com/2010/03/things-every-programmer-should-know-22.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEENQn8zeyp7ImA9Wx9RFU4.&quot;"><id>tag:blogger.com,1999:blog-8512530298255458214.post-2777039876973150278</id><published>2010-03-23T23:44:00.004+01:00</published><updated>2010-12-16T22:58:13.183+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-16T22:58:13.183+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="O'Reilly" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="Review" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Debug" /><category scheme="http://www.blogger.com/atom/ns#" term="How To" /><category scheme="http://www.blogger.com/atom/ns#" term="sample" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="Developement" /><category scheme="http://www.blogger.com/atom/ns#" term="Optimization" /><title>Things Every Programmer Should Know: $19, #20, #21</title><content type="html">&lt;span style="font-family: Arial;"&gt;Here are the 97 Things Every Programmer Should Know project, pearls of wisdom for programmers collected from leading practitioners&lt;/span&gt;&lt;strong&gt;, published by &lt;/strong&gt;&lt;a hr
