Recent Changes - Graph Exploration System (GUESS)http://guess.wikispot.org/Recent_ChangesRecent Changes on Graph Exploration System (GUESS).en-us Command Line Optionshttp://guess.wikispot.org/Command_Line_Options2008-11-16 14:46:37JohannesPfeiffer <div id="content" class="wikipage content"> Differences for Command Line Options<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 22: </td> <td> Line 22: </td> </tr> <tr> <td> </td> <td> <span>+ * --quality n or -q n with n between 0 and 3. 3 is the best and 0 is the worst quality</span> </td> </tr> </table> </div> Command Line Optionshttp://guess.wikispot.org/Command_Line_Options2008-11-14 18:01:56JohannesPfeiffer <div id="content" class="wikipage content"> Differences for Command Line Options<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 21: </td> <td> Line 21: </td> </tr> <tr> <td> </td> <td> <span>+ * --reset or -r to delete the user settings (window positions, saved text fields etc.) and start with the default values</span> </td> </tr> </table> </div> The GUESS .gdf formathttp://guess.wikispot.org/The_GUESS_.gdf_format2007-08-24 00:32:44EytanAdar <div id="content" class="wikipage content"> Differences for The GUESS .gdf format<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 6: </td> <td> Line 6: </td> </tr> <tr> <td> <span>-</span> The nodedef line will tell GUESS what the format is of the following lines that actually describe nodes. In the simple case we are just going to have one column on each line, the node name. Nodes are required to have unique names (identifiers). You will want to avoid using anything that is not a valid Python variable name here if you want to access the nodes by this name. When GUESS starts up, it will automatically create variables for you for each node. So if you have a node called foobarbaz, you’ll be able to talk about foobarbaz.color. </td> <td> <span>+</span> The nodedef line will tell GUESS what the format is of the following lines that actually describe nodes. In the simple case we are just going to have one column on each line, the node name. Nodes are required to have unique names (identifiers). You will want to avoid using anything that is not a valid Python variable name here if you want to access the nodes by this name<span>&nbsp;(so setting names to just a number is probably a bad idea... try v44 or n44 instead of just "44")</span>. When GUESS starts up, it will automatically create variables for you for each node. So if you have a node called foobarbaz, you’ll be able to talk about foobarbaz.color. </td> </tr> </table> </div> How GUESS is Being Usedhttp://guess.wikispot.org/How_GUESS_is_Being_Used2007-08-14 22:16:48EytanAdar <div id="content" class="wikipage content"> Differences for How GUESS is Being Used<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 7: </td> <td> Line 7: </td> </tr> <tr> <td> </td> <td> <span>+ * [http://www.flickr.com/photos/chef_ele/sets/72157600111346295/ Netflix visualization] ([http://www.visualcomplexity.com/vc/project_details.cfm?id=496&amp;index=496&amp;domain= visual complexity description])</span> </td> </tr> </table> </div> Compiling GUESS Yourselfhttp://guess.wikispot.org/Compiling_GUESS_Yourself2007-08-14 22:15:35EytanAdar <div id="content" class="wikipage content"> Differences for Compiling GUESS Yourself<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 19: </td> <td> Line 19: </td> </tr> <tr> <td> <span>- Notes: the build file will try to execute pyexport.bat which is a batch file wrapper around a perl script. It generates some of the python scripts from the source code, but they are also checked in. In other words, you're probably ok if you don't have it run. If you're on linux or some other OS, and really want to run this you can probably yank out the perl script (everything after line 15 or so) and put it in a regular perl file.</span> </td> <td> <span>+ Notes:</span> </td> </tr> <tr> <td> Line 21: </td> <td> Line 21: </td> </tr> <tr> <td> <span>- (I believe you need to have an existing guess.jar in guess/lib; otherwise the demo targets won't compile. Can anyone confirm? -ben-)</span> </td> <td> <span>+ 1) The build file will try to execute pyexport.bat which is a batch file wrapper around a perl script. It generates some of the python scripts from the source code, but they are also checked in. In other words, you're probably ok if you don't have it run. If you're on linux or some other OS, and really want to run this you can probably yank out the perl script (everything after line 15 or so) and put it in a regular perl file.<br> + <br> + 2) If you are trying to build the demo target which is an example of GUESS embeded inside of another application (i.e. "ant demo"), you will need to have guess.jar built already (or downloaded from a full install)</span> </td> </tr> </table> </div> Extra Codehttp://guess.wikispot.org/Extra_Code2007-08-14 00:21:50-ben- <div id="content" class="wikipage content"> Differences for Extra Code<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 2: </td> <td> Line 2: </td> </tr> <tr> <td> <span>- ["Compiling GUESS Yourself"]</span> </td> <td> <span>+ ==Compiling GUESS==<br> + ["Compiling GUESS Yourself"]<br> + <br> + ==Newman's fast clustering algorithm==<br> + [[File(newmanCluster.py)]]<br> + See Newman, MEJ (2004) Fast algorithm for detecting community structure in networks. Phys. Rev. E 69, 066133. doi:10.1103/PhysRevE.69.066133<br> + {{{Example usage:<br> + #get cluster support matrix (dendrogram) using default edge weight field name ("weight"),<br> + # for all numbers of clusters down to 2<br> + # this is relatively slow, but only needs to be done once<br> + supp=newmanCluster()<br> + #cut that dendrogram at the level that gives us 10 clusters<br> + # this is fast, so you can explore different numbers of clusters quickly<br> + cl=cutree(supp,10)<br> + for z in cl:<br> + z.color=randomColor() #colour the clusters<br> + }}}</span> </td> </tr> </table> </div> Extra Codehttp://guess.wikispot.org/Extra_Code2007-08-14 00:19:04-ben-Upload of file <a href="http://guess.wikispot.org/Extra_Code?action=Files&do=view&target=newmanCluster.py">newmanCluster.py</a>.FAQhttp://guess.wikispot.org/FAQ2007-08-13 23:56:56-ben- <div id="content" class="wikipage content"> Differences for FAQ<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ 1. How do I compile GUESS?<br> + See ["Compiling GUESS Yourself"]</span> </td> </tr> </table> </div> Compiling GUESS Yourselfhttp://guess.wikispot.org/Compiling_GUESS_Yourself2007-08-13 23:50:44-ben- <div id="content" class="wikipage content"> Differences for Compiling GUESS Yourself<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 12: </td> <td> Line 12: </td> </tr> <tr> <td> -<span>&nbsp;&nbsp;4</span>. Modify build.xml to point at where you installed javacc<br> <span>- 5</span>. make sure your path is set correctly (you can modify/use setvarbs.bat)<br> <span>- 6</span>. type "ant" (as usual "ant clean" wipes the build directory). </td> <td> <span>+ 4. Make sure you have the Java Media Framework installed: http://java.sun.com/products/java</span>-<span>media/jmf/<br> + 5</span>. Modify build.xml to point at where you installed javacc<span>&nbsp;and the Java Media Framework</span><br> <span>+ 6</span>. make sure your path is set correctly (you can modify/use setvarbs.bat)<br> <span>+ 7</span>. type "ant" (as usual "ant clean" wipes the build directory). </td> </tr> <tr> <td> Line 19: </td> <td> Line 20: </td> </tr> <tr> <td> </td> <td> <span>+ <br> + (I believe you need to have an existing guess.jar in guess/lib; otherwise the demo targets won't compile. Can anyone confirm? -ben-)</span> </td> </tr> </table> </div> Front Pagehttp://guess.wikispot.org/Front_Page2007-08-13 22:53:44EytanAdar <div id="content" class="wikipage content"> Differences for Front Page<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 11: </td> <td> Line 11: </td> </tr> <tr> <td> <span>-</span> == ["Extra Code"] == (Samples &amp; contributions from others) </td> <td> <span>+</span> == ["Extra Code"] ==<span><br> + *</span> (Samples &amp; contributions from others) </td> </tr> </table> </div> Front Pagehttp://guess.wikispot.org/Front_Page2007-08-13 22:53:30EytanAdar <div id="content" class="wikipage content"> Differences for Front Page<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 11: </td> <td> Line 11: </td> </tr> <tr> <td> <span>-</span> == ["Extra Code"] == </td> <td> <span>+</span> == ["Extra Code"] ==<span>&nbsp;(Samples &amp; contributions from others)</span> </td> </tr> </table> </div> Wiki Settings/CSShttp://guess.wikispot.org/Wiki_Settings/CSS2007-08-12 22:49:36EytanAdarUpload of file <a href="http://guess.wikispot.org/Wiki_Settings/CSS?action=Files&do=view&target=style.css">style.css</a>.Wiki Settings/CSShttp://guess.wikispot.org/Wiki_Settings/CSS2007-08-12 22:49:36EytanAdarFile <a href="http://guess.wikispot.org/Wiki_Settings/CSS?action=Files&do=view&target=style.css">style.css</a> deleted.Front Pagehttp://guess.wikispot.org/Front_Page2007-08-11 02:04:40EytanAdar <div id="content" class="wikipage content"> Differences for Front Page<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 11: </td> <td> Line 11: </td> </tr> <tr> <td> <span>- == ["FAQ"] ==</span> </td> <td> </td> </tr> <tr> <td> Line 14: </td> <td> Line 13: </td> </tr> <tr> <td> </td> <td> <span>+ == ["FAQ"] ==</span> </td> </tr> </table> </div> How GUESS is Being Usedhttp://guess.wikispot.org/How_GUESS_is_Being_Used2007-08-11 02:04:17EytanAdar <div id="content" class="wikipage content"> Differences for How GUESS is Being Used<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = How GUESS is Being Used =<br> + <br> + Some applications (feel free to add your own or tell [EytanAdar me] and I'll do it<br> + <br> + * [http://www-personal.umich.edu/~ladamic/GUESS/index.html Lada Adamic's GUESS demo site]<br> + * [http://www.cs.duke.edu/courses/spring07/cps001/labs/lab03.html DukeGUESS]</span> </td> </tr> </table> </div> Front Pagehttp://guess.wikispot.org/Front_Page2007-08-11 02:00:00EytanAdar <div id="content" class="wikipage content"> Differences for Front Page<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 13: </td> <td> Line 13: </td> </tr> <tr> <td> <span>-</span> == [How<span>&nbsp;Others Are Using</span> GUESS] == </td> <td> <span>+</span> == [<span>"</span>How GUESS<span>&nbsp;is Being Used"</span>] == </td> </tr> </table> </div> Front Pagehttp://guess.wikispot.org/Front_Page2007-08-11 01:59:36EytanAdar <div id="content" class="wikipage content"> Differences for Front Page<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 13: </td> <td> Line 13: </td> </tr> <tr> <td> </td> <td> <span>+ == [How Others Are Using GUESS] ==</span> </td> </tr> </table> </div> Users/EytanAdarhttp://guess.wikispot.org/Users/EytanAdar2007-08-11 01:52:55EytanAdar <div id="content" class="wikipage content"> Differences for Users/EytanAdar<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ [http://www.cond.org My Home Page]</span> </td> </tr> </table> </div> Wiki Settings/CSShttp://guess.wikispot.org/Wiki_Settings/CSS2007-08-11 01:50:51EytanAdarUpload of file <a href="http://guess.wikispot.org/Wiki_Settings/CSS?action=Files&do=view&target=style.css">style.css</a>.Wiki Settings/CSShttp://guess.wikispot.org/Wiki_Settings/CSS2007-08-11 01:50:51EytanAdarFile <a href="http://guess.wikispot.org/Wiki_Settings/CSS?action=Files&do=view&target=style.css">style.css</a> deleted.Wiki Settings/CSShttp://guess.wikispot.org/Wiki_Settings/CSS2007-08-11 01:49:56EytanAdarUpload of file <a href="http://guess.wikispot.org/Wiki_Settings/CSS?action=Files&do=view&target=style.css">style.css</a>.Wiki Settings/CSShttp://guess.wikispot.org/Wiki_Settings/CSS2007-08-11 01:49:56EytanAdarFile <a href="http://guess.wikispot.org/Wiki_Settings/CSS?action=Files&do=view&target=style.css">style.css</a> deleted.Front Pagehttp://guess.wikispot.org/Front_Page2007-08-11 01:44:00EytanAdar <div id="content" class="wikipage content"> Differences for Front Page<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 9: </td> <td> Line 9: </td> </tr> <tr> <td> <span>-</span> == [http://graphexploration.cond.org <span>"</span>What is GUESS<span>"</span>]?== </td> <td> <span>+</span> == [http://graphexploration.cond.org What is GUESS]?== </td> </tr> </table> </div> Wiki Settings/CSShttp://guess.wikispot.org/Wiki_Settings/CSS2007-08-11 01:42:54EytanAdarUpload of file <a href="http://guess.wikispot.org/Wiki_Settings/CSS?action=Files&do=view&target=style.css">style.css</a>.Wiki Settings/CSShttp://guess.wikispot.org/Wiki_Settings/CSS2007-08-11 01:42:54EytanAdarFile <a href="http://guess.wikispot.org/Wiki_Settings/CSS?action=Files&do=view&target=style.css">style.css</a> deleted.Wiki Settings/CSShttp://guess.wikispot.org/Wiki_Settings/CSS2007-08-11 01:41:01EytanAdarUpload of file <a href="http://guess.wikispot.org/Wiki_Settings/CSS?action=Files&do=view&target=style.css">style.css</a>.Wiki Settings/CSShttp://guess.wikispot.org/Wiki_Settings/CSS2007-08-11 01:41:01EytanAdarFile <a href="http://guess.wikispot.org/Wiki_Settings/CSS?action=Files&do=view&target=style.css">style.css</a> deleted.Wiki Settings/CSShttp://guess.wikispot.org/Wiki_Settings/CSS2007-08-11 01:38:19EytanAdarUpload of file <a href="http://guess.wikispot.org/Wiki_Settings/CSS?action=Files&do=view&target=style.css">style.css</a>.Wiki Settings/CSShttp://guess.wikispot.org/Wiki_Settings/CSS2007-08-11 01:38:19EytanAdarFile <a href="http://guess.wikispot.org/Wiki_Settings/CSS?action=Files&do=view&target=style.css">style.css</a> deleted.Wiki Settings/Imageshttp://guess.wikispot.org/Wiki_Settings/Images2007-08-11 01:35:47EytanAdarUpload of image <a href="http://guess.wikispot.org/Wiki_Settings/Images?action=Files&do=view&target=logo.png">logo.png</a>.Compiling GUESS Yourselfhttp://guess.wikispot.org/Compiling_GUESS_Yourself2007-08-11 01:31:56EytanAdar <div id="content" class="wikipage content"> Differences for Compiling GUESS Yourself<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 5: </td> <td> Line 5: </td> </tr> <tr> <td> <span>-</span> F<span>Y</span>I, GUESS <span>w</span>a<span>s</span> compiled with jdk1.5 on a 32bit windows machine. </td> <td> <span>+</span> F<span>W</span>I<span>W</span>, GUESS <span>is gener</span>a<span>lly</span> compiled with jdk1.5<span>&nbsp;or jdk1.6</span> on a 32bit windows machine. </td> </tr> <tr> <td> Line 9: </td> <td> Line 9: </td> </tr> <tr> <td> <span>-</span> 1.<span>&nbsp;</span> Get GUESS from CVS: http://sourceforge.net/cvs/?group_id=146031 </td> <td> <span>+</span> 1. Get GUESS from CVS: http://sourceforge.net/cvs/?group_id=146031 </td> </tr> </table> </div> Front Pagehttp://guess.wikispot.org/Front_Page2007-08-11 01:31:03EytanAdar <div id="content" class="wikipage content"> Differences for Front Page<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 11: </td> <td> Line 11: </td> </tr> <tr> <td> </td> <td> <span>+ == ["FAQ"] ==</span> </td> </tr> <tr> <td> Line 12: </td> <td> Line 13: </td> </tr> <tr> <td> <span>- == ["FAQ"] ==</span> </td> <td> </td> </tr> </table> </div> Compiling GUESS Yourselfhttp://guess.wikispot.org/Compiling_GUESS_Yourself2007-08-11 01:04:54EytanAdar <div id="content" class="wikipage content"> Differences for Compiling GUESS Yourself<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 7: </td> <td> Line 7: </td> </tr> <tr> <td> <span>-</span> So... if for some reason it doesn't work for you because of version<span><br> -</span> issues and you're a little ambitious...the general instructions are: </td> <td> <span>+</span> So... if for some reason it doesn't work for you because of version issues and you're a little ambitious...the general instructions are: </td> </tr> <tr> <td> Line 19: </td> <td> Line 18: </td> </tr> <tr> <td> <span>-</span> Notes: the build file will try to execute pyexport.bat which is a<span><br> -</span> batch file wrapper around a perl script. It generates some of the<span><br> -</span> python scripts from the source code, but they are also checked in. In<span><br> -</span> other words, you're probably ok if you don't have it run. If you're<span><br> -</span> on linux or some other OS, and really want to run this you can<span><br> -</span> probably yank out the perl script (everything after line 15 or so) and<span><br> -</span> put it in a regular perl file. </td> <td> <span>+</span> Notes: the build file will try to execute pyexport.bat which is a batch file wrapper around a perl script. It generates some of the python scripts from the source code, but they are also checked in. In other words, you're probably ok if you don't have it run. If you're on linux or some other OS, and really want to run this you can probably yank out the perl script (everything after line 15 or so) and put it in a regular perl file. </td> </tr> </table> </div> Compiling GUESS Yourselfhttp://guess.wikispot.org/Compiling_GUESS_Yourself2007-08-11 01:04:10EytanAdar <div id="content" class="wikipage content"> Differences for Compiling GUESS Yourself<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Compiling GUESS Yourself =<br> + <br> + I'm not sure I would recommend this unless you really need some change (I know what a mess my code is), but it's easy enough:<br> + <br> + FYI, GUESS was compiled with jdk1.5 on a 32bit windows machine.<br> + <br> + So... if for some reason it doesn't work for you because of version<br> + issues and you're a little ambitious...the general instructions are:<br> + <br> + 1. Get GUESS from CVS: http://sourceforge.net/cvs/?group_id=146031<br> + 2. Get JavaCC: https://javacc.dev.java.net/<br> + 3. Get Ant: http://ant.apache.org/<br> + 4. Modify build.xml to point at where you installed javacc<br> + 5. make sure your path is set correctly (you can modify/use setvarbs.bat)<br> + 6. type "ant" (as usual "ant clean" wipes the build directory).<br> + <br> + Hopefully you have a new guess.jar file at the end<br> + <br> + Notes: the build file will try to execute pyexport.bat which is a<br> + batch file wrapper around a perl script. It generates some of the<br> + python scripts from the source code, but they are also checked in. In<br> + other words, you're probably ok if you don't have it run. If you're<br> + on linux or some other OS, and really want to run this you can<br> + probably yank out the perl script (everything after line 15 or so) and<br> + put it in a regular perl file.</span> </td> </tr> </table> </div> Extra Codehttp://guess.wikispot.org/Extra_Code2007-08-11 01:02:55EytanAdar <div id="content" class="wikipage content"> Differences for Extra Code<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Extra Code =</span> </td> </tr> </table> </div> Extra Codehttp://guess.wikispot.org/Extra_Code2007-08-11 01:02:43EytanAdar <div id="content" class="wikipage content"> Differences for Extra Code<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ ["Compiling GUESS Yourself"]</span> </td> </tr> </table> </div> Front Pagehttp://guess.wikispot.org/Front_Page2007-08-11 00:56:54EytanAdar <div id="content" class="wikipage content"> Differences for Front Page<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 12: </td> <td> Line 12: </td> </tr> <tr> <td> </td> <td> <span>+ == ["FAQ"] ==</span> </td> </tr> </table> </div> Front Pagehttp://guess.wikispot.org/Front_Page2007-08-11 00:56:16EytanAdar <div id="content" class="wikipage content"> Differences for Front Page<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 7: </td> <td> Line 7: </td> </tr> <tr> <td> <span>-</span> If you would like access to this site please email Eytan </td> <td> <span>+</span> If you would like<span>&nbsp;(editor)</span> access to this site please email Eytan </td> </tr> <tr> <td> Line 9: </td> <td> Line 9: </td> </tr> <tr> <td> <span>-</span> == ["What is GUESS"]?== </td> <td> <span>+</span> == [<span>http://graphexploration.cond.org </span>"What is GUESS"]?== </td> </tr> </table> </div> Front Pagehttp://guess.wikispot.org/Front_Page2007-08-11 00:55:34EytanAdar <div id="content" class="wikipage content"> Differences for Front Page<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 10: </td> <td> Line 10: </td> </tr> <tr> <td> <span>-</span> == ["<span>m</span>anual"] ==<br> <span>-</span> == ["<span>e</span>xtra <span>c</span>ode"] ==<span><br> - <br> - <br> - </span> </td> <td> <span>+</span> == ["<span>M</span>anual"] ==<br> <span>+</span> == ["<span>E</span>xtra <span>C</span>ode"] == </td> </tr> </table> </div> Front Pagehttp://guess.wikispot.org/Front_Page2007-08-11 00:54:59EytanAdar <div id="content" class="wikipage content"> Differences for Front Page<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> <span>-</span> = Welcome to GUESS <span>=<br> - <br> -</span> =<span>= ["manual"] ==</span> </td> <td> <span>+</span> = Welcome to <span>the </span>GUESS <span>Wiki</span> = </td> </tr> <tr> <td> Line 7: </td> <td> Line 5: </td> </tr> <tr> <td> <span>- ["What is GUESS"]?</span> </td> <td> <span>+ [http://graphexploration.cond.org] The Guess Homepage</span> </td> </tr> <tr> <td> Line 9: </td> <td> Line 7: </td> </tr> <tr> <td> <span>- [http://graphexploration.cond.org] The Guess Homepage</span> </td> <td> <span>+ If you would like access to this site please email Eytan<br> + <br> + == ["What is GUESS"]?==<br> + == ["manual"] ==<br> + == ["extra code"] ==</span> </td> </tr> <tr> <td> Line 13: </td> <td> Line 15: </td> </tr> <tr> <td> <span>- <br> - <br> - <br> - <br> - <br> - <br> - <br> - <br> - <br> - <br> - ["oldhome"]</span> </td> <td> </td> </tr> </table> </div> Colorshttp://guess.wikispot.org/Colors2007-08-11 00:53:17EytanAdarUpload of image <a href="http://guess.wikispot.org/Colors?action=Files&do=view&target=colors.jpg">colors.jpg</a>.Changes from regular Jython/Pythonhttp://guess.wikispot.org/Changes_from_regular_Jython/Python2007-08-11 00:52:26EytanAdar <div id="content" class="wikipage content"> Differences for Changes from regular Jython/Python<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Changes from regular Jython/Python =<br> + <br> + The following major changes have been made to the language/system (these do not include operator modifications and other standard extensions):<br> + <br> + * The following new operators have been added: -&gt;, &lt;-, -&gt;, &lt;-&gt;, ?, roverlaps, rcontains, rcontained, rexact<br> + * Sequence objects containing graph elements (nodes, edges) allow for property modification on all elements. For example, (a,b,c).color = red does: a.color = red, b.color = red, c.color = red<br> + * Arbitrary java objects can have properties set and retrieved through the object.property [= value] syntax. This was previously unavailable.<br> + * Various tweaks to make compiled Python scripts work as applets<br> + * …</span> </td> </tr> </table> </div> Colorshttp://guess.wikispot.org/Colors2007-08-11 00:51:36EytanAdar <div id="content" class="wikipage content"> Differences for Colors<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Colors =<br> + <br> + --&gt; [[Image(colors.jpg)]] &lt;--<br> + <br> + The following utility commands will generate various colors:<br> + <br> + * randomColor() will generate a single color at random<br> + * randomColor(alpha) will generate a single random color with a given alpha (transparency)<br> + * generateColors(start_color,end_color,count) will generate a set of count colors ranging from start_color to end_color.</span> </td> </tr> </table> </div> manualhttp://guess.wikispot.org/manual2007-08-11 00:51:00EytanAdar <div id="content" class="wikipage content"> Differences for manual<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 49: </td> <td> Line 49: </td> </tr> <tr> <td> <span>-</span> Appendix A. ["Color<span>.</span>"] </td> <td> <span>+</span> Appendix A. ["Color<span>s</span>"] </td> </tr> </table> </div> Additional Informationhttp://guess.wikispot.org/Additional_Information2007-08-11 00:47:47EytanAdar <div id="content" class="wikipage content"> Differences for Additional Information<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> <span>-</span> Additional Information </td> <td> <span>+ =</span> Additional Information<span>&nbsp;=</span> </td> </tr> </table> </div> Additional Informationhttp://guess.wikispot.org/Additional_Information2007-08-11 00:47:38EytanAdar <div id="content" class="wikipage content"> Differences for Additional Information<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ Additional Information<br> + <br> + * Jython home page: http://www.jython.org/<br> + * Python home page: http://www.python.org/</span> </td> </tr> </table> </div> Command Line Optionshttp://guess.wikispot.org/Command_Line_Options2007-08-11 00:47:14EytanAdar <div id="content" class="wikipage content"> Differences for Command Line Options<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Command Line Options =<br> + <br> + <br> + When launching GUESS there are a number of command line options that can control the launch. Valid usage includes:<br> + <br> + * guess [options] [database directory] [python files]<br> + * guess [options] [gdf/xml file] [python files]<br> + * guess [options] null [python files]<br> + <br> + <br> + Options can be:<br> + <br> + * --console or –c to enable the visual console<br> + * --nowarn or –n disables warnings when loading graphs<br> + * --persistent directory or –o directory to use an on-disk database (useful if you want to keep working with the same visualization, you can do this the first time to create the database). Be aware that this overwrites the database if it exists so you should only use this the first time you load the gdf!<br> + * --novis or –v to disable any visualization (useful for speeding up certain operations like layouts).<br> + * --gplfree or –f to disable gpl code in the system (limits what you can do)<br> + * --touchgraph or –t to load the visualization in touchgraph<br> + * --prefuse or –p to load the visualization in prefuse<br> + * --multiedge or –m to enable support for multiple edges between nodes (off by default)<br> + <br> + Example usage:<br> + <br> + * guess --nowarn test.gdf foo.py will load up test.gdf without warnings and then execute foo.py<br> + * guess --persistent database/temp null will load up GUESS with an empty graph and will save all changes to the persistent database in database/temp</span> </td> </tr> </table> </div> Front-end Alternativeshttp://guess.wikispot.org/Front-end_Alternatives2007-08-11 00:46:23EytanAdarUpload of image <a href="http://guess.wikispot.org/Front-end_Alternatives?action=Files&do=view&target=alter.gif">alter.gif</a>.Front-end Alternativeshttp://guess.wikispot.org/Front-end_Alternatives2007-08-11 00:46:12EytanAdar <div id="content" class="wikipage content"> Differences for Front-end Alternatives<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 6: </td> <td> Line 6: </td> </tr> <tr> <td> <span>-</span> [[Image(alter.<span>jp</span>g)]]&lt;-- </td> <td> <span>+</span> [[Image(alter.g<span>if</span>)]]&lt;-- </td> </tr> </table> </div> Front-end Alternativeshttp://guess.wikispot.org/Front-end_Alternatives2007-08-11 00:46:00EytanAdar <div id="content" class="wikipage content"> Differences for Front-end Alternatives<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Front-end Alternatives =<br> + <br> + While we have attempted to make the visualization front-end as complete as possible, we understand that certain applications may require a different system. To that end, we have disentangled the visualization from the language and allow easy replacement of the standard visualization. Although neither is currently fully functional, you can make use of both Prefuse (http://prefuse.sourceforge.net/) or Touchgraph (http://www.touchgraph.com/) libraries for your visualization. This can be done by invoking with GUESS with the --prefuse or --touchgraph options respectively. A more complete integration will be made in the future when the API has stabilized.<br> + <br> + --&gt;<br> + [[Image(alter.jpg)]]&lt;--</span> </td> </tr> </table> </div> Building your own Applicationhttp://guess.wikispot.org/Building_your_own_Application2007-08-11 00:45:18EytanAdar <div id="content" class="wikipage content"> Differences for Building your own Application<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Building your own Application =<br> + <br> + There are now two files in the demo directory. One (DemoApp1.java) shows you basically a minimal setup of the GUESS application. If you want all the widgets and toolbars that come with GUESS you can use that one. The second, DemoApp2.java, shows you how to just use the drawing component which you can integrate into your own application.</span> </td> </tr> </table> </div> Advanced Applet Featureshttp://guess.wikispot.org/Advanced_Applet_Features2007-08-11 00:44:49EytanAdar <div id="content" class="wikipage content"> Differences for Advanced Applet Features<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Advanced Applet Features =<br> + <br> + <br> + The command getAppletContext() (or officially, com.hp.hpl.guess.Guess.getAppletContext()) will return the appletcontext object. This can then be used to control the browser. For example:<br> + <br> + getAppletContext().showDocument(“http://...”,”windowname”) will load up a URL in a new browser window.<br> + <br> + <br> + <br> + Notice that you can use this feature with the shiftclick event listener. When a user shift-clicks on a node or edge a new frame can be loaded that contains information about that node/edge.</span> </td> </tr> </table> </div> Compiling Your Codehttp://guess.wikispot.org/Compiling_Your_Code2007-08-11 00:44:17EytanAdar <div id="content" class="wikipage content"> Differences for Compiling Your Code<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Compiling Your Code =<br> + <br> + '''WARNING''': Make sure you don't have a regular jython installation anywhere near your path before you do this. This is the #1 most frequent problem<br> + <br> + Take a look at the dockexample2applet.py script. The one important thing to note is that you will not be able to use many of the shortcuts (compare the script to dockexample2.py). This means that you will need to use commands like g.gemLayout() instead of gemLayout(). If you are unsure what the “real” command is take a look at Main.py which defines all the shortcuts.<br> + <br> + <br> + <br> + We have also noticed that objects need to be declared using their full package name (so javax.swing.JSlider instead of just JSlider). We may be able to fix this in the future, but you should check your scripts here.<br> + <br> + <br> + <br> + Once you have this and set your environment variables correctly (in particular you’ll want the same classpath that is set in guess.bat) you should be able to run the following command (in windows):<br> + <br> + <br> + <br> + {{{jythonc -j foo.jar -a -c -p guess --deep scripts\dockexample2applet.py}}}<br> + <br> + <br> + <br> + This will compile the dockexample2 toolbar into a java class and then package it inside the foo.jar file. The command will also include all the necessary python code in the jar file. The –p option tells jython to put the class in the “guess” package. This is important because there is some classloader code that tests to see if the toolbar is in the guess package before loading it. Once you have foo.jar you should be able to load test2.html which makes reference to the new toolbar (take a look at the bottom of the file where the TOOLBAR variable is defined).<br> + <br> + <br> + <br> + If jython complains about not being able to find the compiler or something about the registry variable you’ll want to use the command:<br> + <br> + <br> + <br> + {{{jythonc -j foo.jar -a -c -p guess –C c:\jdk\bin\javac.exe --deep scripts\dockexample2applet.py}}}<br> + <br> + <br> + <br> + replacing the c:\jdk\... with the location of your javac.</span> </td> </tr> </table> </div> Applets and Applicationshttp://guess.wikispot.org/Applets_and_Applications2007-08-11 00:43:03EytanAdar <div id="content" class="wikipage content"> Differences for Applets and Applications<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Applets and Applications =<br> + <br> + Applets are fairly straight forward but with a few caveats. You can easily run an interpreter-less applet (take a look at test.html) as an example. This shows how to load a simple network into memory.<br> + <br> + Unfortunately, because of the way Jython works (dynamic class loading) you will need to a) sign your applet to get a version that you can program or b) compile your jython code using jythonc to get a “static” program.</span> </td> </tr> </table> </div> manualhttp://guess.wikispot.org/manual2007-08-11 00:42:52EytanAdar <div id="content" class="wikipage content"> Differences for manual<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 40: </td> <td> Line 40: </td> </tr> <tr> <td> <span>-</span> 17. ["Applets and Applications<span>.</span>"] </td> <td> <span>+</span> 17. ["Applets and Applications"] </td> </tr> </table> </div> Responding to clicks and other code bits.http://guess.wikispot.org/Responding_to_clicks_and_other_code_bits.2007-08-11 00:41:49EytanAdarUpload of image <a href="http://guess.wikispot.org/Responding_to_clicks_and_other_code_bits.?action=Files&do=view&target=map.jpg">map.jpg</a>.Responding to clicks and other code bits.http://guess.wikispot.org/Responding_to_clicks_and_other_code_bits.2007-08-11 00:41:33EytanAdar <div id="content" class="wikipage content"> Differences for Responding to clicks and other code bits.<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Responding to clicks and other code bits =<br> + <br> + == Handling System Events ==<br> + <br> + In the current version of GUESS you can add an event handler to respond to a number of user actions (left-clicks, shift-left-clicks, and the mouse entering or leaving a node).<br> + <br> + For example, we can define a couple of simple event handler methods:<br> + {{{<br> + def sc1(_node):<br> + print “node ” + _node.name + “ was clicked”<br> + <br> + def sc2(_edge):<br> + print “edge ” + _edge.toString() + “ was clicked”<br> + <br> + graphevents.shiftClickNode = sc1<br> + graphevents.shiftClickEdge = sc2<br> + <br> + Similarly we can add events to mouse events:<br> + graphevents.mouseEnterNode = …<br> + graphevents.mouseEnterEdge = …<br> + graphevents.mouseLeaveNode = …<br> + graphevents.mouseLeaveEdge = …<br> + }}}<br> + <br> + To capture click events:<br> + {{{<br> + graphevents.clickNode = sc1<br> + graphevents.clickEdge = sc2<br> + }}}<br> + <br> + You can use these methods to implement your own behaviors in the visualization. In order to override the existing mechanisms (left-click causes a zoom, mouse over causes a highlight) by using the following commands:<br> + {{{<br> + vf.defaultNodeHighlights(state)<br> + vf.defaultEdgeHighlights(state)<br> + vf.defaultNodeZooming(state)<br> + vf.defaultEdgeZooming(state)<br> + }}}<br> + <br> + where state is true or false<br> + <br> + Here is a little piece of code that highlights neighboring edges and nodes when we mouse over a specific node. It also changes the zoom behavior to zoom to a node and all its neighbors (also available as newhighlight.py in the samples directory).<br> + <br> + {{{<br> + import java<br> + <br> + class newhighlight(java.lang.Object):<br> + <br> + # so we can "unhighlight" nodes<br> + _toFix = {}<br> + <br> + def __init__(self):<br> + # add the listeners<br> + graphevents.mouseEnterNode = self.mouseEnter<br> + graphevents.mouseLeaveNode = self.mouseLeave<br> + graphevents.clickNode = self.mouseClick<br> + <br> + # remove default behaviors<br> + vf.defaultNodeHighlights(false)<br> + vf.defaultNodeZooming(false)<br> + <br> + def mouseEnter(self,_node):<br> + # when we enter the node we should<br> + # track all current colors, make the node<br> + # yellow, the edges orange, and the neighbors red<br> + self._toFix[_node] = _node.color<br> + StatusBar.setStatus(str(_node))<br> + _node.color = yellow<br> + for _e in _node.getOutEdges():<br> + self._toFix[_e] = _e.color<br> + _e.color = orange<br> + for _n in _node.getNeighbors():<br> + if (_n != _node):<br> + self._toFix[_n] = _n.color<br> + _n.color = red<br> + <br> + def mouseLeave(self,_node):<br> + # put back all the original colors<br> + for _elem in self._toFix.keys():<br> + _elem.color = self._toFix[_elem]<br> + self._toFix.clear();<br> + <br> + def mouseClick(self,_node):<br> + # zoom to the node AND its neighbors<br> + _toCenter = [_node]<br> + _toCenter += _node.getNeighbors()<br> + center(_toCenter)<br> + }}}<br> + <br> + Although it is not possible (at the moment) to capture events to the underlying canvas the command:<br> + <br> + {{{coord = v.getLastClickedPosition()}}}<br> + <br> + will return a coordinate (call coord.getX() and coord.getY() to get the x and y values) with the last placed the user left-clicked on.<br> + <br> + == Contextual Menus ==<br> + <br> + Finally, GUESS now supports contextual menus. Right clicking on graph elements in the GUI console, or in the graph, pulls up a menu. You can modify the content of these menus by adding items to the NodeEditorPopup, EdgeEditorPopup, or GraphElementPopup (contextual when there is a mixture of nodes and edges selected). Note that multiple graph elements can be submitted if more than one element is selected in the various interfaces.<br> + <br> + {{{<br> + # create a new menu item<br> + newMenuItem = NodeEditorPopup.addItem("Print node name")<br> + <br> + # define an action for that menu item<br> + def action(_target):<br> + print _target<br> + <br> + # map the events produced by the click events to the action function<br> + newMenuItem.menuEvent = action<br> + <br> + }}}<br> + <br> + == Background Images ==<br> + <br> + GUESS allows you to set your own background images. This is useful, for example, if you want to have a map or floorplan in the background. The two commands for this are:<br> + <br> + {{{<br> + v.setBackgroundImage(image_file_name) and<br> + v.setBackgroundImage(image_file_name,xcoord,ycoord)<br> + }}}<br> + <br> + The second places the image at the specified coordinate. An example of this is illustrated below:<br> + <br> + --&gt;<br> + [[Image(map.jpg)]]&lt;--<br> + <br> + The sample program in dockexample5.py loads up an image and asks you to click on the location of two nodes on the background. Using these coordinates the program will translate and rescale your graph to fit. Creating a dockexample5 object with no parameters (e.g. dockexample5()) will use the sample map file. Alternatively you can use your own image files (e.g. dockexample5(“foo.jpg”)) instead.<br> + <br> + <br> + <br> + = Other Functions =<br> + In the Functions.py file in the scripts directory there are a number of additional demonstrations that implement various common functions. These include:<br> + * removeLeaves() which iteratively removes all nodes with totaldegree &lt;= 1<br> + * shortcutNodes() which iteratively removes nodes that have a degree of 2 and draws a new connection between the two nodes (i.e. a–b–c will become a-c).<br> + * condenseGraph() will remove disconnected nodes and then iterate between removing leaves and shortcutting until the graph stops changing<br> + * skitter(field) generates a skitter plot (see: http://www.caida.org/analysis/topology/as_core_network/ )<br> + * averageEdgeColor(edge) will color the edge by the average color of its two endpoints<br> + * distance(node1,node2) will calculate the distance between two nodes</span> </td> </tr> </table> </div> Example 4: Remote control of GUESS.http://guess.wikispot.org/Example_4:_Remote_control_of_GUESS.2007-08-11 00:38:26EytanAdar <div id="content" class="wikipage content"> Differences for Example 4: Remote control of GUESS.<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Example 4: Remote control of GUESS =<br> + <br> + When loaded the following toolbar will allow you to telnet, or open a socket to, the machine running GUESS. Every command typed in the remote end will be executed in the GUESS client. The script is available as dockexample4, but is included below (to execute load the script and then type guessnetwork()):<br> + <br> + {{{<br> + import java<br> + import javax.swing<br> + import com<br> + <br> + # this is our toolbar<br> + class dockexample4(com.hp.hpl.guess.ui.DockableAdapter):<br> + <br> + myLabel = javax.swing.JLabel("Waiting for connection")<br> + <br> + def __init__(self):<br> + # add our toolbar<br> + self.add(self.myLabel)<br> + ui.dock(self)<br> + <br> + def getTitle(self):<br> + return("dockexample4")<br> + <br> + def update(self,val):<br> + # eval or execute the command as appropriate<br> + self.myLabel.setText(val);<br> + try:<br> + eval(val)<br> + except (SyntaxError,ValueError,NameError):<br> + try:<br> + exec(val)<br> + except (SyntaxError,ValueError,NameError):<br> + self.myLabel.setText("command error "+val)<br> + v.repaint()<br> + <br> + # extend the java thread object<br> + class guessnetwork(java.lang.Thread):<br> + <br> + # keep a reference to our toolbar<br> + screeninterface = None;<br> + <br> + def __init__(self):<br> + self.screeninterface = dockexample4()<br> + # start the thread<br> + self.start()<br> + <br> + def run(self):<br> + mySocket = java.net.ServerSocket(2222) # run on port 2222<br> + clientSocket = mySocket.accept() # accept a connection<br> + inst = java.io.BufferedReader(java.io.InputStreamReader(clientSocket.inputStream))<br> + val = inst.readLine() # read the line, and execute:<br> + while (val != None):<br> + self.screeninterface.update(val)<br> + val = inst.readLine()<br> + }}}</span> </td> </tr> </table> </div> Example 3: A Network Monitorhttp://guess.wikispot.org/Example_3:_A_Network_Monitor2007-08-11 00:37:17EytanAdar <div id="content" class="wikipage content"> Differences for Example 3: A Network Monitor<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 3: </td> <td> Line 3: </td> </tr> <tr> <td> <span>-</span> Our next example is more ambitious. We will visualize a network<span><br> -</span> topology and simulate traffic on it. We would like to visually<span><br> -</span> keep track of network load to both edges and nodes as well as<span><br> -</span> have a “heartbeat” monitor tracking average load on the<span><br> -</span> system (see the figure). While in a real setting we may pull<span><br> -</span> this data from a network or somewhere else, in our example we are<span><br> -</span> going to create a “driver” thread which will generate a random<span><br> -</span> network and random values. The whole scheme relies on the<span><br> -</span> creation of two objects, the dockexample3 which is the chart at<span><br> -</span> the bottom, and the example3driver object which drives the<span><br> -</span> simulation. </td> <td> <span>+</span> Our next example is more ambitious. We will visualize a network topology and simulate traffic on it. We would like to visually keep track of network load to both edges and nodes as well as have a “heartbeat” monitor tracking average load on the system (see the figure). While in a real setting we may pull this data from a network or somewhere else, in our example we are going to create a “driver” thread which will generate a random network and random values. The whole scheme relies on the creation of two objects, the dockexample3 which is the chart at the bottom, and the example3driver object which drives the simulation. </td> </tr> </table> </div> Example 3: A Network Monitorhttp://guess.wikispot.org/Example_3:_A_Network_Monitor2007-08-11 00:36:45EytanAdarUpload of image <a href="http://guess.wikispot.org/Example_3:_A_Network_Monitor?action=Files&do=view&target=example3.gif">example3.gif</a>.Example 3: A Network Monitorhttp://guess.wikispot.org/Example_3:_A_Network_Monitor2007-08-11 00:36:28EytanAdar <div id="content" class="wikipage content"> Differences for Example 3: A Network Monitor<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Example 3: A Network Monitor =<br> + <br> + Our next example is more ambitious. We will visualize a network<br> + topology and simulate traffic on it. We would like to visually<br> + keep track of network load to both edges and nodes as well as<br> + have a “heartbeat” monitor tracking average load on the<br> + system (see the figure). While in a real setting we may pull<br> + this data from a network or somewhere else, in our example we are<br> + going to create a “driver” thread which will generate a random<br> + network and random values. The whole scheme relies on the<br> + creation of two objects, the dockexample3 which is the chart at<br> + the bottom, and the example3driver object which drives the<br> + simulation.<br> + <br> + --&gt; [[Image(example3.gif)]]&lt;--<br> + <br> + {{{<br> + # import stuff from jfreechart (see www.jfree.org)<br> + from org.jfree.chart import *<br> + from org.jfree.chart.axis import *<br> + from org.jfree.chart.plot import *<br> + from org.jfree.data.time import *<br> + from org.jfree.data.xy import *<br> + from org.jfree.ui import *<br> + <br> + import java<br> + import javax.swing<br> + import com<br> + import time<br> + <br> + # this is our toolbar<br> + <br> + class dockexample3(com.hp.hpl.guess.ui.DockableAdapter):<br> + <br> + # need to keep some top level variables (like the<br> + # min and max for the chart)<br> + series = TimeSeries("Random Data",<br> + Class.forName("org.jfree.data.time.Millisecond"))<br> + lastValue = 100.0<br> + raxis = None<br> + _min = 30.0<br> + _max = 31.0<br> + <br> + def __init__(self):<br> + <br> + # set up the jfreechart object<br> + dataset = TimeSeriesCollection(self.series)<br> + jfc = ChartFactory.createTimeSeriesChart("Network Heartbeat",<br> + "Time","Value",dataset,true,true,false)<br> + plot = jfc.getXYPlot()<br> + jfc.setLegend(None)<br> + axis = plot.getDomainAxis()<br> + axis.setAutoRange(true)<br> + axis.setFixedAutoRange(60000.0)<br> + axis = plot.getRangeAxis()<br> + axis.setRange(self._min,self._max)<br> + self.raxis = axis<br> + chartPanel = ChartPanel(jfc)<br> + <br> + # we want to tell the GUESS ui how big to make this<br> + # object, and then we dock it<br> + chartPanel.setPreferredSize(java.awt.Dimension(600, 150))<br> + self.setPreferredSize(java.awt.Dimension(600, 300))<br> + self.add(chartPanel)<br> + ui.dock(self)<br> + <br> + def getTitle(self):<br> + return("dockexample3")<br> + <br> + def update(self,val):<br> + # change the min and max values on the chart<br> + if (val &gt; self._max):<br> + self._max = val<br> + if (val &lt; self._min):<br> + self._min = val<br> + self.raxis.setRange(self._min,self._max)<br> + <br> + # add a new value to the heart monitor<br> + self.series.addOrUpdate(Millisecond(), val)<br> + <br> + <br> + # extend the java thread object<br> + class example3driver(java.lang.Thread):<br> + <br> + # keep a reference to our hearbeat monitor<br> + heartbeat = None;<br> + <br> + def __init__(self):<br> + makeSimpleRandom(40,50) # make a random graph<br> + centerAfterLayout(false) # turn off centering after layout<br> + setSynchronous(true) # make layouts run in same thread<br> + gemLayout() # initial layout<br> + binPackLayout() # pack all the subgraphs together<br> + rescaleLayout(1.2) # make it a bit larger<br> + <br> + # create new node and edge fields for the load<br> + addEdgeField("load",Types.DOUBLE,20.0)<br> + addNodeField("load",Types.DOUBLE,20.0)<br> + <br> + # create a new heartbeat toolbar<br> + self.heartbeat = dockexample3()<br> + <br> + # force GUESS to calculate the outdegree<br> + nd1.outdegree<br> + <br> + # make the background dark gray<br> + setDisplayBackground(darkgray)<br> + <br> + # for every node make its label the same as<br> + # its name and change it to a slightly different style<br> + for _n in g.nodes:<br> + _n.label = _n.name<br> + _n.style = 6<br> + <br> + # start the thread<br> + self.start()<br> + <br> + def run(self):<br> + center() # center once<br> + <br> + # run the simulation for 10000 seconds<br> + for _i in range(1,10000):<br> + _load = self.getLoad() # get the load<br> + Thread.sleep(1000) # sleep<br> + self.heartbeat.update(_load) # update the monitor<br> + colorize(Edge.load,green,red) # color the edges<br> + self.colorNodes() # color the nodes<br> + v.repaint() # force a repaint now!<br> + <br> + def colorNodes(self):<br> + <br> + # for every node, figure out the average load on<br> + # all its edges, set the load property to that average<br> + for _n in g.nodes:<br> + _avgedgeload = 0<br> + for _e in _n.getOutEdges():<br> + _avgedgeload += _e.load<br> + if _n.outdegree &gt; 0:<br> + _avgedgeload = _avgedgeload / _n.outdegree<br> + _n.load = _avgedgeload<br> + <br> + # color the nodes from green to red<br> + colorize(Node.load,green,red)<br> + <br> + def getLoad(self):<br> + # generate a random new load on the network<br> + for _e in g.edges:<br> + _e.load = Math.random() * 50<br> + return load.avg<br> + <br> + }}}</span> </td> </tr> </table> </div> Example 2: A Threshold Sliderhttp://guess.wikispot.org/Example_2:_A_Threshold_Slider2007-08-11 00:34:25EytanAdarUpload of image <a href="http://guess.wikispot.org/Example_2:_A_Threshold_Slider?action=Files&do=view&target=exampl2.jpg">exampl2.jpg</a>.Example 2: A Threshold Sliderhttp://guess.wikispot.org/Example_2:_A_Threshold_Slider2007-08-11 00:34:14EytanAdar <div id="content" class="wikipage content"> Differences for Example 2: A Threshold Slider<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Example 2: A Threshold Slider =<br> + Let’s try for a slightly more interactive example. Recall that in our sample database we have an edge feature called freq. If we want the user to be able to control the frequency easily we can easily create a toolbar with a slider that hides and shows edges depending on the user controlled threshold. The code and screenshot for this included below:<br> + <br> + <br> + {{{<br> + import java<br> + import javax.swing<br> + import com<br> + <br> + class dockexample2(com.hp.hpl.guess.ui.DockableAdapter):<br> + <br> + testSlider = JSlider() # keep the label and slider<br> + label = JLabel("Frequency threshold (0) ")<br> + <br> + def __init__(self):<br> + # set up the slider limits<br> + self.testSlider.setMinimum(freq.min)<br> + self.testSlider.setMaximum(freq.max + 1)<br> + <br> + # set up the slider visual properties<br> + self.testSlider.setMajorTickSpacing(50)<br> + self.testSlider.setMinorTickSpacing(10)<br> + self.testSlider.setPaintTicks(true)<br> + self.testSlider.setPaintLabels(true)<br> + self.testSlider.setValue(freq.min) # default value<br> + <br> + # every time the mouse is released call the "sc" method<br> + self.testSlider.mouseReleased = self.sc<br> + <br> + # add the label and slider to the UI<br> + self.add(self.label)<br> + self.add(self.testSlider)<br> + <br> + # dock the new panel into the UI<br> + ui.dock(self)<br> + <br> + # call the event function once so that the<br> + # display matches the slider value<br> + self.sc(None)<br> + <br> + def getTitle(self):<br> + return("dockexample2")<br> + <br> + def sc(self,evt):<br> + # get the value<br> + val = self.testSlider.getValue()<br> + <br> + # show all the nodes<br> + g.nodes.visible = 1<br> + <br> + # hide all edges under value and show all over<br> + (freq &lt; val).visible = 0<br> + (freq &gt;= val).visible = 1<br> + <br> + # hide nodes not connected to visible edges<br> + self.hideDisconnectedNodes()<br> + <br> + # set the label text<br> + self.label.setText("Frequency threshold ("+str(val)+")")<br> + <br> + def hideDisconnectedNodes(self):<br> + # keep a list of nodes to hide, java doesn’t<br> + # like us to modify objects as we iterate over them<br> + toHide = []<br> + <br> + for nod in g.nodes: # for all nodes<br> + vis = 0 # default to invisble<br> + <br> + # for all edges connected to this node<br> + # if there is any visible edge<br> + # keep this node visible<br> + for ed in nod.getOutEdges():<br> + if (ed.visible == 1):<br> + vis = 1<br> + break<br> + <br> + if (vis == 0): # should we hide the node?<br> + toHide += [nod]<br> + <br> + # hide all the nodes we put in our list<br> + toHide.visible = 0<br> + }}}<br> + <br> + --&gt;<br> + [[Image(exampl2.jpg)]]&lt;--</span> </td> </tr> </table> </div> Example 1: A Simple Button.http://guess.wikispot.org/Example_1:_A_Simple_Button.2007-08-11 00:32:48EytanAdarUpload of image <a href="http://guess.wikispot.org/Example_1:_A_Simple_Button.?action=Files&do=view&target=example1.jpg">example1.jpg</a>.Example 1: A Simple Button.http://guess.wikispot.org/Example_1:_A_Simple_Button.2007-08-11 00:32:34EytanAdar <div id="content" class="wikipage content"> Differences for Example 1: A Simple Button.<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Example 1: A Simple Button =<br> + <br> + <br> + Lets say we want to modify the interface to have a button that when pressed will center the display. We could create a new type of object called a dockexample1 in the following way:<br> + <br> + <br> + {{{<br> + import java # import what we need<br> + import javax.swing<br> + import com<br> + <br> + <br> + class dockexample1(com.hp.hpl.guess.ui.DockableAdapter):<br> + <br> + <br> + def __init__(self):<br> + # create a new button called center<br> + testButton = JButton("center")<br> + <br> + # every time the button is pressed, center the display<br> + testButton.actionPerformed = lambda event: center()<br> + <br> + # add the button to the toolbar<br> + self.add(testButton)<br> + <br> + # add the toolbar to the main UI window<br> + ui.dock(self)<br> + <br> + def getTitle(self):<br> + # define the title in the window<br> + return("dockexample1")<br> + }}}<br> + <br> + <br> + If we save this script to a file called example.py we can make use of it in GUESS by executing the file:<br> + <br> + {{{execfile(“example.py”)}}}<br> + <br> + <br> + and then creating a new dockexample1 object:<br> + <br> + {{{dockexample1()}}}<br> + <br> + --&gt;<br> + [[Image(example1.jpg)]] &lt;--</span> </td> </tr> </table> </div> Modifying the Interface/Expanding GUESShttp://guess.wikispot.org/Modifying_the_Interface/Expanding_GUESS2007-08-11 00:31:23EytanAdar <div id="content" class="wikipage content"> Differences for Modifying the Interface/Expanding GUESS<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 4: </td> <td> Line 4: </td> </tr> <tr> <td> </td> <td> <span>+ <br> + ["Example 1: A Simple Button."]<br> + <br> + ["Example 2: A Threshold Slider"]<br> + <br> + ["Example 3: A Network Monitor"]<br> + <br> + ["Example 4: Remote control of GUESS."]<br> + <br> + ["Responding to clicks and other code bits."]</span> </td> </tr> </table> </div> Modifying the Interface/Expanding GUESShttp://guess.wikispot.org/Modifying_the_Interface/Expanding_GUESS2007-08-11 00:30:42EytanAdar <div id="content" class="wikipage content"> Differences for Modifying the Interface/Expanding GUESS<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Modifying the Interface/Expanding GUESS =<br> + <br> + There are various ways in which you can modify the GUESS interface. The easiest is to make use of the docking infrastructure by extending the DockableAdapter class inside Jython.</span> </td> </tr> </table> </div> Convex Hullshttp://guess.wikispot.org/Convex_Hulls2007-08-11 00:30:02EytanAdarUpload of image <a href="http://guess.wikispot.org/Convex_Hulls?action=Files&do=view&target=hull.jpg">hull.jpg</a>.Convex Hullshttp://guess.wikispot.org/Convex_Hulls2007-08-11 00:29:47EytanAdar <div id="content" class="wikipage content"> Differences for Convex Hulls<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Convex Hulls =<br> + <br> + Convex hulls can be added around a set of nodes by using the command createConvexHull(nodeset,color). This will create and color a convex hull around the nodeset and return a reference to the convex hull object. To delete a specific convex hull you would type removeConvexHull(hull), and to get a list of all hulls you would use getConvexHulls().<br> + <br> + Note that convex hulls (especially transparent ones) make various operations a little slow so you may want to not use them until your are settled on a layout.<br> + <br> + To get the figure below we did:<br> + <br> + <br> + {{{clusts = groupBy(dept)<br> + for c in clusts: createConvexHull(c,randomColor(120))<br> + }}}<br> + <br> + <br> + The additional value we pass to randomColor indicates the transparency (0-255) for the resulting random color. This allows us to see through hulls.<br> + <br> + --&gt;<br> + [[Image(hull.jpg)]]&lt;--</span> </td> </tr> </table> </div> Interface to Rhttp://guess.wikispot.org/Interface_to_R2007-08-11 00:28:55EytanAdar <div id="content" class="wikipage content"> Differences for Interface to R<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Interface to R =<br> + <br> + Although it has greatly improved since the Zoomgraph implementation, the connection to R is still in the process of being defined. GUESS, like Zoomgraph, makes use of the Rserve to connect to R. The program is very easy to install for both windows and Unix distributions (see: [http://stats.math.uni-augsburg.de/Rserve/]).<br> + <br> + <br> + <br> + Once you have Rserve installed, start it up. By default GUESS will attempt to connect to the local machine’s Rserve process. If you are running R somewhere else you will want to execute the command r.initConnection(“host”) where host is the host to connect to.<br> + <br> + <br> + <br> + There are two main interfaces to R through GUESS. The first allows us to set variables inside the R environment and pull back values. The second, an “R mode,” reroutes every command typed in GUESS directly to R. Note that at present this mode is only available for the command line version (not the GUI version) of the interpreter.<br> + <br> + <br> + <br> + To set variables in R, we use the syntax: r.variable_name = value. For example, r.x = 5 will set a variable called x in the R space to 5. You may also pass double and integer arrays and double arrays to R in this way. To extract variables from R, you would use r.variable_name. For example:<br> + <br> + <br> + {{{<br> + r.x = 5<br> + r.y = 4<br> + foo = r.x – r.y<br> + }}}<br> + <br> + <br> + Will set two variables in the R space to 5 and 4, and will then set the value of foo (in GUESS) to be the difference between them (1.0). Beyond simple variables and arrays, the command r.graph = g will set the graph variable in R to a matrix corresponding to the GUESS graph.<br> + <br> + <br> + If you would like to invoke R commands you would tell GUESS to go into the “R mode” by typing rmode. You will notice that the prompt will change to “R&gt;” to leave this mode simply type a period by itself on a line and press enter (i.e. “.”). Note that unless the R connection is broken you will be able to switch in and out of R mode without losing data. When in R mode you will be able to execute whatever R commands you like. A new feature of GUESS is that plots are rendered to a file that is then displayed in GUESS. For example, try this:<br> + <br> + <br> + {{{<br> + r.graph = g<br> + rmode<br> + library(sna)<br> + gplot(graph)<br> + }}}<br> + <br> + <br> + In this mode you will be able to do whatever analysis you want. In order to pull data back into GUESS simply set some variable to the data you want to retrieve, exit R mode and use the “r.variable_name” syntax to pull the data back. A simple example would be:<br> + <br> + <br> + {{{<br> + rmode<br> + z&lt;-500<br> + .<br> + r.z<br> + }}}<br> + <br> + <br> + This sequence of commands would set the value of z to 500 in R and then retrieve that value in GUESS.</span> </td> </tr> </table> </div> Legendshttp://guess.wikispot.org/Legends2007-08-11 00:27:48EytanAdarUpload of image <a href="http://guess.wikispot.org/Legends?action=Files&do=view&target=grad.jpg">grad.jpg</a>.Legendshttp://guess.wikispot.org/Legends2007-08-11 00:27:32EytanAdar <div id="content" class="wikipage content"> Differences for Legends<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Legends =<br> + <br> + <br> + Though you can see basic examples of legends in the previous examples the basic commands are outlined below:<br> + <br> + * Legend() create a new legend and returns the reference<br> + * legend.add(object,text) where object is either a node, edge or convex hull. This command will add the object as a “prototype” and use the text as the title next to it. The text must be unique for a given legend.<br> + * legend.remove(text) will remove the object labeled by text from the legend<br> + * legend.removeAll() removes all objects from the legend<br> + <br> + As of the 0.6 release of GUESS we also include a special GradientLegend object to visualize continuous data. The syntax for this GradientLegend object is:<br> + <br> + {{{GradientLegend(start_color, end_color, min, max, tick_mark_every)}}}<br> + <br> + The visualization will show the min and maximum value with a tick mark every tick_mark_every units. The following code generated the figure below:<br> + <br> + {{{<br> + colorize(freq,red,yellow)<br> + GradientLegend(red,yellow,freq.min,freq.max,10)<br> + }}}<br> + <br> + --&gt;<br> + [[Image(grad.jpg)]] &lt;--</span> </td> </tr> </table> </div> State Alternative: Rangeshttp://guess.wikispot.org/State_Alternative:_Ranges2007-08-11 00:26:07EytanAdar <div id="content" class="wikipage content"> Differences for State Alternative: Ranges<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 45: </td> <td> Line 45: </td> </tr> <tr> <td> <span>- </span> Note that if you change the field GUESS will not change the index automatically (e.g. if you say v0.range = ’20-25’ the range will not get updated). In order to force an update, use one of the following commands: </td> <td> <span>+</span> Note that if you change the field GUESS will not change the index automatically (e.g. if you say v0.range = ’20-25’ the range will not get updated). In order to force an update, use one of the following commands: </td> </tr> </table> </div> State Alternative: Rangeshttp://guess.wikispot.org/State_Alternative:_Ranges2007-08-11 00:25:52EytanAdar <div id="content" class="wikipage content"> Differences for State Alternative: Ranges<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = State Alternative: Ranges =<br> + <br> + Frequently we have graphs where nodes and edges simply exist or not in different time periods. We are not interesting in varying any other dynamic property except for existence. For example, a node is active at time 0-5 and 8-12. We do not want to create a state for every time period. A new (.6+) feature of GUESS is a special range index. You may not specify a field for nodes and edges that functions to define these ranges.<br> + <br> + <br> + The valid syntax for this textual field is a comma delimited set of ranges or individual times. For example: “1-2,5,10-12” indicates that the range of this object is between time periods 1 and 2, at time period 5, and between period 10 and 12. Using an interval tree, GUESS will create an index that can be used to select nodes and edges that are contained in, overlap, contain, or match a range exactly. The operators for this are roverlaps, rcontains, rcontained, and rexact and may be applied to the “Node” and “Edge” objects in the form of:<br> + <br> + <br> + object operator range<br> + <br> + where object is Node or Edge, operator is one of roverlaps, rcontains, rcontained, and rexeact, and the range is either a single number (e.g. 1 which implies a range of 1 to 1), a pair of numbers (e.g. (1,2) which implies a range of 1 to 2), or a string range (e.g. “5-8” which implies a range of 5 to 8).<br> + <br> + An example may help. Let’s say we have a simple GDF file:<br> + <br> + {{{<br> + nodedef&gt; name, range VARCHAR(32)<br> + v0,"1-2,6-9"<br> + v1,"1-3,8-15"<br> + v2,"1-1"<br> + v3,"5-12"<br> + v4,"20-20"<br> + edgedef&gt; node1,node2,directed<br> + v0,v1,true<br> + v0,v2,true<br> + v0,v3,true<br> + v3,v4,true<br> + v2,v4,true<br> + v1,v4,true<br> + }}}<br> + <br> + <br> + We can do the following:<br> + <br> + * Node roverlaps (2,5) which returns v0 and v1<br> + * Node rcontains 5 which returns v3<br> + * Node rcontained (19,21) which returns v4<br> + * Node rexact (5,12) which returns v3<br> + <br> + <br> + By default, GUESS will try and find a “range” field as soon as you invoke one of the range operations. You may also specify an alternative field using the following command (with a field as an argument):<br> + <br> + * Node.setRangeField(…)<br> + * Edge.setRangeField(…)<br> + <br> + Note that if you change the field GUESS will not change the index automatically (e.g. if you say v0.range = ’20-25’ the range will not get updated). In order to force an update, use one of the following commands:<br> + <br> + * Node.rebuildRangeIndex()<br> + * Edge.rebuildRangeIndex()</span> </td> </tr> </table> </div> State Sensitive Querieshttp://guess.wikispot.org/State_Sensitive_Queries2007-08-11 00:24:18EytanAdar <div id="content" class="wikipage content"> Differences for State Sensitive Queries<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = State Sensitive Queries =<br> + <br> + <br> + A feature of GUESS (as of the .6 release) is the ability to query for matching nodes across multiple states using a “subscript” operator. For example, if we saved the state of the graph and called the state “oldorg” (for the “old organization”) of an node. We could say:<br> + <br> + <br> + {{{<br> + v44[‘oldorg’].dept<br> + }}}<br> + <br> + <br> + To access the value of node v44’s old department. Alternatively, if we had different layouts at different states (states 1,2,3,…) we could ask for the old coordinates for a node by doing:<br> + <br> + <br> + {{{v44[1].x and v44[1].y}}}<br> + <br> + to get the x and y coordinates at state 1<br> + <br> + <br> + Note that at present we do not support changing these values (e.g. v44[1].x = 20 will return an error).<br> + <br> + <br> + If we want to do comparisons or selections across multiple states it is possible to use the same subscript syntax on the field variables. For example, if we define two states, 1999 and 2000, and have different frequencies of communication across the social network edges we could find all edges where individuals communicated more in 2000 than 1999 by doing:<br> + <br> + <br> + {{{freq[2000] &gt; freq[1999]}}}<br> + <br> + <br> + Note that you can mix this with standard queries. For example, all edges that are in that set above and are currently visible:<br> + <br> + {{{(freq[2000] &gt; freq[1999]) &amp; (Edge.visible == 1)}}}</span> </td> </tr> </table> </div> States and Animationshttp://guess.wikispot.org/States_and_Animations2007-08-11 00:22:54EytanAdar <div id="content" class="wikipage content"> Differences for States and Animations<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = States and Animations =<br> + Graphs are frequently dynamic objects where node and edge properties are changing. In order to support graphs of this nature, GUESS allows users to save and load states of the graph where nodes and edges can appear and disappear and where properties can change in value.<br> + <br> + <br> + <br> + The commands for doing this are simple. Simply type:<br> + <br> + <br> + <br> + * ss(name) to save a state named “name” and<br> + * ls(name) to load a state named “name”<br> + <br> + <br> + All node and edge features will be updated to reflect the new state.<br> + <br> + <br> + <br> + In order to visualize transitions between different states, GUESS provides a morph command that will smoothly change nodes and edges from various states. Simply type morph(statename,time) and the graph will change from the current configuration to state statename over the time milliseconds.<br> + <br> + <br> + <br> + In combination with the movie output features one could save a movie of a morph by doing:<br> + <br> + <br> + {{{<br> + ss(“foo”)<br> + <br> + … do some stuff…<br> + <br> + ss(“bar”)<br> + <br> + startMovie(20,”out.mov”)<br> + <br> + morph(“foo”,50000)<br> + <br> + stopMovie()<br> + }}}<br> + <br> + <br> + We suggest the use a long morph time for smooth animations. Again recall that the output will not be in real time. A 50 second animation may only output a 3 second movie depending on the number of nodes, edges, and processing time.<br> + <br> + <br> + <br> + Nodes and edges move in and out of visibility by adjusting their transparency and they will gradually fade or appear from the background. You may also notice that they disappear too late or appear too early and clutter the display. GUESS allows you control this through a few methods:<br> + <br> + Morpher.setNodeDisappearBy(n) and Morpher.setEdgeDisappearBy(n) will control the disappearance of nodes and edges. The value of n should be between 0 and 1 (1 is the default, so graph elements stick around until the very end). If we wanted them to instantly disappear we would use a value of 0. We find that somewhere around .2 works well (i.e. elements vanish quickly but are still on the screen).<br> + Morpher.setNodeAppearAfter(n) and Morpher.setEdgeAppearAfter(n) will control the appearance of nodes and edges. The value of n should be between 0 and 1 (0 is the default here). We find that somewhere around .8 works well.<br> + <br> + [camera tracking, multi-state morphs]</span> </td> </tr> </table> </div> Output Commandshttp://guess.wikispot.org/Output_Commands2007-08-11 00:21:59EytanAdar <div id="content" class="wikipage content"> Differences for Output Commands<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Output Commands =<br> + <br> + GUESS is able to export various image formats. You can either do this by selecting the export option from the file menu or utilizing one of the following commands (their function should be clear from the name):<br> + <br> + * exportGIF(filename)<br> + * exportJPG(filename)<br> + * exportPDF(filename)<br> + * exportPS(filename)<br> + * exportEPS(filename)<br> + * exportSVG(filename)<br> + * exportSWF(filename)<br> + * exportJAVA(filename)<br> + * exportCGM(filename)<br> + * exportEMF(filename)<br> + * exportPNG(filename)<br> + <br> + Note that these commands (at present) export a screenshot of what is visible in the window. If you would like to capture the full screen use the appropriate export command in the File menu.<br> + <br> + In addition to image formats GUESS will also allow you to save a (quicktime) movie of what is happening on the screen. To start a movie type: startMovie(fps,filename) where fps is the frames per second. Note that each redraw of the GUESS visualization is considered a frame but this does not necessarily map to real time). You may want to set the frames per second to be very low to render movies that appear in real time. The command stopMovie() will stop the movie recording.<br> + <br> + '''A Note on Memory''': Graphs that take up a lot of (pixel) space will take lots of memory. Because GUESS will try to render things in the "real" scale of the image, you may need to up your memory limits with the -Xmx memory option to Java.<br> + <br> + [non-image formats (GraphML, pajek, etc.)]</span> </td> </tr> </table> </div> Modifying graphshttp://guess.wikispot.org/Modifying_graphs2007-08-11 00:19:52EytanAdar <div id="content" class="wikipage content"> Differences for Modifying graphs<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 87: </td> <td> Line 87: </td> </tr> <tr> <td> <span>-</span> '''Dealing with Node/Edge properties''': To programmatically get a list of node or edge properties you can call the fieldNames() or allFields() methods of the Node and Edge classes (e.g. Node.fieldNames()). The former will give you the textual names of the fields, and the latter will give you a reference to the actual field object. Using textual string names you can invoke the __setattr__(fieldname,value)<span>&nbsp;and __getattr__(fieldname)</span> commands on specific nodes/edges or sets (e.g. v44.__setattr__(“color”,red)<span>&nbsp;or </span>v44.__getattr__(“color”)<span>).</span> </td> <td> <span>+</span> '''Dealing with Node/Edge properties''': To programmatically get a list of node or edge properties you can call the fieldNames() or allFields() methods of the Node and Edge classes (e.g. Node.fieldNames()). The former will give you the textual names of the fields, and the latter will give you a reference to the actual field object. Using textual string names you can invoke the <span>{{{</span>__setattr__(fieldname,value)<span>}}} and {{{__getattr__(fieldname)}}}</span> commands on specific nodes/edges or sets (e.g. <span>{{{</span>v44.__setattr__(“color”,red)<span>}}} or {{{</span>v44.__getattr__(“color”)<span>}}}).</span> </td> </tr> </table> </div> Modifying graphshttp://guess.wikispot.org/Modifying_graphs2007-08-11 00:19:10EytanAdar <div id="content" class="wikipage content"> Differences for Modifying graphs<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 87: </td> <td> Line 87: </td> </tr> <tr> <td> <span>- "</span>Dealing with Node/Edge properties<span>"</span>: To programmatically get a list of node or edge properties you can call the fieldNames() or allFields() methods of the Node and Edge classes (e.g. Node.fieldNames()). The former will give you the textual names of the fields, and the latter will give you a reference to the actual field object. Using textual string names you can invoke the __setattr__(fieldname,value) and __getattr__(fieldname) commands on specific nodes/edges or sets (e.g. v44.__setattr__(“color”,red) or v44.__getattr__(“color”)). </td> <td> <span>+ '''</span>Dealing with Node/Edge properties<span>'''</span>: To programmatically get a list of node or edge properties you can call the fieldNames() or allFields() methods of the Node and Edge classes (e.g. Node.fieldNames()). The former will give you the textual names of the fields, and the latter will give you a reference to the actual field object. Using textual string names you can invoke the __setattr__(fieldname,value) and __getattr__(fieldname) commands on specific nodes/edges or sets (e.g. v44.__setattr__(“color”,red) or v44.__getattr__(“color”)). </td> </tr> </table> </div> Modifying graphshttp://guess.wikispot.org/Modifying_graphs2007-08-11 00:18:44EytanAdarUpload of image <a href="http://guess.wikispot.org/Modifying_graphs?action=Files&do=view&target=pink.gif">pink.gif</a>.Modifying graphshttp://guess.wikispot.org/Modifying_graphs2007-08-11 00:18:30EytanAdar <div id="content" class="wikipage content"> Differences for Modifying graphs<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Modifying Graphs =<br> + <br> + Adding nodes and edges is a fairly straightforward process. To add a new node you simply invoke the addNode(name) command which will create a new node with the default characteristics and the name “name.” Adding an edge is also simple but there are two commands depending on if you want a directed or undirected/bidirected edge.<br> + <br> + * addDirectedEdge(source,destination)<br> + * addUndirectedEdge(node1,node2)<br> + * addEdge(node1,node2) is equivalent to addUndirectedEdge(…)<br> + <br> + <br> + An example of creating two nodes and adding a directed edge between them would be:<br> + <br> + <br> + {{{<br> + addNode(“vx”)<br> + <br> + addNode(“vy”)<br> + <br> + addDirectedEdge(vx,vy)<br> + }}}<br> + <br> + <br> + Note that GUESS will create variables called vx and vy in the top level namespace.<br> + <br> + <br> + <br> + GUESS also support the copyNode(source_node , new_node_name,extra arguments) which uses the source node as a template for the new node. Note that the copy command will happily copy everything from the original node including the label, so you’ll usually want to add the extra argument to overload the label. For example if we want to create a new node using v44 as a template with a different color, we could do:<br> + <br> + <br> + {{{<br> + copyNode(v44,”newnode”,label=”newnode”,color=red)<br> + }}}<br> + <br> + <br> + Removing is done by calling:<br> + <br> + * removeNode(node) – A list including the removed node(s) and any removed edges is returned with this call<br> + * removeEdge(edge) – Returns a list including the removed edge(s)<br> + * remove(set of nodes and edges) – A list including the removed node(s) and edge(s) is returned from this call<br> + <br> + GUESS will not eliminate a reference to a node that has been removed from the namespace. As of the .6 version of GUESS, remove methods return back a set of objects that have been removed from the graph. This is useful if you would like to reinsert nodes or edges.<br> + <br> + Continuing in our previous example you could remove the node from the graph and put it back in later. This may be useful for working through different graph variants:<br> + <br> + {{{<br> + removeNode(vx)<br> + <br> + …<br> + <br> + addNode(vx)<br> + }}}<br> + <br> + <br> + Prior to the .6 version of GUESS, removing and re-adding nodes and edges made GUESS forget about the values of user fields. This is no longer the case. Deleted nodes/edges are now held in a special state table called “_deleted.” When you make an ordinary query (e.g. “weight &gt; 5”) GUESS will only return matched elements that are still in the graph. If you would like to find deleted edges that match the criteria you can use the state notation (see states and dynamic graph sections) and type: “weight[‘_deleted’] &gt; 5”<br> + <br> + <br> + Adding a new field is equally simple. You simply decide which type of field (node or edge) you want to add and then invoke the method:<br> + <br> + <br> + {{{<br> + addNodeField(name,type,default)<br> + addEdgeField(name,type,default)<br> + }}}<br> + <br> + The name is the new column name, the type is int value corresponding to the java.sql.Types class (e.g. Types.INTEGER, Types.BOOLEAN, Types.TINYINT, Types.VARCHAR, etc.) and the default is an object corresponding to the default value.<br> + <br> + <br> + <br> + Here’s an example of the command in action. We’re going to add a new node field called shortest and set it to the distance of that node to the v4 (in the sample database).<br> + <br> + <br> + {{{<br> + addNodeField(“shortest”,Types.INTEGER,Integer(0))<br> + <br> + for n in g.nodes:<br> + <br> + n.shortest = len(v4.unweightedShortestPath(n))<br> + <br> + colorize(shortest,pink,black)<br> + }}}<br> + <br> + <br> + This command will result in the following figure:<br> + <br> + --&gt;<br> + [[Image(pink.gif)]]&lt;--<br> + <br> + "Dealing with Node/Edge properties": To programmatically get a list of node or edge properties you can call the fieldNames() or allFields() methods of the Node and Edge classes (e.g. Node.fieldNames()). The former will give you the textual names of the fields, and the latter will give you a reference to the actual field object. Using textual string names you can invoke the __setattr__(fieldname,value) and __getattr__(fieldname) commands on specific nodes/edges or sets (e.g. v44.__setattr__(“color”,red) or v44.__getattr__(“color”)).</span> </td> </tr> </table> </div> manualhttp://guess.wikispot.org/manual2007-08-11 00:16:11EytanAdar <div id="content" class="wikipage content"> Differences for manual<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 20: </td> <td> Line 20: </td> </tr> <tr> <td> <span>-</span> 8. <span>["</span>Analysis Commands<span>"]</span> </td> <td> <span>+</span> 8. Analysis Commands </td> </tr> </table> </div> Random Graph Generationhttp://guess.wikispot.org/Random_Graph_Generation2007-08-11 00:15:39EytanAdar <div id="content" class="wikipage content"> Differences for Random Graph Generation<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Random Graph Generation =<br> + <br> + If you would like to have GUESS generate a random graph for you there are a number of existing options available in JUNG and exposed through GUESS. To use these you may want to start with an empty database and use one of the following:<br> + <br> + * makeSimpleRandom(nodes,edges)<br> + * makeBarabasiAlbertRandom(vert,edges,evolve)<br> + * makeEppsteinRandom(nodes,edges,r)<br> + * makeErdosRenyiRandom(nodes,p)<br> + * makeLattice1DRandom(nodes,tor)<br> + * makeLattice2DRandom(nodes,tor)<br> + * makeKleinbergRandom(nodes,clust)<br> + <br> + [http://jung.sourceforge.net/doc/api/edu/uci/ics/jung/random/generators/GraphGenerator.html description forthcoming, but see the JUNG documentation for now]</span> </td> </tr> </table> </div> Field, Graph, Node, Edge Statisticshttp://guess.wikispot.org/Field%2C_Graph%2C_Node%2C_Edge_Statistics2007-08-11 00:13:57EytanAdarUpload of image <a href="http://guess.wikispot.org/Field%2C_Graph%2C_Node%2C_Edge_Statistics?action=Files&do=view&target=path.gif">path.gif</a>.Field, Graph, Node, Edge Statisticshttp://guess.wikispot.org/Field%2C_Graph%2C_Node%2C_Edge_Statistics2007-08-11 00:13:45EytanAdar <div id="content" class="wikipage content"> Differences for Field, Graph, Node, Edge Statistics<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Field, Graph, Node, Edge Statistics=<br> + <br> + There are a number of special properties on (numerical) fields that allow you to get a quick sense of the average, minimum, maximum, and summed values. This can be done by appending the field variable with .avg, .min, .max, and .sum respectively (e.g. freq.min will return the minimum frequency value).<br> + <br> + <br> + A number of node and edge fields are calculated when they are first accessed. These include: betweenness, pagerank, degrank, hits, and rwbetweeness which correspond to the Betweenness, PageRank, Degree Distribution Rank, HITS rank, and Random-Walk Betweenness ranks. Also available are indegree, outdegree, and totaldegree. Because many of these take a long time to compute, the first time you access the property the value is calculated and cached. Changes to the graph will require an update to these ([need to describe]).<br> + <br> + <br> + <br> + For example, we can calculate and color based on betweenness by doing:<br> + <br> + <br> + {{{<br> + v1.betweenness<br> + g.colorize(Node.betweenness,red,blue)<br> + }}}<br> + <br> + <br> + You can also ask a node for the shortest path to other nodes by either applying the unweightedShortestPath(target) or dijkstarShortestPath(target) methods. A list of edges representing the shortest path will be returned to you. In figure n we have found the shortest path between v291 and v376 and changed the color to blue through the command:<br> + <br> + <br> + {{{<br> + (v291.unweightedShortestPath(v376)).color = blue<br> + }}}<br> + <br> + --&gt;<br> + [[Image(path.gif)]]&lt;--</span> </td> </tr> </table> </div> Visualizing Fieldshttp://guess.wikispot.org/Visualizing_Fields2007-08-11 00:12:43EytanAdar <div id="content" class="wikipage content"> Differences for Visualizing Fields<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = Visualizing Fields =<br> + As shortcuts to the groupAndSortBy followed by color and size changes we a number of shortcuts:<br> + <br> + * colorize(field) Will randomly assign a color to each group based on the field<br> + * colorize(field,startcolor,endcolor) Will assign a color between startcolor and endcolor based on the sorted groups of field<br> + * resizeRandom(field,start,end) Resize graph components based on field to a random value between start and end<br> + * resizeLinear(field,start,end) Resize the graph components linearly between start and end based on field</span> </td> </tr> </table> </div> Clusteringhttp://guess.wikispot.org/Clustering2007-08-11 00:11:32EytanAdar <div id="content" class="wikipage content"> Differences for Clustering<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 1: </td> <td> Line 1: </td> </tr> <tr> <td> </td> <td> <span>+ = 8.1 Clustering=<br> + Because we are making use of the JUNG system in GUESS we can take advantage 3of the many clustering algorithms already implemented there. These commands will generally generate a set of sets that can then be used in any way you want. Current commands include:<br> + <br> + * biComponentCluster(): BiComponent Clustering<br> + * edgeBetweennessClusters(): Edge Betweenness Clustering (Newman)<br> + * weakComponentClusters(): Graph Components<br> + <br> + <br> + A simple use of these commands is to color each cluster differently. For example:<br> + <br> + <br> + {{{<br> + clusts = weakComponentClusters()<br> + <br> + for z in clusts:<br> + z.color = randomColor()<br> + }}}<br> + <br> + <br> + GUESS will also generate groupings (and sorts based on any field). This is done by the groupBy(field) and groupAndSortBy(field) methods. Using these we could color each edge in the sample database by frequency.<br> + <br> + <br> + {{{<br> + clusts = groupAndSortBy(freq)<br> + <br> + clustcol = generateColors(blue,red,len(clusts))<br> + <br> + for z in range(0,len(clusts)):<br> + clusts[z].color = clustcol[z]<br> + }}}<br> + <br> + <br> + <br> + Because resizing and coloring nodes and edges is a fairly straightforward operation we have created a number of shortcuts described below.<br> + <br> + <br> + <br> + You may also make use of the groupBy/sortBy/groupAndSortBy methods when dealing with sets. For example, say we pull out only a subset of nodes (e.g. all those in department 1) and would like to see them ordered by salary (note that we don’t actually have a salary field defined in the sample data set):<br> + <br> + <br> + {{{<br> + dept1 = (dept == ‘dept1’)<br> + dept1.sortBy(salary)<br> + }}}<br> + <br> + <br> + or if we wanted to group them by job function we could do:<br> + <br> + <br> + {{{<br> + dept1.groupBy(jobfunc)<br> + }}}</span> </td> </tr> </table> </div> Laying out Graphshttp://guess.wikispot.org/Laying_out_Graphs2007-08-11 00:09:49EytanAdar <div id="content" class="wikipage content"> Differences for Laying out Graphs<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 45: </td> <td> Line 45: </td> </tr> <tr> <td> </td> <td> <span>+ --&gt; [[Image(cc.jpg)]]&lt;--</span> </td> </tr> <tr> <td> Line 48: </td> <td> Line 49: </td> </tr> <tr> <td> <span>- --&gt; [[Image(cc.jpg)]]&lt;--</span> </td> <td> </td> </tr> </table> </div> Laying out Graphshttp://guess.wikispot.org/Laying_out_Graphs2007-08-11 00:09:22EytanAdarUpload of image <a href="http://guess.wikispot.org/Laying_out_Graphs?action=Files&do=view&target=adjust.gif">adjust.gif</a>.Laying out Graphshttp://guess.wikispot.org/Laying_out_Graphs2007-08-11 00:08:59EytanAdarUpload of image <a href="http://guess.wikispot.org/Laying_out_Graphs?action=Files&do=view&target=isom.jpg">isom.jpg</a>.Laying out Graphshttp://guess.wikispot.org/Laying_out_Graphs2007-08-11 00:08:46EytanAdarUpload of image <a href="http://guess.wikispot.org/Laying_out_Graphs?action=Files&do=view&target=cc.jpg">cc.jpg</a>.Laying out Graphshttp://guess.wikispot.org/Laying_out_Graphs2007-08-11 00:07:02EytanAdarUpload of image <a href="http://guess.wikispot.org/Laying_out_Graphs?action=Files&do=view&target=mds.jpg">mds.jpg</a>.Laying out Graphshttp://guess.wikispot.org/Laying_out_Graphs2007-08-11 00:06:45EytanAdarUpload of image <a href="http://guess.wikispot.org/Laying_out_Graphs?action=Files&do=view&target=physics.jpg">physics.jpg</a>.Laying out Graphshttp://guess.wikispot.org/Laying_out_Graphs2007-08-11 00:06:30EytanAdarUpload of image <a href="http://guess.wikispot.org/Laying_out_Graphs?action=Files&do=view&target=gem.jpg">gem.jpg</a>.Laying out Graphshttp://guess.wikispot.org/Laying_out_Graphs2007-08-11 00:06:16EytanAdarUpload of image <a href="http://guess.wikispot.org/Laying_out_Graphs?action=Files&do=view&target=fr.jpg">fr.jpg</a>.Laying out Graphshttp://guess.wikispot.org/Laying_out_Graphs2007-08-11 00:06:00EytanAdarUpload of image <a href="http://guess.wikispot.org/Laying_out_Graphs?action=Files&do=view&target=spring.jpg">spring.jpg</a>.Laying out Graphshttp://guess.wikispot.org/Laying_out_Graphs2007-08-11 00:05:37EytanAdarUpload of image <a href="http://guess.wikispot.org/Laying_out_Graphs?action=Files&do=view&target=circle.jpg">circle.jpg</a>.Laying out Graphshttp://guess.wikispot.org/Laying_out_Graphs2007-08-11 00:05:26EytanAdarUpload of image <a href="http://guess.wikispot.org/Laying_out_Graphs?action=Files&do=view&target=random.jpg">random.jpg</a>.Laying out Graphshttp://guess.wikispot.org/Laying_out_Graphs2007-08-11 00:05:07EytanAdar <div id="content" class="wikipage content"> Differences for Laying out Graphs<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 23: </td> <td> Line 23: </td> </tr> <tr> <td> <span>-</span> --&gt; [[Image(r<span>a</span>n<span>dom</span>.jpg)]]&lt;-- </td> <td> <span>+</span> --&gt; [[Image(<span>sp</span>r<span>i</span>n<span>g</span>.jpg)]]&lt;-- </td> </tr> <tr> <td> Line 27: </td> <td> Line 27: </td> </tr> <tr> <td> <span>-</span> --&gt; [[Image(r<span>andom</span>.jpg)]]&lt;-- </td> <td> <span>+</span> --&gt; [[Image(<span>f</span>r.jpg)]]&lt;-- </td> </tr> <tr> <td> Line 31: </td> <td> Line 31: </td> </tr> <tr> <td> <span>-</span> --&gt; [[Image(<span>rando</span>m.jpg)]]&lt;-- </td> <td> <span>+</span> --&gt; [[Image(<span>ge</span>m.jpg)]]&lt;-- </td> </tr> <tr> <td> Line 36: </td> <td> Line 36: </td> </tr> <tr> <td> <span>-</span> --&gt; [[Image(<span>random</span>.jpg)]]&lt;-- </td> <td> <span>+</span> --&gt; [[Image(<span>physics</span>.jpg)]]&lt;-- </td> </tr> <tr> <td> Line 41: </td> <td> Line 41: </td> </tr> <tr> <td> <span>-</span> --&gt; [[Image(<span>ran</span>d<span>om</span>.jpg)]]&lt;-- </td> <td> <span>+</span> --&gt; [[Image(<span>m</span>d<span>s</span>.jpg)]]&lt;-- </td> </tr> <tr> <td> Line 48: </td> <td> Line 48: </td> </tr> <tr> <td> <span>-</span> --&gt; [[Image(<span>random</span>.jpg)]]&lt;-- </td> <td> <span>+</span> --&gt; [[Image(<span>cc</span>.jpg)]]&lt;-- </td> </tr> </table> </div> Laying out Graphshttp://guess.wikispot.org/Laying_out_Graphs2007-08-11 00:04:29EytanAdar <div id="content" class="wikipage content"> Differences for Laying out Graphs<p><strong></strong></p><table> <tr> <td> <span> Deletions are marked with - . </span> </td> <td> <span> Additions are marked with +. </span> </td> </tr> <tr> <td> Line 8: </td> <td> Line 8: </td> </tr> <tr> <td> <span>-</span> * Commands: random() or random(width,height) </td> <td> <span>+</span> * Commands: random<span>Layout</span>() or random<span>Layout</span>(width,height) </td> </tr> <tr> <td> Line 10: </td> <td> Line 10: </td> </tr> <tr> <td> </td> <td> <span>+ --&gt; [[Image(random.jpg)]]&lt;--</span> </td> </tr> <tr> <td> Line 13: </td> <td> Line 14: </td> </tr> <tr> <td> </td> <td> <span>+ --&gt; [[Image(circle.jpg)]]&lt;--</span> </td> </tr> <tr> <td> Line 21: </td> <td> Line 23: </td> </tr> <tr> <td> </td> <td> <span>+ --&gt; [[Image(random.jpg)]]&lt;--</span> </td> </tr> <tr> <td> Line 24: </td> <td> Line 27: </td> </tr> <tr> <td> </td> <td> <span>+ --&gt; [[Image(random.jpg)]]&lt;--</span> </td> </tr> <tr> <td> Line 27: </td> <td> Line 31: </td> </tr> <tr> <td> </td> <td> <span>+ --&gt; [[Image(random.jpg)]]&lt;--</span> </td> </tr> <tr> <td> Line 31: </td> <td> Line 36: </td> </tr> <tr> <td> </td> <td> <span>+ --&gt; [[Image(random.jpg)]]&lt;--</span> </td> </tr> <tr> <td> Line 35: </td> <td> Line 41: </td> </tr> <tr> <td> </td> <td> <span>+ --&gt; [[Image(random.jpg)]]&lt;--</span> </td> </tr> <tr> <td> Line 41: </td> <td> Line 48: </td> </tr> <tr> <td> </td> <td> <span>+ --&gt; [[Image(random.jpg)]]&lt;--</span> </td> </tr> <tr> <td> Line 47: </td> <td> Line 55: </td> </tr> <tr> <td> <span>-</span> * Shift overlapping edges a little bit along a curve so that you can see that there are multiple edges between nodes. See Figure <span>n</span> for an example. </td> <td> <span>+</span> * Shift overlapping edges a little bit along a curve so that you can see that there are multiple edges between nodes. See Figure <span>below</span> for an example. </td> </tr> <tr> <td> Line 51: </td> <td> Line 59: </td> </tr> <tr> <td> <span>- </span> </td> <td> <span>+ * Isom Layout<br> + * Command: isomLayout()<br> + --&gt; [[Image(isom.jpg)]]&lt;--</span> </td> </tr> <tr> <td> Line 58: </td> <td> Line 68: </td> </tr> <tr> <td> <span>- --&gt;<br> - randomLayout()</span> </td> <td> <span>+ --&gt; [[Image(adjust.gif)]]&lt;--</span> </td> </tr> <tr> <td> Line 61: </td> <td> Line 70: </td> </tr> <tr> <td> <span>- [[Image(random.jpg)]]<br> - &lt;--</span> </td> <td> </td> </tr> </table> </div>