<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-407384993050124605</id><updated>2012-02-16T16:27:00.405+01:00</updated><title type='text'>Prefuse Visualization</title><subtitle type='html'>Exploring the visualization toolkit with visualization.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://prefuse.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://prefuse.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Easy</name><uri>http://www.blogger.com/profile/05958958462844432603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='24' src='http://3.bp.blogspot.com/_RPunE_t0eDk/SjI3aD9CKuI/AAAAAAAAAqo/1bBtmya0Nh8/S220/pbface.PNG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-407384993050124605.post-8267855992613788180</id><published>2009-10-10T11:08:00.000+02:00</published><updated>2008-10-03T18:07:59.811+02:00</updated><title type='text'>Introduction</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Posted on June 27, 2008&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a target="_blank" href="http://prefuse.org/gallery/"&gt;&lt;div class="figure"&gt;&lt;img src="http://bp2.blogger.com/_RPunE_t0eDk/SGn46gidqDI/AAAAAAAAAaU/CLPvvWNijQE/s400/samples.PNG" /&gt;prefuse&lt;/div&gt;&lt;/a&gt;&lt;br /&gt;To understand and to use prefuse toolkit we should better at first have some knowledge about information visualization (see &lt;a href="http://en.wikipedia.org/wiki/Information_graphics" target="_blank"&gt;wikipedia&lt;/a&gt; and &lt;a href="http://www.infovis-wiki.net/index.php/Information_Visualization" target="_blank"&gt;infovis wiki&lt;/a&gt;), especially about the &lt;a href="http://www.infovis-wiki.net/index.php/Visualization_Pipeline" target="_blank"&gt;visualization pipline&lt;/a&gt; or the &lt;a href="http://www.infovis-wiki.net/index.php?title=Patterns:Reference_Model" target="_blank"&gt;reference model&lt;/a&gt;; Prefuse is built just with these concept. You can &lt;a href="http://prefuse.blogspot.com/2008/07/prefuse.html"&gt;read&lt;/a&gt; further about prefuse from authors.&lt;br /&gt;&lt;br /&gt;In my opinion, it is a good idea to understand a visualization toolkit with visualization methods as well. On this web site I would try to visualize prefuse toolkit so that we can easily understand and explore it.&lt;br /&gt;&lt;br /&gt;This web site would not present much prefuse programming detail or example code, but mainly give a whole picture of prefuse. The official prefuse &lt;a href="http://prefuse.org/doc/manual/" target="_blank"&gt;user manual&lt;/a&gt; is currently not complete, and there are few tutorials or instructive articles on internet. This web site may help you learn prefuse or design its application with high level view, and the prefuse javadoc should help you do further detailed programming (sometimes you may probably need to read the prefuse source code as well).&lt;br /&gt;&lt;br /&gt;The following links should be helpful when programming with prefuse.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/" target="_blank"&gt;Java tutorial&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/uiswing/" target="_blank"&gt;Swing tutorial&lt;/a&gt; (especially &lt;a href="http://java.sun.com/docs/books/tutorial/uiswing/components/index.html" target="_blank"&gt;Using Swing Components&lt;/a&gt; and &lt;a href="http://java.sun.com/docs/books/tutorial/uiswing/events/index.html" target="_blank"&gt;Writing Event Listeners&lt;/a&gt;.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/2d/index.html" target="_blank"&gt;Java 2D&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://prefuse.org/doc/api/" target="_blank"&gt;Prefuse Javadoc&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The content from this site is based on &lt;span style="font-weight: bold;"&gt;prefuse beta release 2007.10.21&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/407384993050124605-8267855992613788180?l=prefuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prefuse.blogspot.com/feeds/8267855992613788180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=407384993050124605&amp;postID=8267855992613788180&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/8267855992613788180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/8267855992613788180'/><link rel='alternate' type='text/html' href='http://prefuse.blogspot.com/2008/06/introduction.html' title='Introduction'/><author><name>Easy</name><uri>http://www.blogger.com/profile/05958958462844432603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='24' src='http://3.bp.blogspot.com/_RPunE_t0eDk/SjI3aD9CKuI/AAAAAAAAAqo/1bBtmya0Nh8/S220/pbface.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_RPunE_t0eDk/SGn46gidqDI/AAAAAAAAAaU/CLPvvWNijQE/s72-c/samples.PNG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-407384993050124605.post-4138826411307836484</id><published>2009-06-13T00:32:00.002+02:00</published><updated>2009-06-13T01:00:21.271+02:00</updated><title type='text'>News</title><content type='html'>&lt;div&gt;I am really glad if you thought this blog useful, but you may be also disappointed that there has been no newer posts coming out for a long time :-(.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I haven't updated this blog for almost one year. One reason is that prefuse or its application in Java Applet is not very attractive on web, while I am going to build some web-based visualization applications. (Actually the real reason is that prefuse/Java is really frustrating me. It is really hard. lol)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, the great thing is that there is a Flash alternative from prefuse -- &lt;a href="http://flare.prefuse.org/"&gt;flare&lt;/a&gt;.  Flare has the same visualization model as that from prefuse. However, the event model, display list, UI component and dynamic programming language (Actionscript3) from Flash/Flex can let development much easier. The flash application is also pretty effecient on web. &lt;a href="http://vixplore.appspot.com/"&gt;Here &lt;/a&gt;is the project which I have developed with flare in the last month.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;BTW, if you want build web-based visualiation application in Javascript, you should be interested in &lt;a href="http://thejit.org/"&gt;JIT&lt;/a&gt;. The best part of a Javascript-based visualization toolkit is that it can be much more seamlessly integrated with web content, e.g. AJAX, CSS, HTML...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;June 13, 2009&lt;/div&gt;&lt;br /&gt;&lt;hr /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/407384993050124605-4138826411307836484?l=prefuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prefuse.blogspot.com/feeds/4138826411307836484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=407384993050124605&amp;postID=4138826411307836484&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/4138826411307836484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/4138826411307836484'/><link rel='alternate' type='text/html' href='http://prefuse.blogspot.com/2009/06/news.html' title='News'/><author><name>Easy</name><uri>http://www.blogger.com/profile/05958958462844432603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='24' src='http://3.bp.blogspot.com/_RPunE_t0eDk/SjI3aD9CKuI/AAAAAAAAAqo/1bBtmya0Nh8/S220/pbface.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-407384993050124605.post-8482377153279310604</id><published>2008-07-21T14:21:00.005+02:00</published><updated>2008-07-21T15:15:24.559+02:00</updated><title type='text'>prefuse</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Posted on July 21, 2008&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Jeffrey Heer et al present prefuse in their paper &lt;a target="_blank" href="http://vis.berkeley.edu/papers/prefuse/"&gt;Prefuse: A Toolkit for Interactive Information Visualization&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The paper represents mainly prefuse's concept, the implementation or the code snippet from the paper may not be identical to the prefuse library you have downloaded.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/407384993050124605-8482377153279310604?l=prefuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prefuse.blogspot.com/feeds/8482377153279310604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=407384993050124605&amp;postID=8482377153279310604&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/8482377153279310604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/8482377153279310604'/><link rel='alternate' type='text/html' href='http://prefuse.blogspot.com/2008/07/prefuse.html' title='prefuse'/><author><name>Easy</name><uri>http://www.blogger.com/profile/05958958462844432603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='24' src='http://3.bp.blogspot.com/_RPunE_t0eDk/SjI3aD9CKuI/AAAAAAAAAqo/1bBtmya0Nh8/S220/pbface.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-407384993050124605.post-3778377513376165795</id><published>2008-07-15T00:11:00.004+02:00</published><updated>2008-07-15T00:31:19.076+02:00</updated><title type='text'>Software Design Pattern</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Posted on July 15, 2008&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Beside wonderful prefuse toolkit, Jeffrey Heer et al also presented software design patterns for information visualization software.&lt;br /&gt;&lt;a target="_blank" href="http://vis.berkeley.edu/papers/infovis_design_patterns/"&gt;&lt;div class="figure"&gt;&lt;img style="width: 400px; height: 247px;" src="http://vis.berkeley.edu/papers/infovis_design_patterns/pattern_map.gif" /&gt;Software design pattern for information visualization&lt;/div&gt;&lt;/a&gt;&lt;br /&gt;This paper presents general but practical patterns for designing information visualization framework or software.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/407384993050124605-3778377513376165795?l=prefuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prefuse.blogspot.com/feeds/3778377513376165795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=407384993050124605&amp;postID=3778377513376165795&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/3778377513376165795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/3778377513376165795'/><link rel='alternate' type='text/html' href='http://prefuse.blogspot.com/2008/07/software-design-pattern.html' title='Software Design Pattern'/><author><name>Easy</name><uri>http://www.blogger.com/profile/05958958462844432603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='24' src='http://3.bp.blogspot.com/_RPunE_t0eDk/SjI3aD9CKuI/AAAAAAAAAqo/1bBtmya0Nh8/S220/pbface.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-407384993050124605.post-8745020605110380606</id><published>2008-07-14T17:32:00.006+02:00</published><updated>2008-07-14T20:12:46.066+02:00</updated><title type='text'>Pipeline pattern</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Posted on July 14, 2008&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Since prefuse and its components are made with the pipeline concept, we should also follow such pipeline pattern when we development the prefuse application.&lt;br /&gt;&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh5.ggpht.com/easy.lin/SGp7qv3883I/AAAAAAAAAa8/HbCvYh-1qhU/pkg_overview.png" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_pkg_overview_p'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh5.ggpht.com/easy.lin/SGp7q56vzhI/AAAAAAAAAbE/uqdzxkIupQ4/pkg_overview_thumb.png" /&gt;&lt;br /&gt;Pipeline model.&lt;/div&gt;&lt;/a&gt;&lt;div id="c_pkg_overview_p" class="highslide-caption"&gt;Pipeline model.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Before running it, we should define each piece of the whole &lt;span style="font-weight: bold;"&gt;Visualization&lt;/span&gt;, namely &lt;span style="font-weight: bold;"&gt;Source Data&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Data Transformation&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Data Tables&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;View Mapping&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Visual Abstraction&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;View Transformation&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;View&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Interaction&lt;/span&gt;. They are just the basic &lt;span style="font-style: italic;"&gt;building block&lt;/span&gt;s which would be composited together.&lt;ul&gt;&lt;li&gt;The package organization of prefuse is according to those &lt;span style="font-style: italic;"&gt;building block&lt;/span&gt;s.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;The execution of a visualization would follow the order of the pipeline. Namely, at first the &lt;span style="font-weight: bold;"&gt;Source Data&lt;/span&gt; would be populated into &lt;span style="font-weight: bold;"&gt;Data Tables&lt;/span&gt; by applying &lt;span style="font-weight: bold;"&gt;Data Transformation&lt;/span&gt;, then &lt;span style="font-weight: bold;"&gt;Visual Mapping&lt;/span&gt; would add some visual attributes to &lt;span style="font-weight: bold;"&gt;Data Tables&lt;/span&gt; and make them into &lt;span style="font-weight: bold;"&gt;Visual Abstraction&lt;/span&gt;, finally &lt;span style="font-weight: bold;"&gt;View Transformation&lt;/span&gt; would draw the result onto &lt;span style="font-weight: bold;"&gt;View&lt;/span&gt; according to the attributes of &lt;span style="font-weight: bold;"&gt;Visual Abstraction&lt;/span&gt;.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The user can perceive the result from the &lt;span style="font-weight: bold;"&gt;View&lt;/span&gt; and do &lt;span style="font-weight: bold;"&gt;Interaction&lt;/span&gt; on it. Theoretically the &lt;span style="font-weight: bold;"&gt;Interaction&lt;/span&gt; can affect or update any &lt;span style="font-style: italic;"&gt;building block&lt;/span&gt; of the &lt;span style="font-weight: bold;"&gt;Visualization&lt;/span&gt;, however the visualization execution would still keep its pipeline order.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;It is not necessary to &lt;span style="font-style: italic;"&gt;construct (or define)&lt;/span&gt; each &lt;span style="font-style: italic;"&gt;building block&lt;/span&gt; in the exact order as what they should be. For example, it is possible to define &lt;span style="font-weight: bold;"&gt;View Transformation&lt;/span&gt; before defining &lt;span style="font-weight: bold;"&gt;Visual Mapping&lt;/span&gt;.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;However, we should &lt;span style="font-style: italic;"&gt;execute (or run)&lt;/span&gt; them in the correct order. For example, we must run &lt;span style="font-weight: bold;"&gt;Data Transformation&lt;/span&gt; before  running &lt;span style="font-weight: bold;"&gt;Visual Mapping&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Note: Most of the time we have more than one &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"&gt;action&lt;/span&gt;&lt;span style="font-size:85%;"&gt; (or &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"&gt;activity&lt;/span&gt;&lt;span style="font-size:85%;"&gt;) to be run for &lt;span style="font-weight: bold;"&gt;Visual Mappin&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;g&lt;/span&gt;. We must also run them in correct order according to their meaning. &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;While we can &lt;span style="font-style: italic;"&gt;construct&lt;/span&gt; each &lt;span style="font-style: italic;"&gt;building block&lt;/span&gt; very independently, though each &lt;span style="font-style: italic;"&gt;building block&lt;/span&gt; must use some clue to bind with each other. For example, prefuse let user assign a &lt;span style=";font-family:courier new;font-size:100%;"&gt;group name&lt;/span&gt; to any arbitrary data collection, and each &lt;span style="font-style: italic;"&gt;building block&lt;/span&gt; can use such &lt;span style=";font-family:courier new;font-size:100%;"&gt;group name&lt;/span&gt; as clue to handle desired data.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Programming with pipeline pattern is similar to playing a &lt;a href="http://en.wikipedia.org/wiki/Pipe_Dream_%28video_game%29" target="_blank"&gt;pipe game&lt;/a&gt;.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Building pipe and define their connectivity: &lt;span style="font-style: italic;"&gt;Constructing&lt;/span&gt; the &lt;span style="font-style: italic;"&gt;building block&lt;/span&gt;s for &lt;span style="font-weight: bold;"&gt;Visualization&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Running water through the pipes: Running the &lt;span style="font-weight: bold;"&gt;Visualization&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Changing the pipes while water running (if any game could do this): Doing the &lt;span style="font-weight: bold;"&gt;Interaction&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/407384993050124605-8745020605110380606?l=prefuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prefuse.blogspot.com/feeds/8745020605110380606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=407384993050124605&amp;postID=8745020605110380606&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/8745020605110380606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/8745020605110380606'/><link rel='alternate' type='text/html' href='http://prefuse.blogspot.com/2008/07/pipeline-pattern.html' title='Pipeline pattern'/><author><name>Easy</name><uri>http://www.blogger.com/profile/05958958462844432603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='24' src='http://3.bp.blogspot.com/_RPunE_t0eDk/SjI3aD9CKuI/AAAAAAAAAqo/1bBtmya0Nh8/S220/pbface.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/easy.lin/SGp7q56vzhI/AAAAAAAAAbE/uqdzxkIupQ4/s72-c/pkg_overview_thumb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-407384993050124605.post-1580408536387339761</id><published>2008-07-04T21:10:00.004+02:00</published><updated>2008-07-14T14:40:04.779+02:00</updated><title type='text'>Expression</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Posted on July 04, 2008&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;An (information) visualization application must handle a huge amount of data, and should also let user do quick interaction to find out desired information (or to filter out undesired one). Hence, such dynamic query or data query is a very critical task for visualization.&lt;br /&gt;&lt;br /&gt;For such reason prefuse provides a query expression language to do those tasks. The &lt;span style="font-family:courier new;"&gt;Expression&lt;/span&gt; can be used to query &lt;span style="font-weight: bold;"&gt;Data Tables&lt;/span&gt; (like SQL in database) for informational attributes, and it can also be used to query &lt;span style="font-weight: bold;"&gt;Visual Abstraction&lt;/span&gt;, i.e. a visual item, for the visual attributes.&lt;br /&gt;&lt;br /&gt;Following figure shows all possible &lt;span style="font-family:courier new;"&gt;Expression&lt;/span&gt;s.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh3.ggpht.com/easy.lin/SGuH9myZ8EI/AAAAAAAAAdc/JcGAm8gpwS0/Expression_o.jpeg" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_expr'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh3.ggpht.com/easy.lin/SGuH9xpc2-I/AAAAAAAAAdk/hevlculNyTw/Expression_t.jpeg" /&gt;&lt;br /&gt;Expression.&lt;/div&gt;&lt;/a&gt;&lt;div id="c_expr" class="highslide-caption"&gt;Expression.&lt;/div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;There are expressions for doing string, math and Boolean operations.&lt;/li&gt;&lt;li&gt;Expressions in &lt;span style="font-family:courier new;"&gt;prefuse.visual.expression&lt;/span&gt; are for querying on visual item (&lt;span style="font-weight: bold;"&gt;Visual Abstraction&lt;/span&gt;) . For example, an expression to decide if a visual item visible or not.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Some Expressions are treated as Function.&lt;br /&gt;&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh6.ggpht.com/easy.lin/SGuH9Q0RwvI/AAAAAAAAAdM/8pT8Idas0Ls/Expression_Func_o.jpeg" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_expr_func'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh4.ggpht.com/easy.lin/SGuH9uVubBI/AAAAAAAAAdU/tAhrwPeXJWM/Expression_Func_t.jpeg" /&gt;&lt;br /&gt;Expression as Function.&lt;/div&gt;&lt;/a&gt;&lt;div id="c_expr_func" class="highslide-caption"&gt;Expression as Function.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Some Expressions are treated as Predicate which be always evaluated as true or false.&lt;br /&gt;&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh3.ggpht.com/easy.lin/SGuIEuCtHFI/AAAAAAAAAds/Ge9Vp1Ga9Mk/Expression_Predicat_o.jpeg" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_expr_p'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh3.ggpht.com/easy.lin/SGuIEiMpruI/AAAAAAAAAd0/cdp_BqJSXpY/Expression_Predicat_t.jpeg" /&gt;&lt;br /&gt;Expression as Predicate.&lt;/div&gt;&lt;/a&gt;&lt;div id="c_expr_p" class="highslide-caption"&gt;Expression as Predicate.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/407384993050124605-1580408536387339761?l=prefuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prefuse.blogspot.com/feeds/1580408536387339761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=407384993050124605&amp;postID=1580408536387339761&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/1580408536387339761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/1580408536387339761'/><link rel='alternate' type='text/html' href='http://prefuse.blogspot.com/2008/07/expression.html' title='Expression'/><author><name>Easy</name><uri>http://www.blogger.com/profile/05958958462844432603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='24' src='http://3.bp.blogspot.com/_RPunE_t0eDk/SjI3aD9CKuI/AAAAAAAAAqo/1bBtmya0Nh8/S220/pbface.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/easy.lin/SGuH9xpc2-I/AAAAAAAAAdk/hevlculNyTw/s72-c/Expression_t.jpeg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-407384993050124605.post-1952289151245158867</id><published>2008-07-04T20:35:00.004+02:00</published><updated>2008-07-13T18:04:20.299+02:00</updated><title type='text'>View &amp; Interaction</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Posted on July 04, 2008&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="figure"&gt;&lt;img src="http://lh6.ggpht.com/easy.lin/SHonSvqp2MI/AAAAAAAAAiQ/T_pUP0dNuNs/o_5.png" /&gt;&lt;br /&gt;View &amp; Interaction.&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;View&lt;/span&gt; is the representation media for user to perceive the visualization result. At the same time, such &lt;span style="font-weight: bold;"&gt;View&lt;/span&gt; should also have &lt;span style="font-weight: bold;"&gt;Interaction&lt;/span&gt; capabilities for user. A &lt;a href="http://en.wikipedia.org/wiki/Touchscreen" target="_blank"&gt;touchscreen&lt;/a&gt; is a good example of a &lt;span style="font-weight: bold;"&gt;View&lt;/span&gt;; People see the image on the screen and can interact directly with fingers. In common Java Swing application, a &lt;span style="font-weight: bold;"&gt;View&lt;/span&gt; may be any displayable JComponent. The common user interactions of a &lt;span style="font-weight: bold;"&gt;View&lt;/span&gt; are mouse and keyboard.&lt;br /&gt;&lt;br /&gt;Following figure shows the &lt;span style="font-weight: bold;"&gt;View&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Interaction&lt;/span&gt; in prefuse.&lt;br /&gt;&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh6.ggpht.com/easy.lin/SG4OzwY8d9I/AAAAAAAAAgQ/vAvbDoM7LTA/Control_o.jpeg" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_render'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh5.ggpht.com/easy.lin/SG4O0JE2zsI/AAAAAAAAAgY/uYy5bRGzHHs/Control_t.jpeg" /&gt;&lt;br /&gt;View Transformations (prefuse.render).&lt;/div&gt;&lt;/a&gt;&lt;div id="c_render" class="highslide-caption"&gt;View Transformations (prefuse.render).&lt;/div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;The single class &lt;span style="font-family: courier new;"&gt;prefuse.Display&lt;/span&gt; is the &lt;span style="font-weight: bold;"&gt;View&lt;/span&gt;. It is a JComponent in Swing.&lt;/li&gt;&lt;li&gt;A &lt;span style="font-family: courier new;"&gt;Control&lt;/span&gt; or &lt;span style="font-family: courier new;"&gt;ControlAdpater&lt;/span&gt; is used to define the interaction via mouse and keyboard. They are implemented as action or event listeners.&lt;/li&gt;&lt;li&gt;Prefuse provides some handy intractable &lt;span style="font-family: courier new;"&gt;Control&lt;/span&gt;s: Zoom, Pan, Drag and etc.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/407384993050124605-1952289151245158867?l=prefuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prefuse.blogspot.com/feeds/1952289151245158867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=407384993050124605&amp;postID=1952289151245158867&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/1952289151245158867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/1952289151245158867'/><link rel='alternate' type='text/html' href='http://prefuse.blogspot.com/2008/07/view-interaction.html' title='View &amp; Interaction'/><author><name>Easy</name><uri>http://www.blogger.com/profile/05958958462844432603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='24' src='http://3.bp.blogspot.com/_RPunE_t0eDk/SjI3aD9CKuI/AAAAAAAAAqo/1bBtmya0Nh8/S220/pbface.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/easy.lin/SHonSvqp2MI/AAAAAAAAAiQ/T_pUP0dNuNs/s72-c/o_5.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-407384993050124605.post-1965277495818093622</id><published>2008-07-04T13:35:00.006+02:00</published><updated>2008-07-13T17:59:38.663+02:00</updated><title type='text'>View Transformations</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Posted on July 04, 2008&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="figure"&gt;&lt;img src="http://lh5.ggpht.com/easy.lin/SHokO-3PTFI/AAAAAAAAAhk/Pp6hRoK8vdE/o_4.png" /&gt;&lt;br /&gt;View Transformation.&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Visual Transformation&lt;/span&gt; renders the visual data, i.e. &lt;span style="font-weight: bold;"&gt;Visual Abstraction&lt;/span&gt;, onto displayable &lt;span style="font-weight: bold;"&gt;View&lt;/span&gt;. This step makes the visualization result perceivable for user. Package &lt;span style="font-family:courier new;"&gt;prefuse.render&lt;/span&gt; is responsible for such rendering.&lt;br /&gt;&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh5.ggpht.com/easy.lin/SG3-kgkVBSI/AAAAAAAAAgA/Ih87xigRndg/Render_o.jpeg" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_render'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh5.ggpht.com/easy.lin/SG3-krTNusI/AAAAAAAAAgI/3b9i3--S5CY/Render_t.jpeg" /&gt;&lt;br /&gt;View Transformations (prefuse.render).&lt;/div&gt;&lt;/a&gt;&lt;div id="c_render" class="highslide-caption"&gt;View Transformations (prefuse.render).&lt;/div&gt;&lt;/div&gt;To doing &lt;span style="font-weight: bold;"&gt;Visual Transformation&lt;/span&gt; you should define a &lt;span style="font-family:courier new;"&gt;RenderFactory&lt;/span&gt; which consists of one or more &lt;span style="font-family:courier new;"&gt;Renderer&lt;/span&gt;s.  Prefuse provides some default render classes for edge, label, polygon, shape and etc. Most of the time you would define your own &lt;span style="font-family:courier new;"&gt;RenderFactory&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;Renderer&lt;/span&gt; to fulfill your own specific requirements.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/407384993050124605-1965277495818093622?l=prefuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prefuse.blogspot.com/feeds/1965277495818093622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=407384993050124605&amp;postID=1965277495818093622&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/1965277495818093622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/1965277495818093622'/><link rel='alternate' type='text/html' href='http://prefuse.blogspot.com/2008/07/view-transformations.html' title='View Transformations'/><author><name>Easy</name><uri>http://www.blogger.com/profile/05958958462844432603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='24' src='http://3.bp.blogspot.com/_RPunE_t0eDk/SjI3aD9CKuI/AAAAAAAAAqo/1bBtmya0Nh8/S220/pbface.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/easy.lin/SHokO-3PTFI/AAAAAAAAAhk/Pp6hRoK8vdE/s72-c/o_4.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-407384993050124605.post-4230626813858177753</id><published>2008-07-04T12:43:00.008+02:00</published><updated>2008-07-13T17:56:45.401+02:00</updated><title type='text'>Data Transformations</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Posted on July 04, 2008&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="figure"&gt;&lt;img src="http://lh3.ggpht.com/easy.lin/SHokOsSqpDI/AAAAAAAAAhc/TWVFjJuE6Q0/o_3.png" /&gt;&lt;br /&gt;Data Transformation.&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Data Transformation&lt;/span&gt; transforms the raw &lt;span style="font-weight: bold;"&gt;Source Data&lt;/span&gt; into specific internal data format (i.e. &lt;span style="font-weight: bold;"&gt;Data Table&lt;/span&gt;) which can be manipulated by prefuse directly. We can also see &lt;span style="font-weight: bold;"&gt;Data Transformation&lt;/span&gt; as data importing process. Prefuse, like any other visualization toolkit or aplication, provides data importing from common text file or from database. It provides data "exporting" as well.&lt;br /&gt;&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh6.ggpht.com/easy.lin/SG3-kN5QYuI/AAAAAAAAAfw/PS5aC0nOmOs/Data_IO_o.jpeg" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_dataio'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh4.ggpht.com/easy.lin/SG3-kaDd9_I/AAAAAAAAAf4/AvM9ZvSGOGg/Data_IO_t.jpeg" /&gt;&lt;br /&gt;Data Transformations (prefuse.data.io).&lt;/div&gt;&lt;/a&gt;&lt;div id="c_dataio" class="highslide-caption"&gt;Data Transformations (prefuse.data.io).&lt;/div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;There are &lt;span style="font-family:courier new;"&gt;Reader&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;Writer&lt;/span&gt; available for &lt;span style="font-family:courier new;"&gt;Graph&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;Table&lt;/span&gt; structure.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Source Data&lt;/span&gt; can be comma-separated, delimiter-separated, or fixed width values in plain text file.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Source Data&lt;/span&gt; can be &lt;a href="http://graphml.graphdrawing.org/" target="_blank"&gt;GraphML&lt;/a&gt; or &lt;a href="http://www.nomencurator.org/InfoVis2003/download/treeml.dtd" target="_blank"&gt;TreeML&lt;/a&gt; in XML file.&lt;/li&gt;&lt;li&gt;You can use &lt;span style="font-family:courier new;"&gt;ConnectionFactory&lt;/span&gt; from &lt;span style="font-family:courier new;"&gt;prefuse.data.io.sql&lt;/span&gt; to query database and to get &lt;span style="font-family:courier new;"&gt;DatabaseDataSource&lt;/span&gt; which can (by using &lt;span style="font-family:courier new;"&gt;SQLDataHandler&lt;/span&gt;) populate query result into &lt;span style="font-family:courier new;"&gt;prefuse.data.Table&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/407384993050124605-4230626813858177753?l=prefuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prefuse.blogspot.com/feeds/4230626813858177753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=407384993050124605&amp;postID=4230626813858177753&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/4230626813858177753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/4230626813858177753'/><link rel='alternate' type='text/html' href='http://prefuse.blogspot.com/2008/07/data-transformations.html' title='Data Transformations'/><author><name>Easy</name><uri>http://www.blogger.com/profile/05958958462844432603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='24' src='http://3.bp.blogspot.com/_RPunE_t0eDk/SjI3aD9CKuI/AAAAAAAAAqo/1bBtmya0Nh8/S220/pbface.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/easy.lin/SHokOsSqpDI/AAAAAAAAAhc/TWVFjJuE6Q0/s72-c/o_3.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-407384993050124605.post-4507849825045723115</id><published>2008-07-03T20:33:00.004+02:00</published><updated>2008-07-13T17:55:04.275+02:00</updated><title type='text'>Visual Mapping</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Posted on Junl 03, 2008&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="figure"&gt;&lt;img src="http://lh3.ggpht.com/easy.lin/SHokOnmaw4I/AAAAAAAAAhU/P1_Mc-qGF6c/o_2.png" /&gt;&lt;br /&gt;Visual Mapping.&lt;/div&gt;&lt;br /&gt;Since &lt;span style="font-weight: bold;"&gt;Data Tables&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Visual Abstraction&lt;/span&gt; are the core parts for representation of informational and visual data, the mapping between them is absolutely another important part in prefuse. This mapping is called &lt;span style="font-weight: bold;"&gt;Visual Mapping&lt;/span&gt; in prefuse. &lt;span style="font-weight: bold;"&gt;Visual Mapping&lt;/span&gt; can not only assign visual attributes to data, but it can be also responsible to animation, layout and visual effect. Most of the time you would implement your algorithm for visual representation in &lt;span style="font-weight: bold;"&gt;Visual Mapping&lt;/span&gt; phase.&lt;br /&gt;&lt;br /&gt;In prefuse such &lt;span style="font-weight: bold;"&gt;Visual Mapping&lt;/span&gt; is also called &lt;span style="font-family:courier new;"&gt;activity&lt;/span&gt; or &lt;span style="font-family:courier new;"&gt;action&lt;/span&gt; which correspond to &lt;span style="font-family:courier new;"&gt;prefuse.activity&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;prefuse.action&lt;/span&gt; packages. Following figure will show all possible prefuse built-in actions.&lt;br /&gt;&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh5.ggpht.com/easy.lin/SGuHaaiEAAI/AAAAAAAAAbM/hkynAL1SaxI/Activity_Action_o.jpeg" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_action_activity'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh3.ggpht.com/easy.lin/SGuHayRoVoI/AAAAAAAAAbU/EVcYCICcrzs/Activity_Action_t.jpeg" /&gt;&lt;br /&gt;Visual Mapping (prefuse.activity and prefuse.action).&lt;/div&gt;&lt;/a&gt;&lt;div id="c_action_activity" class="highslide-caption"&gt;Visual Mapping (prefuse.activity and prefuse.action).&lt;/div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;There are many types of &lt;span style="font-family:courier new;"&gt;action&lt;/span&gt; (which is considered as an &lt;span style="font-family:courier new;"&gt;activity&lt;/span&gt; in prefuse): &lt;span style="font-family:courier new;"&gt;filter&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;animate&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;assignment&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;layout&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;distortion&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/407384993050124605-4507849825045723115?l=prefuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prefuse.blogspot.com/feeds/4507849825045723115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=407384993050124605&amp;postID=4507849825045723115&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/4507849825045723115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/4507849825045723115'/><link rel='alternate' type='text/html' href='http://prefuse.blogspot.com/2008/07/visual-mapping.html' title='Visual Mapping'/><author><name>Easy</name><uri>http://www.blogger.com/profile/05958958462844432603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='24' src='http://3.bp.blogspot.com/_RPunE_t0eDk/SjI3aD9CKuI/AAAAAAAAAqo/1bBtmya0Nh8/S220/pbface.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/easy.lin/SHokOnmaw4I/AAAAAAAAAhU/P1_Mc-qGF6c/s72-c/o_2.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-407384993050124605.post-6045645616256052055</id><published>2008-07-02T15:54:00.019+02:00</published><updated>2008-07-13T17:53:07.526+02:00</updated><title type='text'>Data &amp; Visual Abstraction</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Posted on Junl 02, 2008&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="figure"&gt;&lt;img src="http://lh6.ggpht.com/easy.lin/SHokOd0-hII/AAAAAAAAAhM/dP36zlxXGos/o_1.png" /&gt;&lt;br /&gt;Data Tables &amp; Visual Abstraction.&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Data Tables&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Visualization Abstraction&lt;/span&gt; should be the most important part of whole prefuse. They represent the informational data and corresponding displayable visual properties. Java classes for &lt;span style="font-weight: bold;"&gt;Visual Abstraction&lt;/span&gt; are extended from those for &lt;span style="font-weight: bold;"&gt;Data Tables&lt;/span&gt;, so that programmer can manipulate &lt;span style="font-weight: bold;"&gt;Data Tables&lt;/span&gt; and their &lt;span style="font-weight: bold;"&gt;Visual Abstraction&lt;/span&gt; in a natural way. &lt;a href="http://prefuse.blogspot.com/2008/06/pipeline.html"&gt;Pipeline&lt;/a&gt; and &lt;a href="http://prefuse.blogspot.com/2008/06/pipeline-overview-ii.html"&gt;Package Overview&lt;/a&gt; should be kept in mind when further exploring prefuse in detail. The Quick Figures menu from left sidebar may be helpful.&lt;br /&gt;&lt;br /&gt;To understand the structure of Java classes in prefuse, the UML class diagram is used for this purpose. Especially the inheritance and realization relations would be represented. The following figure illustrates an example of a class diagram.&lt;br /&gt;&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh6.ggpht.com/easy.lin/SGuH2jzwTRI/AAAAAAAAAcs/3K4romPkLJs/example_o.jpeg" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_uml_example'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh6.ggpht.com/easy.lin/SGuH2gpgz3I/AAAAAAAAAc0/9qdOEzOQ4IQ/example_t.jpeg" /&gt;&lt;br /&gt;Class diagram example.&lt;/div&gt;&lt;/a&gt;&lt;div id="c_uml_example" class="highslide-caption"&gt;Class diagram example.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Again, the Java package used for &lt;span style="font-weight: bold;"&gt;Data Tables&lt;/span&gt; is &lt;span style="font-family:courier new;"&gt;prefuse.data&lt;/span&gt;; for &lt;span style="font-weight: bold;"&gt;Visual Abstraction&lt;/span&gt; is &lt;span style="font-family:courier new;"&gt;prefuse.visual&lt;/span&gt;.&lt;br /&gt;At first I would show the basic concept and structure between &lt;span style="font-family:courier new;"&gt;prefuse.data&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;prefuse.visual&lt;/span&gt;.&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh3.ggpht.com/easy.lin/SGuHbDKfqoI/AAAAAAAAAbc/7DVsdJ6BB14/Data_VisAbstraction_basic_o.jpeg" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_data_vis_basic'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh5.ggpht.com/easy.lin/SGuHbbMQKyI/AAAAAAAAAbk/JCU39tq37hk/Data_VisAbstraction_basic_t.jpeg" /&gt;&lt;br /&gt;Basic structure of Data Tables and Visual Abstraction.&lt;/div&gt;&lt;/a&gt;&lt;div id="c_data_vis_basic" class="highslide-caption"&gt;Basic structure of Data Tables and Visual Abstraction.&lt;/div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Every piece of information (data) is represented as a &lt;span style="font-family:courier new;"&gt;Tuple&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;A &lt;span style="font-family:courier new;"&gt;TupleSet&lt;/span&gt; consists of one to many &lt;span style="font-family:courier new;"&gt;Tuple&lt;/span&gt;s.&lt;/li&gt;&lt;li&gt;A &lt;span style="font-family:courier new;"&gt;TupleSet&lt;/span&gt; (or &lt;span style="font-family:courier new;"&gt;VisualTupleSet&lt;/span&gt;) is similar to a table in database, and a &lt;span style="font-family:courier new;"&gt;Tuple&lt;/span&gt; (or &lt;span style="font-family:courier new;"&gt;VisualItem&lt;/span&gt;) is similar to an entry of such table.&lt;ul&gt;&lt;li&gt;A &lt;span style="font-family:courier new;"&gt;TupleSet&lt;/span&gt; (or &lt;span style="font-family:courier new;"&gt;VisualTupleSet&lt;/span&gt;) has a &lt;a href="http://en.wikipedia.org/wiki/Metadata"&gt;metadata&lt;/a&gt; to define the attributes of  its columns, for examaple, name, type and default value of columns. (Such metadata is stored in &lt;span style="font-family:courier new;"&gt;prefuse.data.Schema&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A &lt;span style="font-family:courier new;"&gt;Tuple&lt;/span&gt; (or &lt;span style="font-family:courier new;"&gt;VisualItem&lt;/span&gt;) is a unique entry in a &lt;span style="font-family:courier new;"&gt;TupleSet&lt;/span&gt; (or &lt;span style="font-family:courier new;"&gt;VisualTupleSet&lt;/span&gt;). A &lt;span style="font-family:courier new;"&gt;Tuple&lt;/span&gt; consists of attribute vlaues which are exactly defined by the metadata of the storing &lt;span style="font-family:courier new;"&gt;TupleSet&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Illustration of a &lt;span style="font-family:courier new;"&gt;TupletSet&lt;/span&gt; with metadata and &lt;span style="font-family:courier new;"&gt;Tuple&lt;/span&gt;s.&lt;img src="http://lh6.ggpht.com/easy.lin/SG6QxMLPDRI/AAAAAAAAAhE/8AeQU0xQrTc/tupleset_example.png" style="border: 1px solid rgb(204, 204, 204);" /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;The schema of &lt;span style="font-family:courier new;"&gt;TupleSet&lt;/span&gt; and the values of &lt;span style="font-family:courier new;"&gt;Tuple&lt;/span&gt; are mostly defined and assigned according to input &lt;span style="font-weight: bold;"&gt;Source Data&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;VisualTupleSet&lt;/span&gt; extends from &lt;span style="font-family:courier new;"&gt;TupleSet&lt;/span&gt;. It holds the schema from its extended &lt;span style="font-family:courier new;"&gt;TupleSet&lt;/span&gt; and has also a extra schema for visual attributes, for example, position, size ...etc.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;VisualItem&lt;/span&gt; extends from &lt;span style="font-family:courier new;"&gt;Tuple&lt;/span&gt;. It holds the data values as &lt;span style="font-family:courier new;"&gt;Tuple&lt;/span&gt; does and it contains additionally visual attribute values.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The following figure shows the detail of the &lt;span style="font-family:courier new;"&gt;prefuse.data&lt;/span&gt;.&lt;br /&gt;&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh5.ggpht.com/easy.lin/SGuHhzL2dxI/AAAAAAAAAbs/gsM-2OyG1_0/Data_VisAbstraction_data_o.jpeg" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_data_vis_data'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh4.ggpht.com/easy.lin/SGuHiO28dlI/AAAAAAAAAb0/9tannYZ8Gqo/Data_VisAbstraction_data_t.jpeg" /&gt;&lt;br /&gt;Data Tables (prefuse.data) in detail.&lt;/div&gt;&lt;/a&gt;&lt;div id="c_data_vis_data" class="highslide-caption"&gt;Data Tables (prefuse.data) in detail.&lt;/div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;Edge&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;Node&lt;/span&gt; are two special &lt;span style="font-family:courier new;"&gt;Tuple&lt;/span&gt;. They can represent the data which has the tree or graph meaning.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;TableTuple&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;TableEdge&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;TableNode&lt;/span&gt; are prefuse default implementing &lt;span style="font-family:courier new;"&gt;Tuple&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;Table&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;Graph&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;Tree&lt;/span&gt; are typical implementing &lt;span style="font-family:courier new;"&gt;TupleSet&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;Graph&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;Tree&lt;/span&gt; are implemented with composite &lt;span style="font-family:courier new;"&gt;Table&lt;/span&gt;s.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The following figure shows the detail of the &lt;span style="font-family:courier new;"&gt;prefuse.visual&lt;/span&gt;.&lt;br /&gt;&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh4.ggpht.com/easy.lin/SGuHtL944tI/AAAAAAAAAcM/wznNz-3p0gw/Data_VisAbstraction_vis_o.jpeg" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_data_vis_vis'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh6.ggpht.com/easy.lin/SGuHtiTwJuI/AAAAAAAAAcU/dMbunc8h9rU/Data_VisAbstraction_vis_t.jpeg" /&gt;&lt;br /&gt;Visual Abstraction (prefuse.visual) in detail.&lt;/div&gt;&lt;/a&gt;&lt;div id="c_data_vis_vis" class="highslide-caption"&gt;Visual Abstraction (prefuse.visual) in detail.&lt;/div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;TableVisualItem&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;TableEdgeItem&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;TableNodeItem&lt;/span&gt; are typical implementing &lt;span style="font-family:courier new;"&gt;VisualItem&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;VisualGraph&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;VisualTree&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;VisualTable&lt;/span&gt; are typical implementing &lt;span style="font-family:courier new;"&gt;VisualTupleSet&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The following figure shows the detail of both &lt;span style="font-family:courier new;"&gt;prefuse.data&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;prefuse.visual&lt;/span&gt;.&lt;br /&gt;&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh5.ggpht.com/easy.lin/SG0ZshSJPmI/AAAAAAAAAfI/Nn34mMsBfMY/Data_VisAbstraction_o.jpeg" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_data_vis_all'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh4.ggpht.com/easy.lin/SGuHiV-3rlI/AAAAAAAAAcE/8OHvl43OZkE/Data_VisAbstraction_t.jpeg" /&gt;&lt;br /&gt;Data Tables (prefuse.data) and Visual Abstraction (prefuse.visual) in detail.&lt;/div&gt;&lt;/a&gt;&lt;div id="c_data_vis_all" class="highslide-caption"&gt;Data Tables (prefuse.data) and Visual Abstraction (prefuse.visual) in detail.&lt;/div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Many classes from &lt;span style="font-family:courier new;"&gt;prefuse.visual&lt;/span&gt; extend the classes from &lt;span style="font-family:courier new;"&gt;prefuse.data&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;SearchTupleSet&lt;/span&gt; from &lt;span style="font-family:courier new;"&gt;prefuse.data.search&lt;/span&gt; can be used for dynamic query (e.g. user search or query interaction).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/407384993050124605-6045645616256052055?l=prefuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prefuse.blogspot.com/feeds/6045645616256052055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=407384993050124605&amp;postID=6045645616256052055&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/6045645616256052055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/6045645616256052055'/><link rel='alternate' type='text/html' href='http://prefuse.blogspot.com/2008/07/data-visual-abstraction.html' title='Data &amp; Visual Abstraction'/><author><name>Easy</name><uri>http://www.blogger.com/profile/05958958462844432603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='24' src='http://3.bp.blogspot.com/_RPunE_t0eDk/SjI3aD9CKuI/AAAAAAAAAqo/1bBtmya0Nh8/S220/pbface.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/easy.lin/SHokOd0-hII/AAAAAAAAAhM/dP36zlxXGos/s72-c/o_1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-407384993050124605.post-7323137696803453671</id><published>2008-06-30T13:51:00.023+02:00</published><updated>2008-07-15T00:39:01.975+02:00</updated><title type='text'>Package Overview</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Posted on July 01, 2008&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Another important figure from prefuse official site is the package overview.&lt;br /&gt;&lt;a target="_blank" href="http://prefuse.org/doc/manual/introduction/structure/"&gt;&lt;div class="figure"&gt;&lt;img src="http://bp1.blogger.com/_RPunE_t0eDk/SGYN1F39HRI/AAAAAAAAAWk/0dS91kW3bKs/s400/package_guide_full.gif" border="0" /&gt;&lt;br /&gt;Package overview diagram from http://prefuse.org/&lt;/div&gt;&lt;/a&gt;This figure represents prefuse's java package structure according to its reference model (or piepeline).&lt;br /&gt;&lt;br /&gt;Here I would like to reorganize the package overview diagram and also format them according to the reference model. See following figure.&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh5.ggpht.com/easy.lin/SGp7qv3883I/AAAAAAAAAa8/HbCvYh-1qhU/pkg_overview.png" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_pkg_overview'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh5.ggpht.com/easy.lin/SGp7q56vzhI/AAAAAAAAAbE/uqdzxkIupQ4/pkg_overview_thumb.png" /&gt;&lt;br /&gt;Package overview according to the reference model.&lt;/div&gt;&lt;/a&gt;&lt;div id="c_pkg_overview" class="highslide-caption"&gt;Package overview according to the reference model.&lt;/div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Only main packages (first level under prefuse root package) are shown.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;prefuse.data.io&lt;/span&gt; is especially for &lt;span style="font-weight: bold;"&gt;Data Transformations&lt;/span&gt; (load &lt;span style="font-weight: bold;"&gt;Source Data&lt;/span&gt; into prefuse internal &lt;span style="font-weight: bold;"&gt;Data Tables&lt;/span&gt;).&lt;/li&gt;&lt;li&gt;Two important classes:&lt;span style="font-family:courier new;"&gt; prefuse.Display&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;prefuse.Visualization&lt;/span&gt;.&lt;ul&gt;&lt;li&gt;Single &lt;span style="font-family:courier new;"&gt;prefuse.Display&lt;/span&gt; class represents  interactive &lt;span style="font-weight: bold;"&gt;View&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;prefuse.Visualization&lt;/span&gt; is the center repository of whole visualization application.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Every package (every data and process in prefuse) can affect each other and they work together as pipeline flow.&lt;/li&gt;&lt;li&gt;Typically interaction events are from user, e.g. mouse movement, key stroke...etc. This would trigger the &lt;span style="font-family:courier new;"&gt;prefuse.controls&lt;/span&gt; components. However a interaction event may be generated from anywhere and directly affect any data or process in visualization, e.g. a time-based animation with varied data or action.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Besides pipeline as reference model, the whole structure (or design pattern) of prefuse framework can be further discovered in &lt;a href="http://prefuse.blogspot.com/2008/07/software-design-pattern.html"&gt;software design pattern for information visualization&lt;/a&gt; by Jeffrey Heer et al.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/407384993050124605-7323137696803453671?l=prefuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prefuse.blogspot.com/feeds/7323137696803453671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=407384993050124605&amp;postID=7323137696803453671&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/7323137696803453671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/7323137696803453671'/><link rel='alternate' type='text/html' href='http://prefuse.blogspot.com/2008/06/pipeline-overview-ii.html' title='Package Overview'/><author><name>Easy</name><uri>http://www.blogger.com/profile/05958958462844432603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='24' src='http://3.bp.blogspot.com/_RPunE_t0eDk/SjI3aD9CKuI/AAAAAAAAAqo/1bBtmya0Nh8/S220/pbface.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_RPunE_t0eDk/SGYN1F39HRI/AAAAAAAAAWk/0dS91kW3bKs/s72-c/package_guide_full.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-407384993050124605.post-6949752142088604205</id><published>2008-06-28T11:48:00.073+02:00</published><updated>2008-07-04T22:08:15.697+02:00</updated><title type='text'>Pipeline</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Posted on June 29, 2008&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;A typical visualization pipeline can be modeled as follwing diagram.&lt;br /&gt;&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh4.ggpht.com/easy.lin/SGa2VM1RN1I/AAAAAAAAAXQ/E_ukOvol8ks/pipeline.png" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_pipeline'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh4.ggpht.com/easy.lin/SGbCZVE4m0I/AAAAAAAAAX0/SavPaRPA0Rs/pipeline_thumb.png" /&gt;&lt;br /&gt;Visualization pipeline.&lt;/div&gt;&lt;/a&gt;&lt;div id="c_pipeline" class="highslide-caption"&gt;Visualization pipeline.&lt;/div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Data acquisition: Collect data from various resource. For example, A temperature sensor.&lt;/li&gt;&lt;li&gt;Raw data: The raw data is the information resource. It may not be manipulated directly by visualization applications.&lt;/li&gt;&lt;li&gt;Filtering: Filter and organize desired data.&lt;/li&gt;&lt;li&gt;Visualization data: After proper filtering the data should be stored with specific structure which can be easily manipulated by visualization applications.&lt;/li&gt;&lt;li&gt;Mapping: Map the "informational" data to "displayable" or "render-able" data representation.&lt;/li&gt;&lt;li&gt;Rendering representation: Describe the visualize-able attributes of data. For example, color, size, position...etc.&lt;/li&gt;&lt;li&gt;Rendering: Render render-able data onto visualization output media. This process takes care the rendering effect which depends on visualization output media.&lt;/li&gt;&lt;li&gt;Visualization output: Where humane or any actor can perceive and recognize.&lt;/li&gt;&lt;li&gt;Interaction: A good visualization application should provide many possible interactions. The interaction can change any visualization process online or offline.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;One of the most important contents from the prefuse official site may be the following figure.&lt;br /&gt;&lt;a target="_blank" href="http://prefuse.org/doc/manual/introduction/structure/"&gt;&lt;div class="figure"&gt;&lt;img src="http://bp1.blogger.com/_RPunE_t0eDk/SGYLVOnRIzI/AAAAAAAAAWc/dV6jkeuJ74Q/s320/reference_model.gif" /&gt;&lt;br /&gt;Reference model diagram from http://prefuse.org/&lt;/div&gt;&lt;/a&gt;&lt;br /&gt;This reference model describes the pipeline flow in the prefuse toolkit.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Source data&lt;/span&gt;: The input resource of information (raw) data. It can be from database, spreadsheet or other media. The source data is outside the prefuse applications scope (not as prefuse internal data).&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Data transformation&lt;/span&gt;: Load &lt;span style="font-weight: bold;"&gt;source data&lt;/span&gt; into prefuse internal &lt;span style="font-weight: bold;"&gt;data tables&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Data tables&lt;/span&gt;: Prefuse internal data structure for data storing and manipulation. Data will be stored in tables (similar to a simple database table). Prefuse has built-in ability to store data with tree or graph semantics in tables.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Visual mappings&lt;/span&gt;: enrich "informational" data with "visualize-able" attributes&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Visualization abstraction&lt;/span&gt;: The visualize-able attributes for data. Prefuse organizes &lt;span style="font-weight: bold;"&gt;visualization abstraction&lt;/span&gt; also in the tabular manner, so that prefuse can manage both information data and visualize-able attributes in internal &lt;span style="font-weight: bold;"&gt;data table&lt;/span&gt; structure. &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Visual transformations&lt;/span&gt;: Do final visualization rendering of the &lt;span style="font-weight: bold;"&gt;visual abstraction&lt;/span&gt; on &lt;span style="font-weight: bold;"&gt;output views&lt;/span&gt;. We can say: &lt;span style="font-style: italic; font-weight: bold;"&gt;Visualization abstraction&lt;/span&gt; define &lt;span style="font-weight: bold; font-style: italic;"&gt;what&lt;/span&gt; to be displayed; &lt;span style="font-style: italic; font-weight: bold;"&gt;Visual transformations&lt;/span&gt; decides &lt;span style="font-weight: bold; font-style: italic;"&gt;how&lt;/span&gt; to display.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Views&lt;/span&gt;: Prefuse use Swing as its visualization view (display)  media.&lt;/li&gt;&lt;/ul&gt;Here I would like to make this reference model a little bit colorful.&lt;br /&gt;&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh6.ggpht.com/easy.lin/SGlOMJE8qRI/AAAAAAAAAYs/Qp6ISQqZtxA/color_ref_model.png" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_ref_model'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh6.ggpht.com/easy.lin/SGlOMElAbnI/AAAAAAAAAY0/C2xVBxMcQGs/color_ref_model_thumb.png" /&gt;&lt;br /&gt;Colorful reference model.&lt;/div&gt;&lt;/a&gt;&lt;div id="c_ref_model" class="highslide-caption"&gt;Colorful reference model.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Before further exploration of prefuse, I would like to show a common example which demonstrates the visualization scenario in prefuse.&lt;br /&gt;&lt;div class="thumbwrapper"&gt;&lt;a href="http://lh6.ggpht.com/easy.lin/SGecxUyt8NI/AAAAAAAAAYQ/P41J_nWBXZs/pipeline_example.png" class="highslide" onclick="return hs.expand(this, {wrapperClassName : 'highslide-white', spaceForCaption: 30, outlineType: 'rounded-white', captionId: 'c_pipeline_example'})"&gt;&lt;div class="figure"&gt;&lt;img src="http://lh3.ggpht.com/easy.lin/SGecyKEPaOI/AAAAAAAAAYY/BVKV_NJvCJA/pipeline_example_thumb.png" /&gt;&lt;br /&gt;Visualization pipeline with an example.&lt;/div&gt;&lt;/a&gt;&lt;div id="c_pipeline_example" class="highslide-caption"&gt;Visualization pipeline with an example.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Source data&lt;/span&gt;: The input weather data is stored in database.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Data transformation&lt;/span&gt;: Load desired  &lt;span style="font-weight: bold;"&gt;source data&lt;/span&gt; from database and store them in prefuse internal data structure, i.e. &lt;span style="font-weight: bold;"&gt;data tables&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Data tables&lt;/span&gt;: The weather data is stored in a tabular manner. It can be retrieved like a database table, for example, with a query expression.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Visual mapping&lt;/span&gt;: Assign extra visualization attributes to the data.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Visual abstraction&lt;/span&gt;: Extra visualization attributes, e.g. position, shape, size or color to display for specific city. Such attributes are also stored in tables which are extended from the &lt;span style="font-weight: bold;"&gt;data tables&lt;/span&gt;.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;View transformation&lt;/span&gt;: Render those &lt;span style="font-weight: bold;"&gt;visual abstraction&lt;/span&gt; onto displayable media. This process may render some artifacts which are not necessarily defined in &lt;span style="font-weight: bold;"&gt;visual abstraction&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;View&lt;/span&gt;: It may be a Java Swing panel which is displayed on LCD. &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Interactions&lt;/span&gt;: Use may use mouse to do interaction on Swing panel, for example, to click somewhere on map. The application should calculate corresponding city, load necessary data, assign new data with visualization attributes and update the display.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/407384993050124605-6949752142088604205?l=prefuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prefuse.blogspot.com/feeds/6949752142088604205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=407384993050124605&amp;postID=6949752142088604205&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/6949752142088604205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/407384993050124605/posts/default/6949752142088604205'/><link rel='alternate' type='text/html' href='http://prefuse.blogspot.com/2008/06/pipeline.html' title='Pipeline'/><author><name>Easy</name><uri>http://www.blogger.com/profile/05958958462844432603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='24' src='http://3.bp.blogspot.com/_RPunE_t0eDk/SjI3aD9CKuI/AAAAAAAAAqo/1bBtmya0Nh8/S220/pbface.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/easy.lin/SGbCZVE4m0I/AAAAAAAAAX0/SavPaRPA0Rs/s72-c/pipeline_thumb.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
