<?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>Yahoo! User Interface Blog (YUIBlog) &#187; YUI Implementations</title>
	<atom:link href="http://www.yuiblog.com/blog/index.php/category/yui-implementations/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.yuiblog.com/blog</link>
	<description>The official blog of the YUI Project.</description>
	<lastBuildDate>Thu, 02 Sep 2010 15:16:04 +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>Using YUI 2 on the DuckDuckGo Search Engine</title>
		<link>http://www.yuiblog.com/blog/2010/08/19/yui-at-duckduckgo/</link>
		<comments>http://www.yuiblog.com/blog/2010/08/19/yui-at-duckduckgo/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 13:41:07 +0000</pubDate>
		<dc:creator>Gabriel Weinberg</dc:creator>
				<category><![CDATA[YUI Implementations]]></category>

		<guid isPermaLink="false">http://www.yuiblog.com/blog/?p=2459</guid>
		<description><![CDATA[
DuckDuckGo is a search engine that uses YUI extensively. Here&#8217;s what it uses in particular:


ImageLoader. Matt Mlinac&#8217;s YUI 2 ImageLoader was the first thing I implemented and what originally hooked me on YUI for this project. DuckDuckGo has favicons next to results and often has &#8220;Zero-click Info&#8221; above results that usually includes an image. I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://duckduckgo.com/?q=yui+library"><img src="http://yuiblog.com/assets/duckduckgo-20100817-115307.jpg"></a></p>
<p><a href="http://duckduckgo.com/">DuckDuckGo</a> is a search engine that uses YUI extensively. Here&#8217;s what it uses in particular:</p>
<ul>
<li>
<p><i>ImageLoader</i>. Matt Mlinac&#8217;s <a href="http://developer.yahoo.com/yui/imageloader/" title="YUI 2: ImageLoader">YUI 2 ImageLoader</a> was the first thing I implemented and what originally hooked me on YUI for this project. DuckDuckGo has favicons next to results and often has &#8220;Zero-click Info&#8221; above results that usually includes <a href="http://duckduckgo.com/Yahoo!_UI_Library">an image</a>. I didn&#8217;t want these images to compete with the results when loading, as getting results as fast as possible is the ultimate goal.</p>
<p>The ImageLoader Utility handles this well by loading the images after the page load. DDG also auto-loads the next page of results when you scroll down. Sometimes the favicons icons are therefore hidden, and with ImageLoader their load is delayed (sometimes indefinitely) until necessary. To accomplish this, there is a different image group per (internal) page, each with its own custom trigger.</p>
<pre>div.event=new YAHOO.util.CustomEvent('it');
    var ig1=new YAHOO.util.ImageLoader.group(div,'click');
    ig1.addCustomTrigger(div.event);
    div.ig = ig1;
</pre>
<li>
<p><i>Cookie</i>. DuckDuckGo has a lot of <a href="http://duckduckgo.com/settings.html">settings</a>, which are stored via cookies and alternately via  <a href="http://duckduckgo.com/params.html">URL params</a>. When cookies are used, I use Nicholas Zakas&#8217;s <a href="http://developer.yahoo.com/yui/cookie/" title="YUI 2: Cookie Utility">YUI 2 Cookie Utility</a> to easily get and set the values.</p>
<pre>  YAHOO.util.Cookie.set(cookie, value, { expires: new Date("January 12, 2025") });
  x=ki||YAHOO.util.Cookie.get("i");</pre>
<li>
<p><i>StyleSheet</i>. Some DDG settings change the look and feel of the site. These changes are actually accomplished after page load via Luke Smith&#8217;s <a href="http://developer.yahoo.com/yui/stylesheet/" title="YUI 2: StyleSheet Utility">YUI 2 StyleSheet Utility</a>. Some of these changes are straightforward and I can just use the <a href="http://developer.yahoo.com/yui/docs/YAHOO.util.Dom.html#method_setStyle" title="API: dom  YAHOO.util.Dom   (YUI Library)"><code>setStyle</code> Dom function</a>.</p>
<pre>YAHOO.util.Dom.setStyle('b2','display','block');</pre>
<p>Others require actual class changes, which I use the utility to do.</p>
<pre>YAHOO.util.StyleSheet('DDG').set('.ci', {display: "block"}).
            set('.cid', {display: "block"}).
            set('.ci2', {display: "block"}).
            enable();</pre>
<li>
<p><i>Dom</i>. I also use some functions in Matt Sweeney&#8217;s base <a href="http://developer.yahoo.com/yui/dom/" title="YUI 2: Dom Collection">YUI 2 Dom component</a>. I referenced <code>setStyle</code> above, and I also use the related <code>getStyle</code>, <code>addClass</code> and <code>removeClass</code> functions. In addition, I find the <code>getViewportHeight</code>, <code>getViewportWidth</code>, <code>getX</code> and <code>getY</code> functions to be incredibly useful to make things work cross-browser, and now on mobile screens as well.</p>
<li>
<p><i>KeyListener</i>. DDG has a bunch of <a href="http://duckduckgo.com/goodies.html">keyboard shortcuts</a> that let you navigate results without the mouse. I use the <a href="http://developer.yahoo.com/yui/docs/YAHOO.util.KeyListener.html" title="API: event  YAHOO.util.KeyListener   (YUI Library)">YUI 2 KeyListener</a> component to enable these shortcuts.</p>
<pre>kl14 = new YAHOO.util.KeyListener(document, { keys:[70] }, { fn:not } );kl14.enable();</pre>
<li>
<p><i>AutoComplete</i>. I&#8217;m currently working on adding search suggestions to the search engine, and will be using Jenny Donnelly&#8217;s <a href="http://developer.yahoo.com/yui/autocomplete/" title="YUI 2: AutoComplete">YUI 2 AutoComplete</a> component for the front-end. I understand that AutoComplete is getting introduced in YUI 3 soon. Everything else I use has already been introduced in YUI 3, though I still use YUI 2. However, I will be exploring the migration to YUI 3 soon.</p>
</ul>
<p class="authorbox"><em><img align="right" hspace="20" vspace="5" src="http://yuiblog.com/assets/gabrielweinberg.jpg"><strong>About the author:</strong> Gabriel Weinberg is the founder of the DuckDuckGo search engine, based out of Valley Forge, PA. Gabriel has been a startup founder for over ten years, and his last company was sold in 2006. Gabriel holds degrees from MIT in Physics and the Technology and Policy Program.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2010/08/19/yui-at-duckduckgo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Implementing YUI on the Assembla.com Agile Planner</title>
		<link>http://www.yuiblog.com/blog/2010/08/18/yui3-at-assembla/</link>
		<comments>http://www.yuiblog.com/blog/2010/08/18/yui3-at-assembla/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 14:35:45 +0000</pubDate>
		<dc:creator>Joachim Larsen</dc:creator>
				<category><![CDATA[YUI Implementations]]></category>

		<guid isPermaLink="false">http://www.yuiblog.com/blog/?p=2453</guid>
		<description><![CDATA[
Fast and fun – that was the user requirement for the new Assembla.com Agile Planner – an AJAX interface for adding development tasks, building story/feature outlines, and scheduling them into releases.  We were lucky to have YUI 3 to make it fast and fun to implement as well.
I had used YUI 2 for a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.assembla.com/assemblablog/tabid/12618/bid/12940/Upgraded-Agile-Planner-for-Fast-Fun-Roadmapping.aspx" title="Upgraded Agile Planner for Fast, Fun Roadmapping"><img src="http://yuiblog.com/assets/assembla-20100818-072550.jpg"></a></p>
<p>Fast and fun – that was the user requirement for <a href="http://blog.assembla.com/assemblablog/tabid/12618/bid/12940/Upgraded-Agile-Planner-for-Fast-Fun-Roadmapping.aspx" title="Upgraded Agile Planner for Fast, Fun Roadmapping">the new Assembla.com Agile Planner</a> – an AJAX interface for adding development tasks, building story/feature outlines, and scheduling them into releases.  We were lucky to have <a href="http://developer.yahoo.com/yui/3/" title="YUI 3 &mdash; Yahoo! User Interface Library">YUI 3</a> to make it fast and fun to implement as well.</p>
<p>I had used <a href="http://developer.yahoo.com/yui/2/" title="YUI 2 &mdash; Yahoo! User Interface Library">YUI 2</a> for a number of prior projects and I had been impressed by the engineering of the UI components and the underlying library infrastructure. I wanted to learn more about YUI 3, with its compact syntax and deeper focus on DOM manipulation and CSS3-style selectors.   This project, with a low dependence on &#8216;prebuilt widgets,&#8217; was a perfect opportunity to get my feet wet with YUI 3.  The facilities for &#8216;large app&#8217; implementation via custom modules and integration with YUI loader made it a natural choice.</p>
<p>The Agile Planner supports a number of drag and drop user interactions with multiple interaction groups and context based behaviors. At the same time, it handles a complex set of interactions with the server, including merging in new data from the server, and propagating changes to the server.</p>
<p>We improved on the existing Planner which was based on Rails handlers and Prototype.js.  YUI&#8217;s sandbox philosophy and strong OOP facilities made coexisting with Prototype.js a breeze.</p>
<p>We used a large number of YUI components, including:</p>
<ul>
<li>Async-Queue to offer a responsive experience on a page that can involve 1000+ simultaneous tickets</li>
<li>Drag and Drop with interaction groups. </li>
<li>IO as a connection manager to queue and massage server interaction.</li>
<li>Event-delegate to allow simply hydrating html templates and forgetting about them.</li>
<li>Event-key for keyboard interaction and navigation.</li>
<li>Collection for giving us a consistent implementation experience across browsers.</li>
<li>Cookie for easy short-term UI persistence. </li>
<li>Profiler to find the biggest speed gains</li>
<li>YUI Doc to leave information for the rest of the team</li>
</ul>
<p>Working with YUI 3 on an app like this has been fun, and I am looking forward to hearing what our users will urge us to do next!</p>
<p class="authorbox"><em><strong>About the author:</strong> Joachim Larsen is a frontend engineer with Assembla.com.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2010/08/18/yui3-at-assembla/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Implementation Focus: Demeter</title>
		<link>http://www.yuiblog.com/blog/2010/06/07/implementation-focus-demeter/</link>
		<comments>http://www.yuiblog.com/blog/2010/06/07/implementation-focus-demeter/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 16:21:41 +0000</pubDate>
		<dc:creator>Jenny Han Donnelly</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[YUI Implementations]]></category>
		<category><![CDATA[CellEditor]]></category>
		<category><![CDATA[datatable]]></category>
		<category><![CDATA[inline editing]]></category>

		<guid isPermaLink="false">http://www.yuiblog.com/blog/?p=2225</guid>
		<description><![CDATA[

 Niko Ni is an experienced Frontend Engineer with over 5 years of web development experience located in Shanghai, China. He is currently working for Genesys Conferencing (now part of InterCall). He has been concentrating on building Ajax apps based on JavaEE or LAMP and contributing to some open source projects during his free time.



Tell [...]]]></description>
			<content:encoded><![CDATA[<div class="interview">
<div class="intro"><em></p>
<p><img src="http://yuiblog.com/assets/demeter/nikoni.png" width="100" height="129" hspace="10" vspace="5" align="right" alt="Niko Ni of GenMC Demeter"> <a href="http://github.com/bluepower" target="_blank" title="Niko Ni">Niko Ni</a> is an experienced Frontend Engineer with over 5 years of web development experience located in Shanghai, China. He is currently working for <a href="http://www.genesys.com/" target="_blank">Genesys Conferencing</a> (now part of <a href="http://www.intercall.com" target="_blank">InterCall</a>). He has been concentrating on building Ajax apps based on JavaEE or LAMP and contributing to some <a href="http://github.com/bluepower" target="_blank">open source</a> <a href="http://cz9908.com/showcase/?item=showcase-list&#038;p=1" target="_blank">projects</a> during his free time.
</p>
<p></em></div>
<p><img src="http://yuiblog.com/assets/demeter/genmcdemeter-image1.png" width="510" height="315"></p>
<h3>Tell us a little about your project.</h3>
<p>&#8220;Demeter&#8221; is the codename for a recent web 2.0 application we built which provides powerful solutions to web conferencing, ad hoc meeting, and account management. Currently we have two major product suites: &#8220;Meeting Center&#8221; and &#8220;Admin Module&#8221;.</p>
<p>Although it&#8217;s still in RC phrase with no public access to view it,  I have extracted a <a href="http://cz9908.com/blog/Niko-weblog-labs/lab-YUI/for-example/yui2-datatable-simple-extention/demo-edit-properties.html" target="_blank">prototype of the Admin Module</a> that demonstrates the management of portal properties.</p>
<p><img src="http://yuiblog.com/assets/demeter/genmcdemeter-image2.png" width="510" height="310"></p>
<h3>Which components of the YUI Library are used in your project?</h3>
<p>When we were initially trying to decide which JS framework and UI library to use, there were three things that sold us on YUI: the great documentation, the wide variety of mature widgets, and the BSD license, so I introduced YUI to my company. The following modules are used in our project: </p>
<ul>
<li><strong>CSS:</strong> Reset, Fonts</li>
<li><strong>Core:</strong> YAHOO, Dom, Event</li>
<li><strong>Utilities:</strong> Connection Manager, DataSource, Element, JSON</li>
<li><strong>Widgets:</strong> Calendar, Container, DataTable</li>
<li><strong>Tools:</strong> Logger, Test</li>
</ul>
<h3>Admin module implementation overview</h3>
<p>Our main requirements for the Admin module included:</p>
<ul>
<li>datatable with a customized editor popup</li>
<li>theme/skin customization</li>
<li>browser compatibility</li>
</ul>
<p>Here is the simple markup that sets up the UI:</p>
<pre>
    &lt;div id="datatable-ux"&gt;
		&lt;div id="datatable-ux-hd"&gt;&lt;/div&gt;

		&lt;div id="datatable-ux-bd"&gt;
			&lt;div id="node-depths" style="display: none"&gt;root  &gt; Testing  &gt; 5_Dev Testing BA  &gt; 80000_1010&lt;/div&gt;

			&lt;div id="output"&gt;&lt;/div&gt;
			&lt;div id="yui-datatable" class="yui-dt"&gt;
			  &lt;img src="images/icon-loading.gif" alt="loading" align="absmiddle" style="margin: 30px 0;" /&gt; loading data...
			&lt;/div&gt;
		&lt;/div&gt;

		&lt;div id="datatable-ux-ft"&gt;&lt;/div&gt;
    &lt;/div&gt;

	&lt;div id="node-apply-wrap" style="display: none;"&gt;
		&lt;fieldset&gt;
			&lt;legend&gt;Apply to&lt;/legend&gt;

			&lt;input type="radio" name="node-apply" checked="checked" /&gt;Current node only&lt;br /&gt;
			&lt;input type="radio" name="node-apply" /&gt;Current node and child nodes&lt;br /&gt;
			&lt;input type="radio" name="node-apply" /&gt;Child nodes only
		&lt;/fieldset&gt;
	&lt;/div&gt;
</pre>
<p>Here is a code snippet of the simple extension I built for DataTable TextboxCellEditor:</p>
<pre>
   // simple example to extend the CellEditor Classes
   // short alias
   var lang = YAHOO.lang,
	  util = YAHOO.util,
	  widget = YAHOO.widget,
	  Dom = util.Dom,
	  Event = util.Event;

   // extend TextboxCellEditor
   Gcc.admin.TextboxCellEditor = function(config) {
	   Gcc.admin.TextboxCellEditor.superclass.constructor.call(this, config);
   };
   lang.extend(Gcc.admin.TextboxCellEditor, widget.TextboxCellEditor, {
	   renderForm : function() {
		   Gcc.admin.TextboxCellEditor.superclass.renderForm.call(this);

		   var oHd = document.createElement('DIV');
		   this.getContainerEl().insertBefore(oHd, this.textbox);
		   oHd.id = container.id + '-admin-editor-head';
		   Dom.addClass(oHd, 'admin-editor-hd');

		   var oCurrNode = document.createElement('DIV');
		   this.getContainerEl().insertBefore(oCurrNode, this.textbox);
		   oCurrNode.innerHTML = 'Current node: ' + Dom.get('node-depths').innerHTML;
		   Dom.addClass(oCurrNode, 'admin-editor-pd');

		   var oApply = document.createElement('DIV');
		   this.getContainerEl().appendChild(oApply);
		   oApply.innerHTML = Dom.get('node-apply-wrap').innerHTML;
		   Dom.addClass(oApply, 'admin-editor-fieldset');
	   },

	   move : function() {
		   Gcc.admin.TextboxCellEditor.superclass.move.call(this);
		   Dom.addClass(this.textbox, 'admin-editor-pd');
	   }
   });
</pre>
<p>Then a cellClickEvent handler detects the underlying type of data value being edited and calls one of the customized cell editors.</p>
<p><img src="http://yuiblog.com/assets/demeter/genmcdemeter-image3.png" width="510" height="381"></p>
<p>With our server architecture consisting of the Apache Struts framework and the application container Weblogic, we found that YUI plays a good companion role as the &#8220;Clientside-Controller&#8221; and works well with Struts action results as a dynamic datasource.</p>
<pre>
&lt;%@ page pageEncoding="UTF-8" contentType="application/json; charset=UTF-8" %&gt;
&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;
{"PropertySet":{
"Property":[
&lt;s:iterator value="displayPropertyResultList" status="index"&gt;;
    {
    "Id":"&lt;s:property value="id" /&gt;",
    "Name":"&lt;s:property value="name" /&gt;",
    "Type":"&lt;s:property value="type" /&gt;",
    "Value":"&lt;s:if test="%{value != null}"&gt;&lt;s:property value="value" /&gt;&lt;/s:if&gt;",
    "ApplyFrom":"&lt;s:property value="applyFrom" /&gt;",
    "ApplyTo":"&lt;s:property value="applyTo" /&gt;",
    "Readable":"&lt;s:property value="readable" /&gt;",
    "Writable":"&lt;s:property value="writable" /&gt;"
    }
    &lt;s:if test="%{!#index.last}"&gt;,&lt;/s:if&gt;

&lt;/s:iterator&gt;
]}
}
</pre>
<p>More details and source code are available on <a href="http://github.com/bluepower/YUI-UX/tree/master/examples/yui2-datatable-simple-extention/" target="_blank">GitHub</a>, where I have extracted a prototype of the Admin UI using a local datasource as a simple demonstration.</p>
<h3>What have been the challenges of using YUI in this project?</h3>
<p>The main challenges have been around the fact that most of our developers are in fact not frontend engineers. They don&#8217;t always have quite as much experience dealing with cross-browser issues or JavaScript-specific tricks. Fortunately YUI helps us a lot to make good code structures and to smooth out most browser compatibility issues.</p>
<h3>What&#8217;s next for Demeter? What are some upcoming features you are tackling with YUI?</h3>
<p>One of the upcoming features we are working on is a reporting module that will make heavy use of <a href="http://developer.yahoo.com/yui/charts/">YUI Charts</a>. And we are also planning to use <a href="http://developer.yahoo.com/yui/treeview/">TreeView</a> widget to refactor our addressbook module.</p>
<p>We are still using <a href="http://developer.yahoo.com/yui/2/">YUI 2</a>, but if more and more official widgets based on <a href="http://developer.yahoo.com/yui/3/">YUI 3</a> come out, we will consider totally moving to YUI 3 in the future.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2010/06/07/implementation-focus-demeter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Implementation Focus: Phanfare Media Organizer</title>
		<link>http://www.yuiblog.com/blog/2010/05/19/phanfare/</link>
		<comments>http://www.yuiblog.com/blog/2010/05/19/phanfare/#comments</comments>
		<pubDate>Wed, 19 May 2010 21:51:42 +0000</pubDate>
		<dc:creator>Eric Miraglia</dc:creator>
				<category><![CDATA[In the Wild]]></category>
		<category><![CDATA[YUI Implementations]]></category>
		<category><![CDATA[phanfare]]></category>

		<guid isPermaLink="false">http://www.yuiblog.com/blog/?p=2164</guid>
		<description><![CDATA[
Cory Mintz from Phanfare wrote in last week to tell us about their recent product launch, which is heavily based on YUI 2.8.0.
We just released our new web organizer yesterday&#8230;  It is a full photo and video organizer built as a web application, using just about every YUI 2 component. We think it really [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://phanfare.com" title=""><img src="http://yuiblog.com/assets/phanfare-20100519-141100.jpg"></a></p>
<p><cite>Cory Mintz</cite> from <a href="http://phanfare.com/">Phanfare</a> wrote in last week to tell us about their recent product launch, which is heavily based on YUI 2.8.0.</p>
<blockquote><p>We just released our new web organizer yesterday&#8230;  It is a full photo and video organizer built as a web application, using just about every YUI 2 component. We think it really blurs the line between desktop and web software.</p>
<p>Some notable features are:</p>
<ul>
<li>Using the <a href="http://developer.yahoo.com/yui/uploader/" title="">Uploader</a>, we let people organize and edit their photos as they upload.</li>
<li>With the help of <a href="http://developer.yahoo.com/yui/dragdrop/" title="YUI Library">Drag and Drop</a> and <a href="http://developer.yahoo.com/yui/menu/" title="YUI Library">Menu</a>, the thumbnail grid has all of the behaviors of an OS’s file browser. You can drag select, drag and drop reorder, multi-select using ctrl and shift, arrow between thumbnails, etc.</li>
<li>The dynamic loading of the <a href="http://developer.yahoo.com/yui/treeview/" title="YUI Library">TreeView</a>, let us lazy load user accounts with 100s of albums since they are hierarchical ( year -> album -> section ). This allows the page for an extremely large account to load just as fast as a small account.</li>
</ul>
</blockquote>
<p>I love the clean professionalism of the site and the extraordinary attention to detail in the UI.  Feel free to tour the site &#8212; trial accounts are free and come populated with sample albums to give you a feel for what the site has to offer.  Congratulations to Cory and the team for such a fantastic launch.</p>
<p><a href="http://phanfare.com" title=""><img src="http://yuiblog.com/assets/phanfare-20100519-141946.jpg"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2010/05/19/phanfare/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Implementation Focus: Mr Purple&#8217;s Movies and More</title>
		<link>http://www.yuiblog.com/blog/2010/05/19/implementation-focus-mr-purple/</link>
		<comments>http://www.yuiblog.com/blog/2010/05/19/implementation-focus-mr-purple/#comments</comments>
		<pubDate>Wed, 19 May 2010 16:37:53 +0000</pubDate>
		<dc:creator>Jenny Han Donnelly</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[YUI Implementations]]></category>

		<guid isPermaLink="false">http://www.yuiblog.com/blog/?p=1964</guid>
		<description><![CDATA[

Murray Macchio is a Senior Software Developer with over 7 years of web development experience located in Kingston, Ontario in Canada.  He is currently working with a company called SMT Plus to help streamline their e-learning development process.  He will soon be starting as a web developer at a company called Front Runner [...]]]></description>
			<content:encoded><![CDATA[<div class="interview">
<div class="intro"><em></p>
<p><img src="http://yuiblog.com/assets/mrpurple/murray.jpg" width="150" height="150" hspace="10" vspace="5" align="right" alt="Murray Macchio">Murray Macchio is a Senior Software Developer with over 7 years of web development experience located in Kingston, Ontario in Canada.  He is currently working with a company called SMT Plus to help streamline their e-learning development process.  He will soon be starting as a web developer at a company called Front Runner Pro.
</p>
<p></em></div>
<p><img src="http://yuiblog.com/assets/mrpurple/screenshot.gif" width="510" height="398" alt="Screenshot of Mr. Purple's Movies and More web site"></p>
<p class="q"><strong>Tell us a little about your project.</strong></p>
<p>I had been putting off a website for my uncle&#8217;s company for some time, but with the help of YUI, I built his entire site from scratch in just 3 days.</p>
<p class="q"><strong>What is your background with YUI? Why did you choose YUI for this project?</strong></p>
<p>I have been using YUI for the past 2 years.  In my previous job, I introduced it into every single internal application.  I chose YUI for this project due to my familiarity with it, and because it does ALL of the hard work for you.  In short, YUI makes me look very good on a daily basis.</p>
<p class="q"><strong>Which YUI components in particular are in use?</strong></p>
<p>I used the <a href="http://developer.yahoo.com/yui/carousel/">Carousel</a>, <a href="http://developer.yahoo.com/yui/autocomplete/">AutoComplete</a> and my absolute favorite, the <a href="http://developer.yahoo.com/yui/datatable/">DataTable</a>.</p>
<p class="q"><strong>What have been the challenges of using YUI in this project?</strong></p>
<p>The main challenges were with a couple of Carousel bugs.  These were issues I did expect, as it is still in beta.  The only really major issue I had was figuring out why 2 carousels on the same page didn&#8217;t play nicely together.  Then I realized that their items shared the same IDs.</p>
<p><img src="http://yuiblog.com/assets/mrpurple/catalogue.gif" width="510" height="372" alt="Screenshot of catalogue page"></p>
<p class="q"><strong>What are the things you&#8217;re most proud of in this project?</strong></p>
<p>I am proud of the fact that I was able to provide a rich user experience very quickly.  Specifically, the catalog page that uses the AutoComplete widget with the DataTable allows users to easily browse a movie catalogue of over 4000 movies and games.</p>
<p class="q"><strong>What are some upcoming features/projects you are tackling with YUI?</strong></p>
<p>Next order of business, finish the Form Validation component I have been working on with Luke Smith for YUI 2.  I am excited to see how it&#8217;s received by the YUI community.  I also plan on introducing YUI to companies I will be working with in the near future.</p>
<p class="q"><strong>How did the YUI components perform?</strong></p>
<p>They performed excellent.  The DataTable was able to handle 4000 records at a time without an issue.  I have found that the performance of the YUI components has steadily improved with every release.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2010/05/19/implementation-focus-mr-purple/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Implementation Focus: Vitalist, a Getting Things Done (GTD) Web App Built with YUI 2</title>
		<link>http://www.yuiblog.com/blog/2010/04/12/vitalist/</link>
		<comments>http://www.yuiblog.com/blog/2010/04/12/vitalist/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 21:32:35 +0000</pubDate>
		<dc:creator>Matt Berg</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[YUI Implementations]]></category>
		<category><![CDATA[getting things done]]></category>
		<category><![CDATA[gtd]]></category>
		<category><![CDATA[vitalist]]></category>

		<guid isPermaLink="false">http://www.yuiblog.com/blog/?p=1943</guid>
		<description><![CDATA[
About the author:Matt Berg is a co-founder of Vitalist, the premier web-based productivity manager for GTD.  Matt is responsible for the UI and usability of the various Vitalist applications.  He has a B.B.A. in MIS from the University of Texas at Austin and has been working on web applications since 2000.  You [...]]]></description>
			<content:encoded><![CDATA[<div class="authorbox">
<p><em><strong><img src="http://yuiblog.com/assets/vitalist/headshot.jpg" align="right" alt="" />About the author:</strong>Matt Berg is a co-founder of <a href="http://www.vitalist.com/" title="GTD Software Online for Getting Things Done &raquo; Vitalist">Vitalist</a>, the premier web-based productivity manager for GTD.  Matt is responsible for the UI and usability of the various Vitalist applications.  He has a B.B.A. in MIS from the University of Texas at Austin and has been working on web applications since 2000.  You can follow Matt on Twitter at <a href="http://twitter.com/mattberg" title="Matt Berg on Twitter">@mattberg</a></em></p>
</div>
<h3>About Vitalist</h3>
<p><a href="http://www.vitalist.com/" title="GTD Software Online for Getting Things Done &raquo; Vitalist">Vitalist</a> is a powerful personal organization tool that closely follows the popular <a href="http://www.davidco.com/" title="David Allen, Getting Things Done&reg; and GTD&reg;">Getting Things Done methodology by David Allen</a>.  With Vitalist, all of your to-dos are online, in GTD format, and ready to be accessed or updated from anywhere.</p>
<p><img src="http://yuiblog.com/assets/vitalist/main-small.png" alt="" /></p>
<h3>Why YUI?</h3>
<p>We have been using YUI at Vitalist pretty heavily since around version 2.2.0 &mdash; for about three years.  Initially we ended up choosing YUI out of the available JavaScript frameworks for two major reasons: documentation and code footprint.  To this day, I feel YUI continues to lead the pack in both of those areas.</p>
<p>With user interfaces getting more complex everyday, another major benefit of YUI is the number of available utilities and widgets.  And at Vitalist we are taking full advantage, using the following components (version 2.8.0r4): <a href="http://developer.yahoo.com/yui/animation/">animation</a>, <a href="http://developer.yahoo.com/yui/autocomplete/">autocomplete</a>, <a href="http://developer.yahoo.com/yui/history/">browser history</a>, <a href="http://developer.yahoo.com/yui/calendar/">calendar</a>, <a href="http://developer.yahoo.com/yui/compressor/">compressor</a>, <a href="http://developer.yahoo.com/yui/connection/">connection</a>, <a href="http://developer.yahoo.com/yui/cookie/">cookie</a>, <a href="http://developer.yahoo.com/yui/fonts/">CSS fonts</a>, <a href="http://developer.yahoo.com/yui/reset/">CSS reset</a>, <a href="http://developer.yahoo.com/yui/datasource/">datasource</a>, <a href="http://developer.yahoo.com/yui/dom/">dom</a>, <a href="http://developer.yahoo.com/yui/dragdrop/">drag and drop</a>, <a href="http://developer.yahoo.com/yui/element/">element</a>, <a href="http://developer.yahoo.com/yui/event/">event</a>, <a href="http://developer.yahoo.com/yui/json/">json</a>, <a href="http://developer.yahoo.com/yui/logger/">logger</a>, <a href="http://developer.yahoo.com/yui/menu/">menu</a>, <a href="http://developer.yahoo.com/yui/selector/">selector</a>, <a href="http://developer.yahoo.com/yui/swf/">swf</a>, <a href="http://developer.yahoo.com/yui/container/tooltip/">tooltip</a>, <a href="http://developer.yahoo.com/yui/yahoo/">yahoo</a>.</p>
<h3>Obsession with Performance and Responsiveness</h3>
<p>Early on at Vitalist we decided to go the rout of loading most of the necessary components and data on the initial visit to our main application.  This was done for two reasons, UI responsiveness and ease of offline setup.  Let&#8217;s focus on responsiveness.</p>
<p>While in theory it&#8217;s simple, having JavaScript handle basically all of our UI generation definitely added some complexities.  For example, the speed of appending and traversing the DOM is of the utmost importance.  Something as simple as adding a root element to the <code>getElementsByClassName</code> function boosts performance significantly.  And sometimes we had to sacrifice programmatic convenience for speed.  While the <a href="http://developer.yahoo.com/yui/selector/" title="YUI 2: Selector Utility">YUI 2 Selector Utility</a> can be very powerful, we originally found <code>getElementsByClassName</code> to be faster.  (With the latest releases of YUI 2, the Selector Utility performance seems to have increased quite a bit, but we still default to <code>getElementsByClassName</code> when possible to boost performance &mdash; especially in browsers that have native support, which <a href="http://developer.yahoo.com/yui/dom/" title="YUI 2: Dom Collection">YUI 2&#8217;s Dom Utility</a> leverages.)</p>
<p><img src="http://yuiblog.com/assets/vitalist/autocomplete-small.png" alt="" /></p>
<p><a href="http://developer.yahoo.com/yui/autocomplete/" title="YUI 2: AutoComplete">YUI 2 AutoComplete</a> powers one of the newer features of Vitalist, released in the last year or so, but it has also been one of the hardest implementations in terms of responsiveness and browser CPU usage.  In our initial attempt, every time we needed a new autocomplete control for an input we would create a new instance, destroying it once it was no longer needed.  This typically happens when moving from &#8220;page&#8221; to &#8220;page&#8221; (keep in mind, all of our &#8220;pages&#8221; are just client-generated screens). Internet Explorer struggled with this, often pegging the CPU at 100% and effectively bringing the computer to a halt.  This forced us to turn off autocomplete support for IE.  Two key changes helped us create a more efficient autocomplete.  First, we create just a few generic instances of the autocomplete that can be shared from &#8220;page&#8221; to &#8220;page&#8221;.  Then the only update necessary is setting a new DataSource, which in our implementation requires less CPU effort.  Number two, pay attention to the <code>maxResultsDisplayed</code> property.  Because we allow the full autocomplete list to be displayed without any input (we also added the down arrow key to show the list), we initially set the <code>maxResultsDisplayed</code> to an arbitrarily large number like 10,000.  Simply changing this number to the length of our actual datasource resulted in significant CPU performance gains.</p>
<p><img src="http://yuiblog.com/assets/vitalist/logger-small.png" alt="" /></p>
<p>For monitoring performance on the front-end, we use the <a href="http://developer.yahoo.com/yui/logger/" title="YUI 2: Logger">YUI 2 Logger Control</a>.  When in debug mode, we output many log updates detailing the various steps of JavaScript processing.  One great thing about the logger is the fact that it keeps a timestamp of when it was last updated.  This has been very helpful when trying to figure out the bottlenecks in our code.  And for more of the server side performance monitoring, <a href="http://developer.yahoo.com/yslow/" title="Yahoo! YSlow for Firebug">YSlow</a> has also been very helpful in making sure we are generating http requests as fast as possible.</p>
<h3>Most Interesting Implementation Feature</h3>
<p><img src="http://yuiblog.com/assets/vitalist/dragdrop-small.png" alt="" /></p>
<p>Personally, I had the most fun implementing drag and drop in Vitalist (using <a href="http://developer.yahoo.com/yui/dragdrop/" title="YUI 2: Drag &#038; Drop">YUI 2 Drag and Drop</a>).  Drag and drop actually serves two purposes in Vitalist for the same drag element.  First, we use it for manually re-sorting lists; secondly, we use it for moving tasks between lists.  To accomplish this, two different drop target &#8220;zones&#8221; are used: one for the list elements in the content and one for the list elements in the left sidebar menu.</p>
<p>The interesting part here is the two different zones function quite differently.  When dragging in the content area, we want the drag element to constantly move the hovered element and append the drag element in the new location.  In the menu area, we don&#8217;t want to anything to shift, but we do want to highlight the menu selection we are hovering over.  Here is a code snippet from the onDragOver method:</p>
<pre>
if (destElNodeName === "li") {
	orig_p = srcEl.parentNode;
	p = destEl.parentNode;

	if (!_D.hasClass(p.parentNode, "nav")) {
		if (this.goingUp) {
			p.insertBefore(srcEl, destEl);
		} else {
			p.insertBefore(srcEl, destEl.nextSibling);
		}
	} else {
		_D.removeClass(_S.query("#sidebar .nav:not(.alt) li"), "drag");
		_D.addClass(destEl, "drag");
	}

	_DDM.refreshCache();
}
</pre>
<h3>Building Vitalist components with YUI Compressor</h3>
<p><img src="http://yuiblog.com/assets/vitalist/admin-small.png" alt="" /></p>
<p>Related to our obsession with performance, we created a web front-end that uses the <a href="http://developer.yahoo.com/yui/compressor/" title="YUI Compressor">YUI Compressor</a> in conjunction with some other scripts to build the various JavaScript and CSS components used throughout Vitalist.  This ensures we are keeping the smallest code footprint possible for each of the major sections of our site.  And as you may know, keeping the number of http requests as low as possible helps on page load times, so combining JavaScript and CSS files where possible can help a great deal.</p>
<p>Some background is necessary here. Vitalist has its own core set of JavaScript utilities and CSS that are shared across all of the major sections of the site.  Each individual section (such as the main application, iPhone-optimized application, or marketing site) has its own specific JavaScript and CSS.</p>
<p>So the basics of the build process are as follows:  First, the global JavaScript and CSS files are minified using YUI Compressor.  Then, for each section, the various JavaScript and CSS files are minified, and then combined with the global file to create one single file.  In addition, each section only requires certain components of YUI, so each of the required pieces are combined into a single YUI file, further reducing the number of files needed.</p>
<h3>What&#8217;s Next?</h3>
<p>The next major project with Vitalist using YUI will be upgrading to the <a href="http://developer.yahoo.com/yui/3/" title="YUI 3 &mdash; Yahoo! User Interface Library">YUI 3</a> framework.  With version 3.1.0&#8217;s ability to use legacy YUI 2 components easily, it&#8217;s time to make the move.</p>
<p>If you are interested in learning more about Vitalist, please check out our website: <a href="http://www.vitalist.com">www.vitalist.com</a>.  Also, feel free to email us at <a href="mailto:support@vitalist.com">support@vitalist.com</a> with any questions you may have.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2010/04/12/vitalist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using YUI at EtreProprio.com</title>
		<link>http://www.yuiblog.com/blog/2010/03/02/using-yui-at-etreproprio/</link>
		<comments>http://www.yuiblog.com/blog/2010/03/02/using-yui-at-etreproprio/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 15:18:37 +0000</pubDate>
		<dc:creator>Philippe Bernou</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[In the Wild]]></category>
		<category><![CDATA[YUI Implementations]]></category>

		<guid isPermaLink="false">http://www.yuiblog.com/blog/?p=1312</guid>
		<description><![CDATA[

About the Author: Philippe Bernou is the founder and CEO of the French startup EtreProprio.com, a real estate website for individuals. After working for four years in Luxemburg on IBM technologies, he launched EtreProprio.com in 2008 with Aurélie Eav.


EtreProprio.com aims to provide high quality classifieds for free (see an example of a listing here). There [...]]]></description>
			<content:encoded><![CDATA[<div class="interview">
<div class="intro">
<p><strong>About the Author:</strong> <em><img src="http://yuiblog.com/assets/pbernou.png" alt="Philippe Bernou" vspace="5" align="right" hspace="10" /><a href="http://fr.linkedin.com/pub/philippe-bernou/7/722/b58">Philippe Bernou</a> is the founder and CEO of the French startup <a href="http://www.etreproprio.com">EtreProprio.com</a>, a real estate website for individuals. After working for four years in Luxemburg on IBM technologies, he launched EtreProprio.com in 2008 with Aurélie Eav.</em></p>
</div>
</div>
<p>EtreProprio.com aims to provide high quality classifieds for free (<a href="http://www.etreproprio.com/21771">see an example of a listing here</a>). There are currently more than five thousand property owners selling their houses on EtreProprio.com. We wanted to provide a simple but powerful interface, and we needed a lot of front-end logic. After a little experimentation, we chose YUI which struck us as powerful, robust, very well documented and highly customizable.  As a consequence, EtreProprio.com is using YUI (2.8.0) heavily for its front-end.</p>
<p>
The following modules are used:</p>
<ul>
<li><strong>CSS:</strong> Reset, Base</li>
<li><strong>Utilities:</strong> Animation, Connection Manager, Cookie, Datasource, Drag and Drop, JSON</li>
<li><strong>Widgets:</strong> AutoComplete, Button, Calendar, Container, DataTable, RTE, Slider, TabView, Uploader</li>
</ul>
<p>Let&#8217;s go deeper on three implementations: Advanced Search, Photo Uploader and TabView.</p>
<h3>Advanced Search</h3>
<p>The form used to find properties is developed on top of <a href="http://developer.yahoo.com/yui/autocomplete/">AutoComplete</a> and <a href="http://developer.yahoo.com/yui/slider/">Dual Slider</a>. The labels above slider thumbs are positioned by listening to change event. Then, they are repositioned if a collision occurs between min and max labels. The AutoComplete implementation can display mixed elements such as cities, postal codes or regions. Each element has its own display format.</p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/HVUaI7Jlcq0&#038;hl=fr_FR&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/HVUaI7Jlcq0&#038;hl=fr_FR&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
<p><a href="http://www.etreproprio.com/recherche">Try it live</a>.</p>
<h3>Photo Uploader + Management</h3>
<p>We used <a href="http://developer.yahoo.com/yui/uploader/">YUI&#8217;s Uploader</a>, <a href="http://developer.yahoo.com/yui/datatable/">DataTable</a> and <a href="http://developer.yahoo.com/yui/dragdrop/">Drag and Drop</a> modules in order to create simple form for photo uploading.  First, the user selects the photos on his computer. Then he clicks &#8220;Send all&#8221; and as the photos are sent, a table below is populated with the photos and details. Drag and drop is applied to the rows of the table, it allowing users to easily reorder the photos. The description of each photo can be modified using a simple text input and YUI&#8217;s XMLHttpRequest utility, <a href="http://developer.yahoo.com/yui/connection/">Connection Manager</a>.</p>
<p>See the video below for a demonstration:
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/P44wFOFi-Eo&#038;hl=fr_FR&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/P44wFOFi-Eo&#038;hl=fr_FR&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
<h3>TabView</h3>
<p>As there is a lot of information to display in a classified detail, we used <a href="http://developer.yahoo.com/yui/tabview/">TabView</a> to design the page.  The CSS personalization capabilities of TabView allow us to integrate it perfectly with the rest of the page from a design perspective. Tabview also saves us bandwidth as only interested users click on all the tabs &mdash; TabView has support for <a href="http://developer.yahoo.com/yui/examples/tabview/datasrc.html" title="YUI Library Examples: TabView Control: Getting Content from an External Source">lazyloading Tab content</a>, and that pattern works well for us here.</p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/iDc00l2mO6Y&#038;hl=fr_FR&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/iDc00l2mO6Y&#038;hl=fr_FR&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2010/03/02/using-yui-at-etreproprio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fybit Riatrax4Js: Program YUI in Java</title>
		<link>http://www.yuiblog.com/blog/2010/02/02/fybit-riatrax4js/</link>
		<comments>http://www.yuiblog.com/blog/2010/02/02/fybit-riatrax4js/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 19:08:41 +0000</pubDate>
		<dc:creator>Erol Koç</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[In the Wild]]></category>
		<category><![CDATA[YUI Implementations]]></category>
		<category><![CDATA[fybit]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[ria]]></category>
		<category><![CDATA[yui]]></category>

		<guid isPermaLink="false">http://www.yuiblog.com/blog/?p=1145</guid>
		<description><![CDATA[

About the Author:
			Erol Koç is a co-founder of Fybit, a Switzerland
			based startup company. Before joining Fybit, he worked as a software architect for a security company
			where he was the tech lead for the product&#8217;s web frontend. He has an MS degree in
			computer science from ETH Zurich. During an internship
			at IBM, he contributed to the Eclipse [...]]]></description>
			<content:encoded><![CDATA[<div class="interview">
<div class="intro">
<p><img align="right" hspace="10" vspace="5" src="http://yuiblog.com/assets/ekoc.jpg" alt="Erol Koç"><em><strong>About the Author:</strong><br />
			Erol Koç is a co-founder of <a href="http://www.fybit.com/">Fybit</a>, a Switzerland<br />
			based startup company. Before joining Fybit, he worked as a software architect for a security company<br />
			where he was the tech lead for the product&#8217;s web frontend. He has an MS degree in<br />
			computer science from <a href="http://www.ethz.ch">ETH Zurich</a>. During an internship<br />
			at IBM, he contributed to the Eclipse project.</em></strong>
		</p>
</div>
</div>
<h3>Fybit Riatrax4Js: Write YUI in Java</h3>
<p>YUI is not only a fantastic JavaScript library, it is also a great community. Developers<br />
		contribute to YUI and allow others to benefit from it. Now,<br />
		<a href="http://www.fybit.com/">Fybit</a> joins the YUI community with<br />
		<a href="http://www.fybit.com/products/riatrax4js/">Riatrax4Js</a>, a<br />
		toolkit for rich internet applications (RIAs) based on YUI.<br />
		Riatrax4Js allows you to program RIAs in plain Java and automatically translates your code<br />
		to JavaScript, using YUI as a foundation layer. With YUI being available<br />
		from <a href="http://www.yuiblog.com/blog/2010/01/05/enterprise-web-developer/">Python</a>, Java and JavaScript,<br />
		one fourth of all developers get access to YUI.<br />
		And <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">with 18%</a>,<br />
		Fybit&#8217;s Riatrax4Js covers the largest part, consisting of Java developers.
		</p>
<h3>Riatrax4Js: Java benefits, powerful YUI widgets</h3>
<p>We just launched the Riatrax4Js alpha version with the goal of easing<br />
		development of YUI-based RIAs. Riatrax4Js combines the advantages of Java<br />
		with the extensive widget set and controls of YUI. Consequently, you get the<br />
		benefits and comfort of Java programming such as:
		</p>
<ul>
<li>Type safety</li>
<li>Inheritance</li>
<li>IDE support (<a href="http://www.eclipse.org/">Eclipse</a>, <a href="http://netbeans.org/">NetBeans</a>, &#8230;)</li>
<li>Debugging</li>
<li>Test tools like <a href="http://www.junit.org/">JUnit</a></li>
<li>Access to many 3rd party libraries</li>
</ul>
<p>And you all know how fantastic YUI is:</p>
<ul>
<li>Many powerful widgets</li>
<li>Compatible with all major browsers</li>
<li>Great performance</li>
<li>Yahoo! experts develop YUI</li>
</ul>
<p>Add up the advantages of Java and YUI, you get the properties of<br />
		Riatrax4Js. Riatrax4Js is not a server-side framework. It compiles Java<br />
		to JavaScript, leveraging the standard Java compiler to give you unlimited<br />
		scalability and speed. Moreover, Riatrax4Js allows you to connect<br />
		your YUI frontend to the web server and backend with a simple annotation-based<br />
		remoting mechanism.</p>
<h3>A simple example: Show the server&#8217;s time on a button&#8217;s label when clicked</h3>
<p>This section walks you through a simple example that is available for<br />
		<a href="http://www.fybit.com/demo/">download</a> from our website.<br />
		Riatrax4Js apps consist of regular Java classes that can use the Java version<br />
		of YUI that ships with Riatrax4Js. Here is how simple that is:
		</p>
<pre>
@MainPanel(name="index")
public class DemoPanel {

	@Services(implementation=TimeServiceImpl.class)
	protected static TimeService service;

	public DemoPanel () {
		final Button syncButton = Button.create("syncButton");
		syncButton.addClickListener(new Listener() {
			public void perform () {
				syncButton.setConfLabel("Sync: " + service.getTime());
			}
		});
	}
}
		</pre>
<p>The code starts with a <code>@MainPanel</code> annotation to allow Riatrax4Js to<br />
		find the entry point to your program. Next, there is a field <code>service</code><br />
		that is annotated with the <code>@Services</code> annotation. Thanks to this annotation,<br />
		the server can be called to get the time (or any other value/object you<br />
		want to use on the client). It does not have to be explicitly initialized,<br />
		Riatrax4Js does the dirty work for you and ensures that the client and server<br />
		parts are connected by injecting an appropriate proxy. A YUI Button is then<br />
		created by replacing an existing HTML button &#8220;syncButton&#8221; of your HTML page. A click listener<br />
		which invokes the time service on the server is attached to the button. This<br />
		is a synchronous (i.e., blocking) call. Async calls are just as easy:<br />
		The generated proxies contains an async variant<br />
		of each method in the interface that can be readily used. Here is the corresponding<br />
		HTML page for the code:
		</p>
<pre>
&lt;html&gt;
	&lt;head&gt;
		&lt;meta http-equiv="content-type" content="text/html; charset=UTF-8"&gt;
		&lt;title&gt;Fybit New&lt;/title&gt;
		&lt;script type="text/javascript" src="codebase/app-index.js"&gt;&lt;/script&gt;
	&lt;/head&gt;

	&lt;body class="yui-skin-sam"&gt;
		&lt;button id="syncButton"&gt;Synchronous Call&lt;/button&gt;
	&lt;/body&gt;
&lt;/html&gt;
		</pre>
<p>
		The most important line is the script tag at the beginning. It includes a<br />
		single JavaScript file app-index.js where &#8220;index&#8221; is the name given in the<br />
		<code>@MainPanel</code> annotation above. In the HTML body, you can find<br />
		the aforementioned HTML button. Riatrax4Js wraps the YUI Button over this button.
		</p>
<p><img src="http://yuiblog.com/assets/buttons.jpg" alt="A YUI button with server invocation"></img></p>
<p>
		When you compile the application, Riatrax4Js analyses the source files and generates the file app-index.js<br />
		consisting of the Java classes needed in the browser translated to JavaScript<br />
		as well as the necessary YUI JavaScript code. Unlike with native YUI, you don&#8217;t<br />
		have to care about YUI dependencies or which YUI files to include &mdash; Riatrax4Js<br />
		includes them automatically!
		</p>
<p>
		This is just a small excerpt from a <a href="http://www.fybit.com/demo/">larger demo</a>.<br />
		The full demo also explains how to call the server asynchronously and how to use other<br />
		YUI widgets (text editors, auto-completion, menus etc.). Apart from generating web<br />
		application from scratch, using Riatrax4Js you can improve existing web applications<br />
		easily with interactive features by wrapping ordinary HTML elements with YUI elements.
		</p>
<p><a href="http://www.fybit.com/Riatrax4JsNew/showcase.html"><br />
			<img src="http://yuiblog.com/assets/showcase.jpg" alt="The full Fybit sowcase" width="510"></img><br />
		</a></p>
<h3>Beyond demos: &#8220;PublicationManager&#8221; written with Riatrax4Js</h3>
<p>We used Riatrax4Js to develop a user-friendly web application to<br />
		manage publications for a research group at a university in Switzerland.<br />
		This application facilitates the process of entering and modifying publication<br />
		records and it has been put into operation in November 2009. The<br />
		<a href="http://www.fybit.com/demo/">PublicationManager</a> features YUI<br />
		dialogs, sortable and resizable tables, paginators and auto-completion. The records<br />
		entered by the users are stored in a database and can be edited and complemented with<br />
		files with just a few clicks.</p>
<p><a href="http://www.fybit.com/PaperManager/"><br />
			<img src="http://yuiblog.com/assets/publicationmanager.jpg" alt="Publication manager for a research group at ETH Zurich" width="510"></img><br />
		</a></p>
<h3>Security</h3>
<p>
		Riatrax4Js is designed to make applications as secure as possible by default.<br />
		But because Riatrax4Js uses JavaScript, applications are as hard to secure as<br />
		any other dynamic web app. Fybit offers separate extension to Riatrax4Js,<br />
		<a href="http://www.fybit.com/products/riatrax-security/">Riatrax Security</a>.<br />
		It is based on Riatrax4Js&#8217;s<br />
		program code analysis and secures the application by filtering invalid or<br />
		malicious content and blocking it before it reaches your code and/or application server.<br />
		Fybit Riatrax Security is also configured with Java annotations.
		</p>
<h3>Want to try?</h3>
<p>
		The alpha version of Riatrax4Js is currently <a href="http://www.fybit.com/">available on our web site</a> to registered users.<br />
		It&#8217;s great to see the user base of Riatrax4Js grow and be used by developers at this stage.
		</p>
<p>
		Fybit&#8217;s goal is to make Riatrax4Js the best Java RIA toolkit available and support<br />
		it in the long run. We believe that the YUI community and YUI developers can<br />
		give us important feedback about Riatrax4Js. We are excited to hear your questions<br />
		and suggestions, e.g.
		</p>
<ul>
<li>How can we improve Riatrax4Js?</li>
<li>For what kind of projects would you consider Riatrax4Js?</li>
<li>What is the best way for us to distribute the product?</li>
</ul>
<p>
		As Fybit is a small startup company, we appreciate everyone who wants to<br />
		contribute to Riatrax4Js to make it the number one RIA framework. Just<br />
		<a href="http://www.fybit.com/about-us/contact/">drop us a line</a> if<br />
		you are interested or want to know more.
		</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2010/02/02/fybit-riatrax4js/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Implementation Focus: Enterprise Web Developer, a Python/YUI Framework</title>
		<link>http://www.yuiblog.com/blog/2010/01/05/enterprise-web-developer/</link>
		<comments>http://www.yuiblog.com/blog/2010/01/05/enterprise-web-developer/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 14:20:37 +0000</pubDate>
		<dc:creator>Rob Tweed</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[YUI Implementations]]></category>
		<category><![CDATA[Enterprise Web Developer]]></category>
		<category><![CDATA[EWD]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Rob Tweed]]></category>

		<guid isPermaLink="false">http://www.yuiblog.com/blog/?p=1097</guid>
		<description><![CDATA[

About the author: Rob Tweed is the founder and co-director of M/Gateway Developments Ltd., which is based in the UK.  He has been working in application development since the early 1980s.  Much of his work has focused around healthcare IT, which is consistently challenging, characterized by large, complex datasets, high security and performance [...]]]></description>
			<content:encoded><![CDATA[<div class="interview">
<div class="intro">
<p><img src="http://yuiblog.com/assets/rob_tweed-20100104-162331.jpg" align="right" hspace="10" vspace="5"><em><strong>About the author</strong>: Rob Tweed is the founder and co-director of <a href="http://www.mgateway.com/">M/Gateway Developments Ltd.</a>, which is based in the UK.  He has been working in application development since the early 1980s.  Much of his work has focused around healthcare IT, which is consistently challenging, characterized by large, complex datasets, high security and performance requirements, and limited budgets.  M/Gateway originally developed the Web gateway technology for database vendor InterSystems&#8217; core database product <a href="http://www.intersystems.com/cache/index.html">Cach&eacute;</a>.  M/Gateway&#8217;s current customers are mainly in the healthcare and financial services sectors.  Some run internal intranet applications, but some, such as <a href="http://www.slideshare.net/george.james/missioncritical-ajaxmaking-test-ordering-easier-and-faster-at-quest-diagnostics?type=powerpoint">Quest Diagnostics</a>, run their applications across the open Internet for their customers in the US.</em></p>
</div>
</div>
<h3><a href="http://www.mgateway.com/ewd.html">Enterprise Web Developer</a> (EWD), a Python/YUI framework</h3>
<p>Since the early days in 1996, I wanted people to be able to use web technologies as a user interface to applications that they&#8217;d previously have considered using Client/Server or some other GUI technology to create.  It seemed to be to be a technology that had the potential to be heavily automated so that developers could focus on expressing <em>what</em> they wanted to do rather than <em>how</em> to achieve it.</p>
<p>The thing that has always dismayed and surprised me is how the industry has not embraced this philosophy.  Whilst there is no shortage of web/Ajax frameworks out there &#8211; there seems to be a new one every week &#8211; they all have a common theme: the notion that a web/Ajax application is primarily a programming issue.  By contrast I&#8217;ve been firmly of the view that by building a framework that was first and foremost design-focused, the programming aspects could be potentially automated to such a degree that the actual programming required in even a complex healthcare application should be able to be reduced to almost trivial levels.  That&#8217;s been the design goal of our EWD and it proves that such an approach is practical, feasible and highly beneficial.</p>
<h3 id="why_python_and_yui">Why Python and YUI?</h3>
<p>We&#8217;ve ported EWD to the free Open Source NoSQL database <a href="http://en.wikipedia.org/wiki/GT.M">GT.M</a> and Chris Munt, M/Gateway co-founder, has developed a number of language bindings that EWD can use.  Our recent slidecast series (described below) was based around his Python binding because it&#8217;s such a popular language these days &#8211; <a href="http://python.dzone.com/articles/python-use-45-google-app">recent reports</a> suggest that it has grown in use by 45% since April 2008.  However, you could use EWD just as easily with Ruby or Java.  </p>
<p>Our <a href="http://www.mgateway.com/ewdDemo.html">screencast series</a> focuses on EWD/YUI integration for several reasons:</p>
<ul>
<li>YUI provides a very powerful and highly functional and usable set of UI widgets</li>
<li>unlike many of the Javascript frameworks, YUI is not an &#8220;all or nothing&#8221; environment, so you can mix and match YUI components with your own</li>
<li>YUI is a free Open Source library so in combination with EWD and GT.M running on a Linux platform, the demo is based on a completely free Open Source stack</li>
<li>it has the Yahoo! and Douglas Crockford pedigree: what more need you say!</li>
</ul>
<h3 id="you_use_xml_syntax_to_incorporate_yui_what_advantages_does_this_offer">EWD uses XML syntax to incorporate YUI.  What advantages does this offer?</h3>
<p>Making EWD work with YUI was pretty straightforward, but it soon became clear to me that the average developer faced quite a few obstacles when adopting such a Javascript framework for their UI development.  Frameworks are complex environments, requiring a lot of detailed knowledge of pretty advanced Javacript, there&#8217;s a big learning curve and there&#8217;s a lot of &#8220;devil in the detail&#8221;.  Furthermore, that complex and verbose Javascript requires downstream maintenance, often by someone other than the original developer.  Additionally, for me, they presented yet another example of how the industry&#8217;s solution to web/Ajax application development was moving further towards programming and away from the skillsets of designers.  </p>
<p>From the earliest days of EWD I&#8217;d ensured that it was user-extensible, allowing you to encapsulate functionality and behaviour as XML-based &#8220;custom tags&#8221;, and they proved to be a perfect solution to incorporating YUI. The YUI custom tags I&#8217;ve demonstrated are therefore a custom extension of EWD.  The YUI custom tags not only generate all the Javascript needed by the corresponding widget, they also manage the destruction of the widget at the correct time, and include optimised &#8220;just in time&#8221; loading of the correct .js and .css files, leaving the developer to not have to worry about all that up-front configuration stuff.  Another key feature of XML tags is that they are inherently nestable, and usually that&#8217;s exactly what you need to do with YUI widgets: menus and datatables nested inside tab-panels for example.  So the real advantages are that the developer can express <em>what</em> he/she wants to do in just a few intuitively named and laid out custom tags.  Not only does it make development quick and simple, but downstream maintenance also becomes simple too (and remember that one of the major costs and overheads of a big, mission-critical application is maintenance).</p>
<p>A good example is the use of TabView widgets.  In EWD these can be described by a simple, intuitive (and therefore highly maintainable) set of nested XML Custom tags, eg:</p>
<pre>
&lt;yui:TabView&gt;
    &lt;yui:Tab label="By Artist" active="true" dataSrc="selectCDXArtist.ewd" /&gt;
    &lt;yui:Tab label="By Title" active="false" dataSrc="selectCDXTitle.ewd" /&gt;
&lt;/yui:TabView&gt;
</pre>
<p>The <i>yui:TabView</i> Custom Tag&#8217;s <i>tag processor</i> is invoked by EWD&#8217;s compiler when it encounters an instance of this tag, and it generates the run-time code that will send the appropriate YUI TabView Javascript and associated HTML markup to the browser.</p>
<h3>EWD instructional series</h3>
<p>We&#8217;ve done a series of <a href="http://www.mgateway.com/ewdDemo.html">screencasts</a> to introduce EWD.  Here is Part One:</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/j_DEP7q1WsM&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/j_DEP7q1WsM&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>The goal of the <a href="http://www.mgateway.com/ewdDemo.html">screencasts</a> was to demonstrate the extreme level of automation of EWD when used to its full potential.  I also wanted to demonstrate how, in EWD, you&#8217;re very much describing what you&#8217;re wanting to achieve, leaving EWD to do all the <em>how</em> work and to handle all the day-to-day things that are essential to a web application but that can and should be automated, eg session management, security management etc.  I hope when people watch the videos they see how little programming has been left for a programmer to do: it&#8217;s basically fetching data from the database, validating form fields against a database, and saving data back to a database.</p>
<p>They always say a picture is worth a thousand words, and I think a video is even more potent.  Seeing is believing, and there&#8217;s nothing like being shown how a tool can be used by the guy who designed and wrote it!</p>
<p>I chose to explore a set of typical UI interactions for an average application that could be demonstrated in the space of about an hour.  I also wanted to demonstrate how nesting of the UI components was possible using both the inherent nesting of YUI custom tags and EWD&#8217;s &#8220;fragment&#8221;-based Ajax architecture.  The demo covers logging into an application, a main menu, tab panels for choosing the action required and a query against the database whose results are presented in a DataTable.  Hopefully the fact that I&#8217;ve been able to demonstrate how all that functionality can be created in just over an hour shows the power and benefit of EWD as a development framework. And in terms of maintainability, the entire application I demonstrate is described in just 134 lines of simple HTML/XML markup and only 78 lines of straightforward Python code!</p>
<h3>Where can people get EWD to try it out for themselves?</h3>
<p>The quickest and simplest way to get a fully-working EWD system up and running is to use our free <a href="http://gradvs1.mgateway.com/main/index.html?path=mdb/mdbDownload">M/DB Installer</a>.  We&#8217;ve done a </p>
<p><a href="http://www.youtube.com/watch?v=BxC7Yvsmlfs">screencast</a> for this too.</p>
<p>At present the EWD/YUI Custom Tag library isn&#8217;t generally available, but we&#8217;re hoping to be able to release it soon.</p>
<p>We also have a <a href="http://groups.google.co.uk/group/enterprise-web-developer-community">forum for EWD users</a> that people are very welcome to join.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2010/01/05/enterprise-web-developer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>YUI 2.7.0 on InsideLine.com</title>
		<link>http://www.yuiblog.com/blog/2009/12/14/yui-2-7-0-on-insideline-com/</link>
		<comments>http://www.yuiblog.com/blog/2009/12/14/yui-2-7-0-on-insideline-com/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 19:37:18 +0000</pubDate>
		<dc:creator>Réal Deprez</dc:creator>
				<category><![CDATA[In the Wild]]></category>
		<category><![CDATA[YUI Implementations]]></category>
		<category><![CDATA[Edmunds]]></category>
		<category><![CDATA[InsideLine.com]]></category>
		<category><![CDATA[Réal Deprez]]></category>

		<guid isPermaLink="false">http://www.yuiblog.com/blog/?p=1049</guid>
		<description><![CDATA[

About the Author: Réal Deprez is the frontend architect at Edmunds.com, the premier resource for automotive information, based in Santa Monica. A Maine native and Tulane graduate, Réal has been working in frontend engineering professionally for five years.


Here at Edmunds (Edmunds.com) we just launched a redesign of
Inside Line (InsideLine.com), our automotive enthusiast web site, and [...]]]></description>
			<content:encoded><![CDATA[<div class="interview">
<div class="intro">
<p><strong>About the Author:</strong> <em><img src="http://yuiblog.com/assets/real-deprez.jpg" align="right" hspace="10" vspace="5"><a href="http://www.linkedin.com/in/realdeprez">Réal Deprez</a> is the frontend architect at <a href="http://www.edmunds.com/">Edmunds.com</a>, the premier resource for automotive information, based in Santa Monica. A Maine native and Tulane graduate, Réal has been working in frontend engineering professionally for five years.</em></p>
</div>
</div>
<p>Here at <a href="http://www.edmunds.com/">Edmunds</a> (<a href="http://www.edmunds.com/">Edmunds.com</a>) we just launched a redesign of<br />
<a href="http://www.insideline.com/" title="Inside Line: News, Road Tests, Auto Shows, Car Photos and Videos">Inside Line (InsideLine.com)</a>, our automotive enthusiast web site, and we are using the <a href="http://developer.yahoo.com/yui/" title="YUI Library">YUI JavaScript library</a> extensively.</p>
<p>Some of the YUI utilities &amp; widgets used on Inside Line:</p>
<ul>
<li>Yahoo/Dom/Event</li>
<li>Animation Utility</li>
<li>Connection Manager</li>
<li>ImageLoader</li>
<li>JSON</li>
<li>Selector</li>
<li>Carousel</li>
<li>TabView</li>
</ul>
<p>We (the Frontend team) started out with YUI 2.7.0 JavaScript core and built our own JavaScript user interface library on top of it to encapsulate site-specific components and functionality. Our library takes advantage of YUI’s core utilities, including <a href=" http://developer.yahoo.com/yui/dom/">Dom</a>, <a href="http://developer.yahoo.com/yui/event" title="YUI Library">Event</a>, <a href="http://developer.yahoo.com/yui/connection/" title="YUI 2: Connection Manager">Connection Manager</a>, and <a href="http://developer.yahoo.com/yui/animation" title="YUI Library">Animation</a>.</p>
<p>We are using Dom and Event extensively to handle DOM interaction, event listeners and custom event handling. The YUI Connection Manager is handling all of our Ajax implementations, including our custom search widgets. We are also using many of the YUI widgets on Inside Line, including <a href="http://developer.yahoo.com/yui/tabview/" title="YUI 2: TabView">TabView</a> and <a href="http://developer.yahoo.com/yui/carousel/" title="YUI 2: Carousel Control">Carousel</a>, with custom skins. The <a href="http://developer.yahoo.com/yui/imageloader/" title="YUI 2: ImageLoader">YUI ImageLoader</a> helped us improve page performance and meet our strict performance requirements.</p>
<p>We chose YUI because of its great documentation, thorough testing, and the scope and depth of its offerings. The library is easy to learn, understand, and implement. The modularity of the system fits in well with our design principles, and the API and custom events make it extremely extensible and easy to integrate. </p>
<h3>Some Highlights</h3>
<p>Multimedia Spotlight (tabview, carousel) from <a href="http://www.insideline.com/" title="Inside Line: News, Road Tests, Auto Shows, Car Photos and Videos">InsideLine.com</a>:</p>
<p><a href="http://www.insideline.com/" title="Inside Line: News, Road Tests, Auto Shows, Car Photos and Videos"><img src="http://yuiblog.com/assets/il-mm-spotlight-20091211-113200.png" alt="InsideLine.com multimedia spotlight."></a></p>
<p><a href="http://www.insideline.com/audi/s4/2010/2010-audi-s4-full-test-and-video.html" title="2010 Audi S4 Full Test and Video">Image and Video Galleries</a> (core, JSON and Carousel):</p>
<p><a href="http://www.insideline.com/audi/s4/2010/2010-audi-s4-full-test-and-video.html" title="2010 Audi S4 Full Test and Video"><img src="http://yuiblog.com/assets/il-gallery-20091211-113030.png" alt="InsideLine.com gallery interface."></a></p>
<p><a href="http://www.insideline.com/search/?q=bmw">Ajax Search Widgets</a> (Dom, Event, Connection Manager):</p>
<p><a href="http://www.insideline.com/search/?q=bmw" title="Search"><img src="http://yuiblog.com/assets/il-search-20091211-112649.png" alt="InsideLine.com search interface."></a></p>
<p><em><strong>Do you have a YUI Imlementation you&#8217;d like to share on YUIBlog?</strong>  <a href="http://www.yuiblog.com/blog/contribute/">Check out our contribution guidelines</a> &mdash; we&#8217;d love to hear from you.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yuiblog.com/blog/2009/12/14/yui-2-7-0-on-insideline-com/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
