Announcing Hypergraph prototype for TiddlWiki 2.0.x

24 views
Skip to first unread message

dnagal

unread,
Mar 19, 2006, 5:45:07 PM3/19/06
to TiddlyWiki

http://www.aurore.eclipse.co.uk/wiki/twextensions.htm

Based on a previous request (See
http://groups.google.com/group/TiddlyWikiDev/browse_frm/thread/e036e19b58e7ab2b/af3162a34b036081?q=Brain&rnum=1#af3162a34b036081)
I'm releasing a TiddlyWiki hypergraph plug-in I've been working on.
Uses hypergraph 0.6.3 applet to create navigation graphs. You need to
enable java applets in your browser for this to work. I've tested with
FF 1.0.7 and IE 6. I've had quite a few revelations with it already,
using it to map my existing TiddlyWikis.

It's a very early prototype so I'd like feedback, suggestions and
hoping that someone more familiar with visualisation theory and code
experience might pick this up.

Enjoy.

Dawn.

Luke Blanshard

unread,
Mar 19, 2006, 6:40:47 PM3/19/06
to TiddlyWiki
Well, I'm impressed. A couple of reactions:

- It kills FF 1.5.0.1. FYI.
- I think it would be interesting to see the links between tiddlers.
For example, have one kind of link denote a tag, and another denote a
reference. Clicking on a tiddler name should not only open the tiddler
but also center the tiddler's node in the graph so you can see what's
related to it.

Luke

Danny Collins

unread,
Mar 19, 2006, 7:50:18 PM3/19/06
to Tiddl...@googlegroups.com
Didn't even get to see the demo - using FF 1.5

here is the output from the Java Console:

<snip>
Java Plug-in 1.5.0_03
Using JRE version 1.5.0_03 Java HotSpot(TM) Client VM
User home directory = C:\Documents and Settings\Amy and Danny


----------------------------------------------------
c:   clear console window
f:   finalize objects on finalization queue
g:   garbage collect
h:   display this help message
l:   dump classloader list
m:   print memory usage
o:   trigger logging
p:   reload proxy configuration
q:   hide console
r:   reload policy configuration
s:   dump system and deployment properties
t:   dump thread list
v:   dump thread stack
x:   clear classloader cache
0-5: set trace level to <n>
----------------------------------------------------

Exception in thread "Thread-3" java.lang.NullPointerException
    at sun.plugin.viewer.LifeCycleManager.startAppletPanel (Unknown Source)
    at sun.plugin.viewer.WNetscapePluginObject.startPlugin(Unknown Source)
    at sun.plugin.viewer.WNetscapePluginObject$Initer.run(Unknown Source)
java.lang.NullPointerException
    at sun.plugin.util.GrayBoxPainter.paintGrayBox (Unknown Source)
    at sun.plugin.util.GrayBoxPainter.repaintGrayBox(Unknown Source)
    at sun.plugin.util.GrayBoxPainter.progressFinish(Unknown Source)
    at sun.plugin.util.EventMulticaster.progressFinish(Unknown Source)
    at sun.plugin.util.ProgressMonitor.unregisterSource(Unknown Source)
    at sun.net.ProgressSource.finishTracking(Unknown Source)
    at sun.net.www.http.KeepAliveStream.close(Unknown Source)
    at sun.net.www.MeteredStream.justRead (Unknown Source)
    at sun.net.www.MeteredStream.read(Unknown Source)
    at java.io.FilterInputStream.read(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)
    at sun.plugin.net.protocol.http.HttpUtils.cleanupConnection(Unknown Source)
    at sun.plugin.cache.CachedJarLoader.decompress (Unknown Source)
    at sun.plugin.cache.CachedJarLoader.access$500(Unknown Source)
    at sun.plugin.cache.CachedJarLoader$5.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.plugin.cache.CachedJarLoader.download(Unknown Source)
    at sun.plugin.cache.CachedJarLoader.load(Unknown Source)
    at sun.plugin.cache.JarCache.get(Unknown Source)
    at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect (Unknown Source)
    at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(Unknown Source)
    at sun.misc.URLClassPath$JarLoader.getJarFile(Unknown Source)
    at sun.misc.URLClassPath$JarLoader.<init>(Unknown Source)
    at sun.misc.URLClassPath$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.misc.URLClassPath.getLoader(Unknown Source)
    at sun.misc.URLClassPath.getLoader (Unknown Source)
    at sun.misc.URLClassPath.getResource(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass (Unknown Source)
    at sun.applet.AppletClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.applet.AppletClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass (Unknown Source)
    at sun.applet.AppletClassLoader.loadCode(Unknown Source)
    at sun.applet.AppletPanel.createApplet(Unknown Source)
    at sun.plugin.AppletViewer.createApplet(Unknown Source)
    at sun.applet.AppletPanel.runLoader (Unknown Source)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-7" java.lang.NullPointerException
    at sun.plugin.util.GrayBoxPanel.paint (Unknown Source)
    at sun.plugin.util.GrayBoxPanel.setImage(Unknown Source)
    at sun.plugin.util.GrayBoxPanel.setError(Unknown Source)
    at sun.plugin.util.GrayBoxPainter.getGrayBoxPanel(Unknown Source)
    at sun.plugin.util.GrayBoxPainter.paintGrayBox(Unknown Source)
    at sun.plugin.util.GrayBoxPainter.repaintGrayBox(Unknown Source)
    at sun.plugin.util.GrayBoxPainter.showLoadingError(Unknown Source)
    at sun.plugin.AppletViewer.showAppletException(Unknown Source)
    at sun.applet.AppletPanel.runLoader(Unknown Source)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
java.lang.NullPointerException
    at sun.plugin.util.GrayBoxPanel.paint(Unknown Source)
    at sun.plugin.util.GrayBoxPainter.paintGrayBox(Unknown Source)
    at sun.plugin.util.GrayBoxPainter.repaintGrayBox(Unknown Source)
    at sun.plugin.util.GrayBoxPainter.showLoadingError(Unknown Source)
    at sun.plugin.AppletViewer.showAppletStatus(Unknown Source)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run (Unknown Source)
Exception in thread "thread applet-hypergraph.applications.hexplorer.HExplorerApplet.class" java.lang.NullPointerException
    at sun.plugin.util.GrayBoxPanel.paint(Unknown Source)
    at sun.plugin.util.GrayBoxPainter.paintGrayBox(Unknown Source)
    at sun.plugin.util.GrayBoxPainter.repaintGrayBox(Unknown Source)
    at sun.plugin.util.GrayBoxPainter.showLoadingError(Unknown Source)
    at sun.plugin.AppletViewer.showAppletException (Unknown Source)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-4" java.lang.NullPointerException
    at sun.plugin.util.GrayBoxPanel.paint (Unknown Source)
    at sun.plugin.util.GrayBoxPainter.paintGrayBox(Unknown Source)
    at sun.plugin.util.GrayBoxPainter.repaintGrayBox(Unknown Source)
    at sun.plugin.util.GrayBoxPainter.access$000(Unknown Source)
    at sun.plugin.util.GrayBoxPainter$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
load: class hypergraph.applications.hexplorer.HExplorerApplet.class not found.
java.lang.ClassNotFoundException : hypergraph.applications.hexplorer.HExplorerApplet.class
    at sun.applet.AppletClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.applet.AppletClassLoader.loadClass (Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.applet.AppletClassLoader.loadCode(Unknown Source)
    at sun.applet.AppletPanel.createApplet(Unknown Source)
    at sun.plugin.AppletViewer.createApplet (Unknown Source)
    at sun.applet.AppletPanel.runLoader(Unknown Source)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: open HTTP connection failed.
    at sun.applet.AppletClassLoader.getBytes(Unknown Source)
    at sun.applet.AppletClassLoader.access$100(Unknown Source)
    at sun.applet.AppletClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged (Native Method)
    ... 10 more
</snip>

Russ Lipton

unread,
Mar 19, 2006, 10:23:28 PM3/19/06
to TiddlyWiki
Tres tres cool. Keep extending it, please. Someday, Firefox will be
sane again.

dnagal

unread,
Mar 20, 2006, 4:08:55 AM3/20/06
to TiddlyWiki
Luke,
I've done my testing on FF 1.0.7 and IE 6. I'll have a look at FF
1.5.0.x once I have an image with it installed.
1. I toyed with the idea of links between tiddlers but the graph would
get really messy and complicated. That's why I seperated the dated
tiddler group from the tiddler group.
2. I'm working on the centering the relevant node when you click on a
tiddler. I need this also to support the bookmark plug-in.

dnagal

unread,
Mar 20, 2006, 4:13:33 AM3/20/06
to TiddlyWiki
Danny,
The error
<b>load: class hypergraph.applications.hexplorer.HExplorerApplet.class
not
found</b>
seems to be that it could'nt find the hypergraph jar file.
Can you let me know what browser version and windows version you were
using when you got the error ?

dnagal

unread,
Mar 20, 2006, 4:15:25 AM3/20/06
to TiddlyWiki
One other thing I forgot to ask, does it work locally on your systems
using the download package ?

I appreciate all the testing, feedback and suggestions. Dawn.

Danny Collins

unread,
Mar 20, 2006, 5:29:58 AM3/20/06
to Tiddl...@googlegroups.com
actually after sending that email I tried on IE 6 - and it worked. So I was able to see it in action. FF 1.5 still didn't like it.

I am on  a Windows XP Home - SP2 system.

Didn't seem to work with FF 1.5.0 using JRE 1.5.0_03 b07. Scratch that - juts for grins I decicded to try the site again this morning using FF and it came up just fine. Strange.

Anyway - great work. Looks awesome.

It just seems that constraining it to that little box would make it difficult to use :)

Danny

garrett

unread,
Mar 21, 2006, 4:25:51 AM3/21/06
to TiddlyWiki
Sweet!

This could work really will with tags and links between tiddlers.
Here's what I'd love to see in a hypergraph layout:

The tags should be at the top level of the hierarchy, perhaps starting
with the "home" tag in the middle.
All subtags are tagged with tags higher than them in the tag hierarchy.
These connections are represented by solid directional hypergraph
lines of color (a), with arrows pointing from higher tags to lower
tags. Any tiddlers with a tag are connected to that tag with dotted
lines of color (a). The links between tiddlers are represented by
solid directional lines of color (b), with arrows pointing from the
tiddler with the link to the linked tiddler. That's it!

I think a hypergraph laid out this way would group the tiddlers
optimally and allow really great navigation. Is it possible?

Thoughts?

Also, for clicking... I think it would be best if clicking on a tag or
tiddler once centered it, while clicking twice opens it. (For me,
right now, double clicking centers it and single clicking does
nothing.)

This is exactly the sort of navigational tool I was hoping for, thanks!

-Garrett

dnagal

unread,
Mar 21, 2006, 4:26:46 PM3/21/06
to TiddlyWiki

garrett wrote:
> Sweet!
>
> This could work really will with tags and links between tiddlers.
> Here's what I'd love to see in a hypergraph layout:
>
> The tags should be at the top level of the hierarchy, perhaps starting
> with the "home" tag in the middle.
The Tag group node is a direct child of the root node (node).
Are you saying that you only want Tags in the hypergraph? Change the
options in the HypergraphOptions shadow tiddler.to only generate the
child group node you want. Or have I missed it?

> All subtags are tagged with tags higher than them in the tag hierarchy.
What is a subtag? Can you elaborate?

> These connections are represented by solid directional hypergraph
> lines of color (a), with arrows pointing from higher tags to lower
> tags. Any tiddlers with a tag are connected to that tag with dotted
> lines of color (a). The links between tiddlers are represented by
> solid directional lines of color (b), with arrows pointing from the
> tiddler with the link to the linked tiddler. That's it!
This graph could get quite complicated.
1. Each tag node would have n tiddler connections.
2. Each tiddler would have y linked tiddler connections.
3. Each tiddler would have x reference tiddler connections.
I'm not convinced that this structure will be usable.
It's probably better in an actual tiddler. Any suggestions where to
place the navigation hypergraph in the page?

> I think a hypergraph laid out this way would group the tiddlers
> optimally and allow really great navigation. Is it possible?
My dear, anything is possible (given infinite time, money, resources
...) :o). I need the subtags idea resolved and I'll start looking at
it.
> Thoughts?
Hmm ... write a cheque with a 1 and 6 zeros to me ?

> Also, for clicking... I think it would be best if clicking on a tag or
> tiddler once centered it, while clicking twice opens it. (For me,
> right now, double clicking centers it and single clicking does
> nothing.)
I totally agree with you about the click/double click behaviour but
this is a feature of hypergraph. I'm looking into the enabling
doubleclicking. So it's in progress.

> This is exactly the sort of navigational tool I was hoping for, thanks!
You are very welcome.:-)
> -Garrett

