diff --git a/.classpath b/.classpath index c93b44b06..16e62545a 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,6 @@ - + diff --git a/build.xml b/build.xml index a27634265..ed6396fb8 100644 --- a/build.xml +++ b/build.xml @@ -215,6 +215,7 @@ diff --git a/htroot/env/terminal.css b/htroot/env/terminal.css new file mode 100755 index 000000000..4b80b53fd --- /dev/null +++ b/htroot/env/terminal.css @@ -0,0 +1,174 @@ +/* Hack for IE to display the margin on #right properly */ +* html #right {width:597px;} + +/* Body Styles */ + +body +{ +margin: 0px; +background: #3d3d3d; +font-size: 11px; +color: #ffffff; +line-height: 1.5em; +font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif +} + +p +{ +margin: 5px 0 5px; +padding: 0; +} + +h1 +{ +margin: 1px 0 0 0; +padding-bottom: 2px; +color: #239AFF; +font-size: 10px; +border-bottom: 1px solid #239AFF; +background: inherit; +} + +a{color: #fff; text-decoration: none; background: inherit;} +a:hover {color: #EA672E; text-decoration: none; background: inherit;} + +ul +{ +color: #fff; +list-style-type: none; +padding-left: 10px; +margin: 0 0 5px; +background: inherit; +} + +li +{ +font-weight: normal; +text-transform: lowercase; +padding: 0; +} + +blockquote +{ +width: 30em; +margin: 0 0 0 10px; +padding: 5px; +border-left: 1px solid #666 +} + +/* Main box surrounding everything*/ + +#outer +{ +margin: 0 auto; +width: auto; +overflow:auto; +background-color: #000; +color: #fff; +} + +/* Below is everything inside of #outer*/ + +/* The path box e.g. /root/path */ + +#location +{ +margin: 5px 5px 0; +padding: 0 2px 0 2px; +background: inherit; +color:#666; +font-size: 10px; +} + +/* The left column (nav) */ + +#left +{ +margin: 5px 5px 0; +padding: 0 2px 0 2px; +background: inherit; +float: left; +width: 468px; +} + +/* The right column (content) */ + +#right +{ +margin: 5px 5px 0; +padding: 0 2px 0 2px; +float: right; +width: 680px; +} + +#right a{color: #EA672E; text-decoration: none; background-color:inherit;} + +/* Div classes Styles */ + +div .bars /* These are the bars that are on top of the main box and navs */ +{ +height: 3px; +background-color: #239AFF; +margin-top: 3px; +margin-bottom: 3px; +color: inherit; +font-size: 0; +} + +.navouter +{ +width: auto; +margin: 0; +background-color: #000; +border: 1px dotted #666; +color: inherit; +margin-bottom: 10px; +} + +.navheader +{ +background-color: #666; +color: inherit; +width: auto; +padding: 2px; +margin-bottom: 5px; +text-align: center; +font-weight: bold; +} + +.navcontent +{ +padding: 5px; +margin:0 0 0 3px; +color: #fff; +font-size:11px; +font-weight:bold; +background-color: #000; +overflow: hidden; +} + +/* This is for inserting code */ +.code +{ +margin: 0 0 0 0; +padding: 3px; +width: 326px; +font-family: helvetica, monospace; +font-size: 10px; +line-height: 90%; +text-transform: lowercase; +background-color: #333; +color: inherit; +border: 1px dotted #666; +} + +.htimeauth +{ +display:block; +margin: 0; +padding: 0; +text-align:left; +font-size: 10px; +color: #666; +background-color: inherit; +} \ No newline at end of file diff --git a/htroot/processing/domaingraph/applet/domaingraph.jar b/htroot/processing/domaingraph/applet/domaingraph.jar new file mode 100755 index 000000000..9cb521ca7 Binary files /dev/null and b/htroot/processing/domaingraph/applet/domaingraph.jar differ diff --git a/htroot/processing/domaingraph/applet/domaingraph.java b/htroot/processing/domaingraph/applet/domaingraph.java new file mode 100755 index 000000000..98f521cf2 --- /dev/null +++ b/htroot/processing/domaingraph/applet/domaingraph.java @@ -0,0 +1,229 @@ +import processing.core.*; import traer.physics.*; import traer.animation.*; import processing.net.*; import java.applet.*; import java.awt.*; import java.awt.image.*; import java.awt.event.*; import java.io.*; import java.net.*; import java.text.*; import java.util.*; import java.util.zip.*; import javax.sound.midi.*; import javax.sound.midi.spi.*; import javax.sound.sampled.*; import javax.sound.sampled.spi.*; import java.util.regex.*; import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.dom.*; import javax.xml.transform.sax.*; import javax.xml.transform.stream.*; import org.xml.sax.*; import org.xml.sax.ext.*; import org.xml.sax.helpers.*; public class domaingraph extends PApplet {// Domain visualization graph for YaCy +// by Michael Christen +// +// this applet uses code and the physics engine from +// http://www.cs.princeton.edu/~traer/physics/ +// from Jeffrey Traer Bernstein +// redistribution is granted according to forum posting in +// http://processing.org/discourse/yabb_beta/YaBB.cgi?board=os_libraries_tools;action=display;num=1139193613 + + + + + +final float NODE_SIZE = 6; +final float EDGE_LENGTH = 50; +final float EDGE_STRENGTH = 0.01f; +final float SPACER_STRENGTH = 10; + +ParticleSystem physics; +Smoother3D centroid; +PFont font; +Client myClient; +Particle center0, center1; // two gravity centers to support object ordering for non-quadratic fields +String parsingHostName = ""; +String parsingHostID = ""; +HashMap nodes = new HashMap(); // map that holds host objects + +public void setup() { + + String[] fontList = PFont.list(); + //println(fontList); + font = createFont(fontList[0], 32); //just take any, should be mostly Arial + textFont(font, 12); + + size(660, 400); + smooth(); + frameRate( 24 ); + strokeWeight( 2 ); + ellipseMode( CENTER ); + + physics = new ParticleSystem( 0, 0.25f ); + centroid = new Smoother3D( 0.8f ); + + initializePhysics(); + initRequest(); +} + +public void initRequest() { + myClient = new Client(this, "localhost", 8080); + myClient.write("GET /xml/webstructure.xml HTTP/1.1\n"); + myClient.write("Host: localhost\n\n"); +} + +public void processRequestResponse() { + if (myClient.available() > 0) { + String line = myClient.readStringUntil((byte) 10); + //println("Line: " + line); + if (line == null) line = ""; else line = line.trim(); + if (line.startsWith(" 0) { + z = l[i].substring(p + 1).trim(); + if (z.charAt(0) == '"') z = z.substring(1); + if (z.charAt(z.length() - 1) == '"') z = z.substring(0, z.length() - 1); + map.put(l[i].substring(0, p), z); + } + } + return map; +} + +public void processDomain(HashMap props) { + //println("Domain: " + props.toString()); + parsingHostName = (String) props.get("host"); if (parsingHostName == null) parsingHostName = ""; + parsingHostID = (String) props.get("id"); if (parsingHostID == null) parsingHostID = ""; + host h = new host(parsingHostName, physics.makeParticle(1.0f, random(0, EDGE_LENGTH * 30), random(- EDGE_LENGTH * 2, EDGE_LENGTH * 2), 0)); + nodes.put(parsingHostID, h); + addAttraction(h.node); +} + +public void processCitation(HashMap props) { + //println("Citation: " + props.toString()); + String host = (String) props.get("host"); if (host == null) host = ""; + String id = (String) props.get("id"); if (id == null) id = ""; + int count = 0; + try { + String counts = (String) props.get("count"); if (counts != null) count = Integer.parseInt(counts); + } catch (NumberFormatException e) {} + // find the two nodes that have a relation + host h = (host) nodes.get(id); + if (h == null) return; // host is not known TODO: store these and create relation later + host p = (host) nodes.get(parsingHostID); // this should be successful + addRelation(h.node, p.node); +} + +public void draw() { + processRequestResponse(); + + physics.tick( 1.0f ); + if (physics.numberOfParticles() > 1) updateCentroid(); + centroid.tick(); + + background( 0 ); + translate( width/2 , height/2 ); + scale( centroid.z() ); + translate( -centroid.x(), -centroid.y() ); + + drawNetwork(); +} + +public void drawNetwork() { + fill( 100, 255, 100 ); + + // draw vertices + noStroke(); + String name; + Iterator j = nodes.values().iterator(); + host h; + while (j.hasNext()) { + h = (host) j.next(); + Particle v = h.node; + ellipse(v.position().x(), v.position().y(), NODE_SIZE, NODE_SIZE); + name = h.name; + text(name, v.position().x() - (name.length() * 26 / 10), v.position().y() + 14); + } + + // draw center + /* + ellipse( center0.position().x(), center0.position().y(), NODE_SIZE * 2, NODE_SIZE * 2 ); + name = "Center0"; + text(name, center0.position().x() - (name.length() * 26 / 10), center0.position().y() + 14); + ellipse( center1.position().x(), center1.position().y(), NODE_SIZE * 2, NODE_SIZE * 2 ); + name = "Center1"; + text(name, center1.position().x() - (name.length() * 26 / 10), center1.position().y() + 14); + */ + + // draw edges + stroke( 160 ); + beginShape( LINES ); + for ( int i = 0; i < physics.numberOfSprings(); ++i ) { + Spring e = physics.getSpring( i ); + Particle a = e.getOneEnd(); + Particle b = e.getTheOtherEnd(); + vertex( a.position().x(), a.position().y() ); + vertex( b.position().x(), b.position().y() ); + } + endShape(); +} + +public void keyPressed() { + if ( key == 'c' ) { + initializePhysics(); + return; + } + + if ( key == ' ' ) { + Particle p = physics.makeParticle(); + addRelation(p, physics.getParticle( (int) random( 0, physics.numberOfParticles()-1) )); + addAttraction(p); + return; + } +} + +public void updateCentroid() { + float + xMax = Float.NEGATIVE_INFINITY, + xMin = Float.POSITIVE_INFINITY, + yMin = Float.POSITIVE_INFINITY, + yMax = Float.NEGATIVE_INFINITY; + + for ( int i = 0; i < physics.numberOfParticles(); ++i ) { + Particle p = physics.getParticle( i ); + xMax = max( xMax, p.position().x() ); + xMin = min( xMin, p.position().x() ); + yMin = min( yMin, p.position().y() ); + yMax = max( yMax, p.position().y() ); + } + float deltaX = xMax-xMin; + float deltaY = yMax-yMin; + if ( deltaY > deltaX ) + centroid.setTarget( xMin + 0.5f*deltaX, yMin +0.5f*deltaY, height/(deltaY+50) ); + else + centroid.setTarget( xMin + 0.5f*deltaX, yMin +0.5f*deltaY, width/(deltaX+50) ); +} + +public void initializePhysics() { + physics.clear(); + center0 = physics.makeParticle(1.0f, 0, 0, 0); + center0.makeFixed(); + center1 = physics.makeParticle(1.0f, EDGE_LENGTH * 30, 0, 0); + center1.makeFixed(); + centroid.setValue( 0, 0, 1.0f ); +} + +public void addAttraction(Particle p) { + physics.makeAttraction(center0, p, 5000.0f, 3 * EDGE_LENGTH); + physics.makeAttraction(center1, p, 5000.0f, 3 * EDGE_LENGTH); + + // spacers + for ( int i = 0; i < physics.numberOfParticles(); ++i ) { + Particle q = physics.getParticle( i ); + if (p != q) physics.makeAttraction( p, q, -SPACER_STRENGTH, 20); + } +} + +public void addRelation(Particle p, Particle other) { + physics.makeSpring( p, other, EDGE_STRENGTH, EDGE_STRENGTH, EDGE_LENGTH ); + //p.moveTo( q.position().x() + random( -1, 1 ), q.position().y() + random( -1, 1 ), 0 ); +} + +static class host { + String name; + Particle node; + public host(String name, Particle node) { + this.name = name; + this.node = node; + } +} + + static public void main(String args[]) { PApplet.main(new String[] { "domaingraph" }); }} \ No newline at end of file diff --git a/htroot/processing/domaingraph/applet/domaingraph.pde b/htroot/processing/domaingraph/applet/domaingraph.pde new file mode 100755 index 000000000..e79f083e7 --- /dev/null +++ b/htroot/processing/domaingraph/applet/domaingraph.pde @@ -0,0 +1,227 @@ +// Domain visualization graph for YaCy +// by Michael Christen +// +// this applet uses code and the physics engine from +// http://www.cs.princeton.edu/~traer/physics/ +// from Jeffrey Traer Bernstein +// redistribution is granted according to forum posting in +// http://processing.org/discourse/yabb_beta/YaBB.cgi?board=os_libraries_tools;action=display;num=1139193613 + +import traer.physics.*; +import traer.animation.*; +import processing.net.*; + +final float NODE_SIZE = 6; +final float EDGE_LENGTH = 50; +final float EDGE_STRENGTH = 0.01; +final float SPACER_STRENGTH = 10; + +ParticleSystem physics; +Smoother3D centroid; +PFont font; +Client myClient; +Particle center0, center1; // two gravity centers to support object ordering for non-quadratic fields +String parsingHostName = ""; +String parsingHostID = ""; +HashMap nodes = new HashMap(); // map that holds host objects + +void setup() { + + String[] fontList = PFont.list(); + //println(fontList); + font = createFont(fontList[0], 32); //just take any, should be mostly Arial + textFont(font, 12); + + size(660, 400); + smooth(); + frameRate( 24 ); + strokeWeight( 2 ); + ellipseMode( CENTER ); + + physics = new ParticleSystem( 0, 0.25 ); + centroid = new Smoother3D( 0.8 ); + + initializePhysics(); + initRequest(); +} + +void initRequest() { + myClient = new Client(this, "localhost", 8080); + myClient.write("GET /xml/webstructure.xml HTTP/1.1\n"); + myClient.write("Host: localhost\n\n"); +} + +void processRequestResponse() { + if (myClient.available() > 0) { + String line = myClient.readStringUntil((byte) 10); + //println("Line: " + line); + if (line == null) line = ""; else line = line.trim(); + if (line.startsWith(" 0) { + z = l[i].substring(p + 1).trim(); + if (z.charAt(0) == '"') z = z.substring(1); + if (z.charAt(z.length() - 1) == '"') z = z.substring(0, z.length() - 1); + map.put(l[i].substring(0, p), z); + } + } + return map; +} + +void processDomain(HashMap props) { + //println("Domain: " + props.toString()); + parsingHostName = (String) props.get("host"); if (parsingHostName == null) parsingHostName = ""; + parsingHostID = (String) props.get("id"); if (parsingHostID == null) parsingHostID = ""; + host h = new host(parsingHostName, physics.makeParticle(1.0, random(0, EDGE_LENGTH * 30), random(- EDGE_LENGTH * 2, EDGE_LENGTH * 2), 0)); + nodes.put(parsingHostID, h); + addAttraction(h.node); +} + +void processCitation(HashMap props) { + //println("Citation: " + props.toString()); + String host = (String) props.get("host"); if (host == null) host = ""; + String id = (String) props.get("id"); if (id == null) id = ""; + int count = 0; + try { + String counts = (String) props.get("count"); if (counts != null) count = Integer.parseInt(counts); + } catch (NumberFormatException e) {} + // find the two nodes that have a relation + host h = (host) nodes.get(id); + if (h == null) return; // host is not known TODO: store these and create relation later + host p = (host) nodes.get(parsingHostID); // this should be successful + addRelation(h.node, p.node); +} + +void draw() { + processRequestResponse(); + + physics.tick( 1.0 ); + if (physics.numberOfParticles() > 1) updateCentroid(); + centroid.tick(); + + background( 0 ); + translate( width/2 , height/2 ); + scale( centroid.z() ); + translate( -centroid.x(), -centroid.y() ); + + drawNetwork(); +} + +void drawNetwork() { + fill( 100, 255, 100 ); + + // draw vertices + noStroke(); + String name; + Iterator j = nodes.values().iterator(); + host h; + while (j.hasNext()) { + h = (host) j.next(); + Particle v = h.node; + ellipse(v.position().x(), v.position().y(), NODE_SIZE, NODE_SIZE); + name = h.name; + text(name, v.position().x() - (name.length() * 26 / 10), v.position().y() + 14); + } + + // draw center + /* + ellipse( center0.position().x(), center0.position().y(), NODE_SIZE * 2, NODE_SIZE * 2 ); + name = "Center0"; + text(name, center0.position().x() - (name.length() * 26 / 10), center0.position().y() + 14); + ellipse( center1.position().x(), center1.position().y(), NODE_SIZE * 2, NODE_SIZE * 2 ); + name = "Center1"; + text(name, center1.position().x() - (name.length() * 26 / 10), center1.position().y() + 14); + */ + + // draw edges + stroke( 160 ); + beginShape( LINES ); + for ( int i = 0; i < physics.numberOfSprings(); ++i ) { + Spring e = physics.getSpring( i ); + Particle a = e.getOneEnd(); + Particle b = e.getTheOtherEnd(); + vertex( a.position().x(), a.position().y() ); + vertex( b.position().x(), b.position().y() ); + } + endShape(); +} + +void keyPressed() { + if ( key == 'c' ) { + initializePhysics(); + return; + } + + if ( key == ' ' ) { + Particle p = physics.makeParticle(); + addRelation(p, physics.getParticle( (int) random( 0, physics.numberOfParticles()-1) )); + addAttraction(p); + return; + } +} + +void updateCentroid() { + float + xMax = Float.NEGATIVE_INFINITY, + xMin = Float.POSITIVE_INFINITY, + yMin = Float.POSITIVE_INFINITY, + yMax = Float.NEGATIVE_INFINITY; + + for ( int i = 0; i < physics.numberOfParticles(); ++i ) { + Particle p = physics.getParticle( i ); + xMax = max( xMax, p.position().x() ); + xMin = min( xMin, p.position().x() ); + yMin = min( yMin, p.position().y() ); + yMax = max( yMax, p.position().y() ); + } + float deltaX = xMax-xMin; + float deltaY = yMax-yMin; + if ( deltaY > deltaX ) + centroid.setTarget( xMin + 0.5*deltaX, yMin +0.5*deltaY, height/(deltaY+50) ); + else + centroid.setTarget( xMin + 0.5*deltaX, yMin +0.5*deltaY, width/(deltaX+50) ); +} + +void initializePhysics() { + physics.clear(); + center0 = physics.makeParticle(1.0, 0, 0, 0); + center0.makeFixed(); + center1 = physics.makeParticle(1.0, EDGE_LENGTH * 30, 0, 0); + center1.makeFixed(); + centroid.setValue( 0, 0, 1.0 ); +} + +void addAttraction(Particle p) { + physics.makeAttraction(center0, p, 5000.0, 3 * EDGE_LENGTH); + physics.makeAttraction(center1, p, 5000.0, 3 * EDGE_LENGTH); + + // spacers + for ( int i = 0; i < physics.numberOfParticles(); ++i ) { + Particle q = physics.getParticle( i ); + if (p != q) physics.makeAttraction( p, q, -SPACER_STRENGTH, 20); + } +} + +void addRelation(Particle p, Particle other) { + physics.makeSpring( p, other, EDGE_STRENGTH, EDGE_STRENGTH, EDGE_LENGTH ); + //p.moveTo( q.position().x() + random( -1, 1 ), q.position().y() + random( -1, 1 ), 0 ); +} + +static class host { + String name; + Particle node; + public host(String name, Particle node) { + this.name = name; + this.node = node; + } +} diff --git a/htroot/processing/domaingraph/applet/index.html b/htroot/processing/domaingraph/applet/index.html new file mode 100755 index 000000000..6aac5de48 --- /dev/null +++ b/htroot/processing/domaingraph/applet/index.html @@ -0,0 +1,104 @@ + + + + + + + domaingraph : Built with Processing + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + This browser does not have a Java Plug-in. +
+ + Get the latest Java Plug-in here. + +
+

