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

<channel>
	<title>Orbifold &#187; Diagramming</title>
	<atom:link href="http://visualizationtools.net/default/category/diagramming/feed/" rel="self" type="application/rss+xml" />
	<link>http://visualizationtools.net/default</link>
	<description>Think. Visualize. Understand.</description>
	<lastBuildDate>Wed, 18 Jan 2012 09:08:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Graph database</title>
		<link>http://visualizationtools.net/default/graph-database/</link>
		<comments>http://visualizationtools.net/default/graph-database/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 20:13:43 +0000</pubDate>
		<dc:creator>Francois Vanderseypen</dc:creator>
				<category><![CDATA[Data]]></category>
		<category><![CDATA[Diagramming]]></category>
		<category><![CDATA[Diverse]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[NoSQL]]></category>

		<guid isPermaLink="false">http://visualizationtools.net/default/?p=4159</guid>
		<description><![CDATA[How to store graph-like data structures of arbitrary data types in a relational database with multi-user and multi-application scope?]]></description>
			<content:encoded><![CDATA[<p><a href="/default/wp-content/uploads/Nyala.jpg"><img class="size-medium wp-image-4161 alignright" title="Nyala prototype" src="/default/wp-content/uploads/Nyala-300x204.jpg" alt="Nyala prototype" width="300" height="204" /></a></p>
<p>The customer wants to see relationships between multiple data types, groups of data, drill down into it, have a geographical view, a temporal view and a conceptual view. And much more of course. That&#8217;s the moment you realize you spent ten years of your life creating all possible variations on the subject &#8216;diagramming&#8217; and now you actually need a &#8216;diagramming database&#8217;. A whole different beast, not the usual yada-yada, what does it entail?</p>
<p>The thing is, relational database systems are not very suitable to act as repositories for graph-like structures but at the same time they are unavoidable because the whole world runs on them. Sure, there is something like an OO database but it would be even less suitable for graphs. So, you choose for a RDBMS even if you have some back-thoughts. At least RDBM systems are well supported on every API level and you get tons of fun tools which on the long run could be useful. In the case of SQL Server you know things like reporting services, StreamInsight, OLAP and whatnot will show up at the end of the road.</p>
<p>How do you store a graph-like system whose nodes are of an arbitrary data type? Say, you wish to store relationships between telephone numbers, file locations, car types, chat messages and credit card numbers. It wouldn&#8217;t be very wise to create data tables for each data type since you know at some point the customer will come along and ask for mobile numbers, addresses, book titles and cooking recipes! Well, there are not that many solutions in this case; you can use binary serialization of some data blob and store it as varbinary or you can use string-like serialization (which includes XML). Obviously, binary stuff in your database is not a good thing if you wish it to be searchable and ultimately open to other integrations. There is, hence, no other choice but to go for XML structs which at least is a well-supported standard across the while industry.</p>
<p>What about the relational structure? Easy enough, you just store the ‘from’ and the ‘to’ (sink, source, target, drain, start, end, initial, final…) in a two-field table. Voila, you’ve got a graph-database on top of an RDBMS.</p>
<p>Well, not really.Obviously having the data in place is just the beginning; you need to calculate a spanning tree, Hamiltonian cycles, Eulerian paths, shortest distance…and more fun pseudo-math stuff. If you want to use the standard algorithms it means you will put a lot of pressure on the data exchange with your client (say, a WCF service). Argh, you realize the only way is to actually do as much as possible on the database side. Through T-SQL or use .Net assemblies inside the SQL process? Not an easy choice. You start to wonder if creating a server is not a better option. But this means…writing a query processor, heavy threading programming and more wizardry which goes far beyond one’s standard toolbox. So…let’s assume T-SQL can do it. Actually T-SQL is not too bad if you are a bit fluent with it you can go quite far into this direction.<br />
Status: a graph-database consists of two tables and a lot of smart stored procedures.</p>
<p>But hold on, the customer wants it also multi-user and multi-application. That is, the total data is not always ‘on’, only a subset of if in function of the application the current user is using. More branching, more subtleties in the stored procedures.<br />
The situation is actually comparable to having heaps of XML documents where each user and each application adds attributes to the standard XML to decorate it with the necessary application-options and security settings. On top of that lots of tuples describe relationships between these XML documents. Did I mentions the relationships are also user and application dependent?</p>
<p>Maybe I’m giving you the impression that it’s an hopeless complexity and an overly open system which tries to embrace too much flexibility. It’s not that bad. In fact, we have a working prototype which includes a full-fledged client application (both for Silverlight and for WPF). The feeling sticks with me, however, that as far as abstract beauty is concerned a true graph database server would be better. This exists in Java but not in .Net and even if it would, I wonder how well adjacent systems (like reporting and such) would integrate with it. So,  the current prototype is a balanced solution between various poles and constraints. In a next phase we’ll develop connectors to StreamInsight, file system, legacy event aggregators and more. The purpose being to be able to store and analyze graphs which cross the boundary of the local storage and also capture real-time events (through, for example, StreamInsight). Big fun and more challenging stuff is ahead.</p>
]]></content:encoded>
			<wfw:commentRss>http://visualizationtools.net/default/graph-database/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>L2, iSee, Silverlight Property Grid and S#</title>
		<link>http://visualizationtools.net/default/l2-isee-silverlight-property-grid-and-s/</link>
		<comments>http://visualizationtools.net/default/l2-isee-silverlight-property-grid-and-s/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 19:38:08 +0000</pubDate>
		<dc:creator>Francois Vanderseypen</dc:creator>
				<category><![CDATA[Diagramming]]></category>
		<category><![CDATA[Property Grid]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.orbifold.net/default/?p=2438</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.orbifold.net/default/wp-content/uploads/L2FirstShot.PNG"><img class="alignleft size-large wp-image-2410" title="L2 Screenshot" src="http://www.orbifold.net/default/wp-content/uploads/L2FirstShot-1024x905.PNG" alt="L2 Screenshot" width="352" height="310" /></a></p>
<p><span style="color: #666699; font-size: 30pt;">L2 </span>G2 is our biggest product and has been used by companies to create &#8216;big&#8217; applications in diverse markets. Because it is based on Unity for dependency injection and because Microsoft waited quite a while to release a Silverlight analog, it took a while to create a Silverlight analog of G2. We baptised it &#8216;L2&#8242;. Of course we could have used alternative injection libraries (many have popped up this year in fact) but we wanted to stay as parallel as possible to G2 in order to enable our customers to move with ease between G2 and L2. So, it&#8217;s there and you can<a title="L2 demo" href="/L2/demo" target="_self"> test it online here</a>. It&#8217;s still in beta and we welcome any feedback. You can also download the code and the core library, see<a title="L2 product page" href="/L2" target="_self"> the L2 product page</a> for more.</p>
<p><span style="color: #666699; font-size: 30pt;">S#</span>scripting library. This little jewel allows you in effect to alter an application at runtime much like macro&#8217;s. In fact, you can compare it to VBA in office except that our S# library will work in any .Net context (<strong>including XNA, Silverlight, WPF and WinForms</strong>). I will talk about S# more later this week in another blog posting and Denis Vuyka will also publish soon more information regarding S# and, another kid on the stage; <strong>Processing#</strong>.</p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/isee3.PNG"><img class="alignright size-medium wp-image-2425" title="isee 3" src="http://www.orbifold.net/default/wp-content/uploads/isee3-300x292.PNG" alt="isee 3" width="201" height="196" /></a><span style="color: #666699; font-size: 30pt;">iSee!</span> In addition to this we have been experimenting with novel approaches to diagramming and how to take full advantge of Silverlight and WPF animation capabilities. This lab project which has been now already for one year in the back of our minds is ready to be tested as well. Head over to <a title="iSee demo" href="/iSee/demo" target="_self">our iSee demo</a> and let us know what you think. iSee is all about animating visual elements and you can apply it anything which inherits from the FrameworkElement base class, that is&#8230;as good as anything you&#8217;ll find in WPF and Silverlight. Furthermore, iSee is really easy to use. It boast a<strong> fluent API</strong> and a very intuitive series of methods. The fluent things means you can chain actions ad infinitum.</p>
<p>For example, the following line of code:</p>
<pre>Attach(image, true).Scale(3, 3, Duration.Automatic)
.Move(new Point(145,150)).Scale(0.3, 0.3, Duration.Automatic).Play();</pre>
<p>will attach a given image to a canvas, scale it with a factor of three, subsequently move the image to another location and un-scale it to the original proportions. Easy! It would take a substantial amount of work to code this in C# or to create an equivalen storyboard in Expression Blend.</p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/isee4.PNG"><img class="size-medium wp-image-2426 alignleft" title="isee 4" src="http://www.orbifold.net/default/wp-content/uploads/isee4-300x261.PNG" alt="isee 4" width="237" height="206" /></a>We also wanted to enable certain diagramming scenario&#8217;s and have integrated diverse methods which allow you to create diagrams, mindmaps and data visualization with just a few methods. In the demo you will see a few examples of this.</p>
<p><span style="color: #666699; font-size: 30pt;">SPG</span>Last but not least, I&#8217;m also proud to announce our new Silverlight property grid. Much like L2 is an analog of G2, so is the Silverlight property grid (we call it &#8216;SPG&#8217;) an analof of our WPF property grid (&#8216;WPG&#8217;). You can <a title="SPF on Denis' blog" href="http://denisvuyka.wordpress.com/2009/10/31/silverlight-3-propertygrid-development-progress/" target="_blank">read about it on Denis&#8217; blog</a> and watch this space for more in the next few weeks.</p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/spg01.png"><img class="alignright size-medium wp-image-2445" title="SPG" src="http://www.orbifold.net/default/wp-content/uploads/spg01-268x300.png" alt="SPG" width="189" height="212" /></a>All these products represent a considerable amount of work (testing, demo versions, docs, samples&#8230;) and we are still in the process of packaging them. Also, for prices and official releases you&#8217;ll have to wait a bit, we&#8217;re working on it. Meanwhile let us know what you think. The Silverlight market is booming these days and there are excellent products around, still we think that our set of products fill a gap and represent a unique spectrum of solutions you&#8217;ll not find elsewhere.</p>
]]></content:encoded>
			<wfw:commentRss>http://visualizationtools.net/default/l2-isee-silverlight-property-grid-and-s/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Proud to include Intel Corp. among our customers</title>
		<link>http://visualizationtools.net/default/proud-to-include-intel-corp-among-our-customers/</link>
		<comments>http://visualizationtools.net/default/proud-to-include-intel-corp-among-our-customers/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 19:56:33 +0000</pubDate>
		<dc:creator>Francois Vanderseypen</dc:creator>
				<category><![CDATA[Diagramming]]></category>
		<category><![CDATA[Diverse]]></category>

		<guid isPermaLink="false">http://www.orbifold.net/default/?p=2330</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Our list of customers is steadily growing and with a certain pride we can now even include the Intel Corporation logo.<br />