garrett

unread,
Mar 21, 2006, 9:08:01 PM3/21/06
to TiddlyWiki
> The Tag group node is a direct child of the root node (node).
> Are you saying that you only want Tags in the hypergraph? Change the

Yes, I'd like to use a hypergraph with only (a subset of) tags and
tiddlers.

> options in the HypergraphOptions shadow tiddler.to only generate the
> child group node you want. Or have I missed it?

> What is a subtag? Can you elaborate?

Sure. You can open or create any tiddler and give it content and tags.
And you can open a tag as tiddler. In that tag-tiddler you will
automatically see a list of tiddlers having that tag, as well as the
content of the tag-tiddler and the tags of the tag-tiddler. So you can
tag tiddlers AND you can tag tag-tiddlers. Another way of thinking
about it is that when a tiddler name is used as a tag, that tiddler
becomes a tag-tiddler.

So, this provides the capability to build a natural hierarchy.
Tag-tiddlers have tags corresponding to tag-tiddlers higher up in the
hierarchy. Each tiddler can be given the most appropriate tag -- sort
of like putting files in a folder in a filesystem. And this should
look really neat in hypergraph!

I've got this sort of hierarchy kludged together here, under the
"Contents" tab:
http://deferentialgeometry.org
And Simon Baird has recently put together a SiteMap macro to do this
hierarchical listing automatically.

