gltail 0.0.7 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|