Thank you all for relying on us for your business!</p>
<table border="0">
<tbody>
<tr>
<td><a title="Intel Corporation" href="http://www.intel.com" target="_blank"><img class="alignnone size-full wp-image-2317" title="Intel Corporation" src="http://www.orbifold.net/default/wp-content/uploads/intlogo.gif" alt="Intel Corporation" width="127" height="51" /></a></td>
</tr>
<tr>
<td><a title="ESRI: The GIS software leaders" href="http://www.esri.com/" target="_blank"><img class="alignnone size-full wp-image-2324" title="ESRI; The GIS software leader" src="http://www.orbifold.net/default/wp-content/uploads/esri.png" alt="ESRI; The GIS software leader" width="414" height="71" /></a></td>
</tr>
<tr>
<td><a title="Gorrie Regan" href="http://www.gregan.com/" target="_blank"><img class="alignnone size-full wp-image-2322" title="Gorrie Regan" src="http://www.orbifold.net/default/wp-content/uploads/gra-logo.gif" alt="Gorrie Regan" width="200" height="35" /></a></td>
</tr>
<tr>
<td><a title="Conchango consulting" href="http://www.conchango.com" target="_blank"><img class="alignnone size-full wp-image-1541" title="Conchango consulting" src="http://www.orbifold.net/default/wp-content/uploads/conchango.gif" alt="" width="184" height="72" /></a></td>
</tr>
<tr>
<td><a title="Softelligent" href="http://www.softelligent.be/" target="_blank"><img class="alignnone size-full wp-image-2326" title="Softelligent" src="http://www.orbifold.net/default/wp-content/uploads/softelligent.png" alt="Softelligent" width="331" height="87" /></a></td>
</tr>
<tr>
<td><a title="Dialogik software components" href="http://www.dialogik.ch" target="_blank"><img class="alignnone size-full wp-image-1537" title="Dialogik AG" src="http://www.orbifold.net/default/wp-content/uploads/logodialogikpositivneg.png" alt="" width="144" height="54" /></a></td>
</tr>
<tr>
<td><a title="LLBL Gen Pro" href="http://www.llblgen.com" target="_blank"><img class="alignnone size-full wp-image-1535" title="LLBL Gen Pro" src="http://www.orbifold.net/default/wp-content/uploads/llblgen.gif" alt="" width="302" height="117" /></a></td>
</tr>
<tr>
<td><a title="Buhl Data" href="http://www.buhl.de/" target="_blank"><img class="alignnone size-full wp-image-2319" title="Buhld ata" src="http://www.orbifold.net/default/wp-content/uploads/buhldata.jpg" alt="Buhld ata" width="170" height="85" /></a></td>
</tr>
<tr>
<td><a title="Acando Gmbh" href="http://acando.de/" target="_blank"><img class="alignnone size-full wp-image-2323" title="Acando Gmbh" src="http://www.orbifold.net/default/wp-content/uploads/acando.gif" alt="Acando Gmbh" width="153" height="44" /></a></td>
</tr>
<tr>
<td><a title="Hommes &amp; Process" href="http://www.hommesetprocess.com/en" target="_blank"><img class="alignnone size-full wp-image-2320" title="Hommes &amp; Process" src="http://www.orbifold.net/default/wp-content/uploads/hompro.png" alt="Hommes &amp; Process" width="300" height="50" /></a></td>
</tr>
<tr>
<td><a title="Ecole Polytechnique Federale de Lausanne" href="http://www.epfl.ch/index.en.html" target="_blank"><img class="alignnone size-full wp-image-2327" title="EPFL-CWIS" src="http://www.orbifold.net/default/wp-content/uploads/epfl-logo.jpg" alt="EPFL-CWIS" width="120" height="63" /></a></td>
</tr>
<tr>
<td><a title="GenWise Studio" href="http://www.genwise.com" target="_blank"><img class="alignnone size-full wp-image-1536" title="GenWise" src="http://www.orbifold.net/default/wp-content/uploads/genwisesitelogopra.gif" alt="" width="237" height="70" /></a></td>
</tr>
<tr>
<td><a title="QMap" href="http://www.qmap.co.uk/" target="_blank"><img class="alignleft size-full wp-image-1883" title="QMap BP " src="http://www.orbifold.net/default/wp-content/uploads/qmap.png" alt="QMap BP " width="151" height="62" /></a></td>
</tr>
<tr>
<td><a href="http://www.orbifold.net/default/wp-content/uploads/thatchertech.jpg"><img class="alignleft size-full wp-image-1881" title="thatchertech" src="http://www.orbifold.net/default/wp-content/uploads/thatchertech.jpg" alt="thatchertech" width="191" height="105" /></a></td>
</tr>
<tr>
<td><a title="TrueSoftware" href="http://www.truesoftware.nl/" target="_blank"><img class="alignnone size-full wp-image-1545" title="TrueSoftware" src="http://www.orbifold.net/default/wp-content/uploads/truesoft.png" alt="" width="153" height="46" /></a></td>
</tr>
<tr>
<td><a title="SD Partners" href="http://www.sd-partners.com" target="_blank"><img class="alignnone size-full wp-image-1546" title="SDPartners" src="http://www.orbifold.net/default/wp-content/uploads/sdpartners.png" alt="" width="391" height="91" /></a></td>
</tr>
<tr>
<td><a title="IcSharp" href="http://www.icsharpcode.net" target="_blank"><img class="alignnone size-full wp-image-1543" title="icsharp" src="http://www.orbifold.net/default/wp-content/uploads/icsharp.gif" alt="" width="363" height="72" /></a></td>
</tr>
<tr>
<td colspan="2"><a title="SequenceViz reflector addin" href="http://www.codeplex.com/sequenceviz" target="_blank"><img class="alignnone size-full wp-image-1538" title="sequenceviz" src="http://www.orbifold.net/default/wp-content/uploads/sequenceviz.png" alt="" width="333" height="54" /></a></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://visualizationtools.net/default/proud-to-include-intel-corp-among-our-customers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>G2: upcoming v2.0 features</title>
		<link>http://visualizationtools.net/default/g2-upcoming-v20-features/</link>
		<comments>http://visualizationtools.net/default/g2-upcoming-v20-features/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 10:06:10 +0000</pubDate>
		<dc:creator>Francois Vanderseypen</dc:creator>
				<category><![CDATA[Diagramming]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[G2]]></category>

		<guid isPermaLink="false">http://www.orbifold.net/default/?p=2305</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.orbifold.net/default/wp-content/uploads/flowcharting.png"><img class="alignnone size-large wp-image-2306" title="G2 flowcharting" src="http://www.orbifold.net/default/wp-content/uploads/flowcharting-1024x619.png" alt="G2 flowcharting" width="728" height="440" /></a></p>