Am I making sense?

> This graph could get quite complicated.
> 1. Each tag node would have n tiddler connections.
> 2. Each tiddler would have y linked tiddler connections.
> 3. Each tiddler would have x reference tiddler connections.

Yep.

> I'm not convinced that this structure will be usable.

It might be useful to be able to selectively turn off the display of
links between tiddlers, or the tags and tag links.

But I think a large set of interestingly connected tiddlers is exactly
where hypergraph would be useful! Until you get more than a few
hundred tiddlers, but then you're hitting other TW limitations.

If showing the links is too god-awful messy, it would still be neat to
have the tag hierarchy and tagged tiddlers.

> It's probably better in an actual tiddler. Any suggestions where to
> place the navigation hypergraph in the page?

I like it at the top. :) In the middle of the title bar -- heck, make
the title the "root" node, with all the tags that are not tagged linked
off of it.

If you want to get fancy you could provide a toggle switch to display
or not display it.

Can you set a hypergraph to "width:100%", so it spans the whole window?

> My dear, anything is possible (given infinite time, money, resources
> ...) :o). I need the subtags idea resolved and I'll start looking at
> it.

This is why I've always loved computer science.

> Hmm ... write a cheque with a 1 and 6 zeros to me ?

If only.

> I totally agree with you about the click/double click behaviour but
> this is a feature of hypergraph. I'm looking into the enabling
> doubleclicking. So it's in progress.

Cool.

> You are very welcome.:-)

Yip!

Reply all
Reply to author
Forward
0 new messages