neo-viz 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/.gitignore +9 -0
  2. data/.livereload +20 -0
  3. data/.rspec +2 -0
  4. data/.rvmrc +3 -0
  5. data/Gemfile +6 -0
  6. data/LICENSE +19 -0
  7. data/README.md +120 -0
  8. data/Rakefile +12 -0
  9. data/bin/neo-viz +12 -0
  10. data/config.ru +35 -0
  11. data/lib/neo-viz.rb +185 -0
  12. data/lib/neo-viz/version.rb +6 -0
  13. data/neo-viz.gemspec +37 -0
  14. data/public/coffeescripts/app_context.coffee +89 -0
  15. data/public/coffeescripts/canvas_util.coffee +68 -0
  16. data/public/coffeescripts/event_broker.coffee +16 -0
  17. data/public/coffeescripts/filters.coffee +113 -0
  18. data/public/coffeescripts/main.coffee.erb +132 -0
  19. data/public/coffeescripts/neo4j.coffee +90 -0
  20. data/public/coffeescripts/renderer.coffee +141 -0
  21. data/public/coffeescripts/space.coffee +81 -0
  22. data/public/images/ajax-loader.gif +0 -0
  23. data/public/javascripts/data.js +45 -0
  24. data/public/javascripts/data2.js +1287 -0
  25. data/public/javascripts/main.sprockets.js +9 -0
  26. data/public/lib/arbor/arbor-tween.js +86 -0
  27. data/public/lib/arbor/arbor.js +67 -0
  28. data/public/lib/jQuery/jquery-1.6.1.min.js +18 -0
  29. data/public/lib/jasmine-1.1.0/MIT.LICENSE +20 -0
  30. data/public/lib/jasmine-1.1.0/jasmine-html.js +190 -0
  31. data/public/lib/jasmine-1.1.0/jasmine.css +166 -0
  32. data/public/lib/jasmine-1.1.0/jasmine.js +2476 -0
  33. data/public/lib/jasmine-1.1.0/jasmine_favicon.png +0 -0
  34. data/public/lib/stdlib/stdlib.js +115 -0
  35. data/public/lib/sylvester-0.1.3/CHANGELOG.txt +29 -0
  36. data/public/lib/sylvester-0.1.3/sylvester.js +1 -0
  37. data/public/lib/sylvester-0.1.3/sylvester.js.gz +0 -0
  38. data/public/lib/sylvester-0.1.3/sylvester.src.js +1254 -0
  39. data/public/scss/main.scss +152 -0
  40. data/public/scss/mixins.scss +37 -0
  41. data/spec/coffeescripts/canvas_util_spec.coffee +4 -0
  42. data/spec/coffeescripts/filters_spec.coffee +37 -0
  43. data/spec/coffeescripts/neo4j_spec.coffee +76 -0
  44. data/spec/neo_viz_spec.rb +48 -0
  45. data/spec/spec_helper.rb +17 -0
  46. data/spec/support/struct_matcher.rb +117 -0
  47. data/views/_filters.haml +22 -0
  48. data/views/_partial.haml +39 -0
  49. data/views/embedded.haml +15 -0
  50. data/views/index.haml +19 -0
  51. data/views/jasmine_specs_runner.haml +50 -0
  52. metadata +236 -0