<p>We&#8217;ve been busy. The screenshots reveal quite a bit the upcoming features but let me be explicit:</p>
<ul>
<li><strong>Groups</strong>: shapes can be embedded in groups ad infinitum (this is an undoable action and copy/cut/paste works with groups as well, of course)</li>
<li><strong>Flowcharting</strong>: better support for standard flowcharting</li>
<li><strong>Arrows and connections</strong>: better support for databinding your stuff (i.e. data backend) to connections and related adorners</li>
<li><strong>Rotations</strong>: rotating shapes and groups (undoable action)</li>
<li><strong>Unity 2.0:</strong> Unity merges with the ObjectBuilder2. Nothing shacking here but it will simplify the underlying data exchange pipeline of G2.</li>
<li><strong>Library support</strong>: shapes, groups, layers, pages and whole diagrams can be saved to libraries and organized in categories. This features is based on an adapter mechanism, which means you can have libraries in a database backend or accessible via WCF etc.</li>
<li><strong>Alignments</strong>: aligning shapes is now possible. In conjunction with the snap &amp; grid features this is particularly useful to have a nice layout.</li>
<li><strong>Snap &amp; grid</strong>: everything has become snap-able.</li>
<li><strong>Linking</strong>: better support inside shapes to (hyper)link data; either diagram elements or data entities coming from your backend.</li>
<li><strong>XML</strong>: better support for XML import/export, extending the already very solid and beautiful data exchange pipeline of v1.0</li>
<li> <strong>Theming of whole diagrams:</strong> apply a style to a complete diagram (cfr. Microsoft PowerPoint)</li>
<li><strong>Auto-connect shapes</strong>: auto-add or auto-connect shapes via the adjacent arrows appearing when hovering over shapes (cfr. Microsoft Visio)</li>
<li><strong>Bug fixes and squadrillions of little changes</strong> to make G2 better, faster, more useful, more business and data oriented, more beautiful.</li>
</ul>
<p>No date fixed yet to release v2.0 though it&#8217;s pretty stable already now. So many things are going on these days&#8230; I sincerely hope to deliver a big headline one of these days regarding our future (and G2&#8242;s future in particular). In any case, I feel immensely proud about G2&#8242;s wonderful architecture and the breadth of applications it can support, the scope of features and the many high-tech subtleties which you will not find in any other diagramming package. It leaves the competition beyond the diagramming horizon.</p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/theming.png"><img class="alignnone size-large wp-image-2312" title="G2: theming" src="http://www.orbifold.net/default/wp-content/uploads/theming-1023x553.png" alt="G2: theming" width="754" height="407" /></a></p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/groups.png"><img class="alignnone size-large wp-image-2307" title="G2 groups" src="http://www.orbifold.net/default/wp-content/uploads/groups-1024x619.png" alt="G2 groups" width="737" height="445" /></a></p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/better.png"><img class="alignnone size-large wp-image-2310" title="G2: better, faster, bigger, more beautiful." src="http://www.orbifold.net/default/wp-content/uploads/better-1024x554.png" alt="G2: better, faster, bigger, more beautiful." width="771" height="416" /></a></p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/better.png"></a><a href="http://www.orbifold.net/default/wp-content/uploads/cwis.png"><img class="alignnone size-large wp-image-2309" title="G2: thick arrows" src="http://www.orbifold.net/default/wp-content/uploads/cwis-1024x673.png" alt="G2: thick arrows" width="766" height="503" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://visualizationtools.net/default/g2-upcoming-v20-features/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Twampoline; a Twitter clique explorer</title>
		<link>http://visualizationtools.net/default/twampoline-a-twitter-clique-explorer/</link>
		<comments>http://visualizationtools.net/default/twampoline-a-twitter-clique-explorer/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 05:22:29 +0000</pubDate>
		<dc:creator>Francois Vanderseypen</dc:creator>
				<category><![CDATA[Diagramming]]></category>
		<category><![CDATA[graphite]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://www.orbifold.net/default/?p=2125</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.orbifold.net/default/wp-content/uploads/twampoline.png"></a></p>
<p><a href="http://twampoline.com/"><img class="alignnone size-large wp-image-2127" title="Twampoline" src="http://www.orbifold.net/default/wp-content/uploads/twampoline-1024x660.png" alt="Twampoline" width="674" height="405" /></a></p>
<p><a title="The human web" href="http://en.wikipedia.org/wiki/Six_degrees" target="_blank">Six degrees of freedom </a>is everywhere around us; it&#8217;s how your brain is wired, it&#8217;s the law ruling the internet growth, it describes the strucutre of movies and movie stars relationships, it tells how you are connected to your friends. <a title="Twitter" href="http://twitter.com" target="_blank">Twitter</a> much like any other <em>seemingly</em> random database (<a title="Linkeid" href="http://www.linkedin.com" target="_blank">LinkedIn</a>, <a title="Movie database" href="http://www.imdb.com" target="_blank">IMDB</a>, , <a title="All diseases" href="http://www.diseasesdatabase.com/content.asp" target="_blank">Disease database</a>, <a title="Facebook" href="http://www.facebook.com" target="_blank">Facebook</a>&#8230;) is proving the six degrees behavior. Recently someone took our <a title="Graphite" href="/Graphite">Graphite control for Silverlight </a>to visualize Twitter relationships and created <a title="Twampoline" href="http://twampoline.com/" target="_blank">Twampoline</a>, a Twitter visualizer. It shows so-called <a title="Cliques" href="http://en.wikipedia.org/wiki/Clique" target="_blank">cliques </a>and densities, however if you have a busy network of followers you will have difficulties to see through the clusters. The layout algorithm used should be reparametrized in function of the graph scale.</p>
<p>Aside from this beautiful visualization idea, I have never understood the whole Twitter hype and wonder what the next superlative of all this will be?. From websites, to wiki&#8217;s, to blogs, to twitter, there has been a continuous decrease of content and informative value. The next big thing will be single words or acronyms summarizing one&#8217;s mood and thoughts? Or maybeÂ <a title="The Wave" href="http://wave.google.com/" target="_blank">Google&#8217;s Wave</a> will bringÂ  Web 3.0 to the world butÂ I doubt it.</p>
]]></content:encoded>
			<wfw:commentRss>http://visualizationtools.net/default/twampoline-a-twitter-clique-explorer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Graphite manual and tutorials</title>
		<link>http://visualizationtools.net/default/graphite-manual-and-tutorials/</link>
		<comments>http://visualizationtools.net/default/graphite-manual-and-tutorials/#comments</comments>
		<pubDate>Mon, 04 May 2009 19:18:57 +0000</pubDate>
		<dc:creator>Francois Vanderseypen</dc:creator>
				<category><![CDATA[Diagramming]]></category>
		<category><![CDATA[Diverse]]></category>

		<guid isPermaLink="false">http://www.orbifold.net/default/?p=1973</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><span style="color: #800000;"><strong>Important update [July 10th, 2009</strong></span>]: note that with Silverlight 3 an update of the Visual Studio 2008 tools are necessary. If you acquired the source code of Graphite for Silverlight, <a title="Add-on for Visual Studio 2008 SP1 for developing Silverlight 3 applications" href="http://www.microsoft.com/downloads/details.aspx?familyid=9442b0f2-7465-417a-88f3-5e7b5409e9dd&amp;displaylang=en" target="_blank">please download the tools from Microsoft</a> since the Silverlight project is based on version 3.0.</p>