+ +
+ + +
+ + +
+ +

+ +

+ +

+ Source code: domaingraph +

+ +

+ Built with Processing +

+
+ + diff --git a/htroot/processing/domaingraph/applet/loading.gif b/htroot/processing/domaingraph/applet/loading.gif new file mode 100755 index 000000000..1ddae5089 Binary files /dev/null and b/htroot/processing/domaingraph/applet/loading.gif differ diff --git a/htroot/processing/domaingraph/domaingraph.pde b/htroot/processing/domaingraph/domaingraph.pde new file mode 100755 index 000000000..e79f083e7 --- /dev/null +++ b/htroot/processing/domaingraph/domaingraph.pde @@ -0,0 +1,227 @@ +// Domain visualization graph for YaCy +// by Michael Christen +// +// this applet uses code and the physics engine from +// http://www.cs.princeton.edu/~traer/physics/ +// from Jeffrey Traer Bernstein +// redistribution is granted according to forum posting in +// http://processing.org/discourse/yabb_beta/YaBB.cgi?board=os_libraries_tools;action=display;num=1139193613 + +import traer.physics.*; +import traer.animation.*; +import processing.net.*; + +final float NODE_SIZE = 6; +final float EDGE_LENGTH = 50; +final float EDGE_STRENGTH = 0.01; +final float SPACER_STRENGTH = 10; + +ParticleSystem physics; +Smoother3D centroid; +PFont font; +Client myClient; +Particle center0, center1; // two gravity centers to support object ordering for non-quadratic fields +String parsingHostName = ""; +String parsingHostID = ""; +HashMap nodes = new HashMap(); // map that holds host objects + +void setup() { + + String[] fontList = PFont.list(); + //println(fontList); + font = createFont(fontList[0], 32); //just take any, should be mostly Arial + textFont(font, 12); + + size(660, 400); + smooth(); + frameRate( 24 ); + strokeWeight( 2 ); + ellipseMode( CENTER ); + + physics = new ParticleSystem( 0, 0.25 ); + centroid = new Smoother3D( 0.8 ); + + initializePhysics(); + initRequest(); +} + +void initRequest() { + myClient = new Client(this, "localhost", 8080); + myClient.write("GET /xml/webstructure.xml HTTP/1.1\n"); + myClient.write("Host: localhost\n\n"); +} + +void processRequestResponse() { + if (myClient.available() > 0) { + String line = myClient.readStringUntil((byte) 10); + //println("Line: " + line); + if (line == null) line = ""; else line = line.trim(); + if (line.startsWith(" 0) { + z = l[i].substring(p + 1).trim(); + if (z.charAt(0) == '"') z = z.substring(1); + if (z.charAt(z.length() - 1) == '"') z = z.substring(0, z.length() - 1); + map.put(l[i].substring(0, p), z); + } + } + return map; +} + +void processDomain(HashMap props) { + //println("Domain: " + props.toString()); + parsingHostName = (String) props.get("host"); if (parsingHostName == null) parsingHostName = ""; + parsingHostID = (String) props.get("id"); if (parsingHostID == null) parsingHostID = ""; + host h = new host(parsingHostName, physics.makeParticle(1.0, random(0, EDGE_LENGTH * 30), random(- EDGE_LENGTH * 2, EDGE_LENGTH * 2), 0)); + nodes.put(parsingHostID, h); + addAttraction(h.node); +} + +void processCitation(HashMap props) { + //println("Citation: " + props.toString()); + String host = (String) props.get("host"); if (host == null) host = ""; + String id = (String) props.get("id"); if (id == null) id = ""; + int count = 0; + try { + String counts = (String) props.get("count"); if (counts != null) count = Integer.parseInt(counts); + } catch (NumberFormatException e) {} + // find the two nodes that have a relation + host h = (host) nodes.get(id); + if (h == null) return; // host is not known TODO: store these and create relation later + host p = (host) nodes.get(parsingHostID); // this should be successful + addRelation(h.node, p.node); +} + +void draw() { + processRequestResponse(); + + physics.tick( 1.0 ); + if (physics.numberOfParticles() > 1) updateCentroid(); + centroid.tick(); + + background( 0 ); + translate( width/2 , height/2 ); + scale( centroid.z() ); + translate( -centroid.x(), -centroid.y() ); + + drawNetwork(); +} + +void drawNetwork() { + fill( 100, 255, 100 ); + + // draw vertices + noStroke(); + String name; + Iterator j = nodes.values().iterator(); + host h; + while (j.hasNext()) { + h = (host) j.next(); + Particle v = h.node; + ellipse(v.position().x(), v.position().y(), NODE_SIZE, NODE_SIZE); + name = h.name; + text(name, v.position().x() - (name.length() * 26 / 10), v.position().y() + 14); + } + + // draw center + /* + ellipse( center0.position().x(), center0.position().y(), NODE_SIZE * 2, NODE_SIZE * 2 ); + name = "Center0"; + text(name, center0.position().x() - (name.length() * 26 / 10), center0.position().y() + 14); + ellipse( center1.position().x(), center1.position().y(), NODE_SIZE * 2, NODE_SIZE * 2 ); + name = "Center1"; + text(name, center1.position().x() - (name.length() * 26 / 10), center1.position().y() + 14); + */ + + // draw edges + stroke( 160 ); + beginShape( LINES ); + for ( int i = 0; i < physics.numberOfSprings(); ++i ) { + Spring e = physics.getSpring( i ); + Particle a = e.getOneEnd(); + Particle b = e.getTheOtherEnd(); + vertex( a.position().x(), a.position().y() ); + vertex( b.position().x(), b.position().y() ); + } + endShape(); +} + +void keyPressed() { + if ( key == 'c' ) { + initializePhysics(); + return; + } + + if ( key == ' ' ) { + Particle p = physics.makeParticle(); + addRelation(p, physics.getParticle( (int) random( 0, physics.numberOfParticles()-1) )); + addAttraction(p); + return; + } +} + +void updateCentroid() { + float + xMax = Float.NEGATIVE_INFINITY, + xMin = Float.POSITIVE_INFINITY, + yMin = Float.POSITIVE_INFINITY, + yMax = Float.NEGATIVE_INFINITY; + + for ( int i = 0; i < physics.numberOfParticles(); ++i ) { + Particle p = physics.getParticle( i ); + xMax = max( xMax, p.position().x() ); + xMin = min( xMin, p.position().x() ); + yMin = min( yMin, p.position().y() ); + yMax = max( yMax, p.position().y() ); + } + float deltaX = xMax-xMin; + float deltaY = yMax-yMin; + if ( deltaY > deltaX ) + centroid.setTarget( xMin + 0.5*deltaX, yMin +0.5*deltaY, height/(deltaY+50) ); + else + centroid.setTarget( xMin + 0.5*deltaX, yMin +0.5*deltaY, width/(deltaX+50) ); +} + +void initializePhysics() { + physics.clear(); + center0 = physics.makeParticle(1.0, 0, 0, 0); + center0.makeFixed(); + center1 = physics.makeParticle(1.0, EDGE_LENGTH * 30, 0, 0); + center1.makeFixed(); + centroid.setValue( 0, 0, 1.0 ); +} + +void addAttraction(Particle p) { + physics.makeAttraction(center0, p, 5000.0, 3 * EDGE_LENGTH); + physics.makeAttraction(center1, p, 5000.0, 3 * EDGE_LENGTH); + + // spacers + for ( int i = 0; i < physics.numberOfParticles(); ++i ) { + Particle q = physics.getParticle( i ); + if (p != q) physics.makeAttraction( p, q, -SPACER_STRENGTH, 20); + } +} + +void addRelation(Particle p, Particle other) { + physics.makeSpring( p, other, EDGE_STRENGTH, EDGE_STRENGTH, EDGE_LENGTH ); + //p.moveTo( q.position().x() + random( -1, 1 ), q.position().y() + random( -1, 1 ), 0 ); +} + +static class host { + String name; + Particle node; + public host(String name, Particle node) { + this.name = name; + this.node = node; + } +} diff --git a/htroot/processing/put_in_libraries/animation.zip b/htroot/processing/put_in_libraries/animation.zip new file mode 100755 index 000000000..b917dddc4 Binary files /dev/null and b/htroot/processing/put_in_libraries/animation.zip differ diff --git a/htroot/processing/put_in_libraries/physics.zip b/htroot/processing/put_in_libraries/physics.zip new file mode 100755 index 000000000..b99e97486 Binary files /dev/null and b/htroot/processing/put_in_libraries/physics.zip differ diff --git a/htroot/terminal_p.html b/htroot/terminal_p.html new file mode 100755 index 000000000..90d494f2e --- /dev/null +++ b/htroot/terminal_p.html @@ -0,0 +1,136 @@ + + + +YaCy System Monitor + + + + + + + + + + + +
+ +
+YaCy +
+ +
+ +
+ + + + +
+ + + + +
+ + +