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

<channel>
	<title>WebTigers &#187; Articles</title>
	<atom:link href="http://webtigers.net/category/articles/feed/" rel="self" type="application/rss+xml" />
	<link>http://webtigers.net</link>
	<description>Professional UI</description>
	<lastBuildDate>Wed, 07 Jul 2010 21:49:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Finding A Good UI Developer</title>
		<link>http://webtigers.net/articles/finding-a-good-ui-developer/</link>
		<comments>http://webtigers.net/articles/finding-a-good-ui-developer/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 18:25:34 +0000</pubDate>
		<dc:creator>K. Beau Beauchamp</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Featured]]></category>

		<guid isPermaLink="false">http://webtigers.net/?p=137</guid>
		<description><![CDATA[The UI, User Interface, of an application is all to often the most overlooked aspect of a project; which is odd because it is the most visible aspect of a project and it&#8217;s one of those critical &#8220;first impression&#8221; aspects that can make or break a product&#8217;s sale.
The UI, if it&#8217;s well engineered, can shine [...]]]></description>
			<content:encoded><![CDATA[<p>The UI, <em>User Interface</em>, of an application is all to often the most overlooked aspect of a project; which is odd because it is the most visible aspect of a project and it&#8217;s one of those critical &#8220;first impression&#8221; aspects that can make or break a product&#8217;s sale.</p>
<p>The UI, if it&#8217;s well engineered, can shine a light on how professional the rest of your team&#8217;s efforts have been. Likewise, a badly designed UI can cast a shadow over what might otherwise be a really great application.</p>
<p>But before we learn how to find a good UI professional, it makes sense to understand what UI is and how it fits into a truly professional product.</p>
<h2 class="subhead">Understanding Professional UI</h2>
<p>You can assemble a world class Java / Oracle team who just built the most amazing technology, but if your UI has been an after thought, bad UI can make all that high-end technology look like it was written by a bunch of amateurs.</p>
<h3 class="subhead">Not Just Another Pretty Face</h3>
<p>The days of being able to use your Java or .NET people to build UI are over, actually they were over years ago, but sometimes it takes time for the rest of the development world to catch up to the technical realities.</p>
<div class="inset_left">&#8220;UI is more than just nice looking graphics.&#8221;</div>
<p>Today&#8217;s UI developers are highly skilled, multi-disciplined specialists trained and experienced to not just add nice graphics and code HTML, but functionally design and improve how the application &#8220;interacts&#8221; with the end-user.</p>
<p>Professional UI is more than just nice looking graphics.</p>
<p>I recently worked with an IT manager of a major US corporation who told me, <em>&#8220;We need to put some serious lipstick on this.&#8221;</em> The problem wasn&#8217;t really their graphics, it was their workflow that needed a serious update and reworking. No amount of &#8220;lipstick&#8221; I could come up with was going to fix a blatantly bad design. They had let their Java staff design how the application would behave and it caused some serious confusion for the end users.</p>
<h2 class="subhead">Awesome UI Is Not The Easy Path</h2>
<p>The problem is that your users don&#8217;t think like programmers, and programmers usually don&#8217;t spend a lot of time thinking about, <em>&#8220;Now, how can I make this easier for others to use?&#8221;</em> No, generally their thought is, <em>&#8220;How can I make this easier for me to code.&#8221;</em></p>
<p>It&#8217;s this kind of situation that results in a poorly designed amateur UI.</p>
<p>Well designed UI is not always easy to code. It requires that you take the time to really think through the user experience and workflow, always asking the question: <em>&#8220;Now, how would our users really like to see this work?&#8221;</em> Sometimes a quick DHTML pop-up or slide-down form is what would make the user experience much more smooth; but it takes a bit more time to build these little Web 2.0 gems than it would be to &#8220;force&#8221; your user to a whole new page or code and ugly pop-up browser window.</p>
<h3 class="subhead">First Things First</h3>
<p>The basic problem with using back-end developers to build the front-end part of the application is that typically the back-end people can really only think like back-end developers, not end-users. The Java guy starts the application development process by building a database. <em>That</em> is exactly the wrong way to approach an application.</p>
<p>An application that will exhibit professional UI should always begin with the public interface development first. Whether you prefer to use wireframe documents or just rough-code some HTML pages out of the gate, these initial interfaces will be crucial in determining what functionality fires and when; and what, exactly, needs to ultimately get persisted in the database and in what tables.</p>
<p>Ultimately, building projects this way allows for much better documentation,  it saves a lot of time and streamlines the effort for the back-end guys.</p>
]]></content:encoded>
			<wfw:commentRss>http://webtigers.net/articles/finding-a-good-ui-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YUI: getElementsBy</title>
		<link>http://webtigers.net/articles/yui-getelementsby/</link>
		<comments>http://webtigers.net/articles/yui-getelementsby/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 01:10:50 +0000</pubDate>
		<dc:creator>K. Beau Beauchamp</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://webtigers.net/?p=13</guid>
		<description><![CDATA[YUI is one of the most powerful Javascript frameworks in existence today. Yet, far too many UI programmers are unaware of this true full-stack JavaScript framework and its amazing capabilities. Beau Beaucahmp discusses one of the more powerful DOM functions of the YUI library: the very cool getElementsBy DOM function.
Super-Awesome Power At Your Fingertips
If you&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>YUI is one of the most powerful Javascript frameworks in existence today. Yet, far too many UI programmers are unaware of this true <a href="http://webtigers.net/javascript/enterprise-javascript/">full-stack JavaScript framework</a> and its amazing capabilities. Beau Beaucahmp discusses one of the more powerful DOM functions of the YUI library: the very cool <code>getElementsBy</code> DOM function.</p>
<h2 class="subhead">Super-Awesome Power At Your Fingertips</h2>
<p>If you&#8217;ve been programming in UI for any length of time then you&#8217;re familiar with Javascript&#8217;s built-in <code>getElementById</code> function that is used to return a single element within the DOM tree by simply passing in the element&#8217;s ID. YUI&#8217;s <code>getElementsBy</code> is quite simply <code>getElementById</code> on some serious steroids. Not only does this powerful function allow you to snap-up a single element, but it can grab a whole array of elements chosen and filtered any way you like, all in a single call.</p>
<p>But wait, there&#8217;s more! <code>getElementsBy</code> also allows you to manipulate each of the elements within your array with an optional function you supply!</p>
<h3 class="subhead">Setting-up Your Page to Use YUI</h3>
<p>First you&#8217;ll need to download and copy the core YUI files to a directory on your site. I usually like to have a <code>/javascrpt</code> or <code>/js</code> folder inside my document root that holds all of my JavaScript files. The core YUI files you&#8217;ll need will be found inside the <code>/yui/build</code> directory. I like to copy YUI&#8217;s <code>/build</code> folder to my <code>/javascript</code> folder and rename<code> /build</code> to<code> /yui</code> for convenience.</p>
<p>Now add for following code inside the <code>&lt;head&gt; ... &lt;/head&gt;</code> tags of your page:</p>
<pre class="brush:html"><script src="/yui/yahoo-dom-event/yahoo-dom-event.js"></script></pre>
<p>or you can have your page load the YUI files directly from YAHOO! using this script tag instead of the one above:</p>
<pre class="brush:js"><script src="http://yui.yahooapis.com/2.8.1/build/yahoo-dom-event/yahoo-dom-event.js"></script></pre>
<p>Now you&#8217;ll have all of the various YUI Core, DOM and Events functions at your command. Let&#8217;s look at what the <code>getElementsBy</code> function params look like:</p>
<pre class="brush:js">var Dom = YAHOO.util.Dom;
var els = Dom.getElementsBy(
    function(el){ ... },
        tagname,
        parentroot,
        function(el){ ... }
);
</pre>
<p>All of the YUI functions live in the YAHOO namespace. As such, I like to pair down my code by assigning all of the Dom and Event functions to a simple reference var, like Dom. This way, I can access the YUI DOM functions with a simple <code>Dom.getElementsBy()</code> as we see in line 2.</p>
<p>Note that <code>getElementsBy</code> can work with or without returning anything. If you do return elements, note that unlike <code>getElementById</code>, <code>getElementsBy</code> always returns an <code>array()</code> of elements. Even if you will only be returning a single element, keep in mind that it will be referenced as <code>els[0]</code>.</p>
<p>Line 3 is where the real fun begins. You begin gathering your elements with a simple boolean function that returns true or false. Let&#8217;s say I want to toggle a check or uncheck for every checkbox within a form. A good boolean function to use here would be <code>return (el.type == 'checkbox');</code>. Notice that <code>el</code> is an element that will get passed into this function to be tested. If the element has the attribute of <code>type="checkbox"</code> the function will return true and add the element to our <code>els</code> array.</p>
<p>Notice that only the first attribute of <code>getElementsBy</code> is necessary. The second and third parameters can be set to <code>null</code>. However, setting these parameters to <code>null</code> will cause <code>getElementsBy</code> to process EVERY ELEMENT on the page! This is not very efficient, especially for really large pages. That&#8217;s where the second and third parameters of this function come in handy. In line 4 of our code we can specify a specific tag name, such as <code>input</code>. In this way, the <code>getElementsBy</code> function will ignore all elements except input elements which it will then pass to the boolean function we built in the previous paragraph.</p>
<p>Even with this optimization, you still might want to further define where to begin your elements search. <code>getElmentsBy</code> allows you to optionally specify a third parameter, a root parent element to search within. If all of the elements you need to process are the children of a specific div for instance, passing in the ID string or element reference of the containing parent will limit even further where within the DOM <code>getElementsBy</code> needs to look.</p>
<p>So, with these three parameters supplied to our <code>getElmentsBy</code> function, we can collect a very specific set of elements, in our sample case we&#8217;re looking for all of the checkboxes, anywhere within the DOM of our page.</p>
<h2 class="subhead">Putting getElementsBy to Work</h2>
<p>Here&#8217;s where <code>getElmentsBy</code> becomes a real time saver. Normally, once you have built your array, you&#8217;d need to write code that loops through each of the elements within your array to do something with each element of the array; in our case we&#8217;re setting the checkbox elements to either be checked or unchecked. So why not just apply whatever function to each element as it is being added to the array built by <code>getElmentsBy</code>? Brilliant!</p>
<p>The final param of the <code>getElmentsBy</code> function is designed to do just that. Using this optional function, we can apply code to each of the elements being added to our final array. And we&#8217;re not just limited to checking or un-checking chekcboxes here. <em>Anything</em> you can do inside a function can be applied to any, all or some of the array elements. </p>
<p>Use this final function to selectively add an event listener, set element values and/or attributes (which is what we&#8217;re going to do with our checkboxes), or whatever.</p>
<pre class="brush:js">var Dom = YAHOO.util.Dom;
var els = Dom.getElementsBy(
    function(el){
        return ( el.type === 'checkbox' );
    },
    'input',
    'myform',
    function(el){
        el.checked === true;
    }
);
</pre>
<h2 class="subhead">One Call Does It All</h2>
<p>So let&#8217;s show a simple function using <code>getElmentsBy</code> that checks or un-checks all of the checkboxes on a form.</p>
<p>Here&#8217;s the example:</p>
<div class="example">
<p><script type="text/javascript">// <![CDATA[
      	var Dom = YAHOO.util.Dom; 	function toggleCheckboxes(ref){ 		Dom.getElementsBy( 			function(el){ return(el.type == 'checkbox'); }, 			'input', 			'myform', 			function(el){ el.checked = ref.checked; } 		); 	}
// ]]&gt;</script></p>
<form id="myform">
<input onclick="toggleCheckboxes(this);" name="ref" type="checkbox" /><label for="ref">Click me</label></p>
<input name="check1" type="checkbox" value="1" /><label for="check1">One</label></p>
<input name="check2" type="checkbox" value="2" /><label for="check2">Two</label></p>
<input name="check3" type="checkbox" value="3" /><label for="check3">Three</label></p>
<input name="check4" type="checkbox" value="4" /><label for="check4">Four</label></p>
<input name="check5" type="checkbox" value="5" /><label for="check5">Five</label></p>
</form>
</div>
<p>and here&#8217;s the code:</p>
<pre class="brush:html">
<script src="http://yui.yahooapis.com/2.8.1/build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript">
    var Dom = YAHOO.util.Dom;
    function toggleCheckboxes(ref){
        Dom.getElementsBy(
            function(el){ return(el.type == 'checkbox'); },
            'input',
            'myform',
            function(el){ el.checked = ref.checked; }
        );
    }
</script>
<form id="myform">
<input onclick="toggleCheckboxes(this);" name="ref" type="checkbox" /><label for="ref">Click me</label>
<input name="check1" type="checkbox" value="1" /><label for="ref">One</label>
<input name="check2" type="checkbox" value="2" /><label for="ref">Two</label>
<input name="check3" type="checkbox" value="3" /><label for="ref">Three</label>
<input name="check4" type="checkbox" value="4" /><label for="ref">Four</label>
<input name="check5" type="checkbox" value="5" /><label for="ref">Five</label>
    </form>
</pre>
<p>Copy and save the page as myfile.html to see how it works!</p>
<h2 class="subhead">Conclusion</h2>
<p>While other JavaScript libraries indeed have similar functions, I really like the inherent flexibility of <code>getElementsBy</code>. The beauty of YUI is that it works like JavaScript is supposed to work, it&#8217;s written they way JavaScript is written. And you don&#8217;t have to memorize a whole new syntax or funky var language to use the power of YUI.</p>
<p>____________________________</p>
<p><em>K. Beau Beauchamp is a professional UI developer with over 15 year&#8217;s experience in graphic design, marketing communications and object-oriented UI programming. Beau can be contacted via email <a href="http://webtigers.net/contact/">here</a>.</em></p>
<h2 class="subhead" style="text-align: center;"><span style="color: #999999;">&#x0416;</span></h2>
]]></content:encoded>
			<wfw:commentRss>http://webtigers.net/articles/yui-getelementsby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Elegant CSS</title>
		<link>http://webtigers.net/css/elegant-css/</link>
		<comments>http://webtigers.net/css/elegant-css/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 21:12:54 +0000</pubDate>
		<dc:creator>K. Beau Beauchamp</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://webtigers.net/?p=152</guid>
		<description><![CDATA[Coming soon &#8230; The basics of elegant CSS.
]]></description>
			<content:encoded><![CDATA[<p>Coming soon &#8230; The basics of elegant CSS.</p>
]]></content:encoded>
			<wfw:commentRss>http://webtigers.net/css/elegant-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building Secure UI</title>
		<link>http://webtigers.net/articles/building-secure-ui/</link>
		<comments>http://webtigers.net/articles/building-secure-ui/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 18:42:20 +0000</pubDate>
		<dc:creator>K. Beau Beauchamp</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Featured]]></category>

		<guid isPermaLink="false">http://webtigers.net/?p=148</guid>
		<description><![CDATA[Coming soon &#8230; A discussion of how to build a more secure UI.
]]></description>
			<content:encoded><![CDATA[<p>Coming soon &#8230; A discussion of how to build a more secure UI.</p>
]]></content:encoded>
			<wfw:commentRss>http://webtigers.net/articles/building-secure-ui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