<p>To all customers of Graphite, head over to the following articles which compile the tips and solutions related to the customization and integration of Graphite:</p>
<ul>
<li><a href="/default/?page_id=1947">General overview, event logic, import/export, etc.</a></li>
<li><a href="/default/?page_id=1976">How to template the VisualNode of Graphite</a></li>
<li><a href="/default/?page_id=1976">How to change the layout algorithm of Graphite</a></li>
<li><a title="Permanent Link to Graphite: differentiating between parents and children" rel="bookmark" href="/default/?page_id=2008">Graphite: differentiating between parents and children</a></li>
</ul>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/smlogic.png"><img class="aligncenter size-full wp-image-1959" title="smlogic.png" src="http://www.orbifold.net/default/wp-content/uploads/smlogic.png" alt="smlogic.png" width="337" height="298" /></a></p>
<p>Remarks about and requests for particular uncovered topics, just let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://visualizationtools.net/default/graphite-manual-and-tutorials/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Silverlight diagramming, WCF, the Entity Framework and MySQL.</title>
		<link>http://visualizationtools.net/default/wcfdiagrammingandmysql/</link>
		<comments>http://visualizationtools.net/default/wcfdiagrammingandmysql/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 20:30:37 +0000</pubDate>
		<dc:creator>Francois Vanderseypen</dc:creator>
				<category><![CDATA[Diagramming]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[G2]]></category>

		<guid isPermaLink="false">http://www.orbifold.net/default/?p=1917</guid>
		<description><![CDATA[About our flashy diagramming framework for Silverlight, how to bind MySQL data to Silverlight via the Entity Framework and ADO.Net data service, how to demo a WCF bound Silverlight application without IIS or a dedicated webserver. Some news about our latest commercial moves and our sleepless nights.]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/crystalizerapplication.png"><img src="/oldsite/wp-content/uploads/crystalizerapplication-300x196.png" alt="Codename: Crystalizer" title="Codename: Crystalizer" width="300" height="196" class="aligncenter size-medium wp-image-1929" /></a></p>
<p>It&#8217;s been a while since I jotted something down on this blog&#8230;it&#8217;s been hectic for months now and the pace doesn&#8217;t seem to slow down but I think I have a few interesting things to mention.</p>
<p>Since the end of last year <a title="G2" href="/G2" target="_blank">G2</a> has grown bigger, stronger, more popular and various big customization projects are on our workbenches. At the same time, <a title="About Graphite" href="/Graphite" target="_blank">Graphite </a>continues to be our bestseller but most customers use it &#8216;as is&#8217; without much alterations. There are however a few lines of evolution. On the one hand, Silverlight becomes more and more popular and seems to have a better market penetration than WPF. This means that also Silverlight diagramming solutions are increasingly asked for. In this context, Graphite allows an easy path to data visualization but misses the flexibility and breadth of a true diagramming framework. Equally well (and enforced by the Silverlight wave), more and more customers wish to have a dual solution; all the advantages of diagraming in WPF and the possibility to bring as much as possible on the web (Sharepoint integration, read-only viewers and so on). These evolutions and the obvious gap in our products related to this meant a necessary investment in Silverlight and a common diagramming core. Now, hold your horses and don&#8217;t expect the sky since Silverlight still remains a subset of the .Net framework and even though Silverlight v3 broadens the horizon I don&#8217;t think any day soon you&#8217;ll have a full-compatibility tale (except through XBAP, but that&#8217;s another story). In any case, here is the good-news show and some notes from the field where diagramming meets Silverlight, the Entity Framework, MySQL and WCF.<br />
<span id="more-1917"></span><br />
Before describing the juicy technical details let me give you an overview of the application (screenshot above) we&#8217;ve been working on recently. It&#8217;s a Silverlight application which allows one to visualize any kind of relations between different types of entities; persons, documents, sites, etc. Any kind of relation means that it allows multiple links and generic graphs but can also handle tree-like data and multiple diagram layouts. The database uses just a few tables to store the graph structure and the actual data (persons, documents, metadata) can reside in the database but could also be stored in another database, in  XML files, you name it. The application also allows one to edit relations and to edit the entities; you can draw links and it will be saved in the database, you can change or add entities and so on. Finally (and this is what this blog items is mostly about) this Silverlight application can also be used as a WinForm application and accesses data through a local self-hosted WCF service. The WCF service is a RESTful ADO.Net data service which can also handle standard HTTP requests and thus acts as a local webserver. Minor features of this application is the integrated security system which can be connected to the ASP.Net membership mechanism, to ActiveDirectory services or any legacy single-sign on system you have in-house. <strong>Let me emphasize that this application boasts a full-fledged diagramming framework for Silverlight.</strong> which in many ways extends/surpasses our current Graphite product. For example, just for fun I developed in less than a day a reasonable mindmapping application for Silverlight (screenshot below).</p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/l2mm.png"><img src="/oldsite/wp-content/uploads/l2mm-300x155.png" alt="L2 based mindmapping" title="L2 based mindmapping" width="300" height="155" class="aligncenter size-medium wp-image-1930" /></a></p>
<h2>Entity Framework</h2>
<p>First off, I have been <strong>happily surprised by the Entity Framework (EF)</strong>. I know, it&#8217;s got a long list of shortcomings and I&#8217;ve walked the whole avenue of POCO adapters, detached entity tricks, constrained Visual Studio designer and more. However, in the context of Silverlight I was pleased to experience the ease with which it worked on top of MySQL and through the ADO.Net data services (aka Astoria). Initially I wrote the whole framework for SQL Server and had later on to move to MySQL&#8230;oh miraculus! <strong>Only minor changes were necessary on the database level (no Guid&#8217;s in MySQL, no triggers e.g.) and one needs at least MySQL v5 to make it work. </strong> Note that this happy message has more its origins in the hard work which went into developing <a target="_blank" href="http://www.mysql.com/products/connector/">the .Net driver for MySQL</a> rather than how open Microsoft is towards other relational database systems. In fact, I can also claim the same for other systems: <strong>EF works well with SQLite and with SQL Server Compact v3.5.</strong> There are pro&#8217;s and con&#8217;s with each and you need to tweak your model because of datatype differences, missing features (views, stored procedures etc.) but I expected a complete no-go orginally.</p>
<h2>ADO.Net Data Services</h2>
<p>Concerning ADO.Net data services. It<strong> works flawless with the EF, whatever the underlying database-dependent model is</strong>. In fact, if the data type signature is identical in different database systems, you only need to change one word in your code to switch from one to the other:</p>
<div class="wp_codebox">
<table>
<tr id="p19171">
<td class="line_numbers">
<pre>1
2
3
4
5
6
</pre>
</td>
<td class="code" id="p1917code1">
<pre class="csharp" style="font-family:monospace;"><span style="color: #008000;">&#91;</span><span style="color: #000000;">System</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ServiceModel</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ServiceBehavior</span><span style="color: #008000;">&#40;</span>IncludeExceptionDetailInFaults <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> CrystalMsSqlService <span style="color: #008000;">:</span> DataService<span style="color: #008000;">&lt;</span>crystalmysqlcontext<span style="color: #008000;">&gt;</span>
<span style="color: #008000;">&#123;</span>
<span style="color: #008000;">...</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&lt;/</span>crystalmysqlcontext<span style="color: #008000;">&gt;</span></pre>
</td>
</tr>
</table>
</div>
<p>This code is the generator of a REST WCF service on top of a EF model. The CrystalMySQLContext is the data context generated by the EF. If you wish to switch to, let&#8217;s say, SQL Server you only need to replace the data context specification and you&#8217;ll be safe for the rest of the journey.<br />
Note, as a side note, the <strong>ServiceBehavior </strong>attribute which propagates exceptions to the surface and which is not added by default in Visual Studio. You will also want to add a try-catch in the code to convert the exceptions to a <strong>DataServiceException </strong>like this:</p>
<div class="wp_codebox">
<table>
<tr id="p19172">
<td class="line_numbers">
<pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre>
</td>
<td class="code" id="p1917code2">
<pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> InitializeService<span style="color: #008000;">&#40;</span>IDataServiceConfiguration config<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">try</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #008000;">..</span>
        <span style="color: #0000FF;">config</span><span style="color: #008000;">.</span><span style="color: #0000FF;">SetEntitySetAccessRule</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;SomeTable&quot;</span>, EntitySetRights<span style="color: #008000;">.</span><span style="color: #0000FF;">All</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>Exception e<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">throw</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> DataServiceException<span style="color: #008000;">&#40;</span>e<span style="color: #008000;">.</span><span style="color: #0000FF;">Message</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre>
</td>
</tr>
</table>
</div>
<p>It will make debugging much easier, trust me.</p>
<p>Why ADO.Net data service (ADS)? You need to know that Silverlight only likes <strong>asynchronous data exchange</strong> with the outside world. Now, in order to expose data via WCF you can go via a artisanal, hand-crafted WCF service but ADS makes things easy and turns an EF into a RESTful service in a snap. In effect, it means you have all your tables and views available in Silverlight as if they were on the client. The price for this is the asynchronous behavior, which at times can be frustrating; <strong>you cannot have a data request and a data related action in the same C# method</strong>. A wisdom which I can give to you here is: <strong>don&#8217;t try to launch inner join requests from Silverlight</strong> to the REST, it doesn&#8217;t work. If you wish to do this<strong> you need to create a view</strong> in you database and make this view accessible in ADS as if it was a table. This simple fact makes SQL Server Compact immediately a bad choice because it doesn&#8217;t support views (SQL Express will do however).</p>
<h2>WCF (ah, so much beauty!)</h2>
<p>One of the things which kept me busy for a long time was how to demonstrate/ship a Silverlight demo without having to ship a database and without having to buy an expensive SQL Server license? Imagine you have a beautiful Silverlight application for a customer but you don&#8217;t want a whole setup involving a SQL Server database deployment (logins, connection strings etc.) and you also don&#8217;t want a complicated IIS setup wherein the Silverlight, WCF, XAP&#8230;reside. What to do? At first I tried to develop a local WCF proxy which would go to a file based data system. This meant a self-hosted WCF service, some sort of database on the client and a separate local webserver. This worked well up to the point that Silverlight kept on complaining about security issues. No mystery here: <strong>Silverlight doesn&#8217;t want to access data sources if they are not coming from the precise (includes the port number!) same origin as the xap</strong> (i.e. the Silverlight application).</p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/allinone.png"><img src="/oldsite/wp-content/uploads/allinone-216x300.png" alt="All in one solution" title="All in one solution" width="216" height="300" class="aligncenter size-medium wp-image-1921" /></a></p>
<p>Easy enough, I thought, but read on. You only need to supply the client with the clientaccesspolicy.xml or the server with the crossdomain.xml. Extend the WCF service like this:</p>
<div class="wp_codebox">
<table>
<tr id="p19173">
<td class="line_numbers">
<pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
</pre>
</td>
<td class="code" id="p1917code3">
<pre class="csharp" style="font-family:monospace;"><span style="color: #008000;">&#91;</span>ServiceContract<span style="color: #008000;">&#93;</span>
<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">interface</span> IWebServer
<span style="color: #008000;">&#123;</span>
    <span style="color: #008000;">&#91;</span>OperationContract, WebGet<span style="color: #008000;">&#40;</span>UriTemplate <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;/clientaccesspolicy.xml&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
    Stream GetSilverlightPolicy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#91;</span>OperationContract, WebGet<span style="color: #008000;">&#40;</span>UriTemplate <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;/crossdomain.xml&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
    Stream GetFlashPolicy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">...</span><span style="color: #008000;">&#125;</span>
<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> CrystalMsSqlService <span style="color: #008000;">:</span> DataService<span style="color: #008000;">&lt;</span>crystalmysqlcontext<span style="color: #008000;">&gt;</span>, IWebServer
<span style="color: #008000;">&#123;</span><span style="color: #008000;">...</span>
<span style="color: #0600FF; font-weight: bold;">public</span> Stream GetSilverlightPolicy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">const</span> <span style="color: #6666cc; font-weight: bold;">string</span> result <span style="color: #008000;">=</span> <span style="color: #666666;">@&quot;&lt; ?xml version=&quot;</span><span style="color: #666666;">&quot;1.0&quot;</span><span style="color: #666666;">&quot; encoding=&quot;</span><span style="color: #666666;">&quot;utf-8&quot;</span><span style="color: #666666;">&quot;?&gt;
                                &lt;access -policy&gt;
                                    &lt;cross -domain-access&gt;
                                        &lt;policy&gt;
                                            &lt;allow -from http-request-headers=&quot;</span><span style="color: #666666;">&quot;*&quot;</span><span style="color: #666666;">&quot;&gt;
                                                &lt;domain uri=&quot;</span><span style="color: #666666;">&quot;*&quot;</span><span style="color: #666666;">&quot;/&gt;
                                            &lt;/allow&gt;
                                            &lt;grant -to&gt;
                                                &lt;resource path=&quot;</span><span style="color: #666666;">&quot;/&quot;</span><span style="color: #666666;">&quot; include-subpaths=&quot;</span><span style="color: #666666;">&quot;true&quot;</span><span style="color: #666666;">&quot;/&gt;
                                            &lt;/grant&gt;
                                        &lt;/policy&gt;
                                    &lt;/cross&gt;
                                &lt;/access&gt;&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">return</span> StringToStream<span style="color: #008000;">&#40;</span>result<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">public</span> Stream GetFlashPolicy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">const</span> <span style="color: #6666cc; font-weight: bold;">string</span> result <span style="color: #008000;">=</span> <span style="color: #666666;">@&quot;&lt; ?xml version=&quot;</span><span style="color: #666666;">&quot;1.0&quot;</span><span style="color: #666666;">&quot;?&gt;
                                &lt; !DOCTYPE cross-domain-policy SYSTEM &quot;</span><span style="color: #666666;">&quot;http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd&quot;</span><span style="color: #666666;">&quot;&gt;
                                &lt;cross -domain-policy&gt;
                                    &lt;allow -access-from domain=&quot;</span><span style="color: #666666;">&quot;*&quot;</span><span style="color: #666666;">&quot; /&gt;
                                &lt;/cross&gt;&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">return</span> StringToStream<span style="color: #008000;">&#40;</span>result<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">...</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&lt;/</span>crystalmysqlcontext<span style="color: #008000;">&gt;</span></pre>
</td>
</tr>
</table>
</div>
<p>It doesn&#8217;t work. Or at least, you can check that the WCF service does supply the policies but for some reasons Silverlight in my case still didn&#8217;t want to query the WCF service.</p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/wcfwebserver.png"><img src="/oldsite/wp-content/uploads/wcfwebserver-216x300.png" alt="WCF as a webserver" title="WCF as a webserver" width="216" height="300" class="aligncenter size-medium wp-image-1925" /></a></p>
<p>Now, because REST allows a client to query a WCF as if it&#8217;s a website and because one can serve both ascii and binary data through WCF/REST the obvious next step was to <strong>extend the WCF service with methods which would mimic a webserver behavior.</strong> Easy to do in fact by extending the service with more methods and templating the URL requests:</p>
<div class="wp_codebox">
<table>
<tr id="p19174">
<td class="line_numbers">
<pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
</pre>
</td>
<td class="code" id="p1917code4">
<pre class="csharp" style="font-family:monospace;">&nbsp;
<span style="color: #008000;">&#91;</span>ServiceContract<span style="color: #008000;">&#93;</span>
<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">interface</span> IWebServer
<span style="color: #008000;">&#123;</span>
<span style="color: #008000;">&#91;</span>OperationContract, WebGet<span style="color: #008000;">&#40;</span>UriTemplate <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;/clientaccesspolicy.xml&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
Stream GetSilverlightPolicy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#91;</span>OperationContract, WebGet<span style="color: #008000;">&#40;</span>UriTemplate <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;/crossdomain.xml&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
Stream GetFlashPolicy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#91;</span>OperationContract, WebGet<span style="color: #008000;">&#40;</span>UriTemplate <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;/app.htm&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
Stream GetApplicationPage<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008000;">&#91;</span>OperationContract, WebGet<span style="color: #008000;">&#40;</span>UriTemplate <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;/{pagename}&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
Stream GetSitePage<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> pagename<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#91;</span>OperationContract, WebGet<span style="color: #008000;">&#40;</span>UriTemplate <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;/Images/{imagename}&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
Stream GetImage<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> imagename<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#91;</span>OperationContract, WebGet<span style="color: #008000;">&#40;</span>UriTemplate <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;/Crystalizer.One.xap&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
Stream GetCrytal<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008000;">&#125;</span>
<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> CrystalMsSqlService <span style="color: #008000;">:</span> DataService<span style="color: #008000;">&lt;</span>crystalmysqlcontext<span style="color: #008000;">&gt;</span>, IWebServer
<span style="color: #008000;">&#123;</span><span style="color: #008000;">...</span>
<span style="color: #0600FF; font-weight: bold;">public</span> Stream GetSitePage<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> pagename<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">try</span>
    <span style="color: #008000;">&#123;</span>
        WebOperationContext<span style="color: #008000;">.</span><span style="color: #0000FF;">Current</span><span style="color: #008000;">.</span><span style="color: #0000FF;">OutgoingResponse</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ContentType</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;text/html&quot;</span><span style="color: #008000;">;</span>
        <span style="color: #6666cc; font-weight: bold;">string</span> fileContents<span style="color: #008000;">;</span>
        <span style="color: #6666cc; font-weight: bold;">string</span> path<span style="color: #008000;">;</span>
        path <span style="color: #008000;">=</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Format</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">@&quot;WebRoot\{0}&quot;</span>, pagename<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008000;">&#40;</span>StreamReader sr <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> StreamReader<span style="color: #008000;">&#40;</span>path<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            fileContents <span style="color: #008000;">=</span> sr<span style="color: #008000;">.</span><span style="color: #0000FF;">ReadToEnd</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #0600FF; font-weight: bold;">return</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> MemoryStream<span style="color: #008000;">&#40;</span>Encoding<span style="color: #008000;">.</span><span style="color: #0000FF;">UTF8</span><span style="color: #008000;">.</span><span style="color: #0000FF;">GetBytes</span><span style="color: #008000;">&#40;</span>fileContents<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>Exception<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">public</span> Stream GetImage<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> imagename<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> fileContents<span style="color: #008000;">;</span>
    fileContents <span style="color: #008000;">=</span> File<span style="color: #008000;">.</span><span style="color: #0000FF;">ReadAllBytes</span><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Format</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">@&quot;WebRoot\Images\{0}&quot;</span>, imagename<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// byte[] resp = Encoding.ASCII.GetBytes(string.Format(HttpHeader, &quot;image/png&quot;, fileContents.Length, fileContents));</span>
    <span style="color: #0600FF; font-weight: bold;">return</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> MemoryStream<span style="color: #008000;">&#40;</span>fileContents<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">...</span><span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&lt;/</span>crystalmysqlcontext<span style="color: #008000;">&gt;</span></pre>
</td>
</tr>
</table>
</div>
<p>This now turns your RESTful ADS service into a webserver which serves both the data, the site pages and site images.<br />
One last trick is the fact that because now your WCF service actually implements two interfaces the default endpoint configuration of ADS will not work. To solve this in the self-hosted scenario you can add another endpoint as follows:</p>
<div class="wp_codebox">
<table>
<tr id="p19175">
<td class="line_numbers">
<pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre>
</td>
<td class="code" id="p1917code5">
<pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> HostWithWebServiceHost<span style="color: #008000;">&#40;</span>Uri baseAddress<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
&nbsp;
    WCFHost <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> WebServiceHost<span style="color: #008000;">&#40;</span><a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span>CrystalMsSqlService<span style="color: #008000;">&#41;</span>, baseAddress<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    WebHttpBinding binding <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> WebHttpBinding<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    WCFHost<span style="color: #008000;">.</span><span style="color: #0000FF;">AddServiceEndpoint</span><span style="color: #008000;">&#40;</span><a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span><span style="color: #000000;">System.<span style="color: #0000FF;">Data</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">Services</span><span style="color: #008000;">.</span><span style="color: #0000FF;">IRequestHandler</span><span style="color: #008000;">&#41;</span>, binding, <span style="color: #666666;">&quot;dataservice&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
&nbsp;
    WCFHost<span style="color: #008000;">.</span><span style="color: #0000FF;">AddServiceEndpoint</span><span style="color: #008000;">&#40;</span><a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span>IWebServer<span style="color: #008000;">&#41;</span>, binding, <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Behaviors</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> WebHttpBehavior<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    ServiceMetadataBehavior smb <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> ServiceMetadataBehavior <span style="color: #008000;">&#123;</span>HttpGetEnabled <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span>
    WCFHost<span style="color: #008000;">.</span><span style="color: #0000FF;">Description</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Behaviors</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>smb<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    WCFHost<span style="color: #008000;">.</span><span style="color: #0000FF;">Open</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre>
</td>
</tr>
</table>
</div>
<p><strong>At this point the Silverlight application will run at the client without any server or internet connection.</strong>. You can go a step further and even host the Silverlight application in a Windows form which at the same time hosts the WCF service, but that&#8217;s really a no-brainer. You simply add a webbrowser control in a WinForm and call the HTML page which contains the Silverlight control and you&#8217;re done. Note that by doing this you have <strong>a Silverlight 2 application which runs as if it&#8217;s a regular WinForm application</strong>. Still, because the WCF service serves ANY client you can also access the Silverlight application through a standard browser. Actually, this fact helps to debug the Silverlight code by attaching the debugger to the browser process. I have not found any other way to debug Silverlight if it&#8217;s not part of a Visual Studio web application (as in my case).</p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/finalsolution.png"><img src="/oldsite/wp-content/uploads/finalsolution-203x300.png" alt="Final solution" title="Final solution" width="203" height="300" class="aligncenter size-medium wp-image-1926" /></a></p>
<p>In my final &#8216;show it to the customer without deployment&#8217; solution, I removed the database from the client setup and kept the MySQL on a publicly available location. The only things you need to watch in this case is the fact that by default EF will store the database connection credentials in the web.config. You need to create a EF compiled connection with the EntityConnectionStringBuilder and override the CreateDataSource method of the ADS service:</p>
<div class="wp_codebox">
<table>
<tr id="p19176">
<td class="line_numbers">
<pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre>
</td>
<td class="code" id="p1917code6">
<pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">protected</span> <span style="color: #0600FF; font-weight: bold;">override</span> CrystalMySQLContext CreateDataSource<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    EntityConnectionStringBuilder entityBuilder <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> EntityConnectionStringBuilder<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    entityBuilder<span style="color: #008000;">.</span><span style="color: #0000FF;">Metadata</span> <span style="color: #008000;">=</span> <span style="color: #666666;">@&quot;res://*/MySql.CrystalMySQLModel.csdl|res://*/MySql.CrystalMySQLModel.ssdl|res://*/MySql.CrystalMySQLModel.msl&quot;</span><span style="color: #008000;">;</span>
    entityBuilder<span style="color: #008000;">.</span><span style="color: #0000FF;">Provider</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;MySql.Data.MySqlClient&quot;</span><span style="color: #008000;">;</span>
    entityBuilder<span style="color: #008000;">.</span><span style="color: #0000FF;">ProviderConnectionString</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;server=xxx;user id=xxx;password='xxx';persist security info=True;database=illumineo&quot;</span><span style="color: #008000;">;</span>
&nbsp;
    EntityConnection con <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> EntityConnection<span style="color: #008000;">&#40;</span>entityBuilder<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    CrystalMySQLContext ctx <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> CrystalMySQLContext<span style="color: #008000;">&#40;</span>con<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">return</span> ctx<span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre>
</td>
</tr>
</table>
</div>
<h2>MySQL</h2>
<p>During the testing and deployment phase of this project I encountered various difficulties which were all related to the fact that all the assemblies you assume are not necessarily on a blank machine. <strong>Adding these assemblies to the bin directory doesn&#8217;t solve these issues</strong>, the great trick here is a configuration you need to add in order to tell the CLR these assemblies are available. During the installation of a database driver the machine.config is altered but this is not the case if you deploy a self-hosted service and the binaries are not in the GAC:</p>
<div class="wp_codebox">
<table>
<tr id="p19177">
<td class="line_numbers">
<pre>1
2
3
4
5
6
7
8
9
</pre>
</td>
<td class="code" id="p1917code7">
<pre class="xml" style="font-family:monospace;"><span style="color: #009900;">&lt; ?xml <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;utf-8&quot;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dbproviderfactories<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;clear</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;add</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;SqlClient Data Provider&quot;</span> <span style="color: #000066;">invariant</span>=<span style="color: #ff0000;">&quot;System.Data.SqlClient&quot;</span> <span style="color: #000066;">description</span>=<span style="color: #ff0000;">&quot;.Net Framework Data Provider for SqlServer&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;add</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;MySQL Data Provider&quot;</span> <span style="color: #000066;">invariant</span>=<span style="color: #ff0000;">&quot;MySql.Data.MySqlClient&quot;</span> <span style="color: #000066;">description</span>=<span style="color: #ff0000;">&quot;.Net Framework Data Provider for MySQL&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.0.2.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dbproviderfactories<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre>
</td>
</tr>
</table>
</div>
<h2>Silverlight only likes it async</h2>
<p>Concerning the asynchronous behavior of Silverlight I can only say: you need a different mindset to live with it. In my Silverlight application I invested quite some time to create an MVC pattern on the basis of asynchronous data access. Because Silverlight handles templating/styling differently and doesn&#8217;t have a databinding mechanism which support element names all of this was tricky at times but in the end I think I was able to cook a very clean and felxible Silverlight framework which in fact has not much affinity with diagramming and could be used as a generic framework (just like our O2 framework for WPF).</p>
<h2>Commercial rands</h2>
<p>I mentioned in the introduction that one of the aims of this project was to have a common core between WPF and Silverlight. Bad news here: you cannot share assemblies between Silverlight and WPF, you cannot share template, you cannot share databinding patterns, you cannot&#8230;well, lots of things. You can find on the net different ways to handle these difficulties (pragma&#8217;s in your code for instance) but I haven&#8217;t found any of these satisfactory. So, the end result in this context is a big deception, until Microsoft brings on stage a clear strategy targetting this scenario you have to live with duplicated code. For our diagramming aims this means we have a completely different Silverlight library which covers a lot of the features available in G2 but is nowhere near identical in code as G2. On the surface (read: our commercial offering) we now have</p>
<ul>
<li> an enterprise level diagramming framework (product: G2) for WPF and a MEF-based framework for WPF applications (product: O2). </li>
<li>a very complete diagramming framework (product: L2) for Silverlight and a MVC-based framework for Silverlight applications</li>
</ul>
<p>which in look-and-feel will give you pretty much the same experience. A BPM modeller or a workflow application in Silverlight with the same functionality in WPF&#8230;it&#8217;s all possible but not on the basis of a common core. In commercial terms this means that a customer wishing to have a dual Silverlight/WPF product needs to pay twice for customizations but can share a common data access layer hidden behind a WCF facade. Speaking about <strong>commercial moves</strong> I should also mention that The Orbifold has acquired recently two new products which were previously in the open source realm: <strong>Denis&#8217; property grid for Silverlight and WPF, as well a Petro&#8217;s S# scripting framework (aka Script.Net)</strong>. More about this in the near future.</p>
<p>There is so much more to say about our other projects and our latest WPF magic but I&#8217;ll stop here and leave if for another blog post.</p>
]]></content:encoded>
			<wfw:commentRss>http://visualizationtools.net/default/wcfdiagrammingandmysql/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Parallel coordinates in WPF</title>
		<link>http://visualizationtools.net/default/parallel-coordinates-in-wpf/</link>
		<comments>http://visualizationtools.net/default/parallel-coordinates-in-wpf/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 05:35:37 +0000</pubDate>
		<dc:creator>Francois Vanderseypen</dc:creator>
				<category><![CDATA[Diagramming]]></category>
		<category><![CDATA[Diverse]]></category>
		<category><![CDATA[data-visualization]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.orbifold.net/default/?p=1886</guid>
		<description><![CDATA[About some customer challenge, multi-dimension data visualization and a custom WPF control which allows you to visualize ANY type of CSV/spreadsheet data.]]></description>
			<content:encoded><![CDATA[<p><strong>March 20th update</strong>: you can <a href="http://www.orbifold.net/downloads/paragraph/paragraph.demo.zip">download </a>a demo of this control now and Denis has also <a href="http://denisvuyka.wordpress.com/2009/03/20/first-wpf-parallel-coordinates-control/" target="_blank">posted an article</a> on this development.</p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/accumulation.png"><img class="alignleft size-medium wp-image-1887" title="accumulation" src="http://www.orbifold.net/default/wp-content/uploads/accumulation-300x238.png" alt="accumulation" width="300" height="238" /></a>How to picture a 5-dimensional sphere or a see the correlation ofÂ  112-dimensional weather data? The answer was found in 1885 when <a title="Wikipedia reference" href="http://en.wikipedia.org/wiki/Parallel_coordinates" target="_blank">parallel coordinates </a>were invented and later refined in 1959 throughÂ  <a title="The man and his story." href="http://www.math.tau.ac.il/~aiisreal/" target="_blank">Inselberg</a>. The idea is actually very simple, given some N-dimensional space of data you draw N parallel lines and each line has its own scale. Plot a given data point on these lines by creating a line between the N point of this multi-didmensional point. In this way you get a line per data point and the series of given data points are mapped to a series of lines on the graph. The situation being much like projective geometry where we also find a back-and-forth thinking between lines and points in space. The good thing about such a representation is that if points have some accumulation in a particular dimension you will see it because lines will accumulate on the axis representing this dimension (see adjacent image). This kind of correlation can usually only be detected through statistical analysis, but what do you do if you want to record or supervise data which continuously comes in from real-time systems? This would mean a continuous mathematical analysis of the sampled data and this would entail some very custom algorithm bound to the particular context.</p>
<p>A customer of ours recently challenged us to implement the parallel coordinates visualization in WPF. While quite straightforward at first sight it proved to be more difficult than we initially thought for two reasons:</p>
<ul>
<li><strong>non-numeric data</strong>: what to do if you have some string data in one of the dimensions? Say, you want to visualize in one of the dimensions a timestamp or telephone numbers or names of patients.</li>
<li><strong>how to emphasize the accumulation points</strong> in the graph? While in the screenshots above you can actually see well the discrete tendence in the second dimension, the screenshot on the right bestows you with a challenge to detect it.</li>
</ul>
<p>The first problem was tackled through an internal mapping of the data which spreads the non-numeric data across an axis. The drawback of this is that at various levels one has to switch between the actual</p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/nocorrelation.png"><img class="alignright size-medium wp-image-1890" title="Where is it?" src="http://www.orbifold.net/default/wp-content/uploads/nocorrelation-300x236.png" alt="Where is it?" width="300" height="236" /></a></p>
<p>data and the internal representation for labels, line hit during hovering, the histogram (see below) and any calculation in general. The second was more difficult and entailed some analysis of the data and various visual alternatives to attract the attention of the user (human interpreter of the data). The end-result is an <strong>histogram </strong>which like a rotated bar chart on the axis graphs the relative amount of crossings on the axis. The histogram actually shows also the opposite of an accumulation, since (see the second axis in the screenshot below) an equal spreading of the histogram&#8217;s rectangles means an equal distribution of the lines across the dimension axis.</p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/histogram.png"><img class="alignleft size-medium wp-image-1894" title="Histogram" src="http://www.orbifold.net/default/wp-content/uploads/histogram-300x239.png" alt="Histogram" width="300" height="239" /></a>Other minor features we added to this data visualization are; the possibility to hover over the graph and see the actual data of the multi-dimensional points, datagrid binding and editing, customization of look &amp; feel through dependency properties, swapping data axes, scaling data vertically on a particular axis.</p>
<p>Probably the most satisfactory moment for myself during the development was at the point when it became clear that just <strong>any CSV/spreadsheet data can be bound to the parallel graph visualization</strong>. Indeed, due to the internal mapping mechanism one can present any type of tabular data and as a proof of concept I mocked some random spreadsheet in Excel which was subsequently visualized without a hitch.</p>
<p>Stocks &amp; shares anyone? Let me know.</p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/datagrid.png"><img class="aligncenter size-medium wp-image-1895" title="More visual beauty" src="http://www.orbifold.net/default/wp-content/uploads/datagrid-300x150.png" alt="More visual beauty" width="300" height="150" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://visualizationtools.net/default/parallel-coordinates-in-wpf/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>G2 and WPF mindmapping: the whole nine yards.</title>
		<link>http://visualizationtools.net/default/g2-and-wpf-mindmapping-the-whole-nine-yards/</link>
		<comments>http://visualizationtools.net/default/g2-and-wpf-mindmapping-the-whole-nine-yards/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 12:12:02 +0000</pubDate>
		<dc:creator>Francois Vanderseypen</dc:creator>
				<category><![CDATA[Diagramming]]></category>
		<category><![CDATA[G2]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[Mindmapping]]></category>

		<guid isPermaLink="false">http://www.orbifold.net/default/?p=1773</guid>
		<description><![CDATA[I have completed a fully functional mindmapping application on top of G2 and have used it in the past months internally for various things. This application is, however, not a 'product' or anything you can buy, it's only a proof of concept.It's a test application, a benchmark, a toy model, a fun thing to play with and see how G2 handles various things. Much like the class designer and the database table designer I talked about earlier, it's a way to show off the potential of G2 to you, even though I think this mindmapping application could be a stepping stone to something bigger.]]></description>
			<content:encoded><![CDATA[<p><a title="Click to download the demo" href="http://www.orbifold.net/Downloads/G2/G2Demo.zip" target="_blank"><img title="Click to download the February G2 demo." src="http://www.orbifold.net/default/wp-content/uploads/g2splash.png" alt="Clcik the picture to download the demo" width="500" height="242" /></a></p>
<p>We (<a title="Denis' blog" href="http://dvuyka.spaces.live.com/default.aspx" target="_blank">Denis Vuyka 1</a>, <a title="His new site" href="http://denisvuyka.wordpress.com/" target="_blank">Denis Vuyka 2</a> and myself) have completed a fully functional mindmapping application on top of G2 and have used it in the past months internally for various things. This application is, however, not a &#8216;product&#8217; or anything you can buy, it&#8217;s only a proof of concept.It&#8217;s a test application, a benchmark, a toy model, a fun thing to play with and see how G2 handles various things. Much like <a title="The class designer" href="http://www.orbifold.net/default/?p=1735" target="_blank">the class designer</a> and<a title="The database designer" href="http://www.orbifold.net/default/?p=1764" target="_blank"> the database table designer</a> I talked about earlier, it&#8217;s a way to show off the potential of G2 to you, even though I think this mindmapping application could be a stepping stone to something bigger.</p>
<p>This said, the development was a lot of work; the devil is in the details as everyone knows. G2 is a framework on top of which you can create an application, attach meaning to nodes and links, handle events and trigger some mechanism in the G2 core and so on, all this is conceptually quite easy. Making things smooth on the UI level, making custom controls to manipulate the data coming or going to G2 is on the other hand a tedious process of UI-design, usability testing/trying, debugging, handling special cases (large images, bad alignment of text, broken serialization due to unicode characters&#8230;) and more. This journey has been rewarding, once you have the idiosyncrasies of WPF in your fingers and can navigate blindly through G2, the whole process feels very productive.Â  For example, creating a thought-node which binds to some RSS and injects blog-titles into the map is fun and easy, the same for custom nodes binding to stocks &amp; shares data (see the screenshots). Creating thought-nodes with clickable icons or showing some custom data is a no-brain activity. In fact, because the stuff shown on a node is presented through WPF&#8217;s databinding you can add pretty much anything you like to the node&#8217;s visual.</p>
<div id="attachment_1781" class="wp-caption alignnone" style="width: 310px"><a href="http://www.orbifold.net/default/wp-content/uploads/stocksshares.png"><img class="size-medium wp-image-1781" title="stocks and shares" src="http://www.orbifold.net/default/wp-content/uploads/stocksshares-300x187.png" alt="Money mindmap" width="300" height="187" /></a>
<p class="wp-caption-text">Stocks &amp; shares</p>
</div>
<div id="attachment_1794" class="wp-caption alignnone" style="width: 310px"><a href="http://www.orbifold.net/default/wp-content/uploads/renderings.png"><img class="size-medium wp-image-1794" title="renderings" src="http://www.orbifold.net/default/wp-content/uploads/renderings-300x187.png" alt="Mindmap on 'rendering'" width="300" height="187" /></a>
<p class="wp-caption-text">Mindmap on &#39;rendering&#39;</p>
</div>
<div id="attachment_1795" class="wp-caption alignnone" style="width: 310px"><a href="http://www.orbifold.net/default/wp-content/uploads/theorbifold.png"><img class="size-medium wp-image-1795" title="theorbifold" src="http://www.orbifold.net/default/wp-content/uploads/theorbifold-300x187.png" alt="About The Orbifold" width="300" height="187" /></a>
<p class="wp-caption-text">About The Orbifold</p>
</div>
<div id="attachment_1775" class="wp-caption alignnone" style="width: 310px"><a href="http://www.orbifold.net/default/wp-content/uploads/standardmm.png"><img class="size-medium wp-image-1775" title="Standard MM design" src="http://www.orbifold.net/default/wp-content/uploads/standardmm-300x133.png" alt="The classic mindmapping layout." width="300" height="133" /></a>
<p class="wp-caption-text">The classic mindmapping layout.</p>
</div>
<p>I&#8217;ll review a bit the features of the application which obviously reflect the features and capacity of G2 as a basis for diagramming in general.</p>
<p><span id="more-1773"></span></p>
<h2>Standard features</h2>
<div id="attachment_1786" class="wp-caption alignnone" style="width: 310px"><a href="http://www.orbifold.net/default/wp-content/uploads/menustructure.png"><img class="size-medium wp-image-1786" title="menu structure" src="http://www.orbifold.net/default/wp-content/uploads/menustructure-300x58.png" alt="Menu items" width="300" height="58" /></a>
<p class="wp-caption-text">Menu items</p>
</div>
<ul>
<li>Saving to the internal binary format (*.g2d) and to XML (*.xml). You can alter the generated XML and open it up again. At some point I&#8217;ll publish the XML data format but you can experiment and find out yourself as well.</li>
<li>Opening diagram from binary and XML formats. Both formats support multiple pages inside a single document.</li>
<li>Creating a new document (<strong>CTRL+N</strong>) will request by default if you wish to save the current document first.</li>
<li><strong>CTRL+S</strong> and <strong>CTRL+O </strong>are bound and subsequent savings will first try the current file path. If you wish to save it elsewhere you can use SaveAs (no input binding here), but all this is pretty standard.</li>
</ul>
<p>Note that a document (a mindmapping document in this demo) consists of some <strong>metadata </strong>and one or more <strong>pages</strong>. A page is much like a sheet in Microsoft Office Excel or Visio. Internally a page is furthermore subdivided into layers but in this demo you will not be able to have mutliple layers. In fact, it&#8217;s rather difficult to conceptually give meaning to layers in a mindmapping diagram.</p>
<div id="attachment_1788" class="wp-caption alignnone" style="width: 310px"><a href="http://www.orbifold.net/default/wp-content/uploads/multipgae.png"><img class="size-medium wp-image-1788" title="multiple pages" src="http://www.orbifold.net/default/wp-content/uploads/multipgae-300x56.png" alt="Multi-page tab" width="300" height="56" /></a>
<p class="wp-caption-text">Multi-page tab</p>
</div>
<p>Page can be added through the toolbar item entitled &#8216;Add page&#8217; and removed or renamed through the tabpage context menu. A document has at least one page, which means you cannot delete the page if it&#8217;s the only one in the document. See also the know issue related to the tabs below.</p>
<p><strong>Cut, copy, paste and delete (CCPD) </strong>need little explanations, I guess. Mind though that when navigating the diagram with the keyboard the focus is on the text inside the shapes. This means that at that moment CCPD has its effect on the text and not on the shapes. In order to CCPD shapes the focus needs to be on the diagram level. Just use the traditional rubber-band (marching ants, selector) to select shapes (use CTRL or SHIFT to add to an existing selection) and CCPD then. In this context I need to note that if you select multiple shapes which have a parent relationship (like in the screeenshot below) the upper parent will be used and hence all children underneath will be used in the CCPD process. This system ensures that no shape becomes an orphan in the CCPD process.</p>
<div id="attachment_1789" class="wp-caption alignnone" style="width: 310px"><a href="http://www.orbifold.net/default/wp-content/uploads/ccpd.png"><img class="size-medium wp-image-1789" title="CCPD" src="http://www.orbifold.net/default/wp-content/uploads/ccpd-300x181.png" alt="Illustrating the obvious" width="300" height="181" /></a>
<p class="wp-caption-text">Illustrating the obvious</p>
</div>
<p>The <strong>O2 docking environment</strong> is an in-house development based on MEF, AvalonDock and Denis&#8217; wonderful propertygrid (though in this demo it&#8217;s been hidden). The <strong>View menu </strong>allows you to bring up the various panels of the demo. Most notably, the<strong> Output window</strong> will display internal messages or (worse) exceptions and<strong> the internal browser</strong> is just a WPF Frame (hence, wrapped IE ). The docking layout can be saved via the <strong>Tools menu</strong> and re-opened later on.</p>
<p>Nothing spectacular but anyway, you can select a custom background for a diagram which in some cases can really make a diagram more attractive. With WPF there are so many possibilities&#8230;</p>
<div id="attachment_1798" class="wp-caption alignnone" style="width: 310px"><a href="http://www.orbifold.net/default/wp-content/uploads/backgrounds.png"><img class="size-medium wp-image-1798" title="backgrounds" src="http://www.orbifold.net/default/wp-content/uploads/backgrounds-300x219.png" alt="Custom diagram backgrounds" width="300" height="219" /></a>
<p class="wp-caption-text">Custom diagram backgrounds</p>
</div>
<p>Editing the diagram metadata (author, date and title), <strong>zooming </strong>and assigning an <strong>icon </strong>can all be done through the<strong> Diagram elements</strong> panel. There is also a <strong>thumbnail view</strong> which in a later phase will allow you to navigate the diagram, but I haven&#8217;t put much focus on this lately. Zooming can also be achieve via the mousewheel and pressing the CTRL key (quite standard nowadays). To reset the zoom factor just press/click the mousewheel (yes, you can press the wheel). An addition which I have overlooked as I&#8217;m writing this is the SHIFT with the mousewheel which in most applications allows you to scroll horizontally.</p>
<div id="attachment_1791" class="wp-caption alignnone" style="width: 160px"><a href="http://www.orbifold.net/default/wp-content/uploads/elements.png"><img class="size-thumbnail wp-image-1791" title="elements" src="http://www.orbifold.net/default/wp-content/uploads/elements-150x150.png" alt="Diagram elements panel" width="150" height="150" /></a>
<p class="wp-caption-text">Diagram elements panel</p>
</div>
<h2>Mindmapping specific features</h2>
<p>Besides the features which are available to every G2 diagram type (or part of the O2 environment), there are also a few things specific to mindmapping which we&#8217;ll highlight below.</p>
<div id="attachment_1800" class="wp-caption alignnone" style="width: 160px"><a href="http://www.orbifold.net/default/wp-content/uploads/customstyles.png"><img class="size-thumbnail wp-image-1800" title="customstyles" src="http://www.orbifold.net/default/wp-content/uploads/customstyles-150x150.png" alt="Mindmapping toolbar" width="150" height="150" /></a>
<p class="wp-caption-text">Mindmapping toolbar</p>
</div>
<p>One of the very productive features of WPF is the possibility <strong>to style or template a control</strong>. When you select a thought-shape you can alter its appearance through the dropdown in the toolbar (see screenshot). For this demo I created <strong>some custom styles</strong> which suit different data bucket but, as I described above, the possibilities are limitless and easily implemented. Take this together with the databinding and you have a mindmapping framework for every possible (business) context.</p>
<div id="attachment_1801" class="wp-caption alignnone" style="width: 310px"><a href="http://www.orbifold.net/default/wp-content/uploads/customstyle2s.png"><img class="size-medium wp-image-1801" title="customstyle2s" src="http://www.orbifold.net/default/wp-content/uploads/customstyle2s-300x207.png" alt="An overview of some styles defined in the demo" width="300" height="207" /></a>
<p class="wp-caption-text">An overview of some styles defined in the demo</p>
</div>
<ul>
<li><strong>CTRL+R</strong> rotates the diagram</li>
<li><strong>CTRL+ENTER</strong> adds a child node. Some dummy text is auto-generated which eases the testing process and easily creates maps in no time. As this is some kind of &#8216;random book-title generator&#8217; you can have sometimes rather strange or funny titles <img src='http://visualizationtools.net/default/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li><strong>CTRL+T</strong> switches between editing the text or thought title inline and editing the body text</li>
<li><strong>CTRL+M</strong> expands/collapses the children of the selected node</li>
<li><strong>CTRL+ARROW</strong> allows you to navigate the map through the keyboard. This togheter with CTRL+ENTER makes it easy to create dummy maps in no time.</li>
</ul>
<p><strong>Drag-drop.</strong> If a node is selected and you dragdrop an URL it will be attached to the selected node. If you dragdrop an image from the file explorer this will create a new child node to the <span style="text-decoration: underline;">selected node</span>. Nothing will be created if no node is selected!</p>
<p><strong>The thought editor.</strong> The data displayed in a shape is, as said earlier, just a data bucket bound to the visual in the diagram. For example, below is the definition of the &#8216;Shares&#8217; shape template wherein you can see the different data bindings. So, in effect there is just a collection of data islands which you can bind both to the shape in the diagram but also to some editor. Altering the data in one will change the data everywhere else, which demonstrates brilliantly the power of WPF&#8217;s databinding. The though editor is a dockable panel which allows to change the data island and it&#8217;s rather self-descriptive. You can add some URL&#8217;s or some files to a thought through the listviews, change the body text, add an icon or change the title inline. Obviously the whole editor would be even more useful if RTF-ed or HTML-ed but I did not want to waste too much time on this. Ultimately, it&#8217;s just plugging in some open source or commercial editor since the data bucket only cares about the string result.</p>
<div id="attachment_1802" class="wp-caption alignnone" style="width: 310px"><a href="http://www.orbifold.net/default/wp-content/uploads/sharestemplate.png"><img class="size-medium wp-image-1802" title="sharestemplate" src="http://www.orbifold.net/default/wp-content/uploads/sharestemplate-300x219.png" alt="The 'Shares' template" width="300" height="219" /></a>
<p class="wp-caption-text">The &#39;Shares&#39; template</p>
</div>
<p>One word of warning for those thinking that adding shapes and styles is only a matter of adding properties and changing the XAML. The underestimated part behind CCPD and saving documents is the whole (de)serialization process; making sure databinding works after deserialization, picking up the styles from the assembly&#8217;s resources, disassembling the layout organization, figuring out how to maintain the mindmap hierarchy and so on. To the rescue, the data exchange pipeline (aka. G2D) inside G2 maximizes flexibility through some smart usage of Unity (as<a title="About Unity and extensibility in G2" href="http://www.orbifold.net/default/?p=1130" target="_blank"> explained elsewhere on this blog</a>) which allows us to really change the import/export of XML in a snap, embrace data changes with ease and be prolific without having to step through the (de)serialization on a low level (anymore).</p>
<h2>Things left out</h2>
<ul>
<li>Other types of diagrams are not possible in this demo (though the XML manipulation will not stop you from getting there).</li>
<li>Saving data to a WCF endpoint or database backend.</li>
<li>Dragging thought-shapes and altering the map via the mouse.</li>
<li>The possibility to mix free shapes and thought-shapes.</li>
<li>Layers (see also my remark above).</li>
<li>Saving/opening sub-document elements.</li>
<li>Active shapes (RSS shape, Google search shape and other &#8216;intelligent&#8217; shapes).</li>
</ul>
<p>All these things are possible with G2 but I think the current demo is sufficient (for now) as other diagram types need attention as well&#8230;</p>
<h2>What&#8217;s the point?</h2>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/magritte.jpg"><img style="float:left;margin:10px;" title="Ceci n est pas une pipe" src="http://www.orbifold.net/default/wp-content/uploads/magritte-300x221.jpg" alt="Ceci n est pas une pipe" width="300" height="221" /></a>To paraphrase <a title="ceci n'est pas une pipe" href="http://www.magritte.com/" target="_blank">my compatriot</a>; <em>ceci n&#8217;est pas un logiciel</em>. <strong>It&#8217;s a demo</strong> (I&#8217;d almost say a fancy UI facade on top of) showing what can be done with G2. The diagrams I talked about in other blog postings will be integrated in the near future to complete the demo so that in the end a more &#8216;covering&#8217; picture appears of what G2 is. There as been an enormous interest in G2 and Graphite in the past months but unfortunately we have not been able to deliver a downloadable demo on time. I hope this first release already satisfies a bit the hungry (customer) minds out there.</p>
<p>You can do as you wish with this demo, there are no constraints. Of course, any feedback is welcome. If you really have the burning wish to turn this demo in something you think is worth selling you can <a title="Drop me a mail" href="http://www.orbifold.net/default/?page_id=1257" target="_self">drop me a mail</a>, custom solution requests and business opportunities are <a title="Business opportunities" href="http://www.orbifold.net/default/?page_id=1257">welcome as well</a>.</p>
<p>The next download of the G2 demo wil contain the other diagramming types, but no schedule on the table for now. We are developing custom diagramming controls for customers, elaborate data visualizations in our lab, handle heaps of mails and questions, have a fulltime job next to all this and take care of our family. Acrobatic challenges at times. Most probably you&#8217;ll see signs on this site of our other projects before the next G2 drop.</p>
<p><a title="Download the G2 demo" href="http://www.orbifold.net/Downloads/G2/G2Demo.zip" target="_blank">Download the February G2 mindmapping demo.</a></p>
<h2>Known issues</h2>
<p><strong>.Net v3.5 SP1 is required to run this demo.</strong> You can <a title=".Net 3.5 sp1" href="http://msdn.microsoft.com/en-us/vstudio/cc533448.aspx" target="_blank">download all this from MSDN</a>.</p>
<p><strong>The virtual double.</strong> This occurs when you load a document and the page tab control shows a double of some page. When you click on either when the other virtual double will disappear. This is a bug in the databinding for which I was unable to find an answer or trace the cause.</p>
<div id="attachment_1787" class="wp-caption alignnone" style="width: 310px"><a href="http://www.orbifold.net/default/wp-content/uploads/virtualdouble.png"><img class="size-medium wp-image-1787" title="virtual double" src="http://www.orbifold.net/default/wp-content/uploads/virtualdouble-300x129.png" alt="Doubling of pages on load" width="300" height="129" /></a>
<p class="wp-caption-text">Doubling of pages on load</p>
</div>
<p><strong>Sub-document file types. </strong>The open/save dialogs present you alternative file extensions (*.g2s, *.g2b, *.g2p). These types are not supported in this demo, though the serialization is inside G2. These extensions allow one to save only a page, a subset of shapes or just one single shape to a file. These types are useful to load <strong>templates </strong>and re-use single shapes in other documents.</p>
<div id="attachment_1796" class="wp-caption alignnone" style="width: 310px"><a href="http://www.orbifold.net/default/wp-content/uploads/supportedfiletypes.png"><img class="size-medium wp-image-1796" title="supportedfiletypes" src="http://www.orbifold.net/default/wp-content/uploads/supportedfiletypes-300x256.png" alt="Other file types" width="300" height="256" /></a>
<p class="wp-caption-text">Other file types</p>
</div>
<p><strong>Undo/redo. </strong>The undo/redo mechanism is not everywhere properly bound to the actions. This is not a bug in G2 but rather a badly bound UI to the underlying core.<strong> </strong>Sorry.<strong><br />
</strong></p>
<p><em>Semantic note: <a title="Etymology of this" href="http://en.wikipedia.org/wiki/The_whole_nine_yards" target="_blank">the whole nine yards</a>: means &#8220;completely, the whole, everything.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://visualizationtools.net/default/g2-and-wpf-mindmapping-the-whole-nine-yards/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Creating database diagrams with G2</title>
		<link>http://visualizationtools.net/default/creating-database-diagrams-with-g2/</link>
		<comments>http://visualizationtools.net/default/creating-database-diagrams-with-g2/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 20:51:41 +0000</pubDate>
		<dc:creator>Francois Vanderseypen</dc:creator>
				<category><![CDATA[Diagramming]]></category>
		<category><![CDATA[G2]]></category>

		<guid isPermaLink="false">http://www.orbifold.net/default/?p=1764</guid>
		<description><![CDATA[How G2 is also able to create, visualize and edit database related information.]]></description>
			<content:encoded><![CDATA[<p>No surprise here I guess, this is a variation on <a title="Creating class diagrams with G2." href="/default/?p=1735">my ealier posting</a> but now on the basis of database information rather than assembly (reflected) data.</p>
<p><a href="http://www.orbifold.net/default/wp-content/uploads/g2dbdiagram.png" target="_blank"><img class="alignleft size-medium wp-image-1765" title="DB diagrams with G2" src="http://www.orbifold.net/default/wp-content/uploads/g2dbdiagram-300x178.png" alt="DB diagrams with G2" width="300" height="178" /></a></p>
<p>Althoug it might look like a piece of cake to display this kind of information and it seems like a simple shift from the class shape discussed earlier, it was quite a challenge to dot it. Not so much the diagramming part but the data grid inside the shape was somewhat difficult. While there is <a title="WPF's datagrid." href="http://www.codeplex.com/wpf" target="_blank">a datagrid for WPF</a> it would be a heavy load on the diagramming surface to include it in the shape containers. So, the only option was to create a home-made lightweight datagrid. In addition, it had to have an inline editing capability in the form of comboboxes, textboxes, checkboxes and more. Finally, I also wanted the whole shape to have different view states; totally collapsed, names only and the full datagrid view.</p>
<p>In the picture you can see a sample diagram with the various features;</p>
<ul>
<li>the User &amp; Countries tables are &#8216;full&#8217;, the Credential table is in a collapsed state and the Address table shows only the names of the fields. The upper-right icon allows you to cycle through the different views. This is not mendatory, however, as the icon simply launches a routed command which can be captured anywhere and you can call the ShowCollapsed(), ShowNamesOnly and ShowFull() methods on the original source to changes the view as you like.</li>
<li>the lines in bold in the grid show either the active record or the primary key(s)</li>
<li>double clicking allows one to edit the fields</li>
<li>the labels can contain in general the info you like and it&#8217;s a generic feature of G2 rather than part of the database related shape info.</li>
</ul>
<p>Although I did not fully develop things, one can go the full nine yards and turn this sample into either a database visualizer or a database editor (or both) much like in SQL Server&#8217;s management studio. Using the integrated analysis service of G2 one could also traverse the diagram and create scripts or XML on top of it. Well, you got the point I guess.</p>
]]></content:encoded>
			<wfw:commentRss>http://visualizationtools.net/default/creating-database-diagrams-with-g2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  www.visualizationtools.net/default/category/diagramming/feed/ ) in 1.10248 seconds, on Feb 4th, 2012 at 11:05 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 4th, 2012 at 12:05 pm UTC -->
