Difference between revisions of "SimpleGraph"

From BITPlan Wiki
Jump to navigation Jump to search
Line 27: Line 27:
 
   digraph FileSystemGraphForSrcDirectoryOfSimpleGraphGitHubOpenSourceProject {
 
   digraph FileSystemGraphForSrcDirectoryOfSimpleGraphGitHubOpenSourceProject {
 
     rankdir="RL";
 
     rankdir="RL";
"src" [ label="src" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src" ]
+
    "src" [ label="src" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src"]
"src/main/java" [ label="java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java" ]
+
    "src/main/java" [ label="java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java"]
"src/test" [ label="test" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test" ]
+
    "src/test" [ label="test" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test"]
"src/test/java/com/bitplan/simplegraph" [ label="simplegraph" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan/simplegraph" ]
+
    "src/test/java/com/bitplan/simplegraph" [ label="simplegraph" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan/simplegraph"]
"src/main/java/com/bitplan/filesystem/FileNode.java" [ label="FileNode.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/filesystem/FileNode.java" ]
+
    "src/main/java/com/bitplan/filesystem/FileNode.java" [ label="FileNode.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/filesystem/FileNode.java"]
"src/main/java/com/bitplan/rythm/RythmContext.java" [ label="RythmContext.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/rythm/RythmContext.java" ]
+
    "src/main/java/com/bitplan/rythm/RythmContext.java" [ label="RythmContext.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/rythm/RythmContext.java"]
"src/main/rythm" [ label="rythm" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/rythm" ]
+
    "src/main/rythm" [ label="rythm" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/rythm"]
"src/test/java/com/bitplan/simplegraph/BaseTest.java" [ label="BaseTest.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan/simplegraph/BaseTest.java" ]
+
    "src/test/java/com/bitplan/simplegraph/BaseTest.java" [ label="BaseTest.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan/simplegraph/BaseTest.java"]
"src/etc" [ label="etc" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/etc" ]
+
    "src/etc" [ label="etc" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/etc"]
"src/main/java/com/bitplan/simplegraph/impl" [ label="impl" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph/impl" ]
+
    "src/main/java/com/bitplan/simplegraph/impl" [ label="impl" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph/impl"]
"src/main/rythm/test.rythm" [ label="test.rythm" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/rythm/test.rythm" ]
+
    "src/main/rythm/test.rythm" [ label="test.rythm" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/rythm/test.rythm"]
"src/main/java/com" [ label="com" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com" ]
+
    "src/main/java/com" [ label="com" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com"]
"src/test/java/com/bitplan/simplegraph/TestRythm.java" [ label="TestRythm.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan/simplegraph/TestRythm.java" ]
+
    "src/test/java/com/bitplan/simplegraph/TestRythm.java" [ label="TestRythm.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan/simplegraph/TestRythm.java"]
"src/main" [ label="main" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main" ]
+
    "src/main" [ label="main" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main"]
"src/main/java/com/bitplan/simplegraph/SimpleGraph.java" [ label="SimpleGraph.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph/SimpleGraph.java" ]
+
    "src/main/java/com/bitplan/simplegraph/SimpleGraph.java" [ label="SimpleGraph.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph/SimpleGraph.java"]
"src/main/rythm/graphvizTree.rythm" [ label="graphvizTree.rythm" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/rythm/graphvizTree.rythm" ]
+
    "src/main/rythm/graphvizTree.rythm" [ label="graphvizTree.rythm" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/rythm/graphvizTree.rythm"]
"src/test/java/com/bitplan/simplegraph/TestTinkerPop3.java" [ label="TestTinkerPop3.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan/simplegraph/TestTinkerPop3.java" ]
+
    "src/test/java/com/bitplan/simplegraph/TestTinkerPop3.java" [ label="TestTinkerPop3.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan/simplegraph/TestTinkerPop3.java"]
"src/test/air-routes-small.graphml" [ label="air-routes-small.graphml" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/air-routes-small.graphml" ]
+
    "src/test/air-routes-small.graphml" [ label="air-routes-small.graphml" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/air-routes-small.graphml"]
"src/main/java/com/bitplan" [ label="bitplan" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan" ]
+
    "src/main/java/com/bitplan" [ label="bitplan" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan"]
"src/main/java/com/bitplan/simplegraph/SimpleNode.java" [ label="SimpleNode.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph/SimpleNode.java" ]
+
    "src/main/java/com/bitplan/simplegraph/SimpleNode.java" [ label="SimpleNode.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph/SimpleNode.java"]
"src/test/java/com/bitplan/simplegraph/TestFileSystem.java" [ label="TestFileSystem.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan/simplegraph/TestFileSystem.java" ]
+
    "src/test/java/com/bitplan/simplegraph/TestFileSystem.java" [ label="TestFileSystem.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan/simplegraph/TestFileSystem.java"]
"src/test/java" [ label="java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java" ]
+
    "src/test/java" [ label="java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java"]
"src/main/java/com/bitplan/filesystem" [ label="filesystem" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/filesystem" ]
+
    "src/main/java/com/bitplan/filesystem" [ label="filesystem" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/filesystem"]
"src/main/java/com/bitplan/simplegraph/SimpleSystem.java" [ label="SimpleSystem.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph/SimpleSystem.java" ]
+
    "src/main/java/com/bitplan/simplegraph/SimpleSystem.java" [ label="SimpleSystem.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph/SimpleSystem.java"]
"src/test/java/com/bitplan/simplegraph/TestDebug.java" [ label="TestDebug.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan/simplegraph/TestDebug.java" ]
+
    "src/test/java/com/bitplan/simplegraph/TestDebug.java" [ label="TestDebug.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan/simplegraph/TestDebug.java"]
"src/test/air-routes.graphml" [ label="air-routes.graphml" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/air-routes.graphml" ]
+
    "src/test/air-routes.graphml" [ label="air-routes.graphml" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/air-routes.graphml"]
"src/main/java/com/bitplan/simplegraph" [ label="simplegraph" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph" ]
+
    "src/main/java/com/bitplan/simplegraph" [ label="simplegraph" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph"]
"src/main/java/com/bitplan/simplegraph/impl/SimpleSystemImpl.java" [ label="SimpleSystemImpl.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph/impl/SimpleSystemImpl.java" ]
+
    "src/main/java/com/bitplan/simplegraph/impl/SimpleSystemImpl.java" [ label="SimpleSystemImpl.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph/impl/SimpleSystemImpl.java"]
"src/test/java/com/bitplan/simplegraph/TestSuite.java" [ label="TestSuite.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan/simplegraph/TestSuite.java" ]
+
    "src/test/java/com/bitplan/simplegraph/TestSuite.java" [ label="TestSuite.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan/simplegraph/TestSuite.java"]
"src/test/java/com" [ label="com" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com" ]
+
    "src/test/java/com" [ label="com" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com"]
"src/main/java/com/bitplan/rythm" [ label="rythm" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/rythm" ]
+
    "src/main/java/com/bitplan/rythm" [ label="rythm" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/rythm"]
"src/main/java/com/bitplan/simplegraph/impl/SimpleNodeImpl.java" [ label="SimpleNodeImpl.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph/impl/SimpleNodeImpl.java" ]
+
    "src/main/java/com/bitplan/simplegraph/impl/SimpleNodeImpl.java" [ label="SimpleNodeImpl.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph/impl/SimpleNodeImpl.java"]
"src/etc/header.txt" [ label="header.txt" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/etc/header.txt" ]
+
    "src/etc/header.txt" [ label="header.txt" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/etc/header.txt"]
"src/test/java/com/bitplan" [ label="bitplan" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan" ]
+
    "src/test/java/com/bitplan" [ label="bitplan" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/test/java/com/bitplan"]
"src/main/java/com/bitplan/filesystem/FileSystem.java" [ label="FileSystem.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/filesystem/FileSystem.java" ]
+
    "src/main/java/com/bitplan/filesystem/FileSystem.java" [ label="FileSystem.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/filesystem/FileSystem.java"]
"src/main/java/com/bitplan/simplegraph/impl/SimpleGraphImpl.java" [ label="SimpleGraphImpl.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph/impl/SimpleGraphImpl.java" ]
+
    "src/main/java/com/bitplan/simplegraph/impl/SimpleGraphImpl.java" [ label="SimpleGraphImpl.java" URL="https://github.com/BITPlan/com.bitplan.simplegraph/blob/master/src/main/java/com/bitplan/simplegraph/impl/SimpleGraphImpl.java"]
"src/etc/header.txt"->"src/etc" [label="parent"]
+
    "src/etc/header.txt" -> "src/etc" [ label="parent"]
"src/main/java/com/bitplan/simplegraph/impl/SimpleGraphImpl.java"->"src/main/java/com/bitplan/simplegraph/impl" [label="parent"]
+
    "src/main/java/com/bitplan/simplegraph/impl/SimpleGraphImpl.java" -> "src/main/java/com/bitplan/simplegraph/impl" [ label="parent"]
"src/test"->"src" [label="parent"]
+
    "src/test" -> "src" [ label="parent"]
"src/main/java"->"src/main" [label="parent"]
+
    "src/main/java" -> "src/main" [ label="parent"]
"src/main/java/com/bitplan/rythm/RythmContext.java"->"src/main/java/com/bitplan/rythm" [label="parent"]
+
    "src/main/java/com/bitplan/rythm/RythmContext.java" -> "src/main/java/com/bitplan/rythm" [ label="parent"]
"src/etc"->"src" [label="parent"]
+
    "src/etc" -> "src" [ label="parent"]
"src/main/rythm"->"src/main" [label="parent"]
+
    "src/main/rythm" -> "src/main" [ label="parent"]
"src/main/rythm/test.rythm"->"src/main/rythm" [label="parent"]
+
    "src/main/rythm/test.rythm" -> "src/main/rythm" [ label="parent"]
"src/main"->"src" [label="parent"]
+
    "src/main" -> "src" [ label="parent"]
"src/main/java/com"->"src/main/java" [label="parent"]
+
    "src/main/java/com" -> "src/main/java" [ label="parent"]
"src/main/rythm/graphvizTree.rythm"->"src/main/rythm" [label="parent"]
+
    "src/main/rythm/graphvizTree.rythm" -> "src/main/rythm" [ label="parent"]
"src/test/air-routes-small.graphml"->"src/test" [label="parent"]
+
    "src/test/air-routes-small.graphml" -> "src/test" [ label="parent"]
"src/main/java/com/bitplan"->"src/main/java/com" [label="parent"]
+
    "src/main/java/com/bitplan" -> "src/main/java/com" [ label="parent"]
"src/test/java"->"src/test" [label="parent"]
+
    "src/test/java" -> "src/test" [ label="parent"]
"src/main/java/com/bitplan/filesystem"->"src/main/java/com/bitplan" [label="parent"]
+
    "src/main/java/com/bitplan/filesystem" -> "src/main/java/com/bitplan" [ label="parent"]
"src/test/air-routes.graphml"->"src/test" [label="parent"]
+
    "src/test/air-routes.graphml" -> "src/test" [ label="parent"]
"src/main/java/com/bitplan/simplegraph"->"src/main/java/com/bitplan" [label="parent"]
+
    "src/main/java/com/bitplan/simplegraph" -> "src/main/java/com/bitplan" [ label="parent"]
"src/test/java/com"->"src/test/java" [label="parent"]
+
    "src/test/java/com" -> "src/test/java" [ label="parent"]
"src/main/java/com/bitplan/rythm"->"src/main/java/com/bitplan" [label="parent"]
+
    "src/main/java/com/bitplan/rythm" -> "src/main/java/com/bitplan" [ label="parent"]
"src/test/java/com/bitplan"->"src/test/java/com" [label="parent"]
+
    "src/test/java/com/bitplan" -> "src/test/java/com" [ label="parent"]
"src/main/java/com/bitplan/filesystem/FileSystem.java"->"src/main/java/com/bitplan/filesystem" [label="parent"]
+
    "src/main/java/com/bitplan/filesystem/FileSystem.java" -> "src/main/java/com/bitplan/filesystem" [ label="parent"]
"src/test/java/com/bitplan/simplegraph"->"src/test/java/com/bitplan" [label="parent"]
+
    "src/test/java/com/bitplan/simplegraph" -> "src/test/java/com/bitplan" [ label="parent"]
"src/main/java/com/bitplan/filesystem/FileNode.java"->"src/main/java/com/bitplan/filesystem" [label="parent"]
+
    "src/main/java/com/bitplan/filesystem/FileNode.java" -> "src/main/java/com/bitplan/filesystem" [ label="parent"]
"src/test/java/com/bitplan/simplegraph/BaseTest.java"->"src/test/java/com/bitplan/simplegraph" [label="parent"]
+
    "src/test/java/com/bitplan/simplegraph/BaseTest.java" -> "src/test/java/com/bitplan/simplegraph" [ label="parent"]
"src/main/java/com/bitplan/simplegraph/impl"->"src/main/java/com/bitplan/simplegraph" [label="parent"]
+
    "src/main/java/com/bitplan/simplegraph/impl" -> "src/main/java/com/bitplan/simplegraph" [ label="parent"]
"src/test/java/com/bitplan/simplegraph/TestRythm.java"->"src/test/java/com/bitplan/simplegraph" [label="parent"]
+
    "src/test/java/com/bitplan/simplegraph/TestRythm.java" -> "src/test/java/com/bitplan/simplegraph" [ label="parent"]
"src/main/java/com/bitplan/simplegraph/SimpleGraph.java"->"src/main/java/com/bitplan/simplegraph" [label="parent"]
+
    "src/main/java/com/bitplan/simplegraph/SimpleGraph.java" -> "src/main/java/com/bitplan/simplegraph" [ label="parent"]
"src/test/java/com/bitplan/simplegraph/TestTinkerPop3.java"->"src/test/java/com/bitplan/simplegraph" [label="parent"]
+
    "src/test/java/com/bitplan/simplegraph/TestTinkerPop3.java" -> "src/test/java/com/bitplan/simplegraph" [ label="parent"]
"src/main/java/com/bitplan/simplegraph/SimpleNode.java"->"src/main/java/com/bitplan/simplegraph" [label="parent"]
+
    "src/main/java/com/bitplan/simplegraph/SimpleNode.java" -> "src/main/java/com/bitplan/simplegraph" [ label="parent"]
"src/test/java/com/bitplan/simplegraph/TestFileSystem.java"->"src/test/java/com/bitplan/simplegraph" [label="parent"]
+
    "src/test/java/com/bitplan/simplegraph/TestFileSystem.java" -> "src/test/java/com/bitplan/simplegraph" [ label="parent"]
"src/main/java/com/bitplan/simplegraph/SimpleSystem.java"->"src/main/java/com/bitplan/simplegraph" [label="parent"]
+
    "src/main/java/com/bitplan/simplegraph/SimpleSystem.java" -> "src/main/java/com/bitplan/simplegraph" [ label="parent"]
"src/test/java/com/bitplan/simplegraph/TestDebug.java"->"src/test/java/com/bitplan/simplegraph" [label="parent"]
+
    "src/test/java/com/bitplan/simplegraph/TestDebug.java" -> "src/test/java/com/bitplan/simplegraph" [ label="parent"]
"src/main/java/com/bitplan/simplegraph/impl/SimpleSystemImpl.java"->"src/main/java/com/bitplan/simplegraph/impl" [label="parent"]
+
    "src/main/java/com/bitplan/simplegraph/impl/SimpleSystemImpl.java" -> "src/main/java/com/bitplan/simplegraph/impl" [ label="parent"]
"src/test/java/com/bitplan/simplegraph/TestSuite.java"->"src/test/java/com/bitplan/simplegraph" [label="parent"]
+
    "src/test/java/com/bitplan/simplegraph/TestSuite.java" -> "src/test/java/com/bitplan/simplegraph" [ label="parent"]
"src/main/java/com/bitplan/simplegraph/impl/SimpleNodeImpl.java"->"src/main/java/com/bitplan/simplegraph/impl" [label="parent"]
+
    "src/main/java/com/bitplan/simplegraph/impl/SimpleNodeImpl.java" -> "src/main/java/com/bitplan/simplegraph/impl" [ label="parent"]
 
   }
 
   }
 
</graphviz>
 
</graphviz>

Revision as of 18:01, 13 January 2018

SimpleGraph

SimpleGraph is an open source project that allows to wrap Systems APIs in a way that graph algorithms and storage can be applied. As an implementation Apache Gremlin/Tinkerpop is used.

FileSystem example

Basics

A Filesystem is a graph. It consists of File and Directory nodes

There is parent-child relation between Directories and their subfiles. A Directory may contain files and directories. A file is always leaf of the the tree. A directory may be a leaf if it's empty. In our example we'll go from directories to the containing elements via the "files" edge/relation and from the files/directories to their parents via the "parent" edge.

Example goal

We'd like to analyze some part of a filesystem and we'll use the "src" directory of the SimpleGraph project's source code as a starting point.

The graph below shows the source code structure for the SimpleGraph project with the root of the tree being the "src" directory. The nodes are clickable and will lead you to the corresponding file representation on github.

Example FileSystem Graph or "src" directory

explanation

creating the graph

This graph visualization has been produced with the following Java lines which make sure that the "src" Directory can be handled as a gremlin graph:

 // create a new FileSystem acces supplying the result as a SimpleSystem API
 SimpleSystem fs=new FileSystem();  
 // connect to this system with no extra information (e.g. no credentials) and move to the "src" node 
 SimpleNode start = fs.connect("").moveTo("src");
 // do gremlin style out traversals recusively to any depth 
 start.recursiveOut("files",Integer.MAX_VALUE);

converting the graph to graphviz

The graph is now available and can be traversed to create a graphviz version of it. We use the Template:Rythm template engine to do so. Within Rythm you can use Java code.


In Internet Explorer versions up to 8, things inside the canvas are inaccessible!