<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns: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/" version="2.0">

<channel>
	<title>ILOG JViews Blog</title>
	
	<link>http://blogs.ilog.com/jviews</link>
	<description>Posting from the ILOG JViews Development Team</description>
	<pubDate>Tue, 30 Jun 2009 02:06:02 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/IlogJviewsBlog" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Graph Drawing Contest 2009</title>
		<link>http://blogs.ilog.com/jviews/2009/06/29/graph-drawing-contest-2009/</link>
		<comments>http://blogs.ilog.com/jviews/2009/06/29/graph-drawing-contest-2009/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 10:55:49 +0000</pubDate>
		<dc:creator>Georg Sander</dc:creator>
		
		<category><![CDATA[Diagrammer]]></category>

		<category><![CDATA[Events]]></category>

		<category><![CDATA[Graph Layout]]></category>

		<category><![CDATA[Academia]]></category>

		<category><![CDATA[Conference]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/?p=113</guid>
		<description><![CDATA[<div class="mceTemp"><img class="alignleft size-full wp-image-114" title="gd09small" src="http://blogs.ilog.com/jviews/wp-content/uploads/2009/06/gd09small.png" alt="gd09small" width="71" height="73" /></div>
Many of our users confirm that ILOG's diagramming components are state of the art. But will our components meet the challenges of the future? Maybe we will see the answer in Chicago ...

It is time again for the 16th&#8230;]]></description>
			<content:encoded><![CDATA[<div class="mceTemp"><img class="alignleft size-full wp-image-114" title="gd09small" src="http://blogs.ilog.com/jviews/wp-content/uploads/2009/06/gd09small.png" alt="gd09small" width="71" height="73" /></div>
<p>Many of our users confirm that ILOG&#8217;s diagramming components are state of the art. But will our components meet the challenges of the future? Maybe we will see the answer in Chicago &#8230;</p>
<p>It is time again for the 16th Graph Drawing Contest, held in conjunction with the <a href="http://facweb.cs.depaul.edu/gd2009/gd2009.asp">GD&#8217;2009 conference</a> in Chicago on Sep 22-25. Like last year, I have the pleasure to be a member of the contest commitee, and I am excited to soon see the results of the challenges. One of the topics of the contest is &#8220;partial layout&#8221;. That is, given a graph with some fixed nodes, calculate a good layout while moving only the free nodes. This is a real world requirement that many of our customers have mentioned in the past. In Chicago we will see the current state of the art in partial layout, and we will hopefully get inspiration for further development within our own components. Additionally, there will again be an online contest similar to a programming contest. This is where a difficult problem must be solved online within 1 hour. If you are interested in participating in the Graph Drawing Contest, you can find further information at <a href="http://www.graphdrawing.de/contest2009/">http://www.graphdrawing.de/contest2009/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2009/06/29/graph-drawing-contest-2009/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Two Interesting Webinars Posted</title>
		<link>http://blogs.ilog.com/jviews/2009/05/28/two-interesting-webinars-posted/</link>
		<comments>http://blogs.ilog.com/jviews/2009/05/28/two-interesting-webinars-posted/#comments</comments>
		<pubDate>Thu, 28 May 2009 15:52:38 +0000</pubDate>
		<dc:creator>Ed Király</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/?p=108</guid>
		<description><![CDATA[Last month, we posted two recoreded webinars on our "sister blog", the <a href="http://blogs.ilog.com/partners/">ILOG Partners blog</a>.   Well, these are technical in nature and I want to be sure you don't miss them.

The first is titled <a title="Permanent Link: Create Rich Dynamic Graphical Displays with Ajax" rel="bookmark" href="http://blogs.ilog.com/partners/2009/04/create-rich-dynamic-graphical-displays-with-ajax/">Create Rich Dynamic Graphical Displays&#8230;</a>]]></description>
			<content:encoded><![CDATA[<p>Last month, we posted two recoreded webinars on our &#8220;sister blog&#8221;, the <a href="http://blogs.ilog.com/partners/">ILOG Partners blog</a>.   Well, these are technical in nature and I want to be sure you don&#8217;t miss them.</p>
<p>The first is titled <a title="Permanent Link: Create Rich Dynamic Graphical Displays with Ajax" rel="bookmark" href="http://blogs.ilog.com/partners/2009/04/create-rich-dynamic-graphical-displays-with-ajax/">Create Rich Dynamic Graphical Displays with Ajax</a> , presented by our own Erwan Paccard and Michelle Liu.</p>
<p>The second is called <a title="Permanent Link: Ajax Push Techniques for Better Data Visualization" rel="bookmark" href="http://blogs.ilog.com/partners/2009/04/ajax-push-techniques-for-better-data-visualization/">Ajax Push Techniques for Better Data Visualization</a> , and is presented by our Francois Trible and by IceSoft&#8217;s Ted Goddard.</p>
<p>Get out the popcorn and your favorite beverage, sit back, and enjoy the shows!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2009/05/28/two-interesting-webinars-posted/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ajax Push webinar tomorrow, April 7th</title>
		<link>http://blogs.ilog.com/jviews/2009/04/06/ajax-push-webinar-tomorrow-april-7th/</link>
		<comments>http://blogs.ilog.com/jviews/2009/04/06/ajax-push-webinar-tomorrow-april-7th/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 21:16:38 +0000</pubDate>
		<dc:creator>Ed Király</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[Development practices]]></category>

		<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/?p=104</guid>
		<description><![CDATA[We are hosting a webinar tomorrow on Ajax Push technologies.  Francois Trible, from ILOG, will be presenting along with Ted Goddard, from IceSoft.   They'll be describing how Ajax Push technology can be used to create dynamic graphical user interfaces for&#8230;]]></description>
			<content:encoded><![CDATA[<p>We are hosting a webinar tomorrow on Ajax Push technologies.  Francois Trible, from ILOG, will be presenting along with Ted Goddard, from IceSoft.   They&#8217;ll be describing how Ajax Push technology can be used to create dynamic graphical user interfaces for the thin client.</p>
<p>The presentation is at 9AM Pacific time/ 6PM Europe time and last for one hour.  More info and registration <a href="https://iloginc.webex.com/mw0305l/mywebex/default.do?nomenu=true&amp;siteurl=iloginc&amp;service=6&amp;main_url=https%3A%2F%2Filoginc.webex.com%2Fec0600l%2Feventcenter%2Fevent%2FeventAction.do%3FtheAction%3Ddetail%26confViewID%3D476556368%26siteurl%3Diloginc%26%26%26">here</a>.  Please join us.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2009/04/06/ajax-push-webinar-tomorrow-april-7th/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JViews 8.5 patch 1 Released</title>
		<link>http://blogs.ilog.com/jviews/2009/02/11/97/</link>
		<comments>http://blogs.ilog.com/jviews/2009/02/11/97/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 03:00:03 +0000</pubDate>
		<dc:creator>David Zeleznik</dc:creator>
		
		<category><![CDATA[Charts]]></category>

		<category><![CDATA[Diagrammer]]></category>

		<category><![CDATA[Gantt]]></category>

		<category><![CDATA[Maps]]></category>

		<category><![CDATA[Patches]]></category>

		<category><![CDATA[Releases]]></category>

		<category><![CDATA[TGO]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/?p=97</guid>
		<description><![CDATA[This is a quick update to inform you that we have released the first patch for JViews 8.5.  As always, get full details and download the patches for all of your JViews products at ILOG Support (<a href="https://support.ilog.com/">https://support.ilog.com</a>) by logging into&#8230;]]></description>
			<content:encoded><![CDATA[<p>This is a quick update to inform you that we have released the first patch for JViews 8.5.  As always, get full details and download the patches for all of your JViews products at ILOG Support (<a href="https://support.ilog.com/">https://support.ilog.com</a>) by logging into your myILOG account. Lots of good fixes are included in this patch and we are busy working on patch 2.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2009/02/11/97/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Partial Page Refresh (PPR) Support in JViews 8.5</title>
		<link>http://blogs.ilog.com/jviews/2009/01/23/partial-page-refresh-ppr-support-in-jviews-85/</link>
		<comments>http://blogs.ilog.com/jviews/2009/01/23/partial-page-refresh-ppr-support-in-jviews-85/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 16:59:19 +0000</pubDate>
		<dc:creator>Yunpeng Zhao</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[JSF]]></category>

		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/?p=90</guid>
		<description><![CDATA[<p class="MsoNormal" style="margin: 0in 0in 0pt;"> </p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">Since JViews 8.5 we have enhanced our JSF components to completely support PPR. This is an important feature expected by our customers. Many questions have been asked around this new feature:</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"> </p>

<ul>
	<li>
<div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small;"><span style="font-family: Arial;">For these who are not familiar with JSF PPR technologies,&#8230;</span></span></div></li></ul>]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin: 0in 0in 0pt;"> </p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">Since JViews 8.5 we have enhanced our JSF components to completely support PPR. This is an important feature expected by our customers. Many questions have been asked around this new feature:</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"> </p>
<ul>
<li>
<div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small;"><span style="font-family: Arial;">For these who are not familiar with JSF PPR technologies, you might ask the questions what can PPR bring for you, what is the benefit you can draw compared to other well-known Ajax technologies, and what are the JSF platforms supporting PPR.</span></span></div>
</li>
<li>
<div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small;"><span style="font-family: Arial;">For JViews Web application developers, you might worry if this has any impact on the application you have developed with previous version of JViews. Is it possible to add PPR features to existing JViews JSF Web applications without refactoring the application?</span></span></div>
</li>
<li>
<div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small;"><span style="font-family: Arial;">From a technical point of view, it is also interesting to learn what the JViews Team has done to support PPR. What are the difficulties we encountered to make our JSF components PPR compatible? </span></span></div>
</li>
</ul>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small;"><span style="font-family: Arial;"></span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">Let’s go into more details for each of the topics. We suppose you are familiar with JSF technologies. At least you know how a “Hello World” JSF application works.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;"> </span></p>
<h2 style="margin: 12pt 0in 3pt;"><span style="font-size: large; font-family: Arial;">What is Partial Page Refresh?</span></h2>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">When working with JSF to build Web applications, your JSF pages are composed of JSF components. Take an example, you have a JSF page composed of 5 JSF components. When the JSF page is requested by any Web browser, the 5 JSF components will be rendered to HTML and sent to the browser. When users submit data to the server and request a refresh of the page, all 5 JSF components will be rendered again and resent to the browser. The entire HTML page is refreshed even if only one of the 5 components needs to be updated because the remaining 4 JSF components are quite static. You can see now the inconvenience of a Full Page Refresh.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">Partial Page Refresh gives you the ability to update a subset of the JSF components. For the above example, if only one of the JSF components has been changed, you need to only re-render one component and send just the one component to the browser. You will see only part of the HTML page refreshed not the entire page. This technique has 2 advantages: the first is to reduce network traffic and improve the performance of the Web applications; the second is to improve visual comfort because only a part of the HTML page will be refreshed.</span></p>
<h2 style="margin: 12pt 0in 3pt;"><span style="font-size: large;"><span style="font-family: Arial;">JSF PPR and Ajax</span></span></h2>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">What is the difference compared to pure Ajax technologies? This is an interesting question because Ajax has also been introduced to update subsets of HTML pages. The difference is that Ajax is designed to work at a very low level. With Ajax, you can refresh a property of a given HTML element, such as the label of the button. With JSF PPR, you are working at the JSF component level. The minimum refreshable unit is a JSF component that might be composed of several HTML elements. This means that you can get very good performance with AJAX if you need to refresh only a very small part of the HTML page. Note that JSF PPR frameworks are usually implemented based on Ajax technologies.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">The advantage of JSF PPR is at the design and development level, since it allows Rapid Application Development (RAD). You can create PPR Web applications very quickly by composing standard JSF components. In JViews 8.5, we provide both JSF PPR features for RAD and also Ajax features for performance purposes.</span></p>
<h2 style="margin: 12pt 0in 3pt;"><span style="font-size: large; font-family: Arial;">JSF PPR Frameworks</span></h2>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">The most popular JSF PPR frameworks are Apache MyFaces </span><a href="http://myfaces.apache.org/trinidad/index.html"><span style="font-size: small; color: #800080; font-family: Arial;">Trinidad</span></a><span style="font-size: small; font-family: Arial;">, JBoss </span><a href="http://jboss.org/jbossrichfaces/"><span style="font-size: small; color: #800080; font-family: Arial;">RichFaces</span></a><span style="font-size: small; font-family: Arial;">, and ICEsoft </span><a href="http://www.icefaces.org/main/home/index.jsp"><span style="font-size: small; color: #800080; font-family: Arial;">ICEfaces</span></a><span style="font-size: small; font-family: Arial;">.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">With Trinidad and RichFaces, you can specify explicitly at design time which components can trigger a partial refresh and which components can be refreshed. For example, let’s say that when you click a button you want a text field to be refreshed. The button is called the trigger component and the text field is called the target component. The target components are usually chosen at design time when authoring the JSF pages. However, target components can also be chosen at runtime when rendering the JSF page. These are tasks for advanced developers. </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">Knowing explicitly which ones are target components is helpful when rendering JViews JSF components. Because we need to render a JViews JSF component differently, depending on whether it is rendered for the first time or it is requested to be refreshed partially. You will see later why we need to distinguish these 2 situations.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">ICEfaces has a very unique approach to handling PPR requests. At design time, i.e. when you compose your JSF pages, you can not specify which components are triggers and which ones are targets. All components are potentially triggers and targets. ICEfaces uses its direct-to-DOM rendering technique to determine dynamically at runtime which components should be updated. This may seem unusual, but it gives great flexibility to JSF application developers. However, JSF components providers like us need to do much more work to support this flexibility. The good news is that we have done this hard work for JViews 8.5. JViews JSF components can be used as any other ICEfaces native components.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small;"><span style="font-family: Arial;">Another particularity of ICEfaces is its server-side initiated rendering. This allows pushing updates from the server to the browsers. JViews 8.5 JSF components works fine within the ICEfaces push lifecycle.<span style="mso-spacerun: yes;">  </span></span></span></p>
<h2 style="margin: 12pt 0in 3pt;"><span style="font-size: large; font-family: Arial;">JViews JSF Components Refactoring to Support PPR</span></h2>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">JViews JSF components were initially designed to work in a static way within an HTML page. They were not initially designed to be updated after the HTML paged has been loaded.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">Some JViews JSF components, such as a &lt;jvdf:diagrammerView&gt;, rely on the onload event of the HTML page to make themselves active. In a PPR lifecycle, JViews JSF components might be inserted into a loaded HTML page by a partial request. A typical use case is when you insert JViews components into a tab panel. When you make the panel tab visible by clicking its header, the contained JViews components will be rendered and inserted into the HTML page. However, the onload event of the HTML page will have already fired when it was initially loaded. Under this situation, we have to simulate a fake onload event to make the JViews JSF components active.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small;"><span style="font-family: Arial;">A JViews JSF component is rendered as a set of HTML elements and JavaScript codes. In a PPR environment, a JViews component can be inserted into or removed from a loaded HTML page at any moment. JViews JavaScript code might be evaluated and re-evaluated as many times as needed. The order of the evaluation of the JavaScript elements is also very important to guarantee the functionality of the JViews components. To resolve these problems, PPR frameworks such as Trinidad, RichFaces, and ICEfaces put the JavaScript code for their components in the head element of the HTML page. They can do this because they are JSF technology providers and they have entire control of the HTML page they are rendering. However, we as third party JSF components providers have absolutely no control over the HTML page. We had to reorganize our JavaScript code so that it can be dynamically loaded as many times as necessary and in the right order. <span style="mso-spacerun: yes;"> </span></span></span></p>
<h2 style="margin: 12pt 0in 3pt;"><span style="font-size: large; font-family: Arial;">Developing PPR JViews Web Applications</span></h2>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">In JViews 8.5, JSF components have been refactored for supporting PPR without breaking the compatibility with previous versions. This gives developers flexibilities to add PPR features to their existing Web applications or to create new PPR Web applications.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">In case you want to create new Web applications and want to benefit from PPR features, we suggests you develop your application with one of the supported PPR frameworks mentioned above. You can choose the framework of your preference that matches the functionality of your requirements. On the JViews side, Trinidad and ICEfaces are fully supported. JViews 8.5 supports RichFaces also, but has some limitations under Ajax mode. We have planned to fully support RichFaces for the next release.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Arial;">In case you have developed your JSF applications with a previous version of JViews, you will be able to benefit immediately from the PPR features if you develop with one of the PPR frameworks mentioned above. If you develop with another JSF framework that does not support PPR at all, you won’t be able to benefit from the JViews PPR features. However, this does not mean that you have no choice other than doing a full page refresh, because the JViews JSF components have great Ajax features and can update themselves efficiently without invoking a full page refresh.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2009/01/23/partial-page-refresh-ppr-support-in-jviews-85/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JavaFx with JViews</title>
		<link>http://blogs.ilog.com/jviews/2008/12/23/javafx-with-jviews/</link>
		<comments>http://blogs.ilog.com/jviews/2008/12/23/javafx-with-jviews/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 19:56:34 +0000</pubDate>
		<dc:creator>Georg Sander</dc:creator>
		
		<category><![CDATA[Graphic Framework]]></category>

		<category><![CDATA[RIA]]></category>

		<category><![CDATA[JavaFX]]></category>

		<category><![CDATA[JViews]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/2008/12/23/javafx-with-jviews/</guid>
		<description><![CDATA[After many previews, Sun finally released JavaFx 1.0 on December 4th. Announced as a technology umbrella for Rich Internet Applications (RIA), the part we can use today is JavaFx Script. Other parts such as JavaFx Mobile and JavaFx TV will&#8230;]]></description>
			<content:encoded><![CDATA[<p>After many previews, Sun finally released JavaFx 1.0 on December 4th. Announced as a technology umbrella for Rich Internet Applications (RIA), the part we can use today is JavaFx Script. Other parts such as JavaFx Mobile and JavaFx TV will come sometime in the future.</p>
<p>JavaFx Script (I will call in the following just JavaFx, for short) is a scripting language compiled into Java Byte Code. Its main purpose is the specification of GUI parts of Internet applications. It contains syntactic sugar to simplify this task, such as a declarative syntax for object containments and comfortable data binding statements. Where you need to write 40-50 lines of Java code for the data binding, you can do it in JavaFx code with just one line of code. And it is fairly easy to learn, like most other scripting languages for the Web. But at the end, it is just another way to create Java Byte Code, something that you can do with Java as well.</p>
<p>For us Java programmers, the big advantage of JavaFx over its competitors Flex and Silverlight is the fact that JavaFx is compatible with Java. We can call Java code from JavaFx and vice versa smoothly. That&#8217;s at least what all the hype and marketing about JavaFx promises to you. <em>Well, let&#8217;s try with JViews whether this is really the truth!</em></p>
<h3>Sample Application - First Try</h3>
<p>The following will show how to integrate an IlvScrollManagerView into a JavaFx application and how to implement a binding between JavaFx GUI elements and graphic objects displayed in the manager view. If you are using the NetBeans IDE, the first step is to create a new JavaFx project and to add the directory containing the JLM key and the JViews libraries (jviews-framework-lib.jar is enough in this example) to the libraries of the JavaFx project.</p>
<p>In JavaFx, you can import and use Java classes just like JavaFx classes. There is no need to declare a top level class or a main function. Hence, the first try is easy:</p>
<pre>
 package jviews;

import java.lang.*;
import ilog.views.*;
import ilog.views.util.*;
import ilog.views.graphic.*;
import ilog.views.interactor.*;
import ilog.views.swing.*;
import javafx.ext.swing.*;
import javafx.scene.Scene;
import javafx.stage.Stage;

var grapher = new IlvGrapher();
var mgrview = new IlvManagerView(grapher);
var scrview = new IlvJScrollManagerView(mgrview);

scrview.setPreferredSize(new java.awt.Dimension(343,280));
var viewnode = SwingComponent.wrap(scrview);

Stage {
    title: "JViews Manager View Application"
    width: 350
    height: 350
    scene: Scene {
        content: [ viewnode ]
    }
}</pre>
<p>JavaFx uses the scene graph to specify the GUI. The part <code>Stage { ... }</code> specifies in declarative way a scene graph containing just the manager view. You cannot use Swing components directly in the scene graph, but you can wrap them into scene graph nodes by <code>SwingComponent.wrap(scrview)</code>. Try it and you will see the scrollable manager view inside your JavaFx application.</p>
<p><strong>But it does not quite work!</strong> After filling the grapher with contents, you cannot scroll inside the manager view. IlvScrollManagerView is a complex Swing component, and <code>SwingComponent.wrap</code> was probably only tested on fairly simple Swing components. IlvManagerView uses bitblt operations to maximize scrolling speed, and this mechanism does not work in JavaFx. The bitblt scrolling can be switched off by</p>
<pre>
mgrview.setOptimizedTranslation(false);</pre>
<p>but even then it fails to redraw the view when scrolling. By debugging the component hierarchy, I found that the JavaFx wrapper of the IlvScrollManagerView is a <em>com.sun.embeddedswing.EmbeddedPeer$ShellContainer</em> which has component bounds of size 0. The scrolling mechanism of IlvManagerView calculates the visible area by checking all component bounds and ends up with an area of size 0. Hence it thinks that nothing is visible that needs redrawing during scrolling.</p>
<h3>Sample Application - Second Try</h3>
<p>No reason to panic! JavaFx allows subclassing, so we can fix the problem in a subclass of IlvManagerView. JavaFx even allows multiple inheritance to some degree, but for the fix, a simple subclass <em>ManagerView</em> with single inheritance is good enough. Since the redraw during scrolling is missing, we override <em>translate</em> to call <em>repaint</em> explicitly. Due to the possibility of multiple inheritance, <code>super</code> is not a keyword in JavaFx. Instead you need to specify which super class is meant, hence the call <em>IlvManagerView.translate</em> in the following JavaFx code has the same meaning like <em>super.translate</em> in Java. The beginning of my simple JavaFx script now looks like this:</p>
<pre>
class ManagerView extends IlvManagerView {
    override public function translate(x,y,redraw) {
        IlvManagerView.translate(x, y, redraw);
        if (redraw)
          repaint();
    }
}

var grapher = new IlvGrapher();
var mgrview = new ManagerView();
var scrview = new IlvJScrollManagerView(mgrview);
mgrview.setManager(grapher);
mgrview.setOptimizedTranslation(false);</pre>
<p>In order to be able to select objects in the manager view, we specify a select interactor. Here we hit the second problem: the select interactor works by default in ghost mode using Xor drawing routines. As mentioned in a <a href="http://blogs.ilog.com/jviews/2008/11/04/jdk16u10-easy-workaround-for-the-severe-performance-regression-of-xor-drawing/">previous BLOG entry</a>, this does not work smoothly in JDK 1.6.0 update 10 and update 11. But unfortunately, Sun recommend exactly these JDK versions for Javafx. To work around this problem, we select the opaque mode of the select interactor:</p>
<pre>
var interactor = new IlvSelectInteractor();
interactor.setOpaqueMove(true);
interactor.setOpaqueDragSelection(true);
mgrview.setInteractor(interactor);</pre>
<h3>Sample Application - Binding JViews to JavaFx</h3>
<p>To show how to bind JavaFx GUI elements to JViews objects, I first need to fill the grapher. I define a simple flowchart here:</p>
<pre>
var polygonpoints = [
    new IlvPoint(90,60),
    new IlvPoint(110,75),
    new IlvPoint(90,90),
    new IlvPoint(70,75) ];
var bends1 = [ new IlvPoint(30,75) ];
var bends2 = [ new IlvPoint(150,75) ];
var bends3 = [ new IlvPoint(30,155), new IlvPoint(90,155) ];
var bends4 = [ new IlvPoint(150,155), new IlvPoint(90,155) ];
var node1 = new IlvEllipse(new IlvRect(70,10,40,30));
var node2 = new IlvPolygon(polygonpoints);
var node3 = new IlvRectangle(new IlvRect(10,110,40,30));
var node4 = new IlvRectangle(new IlvRect(130,110,40,30));
var node5 = new IlvEllipse(new IlvRect(70,170,40,30));
var link1 = new IlvPolylineLinkImage(node1, node2, true, null);
var link2 = new IlvPolylineLinkImage(node2, node3, true, bends1);
var link3 = new IlvPolylineLinkImage(node2, node4, true, bends2);
var link4 = new IlvPolylineLinkImage(node3, node5, true, bends3);
var link5 = new IlvPolylineLinkImage(node4, node5, true, bends4);

node1.setFillOn(true);
node1.setBackground(java.awt.Color.pink);
node2.setFillOn(true);
node2.setStrokeOn(true);
node2.setForeground(java.awt.Color.yellow);
node2.setBackground(java.awt.Color.black);
node3.setFillOn(true);
node3.setBackground(java.awt.Color.green);
node4.setFillOn(true);
node4.setBackground(java.awt.Color.green);
node5.setFillOn(true);
node5.setBackground(java.awt.Color.pink);

grapher.addNode(node1, true);
grapher.addNode(node2, true);
grapher.addNode(node3, true);
grapher.addNode(node4, true);
grapher.addNode(node5, true);
grapher.addLink(link1, true);
grapher.addLink(link2, true);
grapher.addLink(link3, true);
grapher.addLink(link4, true);
grapher.addLink(link5, true);</pre>
<p>Next, I define a slider. I want to control the position of a node in the grapher with this slider. JavaFx allows you to use predefined sliders in standard Swing style:</p>
<pre>
var slider = SwingSlider {
    width: 300
    minimum: 0
    maximum: 100
    value: 0
    vertical: false
    translateX: 10
    translateY: 290
};</pre>
<p>We need to add the slider to the scene graph. The scene graph with the swing slider is now:</p>
<pre>
Stage {
    title: "JViews Manager View Application"
    width: 350
    height: 350
    scene: Scene {
        content: [ viewnode slider ]
    }
}</pre>
<p>JavaFx offers the keyword <code>bind</code> to implement data binding between JavaFx attributes, but I cannot bind the node position directly to the slider value. First, the node position is not a JavaFx attribute but a field of a Java class. Secondly, you either must call <code>applyToObject</code> or <code>moveObject</code> on the manager when the object moves, otherwise the quadtree of JViews gets messed up. But we can declare an auxiliary JavaFx variable and bind it to the slider value so that the variable gets updated when the slider thumb is moved:</p>
<pre>
var position = bind slider.value ...</pre>
<p>and with the <code>replace</code> keyword, we can add code that is executed whenever this auxiliary variable changes. The entire data binding is here:</p>
<pre>
var position = bind slider.value on replace {
    grapher.moveObject(node4, 130 + 3 * position, 110, true);
    grapher.applyToObject(link3, IlvApplyObject {
        override public function apply(g:IlvGraphic, arg:Object) {
            link3.movePoint(1, 150 + 3 * position, 75, null);
        }

    }, null, true);
   grapher.applyToObject(link5, IlvApplyObject {
        override public function apply(g:IlvGraphic, arg:Object) {
               link5.movePoint(1, 150 + 3 * position, 155, null);
        }

       }, null, true);
};</pre>
<p>This causes a node and two bend points of links to move when we use the slider.</p>
<h3>Summary</h3>
<p><strong>Finally it works smoothly.</strong> The applet does not yet look very fancy, but it shows the basic principle. The entire source code of this simple sample can be found <a href="http://blogs.ilog.com/jviews/wp-content/uploads/2008/12/javafxsample.zip" title="JavaFx JViews Sample">here</a>. We showed some small tricks to get it working, but overall JavaFx works very smoothly with JViews. JavaFx is an alternative for programmers to code Java components and it might grab its share of the RIA market. Right now, JavaFx is still very new, but I think it is a promising platform.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2008/12/23/javafx-with-jviews/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ILOG JViews Graph Layout for Eclipse step-by-step exercise (full version)</title>
		<link>http://blogs.ilog.com/jviews/2008/12/23/ilog-jviews-graph-layout-for-eclipse-step-by-step-exercise-full-version/</link>
		<comments>http://blogs.ilog.com/jviews/2008/12/23/ilog-jviews-graph-layout-for-eclipse-step-by-step-exercise-full-version/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 10:59:57 +0000</pubDate>
		<dc:creator>Jerome Joubert</dc:creator>
		
		<category><![CDATA[Development practices]]></category>

		<category><![CDATA[Eclipse]]></category>

		<category><![CDATA[Graph Layout]]></category>

		<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/2008/12/23/ilog-jviews-graph-layout-for-eclipse-step-by-step-exercise-full-version/</guid>
		<description><![CDATA[This exercise describes how to use <a target="_blank" href="http://www.ilog.com/products/jviews/graphlayoutforeclipse/">ILOG JViews Graph Layout for Eclipse </a>to add powerful Layout capabilities to Eclipse/GMF modelers. The movie explains the types of services you can expect from this integration and shows how to take a pure&#8230;]]></description>
			<content:encoded><![CDATA[<p>This exercise describes how to use <a target="_blank" href="http://www.ilog.com/products/jviews/graphlayoutforeclipse/">ILOG JViews Graph Layout for Eclipse </a>to add powerful Layout capabilities to Eclipse/GMF modelers. The movie explains the types of services you can expect from this integration and shows how to take a pure GMF application and enable JViews algorithms on it.</p>
<p><strong>Prerequisites</strong>: This step-by-step exercise assumes that you have already installed <a target="_blank" href="http://www.eclipse.org/downloads/"><font color="#4571d0">Eclipse</font></a> 3.4 with its modeling extensions (EMF, GMF and GEF), and that you have <font color="#666666">installed</font> and integrated <a target="_blank" href="http://www.ilog.com/products/jviews/graphlayoutforeclipse/">JViews Graph Layout for Eclipse</a>. A full evaluation version can be requested <a target="_blank" href="http://www.ilog.com/products/jviews/graphlayoutforeclipse/eval/">here</a>.</p>
<p><a href="http://blogs.ilog.com/jviews/wp-content/uploads/2008/12/ilogviewseclipsegraphlayoutexamplesgmfeditorstep1.zip" title="Project for Step 1">Project for Step 1</a> :Download this zipped Plugin Project corresponding to the first step of this exercise. You will have to import this project into your Eclipse environment. It contains a generic modeler, based on GMF. The following movie describes how to import this project (at 5 minutes and 28 seconds in the movie).</p>
<p align="center">The following movie is best viewed in full screen mode: <embed enablejs="true" overstretch="true" allowfullscreen="true" allowscriptaccess="always" flashvars="file=http://visudemos.ilog.com/videos/GL4E_GMF_Exercise.swf&amp;displayheight=300" height="300" width="400" src="http://visudemos.ilog.com/videos/mediaplayer.swf" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></p>
<p><strong>Code Snippets:</strong> To make things easier, here are some code snippets you can use to complete the exercise:</p>
<p><em>Step1:</em></p>
<pre>public class MyDiagramEditPart extends DiagramEditPart implements IGrapherEditPart {  private GMFLayoutSource myLayoutSource; // reference on the layout source implementation  public void activate() {   

    myLayoutSource = new GMFLayoutSource(this);  // BEFORE CALLING super.activate();   

    IlvHierarchicalLayout layout = new IlvHierarchicalLayout();  // Create a hierarchical layout   

    layout.setGlobalLinkStyle(IlvHierarchicalLayout.ORTHOGONAL_STYLE); // Configure layout   

    layout.setFlowDirection(ilog.views.IlvDirection.Right);   

    myLayoutSource.setGraphLayout(layout);   // Register Graph Layout configuration   

    super.activate();   

  }   

  public void deactivate() {   

    super.deactivate();   

    myLayoutSource.dispose();  // cleanup   

    myLayoutSource = null;   

  }   

  public Object getAdapter (Class adapter) {   

    if (adapter.equals(ILayoutSource.class)) {   

      return myLayoutSource;   

    }   

    return super.getAdapter(adapter);   

  }   

  public boolean isTopLevel() {   

    return true;   

  }   

}</pre>
<p><em>Step2:</em></p>
<pre>public class MyEditor extends DiagramDocumentEditor {  ...public void initializeGraphicalViewerContents() {   

    super.initializeGraphicalViewerContents();   

    ILayoutSource layoutSource =   

      (ILayoutSource)getDiagramGraphicalViewer().getContents().   

      getAdapter(ILayoutSource.class);   

    layoutSource.initialize();   

  }</pre>
<p><strong>Next Steps:</strong></p>
<p>If you have completed this exercise, you can then have a look at a more complete version of a GMF-based editor, available in the Samples section of <strong>JViews Graph Layout for Eclipse</strong>. The easiest way is to display the Eclipse Welcome page (available in Help menu) and look for the GMF Editor appearing in the Samples section. You will see a more complete integration, including property editors for customizing the different layouts, persistence of your settings, and much more.</p>
<p><!-- /patternTopic--></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2008/12/23/ilog-jviews-graph-layout-for-eclipse-step-by-step-exercise-full-version/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JDK1.6u11: easy workaround for broken local applets</title>
		<link>http://blogs.ilog.com/jviews/2008/12/16/jdk16u11-easy-workaround-for-broken-local-applets/</link>
		<comments>http://blogs.ilog.com/jviews/2008/12/16/jdk16u11-easy-workaround-for-broken-local-applets/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 17:26:19 +0000</pubDate>
		<dc:creator>Adrian Vasiliu</dc:creator>
		
		<category><![CDATA[Charts]]></category>

		<category><![CDATA[Diagrammer]]></category>

		<category><![CDATA[Gantt]]></category>

		<category><![CDATA[Graphic Framework]]></category>

		<category><![CDATA[Maps]]></category>

		<category><![CDATA[TGO]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/2008/12/16/jdk16u11-easy-workaround-for-broken-local-applets/</guid>
		<description><![CDATA[Yet another JDK update, yet another severe bug. With the recent update 10 of JDK 1.6, we got <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6635462">Sun BR 6635462</a> ("XOR rendering is extremely slow"), for which we indicated a workaround in a <a href="http://blogs.ilog.com/jviews/2008/11/04/jdk16u10-easy-workaround-for-the-severe-performance-regression-of-xor-drawing/">previous post</a>.

Now, Sun released Java 1.6&#8230;]]></description>
			<content:encoded><![CDATA[<p>Yet another JDK update, yet another severe bug. With the recent update 10 of JDK 1.6, we got <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6635462">Sun BR 6635462</a> (&#8221;XOR rendering is extremely slow&#8221;), for which we indicated a workaround in a <a href="http://blogs.ilog.com/jviews/2008/11/04/jdk16u10-easy-workaround-for-the-severe-performance-regression-of-xor-drawing/">previous post</a>.</p>
<p>Now, Sun released Java 1.6 update 11 which did not solve the previous bug, but&#8230; introduced <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6784894">Sun BR 6784894</a> (&#8221;Regression: applets loaded from local disk can not access co-located resources&#8221;). Basically, with this Java update, and until Sun fixes this severe regression, the applets that we ship with JViews will fail to run locally (from your hard disk). Applets executed on the web are not affected.</p>
<p>Here is the workaround for this new bug:</p>
<p>1. Create a text file named <code>.java.policy</code> that grants &#8220;read&#8221; access to, say, your installation of ILOG JViews. An example:</p>
<pre>
grant {
  permission java.io.FilePermission "c:\\ILOG\\-", "read";
};</pre>
<p>2. Place the file in the &#8220;home directory&#8221; of your user account.</p>
<p>3. Restart the browser.</p>
<p>We tested it, and it works like a charm.</p>
<p>We think Sun is working on fixing the broken applets issue as soon as possible. Since it can take quite a while until an update including the fix will be released, the workaround might come handy&#8230; Enjoy. And let&#8217;s all hope the Java platform will soon retrieve its stability.</p>
<p><b><i>Update</b>: JDK 1.6 update 12 is now released, and it fixed indeed this bug.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2008/12/16/jdk16u11-easy-workaround-for-broken-local-applets/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Usability Challenges in RIA applications</title>
		<link>http://blogs.ilog.com/jviews/2008/12/16/usability-challenges-in-ria-applications/</link>
		<comments>http://blogs.ilog.com/jviews/2008/12/16/usability-challenges-in-ria-applications/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 13:10:30 +0000</pubDate>
		<dc:creator>Thomas Baudel</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[Development practices]]></category>

		<category><![CDATA[JSF]]></category>

		<category><![CDATA[RIA]]></category>

		<category><![CDATA[Elixir]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[Usability]]></category>

		<category><![CDATA[User-Centered design]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/2008/12/16/usability-challenges-in-ria-applications/</guid>
		<description><![CDATA[The advent of Flash- and Ajax-based applications a few years ago was met with skepticism by many renowned usability experts (such as <a href="http://www.useit.com/alertbox/20001029.html" title="Flash: 99% Bad" target="_blank">J. Nielsen</a>). Fortunately, a lot of progress has been made, in the frameworks themselves,  through the rise of&#8230;]]></description>
			<content:encoded><![CDATA[<p>The advent of Flash- and Ajax-based applications a few years ago was met with skepticism by many renowned usability experts (such as <a href="http://www.useit.com/alertbox/20001029.html" title="Flash: 99% Bad" target="_blank">J. Nielsen</a>). Fortunately, a lot of progress has been made, in the frameworks themselves,  through the rise of standard design patterns and, for a large part, thanks to numerous tools that implement web-development best practices, such as <a href="http://www.ilog.com/products/jviews/" title="ILOG JViews">JViews </a>or <a href="http://www.ilog.com/products/ilogelixir/" title="ILOG Elixir" target="_blank">Elixir</a>. Nowadays, issues with the browser&#8217;s back-button, or accessibility for users with special needs, are more or less resolved. Developers are generally aware of many usability pitfalls to avoid when designing for the web.</p>
<p>Still, usability studies and practice teach us some valid points to remember when designing a Rich Internet Application (RIA) application. This post explains some of the issues your users may encounter and how to avoid them by following a user-centered design process.</p>
<p>First, let&#8217;s define what we mean by usability. Among several propositions, the ISO 9241-11 norm states that the quality aspect of usability is “<em>the extent to which a product can be used by specified users to achieve specified goals with effectiveness, efficiency and satisfaction in a specified context of use.</em>”</p>
<p>This definition includes four elements that are necessary to create a usable system:</p>
<ul>
<li> There are specified users of the system.</li>
<li>The users have a set of specified goals.</li>
<li>The system should allow user goals to be met (effectively) in an efficient manner and the users will be satisfied with the process or outcome.</li>
<li>The system will be used in a particular context (e.g. within a physical location, a business process).</li>
</ul>
<p>A usable system is one that is designed to consider all of these aspects. This <a href="http://www.steptwo.com.au/papers/kmc_whatisusability" title="What is usability">post by Donna Maurer </a>somewhat refines this definition.</p>
<p><strong>The User Mental Model in web applications<br />
</strong><br />
A  RIA lies at the crossroad of 2 user interface paradigms: the desktop application, or <a href="http://www.usabilityfirst.com/glossary/term_88.txl" title="WIMP at usability first">WIMP</a> model, and the web page, or <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" title="Representational State Transfer" target="_blank">REST</a> model. Subtle differences between those 2 models can induce confusion  when your application tries to take advantage of both. For instance, a single click on a link is sufficient to &#8220;open&#8221; the associated web-page, whereas on the desktop, one needs to double-click to open a document. Drag-and-drop is often used to perform actions on the desktop, while users usually expect clicking in a web page doesn&#8217;t go beyond selecting text. The back button in the browser is often interpreted as the equivalent of some kind of &#8220;undo&#8221; action, whereas in a RIA, the need to maintain an interaction state often precludes such interpretation.</p>
<p>Cognitive psychology tells us that in a particular context (here, desktop or web), users build a <em>mental model </em>of how to operate the interface:  they create expectations from the context to find out which operations are available and what to do next. &#8220;<em>Like a pane of glass framing and subtly distorting our vision, mental models determine what we see.</em>&#8221; - Peter Senge.</p>
<p>One of the key challenges when designing a RIA is to keep in mind that you&#8217;re trying to make the best of two worlds, while preserving a consistent interaction model is paramount. This means that somehow, you&#8217;ll need to take into account the interferences brought by those coexisting models and provide ample visual cues when you&#8217;re proposing alternate or novel interaction methods.</p>
<p><strong>What kind of interactions for your web application?<br />
</strong><br />
Deciding what interaction methods to implement and how &#8220;rich&#8221; should your interface be is always a matter of context. For instance, drag-and-drop of panes on a portal such as <a href="http://igoogle.com" title="iGoogle" target="_blank">igoogle</a> is usually well accepted, because the panes have high-visibility borders, and the task to perform is the arrangement of a display quite similar to the arrangement of windows on a desktop. In contrast, on many e-commerce sites, drag-and-drop of items to the purchase cart is often a bad idea: no perceptual cues indicate that the item is &#8220;draggable&#8221; ; when the items to display don&#8217;t fit on a single screen, drag-and-drop operations interfere with the need to scroll up or down ; finally, the &#8220;remove from cart&#8221; operation is rarely implemented consistently with the &#8220;add-to-cart&#8221; method (i.e. by using a &#8220;drag to bin&#8221; operation).</p>
<p>Determining the context of operations leads to the notion of <em>task</em>. A task is a procedural description of what the user has to do, framed within the context of the user&#8217;s mental model. Designing proper interactions therefore requires making tasks explicit to determine what could or should the mental model be at any point in time. It turns out that fully eliciting tasks is extremely tedious. That&#8217;s why it is often limited to mission-critical situations, such as air traffic control. It is also of limited use in the context of web applications, as many users may come to your site with different goals and expectations.</p>
<p>In the design phase and for interface specifications, usability specialists often resort to usability guidelines which allow checking for user interface consistency in a reasonably efficient way. There are several levels of guidelines, from the broad recommendations on the proposed workflow to focused considerations on layout and visual appearance of widgets. J. <a href="http://www.useit.com/papers/heuristic/heuristic_list.html" title="10 heuristics for UI design">Nielsen&#8217;s 10 heuristics</a>, for instance, are of a very general nature and can be applied in pretty much every context. Ben Shneiderman&#8217;s <a href="http://en.wikipedia.org/wiki/Direct_manipulation" title="Direct Manipulation">direct manipulation</a> principles are very useful and easy to use guidelines to develop highly interactive applications. On the desktop, all major constructors provide a set of user interface guidelines that are to be followed for a particular platform. In the context of the web, though, they are inapplicable, as web applications follow a &#8220;menus, lists and forms&#8221; interaction style rather than direct manipulation (this <a href="http://www.interaction-design.org/encyclopedia/interaction_styles.html" target="_blank">page at interactiondesign explains the stylistic differences</a>). One can resort to some standard web design guidelines, such as the <a href="http://www.usability.gov/pdfs/guidelines.html" title="Research-Based Web Design &amp; Usability Guidelines">Research-Based Web Design &amp; Usability Guidelines</a>.</p>
<p>The RIA platforms are somewhat too young to have given rise to an agreed-upon body of guidelines. <a href="http://www.flazoom.com/usability/" title="Flazzom Flash usability guidelines">Flazzom</a>, targeted at the Flash platform , but applicable for the most part to other web platforms, comes close enough to meet the needs of a web designer. Rather than guidelines, pattern libraries,  such as <a href="http://developer.yahoo.com/ypatterns/" title="Yahoo design pattern library" target="_blank">yahoo&#8217;s</a>, designed by experts, help implementing usable and rich web applications: because they are used by many sites, users acquire quite rapidly the right mental model to use them with profit.</p>
<p><strong>The user at the center of the design process<br />
</strong><br />
Still, because of their generality of purpose, guidelines are only able to provide broad rules, whose applicability and usefulness vary with the application considered. What usability specialists recommend is to put the user at the center of the design process.</p>
<p>Various methodologies exist to this effect: collaborative design, user testing (inside the usability lab or in situ), longitudinal studies of users in context, surveys, usage trace analysis&#8230; This t<a href="http://www.usabilitynet.org/tools/methods.htm" title="Usabilty methods at UsabilityNet" target="_blank">able at UsabilityNet</a> provides an interesting overview.</p>
<p>Choosing one or more methods is a matter of available resources, appropriateness, design stage, and, perhaps, a touch of personal taste. Still, all those methods rely on a fundamental observation: as a designer, your judgment is too biased to let you find flaws and limitations in your design, and to judge of its relevance to meet the user needs. Only target users, when carefully led to express their approach to the task, can guide you towards a design they appropriate themselves.</p>
<p>In summary, while RIA applications promise in general much better usability by expanding the realm of possibilities, they also raise particular usability challenges. In a large part, those challenges are the result of the additional power they give to the designer to mix and match interaction techniques and styles. We hope this post helps you get a sense of what user centered design can bring to your design activity to help you satisfy your users better and more cost-effectively. Perhaps the essential recommendation should be: just like for any other interactive application that will be used by someone else than its designer:<em> involve your target users in the design, from start to finish</em>.</p>
<p>Thomas Baudel, Sophie de Bonis &amp; Sandra Belfils</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2008/12/16/usability-challenges-in-ria-applications/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JDK1.6u10: easy workaround for the severe performance regression of XOR drawing</title>
		<link>http://blogs.ilog.com/jviews/2008/11/04/jdk16u10-easy-workaround-for-the-severe-performance-regression-of-xor-drawing/</link>
		<comments>http://blogs.ilog.com/jviews/2008/11/04/jdk16u10-easy-workaround-for-the-severe-performance-regression-of-xor-drawing/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 14:49:08 +0000</pubDate>
		<dc:creator>Adrian Vasiliu</dc:creator>
		
		<category><![CDATA[Charts]]></category>

		<category><![CDATA[Diagrammer]]></category>

		<category><![CDATA[Gantt]]></category>

		<category><![CDATA[Graphic Framework]]></category>

		<category><![CDATA[Maps]]></category>

		<category><![CDATA[TGO]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[JDK]]></category>

		<category><![CDATA[performance regression]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/2008/11/04/jdk16u10-easy-workaround-for-the-severe-performance-regression-of-xor-drawing/</guid>
		<description><![CDATA[As you may know, the recent update of Sun's JDK (1.6.0 update 10) is, by far, much more than the usual bunch of bug fixes. Atypically, it also introduces new features that are described in the <a href="http://java.sun.com/javase/6/webnotes/6u10.html" rel="nofollow" target="_blank">release notes</a>.

So far&#8230;]]></description>
			<content:encoded><![CDATA[<p>As you may know, the recent update of Sun&#8217;s JDK (1.6.0 update 10) is, by far, much more than the usual bunch of bug fixes. Atypically, it also introduces new features that are described in the <a href="http://java.sun.com/javase/6/webnotes/6u10.html" rel="nofollow" target="_blank">release notes</a>.</p>
<p>So far so good, but using this update on Windows you might experience severe performance regressions for XOR drawing (typically used for drawing &#8220;ghosts&#8221;). This hurts our products as any other product or Java graphic app doing similar operations. Whether it actually hurts on a given machine, it may be dependent on the video card and drivers that you have installed.</p>
<p>Sun&#8217;s release notes warn us about this potential regression (see the section <em>New Direct3D Accelerated Rendering Pipeline for Microsoft Windows Platforms, Enabled by Default</em>). Sun tends to call it a &#8220;limitation&#8221;, however they classified the following as a bug: <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6635462" rel="nofollow" target="_blank">&#8220;D3D: XOR rendering is extremely slow&#8221;</a> (don&#8217;t hesitate to vote for it). Hence, there is some hope the issue will be solved in a future update. In the meantime, you can apply the easy workaround mentioned in Sun&#8217; release notes:</p>
<p>“To disable the Direct3D Pipeline, pass the following property to the Java VM: -Dsun.java2d.d3d=false. Alternatively, set the J2D_D3D environment variable to &#8216;false&#8217; prior to starting your application (or set it globally).”</p>
<p>See also this forum discussion: <a href="http://forums.sun.com/thread.jspa?threadID=5342281" rel="nofollow" target="_blank">“Java 2D - Problem drawing in XORMode with JDK1.6 Update 10”</a>.</p>
<p><em>Update Dec. 4th 2008: JDK 1.6 update 11 is now available. There was hope it might fix this issue&#8230; but testing shows this is not (yet) the case.</em><br />
<em>Update May 27th 2009: <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6635462" rel="nofollow" target="_blank">Sun&#8217;s BR</a> now has a comment saying &#8220;This bug has been resolved in 6u14b03 (early builds available from jdk6.dev.java.net).&#8221;</em><br />
<em>Update May 29th 2009: tested okay against Sun JDK 1.6.0_14 b08 on Windows.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2008/11/04/jdk16u10-easy-workaround-for-the-severe-performance-regression-of-xor-drawing/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
