gltail 0.0.7 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +1 -0
- data/History.txt +8 -1
- data/lib/gl_tail.rb +1 -1
- data/lib/gl_tail/activity.rb +12 -15
- data/lib/gl_tail/block.rb +102 -34
- data/lib/gl_tail/element.rb +137 -13
- data/lib/gl_tail/engine.rb +9 -4
- metadata +89 -62
- metadata.gz.sig +0 -0
data.tar.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Y�3L��z�#����6�2z�V6a�\��8�i�U, ֩��WE�_��{o�a~4!�Ĵ��B�L�{|�O�M�K�0��?Z�l5�H�h��f����M�����p��k�/���ҌYG��n��2���k�n~+dφj��^PP�
|
data/History.txt
CHANGED
@@ -1,4 +1,11 @@
|
|
1
|
-
== 0.0
|
1
|
+
== 0.1.0 / 2008-02-??
|
2
|
+
|
3
|
+
* Only sort needed Elements when needed
|
4
|
+
* Keep Element List mostly sorted
|
5
|
+
* Show Events from Elements not shown on screen
|
6
|
+
* Show bars representing rate behind the element texts
|
7
|
+
|
8
|
+
== 0.0.7 / 2007-10-27
|
2
9
|
|
3
10
|
* Make textures from BitmapCharacter font
|
4
11
|
* Use textured quads instead of BitmapCharacter
|
data/lib/gl_tail.rb
CHANGED
data/lib/gl_tail/activity.rb
CHANGED
@@ -11,14 +11,15 @@ class Activity
|
|
11
11
|
def initialize(message, x, y, z, color, size, type = 0)
|
12
12
|
@message = message
|
13
13
|
@x, @y, @z = x, y, z
|
14
|
-
@xi, @yi, @zi = 0.012 + (rand(100)/100.0 ) * 0.0012 , 0.002 + (rand(1000)/1000.0 ) * 0.002, 0
|
15
|
-
|
14
|
+
# @xi, @yi, @zi = 0.012 + (rand(100)/100.0 ) * 0.0012 , 0.002 + (rand(1000)/1000.0 ) * 0.002, 0
|
15
|
+
@xi, @yi, @zi = 0.006 , 0.0013, 0
|
16
16
|
|
17
17
|
if @x >= 0.0
|
18
18
|
@xi = -@xi
|
19
19
|
end
|
20
20
|
|
21
|
-
@xi = (rand(100)/100.0 * 0.
|
21
|
+
@xi = (rand(100)/100.0 * 0.002) - 0.001 if type == 2
|
22
|
+
@yi = (rand(100)/100.0 * 0.002) - 0.001 if type == 2
|
22
23
|
|
23
24
|
@color = color
|
24
25
|
@size = size
|
@@ -30,14 +31,14 @@ class Activity
|
|
30
31
|
def render(engine)
|
31
32
|
if @type != 5
|
32
33
|
if engine.screen.wanted_fps == 0
|
33
|
-
@x += @xi
|
34
|
-
@y += @yi
|
35
|
-
@yi = @yi - 0.
|
34
|
+
@x += @xi
|
35
|
+
@y += @yi
|
36
|
+
@yi = @yi - 0.00008
|
36
37
|
else
|
37
38
|
@fps_mod ||= (60.0 / engine.screen.wanted_fps)
|
38
|
-
@x +=
|
39
|
-
@y +=
|
40
|
-
@yi = @yi -
|
39
|
+
@x += @xi * @fps_mod
|
40
|
+
@y += @yi * @fps_mod
|
41
|
+
@yi = @yi - 0.00008 * @fps_mod
|
41
42
|
end
|
42
43
|
|
43
44
|
# @yi = @yi * 1.01
|
@@ -98,14 +99,10 @@ class Activity
|
|
98
99
|
|
99
100
|
list = glGenLists(1)
|
100
101
|
glNewList(list, GL_COMPILE)
|
101
|
-
|
102
|
+
|
102
103
|
tmp = 10 + 10 * ((@size-engine.screen.min_blob_size)/engine.screen.max_blob_size)
|
103
|
-
if not tmp
|
104
|
-
puts "THIS KEEPS CRASHING FOR ME WITH tmp == NaN -- cant figure out why"
|
105
|
-
tmp = 2
|
106
|
-
end
|
107
|
-
|
108
104
|
glutSolidSphere(@size, tmp, 2)
|
105
|
+
|
109
106
|
glEndList()
|
110
107
|
BlobStore.put(@size,list)
|
111
108
|
end
|
data/lib/gl_tail/block.rb
CHANGED
@@ -12,10 +12,12 @@ class Block
|
|
12
12
|
config_attribute :color, "FIXME: add description", :type => :color
|
13
13
|
config_attribute :order, "FIXME"
|
14
14
|
config_attribute :size, "FIXME"
|
15
|
-
config_attribute :auto_clean
|
15
|
+
config_attribute :auto_clean, "FIXME"
|
16
|
+
config_attribute :activity_type, "FIXME"
|
16
17
|
|
17
18
|
attr_accessor :column
|
18
|
-
attr_reader
|
19
|
+
attr_reader :config
|
20
|
+
attr_reader :max_rate
|
19
21
|
|
20
22
|
def initialize(config, name)
|
21
23
|
@config = config
|
@@ -23,16 +25,19 @@ class Block
|
|
23
25
|
|
24
26
|
@size = 10
|
25
27
|
@auto_clean = true
|
28
|
+
@activity_type = "blobs"
|
26
29
|
@order = 100
|
27
|
-
# @color = [1.0, 1.0, 1.0, 1.0]
|
28
30
|
|
29
31
|
@show = 0
|
30
32
|
|
31
|
-
@header = Element.new(self, @name.upcase)
|
32
|
-
@header.color = [1.0, 1.0, 1.0, 1.0]
|
33
|
+
@header = Element.new(self, @name.upcase, [1.0, 1.0, 1.0, 1.0])
|
33
34
|
|
34
35
|
@elements = { }
|
35
36
|
@bottom_position = -@config.screen.top
|
37
|
+
@max_rate = 1.0/599
|
38
|
+
|
39
|
+
@sorted = []
|
40
|
+
@updated = false
|
36
41
|
end
|
37
42
|
|
38
43
|
def show=(value)
|
@@ -72,59 +77,122 @@ class Block
|
|
72
77
|
end
|
73
78
|
|
74
79
|
def render(engine, num)
|
75
|
-
return num if @elements.size == 0
|
80
|
+
return num if @elements.size == 0 || @sorted.size == 0
|
76
81
|
|
77
82
|
@header.wy = top - (num * line_size)
|
78
83
|
# @header.y = @header.wy if @header.y == -$CONFIG.top
|
79
84
|
@header.render(engine)
|
80
85
|
num += 1
|
81
86
|
|
82
|
-
|
83
|
-
when 0: @elements.values.sort { |k,v| v.rate <=> k.rate}[0..@size-1]
|
84
|
-
when 1: @elements.values.sort { |k,v| v.total <=> k.total}[0..@size-1]
|
85
|
-
when 2: @elements.values.sort { |k,v| v.average <=> k.average}[0..@size-1]
|
86
|
-
end
|
87
|
+
count = 0
|
87
88
|
|
88
|
-
sorted.each do |e|
|
89
|
-
e.wy = top - (num * line_size)
|
90
|
-
e.render(engine)
|
89
|
+
@sorted.each do |e|
|
91
90
|
engine.stats[0] += 1
|
92
|
-
if
|
93
|
-
|
91
|
+
if count < @size
|
92
|
+
e.wy = top - (num * line_size)
|
93
|
+
e.render(engine)
|
94
|
+
num += 1
|
95
|
+
@max_rate = e.rate if e.rate > @max_rate
|
96
|
+
else
|
97
|
+
e.render_events(engine)
|
94
98
|
end
|
95
|
-
num += 1
|
96
|
-
end
|
97
99
|
|
98
|
-
|
99
|
-
engine.stats[0] += 1
|
100
|
-
e.activities.each do |a|
|
101
|
-
a.render(engine)
|
102
|
-
if a.x > 1.0 || a.x < -1.0 || a.y > @config.screen.aspect
|
103
|
-
e.activities.delete a
|
104
|
-
end
|
105
|
-
end
|
106
|
-
if e.activities.size == 0 && @auto_clean && e.updates > 59
|
100
|
+
if e.activities.size == 0 && (e.rate <= 0.001 || count > 100) && @auto_clean
|
107
101
|
@elements.delete(e.name)
|
102
|
+
@sorted.delete(e)
|
108
103
|
end
|
104
|
+
count += 1
|
109
105
|
end
|
110
|
-
|
111
|
-
@bottom_position = top - ((sorted.size > 0 ? (num-1) : num) * line_size)
|
106
|
+
|
107
|
+
@bottom_position = top - ((@sorted.size > 0 ? (num-1) : num) * line_size)
|
112
108
|
num + 1
|
113
109
|
end
|
114
110
|
|
115
111
|
def add_activity(options = { })
|
116
|
-
|
117
|
-
x
|
112
|
+
return unless options[:name]
|
113
|
+
x = nil
|
114
|
+
unless @elements[options[:name]]
|
115
|
+
x = Element.new(self, options[:name], @color || options[:color] )
|
116
|
+
@elements[options[:name]] = x
|
117
|
+
if @sorted.size > @size
|
118
|
+
@sorted.insert(@size,x)
|
119
|
+
else
|
120
|
+
@sorted << x
|
121
|
+
end
|
122
|
+
else
|
123
|
+
x = @elements[options[:name]]
|
124
|
+
end
|
125
|
+
x.add_activity(options[:message], @color || options[:color], options[:size] || 0.01, options[:type] || 0 )
|
126
|
+
@updated = true
|
118
127
|
end
|
119
128
|
|
120
129
|
def add_event(options = { })
|
121
|
-
|
130
|
+
return unless options[:name]
|
131
|
+
x = nil
|
132
|
+
unless @elements[options[:name]]
|
133
|
+
x = Element.new(self, options[:name], @color || options[:color] )
|
134
|
+
@elements[options[:name]] = x
|
135
|
+
if @sorted.size > @size
|
136
|
+
@sorted.insert(@size,x)
|
137
|
+
else
|
138
|
+
@sorted << x
|
139
|
+
end
|
140
|
+
else
|
141
|
+
x = @elements[options[:name]]
|
142
|
+
end
|
143
|
+
|
122
144
|
x.add_event(options[:message], options[:color] || @color, options[:update_stats] || false)
|
145
|
+
@updated = true
|
123
146
|
end
|
124
147
|
|
125
148
|
def update
|
126
|
-
@
|
127
|
-
|
149
|
+
return if @sorted.size == 0
|
150
|
+
|
151
|
+
@max_rate = @max_rate * 0.9999
|
152
|
+
|
153
|
+
startTime = Time.now
|
154
|
+
|
155
|
+
i = 1
|
156
|
+
@ordered = [@sorted[0]]
|
157
|
+
min = @sorted[0].update
|
158
|
+
size = @sorted.size
|
159
|
+
|
160
|
+
while i < size
|
161
|
+
rate = @sorted[i].update
|
162
|
+
if rate > min
|
163
|
+
j = i - 1
|
164
|
+
while @ordered[j-1].rate < rate && j > 0
|
165
|
+
j -= 1
|
166
|
+
end
|
167
|
+
@ordered.insert(j, @sorted[i])
|
168
|
+
else
|
169
|
+
@ordered << @sorted[i]
|
170
|
+
min = rate if i < @size
|
171
|
+
end
|
172
|
+
i += 1
|
128
173
|
end
|
174
|
+
|
175
|
+
@sorted = @ordered
|
176
|
+
|
177
|
+
# puts "#{@name} [#{@sorted.size}]: [#{Time.now - startTime}]" if @name == "urls"
|
178
|
+
|
179
|
+
return
|
180
|
+
|
181
|
+
return unless @updated
|
182
|
+
|
183
|
+
sortTime = Time.now
|
184
|
+
# iSort( @sorted )
|
185
|
+
|
186
|
+
# @sorted = case @show
|
187
|
+
# when 0: @sorted.insertionSort
|
188
|
+
# when 1: @sorted.sort! { |k,v| "#{sprintf('%05d',v.total)} #{v.rate}" <=> "#{sprintf('%05d',k.total)} #{k.rate}" }
|
189
|
+
# when 2: @sorted.sort! { |k,v| "#{v.average} #{v.name}" <=> "#{k.average} #{k.name}" }
|
190
|
+
# end
|
191
|
+
|
192
|
+
puts "#{@name} [#{@sorted.size}]: [#{sortTime - startTime}] [#{Time.now - sortTime}]"
|
193
|
+
|
194
|
+
@updated = false
|
195
|
+
|
129
196
|
end
|
197
|
+
|
130
198
|
end
|
data/lib/gl_tail/element.rb
CHANGED
@@ -8,9 +8,13 @@ class Element
|
|
8
8
|
attr_accessor :wy, :y, :active, :average_size, :right, :color, :name
|
9
9
|
attr_reader :rate, :messages, :activities, :queue, :updates, :average, :total
|
10
10
|
|
11
|
-
def initialize(block, name, start_position = nil)
|
11
|
+
def initialize(block, name, color, start_position = nil)
|
12
12
|
@block = block
|
13
13
|
|
14
|
+
if name.nil?
|
15
|
+
name = ''
|
16
|
+
end
|
17
|
+
|
14
18
|
if name =~ /^\d+.\d+.\d+.\d+$/
|
15
19
|
@name = Resolver.resolv(name, self)
|
16
20
|
else
|
@@ -30,11 +34,20 @@ class Element
|
|
30
34
|
@last_time = 0
|
31
35
|
@step = 0, @updates = 0
|
32
36
|
@active = false
|
37
|
+
@color = color
|
38
|
+
@type = (@block.activity_type == "blobs" ? :blobs : :bars)
|
39
|
+
@bar_color ||= @color.dup
|
40
|
+
|
33
41
|
end
|
34
42
|
|
35
43
|
def add_activity(message, color, size, type)
|
44
|
+
@bar_color[0] = @bar_color[0] + (@color[0] - @bar_color[0]) / 5
|
45
|
+
@bar_color[1] = @bar_color[1] + (@color[1] - @bar_color[1]) / 5
|
46
|
+
@bar_color[2] = @bar_color[2] + (@color[2] - @bar_color[2]) / 5
|
47
|
+
|
36
48
|
@pending.push Item.new(message, size, color, type) if(type != 3)
|
37
49
|
@messages += 1
|
50
|
+
@total += 1
|
38
51
|
@sum += size
|
39
52
|
@color = color
|
40
53
|
|
@@ -48,6 +61,7 @@ class Element
|
|
48
61
|
@pending.push Item.new(message, 0.01, color, 2)
|
49
62
|
if update_stats
|
50
63
|
@messages += 1
|
64
|
+
@total += 1
|
51
65
|
if @rate == 0
|
52
66
|
@rate = 1.0 / 60
|
53
67
|
@messages = 0
|
@@ -57,17 +71,16 @@ class Element
|
|
57
71
|
|
58
72
|
|
59
73
|
def update
|
60
|
-
@
|
74
|
+
@rate = (@rate * 299.0 + @messages) / 300.0
|
61
75
|
@updates += 1
|
62
|
-
@rate = (@rate.to_f * 299 + @messages) / 300
|
63
76
|
@messages = 0
|
64
|
-
|
65
|
-
|
77
|
+
size = @pending.size
|
78
|
+
if size > 0
|
66
79
|
@average = @sum / @total
|
67
80
|
|
68
|
-
@step = 1.0 /
|
69
|
-
@queue = @
|
70
|
-
if
|
81
|
+
@step = 1.0 / size * 1000.0
|
82
|
+
@queue = @pending
|
83
|
+
if size == 1
|
71
84
|
@step = rand(1000) * 1.0
|
72
85
|
end
|
73
86
|
@pending = []
|
@@ -76,8 +89,36 @@ class Element
|
|
76
89
|
end
|
77
90
|
@last_time = glutGet(GLUT_ELAPSED_TIME)
|
78
91
|
@last_time += @step if @queue.size == 1
|
79
|
-
|
92
|
+
@rate
|
93
|
+
end
|
94
|
+
|
95
|
+
def render_events(engine)
|
96
|
+
@color ||= [1.0, 1.0, 1.0, 1.0]
|
97
|
+
|
98
|
+
t = glutGet(GLUT_ELAPSED_TIME)
|
99
|
+
while( (@queue.size > 0) && (@last_time < t ) )
|
80
100
|
|
101
|
+
@last_time += @step
|
102
|
+
item = @queue.pop
|
103
|
+
url = item.message
|
104
|
+
color = item.color
|
105
|
+
size = item.size
|
106
|
+
type = item.type
|
107
|
+
|
108
|
+
if type == 2
|
109
|
+
@activities.push Activity.new(url, 0.0 - (0.008 * url.length), engine.screen.top, 0.0, color, size, type)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
@activities.each do |a|
|
114
|
+
if a.x > 1.0 || a.x < -1.0 || a.y < -(engine.screen.aspect*1.5)
|
115
|
+
@activities.delete a
|
116
|
+
else
|
117
|
+
a.wy = @wy + 0.005 if(a.type == 5 && @wy != a.wy)
|
118
|
+
a.render(engine)
|
119
|
+
engine.stats[1] += 1
|
120
|
+
end
|
121
|
+
end
|
81
122
|
|
82
123
|
end
|
83
124
|
|
@@ -116,9 +157,67 @@ class Element
|
|
116
157
|
end
|
117
158
|
|
118
159
|
glPushMatrix()
|
119
|
-
|
120
160
|
glTranslate(@x, @y, @z)
|
121
161
|
|
162
|
+
|
163
|
+
if( rate > 0.0 )
|
164
|
+
glBegin(GL_QUADS)
|
165
|
+
|
166
|
+
if @x >= 0
|
167
|
+
y2 = 0.0
|
168
|
+
@x1 = 7*8.0 / (engine.screen.window_width / 2.0)
|
169
|
+
y1 = engine.screen.line_size * 0.9
|
170
|
+
x2 = @x1 + ((@block.width+1) * 8.0 / (engine.screen.window_width / 2.0) ) * (rate / @block.max_rate)
|
171
|
+
|
172
|
+
@x2 ||= @x1
|
173
|
+
d = (@x2 - x2)
|
174
|
+
if d.abs < 0.001
|
175
|
+
@x2 = x2
|
176
|
+
else
|
177
|
+
@x2 -= d / 40
|
178
|
+
end
|
179
|
+
glColor(@bar_color)
|
180
|
+
glVertex3f(@x1, y1, @z)
|
181
|
+
glColor(@bar_color)
|
182
|
+
glVertex3f(@x2, y1, @z)
|
183
|
+
glColor([0.0, 0.0, 0.0, 0.0])
|
184
|
+
glVertex3f(@x2, y2, @z)
|
185
|
+
glColor(@bar_color)
|
186
|
+
glVertex3f(@x1, y2, @z)
|
187
|
+
|
188
|
+
else
|
189
|
+
@x2 = (@block.width+1)*8.0 / (engine.screen.window_width / 2.0)
|
190
|
+
y2 = 0.0
|
191
|
+
y1 = engine.screen.line_size * 0.9
|
192
|
+
x1 = ((@block.width * 8.0) / (engine.screen.window_width / 2.0) ) * (1.0 - rate / @block.max_rate)
|
193
|
+
|
194
|
+
@x1 ||= @x2
|
195
|
+
d = (@x1 - x1)
|
196
|
+
if d.abs < 0.001
|
197
|
+
@x1 = x1
|
198
|
+
else
|
199
|
+
@x1 -= d / 20
|
200
|
+
end
|
201
|
+
|
202
|
+
glColor(@bar_color)
|
203
|
+
glVertex3f(@x1, y1, @z)
|
204
|
+
glColor(@bar_color)
|
205
|
+
glVertex3f(@x2, y1, @z)
|
206
|
+
glColor(@bar_color)
|
207
|
+
glVertex3f(@x2, y2, @z)
|
208
|
+
glColor([0.0, 0.0, 0.0, 0.0])
|
209
|
+
glVertex3f(@x1, y2, @z)
|
210
|
+
|
211
|
+
end
|
212
|
+
|
213
|
+
|
214
|
+
glEnd
|
215
|
+
|
216
|
+
end
|
217
|
+
|
218
|
+
|
219
|
+
# glTranslate(@x, @y, @z)
|
220
|
+
|
122
221
|
glColor( (@queue.size > 0 ? (engine.screen.highlight_color || [1.0, 0.0, 0.0, 1.0]) : @color ) )
|
123
222
|
|
124
223
|
case @block.show
|
@@ -144,10 +243,10 @@ class Element
|
|
144
243
|
raise "unknown block type #{self.inspect}"
|
145
244
|
end
|
146
245
|
|
147
|
-
|
246
|
+
if @x < 0
|
148
247
|
str = sprintf("%#{@block.width}s %s", @name.length > @block.width ? @name[-@block.width..-1] : @name, txt)
|
149
248
|
else
|
150
|
-
str = sprintf("%s
|
249
|
+
str = sprintf("%s%s", txt, @name[0..@block.width-1])
|
151
250
|
end
|
152
251
|
|
153
252
|
engine.render_string(str)
|
@@ -165,7 +264,7 @@ class Element
|
|
165
264
|
type = item.type
|
166
265
|
|
167
266
|
if type == 2
|
168
|
-
@activities.push Activity.new(url, 0.0 - (0.
|
267
|
+
@activities.push Activity.new(url, 0.0 - (0.008 * url.length), engine.screen.top, 0.0, color, size, type)
|
169
268
|
elsif type == 5
|
170
269
|
a = Activity.new(url, 0.0, engine.screen.top, 0.0, color, size, type)
|
171
270
|
a.wx = @wx
|
@@ -190,5 +289,30 @@ class Element
|
|
190
289
|
end
|
191
290
|
end
|
192
291
|
|
292
|
+
@bar_color[0] = @bar_color[0] + (0.15 - @bar_color[0]) / 100
|
293
|
+
@bar_color[1] = @bar_color[1] + (0.15 - @bar_color[1]) / 100
|
294
|
+
@bar_color[2] = @bar_color[2] + (0.15 - @bar_color[2]) / 100
|
295
|
+
|
296
|
+
end
|
297
|
+
|
298
|
+
def <=>(b)
|
299
|
+
b.rate <=> self.rate
|
300
|
+
end
|
301
|
+
|
302
|
+
def > (b)
|
303
|
+
b.rate > self.rate
|
193
304
|
end
|
305
|
+
|
306
|
+
def < (b)
|
307
|
+
b.rate < self.rate
|
308
|
+
end
|
309
|
+
|
310
|
+
def <= (b)
|
311
|
+
b.rate <= self.rate
|
312
|
+
end
|
313
|
+
|
314
|
+
def >= (b)
|
315
|
+
b.rate >= self.rate
|
316
|
+
end
|
317
|
+
|
194
318
|
end
|
data/lib/gl_tail/engine.rb
CHANGED
@@ -76,7 +76,7 @@ module GlTail
|
|
76
76
|
|
77
77
|
@frames += 1
|
78
78
|
t = glutGet(GLUT_ELAPSED_TIME)
|
79
|
-
if t - @t0 >=
|
79
|
+
if t - @t0 >= 10000
|
80
80
|
seconds = (t - @t0) / 1000.0
|
81
81
|
$FPS = @frames / seconds
|
82
82
|
printf("%d frames in %6.3f seconds = %6.3f FPS\n",
|
@@ -226,14 +226,19 @@ module GlTail
|
|
226
226
|
|
227
227
|
glLightfv(GL_LIGHT0, GL_POSITION, [5.0, 5.0, 0.0, 0.0])
|
228
228
|
glLightfv(GL_LIGHT0, GL_AMBIENT, [0,0,0,1])
|
229
|
+
|
230
|
+
glLightModel(GL_LIGHT_MODEL_AMBIENT, [0.1,0.1,0.1,1]);
|
231
|
+
# glLightModel(GL_LIGHT_MODEL_LOCAL_VIEWER, 1);
|
232
|
+
# glLightModel(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
|
233
|
+
|
229
234
|
glDisable(GL_CULL_FACE)
|
230
235
|
glEnable(GL_LIGHTING)
|
231
236
|
glEnable(GL_LIGHT0)
|
232
237
|
glEnable(GL_TEXTURE_2D)
|
233
|
-
|
238
|
+
# glShadeModel(GL_FLAT)
|
234
239
|
glDisable(GL_DEPTH_TEST)
|
235
|
-
glDisable(GL_NORMALIZE)
|
236
|
-
|
240
|
+
# glDisable(GL_NORMALIZE)
|
241
|
+
# glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST)
|
237
242
|
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST )
|
238
243
|
|
239
244
|
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE)
|
metadata
CHANGED
@@ -1,33 +1,74 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: gltail
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
- lib
|
11
|
-
email: mr@fudgie.org
|
12
|
-
homepage: " by Erlend Simonsen <mr@fudgie.org>"
|
13
|
-
rubyforge_project: gltail
|
14
|
-
description: "== FEATURES: * Real-Time OpenGL view * Multiple logfiles on multiple servers * Configurable layout * Multiple logfile parsers (Apache Combined, Rails, IIS, Postfix/spamd/clamd, Nginx, Squid, PostgreSQL, PureFTPD, MySQL, TShark, qmail/vmpop3d) * Custom events * Show rate, total or average * If you can 'tail' it, you can visualize it * Written in Ruby using net-ssh & libopengl-ruby * Free! == RUNNING: gl_tail --help gl_tail --new gl_tail.yaml gl_tail You can press 'f' while running to toggle the attempted frames per second. Or 'b' to change default blob type, and space to toggle bouncing. == REQUIREMENTS: * rubygems 0.9.4 * ruby-opengl 0.40.1 * net-ssh 1.1.2 * opengl/ruby development packages (ruby1.8-dev libgl1-mesa-dev libglu1-mesa-dev libglut3-dev)"
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ""
|
6
|
+
authors:
|
7
|
+
- Erlend Simonsen
|
15
8
|
autorequire:
|
16
|
-
default_executable:
|
17
9
|
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
25
|
-
platform: ruby
|
26
|
-
signing_key:
|
27
10
|
cert_chain:
|
28
|
-
|
29
|
-
|
30
|
-
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDKDCCAhCgAwIBAgIBADANBgkqhkiG9w0BAQUFADA6MQswCQYDVQQDDAJtcjEW
|
14
|
+
MBQGCgmSJomT8ixkARkWBmZ1ZGdpZTETMBEGCgmSJomT8ixkARkWA29yZzAeFw0w
|
15
|
+
ODAyMTYxOTI0MTVaFw0wOTAyMTUxOTI0MTVaMDoxCzAJBgNVBAMMAm1yMRYwFAYK
|
16
|
+
CZImiZPyLGQBGRYGZnVkZ2llMRMwEQYKCZImiZPyLGQBGRYDb3JnMIIBIjANBgkq
|
17
|
+
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAunROdBC/P8hDzoEPF/1DoFyy8/d1U2gS
|
18
|
+
+qIibjnBitTgkClXr7Baooc8wGDPcL6WsMXzoqSpXrfG5i/tXceQdg1SeOYf82op
|
19
|
+
CfQpdZeAQQ0HESBpoQOcH/d2+DPLDH+yvNKK97KdJxnmrQynNPOr2fI3Big3mV8P
|
20
|
+
YTL+ohXBwbKcDaJtauxMePxIlOFVZncl96E4Zu/EEPv2adrW6pWjesojm5cjc4ir
|
21
|
+
axVRe/+4qneDDq9+SgqU/Z+jLnzefjeBrLWMW0SxoLVJCdIKVKFdrrOQEZwNYl+E
|
22
|
+
1+A0lnlr154Bm+DgmK+TlTxTTzyO7vmOYPB58rNbgLX6o8TrseHudQIDAQABozkw
|
23
|
+
NzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUpDfGkU5i7Uvw++aE
|
24
|
+
YzErXMFKzLwwDQYJKoZIhvcNAQEFBQADggEBAD8kyK4L9DS9l8ZoHzP3U4DlW2NG
|
25
|
+
9AW1oBZBKEptHYIii9jUGUM2Xj/iqwBsByN47qO1Cx482/EGQaBOGv2MJ8MxzLSI
|
26
|
+
A0yOtWz26STMfn/oIrmONltE922/R+HCN8Z1mrNPomGA+YMobuRmifUtMPA41dVq
|
27
|
+
e5h0l+oAgALX5bN6TloBZnoVc2heBGD5uNgFnRmMy8t/bOVSWihIBQxnO5SUZ7T5
|
28
|
+
QMetoJWnCIH+d9yCfOQXAwkTpQYCY61mbWu262Yg2OcItoE3DrjJfPZ0eiDFHQYy
|
29
|
+
/UfNqVgtDGy57Xw9DBNRbUm92FVILwpudQs3SX1z2Gik08RrKReELwpRciY=
|
30
|
+
-----END CERTIFICATE-----
|
31
|
+
|
32
|
+
date: 2008-02-16 00:00:00 +01:00
|
33
|
+
default_executable:
|
34
|
+
dependencies:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: ruby-opengl
|
37
|
+
version_requirement:
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.40.1
|
43
|
+
version:
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: net-ssh
|
46
|
+
version_requirement:
|
47
|
+
version_requirements: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: 1.1.2
|
52
|
+
version:
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: hoe
|
55
|
+
version_requirement:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 1.5.0
|
61
|
+
version:
|
62
|
+
description: "== FEATURES: * Real-Time OpenGL view * Multiple logfiles on multiple servers * Configurable layout * Multiple logfile parsers (Apache Combined, Rails, IIS, Postfix/spamd/clamd, Nginx, Squid, PostgreSQL, PureFTPD, MySQL, TShark, qmail/vmpop3d) * Custom events * Show rate, total or average * If you can 'tail' it, you can visualize it * Written in Ruby using net-ssh & libopengl-ruby * Free! == RUNNING: gl_tail --help gl_tail --new gl_tail.yaml gl_tail You can press 'f' while running to toggle the attempted frames per second. Or 'b' to change default blob type, and space to toggle bouncing. == REQUIREMENTS: * rubygems 0.9.4 * ruby-opengl 0.40.1 * net-ssh 1.1.2 * opengl/ruby development packages (ruby1.8-dev libgl1-mesa-dev libglu1-mesa-dev libglut3-dev)"
|
63
|
+
email: mr@fudgie.org
|
64
|
+
executables:
|
65
|
+
- gl_tail
|
66
|
+
extensions: []
|
67
|
+
|
68
|
+
extra_rdoc_files:
|
69
|
+
- History.txt
|
70
|
+
- Manifest.txt
|
71
|
+
- README.txt
|
31
72
|
files:
|
32
73
|
- History.txt
|
33
74
|
- Manifest.txt
|
@@ -69,46 +110,32 @@ files:
|
|
69
110
|
- lib/gl_tail/sources/local.rb
|
70
111
|
- lib/gl_tail/sources/ssh.rb
|
71
112
|
- test/test_gl_tail.rb
|
72
|
-
|
73
|
-
|
113
|
+
has_rdoc: true
|
114
|
+
homepage: " by Erlend Simonsen <mr@fudgie.org>"
|
115
|
+
post_install_message:
|
74
116
|
rdoc_options:
|
75
117
|
- --main
|
76
118
|
- README.txt
|
77
|
-
|
78
|
-
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
-
|
83
|
-
|
84
|
-
|
119
|
+
require_paths:
|
120
|
+
- lib
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: "0"
|
126
|
+
version:
|
127
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: "0"
|
132
|
+
version:
|
85
133
|
requirements: []
|
86
134
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: 0.40.1
|
96
|
-
version:
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: net-ssh
|
99
|
-
version_requirement:
|
100
|
-
version_requirements: !ruby/object:Gem::Version::Requirement
|
101
|
-
requirements:
|
102
|
-
- - ">="
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: 1.1.2
|
105
|
-
version:
|
106
|
-
- !ruby/object:Gem::Dependency
|
107
|
-
name: hoe
|
108
|
-
version_requirement:
|
109
|
-
version_requirements: !ruby/object:Gem::Version::Requirement
|
110
|
-
requirements:
|
111
|
-
- - ">="
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
version: 1.3.0
|
114
|
-
version:
|
135
|
+
rubyforge_project: gltail
|
136
|
+
rubygems_version: 0.9.5
|
137
|
+
signing_key:
|
138
|
+
specification_version: 2
|
139
|
+
summary: View real-time data and statistics from any logfile on any server with SSH, in an intuitive and entertaining way.
|
140
|
+
test_files:
|
141
|
+
- test/test_gl_tail.rb
|
metadata.gz.sig
ADDED
Binary file
|