Archive

Posts Tagged ‘gruff’

Why I like JRuby

November 7th, 2008 Serabe No comments

Some days ago Tom forwarded me an email from Mikael Lammentausta. Mikael found an issue with rmagick4j. Using this Mikael’s script

[ruby]
require ‘rubygems’
require ‘gruff’

def basic_graph()
g = Gruff::Line.new
g.theme = {
:colors => ['#7F0099', '#2F85ED', '#2FED09','#EC962F'],
:marker_color => ‘#aaa’,
:background_colors => ['#E8E8E8','#B9FD6C']
}
g.hide_title = true

g.legend_font_size = 12
g.marker_font_size = 16
g.hide_dots = false

return g
end

def bmi(params={})
g = basic_graph()

g.y_axis_label = ‘BMI’

bmis = [24.3, 23.9, 23.7, 23.7, 23.6, 23.9, 23.6, 23.7, 23.4, 23.4, 23.4, 22.9]

g.data( ‘BMI’, bmis )
g.hide_legend = true
return g
end

g=bmi
g.write ‘graph.jpg’
[/ruby]

You get two different outputs.

graph 300x225 Why I like JRuby

MRI-generated

graph1 300x225 Why I like JRuby

JRuby

As you may see, the numbers are wrong in JRuby… or not.

Looking at gruff code, I saw the problem was in the label method.

[ruby]
def label(value)
if (@spread.to_f % @marker_count.to_f == 0) || !@y_axis_increment.nil?
return value.to_i.to_s
end
if @spread > 10.0
sprintf(“%0i”, value)
elsif @spread >= 3.0
sprintf(“%0.2f”, value)
else
value.to_s
end
end
[/ruby]

The problem can be found in line 10. With a right input, you can make

[ruby]
(@spread.to_f % @marker_count.to_f == 0) || !@y_axis_increment.nil?
[/ruby]

false and have a @spread < 3.0. Then look at this code:

[ruby]
i = 23.599999999999998
puts i
[/ruby]

In JRuby, you get what you expect 23.599999999999998 but, in MRI, you get 23.6. So, that was the problem. JRuby is more precise than MRI.

NOTE:
jruby 1.1.5 (ruby 1.8.6 patchlevel 114) (2008-11-03 rev 7996) [i386-java]
ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]

article clipper Why I like JRuby
 
share save 171 16 Why I like JRuby
Categories: General, JRuby, Programming, Ruby Tags: , , ,

Gráficos de radar o de araña con Gruff

March 17th, 2008 Serabe No comments

Gruff es una librería de Ruby para realizar gráficos. Es muy simple de usar, pero para ello, primero se ha de instalar. Nada más fácil:

sudo gem install gruff

Una vez instalado, se puede usar uno de los múltiples tutoriales que hay por Internet. Yo, por mi lado, me he decidido a hacer uno de un gráfico aún experimental: el gráfico de radar o de araña.

En primer lugar, importamos las librerías necesarias:

[ruby]
require ‘rubygems’
require “gruff”
[/ruby]

Para seguir, creamos el objeto necesario y le damos título:

[ruby]
g = Gruff::Spider.new 10
g.title = “Calificaciones”
[/ruby]

Ahora, añadimos los datos. El primer parámetro es el nombre que va a aparecer al lado del dato en cuestión. El segundo es un array de datos numéricos, en el caso que nos ocupa, es un simple número. Hay un tercer parámetro opcional: el color en hexadecimal.

[ruby]
g.data “Matemáticas”, 8.5
g.data “Historia”, 6.7
g.data “Lengua y Literatura”, 5.3
g.data “Eduación Física”, 4.8
g.data “Física y Química”, 8.9
g.data “Religión”, 10
[/ruby]

Ahora ya sólo queda guardar la imagen, lo cual es muy fácil. Simplemente:

[ruby]
g.write(‘marks.png’)
[/ruby]

He aquí el resultado (algunas letras se tapan con las líneas puesto que aún está en fase experimental):

marks.thumbnail Gráficos de radar o de araña con Gruff

En mi máquina, la media de ejecutarlo 100 veces es 0.32048496 segundos, el máximo es 0.40913s y el mínimo, 0.314553s.

Y eso es to, eso es to, eso es todo amigos.

article clipper Gráficos de radar o de araña con Gruff
 
share save 171 16 Gráficos de radar o de araña con Gruff