<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.2" -->
<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/"
	>

<channel>
	<title>ILOG JViews Blog</title>
	<link>http://blogs.ilog.com/jviews</link>
	<description>Just another WordPress weblog</description>
	<pubDate>Thu, 03 Jul 2008 09:50:28 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.2</generator>
	<language>en</language>
			<item>
		<title>Fast text with less memory</title>
		<link>http://blogs.ilog.com/jviews/2008/07/02/fast-text-with-less-memory/</link>
		<comments>http://blogs.ilog.com/jviews/2008/07/02/fast-text-with-less-memory/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 16:09:08 +0000</pubDate>
		<dc:creator>Georg Sander</dc:creator>
		
		<category><![CDATA[Development practices]]></category>

		<category><![CDATA[Diagrammer]]></category>

		<category><![CDATA[Real-World]]></category>

		<category><![CDATA[Code Optimization]]></category>

		<category><![CDATA[diagram]]></category>

		<category><![CDATA[JViews]]></category>

		<category><![CDATA[Real-World examples]]></category>

		<category><![CDATA[Text]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/2008/07/02/fast-text-with-less-memory/</guid>
		<description><![CDATA[<img src="http://blogs.ilog.com/jviews/wp-content/uploads/2008/07/lighttext.gif" alt="Light Text Sample" align="left" hspace="5" vspace="5" />Text occurs in every diagramming application, for instance as labels on nodes and links. In JViews, you have the choice between IlvZoomableLabel and IlvText; IlvZoomableLabel is more a text picture that allows fancy gradient paints inside the glyphs while the&#8230;]]></description>
			<content:encoded><![CDATA[<p><img src="http://blogs.ilog.com/jviews/wp-content/uploads/2008/07/lighttext.gif" alt="Light Text Sample" align="left" hspace="5" vspace="5" />Text occurs in every diagramming application, for instance as labels on nodes and links. In JViews, you have the choice between IlvZoomableLabel and IlvText; IlvZoomableLabel is more a text picture that allows fancy gradient paints inside the glyphs while the solid colored IlvText is usually faster and allows more traditional text manipulations (wrapping mode and so on). Both classes provide plenty of features that allow to adapt them to all possible situations.</p>
<p><em><strong>Plenty of features &#8230; sigh!</strong></em> Features cost memory and performance. Each text parameter that can be customized needs to be stored in the text object, and if you have many features, you also have many parameters. Indeed, IlvText for instance uses quite a bit of memory, and if you have 100000 text objects, you can run into memory problems &#8230; <em>that are avoidable.</em></p>
<h3>Reducing the number of parameters</h3>
<p>What if we don&#8217;t need all these customizable parameters? Let&#8217;s assume all text objects in our application display a single line each, and the only variable parameters are the color of the text and of the background rectangle, and of course the label and position of the text object. Then we need to store 2 colors, a string and a position in the text object, but not parameters such as antialiasing, font, wrapping mode, margins and so on, because these can be hard coded and are fixed for all text objects. This is the essential idea of a lightweight text: use only memory for parameters that are customizable, and avoid memory for parameters that we never want to customize in our application.</p>
<p><em><strong>Good idea, but it sounds like a lot of effort!</strong></em> My new LightText class needs to render text to display it. How can I do this without writing a text rendering engine from scratch? The idea is to use the text rendering engine of IlvText. Whenever I need to draw the LightText, I allocate a new IlvText object, draw it instead, and then give it free. That is, I delegate the rendering of the LightText to a temporary IlvText object allocated on the fly. The Java garbage collection will make sure that the memory footprint remains low. The first sketch is this:</p>
<pre>
public class LightText extends IlvGraphic {
    Color foreground;
    Color background;
    IlvRect bounds;       // the current position
    String label;            // the label text
    ...

    public void draw(Graphics dst, IlvTransformer t) {
        getDelegate(true).draw(dst, t);
    }

    private IlvText getDelegate(boolean includeBounds) {
        IlvText text = new IlvText(new IlvPoint(), label));
        // hard coded parameters
        text.setAntialiasing(true);
        text.setLeftMargin(4);
        text.setRightMargin(4);
        text.setTopMargin(4);
        text.setBottomMargin(4);
        text.setFillOn(true);
        text.setStrokeOn(false);
        // customized parameters
        text.setForeground(foreground);
        text.setFillPaint(background);
        if (includeBounds)
            text.moveResize(bounds);
        else if (bounds != null)
            text.move(bounds.x, bounds.y);
        return text;
    }
}</pre>
<p>Now LightText uses less memory, because it stores less parameters than IlvText, but of course this is not fast. When drawing the objects, delegates must be allocated, and this needs time. This does not hurt much when we draw only 10-30 objects, but when we have to draw 100000 objects, it will be much too slow.</p>
<h3>Speeding up drawing with small zoom level</h3>
<p><em><strong>Well, 100000 objects on the screen?</strong></em> We only need to draw 100000 objects at the same time if the view is demagnified. Otherwise all these objects would not fit on the screen. But when the view is demagnified, each single object occupies only a tiny area and you cannot recognize the details of the object anyway. Therefore it is not needed to draw all details. In this case, it is sufficient to draw only a tiny rectangle instead of the fully rendered text. Only when the view is magnified, we need to draw the text in detail, but in this case we never need to draw many objects. Hence, when the view is magnified, the slowdown caused by the few delegate drawing does not hurt so much, and when the view is demagnified, we don&#8217;t need to allocate many delegates. Here is the modified draw routine:</p>
<pre>
    public void draw(Graphics dst, IlvTransformer t) {
        IlvRect bbox = boundingBox(t);

        if (bbox.width &lt;= 2 || bbox.height &lt;= 2) {
            // draw only a tiny filled rectangle
            dst.setColor(foreground);
            int w = Math.max(1, (int)bbox.width);
            int h = Math.max(1, (int)bbox.height);
            dst.fillRect((int)bbox.x, (int)bbox.y, w, h);
        } else if (bbox.width &lt;= 4 || bbox.height &lt;= 4) {
            // draw border and inner, but no text
            int w = Math.max(1, (int)bbox.width);
            int h = Math.max(1, (int)bbox.height);
            // fill on is hardcoded to true
            dst.setPaint(background);
            dst.fillRect((int)bbox.x, (int)bbox.y, w, h);
            // stroke on is hardcoded to false, hence only the text label,
            // not the border is drawn
            dst.setColor(foreground);
            int x = (int)bbox.x;
            int middle = (int)(bbox.y + 0.5f * bbox.height);
            dst.drawLine(x, middle, x + w, middle);
        } else {
            // draw the text via delegate
            getDelegate(true).draw(dst, t);
        }
  }</pre>
<p>This draw method has 3 levels of details:</p>
<ul>
<li>If the text object is drawn on an area smaller than 2&#215;2 pixels, we draw a filled rectangle.</li>
<li>If the text object is drawn on an area smaller than 4&#215;4 pixels, we draw a filled background rectangle and a line inside representing the text.</li>
<li>Otherwise, we draw the text object in full detail.</li>
</ul>
<h3>Results</h3>
<p>I wrote a small application that displays 10000 text objects. When using IlvText directly, the application allocates 13 MB memory. When using LightText, it requires only 2.5 MB of memory. This technique hence allowed me to reduce the memory load by a factor of 5.2. When I zoom out, the LightText actually draws faster than IlvText. When I zoom in, only few objects get drawn, hence the slowdown of LightText is in this case neglectable.</p>
<p>The full code of the example is available here: <a href="http://blogs.ilog.com/jviews/wp-content/uploads/2008/07/lighttext.zip" title="Sample with LightText">lighttext.zip</a>. It compiles with JViews 8.0 and 8.1. My small application has a check box at the top to choose between IlvText and LightText, and it displays the history of the memory footprint at the bottom. When you switch from IlvText to LightText, you can easily see how the memory footprint is reduced.</p>
<p><img src='http://blogs.ilog.com/jviews/wp-content/uploads/2008/07/lighttextappl.gif' alt='LightText Application' /></p>
<p>LightText is not just yet another text object. It is rather a programming technique, since it depends on your application which parameters of IlvText must be customizable and which can be hard coded with fixed values. The same idea can be applied to other IlvGraphic subclasses as well. JViews has plenty of features in general purpose IlvGraphic subclasses, but when memory is critical and the purpose is more special and less general, optimizing graphic classes might be worth the effort.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2008/07/02/fast-text-with-less-memory/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Graph Drawing Contest 2008</title>
		<link>http://blogs.ilog.com/jviews/2008/06/20/graph-drawing-contest-2008/</link>
		<comments>http://blogs.ilog.com/jviews/2008/06/20/graph-drawing-contest-2008/#comments</comments>
		<pubDate>Fri, 20 Jun 2008 17:12:32 +0000</pubDate>
		<dc:creator>Georg Sander</dc:creator>
		
		<category><![CDATA[Diagrammer]]></category>

		<category><![CDATA[Graph Layout]]></category>

		<category><![CDATA[Academia]]></category>

		<category><![CDATA[Conference]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/2008/06/20/graph-drawing-contest-2008/</guid>
		<description><![CDATA[<a href="http://blogs.ilog.com/jviews/wp-content/uploads/2008/06/gd2008small.jpg" title="GD’2008"><img src="http://blogs.ilog.com/jviews/wp-content/uploads/2008/06/gd2008small.jpg" alt="GD’2008" align="left" hspace="5" /></a> For a technology oriented company like ILOG, it is essential to keep in close contact with the academic research community in order to facilitate fruitful idea exchange. Our visualization components contain state of the art graph layout technology, and the&#8230;]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.ilog.com/jviews/wp-content/uploads/2008/06/gd2008small.jpg" title="GD’2008"><img src="http://blogs.ilog.com/jviews/wp-content/uploads/2008/06/gd2008small.jpg" alt="GD’2008" align="left" hspace="5" /></a> For a technology oriented company like ILOG, it is essential to keep in close contact with the academic research community in order to facilitate fruitful idea exchange. Our visualization components contain state of the art graph layout technology, and the research community dealing with graph layout holds an annual conference, the Graph Drawing Conference. New trends and major innovations of graph layout technology are the subject of this conference. This year, it will be held on September 21 - 24 in Heraklion, Crete, Greece (see <a href="http://www.gd2008.org">http://www.gd2008.org</a>), and as in previous years, ILOG will be one of the sponsors of the conference.</p>
<p>In order to stimulate new research in graph layout algorithms, a contest is organized in conjunction with the GD&#8217;2008 conference. The topologies of several graphs from real world applications are given, and the goal is to create the best (aesthetically or, for the application domain, the most suitable) drawing of the graph by using state of the art or new innovative graph layout algorithms. Additionally, an online contest similar to a programming contest is held, where a difficult problem must be solved online within 1 hour. The details of the contest can be found at <a href="http://www.graphdrawing.de/contest2008/">http://www.graphdrawing.de/contest2008/</a>.</p>
<p>I have the pleasure to be a member of the contest committee this year, and I am excited to soon see the result of these difficult graphs at the conference. If you are a JViews customer, most likely you are already using our graph layout algorithms. You can try the contest graphs and you will see why they are so difficult to lay out. But who knows, maybe you also know how to solve the challenge, and maybe you will be the next winner of the Graph Drawing Competition. Then the honor will be all yours!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2008/06/20/graph-drawing-contest-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Maps and JSF components - The Movie</title>
		<link>http://blogs.ilog.com/jviews/2008/06/18/google-maps-and-jsf-components-the-movie/</link>
		<comments>http://blogs.ilog.com/jviews/2008/06/18/google-maps-and-jsf-components-the-movie/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 15:16:00 +0000</pubDate>
		<dc:creator>François Trible</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[JSF]]></category>

		<category><![CDATA[Maps]]></category>

		<category><![CDATA[Apache Trinidad]]></category>

		<category><![CDATA[Google maps]]></category>

		<category><![CDATA[JViews]]></category>

		<category><![CDATA[Mashup]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/2008/06/18/google-maps-and-jsf-components-the-movie/</guid>
		<description><![CDATA[
<table>
<tr>
<td><img width="132" src="http://blogs.ilog.com/jviews/wp-content/uploads/2008/03/img2.gif" alt="Traffic monitoring based on Google Maps and ILOG JViews" height="110" /></td>
<td>As you may have read from my previous post (<a href="http://blogs.ilog.com/jviews/2008/03/27/google-maps-and-jsf-components/">Google Maps and JSF components</a>), I described a way to mashup JSF and <a href="http://maps.google.com/">Google Maps</a>.This made it into a full-fledged JSF component.I then integrated that into an Apache Trinidad-based set of pages&#8230;</td></tr></table>]]></description>
			<content:encoded><![CDATA[<table>
<tr>
<td><img width="132" src="http://blogs.ilog.com/jviews/wp-content/uploads/2008/03/img2.gif" alt="Traffic monitoring based on Google Maps and ILOG JViews" height="110" /></td>
<td>As you may have read from my previous post (<a href="http://blogs.ilog.com/jviews/2008/03/27/google-maps-and-jsf-components/">Google Maps and JSF components</a>), I described a way to mashup JSF and <a href="http://maps.google.com/">Google Maps</a>.This made it into a full-fledged JSF component.I then integrated that into an Apache Trinidad-based set of pages (in order to use AJAX-based behaviour for my various data tables) and connected my application to web-based services (such as Yahoo RSS or FTP servers) through some java server beans.</p>
<p>You can watch a movie here of the resulting applications.</td>
</tr>
</table>
<p><em>This movie is best viewed in full screen mode:</em><br />
<embed flashvars="file=http://visudemos.ilog.com/videos/GoogleJViewsMapsMovie.flv&amp;displayheight=360" allowscriptaccess="always" allowfullscreen="true" overstretch="true" enablejs="true" height="360" width="522" src="http://visudemos.ilog.com/videos/mediaplayer.swf" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2008/06/18/google-maps-and-jsf-components-the-movie/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JViews Shines through on Eclipse</title>
		<link>http://blogs.ilog.com/jviews/2008/06/17/jviews-shines-through-on-eclipse/</link>
		<comments>http://blogs.ilog.com/jviews/2008/06/17/jviews-shines-through-on-eclipse/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 05:40:23 +0000</pubDate>
		<dc:creator>Ed Király</dc:creator>
		
		<category><![CDATA[Charts]]></category>

		<category><![CDATA[Development practices]]></category>

		<category><![CDATA[Diagrammer]]></category>

		<category><![CDATA[Eclipse]]></category>

		<category><![CDATA[Gantt]]></category>

		<category><![CDATA[RCP]]></category>

		<category><![CDATA[SWT]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/2008/06/17/jviews-shines-through-on-eclipse/</guid>
		<description><![CDATA[Eclipse is an important platform for many of ILOG's customers, and we have been working to ensure that the ILOG JViews products work well with it. Specifically, some of our customer use the Eclipse Rich Client Platform (or RCP) as an&#8230;]]></description>
			<content:encoded><![CDATA[<p>Eclipse is an important platform for many of ILOG&#8217;s customers, and we have been working to ensure that the ILOG JViews products work well with it. Specifically, some of our customer use the Eclipse Rich Client Platform (or RCP) as an &#8220;application framework&#8221; because it provides a large number of commonly used services that all applications need, such as a consistent look-and-feel, window and view management, a good range of UI components, etc. RCP relies on SWT for drawing, however, and the drawing services offered by SWT still lag behind those of Java&#8217;s AWT and Java2D.</p>
<p>ILOG JViews tries to fill this gap, bringing rich graphical displays to Eclipse RCP. We do this in two different ways: by offering an enhanced bridge that lets you mix AWT and SWT, and also by adding professional-grade diagramming services to SWT.</p>
<p>In this 40 minute presentation, ILOG JViews Product Manager Jerome Joubert describes these two approaches and illustrates them with a number of demos. If you are using Eclipse RCP and you need highly-graphical displays, then you may find this presentation of interest.</p>
<p><em>The following movie is best viewed in full screen mode:</em></p>
<p align="center"><embed flashvars="file=http://visudemos.ilog.com/videos/EclipseWebinarMay2008.flv&amp;displayheight=360" allowscriptaccess="always" allowfullscreen="true" overstretch="true" enablejs="true" height="360" width="522" src="http://visudemos.ilog.com/videos/mediaplayer.swf" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></p>
<p><em><br />
Originally presented in May, 2008 by Jerome Joubert.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2008/06/17/jviews-shines-through-on-eclipse/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JViews 8.1p6 Released</title>
		<link>http://blogs.ilog.com/jviews/2008/06/12/jviews-81p6-released/</link>
		<comments>http://blogs.ilog.com/jviews/2008/06/12/jviews-81p6-released/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 21:52:38 +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/2008/06/12/jviews-81p6-released/</guid>
		<description><![CDATA[This is just a quick post to inform you that we have just released the next patch for JViews 8.1, patch 6. As always, get full details and download all of the JViews patches at ILOG Support (<a href="https://support.ilog.com/">https://support.ilog.com</a>) by logging&#8230;]]></description>
			<content:encoded><![CDATA[<p>This is just a quick post to inform you that we have just released the next patch for JViews 8.1, patch 6. As always, get full details and download all of the JViews patches at ILOG Support (<a href="https://support.ilog.com/">https://support.ilog.com</a>) by logging into your myILOG account.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2008/06/12/jviews-81p6-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sabre Case Study on Visualization for Optimization</title>
		<link>http://blogs.ilog.com/jviews/2008/06/12/sabre-case-study-on-visualization-for-optimization/</link>
		<comments>http://blogs.ilog.com/jviews/2008/06/12/sabre-case-study-on-visualization-for-optimization/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 14:37:05 +0000</pubDate>
		<dc:creator>Ed Király</dc:creator>
		
		<category><![CDATA[Optimization]]></category>

		<category><![CDATA[Real-World]]></category>

		<category><![CDATA[Sabre]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/2008/06/12/sabre-case-study-on-visualization-for-optimization/</guid>
		<description><![CDATA[In February, 2008, we had the pleasure of hosting a presentation by one of our Visualization customers, Hariharan Subrimanian, of Sabre Holdings, the airlines services people.  As you can imagine, airlines can save a lot of money when their operations are "optimized", everything&#8230;]]></description>
			<content:encoded><![CDATA[<p>In February, 2008, we had the pleasure of hosting a presentation by one of our Visualization customers, Hariharan Subrimanian, of Sabre Holdings, the airlines services people.  As you can imagine, airlines can save a lot of money when their operations are &#8220;optimized&#8221;, everything from the scheduling of crews to the prices they set for individual seats.   To do this, Sabre makes heavy use of ILOG&#8217;s Optimization software and, in this presentation, Hariharan explains how they also use Visualization to improve their optimization results.   All in all, it makes for an interesting real-world application.</p>
<p><em>The following movie is best viewed in full screen mode:</em></p>
<p align="center"><embed enablejs="true" overstretch="true" allowfullscreen="true" allowscriptaccess="always" flashvars="file=http://visudemos.ilog.com/videos/SabreCaseStudy.swf&amp;displayheight=360" height="360" width="522" src="http://visudemos.ilog.com/videos/mediaplayer.swf" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></p>
<p><em><br />
Originally presented in February,2008 by Hariharan Subramanian of Sabre.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2008/06/12/sabre-case-study-on-visualization-for-optimization/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Better Visualization Yields Better Optimization</title>
		<link>http://blogs.ilog.com/jviews/2008/06/11/better-visualization-yields-better-optimization/</link>
		<comments>http://blogs.ilog.com/jviews/2008/06/11/better-visualization-yields-better-optimization/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 19:08:46 +0000</pubDate>
		<dc:creator>Ed Király</dc:creator>
		
		<category><![CDATA[Optimization]]></category>

		<category><![CDATA[Real-World]]></category>

		<category><![CDATA[diagram]]></category>

		<category><![CDATA[Gantt]]></category>

		<category><![CDATA[Real-World examples]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/2008/06/11/better-visualization-yields-better-optimization/</guid>
		<description><![CDATA[Last month, Dan Jeffrey, one of our Senior Visualization consultants, joined forces with Irv Lustig, one of our Optimization gurus, to present a case for how Visualization displays are essential for making better Optimization (aka "Operations Research", or just "O.R.")&#8230;]]></description>
			<content:encoded><![CDATA[<p>Last month, Dan Jeffrey, one of our Senior Visualization consultants, joined forces with Irv Lustig, one of our Optimization gurus, to present a case for how Visualization displays are essential for making better Optimization (aka &#8220;Operations Research&#8221;, or just &#8220;O.R.&#8221;) decisions.  (If you&#8217;re not familiar with O.R., have a look at the <a href="http://www.ilog.com/products/optimization/">ILOG Optimization product website</a>.)</p>
<p>This presentation is essentially geared to people already familiar with O.R., explaining how they can make their projects more successful by adding displays that present their results in a meaningful way.  Here&#8217;s what their abstract says:</p>
<p style="margin-bottom: 7.5pt; margin-left: 0pt; margin-right: 0pt"><font size="1" face="Arial"><span style="font-size: 9pt; color: black; font-family: Arial"><font color="#339966"><em><font color="#000000">One of the most common problems facing optimization applications is that key decision makers do not always understand the formulations and solutions created by O.R. professionals. Most O.R. applications offer only static interfaces with pages of tabular data. If the decision makers using your applications lack understanding of the solution, then they are unlikely to continue using it.</font> </em></font></span></font></p>
<p style="margin-bottom: 7.5pt; margin-left: 0pt; margin-right: 0pt">So have a look at this 10 minute presentation, rich with plenty of real-world examples.  Maybe there is something applicable to your domain&#8230;</p>
<p><em>The following movie is best viewed in full screen mode:</em></p>
<p align="center"><embed enablejs="true" overstretch="true" allowfullscreen="true" allowscriptaccess="always" flashvars="file=http://visudemos.ilog.com/videos/visuforopti.flv&amp;displayheight=360" height="360" width="522" src="http://visudemos.ilog.com/videos/mediaplayer.swf" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></p>
<p><em><br />
Originally presented on May 22,2008 by Dan Jeffrey and Irv Lustig.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2008/06/11/better-visualization-yields-better-optimization/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Power of Styling Gantt Activities Based Upon User-Defined Properties</title>
		<link>http://blogs.ilog.com/jviews/2008/06/03/the-power-of-styling-gantt-activities-based-upon-user-defined-properties/</link>
		<comments>http://blogs.ilog.com/jviews/2008/06/03/the-power-of-styling-gantt-activities-based-upon-user-defined-properties/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 17:34:52 +0000</pubDate>
		<dc:creator>David Zeleznik</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<category><![CDATA[Gantt]]></category>

		<category><![CDATA[Styling]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/2008/06/03/the-power-of-styling-gantt-activities-based-upon-user-defined-properties/</guid>
		<description><![CDATA[As documented in the Gantt user manual in the section
<a href="http://www.ilog.com/products/jviews/documentation/jviews-gantt81/doc/html/usrextsched/sdext_styling14.html">Developing with the SDK &#62; Styling Activities</a>, if your data model is populated with instances of <a href="http://www.ilog.com/products/jviews/documentation/jviews-gantt81/doc/html/refjavagantt/html/ilog/views/gantt/model/general/IlvGeneralActivity.html"><tt>IlvGeneralActivity</tt></a> you will be able to reference user-defined activity properties within the right hand value&#8230;]]></description>
			<content:encoded><![CDATA[<p>As documented in the Gantt user manual in the section<br />
<a href="http://www.ilog.com/products/jviews/documentation/jviews-gantt81/doc/html/usrextsched/sdext_styling14.html">Developing with the SDK &gt; Styling Activities</a>, if your data model is populated with instances of <a href="http://www.ilog.com/products/jviews/documentation/jviews-gantt81/doc/html/refjavagantt/html/ilog/views/gantt/model/general/IlvGeneralActivity.html"><tt>IlvGeneralActivity</tt></a> you will be able to reference user-defined activity properties within the right hand value expression of a CSS declaration or within CSS rule selectors. Note, that the concepts I discuss in this article are applicable to other JViews products, but the concrete examples are for the JViews Gantt.</p>
<p>Referencing a user-defined property within the right hand value expressions of a CSS declaration is fairly straightforward.  For example,  let  us say that you want to fill  an activity bar with a color defined as an attribute of the activity itself. In this case, you have a data model that contains activities that have a &#8220;bg&#8221; property, where the values are HTML rgb color encodings or the names of <a href="http://www.w3.org/TR/SVG/types.html#ColorKeywords">standard SVG colors</a>. You can then use a declaration like this in your CSS stylesheet to color an activity graphic with the color specified by the activity&#8217;s property:</p>
<pre>
activity[bg] {
  background: @bg;
}</pre>
<p>Notice the reference to the bg property in the rule selector expression as well. This ensures that the rule&#8217;s declaration is only evaluated if the bg property is non-null. Subsequently, if you have code that modifies the activity&#8217;s bg property, the activity will be updated with the new fill color:</p>
<pre>
anActivity.setProperty("bg", "orchid");</pre>
<p>Referencing user-defined properties within a CSS rule selector can provide more power than the simple test for a non-null value that I showed in the previous example. Let us imagine that you want to customize the CSS styling of an activity based upon whether it is currently displayed expanded or collapsed in the Gantt chart. In fact, this was a recent request from one of our customers. At first glance, it appears that there might be several ways that you could write a rule selector that will evaluate whether an activity is expanded or collapsed. First is the usage of CSS pseudo-classes. For example, one could imagine to write a set of rules like this:</p>
<pre>
// This is the default rule for collapsed activities
activity {
  font: arial,plain,10;
}

// Rule for activities with expanded pseudo-class
activity:expanded {
  font: arial,bold,12;
}</pre>
<p>Unfortunately, the set of activity pseudo-classes is fixed to the following: parent, leaf, milestone, and selected. Therefore, using pseudo-classes will not work for our needs. The second possibility is to use a user-defined property of the activity to store it&#8217;s expanded state. For example, code such as:</p>
<pre>
anActivity.setProperty("expanded", true);</pre>
<p>would flag the activity as being expanded. Then, it is a simple matter to change the selector of the second rule above to this:</p>
<pre>
// Rule for activities with expanded property set true
activity[expanded = true] {
  font: arial,bold,12;
}</pre>
<p>The second part of this equation is to write some code that will update the expanded property of activities as they are expanded and collapsed in the Gantt chart. To do this, you will want to <a href="http://www.ilog.com/products/jviews/documentation/jviews-gantt81/doc/html/refjavagantt/html/ilog/views/gantt/IlvHierarchyChart.html#addVerticalExpansionListener(ilog.views.gantt.event.VerticalExpansionListener)">register an instance of the following class as a <tt>VerticalExpansionListener</tt> on the chart</a>.</p>
<pre>
class ExpansionHandler implements VerticalExpansionListener {
  public void updateActivity(IlvActivity activity, boolean expanded) {
    if (!(activity instanceof IlvUserPropertyHolder)) {
      return;
    }
    ((IlvUserPropertyHolder) activity).setProperty("expanded", expanded);
  }

  public void rowExpanded(RowExpandedEvent event) {
    IlvHierarchyNode[] expanded = event.getExpandedNodes();
    for (IlvHierarchyNode activity : expanded) {
      updateActivity((IlvActivity) activity, true);
    }
  }

  public void rowCollapsed(RowCollapsedEvent event) {
    IlvActivity activity = (IlvActivity) event.getCollapsedNode();
    updateActivity(activity, false);
  }

  public void rowsInserted(RowsInsertedEvent event) {}
  public void rowsRemoved(RowsRemovedEvent event) {}
  public void rowMoved(RowMovedEvent event) {}
  public void rowHeightChanged(RowHeightChangedEvent event) {}
}</pre>
<p>Note, that for a complete implementation you will also need to handle the <code>rowsInserted</code>, <code>rowsRemoved</code>, and <code>rowMoved</code> events. This is because when the first child is inserted under an activity, the former leaf activity becomes an expanded parent. Conversely, when the last child is removed from an expanded parent, the former parent activity becomes a non-expanded leaf. I will show how to implement the remaining ExpansionHandler methods in my next post on this topic.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2008/06/03/the-power-of-styling-gantt-activities-based-upon-user-defined-properties/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JViews 8.1.5 Technical Release</title>
		<link>http://blogs.ilog.com/jviews/2008/05/28/jviews-815-technical-release/</link>
		<comments>http://blogs.ilog.com/jviews/2008/05/28/jviews-815-technical-release/#comments</comments>
		<pubDate>Thu, 29 May 2008 02:58:05 +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/2008/05/28/jviews-815-technical-release/</guid>
		<description><![CDATA[As mentioned in my recent blog on <a href="http://blogs.ilog.com/jviews/2008/05/01/jviews-81p5-released/">JViews 8.1p5</a>, we had incorporated a fix into our patch installers to allow them to be run against the latest JDK versions. Now, we have included this fix into our product installers, giving&#8230;]]></description>
			<content:encoded><![CDATA[<p>As mentioned in my recent blog on <a href="http://blogs.ilog.com/jviews/2008/05/01/jviews-81p5-released/">JViews 8.1p5</a>, we had incorporated a fix into our patch installers to allow them to be run against the latest JDK versions. Now, we have included this fix into our product installers, giving first time users of JViews installation compatibility with JSE6u4 and above. The new JViews 8.1.5 product installers are available at ILOG Support: <a href="https://support.ilog.com/">https://support.ilog.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2008/05/28/jviews-815-technical-release/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JavaOne 2008, from a Product Marketing Perspective</title>
		<link>http://blogs.ilog.com/jviews/2008/05/13/javaone-2008-from-a-product-marketing-perspective/</link>
		<comments>http://blogs.ilog.com/jviews/2008/05/13/javaone-2008-from-a-product-marketing-perspective/#comments</comments>
		<pubDate>Tue, 13 May 2008 21:53:12 +0000</pubDate>
		<dc:creator>Ed Király</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[Events]]></category>

		<category><![CDATA[RIA]]></category>

		<category><![CDATA[Eclipse]]></category>

		<category><![CDATA[JavaFX]]></category>

		<guid isPermaLink="false">http://blogs.ilog.com/jviews/2008/05/13/javaone-2008-from-a-product-marketing-perspective/</guid>
		<description><![CDATA[<a rel="attachment wp-att-25" href="http://blogs.ilog.com/jviews/?attachment_id=25" title="cimg5052.JPG"></a><a href="http://blogs.ilog.com/jviews/wp-content/uploads/2008/05/dukewithhelmet.png" title="dukewithhelmet.png"><img src="http://blogs.ilog.com/jviews/wp-content/uploads/2008/05/dukewithhelmet.png" alt="dukewithhelmet.png" /></a>I'm just back from the big JavaOne conference, which took place May 5-9 in San Francisco, California.   For those of us on the ILOG JViews product team (both the techies and the marketing guys, like me), this is <strong>the</strong> single most&#8230;]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-25" href="http://blogs.ilog.com/jviews/?attachment_id=25" title="cimg5052.JPG"></a><a href="http://blogs.ilog.com/jviews/wp-content/uploads/2008/05/dukewithhelmet.png" title="dukewithhelmet.png"><img src="http://blogs.ilog.com/jviews/wp-content/uploads/2008/05/dukewithhelmet.png" alt="dukewithhelmet.png" /></a>I&#8217;m just back from the big JavaOne conference, which took place May 5-9 in San Francisco, California.   For those of us on the ILOG JViews product team (both the techies and the marketing guys, like me), this is <strong>the</strong> single most important conference of the year.   In addition to learning about the latest technologies that are being promoted by Sun and Co., we get a lot of other valuable &#8220;soft&#8221; data as well.   Here are the things that a product marketing guy like me looks for and picks up on&#8230; <strong>outside</strong> of the conference sessions&#8230;</p>
<p><strong>First up: the health of the show</strong> </p>
<p><a href="http://blogs.ilog.com/jviews/wp-content/uploads/2008/05/dukewithhelmet.png" title="dukewithhelmet.png"></a>We product marketing guys can use the JavaOne show as a quickie litmus test to gauge the general health of the Java marketplace.  How is the show going, compared to last year and the year before?  Is JavaOne still, after 10+ years, an important event?  Are there lots of attendees and other vendors?  Is <strong>Java</strong> itself still important?   After all, if there is a big <img border="0" align="left" width="1" src="http://blogs.ilog.com/jviews/wp-content/uploads/2008/05/cimg50521.JPG" alt="cimg50521.JPG" height="1" />downturn or upswing, we may use this to help us determine the resources we dedicate to our Java product line.</p>
<p><strong>Diagnosis</strong>:  Steady, with just a slight decline in the number of sessions, events, people, and general buzz.</p>
<p><strong>Next up:  How is the exhibit booth?</strong></p>
<p><a href="http://blogs.ilog.com/jviews/wp-content/uploads/2008/05/dukewithhelmet.png" title="dukewithhelmet.png"><img src="http://blogs.ilog.com/jviews/wp-content/uploads/2008/05/cimg50521.JPG" alt="cimg50521.JPG" /></a>This is something that many conference attendees never pay attention to: they are there to soak up knowledge and couldn&#8217;t care less about commercial vendors and their exhibit booths.  But, of course, we vendors care very much about things like booth traffic (are we on the main drag, or in no-man&#8217;s land?), booth placement (do we have noisy neighbors with annoyingly amplified sales pitches?), booth messaging (will the guy walking by understand what we do quickly or is our signage too obscure?), booth giveaways (is that guy who is collecting the free goodies&#8211;a.k.a. a &#8220;trick or treater&#8221;&#8211;really a possible customer?), etc.    Which of our competitors are there at JavaOne this year?  What are they pushing that&#8217;s new?  And, more intriguing, which competitors are not there?   It all has a sort of (upscale) &#8220;carnival midway&#8221; feeling about it&#8230;</p>
<p><strong>Diagnosis</strong>:  Very healthy (for us, at least).  Those who worked in the ILOG booth were quite pleased with the large number of conference attendees they chatted with. </p>
<p><strong>Finally: What&#8217;s the buzz?</strong></p>
<p>As a product manager, I look around the show floor to see if I&#8217;m missing any trends that might effect the products I work on.  Likewise, it&#8217;s interesting to see what &#8220;buzz&#8221; Sun is putting out there, to show that they understand the trends and are, of course, leading the way.  (wink!)</p>
<p>This year, in the Java circles that we run in (user interfaces, of course), the hands-down hot topic was RIA (Rich Internet Applications).  Last year, Sun announced JavaFX and this year they seemed to re-announce it.   JavaFX is their answer to Adobe&#8217;s Flex and AIR, and to Microsoft&#8217;s Silverlight (both of whom were also at the conference, interestingly enough).   Most of the people I spoke with said they have a &#8220;wait and see&#8221; attidtude about JavaFX, though.</p>
<p>JavaFX, Flex, and Silverlight are all trying to do the same thing: give the world a RIA experience that is far better than Ajax.   Ajax and its programming frameworks are a beast, developers tell me, and the end result of all that hard work is, of course, quite cool&#8211;but it&#8217;s not as interactive or as glitzy as JavaFX, Flex, or Silverlight.</p>
<p><strong>Diagnosis:  </strong>For RIA, the fight for the developer mind is still on.  For us at ILOG, we are actively following Flex/AIR (see our <a target="_blank" href="http://elixir.ilog.com">ILOG Elixir product</a>) and are experimenting with Silverlight.   Of course, Ajax has been a big part of all of ILOG Java products for some time now, and will continue to be a major emphasis for us.   So, for us, the buzz at this show was all about RIA and we were smack dab in the middle of it.</p>
<p><strong>A final note:</strong>   A big thank you to all of the ILOG customers who came by the ILOG booth to chat with us.   It&#8217;s nice to hear about your successes.   And we heard you about some of the Ajax interoperability issues you might face soon, and have started burning the midnight oil&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ilog.com/jviews/2008/05/13/javaone-2008-from-a-product-marketing-perspective/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