@@ -0,0 +1,90 @@
1
+ //= require stdlib.js
2
+
3
+ class Graph
4
+
5
+ constructor: (nodeDatas, relDatas) ->
6
+ @nodes = []
7
+ @nodeHash = {}
8
+ @relationships = []
9
+
10
+ for nodeData in nodeDatas
11
+ node = new Node(nodeData.id)
12
+ @nodeHash[node.id] = node
13
+ @nodes.push(node)
14
+
15
+ for relData in relDatas
16
+ start_node = @nodeHash[relData.start_node]
17
+ end_node = @nodeHash[relData.end_node]
18
+ rel = new Relationship(relData.id, relData.data.rel_type, start_node, end_node)
19
+ @relationships.push(rel)
20
+ start_node.addOutgoing(rel)
21
+ end_node.addIncoming(rel)
22
+
23
+
24
+ load: (nodeId) ->
25
+ for node in @nodes
26
+ return node if node.id == nodeId
27
+
28
+ throw "no such node in graph: " + nodeId if !node
29
+
30
+ areConnected: (nodeA, nodeB, activeRels=@relationships) ->
31
+ # Make sure we don't destroy the input:
32
+ mutableActiveRels = activeRels.slice(0)
33
+
34
+ @innerAreConnected(nodeA, nodeB, mutableActiveRels)
35
+
36
+ innerAreConnected: (nodeA, nodeB, activeRels) ->
37
+ # Algorithm:
38
+ # (nodeA == nodeB) OR (anyOf(nodeA.neighbors.connectedTo(nodeB).throughRelationshipsWeHaveNotAlreadyTraversed))
39
+ # (we have to discard relationships already traversed so we don't go in circles)
40
+ if nodeA == nodeB
41
+ true
42
+ else
43
+ connected = false
44
+ for rel in nodeA.both()
45
+ if activeRels.contains(rel)
46
+ activeRels.remove(activeRels.indexOf(rel))
47
+ otherNode = rel.other(nodeA)
48
+ #console.log "nodeA: " + nodeA.id + ", rel: " + rel.id + ", otherNode: " + otherNode.id
49
+ connected = @innerAreConnected(otherNode, nodeB, activeRels)
50
+ break if connected
51
+ connected
52
+
53
+ class Node
54
+
55
+ constructor: (@id) ->
56
+ @ins = []
57
+ @outs = []
58
+
59
+ addIncoming: (relationShip) ->
60
+ @ins.push(relationShip)
61
+
62
+ addOutgoing: (relationShip) ->
63
+ @outs.push(relationShip)
64
+
65
+ incoming: (types) ->
66
+ return @ins.slice(0) if !types
67
+
68
+ (rel for rel in @ins when types.contains(rel.type))
69
+
70
+ outgoing: (types) ->
71
+ return @outs.slice(0) if !types
72
+
73
+ (rel for rel in @outs when types.contains(rel.type))
74
+
75
+ both: (types) ->
76
+ return @ins.concat(@outs) if !types
77
+
78
+ @incoming(types).concat(@outgoing(types))
79
+
80
+ class Relationship
81
+
82
+ constructor: (@id, @type, @start_node, @end_node) ->
83
+
84
+ other: (node) ->
85
+ return @start_node if @end_node == node
86
+ return @end_node
87
+
88
+ root = exports ? this
89
+ root.Graph = Graph
90
+
@@ -0,0 +1,141 @@
1
+ //= require "sylvester.js"
2
+
3
+ $ = jQuery
4
+
5
+ Renderer = (canvas, handler) ->
6
+ util = CanvasUtil
7
+ canvas = $(canvas).get(0)
8
+ ctx = canvas.getContext '2d'
9
+ particleSystem = null
10
+ objectHandler = handler
11
+ view = null
12
+ keyFilter = null
13
+
14
+ init: (system) ->
15
+ particleSystem = system
16
+ particleSystem.screenSize(canvas.width, canvas.height)
17
+ particleSystem.screenPadding(80)
18
+ @initMouseHandling()
19
+ view = @defaultView
20
+
21
+ defaultView: (data) ->
22
+ # If keyfilter is active then show all properties ("keys") passing the filter.
23
+ # Otherwise only show 3 props but indicate how many there really are.
24
+ text = []
25
+ usedKeys = {first: true}
26
+ if keyFilter?.length > 0
27
+ for regex in keyFilter
28
+ for key, value of data
29
+ if key.match(regex)
30
+ text.push "#{value} (#{key})" unless usedKeys[key]
31
+ usedKeys[key] = true
32
+ else
33
+ for key, value of data
34
+ text.push "#{value} (#{key})" unless key is 'first'
35
+
36
+ nbrProps = text.length - 1 # -1 since we don't count _neo_id
37
+ nbrPropsToShow = 3
38
+ addEllipsis = nbrProps - nbrPropsToShow > 0
39
+ text = text[0..nbrPropsToShow]
40
+ text.push "(#{nbrProps-nbrPropsToShow} more)" if addEllipsis
41
+
42
+ line[0..40] for line in text
43
+
44
+ setKeyFilter: (keyFilterString) ->
45
+ if keyFilterString?.trim() is ''
46
+ keyFilter = null
47
+ else
48
+ string = "_neo_id, #{keyFilterString}"
49
+ keyFilter = (new RegExp(key.trim()) for key in string.split(','))
50
+
51
+ redraw: ->
52
+ ctx.fillStyle = 'white'
53
+ ctx.fillRect 0, 0, canvas.width, canvas.height
54
+
55
+ particleSystem.eachEdge (edge, fromPoint, toPoint) =>
56
+ @drawEdge(edge, fromPoint, toPoint)
57
+
58
+ particleSystem.eachNode (node, point) =>
59
+ @drawNode(node, point)
60
+
61
+
62
+ drawNode: (node, point) ->
63
+ MARGIN = 10
64
+ nodeView = view node.data
65
+ ctx.font = "10pt Times"
66
+ {width, height, count} = util.textSize ctx, nodeView
67
+ maxWidth = 230
68
+ maxHeight = 100
69
+ width = Math.min(width, maxWidth)
70
+ height = Math.min(height, maxHeight)
71
+
72
+ color = if node.data.first then "blue" else "green"
73
+ util.roundRect(ctx, point, width+(MARGIN*2), height, color, 10)
74
+
75
+ ctx.fillStyle ='white'
76
+ x = util.centerToEdge(point.x, width)
77
+ y = util.centerToEdge(point.y, height) + MARGIN*2
78
+ util.drawText(ctx, nodeView, x, y)
79
+
80
+ drawEdge: (edge, fromPoint, toPoint) ->
81
+ ctx.strokeStyle = 'rgba(0,0,0, .333)'
82
+ util.line ctx, fromPoint, toPoint
83
+
84
+ x = (fromPoint.x + toPoint.x) / 2 - 30
85
+ y = (fromPoint.y + toPoint.y) / 2
86
+ ctx.font = "10pt Times"
87
+ ctx.fillStyle ='red'
88
+ util.drawText(ctx, [edge.data.rel_type], x, y)
89
+
90
+ middle: (p1, p2) ->
91
+ if p1 > p2
92
+ (p1 - p2) / 2 + p2
93
+ else
94
+ (p2 - p1) / 2 + p1
95
+
96
+
97
+ edgeHitTest: (point, p1, p2, thresholdInPixels) ->
98
+ delta = thresholdInPixels
99
+ mx = @middle(p1.x, p2.x)
100
+ my = @middle(p1.y, p2.y)
101
+ return false if point.x < mx - delta
102
+ return false if point.x > mx + delta
103
+ return false if point.y < my - delta
104
+ return false if point.y > my + delta
105
+ true
106
+
107
+ initMouseHandling: ->
108
+
109
+ handler =
110
+
111
+ dblclick: (e) ->
112
+ pos = $(canvas).offset()
113
+ _mouseP = arbor.Point(e.pageX-pos.left, e.pageY-pos.top)
114
+ object = particleSystem.nearest(_mouseP)
115
+ objectHandler.activated object.node.name
116
+ false
117
+
118
+ click: (e) =>
119
+ pos = $(canvas).offset()
120
+ _mouseP = arbor.Point(e.pageX-pos.left, e.pageY-pos.top)
121
+
122
+ hitEdge = false
123
+ particleSystem.eachEdge (edge, fromPoint, toPoint) =>
124
+ if (@edgeHitTest(_mouseP, fromPoint, toPoint, 14))
125
+ objectHandler.selectedEdge edge.data._neo_id
126
+ hitEdge = true
127
+ return false
128
+
129
+ if !hitEdge
130
+ object = particleSystem.nearest(_mouseP)
131
+ objectHandler.selectedNode(object.node.name)
132
+ false
133
+
134
+ $(canvas)
135
+ .dblclick(handler.dblclick)
136
+ .click(handler.click)
137
+
138
+
139
+ root = exports ? this
140
+ root.Renderer = Renderer
141
+
@@ -0,0 +1,81 @@
1
+ class Space
2
+ constructor: (@sys, @nodeCount) ->
3
+ @nodes = {}
4
+ @rels = {}
5
+ @allNodes = []
6
+ @allRels = []
7
+ @hiddenNodeIds = []
8
+ @hiddenRelIds = []
9
+
10
+ addData: (data) ->
11
+ @allNodes = data.nodes
12
+ @allRels = data.rels
13
+ @refresh()
14
+
15
+ setHiddenData: (data) ->
16
+ @hiddenNodeIds = data.nodeIds
17
+ @hiddenRelIds = data.relIds
18
+ @refresh()
19
+
20
+ refresh: ->
21
+ @clear()
22
+ @addNodes @allNodes
23
+ @addRels @allRels
24
+
25
+ clear: ->
26
+ for key, node of @nodes
27
+ @sys.pruneNode(key)
28
+ @nodes = {}
29
+ @rels = {}
30
+
31
+ getSelectedNode: ->
32
+ @selectedNode
33
+
34
+ setFilter: (filter) ->
35
+ @filter = if filter then new RegExp(filter, 'i') else null
36
+
37
+ setNodeCount: (n) ->
38
+ @nodeCount = n
39
+
40
+ addNodes: (nodes) ->
41
+ return if nodes.length == 0
42
+
43
+ inspect = (node) ->
44
+ name = (for key, value of node.data
45
+ "#{key}:#{value}").join(' ')
46
+ name
47
+
48
+ @selectedNode = nodes[0]
49
+ @selectedNode.data.first = true
50
+
51
+ filteredNodes = nodes.slice(0)
52
+ filteredNodes = (node for node in filteredNodes when !@hiddenNodeIds.contains(node.id))
53
+ filteredNodes = (node for node in filteredNodes when inspect(node).match(@filter)) if @filter
54
+
55
+ return if filteredNodes.length is 0
56
+ return if filteredNodes[0] is @selectedNode and filteredNodes.length is 1
57
+
58
+ filteredNodes.unshift(@selectedNode)
59
+
60
+ filteredNodes = filteredNodes[0...@nodeCount] if filteredNodes.length > @nodeCount
61
+
62
+ for node in filteredNodes
63
+ @sys.addNode(node.id, node.data) unless @nodes[node.id]
64
+ @nodes[node.id] = node
65
+
66
+ addRels: (rels) ->
67
+
68
+ filteredRels = (rel for rel in rels when !@hiddenRelIds.contains(rel.data._neo_id))
69
+ for rel in filteredRels
70
+ if @nodes[rel.start_node] and @nodes[rel.end_node]
71
+ @sys.addEdge(rel.start_node, rel.end_node, rel.data)
72
+ @rels[rel.id] = rel
73
+
74
+ node: (id) ->
75
+ @nodes[id]
76
+
77
+ rel: (id) ->
78
+ @rels[id]
79
+
80
+ root = exports ? this
81
+ root.Space = Space
Binary file
@@ -0,0 +1,45 @@
1
+ data = {
2
+ "nodes": [
3
+ {"data": { "_neo_id":0, "gemFile": "source :rubygems\ngem"}, "id":0 },
4
+ {"data":{"_count__all__classname":53, "_neo_id":5}, "id":5},
5
+ {"data":{"_count__all__classname":148, "_neo_id":1}, "id":1},
6
+ {"data":{"_count__all__classname":10, "_neo_id":2}, "id":2},
7
+ {"data":{"_count__all__classname":1, "_neo_id":6}, "id":6},
8
+ {"data":{"_count__all__classname":65, "_neo_id":4}, "id":4},
9
+ {"data":{"_count__all__classname":19, "_neo_id":3}, "id":3}
10
+ ],
11
+ "rels": [
12
+ {
13
+ "data":{"_neo_id":4, "rel_type":"BirdiesBackend::User"},
14
+ "end_node":5,
15
+ "id":4,
16
+ "start_node":0},
17
+ {
18
+ "data":{"_neo_id":0, "rel_type":"Neo4j::Rails::Model"},
19
+ "end_node":1,
20
+ "id":0,
21
+ "start_node":0},
22
+ {
23
+ "data":{"_neo_id":1, "rel_type":"BirdiesBackend::Link"},
24
+ "end_node":2,
25
+ "id":1,
26
+ "start_node":0},
27
+ {
28
+ "data":{"_neo_id":5, "rel_type":"BirdiesBackend::Tweeters"},
29
+ "end_node":6,
30
+ "id":5,
31
+ "start_node":0},
32
+ {
33
+ "data":{"_neo_id":3, "rel_type":"BirdiesBackend::Tweet"},
34
+ "end_node":4,
35
+ "id":3,
36
+ "start_node":0},
37
+ {
38
+ "data":{"_neo_id":2, "rel_type":"BirdiesBackend::Tag"},
39
+ "end_node":3,
40
+ "id":2,
41
+ "start_node":0}
42
+ ]
43
+ }
44
+
45
+
@@ -0,0 +1,1287 @@
1
+ data = {
2
+ "_count__all__classname":148,
3
+ "_neo_id":1,
4
+ "rels":
5
+ [{"_neo_id":936,
6
+ "direction":"outgoing",
7
+ "other_node":
8
+ {"_classname":"BirdiesBackend::Tweet",
9
+ "_neo_id":151,
10
+ "date":1306356540,
11
+ "link":"http://twitter.com/neo4j/statuses/73490775761096704",
12
+ "short":"How graph databases can make yo",
13
+ "text":
14
+ "How graph databases can make you a superstar, by @andres_taylor http://slidesha.re/kjKsMC #graphdb #nosql #JEE #neo4j",
15
+ "tweet_id":"73490775761096704"},
16
+ "rel_type":"_all"},
17
+ {"_neo_id":934,
18
+ "direction":"outgoing",
19
+ "other_node":
20
+ {"_classname":"BirdiesBackend::Link",
21
+ "_neo_id":150,
22
+ "url":"http://t.co/4tN3n1B"},
23
+ "rel_type":"_all"},
24
+ {"_neo_id":932,
25
+ "direction":"outgoing",
26
+ "other_node":
27
+ {"_classname":"BirdiesBackend::User", "_neo_id":149, "twid":"rgaidot"},
28
+ "rel_type":"_all"},
29
+ {"_neo_id":930,
30
+ "direction":"outgoing",
31
+ "other_node":
32
+ {"_classname":"BirdiesBackend::Tweet",
33
+ "_neo_id":148,
34
+ "date":1306356590,
35
+ "link":"http://twitter.com/rgaidot/statuses/73490981563019265",
36
+ "short":"check out &quot;Graph database ",
37
+ "text":
38
+ "check out &quot;Graph database super star&quot; http://t.co/4tN3n1B #graphdb #neo4j",
39
+ "tweet_id":"73490981563019265"},
40
+ "rel_type":"_all"},
41
+ {"_neo_id":928,
42
+ "direction":"outgoing",
43
+ "other_node":
44
+ {"_classname":"BirdiesBackend::Tweet",
45
+ "_neo_id":147,
46
+ "date":1306356714,
47
+ "link":"http://twitter.com/peterneubauer/statuses/73491502805950464",
48
+ "short":"RT : How graph databases can ma",
49
+ "text":
50
+ "RT @neo4j: How graph databases can make you a superstar, by @andres_taylor http://slidesha.re/kjKsMC #graphdb #nosql #JEE #neo4j",
51
+ "tweet_id":"73491502805950464"},
52
+ "rel_type":"_all"},
53
+ {"_neo_id":926,
54
+ "direction":"outgoing",
55
+ "other_node":
56
+ {"_classname":"BirdiesBackend::User", "_neo_id":146, "twid":"shamod"},
57
+ "rel_type":"_all"},
58
+ {"_neo_id":924,
59
+ "direction":"outgoing",
60
+ "other_node":
61
+ {"_classname":"BirdiesBackend::Tweet",
62
+ "_neo_id":145,
63
+ "date":1306358635,
64
+ "link":"http://twitter.com/shamod/statuses/73499559078273025",
65
+ "short":"RT How graph databases can mak",
66
+ "text":
67
+ "RT @neo4j How graph databases can make you a superstar, by @andres_taylor http://slidesha.re/kjKsMC #graphdb #nosql #JEE #neo4j",
68
+ "tweet_id":"73499559078273025"},
69
+ "rel_type":"_all"},
70
+ {"_neo_id":922,
71
+ "direction":"outgoing",
72
+ "other_node":
73
+ {"_classname":"BirdiesBackend::User", "_neo_id":154, "twid":"jruby"},
74
+ "rel_type":"_all"},
75
+ {"_neo_id":920,
76
+ "direction":"outgoing",
77
+ "other_node":
78
+ {"_classname":"BirdiesBackend::User",
79
+ "_neo_id":153,
80
+ "twid":"hannelita"},
81
+ "rel_type":"_all"},
82
+ {"_neo_id":918,
83
+ "direction":"outgoing",
84
+ "other_node":
85
+ {"_classname":"BirdiesBackend::Tweet",
86
+ "_neo_id":152,
87
+ "date":1306354151,
88
+ "link":"http://twitter.com/hannelita/statuses/73480752578314240",
89
+ "short":"Wow!!! with =&gt; YES, it wor",
90
+ "text":
91
+ "Wow!!! @jruby with #Neo4J =&gt; YES, it works! pretty pretty fine!!!! :D",
92
+ "tweet_id":"73480752578314240"},
93
+ "rel_type":"_all"},
94
+ {"_neo_id":868,
95
+ "direction":"outgoing",
96
+ "other_node":
97
+ {"_classname":"BirdiesBackend::Tweet",
98
+ "_neo_id":120,
99
+ "date":1306384455,
100
+ "link":"http://twitter.com/fakod/statuses/73607858075348992",
101
+ "short":"that will be interesting \342\200\234: ",
102
+ "text":
103
+ "that will be interesting http://t.co/y7HgQyN \342\200\234#neo4j: Check out the @TransportDublin http://t.co/uqUgj5W #nosql #graphdb #gis #OSM\342\200\235",
104
+ "tweet_id":"73607858075348992"},
105
+ "rel_type":"_all"},
106
+ {"_neo_id":866,
107
+ "direction":"outgoing",
108
+ "other_node":
109
+ {"_classname":"BirdiesBackend::User", "_neo_id":121, "twid":"fakod"},
110
+ "rel_type":"_all"},
111
+ {"_neo_id":864,
112
+ "direction":"outgoing",
113
+ "other_node":
114
+ {"_classname":"BirdiesBackend::Link",
115
+ "_neo_id":122,
116
+ "url":"http://t.co/y7HgQyN"},
117
+ "rel_type":"_all"},
118
+ {"_neo_id":862,
119
+ "direction":"outgoing",
120
+ "other_node":
121
+ {"_classname":"BirdiesBackend::Link",
122
+ "_neo_id":123,
123
+ "url":"http://t.co/uqUgj5W"},
124
+ "rel_type":"_all"},
125
+ {"_neo_id":860,
126
+ "direction":"outgoing",
127
+ "other_node":
128
+ {"_classname":"BirdiesBackend::Tweet",
129
+ "_neo_id":124,
130
+ "date":1306380714,
131
+ "link":"http://twitter.com/mcculls/statuses/73592165955149825",
132
+ "short":"RT : How graph databases can ma",
133
+ "text":
134
+ "RT @neo4j: How graph databases can make you a superstar, by @andres_taylor http://slidesha.re/kjKsMC #graphdb #nosql #JEE #neo4j",
135
+ "tweet_id":"73592165955149825"},
136
+ "rel_type":"_all"},
137
+ {"_neo_id":858,
138
+ "direction":"outgoing",
139
+ "other_node":
140
+ {"_classname":"BirdiesBackend::User", "_neo_id":125, "twid":"mcculls"},
141
+ "rel_type":"_all"},
142
+ {"_neo_id":856,
143
+ "direction":"outgoing",
144
+ "other_node":
145
+ {"_classname":"BirdiesBackend::Tweet",
146
+ "_neo_id":126,
147
+ "date":1306377974,
148
+ "link":"http://twitter.com/tatsuyalam/statuses/73580674052919296",
149
+ "short":"RT : How graph databases can ma",
150
+ "text":
151
+ "RT @neo4j: How graph databases can make you a superstar, by @andres_taylor http://slidesha.re/kjKsMC #graphdb #nosql #JEE #neo4j",
152
+ "tweet_id":"73580674052919296"},
153
+ "rel_type":"_all"},
154
+ {"_neo_id":854,
155
+ "direction":"outgoing",
156
+ "other_node":
157
+ {"_classname":"BirdiesBackend::User",
158
+ "_neo_id":127,
159
+ "twid":"tatsuyalam"},
160
+ "rel_type":"_all"},
161
+ {"_neo_id":852,
162
+ "direction":"outgoing",
163
+ "other_node":
164
+ {"_classname":"BirdiesBackend::User",
165
+ "_neo_id":112,
166
+ "twid":"alecorti28"},
167
+ "rel_type":"_all"},
168
+ {"_neo_id":850,
169
+ "direction":"outgoing",
170
+ "other_node":
171
+ {"_classname":"BirdiesBackend::User",
172
+ "_neo_id":113,
173
+ "twid":"transportdublin"},
174
+ "rel_type":"_all"},
175
+ {"_neo_id":848,
176
+ "direction":"outgoing",
177
+ "other_node":
178
+ {"_classname":"BirdiesBackend::Link",
179
+ "_neo_id":114,
180
+ "url":"http://www.TransportDublin.ie"},
181
+ "rel_type":"_all"},
182
+ {"_neo_id":846,
183
+ "direction":"outgoing",
184
+ "other_node":
185
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":115, "name":"gis"},
186
+ "rel_type":"_all"},
187
+ {"_neo_id":844,
188
+ "direction":"outgoing",
189
+ "other_node":
190
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":116, "name":"osm"},
191
+ "rel_type":"_all"},
192
+ {"_neo_id":842,
193
+ "direction":"outgoing",
194
+ "other_node":
195
+ {"_classname":"BirdiesBackend::Tweet",
196
+ "_neo_id":117,
197
+ "date":1306388636,
198
+ "link":"http://twitter.com/jesubellido/statuses/73625392455495680",
199
+ "short":"\342\200\234: Check out the Public Tran",
200
+ "text":
201
+ "\342\200\234@neo4j: Check out the @TransportDublin Public Transport Route Planner, based on #neo4j --&gt; http://t.co/1KCAlCi #nosql #graphdb #gis #OSM\342\200\235",
202
+ "tweet_id":"73625392455495680"},
203
+ "rel_type":"_all"},
204
+ {"_neo_id":840,
205
+ "direction":"outgoing",
206
+ "other_node":
207
+ {"_classname":"BirdiesBackend::User",
208
+ "_neo_id":118,
209
+ "twid":"jesubellido"},
210
+ "rel_type":"_all"},
211
+ {"_neo_id":838,
212
+ "direction":"outgoing",
213
+ "other_node":
214
+ {"_classname":"BirdiesBackend::Link",
215
+ "_neo_id":119,
216
+ "url":"http://t.co/1KCAlCi"},
217
+ "rel_type":"_all"},
218
+ {"_neo_id":836,
219
+ "direction":"outgoing",
220
+ "other_node":
221
+ {"_classname":"BirdiesBackend::Tweet",
222
+ "_neo_id":111,
223
+ "date":1306392495,
224
+ "link":"http://twitter.com/alecorti28/statuses/73641580183040000",
225
+ "short":"RT : Check out the Public Tran",
226
+ "text":
227
+ "RT @neo4j: Check out the @TransportDublin Public Transport Route Planner, based on #neo4j --&gt; http://www.TransportDublin.ie #nosql #graphdb #gis #OSM",
228
+ "tweet_id":"73641580183040000"},
229
+ "rel_type":"_all"},
230
+ {"_neo_id":834,
231
+ "direction":"outgoing",
232
+ "other_node":
233
+ {"_classname":"BirdiesBackend::User",
234
+ "_neo_id":144,
235
+ "twid":"ken_2scientists"},
236
+ "rel_type":"_all"},
237
+ {"_neo_id":832,
238
+ "direction":"outgoing",
239
+ "other_node":
240
+ {"_classname":"BirdiesBackend::User", "_neo_id":134, "twid":"nilanp"},
241
+ "rel_type":"_all"},
242
+ {"_neo_id":830,
243
+ "direction":"outgoing",
244
+ "other_node":
245
+ {"_classname":"BirdiesBackend::Tweet",
246
+ "_neo_id":135,
247
+ "date":1306361302,
248
+ "link":"http://twitter.com/jimwebber/statuses/73510747195449344",
249
+ "short":"RT : Check out the Public Tran",
250
+ "text":
251
+ "RT @neo4j: Check out the @TransportDublin Public Transport Route Planner, based on #neo4j --&gt; http://www.TransportDublin.ie #nosql #graphdb #gis #OSM",
252
+ "tweet_id":"73510747195449344"},
253
+ "rel_type":"_all"},
254
+ {"_neo_id":828,
255
+ "direction":"outgoing",
256
+ "other_node":
257
+ {"_classname":"BirdiesBackend::Tweet",
258
+ "_neo_id":132,
259
+ "date":1306362021,
260
+ "link":"http://twitter.com/TransportDublin/statuses/73513762358951936",
261
+ "short":"RT : Check out the Public Tran",
262
+ "text":
263
+ "RT @neo4j: Check out the @TransportDublin Public Transport Route Planner, based on #neo4j --&gt; http://www.TransportDublin.ie #nosql #graphdb #gis #OSM",
264
+ "tweet_id":"73513762358951936"},
265
+ "rel_type":"_all"},
266
+ {"_neo_id":826,
267
+ "direction":"outgoing",
268
+ "other_node":
269
+ {"_classname":"BirdiesBackend::Tweet",
270
+ "_neo_id":133,
271
+ "date":1306361684,
272
+ "link":"http://twitter.com/nilanp/statuses/73512349235019776",
273
+ "short":"RT : Check out the Public Tran",
274
+ "text":
275
+ "RT @neo4j: Check out the @TransportDublin Public Transport Route Planner, based on #neo4j --&gt; http://www.TransportDublin.ie #nosql #graphdb #gis #OSM",
276
+ "tweet_id":"73512349235019776"},
277
+ "rel_type":"_all"},
278
+ {"_neo_id":824,
279
+ "direction":"outgoing",
280
+ "other_node":
281
+ {"_classname":"BirdiesBackend::Tweet",
282
+ "_neo_id":130,
283
+ "date":1306362381,
284
+ "link":"http://twitter.com/ghillairet/statuses/73515273893847040",
285
+ "short":"RT : Check out the Public Tran",
286
+ "text":
287
+ "RT @neo4j: Check out the @TransportDublin Public Transport Route Planner, based on #neo4j --&gt; http://www.TransportDublin.ie #nosql #graphdb #gis #OSM",
288
+ "tweet_id":"73515273893847040"},
289
+ "rel_type":"_all"},
290
+ {"_neo_id":822,
291
+ "direction":"outgoing",
292
+ "other_node":
293
+ {"_classname":"BirdiesBackend::User",
294
+ "_neo_id":131,
295
+ "twid":"ghillairet"},
296
+ "rel_type":"_all"},
297
+ {"_neo_id":820,
298
+ "direction":"outgoing",
299
+ "other_node":
300
+ {"_classname":"BirdiesBackend::Tweet",
301
+ "_neo_id":128,
302
+ "date":1306364328,
303
+ "link":"http://twitter.com/marcjohnson/statuses/73523437527764992",
304
+ "short":"RT : Check out the Public Tran",
305
+ "text":
306
+ "RT @neo4j: Check out the @TransportDublin Public Transport Route Planner, based on #neo4j --&gt; http://www.TransportDublin.ie #nosql #graphdb #gis #OSM",
307
+ "tweet_id":"73523437527764992"},
308
+ "rel_type":"_all"},
309
+ {"_neo_id":818,
310
+ "direction":"outgoing",
311
+ "other_node":
312
+ {"_classname":"BirdiesBackend::User",
313
+ "_neo_id":129,
314
+ "twid":"marcjohnson"},
315
+ "rel_type":"_all"},
316
+ {"_neo_id":816,
317
+ "direction":"outgoing",
318
+ "other_node":
319
+ {"_classname":"BirdiesBackend::Tweet",
320
+ "_neo_id":142,
321
+ "date":1306359759,
322
+ "link":"http://twitter.com/neo4j/statuses/73504273366925312",
323
+ "short":"Check out the Public Transport",
324
+ "text":
325
+ "Check out the @TransportDublin Public Transport Route Planner, based on #neo4j --&gt; http://www.TransportDublin.ie #nosql #graphdb #gis #OSM",
326
+ "tweet_id":"73504273366925312"},
327
+ "rel_type":"_all"},
328
+ {"_neo_id":814,
329
+ "direction":"outgoing",
330
+ "other_node":
331
+ {"_classname":"BirdiesBackend::Tweet",
332
+ "_neo_id":143,
333
+ "date":1306358682,
334
+ "link":"http://twitter.com/Ken_2scientists/statuses/73499759712800768",
335
+ "short":"Hope I can make some time soon ",
336
+ "text":
337
+ "Hope I can make some time soon to play with #neo4j and Spring Data Graph. Sad there doesn't seem to be much traction on Spring Data Column",
338
+ "tweet_id":"73499759712800768"},
339
+ "rel_type":"_all"},
340
+ {"_neo_id":812,
341
+ "direction":"outgoing",
342
+ "other_node":
343
+ {"_classname":"BirdiesBackend::User",
344
+ "_neo_id":140,
345
+ "twid":"64bitchris"},
346
+ "rel_type":"_all"},
347
+ {"_neo_id":810,
348
+ "direction":"outgoing",
349
+ "other_node":
350
+ {"_classname":"BirdiesBackend::Tweet",
351
+ "_neo_id":141,
352
+ "date":1306359781,
353
+ "link":"http://twitter.com/peterneubauer/statuses/73504369512939520",
354
+ "short":"RT : Check out the Public Tran",
355
+ "text":
356
+ "RT @neo4j: Check out the @TransportDublin Public Transport Route Planner, based on #neo4j --&gt; http://www.TransportDublin.ie #nosql #graphdb #gis #OSM",
357
+ "tweet_id":"73504369512939520"},
358
+ "rel_type":"_all"},
359
+ {"_neo_id":808,
360
+ "direction":"outgoing",
361
+ "other_node":
362
+ {"_classname":"BirdiesBackend::User",
363
+ "_neo_id":138,
364
+ "twid":"frescosecco"},
365
+ "rel_type":"_all"},
366
+ {"_neo_id":806,
367
+ "direction":"outgoing",
368
+ "other_node":
369
+ {"_classname":"BirdiesBackend::Tweet",
370
+ "_neo_id":139,
371
+ "date":1306360129,
372
+ "link":"http://twitter.com/64BitChris/statuses/73505827142643712",
373
+ "short":"RT : How graph databases can ma",
374
+ "text":
375
+ "RT @neo4j: How graph databases can make you a superstar, by @andres_taylor http://slidesha.re/kjKsMC #graphdb #nosql #JEE #neo4j",
376
+ "tweet_id":"73505827142643712"},
377
+ "rel_type":"_all"},
378
+ {"_neo_id":804,
379
+ "direction":"outgoing",
380
+ "other_node":
381
+ {"_classname":"BirdiesBackend::User",
382
+ "_neo_id":136,
383
+ "twid":"jimwebber"},
384
+ "rel_type":"_all"},
385
+ {"_neo_id":802,
386
+ "direction":"outgoing",
387
+ "other_node":
388
+ {"_classname":"BirdiesBackend::Tweet",
389
+ "_neo_id":137,
390
+ "date":1306360297,
391
+ "link":"http://twitter.com/frescosecco/statuses/73506530250588161",
392
+ "short":"RT : Check out the Public Tran",
393
+ "text":
394
+ "RT @neo4j: Check out the @TransportDublin Public Transport Route Planner, based on #neo4j --&gt; http://www.TransportDublin.ie #nosql #graphdb #gis #OSM",
395
+ "tweet_id":"73506530250588161"},
396
+ "rel_type":"_all"},
397
+ {"_neo_id":576,
398
+ "direction":"outgoing",
399
+ "other_node":
400
+ {"_classname":"BirdiesBackend::User",
401
+ "_neo_id":105,
402
+ "twid":"_mark_burns"},
403
+ "rel_type":"_all"},
404
+ {"_neo_id":574,
405
+ "direction":"outgoing",
406
+ "other_node":
407
+ {"_classname":"BirdiesBackend::Tweet",
408
+ "_neo_id":104,
409
+ "date":1306400127,
410
+ "link":"http://twitter.com/_mark_burns/statuses/73673589055959040",
411
+ "short":"ask and ye shall receive. just ",
412
+ "text":
413
+ "ask and ye shall receive. just 'bundle update'ing but #neo4j 1.1 was released whilst i was asleep dependency - rails &gt; 3.0.0. Woohoo",
414
+ "tweet_id":"73673589055959040"},
415
+ "rel_type":"_all"},
416
+ {"_neo_id":572,
417
+ "direction":"outgoing",
418
+ "other_node":
419
+ {"_classname":"BirdiesBackend::User", "_neo_id":107, "twid":"lgueye"},
420
+ "rel_type":"_all"},
421
+ {"_neo_id":570,
422
+ "direction":"outgoing",
423
+ "other_node":
424
+ {"_classname":"BirdiesBackend::Tweet",
425
+ "_neo_id":106,
426
+ "date":1306398840,
427
+ "link":"http://twitter.com/lgueye/statuses/73668193700417537",
428
+ "short":"Well, seems that believes in ",
429
+ "text":
430
+ "Well, seems that @acoyler believes in graph databases like #neo4j #wsnparis",
431
+ "tweet_id":"73668193700417537"},
432
+ "rel_type":"_all"},
433
+ {"_neo_id":568,
434
+ "direction":"outgoing",
435
+ "other_node":
436
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":109, "name":"wsnparis"},
437
+ "rel_type":"_all"},
438
+ {"_neo_id":566,
439
+ "direction":"outgoing",
440
+ "other_node":
441
+ {"_classname":"BirdiesBackend::User", "_neo_id":108, "twid":"acoyler"},
442
+ "rel_type":"_all"},
443
+ {"_neo_id":564,
444
+ "direction":"outgoing",
445
+ "other_node":
446
+ {"_classname":"BirdiesBackend::Tweet",
447
+ "_neo_id":110,
448
+ "date":1306397085,
449
+ "link":"http://twitter.com/jordiv/statuses/73660833527373824",
450
+ "short":"Waiting for monday! It'll be a ",
451
+ "text":"Waiting for monday! It'll be a #neo4j day @ Barcelona :-))",
452
+ "tweet_id":"73660833527373824"},
453
+ "rel_type":"_all"},
454
+ {"_neo_id":562,
455
+ "direction":"outgoing",
456
+ "other_node":
457
+ {"_classname":"BirdiesBackend::User",
458
+ "_neo_id":97,
459
+ "twid":"neilellis"},
460
+ "rel_type":"_all"},
461
+ {"_neo_id":560,
462
+ "direction":"outgoing",
463
+ "other_node":
464
+ {"_classname":"BirdiesBackend::User",
465
+ "_neo_id":96,
466
+ "twid":"skillsmatter"},
467
+ "rel_type":"_all"},
468
+ {"_neo_id":558,
469
+ "direction":"outgoing",
470
+ "other_node":
471
+ {"_classname":"BirdiesBackend::User", "_neo_id":99, "twid":"jairamc"},
472
+ "rel_type":"_all"},
473
+ {"_neo_id":556,
474
+ "direction":"outgoing",
475
+ "other_node":
476
+ {"_classname":"BirdiesBackend::Tweet",
477
+ "_neo_id":98,
478
+ "date":1306403912,
479
+ "link":"http://twitter.com/jairamc/statuses/73689465536782336",
480
+ "short":"I'm going to a Meetup with Open",
481
+ "text":
482
+ "I'm going to a Meetup with OpenSource &amp; Agile Community Events http://bit.ly/luSNCc #Neo4J",
483
+ "tweet_id":"73689465536782336"},
484
+ "rel_type":"_all"},
485
+ {"_neo_id":554,
486
+ "direction":"outgoing",
487
+ "other_node":
488
+ {"_classname":"BirdiesBackend::Tweet",
489
+ "_neo_id":101,
490
+ "date":1306403237,
491
+ "link":"http://twitter.com/iansrobinson/statuses/73686636273221632",
492
+ "short":" London UG meets 31st May, at ",
493
+ "text":
494
+ "#neo4j London UG meets 31st May, at @skillsmatter for beer + graph goodness. See @neilellis talk about graphs, collaboration &amp; serendity",
495
+ "tweet_id":"73686636273221632"},
496
+ "rel_type":"_all"},
497
+ {"_neo_id":552,
498
+ "direction":"outgoing",
499
+ "other_node":
500
+ {"_classname":"BirdiesBackend::Link",
501
+ "_neo_id":100,
502
+ "url":"http://bit.ly/luSNCc"},
503
+ "rel_type":"_all"},
504
+ {"_neo_id":550,
505
+ "direction":"outgoing",
506
+ "other_node":
507
+ {"_classname":"BirdiesBackend::User", "_neo_id":103, "twid":"dbuduev"},
508
+ "rel_type":"_all"},
509
+ {"_neo_id":548,
510
+ "direction":"outgoing",
511
+ "other_node":
512
+ {"_classname":"BirdiesBackend::Tweet",
513
+ "_neo_id":102,
514
+ "date":1306400634,
515
+ "link":"http://twitter.com/dbuduev/statuses/73675716381782016",
516
+ "short":"RT : How graph databases can ma",
517
+ "text":
518
+ "RT @neo4j: How graph databases can make you a superstar, by @andres_taylor http://slidesha.re/kjKsMC #graphdb #nosql #JEE #neo4j",
519
+ "tweet_id":"73675716381782016"},
520
+ "rel_type":"_all"},
521
+ {"_neo_id":546,
522
+ "direction":"outgoing",
523
+ "other_node":
524
+ {"_classname":"BirdiesBackend::Tweet",
525
+ "_neo_id":90,
526
+ "date":1306419990,
527
+ "link":"http://twitter.com/ChrisDiehl/statuses/73756903179694080",
528
+ "short":"RT : Graph Bootcamp: Chicago Su",
529
+ "text":
530
+ "RT @twarko: Graph Bootcamp: Chicago Summer 2011 -- http://graphbootcamp.eventbrite.com/ #graphdb #neo4j #orientdb",
531
+ "tweet_id":"73756903179694080"},
532
+ "rel_type":"_all"},
533
+ {"_neo_id":544,
534
+ "direction":"outgoing",
535
+ "other_node":
536
+ {"_classname":"BirdiesBackend::User",
537
+ "_neo_id":91,
538
+ "twid":"chrisdiehl"},
539
+ "rel_type":"_all"},
540
+ {"_neo_id":542,
541
+ "direction":"outgoing",
542
+ "other_node":
543
+ {"_classname":"BirdiesBackend::Tweet",
544
+ "_neo_id":88,
545
+ "date":1306422283,
546
+ "link":"http://twitter.com/lgarulli/statuses/73766518135074816",
547
+ "short":"RT : Graph Bootcamp: Chicago Su",
548
+ "text":
549
+ "RT @twarko: Graph Bootcamp: Chicago Summer 2011 -- http://graphbootcamp.eventbrite.com/ #graphdb #neo4j #orientdb",
550
+ "tweet_id":"73766518135074816"},
551
+ "rel_type":"_all"},
552
+ {"_neo_id":540,
553
+ "direction":"outgoing",
554
+ "other_node":
555
+ {"_classname":"BirdiesBackend::User", "_neo_id":89, "twid":"lgarulli"},
556
+ "rel_type":"_all"},
557
+ {"_neo_id":538,
558
+ "direction":"outgoing",
559
+ "other_node":
560
+ {"_classname":"BirdiesBackend::User", "_neo_id":94, "twid":"noppanit"},
561
+ "rel_type":"_all"},
562
+ {"_neo_id":536,
563
+ "direction":"outgoing",
564
+ "other_node":
565
+ {"_classname":"BirdiesBackend::User",
566
+ "_neo_id":95,
567
+ "twid":"iansrobinson"},
568
+ "rel_type":"_all"},
569
+ {"_neo_id":534,
570
+ "direction":"outgoing",
571
+ "other_node":
572
+ {"_classname":"BirdiesBackend::Tweet",
573
+ "_neo_id":92,
574
+ "date":1306418079,
575
+ "link":"http://twitter.com/twarko/statuses/73748887495647233",
576
+ "short":"Graph Bootcamp: Chicago Summer ",
577
+ "text":
578
+ "Graph Bootcamp: Chicago Summer 2011 -- http://graphbootcamp.eventbrite.com/ #graphdb #neo4j #orientdb",
579
+ "tweet_id":"73748887495647233"},
580
+ "rel_type":"_all"},
581
+ {"_neo_id":532,
582
+ "direction":"outgoing",
583
+ "other_node":
584
+ {"_classname":"BirdiesBackend::Tweet",
585
+ "_neo_id":93,
586
+ "date":1306404061,
587
+ "link":"http://twitter.com/noppanit/statuses/73690089934434304",
588
+ "short":"RT : London UG meets 31st May,",
589
+ "text":
590
+ "RT @iansrobinson: #neo4j London UG meets 31st May, at @skillsmatter for beer + graph goodness. See @neilellis talk about graphs, collaboration &amp; serendity",
591
+ "tweet_id":"73690089934434304"},
592
+ "rel_type":"_all"},
593
+ {"_neo_id":530,
594
+ "direction":"outgoing",
595
+ "other_node":
596
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":82, "name":"hadoop"},
597
+ "rel_type":"_all"},
598
+ {"_neo_id":528,
599
+ "direction":"outgoing",
600
+ "other_node":
601
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":83, "name":"mongodb"},
602
+ "rel_type":"_all"},
603
+ {"_neo_id":526,
604
+ "direction":"outgoing",
605
+ "other_node":
606
+ {"_classname":"BirdiesBackend::User",
607
+ "_neo_id":80,
608
+ "twid":"nosqlweekly"},
609
+ "rel_type":"_all"},
610
+ {"_neo_id":524,
611
+ "direction":"outgoing",
612
+ "other_node":
613
+ {"_classname":"BirdiesBackend::Link",
614
+ "_neo_id":81,
615
+ "url":"http://eepurl.com/d0yyH"},
616
+ "rel_type":"_all"},
617
+ {"_neo_id":522,
618
+ "direction":"outgoing",
619
+ "other_node":
620
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":86, "name":"job"},
621
+ "rel_type":"_all"},
622
+ {"_neo_id":520,
623
+ "direction":"outgoing",
624
+ "other_node":
625
+ {"_classname":"BirdiesBackend::Tweet",
626
+ "_neo_id":87,
627
+ "date":1306426414,
628
+ "link":"http://twitter.com/peterneubauer/statuses/73783848462327808",
629
+ "short":"If you wanna learn graph wizard",
630
+ "text":
631
+ "If you wanna learn graph wizardry, sign up for the Graph Bootcamp! http://graphbootcamp.eventbrite.com/ #neo4j #graphdb #nosql",
632
+ "tweet_id":"73783848462327808"},
633
+ "rel_type":"_all"},
634
+ {"_neo_id":518,
635
+ "direction":"outgoing",
636
+ "other_node":
637
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":84, "name":"redis"},
638
+ "rel_type":"_all"},
639
+ {"_neo_id":516,
640
+ "direction":"outgoing",
641
+ "other_node":
642
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":85, "name":"couchdb"},
643
+ "rel_type":"_all"},
644
+ {"_neo_id":514,
645
+ "direction":"outgoing",
646
+ "other_node":
647
+ {"_classname":"BirdiesBackend::Tweet",
648
+ "_neo_id":75,
649
+ "date":1306430595,
650
+ "link":"http://twitter.com/BrunoNeckebroek/statuses/73801384847355904",
651
+ "short":"Reading up on i can think of s",
652
+ "text":
653
+ "Reading up on #neo4j i can think of some nice cases to implement, just need to get started...",
654
+ "tweet_id":"73801384847355904"},
655
+ "rel_type":"_all"},
656
+ {"_neo_id":512,
657
+ "direction":"outgoing",
658
+ "other_node":
659
+ {"_classname":"BirdiesBackend::Tweet",
660
+ "_neo_id":74,
661
+ "date":1306432244,
662
+ "link":"http://twitter.com/ahzf/statuses/73808300474511360",
663
+ "short":"RT : If you wanna learn graph w",
664
+ "text": "RT @peterneubauer: If you wanna learn graph wizardry, sign up for the Graph Bootcamp! http://graphbootcamp.eventbrite.com/ #neo4j #graphdb #nosql",
665
+ "tweet_id":"73808300474511360"},
666
+ "rel_type":"_all"},
667
+ {"_neo_id":510,
668
+ "direction":"outgoing",
669
+ "other_node":
670
+ {"_classname":"BirdiesBackend::User",
671
+ "_neo_id":79,
672
+ "twid":"rahulgchaudhary"},
673
+ "rel_type":"_all"},
674
+ {"_neo_id":508,
675
+ "direction":"outgoing",
676
+ "other_node":
677
+ {"_classname":"BirdiesBackend::Tweet",
678
+ "_neo_id":78,
679
+ "date":1306426861,
680
+ "link":"http://twitter.com/rahulgchaudhary/statuses/73785723408490496",
681
+ "short":"RT : NoSQL Weekly (Issue 26 - M",
682
+ "text":
683
+ "RT @nosqlweekly: NoSQL Weekly (Issue 26 - May 26, 2011) - http://eepurl.com/d0yyH #nosql #hadoop #mongodb #redis #couchdb #neo4j #job",
684
+ "tweet_id":"73785723408490496"},
685
+ "rel_type":"_all"},
686
+ {"_neo_id":506,
687
+ "direction":"outgoing",
688
+ "other_node":
689
+ {"_classname":"BirdiesBackend::Tweet",
690
+ "_neo_id":77,
691
+ "date":1306428934,
692
+ "link":"http://twitter.com/neo4j/statuses/73794416363585536",
693
+ "short":"RT : If you wanna learn graph w",
694
+ "text":
695
+ "RT @peterneubauer: If you wanna learn graph wizardry, sign up for the Graph Bootcamp! http://graphbootcamp.eventbrite.com/ #neo4j #graphdb #nosql",
696
+ "tweet_id":"73794416363585536"},
697
+ "rel_type":"_all"},
698
+ {"_neo_id":504,
699
+ "direction":"outgoing",
700
+ "other_node":
701
+ {"_classname":"BirdiesBackend::User",
702
+ "_neo_id":76,
703
+ "twid":"brunoneckebroek"},
704
+ "rel_type":"_all"},
705
+ {"_neo_id":367,
706
+ "direction":"outgoing",
707
+ "other_node":
708
+ {"_classname":"BirdiesBackend::Link",
709
+ "_neo_id":60,
710
+ "url":"http://slidesha.re/kjKsMC"},
711
+ "rel_type":"_all"},
712
+ {"_neo_id":365,
713
+ "direction":"outgoing",
714
+ "other_node":
715
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":61, "name":"jee"},
716
+ "rel_type":"_all"},
717
+ {"_neo_id":363,
718
+ "direction":"outgoing",
719
+ "other_node":
720
+ {"_classname":"BirdiesBackend::Tweet",
721
+ "_neo_id":62,
722
+ "date":1306437455,
723
+ "link":"http://twitter.com/emileifrem/statuses/73830154262155264",
724
+ "short":"RT : How graph databases can ma",
725
+ "text":
726
+ "RT @neo4j: How graph databases can make you a superstar, by @andres_taylor http://slidesha.re/kjKsMC #graphdb #nosql #JEE #neo4j",
727
+ "tweet_id":"73830154262155264"},
728
+ "rel_type":"_all"},
729
+ {"_neo_id":361,
730
+ "direction":"outgoing",
731
+ "other_node":
732
+ {"_classname":"BirdiesBackend::Tweet",
733
+ "_neo_id":63,
734
+ "date":1306434132,
735
+ "link":"http://twitter.com/bobbynorton/statuses/73816218380935169",
736
+ "short":"RT : Graph Bootcamp: Chicago Su",
737
+ "text":
738
+ "RT @twarko: Graph Bootcamp: Chicago Summer 2011 -- http://graphbootcamp.eventbrite.com/ #graphdb #neo4j #orientdb",
739
+ "tweet_id":"73816218380935169"},
740
+ "rel_type":"_all"},
741
+ {"_neo_id":359,
742
+ "direction":"outgoing",
743
+ "other_node":
744
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":56, "name":"graphdb"},
745
+ "rel_type":"_all"},
746
+ {"_neo_id":357,
747
+ "direction":"outgoing",
748
+ "other_node":
749
+ {"_classname":"BirdiesBackend::Tweet",
750
+ "_neo_id":57,
751
+ "date":1306437485,
752
+ "link":"http://twitter.com/jordiv/statuses/73830279638294528",
753
+ "short":"RT : How graph databases can ma",
754
+ "text":
755
+ "RT @neo4j: How graph databases can make you a superstar, by @andres_taylor http://slidesha.re/kjKsMC #graphdb #nosql #JEE #neo4j",
756
+ "tweet_id":"73830279638294528"},
757
+ "rel_type":"_all"},
758
+ {"_neo_id":355,
759
+ "direction":"outgoing",
760
+ "other_node":
761
+ {"_classname":"BirdiesBackend::User", "_neo_id":58, "twid":"jordiv"},
762
+ "rel_type":"_all"},
763
+ {"_neo_id":353,
764
+ "direction":"outgoing",
765
+ "other_node":
766
+ {"_classname":"BirdiesBackend::User",
767
+ "_neo_id":59,
768
+ "twid":"andres_taylor"},
769
+ "rel_type":"_all"},
770
+ {"_neo_id":351,
771
+ "direction":"outgoing",
772
+ "other_node":
773
+ {"_classname":"BirdiesBackend::Tweet",
774
+ "_neo_id":52,
775
+ "date":1306441507,
776
+ "link":"http://twitter.com/leifwickland/statuses/73847149556809728",
777
+ "short":"Graph databases: \nuse cases and",
778
+ "text":
779
+ "Graph databases: \nuse cases and applications \n- Emil Eifrem, Neo4j @emileifrem #neo4j #gluecon",
780
+ "tweet_id":"73847149556809728"},
781
+ "rel_type":"_all"},
782
+ {"_neo_id":349,
783
+ "direction":"outgoing",
784
+ "other_node":
785
+ {"_classname":"BirdiesBackend::Tweet",
786
+ "_neo_id":53,
787
+ "date":1306437485,
788
+ "link":"http://twitter.com/emileifrem/statuses/73830280250671104",
789
+ "short":"RT : If you wanna learn graph w",
790
+ "text":
791
+ "RT @peterneubauer: If you wanna learn graph wizardry, sign up for the Graph Bootcamp! http://graphbootcamp.eventbrite.com/ #neo4j #graphdb #nosql",
792
+ "tweet_id":"73830280250671104"},
793
+ "rel_type":"_all"},
794
+ {"_neo_id":347,
795
+ "direction":"outgoing",
796
+ "other_node":
797
+ {"_classname":"BirdiesBackend::User",
798
+ "_neo_id":54,
799
+ "twid":"peterneubauer"},
800
+ "rel_type":"_all"},
801
+ {"_neo_id":345,
802
+ "direction":"outgoing",
803
+ "other_node":
804
+ {"_classname":"BirdiesBackend::Link",
805
+ "_neo_id":55,
806
+ "url":"http://graphbootcamp.eventbrite.com/"},
807
+ "rel_type":"_all"},
808
+ {"_neo_id":343,
809
+ "direction":"outgoing",
810
+ "other_node":
811
+ {"_classname":"BirdiesBackend::Tag",
812
+ "_neo_id":48,
813
+ "name":"graphdatabase"},
814
+ "rel_type":"_all"},
815
+ {"_neo_id":341,
816
+ "direction":"outgoing",
817
+ "other_node":
818
+ {"_classname":"BirdiesBackend::User", "_neo_id":49, "twid":"neo4j"},
819
+ "rel_type":"_all"},
820
+ {"_neo_id":339,
821
+ "direction":"outgoing",
822
+ "other_node":
823
+ {"_classname":"BirdiesBackend::Tweet",
824
+ "_neo_id":50,
825
+ "date":1306441762,
826
+ "link":"http://twitter.com/leifwickland/statuses/73848219033026560",
827
+ "short":"Four emerging NoSQL categories:",
828
+ "text":
829
+ "Four emerging NoSQL categories: Key Value, ColumnFamily, Document, Graph. @emileifrem #neo4j #gluecon",
830
+ "tweet_id":"73848219033026560"},
831
+ "rel_type":"_all"},
832
+ {"_neo_id":337,
833
+ "direction":"outgoing",
834
+ "other_node":
835
+ {"_classname":"BirdiesBackend::Tweet",
836
+ "_neo_id":51,
837
+ "date":1306441743,
838
+ "link":"http://twitter.com/angilly/statuses/73848139437707265",
839
+ "short":"Document DBS were inspired by l",
840
+ "text":
841
+ "Document DBS were inspired by lotus notes? What have we done?!? #neo4j #gluecon",
842
+ "tweet_id":"73848139437707265"},
843
+ "rel_type":"_all"},
844
+ {"_neo_id":335,
845
+ "direction":"outgoing",
846
+ "other_node":
847
+ {"_classname":"BirdiesBackend::Tweet",
848
+ "_neo_id":45,
849
+ "date":1306441891,
850
+ "link":"http://twitter.com/leifwickland/statuses/73848760270192640",
851
+ "short":"RT : Document DBS were inspired",
852
+ "text":
853
+ "RT @angilly: Document DBS were inspired by lotus notes? What have we done?!? #neo4j #gluecon",
854
+ "tweet_id":"73848760270192640"},
855
+ "rel_type":"_all"},
856
+ {"_neo_id":333,
857
+ "direction":"outgoing",
858
+ "other_node":
859
+ {"_classname":"BirdiesBackend::Tweet",
860
+ "_neo_id":44,
861
+ "date":1306441908,
862
+ "link":"http://twitter.com/JFP/statuses/73848834639413250",
863
+ "short":" says there are two axes of dat",
864
+ "text":
865
+ "@emileifrem says there are two axes of data scalability: data size and data complexity. #neo4j #gluecon",
866
+ "tweet_id":"73848834639413250"},
867
+ "rel_type":"_all"},
868
+ {"_neo_id":331,
869
+ "direction":"outgoing",
870
+ "other_node":
871
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":47, "name":"nosql"},
872
+ "rel_type":"_all"},
873
+ {"_neo_id":329,
874
+ "direction":"outgoing",
875
+ "other_node":
876
+ {"_classname":"BirdiesBackend::Tweet",
877
+ "_neo_id":46,
878
+ "date":1306441812,
879
+ "link":"http://twitter.com/noveltysystems/statuses/73848430564352001",
880
+ "short":"Graph databases: use cases and ",
881
+ "text":
882
+ "Graph databases: use cases and applications #nosql #graphdatabase #Neo4j @Neo4j",
883
+ "tweet_id":"73848430564352001"},
884
+ "rel_type":"_all"},
885
+ {"_neo_id":327,
886
+ "direction":"outgoing",
887
+ "other_node":
888
+ {"_classname":"BirdiesBackend::Tweet",
889
+ "_neo_id":41,
890
+ "date":1306442028,
891
+ "link":"http://twitter.com/angilly/statuses/73849337989431296",
892
+ "short":"&quot;the zone of SQL adequacy&",
893
+ "text":
894
+ "&quot;the zone of SQL adequacy&quot; #neo4j #Gluecon #bestNewPhrase",
895
+ "tweet_id":"73849337989431296"},
896
+ "rel_type":"_all"},
897
+ {"_neo_id":325,
898
+ "direction":"outgoing",
899
+ "other_node":
900
+ {"_classname":"BirdiesBackend::Tweet",
901
+ "_neo_id":43,
902
+ "date":1306442011,
903
+ "link":"http://twitter.com/JFP/statuses/73849264165502976",
904
+ "short":"NoSQL is for applications that ",
905
+ "text":
906
+ "NoSQL is for applications that are out of the zone of &quot;sql adequacy&quot; #gluecon #neo4j",
907
+ "tweet_id":"73849264165502976"},
908
+ "rel_type":"_all"},
909
+ {"_neo_id":323,
910
+ "direction":"outgoing",
911
+ "other_node":
912
+ {"_classname":"BirdiesBackend::Tweet",
913
+ "_neo_id":42,
914
+ "date":1306442011,
915
+ "link":"http://twitter.com/noveltysystems/statuses/73849265893539840",
916
+ "short":"RT : Graph databases: \nuse case",
917
+ "text":
918
+ "RT @leifwickland: Graph databases: \nuse cases and applications \n- Emil Eifrem, Neo4j @emileifrem #neo4j #gluecon",
919
+ "tweet_id":"73849265893539840"},
920
+ "rel_type":"_all"},
921
+ {"_neo_id":321,
922
+ "direction":"outgoing",
923
+ "other_node":
924
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":73, "name":"cfoundry"},
925
+ "rel_type":"_all"},
926
+ {"_neo_id":319,
927
+ "direction":"outgoing",
928
+ "other_node":
929
+ {"_classname":"BirdiesBackend::User",
930
+ "_neo_id":72,
931
+ "twid":"adriancolyer"},
932
+ "rel_type":"_all"},
933
+ {"_neo_id":317,
934
+ "direction":"outgoing",
935
+ "other_node":
936
+ {"_classname":"BirdiesBackend::Tweet",
937
+ "_neo_id":67,
938
+ "date":1306432523,
939
+ "link":"http://twitter.com/ahzf/statuses/73809469800329217",
940
+ "short":"RT : Graph Bootcamp: Chicago Su",
941
+ "text":
942
+ "RT @twarko: Graph Bootcamp: Chicago Summer 2011 -- http://graphbootcamp.eventbrite.com/ #graphdb #neo4j #orientdb",
943
+ "tweet_id":"73809469800329217"},
944
+ "rel_type":"_all"},
945
+ {"_neo_id":315,
946
+ "direction":"outgoing",
947
+ "other_node":
948
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":66, "name":"orientdb"},
949
+ "rel_type":"_all"},
950
+ {"_neo_id":313,
951
+ "direction":"outgoing",
952
+ "other_node":
953
+ {"_classname":"BirdiesBackend::User", "_neo_id":65, "twid":"twarko"},
954
+ "rel_type":"_all"},
955
+ {"_neo_id":311,
956
+ "direction":"outgoing",
957
+ "other_node":
958
+ {"_classname":"BirdiesBackend::User",
959
+ "_neo_id":64,
960
+ "twid":"bobbynorton"},
961
+ "rel_type":"_all"},
962
+ {"_neo_id":309,
963
+ "direction":"outgoing",
964
+ "other_node":
965
+ {"_classname":"BirdiesBackend::User",
966
+ "_neo_id":71,
967
+ "twid":"agnes_crepet"},
968
+ "rel_type":"_all"},
969
+ {"_neo_id":307,
970
+ "direction":"outgoing",
971
+ "other_node":
972
+ {"_classname":"BirdiesBackend::User", "_neo_id":70, "twid":"mesirii"},
973
+ "rel_type":"_all"},
974
+ {"_neo_id":305,
975
+ "direction":"outgoing",
976
+ "other_node":
977
+ {"_classname":"BirdiesBackend::Tweet",
978
+ "_neo_id":69,
979
+ "date":1306432328,
980
+ "link":"http://twitter.com/mesirii/statuses/73808653223854081",
981
+ "short":" We're working on that already",
982
+ "text":
983
+ "@agnes_crepet @adriancolyer We're working on that already runs see our forked vcap repositories at github #cfoundry #neo4j #graphdb",
984
+ "tweet_id":"73808653223854081"},
985
+ "rel_type":"_all"},
986
+ {"_neo_id":303,
987
+ "direction":"outgoing",
988
+ "other_node":
989
+ {"_classname":"BirdiesBackend::User", "_neo_id":68, "twid":"ahzf"},
990
+ "rel_type":"_all"},
991
+ {"_neo_id":181,
992
+ "direction":"outgoing",
993
+ "other_node":
994
+ {"_classname":"BirdiesBackend::Tweet",
995
+ "_neo_id":40,
996
+ "date":1306442086,
997
+ "link":"http://twitter.com/noveltysystems/statuses/73849581426839552",
998
+ "short":"RT : Four emerging NoSQL catego",
999
+ "text":
1000
+ "RT @leifwickland: Four emerging NoSQL categories: Key Value, ColumnFamily, Document, Graph. @emileifrem #neo4j #gluecon",
1001
+ "tweet_id":"73849581426839552"},
1002
+ "rel_type":"_all"},
1003
+ {"_neo_id":179,
1004
+ "direction":"outgoing",
1005
+ "other_node":
1006
+ {"_classname":"BirdiesBackend::Link",
1007
+ "_neo_id":37,
1008
+ "url":"http://youtu.be/dN8ADE8QpTM"},
1009
+ "rel_type":"_all"},
1010
+ {"_neo_id":177,
1011
+ "direction":"outgoing",
1012
+ "other_node":
1013
+ {"_classname":"BirdiesBackend::User", "_neo_id":36, "twid":"solso"},
1014
+ "rel_type":"_all"},
1015
+ {"_neo_id":175,
1016
+ "direction":"outgoing",
1017
+ "other_node":
1018
+ {"_classname":"BirdiesBackend::Tweet",
1019
+ "_neo_id":39,
1020
+ "date":1306442094,
1021
+ "link":"http://twitter.com/ryanwi/statuses/73849614150811649",
1022
+ "short":"&quot;The zone of SQL adequacy&",
1023
+ "text":
1024
+ "&quot;The zone of SQL adequacy&quot; generates quite a response. #neo4j #gluecon",
1025
+ "tweet_id":"73849614150811649"},
1026
+ "rel_type":"_all"},
1027
+ {"_neo_id":173,
1028
+ "direction":"outgoing",
1029
+ "other_node":
1030
+ {"_classname":"BirdiesBackend::Tweet",
1031
+ "_neo_id":38,
1032
+ "date":1306442114,
1033
+ "link":"http://twitter.com/noveltysystems/statuses/73849696929595392",
1034
+ "short":"RT : says there are two axes o",
1035
+ "text":
1036
+ "RT @JFP: @emileifrem says there are two axes of data scalability: data size and data complexity. #neo4j #gluecon",
1037
+ "tweet_id":"73849696929595392"},
1038
+ "rel_type":"_all"},
1039
+ {"_neo_id":171,
1040
+ "direction":"outgoing",
1041
+ "other_node":
1042
+ {"_classname":"BirdiesBackend::User", "_neo_id":33, "twid":"dpe82"},
1043
+ "rel_type":"_all"},
1044
+ {"_neo_id":169,
1045
+ "direction":"outgoing",
1046
+ "other_node":
1047
+ {"_classname":"BirdiesBackend::Tweet",
1048
+ "_neo_id":32,
1049
+ "date":1306442282,
1050
+ "link":"http://twitter.com/dpe82/statuses/73850402398932992",
1051
+ "short":"RT : &quot;the zone of SQL adeq",
1052
+ "text":
1053
+ "RT @angilly: &quot;the zone of SQL adequacy&quot; #neo4j #Gluecon #bestNewPhrase",
1054
+ "tweet_id":"73850402398932992"},
1055
+ "rel_type":"_all"},
1056
+ {"_neo_id":167,
1057
+ "direction":"outgoing",
1058
+ "other_node":
1059
+ {"_classname":"BirdiesBackend::Tweet",
1060
+ "_neo_id":35,
1061
+ "date":1306442139,
1062
+ "link":"http://twitter.com/solso/statuses/73849803670425600",
1063
+ "short":" talk about at !! wish they us",
1064
+ "text":
1065
+ "@emileifrem talk about #neo4j at #gluecon!! wish they used the locality preserving graph partitioning alg in http://youtu.be/dN8ADE8QpTM :)",
1066
+ "tweet_id":"73849803670425600"},
1067
+ "rel_type":"_all"},
1068
+ {"_neo_id":165,
1069
+ "direction":"outgoing",
1070
+ "other_node":
1071
+ {"_classname":"BirdiesBackend::Tweet",
1072
+ "_neo_id":34,
1073
+ "date":1306442162,
1074
+ "link":"http://twitter.com/noveltysystems/statuses/73849900177170432",
1075
+ "short":"RT : &quot;the zone of SQL adeq",
1076
+ "text":
1077
+ "RT @angilly: &quot;the zone of SQL adequacy&quot; #neo4j #Gluecon #bestNewPhrase",
1078
+ "tweet_id":"73849900177170432"},
1079
+ "rel_type":"_all"},
1080
+ {"_neo_id":163,
1081
+ "direction":"outgoing",
1082
+ "other_node":
1083
+ {"_classname":"BirdiesBackend::Tweet",
1084
+ "_neo_id":30,
1085
+ "date":1306442465,
1086
+ "link":"http://twitter.com/ryanwi/statuses/73851167171555328",
1087
+ "short":"Whiteboard Friendly ",
1088
+ "text":"Whiteboard Friendly #neo4j #gluecon",
1089
+ "tweet_id":"73851167171555328"},
1090
+ "rel_type":"_all"},
1091
+ {"_neo_id":161,
1092
+ "direction":"outgoing",
1093
+ "other_node":
1094
+ {"_classname":"BirdiesBackend::User", "_neo_id":31, "twid":"ryanwi"},
1095
+ "rel_type":"_all"},
1096
+ {"_neo_id":159,
1097
+ "direction":"outgoing",
1098
+ "other_node":
1099
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":28, "name":"dangerous"},
1100
+ "rel_type":"_all"},
1101
+ {"_neo_id":157,
1102
+ "direction":"outgoing",
1103
+ "other_node":
1104
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":29, "name":"nogis"},
1105
+ "rel_type":"_all"},
1106
+ {"_neo_id":155,
1107
+ "direction":"outgoing",
1108
+ "other_node":
1109
+ {"_classname":"BirdiesBackend::Tweet",
1110
+ "_neo_id":26,
1111
+ "date":1306442500,
1112
+ "link":"http://twitter.com/spara/statuses/73851316585234433",
1113
+ "short":"In preso, experiencing delusio",
1114
+ "text":
1115
+ "In #Neo4J preso, experiencing delusions of grandeur for implementing #dangerous #NoGIS #gluecon",
1116
+ "tweet_id":"73851316585234433"},
1117
+ "rel_type":"_all"},
1118
+ {"_neo_id":153,
1119
+ "direction":"outgoing",
1120
+ "other_node":
1121
+ {"_classname":"BirdiesBackend::User", "_neo_id":27, "twid":"spara"},
1122
+ "rel_type":"_all"},
1123
+ {"_neo_id":151,
1124
+ "direction":"outgoing",
1125
+ "other_node":
1126
+ {"_classname":"BirdiesBackend::Tweet",
1127
+ "_neo_id":24,
1128
+ "date":1306443119,
1129
+ "link":"http://twitter.com/leifwickland/statuses/73853910804213761",
1130
+ "short":" has a directed graph model, bu",
1131
+ "text":
1132
+ "#Neo4j has a directed graph model, but you can traverse the graph from destination to source, vice versa, or both. #gluecon",
1133
+ "tweet_id":"73853910804213761"},
1134
+ "rel_type":"_all"},
1135
+ {"_neo_id":149,
1136
+ "direction":"outgoing",
1137
+ "other_node":
1138
+ {"_classname":"BirdiesBackend::Tweet",
1139
+ "_neo_id":25,
1140
+ "date":1306442613,
1141
+ "link":"http://twitter.com/leifwickland/statuses/73851789753061376",
1142
+ "short":" allows you to create arbitrary",
1143
+ "text":
1144
+ "#Neo4j allows you to create arbitrary relationships between values in the graph. Allows you to do transactions; full ACID. #gluecon",
1145
+ "tweet_id":"73851789753061376"},
1146
+ "rel_type":"_all"},
1147
+ {"_neo_id":147,
1148
+ "direction":"outgoing",
1149
+ "other_node":
1150
+ {"_classname":"BirdiesBackend::Tweet",
1151
+ "_neo_id":22,
1152
+ "date":1306443425,
1153
+ "link":"http://twitter.com/noveltysystems/statuses/73855197448904704",
1154
+ "short":"RT : has a directed graph mode",
1155
+ "text":
1156
+ "RT @leifwickland: #Neo4j has a directed graph model, but you can traverse the graph from destination to source, vice versa, or both. #gluecon",
1157
+ "tweet_id":"73855197448904704"},
1158
+ "rel_type":"_all"},
1159
+ {"_neo_id":145,
1160
+ "direction":"outgoing",
1161
+ "other_node":
1162
+ {"_classname":"BirdiesBackend::User",
1163
+ "_neo_id":23,
1164
+ "twid":"noveltysystems"},
1165
+ "rel_type":"_all"},
1166
+ {"_neo_id":143,
1167
+ "direction":"outgoing",
1168
+ "other_node":
1169
+ {"_classname":"BirdiesBackend::User",
1170
+ "_neo_id":20,
1171
+ "twid":"leifwickland"},
1172
+ "rel_type":"_all"},
1173
+ {"_neo_id":141,
1174
+ "direction":"outgoing",
1175
+ "other_node":
1176
+ {"_classname":"BirdiesBackend::User",
1177
+ "_neo_id":21,
1178
+ "twid":"emileifrem"},
1179
+ "rel_type":"_all"},
1180
+ {"_neo_id":139,
1181
+ "direction":"outgoing",
1182
+ "other_node":
1183
+ {"_classname":"BirdiesBackend::User", "_neo_id":18, "twid":"woodardj"},
1184
+ "rel_type":"_all"},
1185
+ {"_neo_id":137,
1186
+ "direction":"outgoing",
1187
+ "other_node":
1188
+ {"_classname":"BirdiesBackend::Tweet",
1189
+ "_neo_id":19,
1190
+ "date":1306443842,
1191
+ "link":"http://twitter.com/leifwickland/statuses/73856945894850560",
1192
+ "short":"&quot;Unfortunately I don't hav",
1193
+ "text":
1194
+ "&quot;Unfortunately I don't have time to talk about my competitors, so I'm going to skip this slide.&quot; @emileifrem #neo4j #gluecon",
1195
+ "tweet_id":"73856945894850560"},
1196
+ "rel_type":"_all"},
1197
+ {"_neo_id":135,
1198
+ "direction":"outgoing",
1199
+ "other_node":
1200
+ {"_classname":"BirdiesBackend::User", "_neo_id":16, "twid":"jfp"},
1201
+ "rel_type":"_all"},
1202
+ {"_neo_id":133,
1203
+ "direction":"outgoing",
1204
+ "other_node":
1205
+ {"_classname":"BirdiesBackend::Tweet",
1206
+ "_neo_id":17,
1207
+ "date":1306443927,
1208
+ "link":"http://twitter.com/angilly/statuses/73857302997909504",
1209
+ "short":" he just did! ",
1210
+ "text":"@woodardj he just did! #neo4j #gluecon",
1211
+ "tweet_id":"73857302997909504"},
1212
+ "rel_type":"_all"},
1213
+ {"_neo_id":131,
1214
+ "direction":"outgoing",
1215
+ "other_node":
1216
+ {"_classname":"BirdiesBackend::User",
1217
+ "_neo_id":15,
1218
+ "twid":"jonam_biz"},
1219
+ "rel_type":"_all"},
1220
+ {"_neo_id":129,
1221
+ "direction":"outgoing",
1222
+ "other_node":
1223
+ {"_classname":"BirdiesBackend::Tweet",
1224
+ "_neo_id":14,
1225
+ "date":1306444074,
1226
+ "link":"http://twitter.com/jonam_biz/statuses/73857916628770816",
1227
+ "short":"RT : NoSQL is for applications ",
1228
+ "text":
1229
+ "RT @JFP: NoSQL is for applications that are out of the zone of &quot;sql adequacy&quot; #gluecon #neo4j",
1230
+ "tweet_id":"73857916628770816"},
1231
+ "rel_type":"_all"},
1232
+ {"_neo_id":127,
1233
+ "direction":"outgoing",
1234
+ "other_node":
1235
+ {"_classname":"BirdiesBackend::Tag",
1236
+ "_neo_id":13,
1237
+ "name":"bestnewphrase"},
1238
+ "rel_type":"_all"},
1239
+ {"_neo_id":125,
1240
+ "direction":"outgoing",
1241
+ "other_node":
1242
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":12, "name":"gluecon"},
1243
+ "rel_type":"_all"},
1244
+ {"_neo_id":123,
1245
+ "direction":"outgoing",
1246
+ "other_node":
1247
+ {"_classname":"BirdiesBackend::Tag", "_neo_id":11, "name":"neo4j"},
1248
+ "rel_type":"_all"},
1249
+ {"_neo_id":121,
1250
+ "direction":"outgoing",
1251
+ "other_node":
1252
+ {"_classname":"BirdiesBackend::User", "_neo_id":10, "twid":"angilly"},
1253
+ "rel_type":"_all"},
1254
+ {"_neo_id":119,
1255
+ "direction":"outgoing",
1256
+ "other_node":
1257
+ {"_classname":"BirdiesBackend::User",
1258
+ "_neo_id":9,
1259
+ "twid":"kevinmarks"},
1260
+ "rel_type":"_all"},
1261
+ {"_neo_id":117,
1262
+ "direction":"outgoing",
1263
+ "other_node":{"_classname":"BirdiesBackend::Tweeters", "_neo_id":8},
1264
+ "rel_type":"_all"},
1265
+ {"_neo_id":115,
1266
+ "direction":"outgoing",
1267
+ "other_node":
1268
+ {"_classname":"BirdiesBackend::Tweet",
1269
+ "_neo_id":7,
1270
+ "date":1306446889,
1271
+ "link":"http://twitter.com/kevinmarks/statuses/73869723485478913",
1272
+ "short":"RT : &quot;the zone of SQL adeq",
1273
+ "text":
1274
+ "RT @angilly: &quot;the zone of SQL adequacy&quot; #neo4j #Gluecon #bestNewPhrase",
1275
+ "tweet_id":"73869723485478913"},
1276
+ "rel_type":"_all"},
1277
+ {"_neo_id":0,
1278
+ "direction":"incoming",
1279
+ "other_node":
1280
+ {"_neo_id":0,
1281
+ "gemFile":
1282
+ "source :rubygems\ngem 'jruby-openssl'\ngem 'neo4j' #, :path : '/home/andreas/projects/neo4j'\ngem 'birdies-backend', :git : 'git://github.com/andreasronge/birdies-backend.git' #:path : '/home/andreas/projects/birdies-backend'\n"},
1283
+ "rel_type":"Neo4j::Rails::Model"}]
1284
+
1285
+ }
1286
+
1287
+