Archive for the ‘Ruby’ Category

Desempenho Ruby: Windows vs Linux

Postado em 12 mai 2010
Categoria(s) Desempenho, Linux, MongoDB, Ruby, Ruby on Rails

Há um tempo atrás eu configurei todo o meu ambiente para desenvolver no Windows, com o objetivo de conseguir testar a aplicação em todos os browsers.

Infelizmente o Ruby no Windows é muito mais lento que no Linux, chega ao ponto de ser inviável o uso do ambiente Windows. O que é uma pena, como linguagem de programação deveria ter desempenho parecido independente do sistema operacional.

Eu comecei a perceber essa lentidão no carregamento do environment.

Todo esse problema de environment lento era única e exclusivamente pela baixo desempenho do Ruby no Windows.

O Julio Monteiro sugeriu eu fazer o seguinte teste no prompt/terminal:

date
ruby script/console
exit
date

No Windows o environment demorou: 3 minutos e 50 segundos para subir.
No Linux o environment demorou: 13 segundos para subir.

É uma diferença de desempenho absurda entre o Windows e o Linux.
Levando em conta o teste com a mesma aplicação usando:

  • Ruby 1.8.7;
  • Rails 2.3.5;
  • MongoDB
  • Share/Bookmark

Ruby-Processing Exemplo de Modelo 3D com Drag e Carregamento de Material OBJ e MTL

Postado em 24 ago 2009
Categoria(s) PIBIC, Processing, Ruby, Ruby-Processing

O exemplo abaixo ilustra uma aplicação no modelo 3D com drag e carregamento de material OBJ e MTL, usando Ruby-Processing.
Para trabalhar com .OBJ esse exemplo usa a biblioteca: .OBJ loader for Processing, você pode encontrar mais informações em: http://code.google.com/p/saitoobjloader/.

Para esse exemplo funcionar você deve possuir o Ruby-Processing instalado, caso não possua siga os passos: http://blog.patrickespake.com/2009/08/23/ruby-processing.

Exemplo Modelo 3D com Drag e Carregamento de Material OBJ e MTL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Example < Processing::App
  load_library :objloader
  import "saito.objloader"
 
  def setup
    size 800, 600, P3D
    @model = OBJModel.new(self, "m1.obj")
    @rot_x = 0
    @rot_y = 0
  end
 
  def draw
     background 51
     no_stroke
     lights
     smooth
 
     push_matrix
     translate width/2, height/2, 0
     rotate_x @rot_y
     rotate_y @rot_x
     scale 3
     @model.drawMode POLYGON
     @model.draw
     pop_matrix
  end
 
  def mouse_dragged
    @rot_x += (mouse_x - pmouse_x) * 0.01;
    @rot_y -= (mouse_y - pmouse_y) * 0.01;
  end
end
 
Example.new :title => "Example 3D With .OBJ Loader"

Esse exemplo importa um modelo 3D criado no 3D Studio Max, quando você clica e faz drag o modelo 3D se movimenta.

Executando

No terminal digite:

rp5 run example.rb

Resultado

ruby-processing-modelo-3d-drag-objloader

Você pode ver esse exemplo em execução no endereço: http://lab.patrickespake.com/ruby-processing-examples/example_3d_objloader/run/. Você precisa ter paciência para visualizar o modelo rodando, ele demora um certo tempo para carregar no browser.

Código fonte completo: http://github.com/patrickespake/ruby-processing-examples/tree/c80a080dd1e27a562b252fa01bc1030d924a9f47/example_3d_objloader.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

Ruby-Processing Exemplo de Modelo 3D com Animação

Postado em 23 ago 2009
Categoria(s) PIBIC, Processing, Ruby, Ruby-Processing

O exemplo abaixo ilustra uma aplicação no modelo 3D com animação, usando Ruby-Processing.
Para esse exemplo funcionar você deve possuir o Ruby-Processing instalado, caso não possua siga os passos: http://blog.patrickespake.com/2009/08/23/ruby-processing.

Exemplo Modelo 3D com Animação

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
class Teste3d2 < Processing::App
  attr_accessor :rotx, :roty, :tex, :bg, :rate
 
  def setup
    size 800, 600, P3D
    self.bg = load_image "candy_2.jpg"
    self.tex = load_image "smile.jpg"
    texture_mode NORMALIZED
    fill 255
    stroke(color(44, 48, 32))
    self.rotx = 0
    self.roty = 0
    self.rate = 0.05
  end
 
  def draw
    background self.bg
    no_stroke
    translate width/2.0, height/2.0, -100
    rotate_x self.rotx
    rotate_y self.roty
    scale 90
    texture_cube self.tex
    position_update
  end
 
  private
 
  def position_update
    self.rotx += rate
    self.roty += rate
 
    puts "rotx: #{self.rotx}"
    puts "roty: #{self.roty}"
  end
 
  def texture_cube(tex)
    begin_shape QUADS
    texture tex
 
    # +Z "front" face
    vertex(-1, -1,  1, 0, 0)
    vertex( 1, -1,  1, 1, 0)
    vertex( 1,  1,  1, 1, 1)
    vertex(-1,  1,  1, 0, 1)
 
    # -Z "back" face
    vertex( 1, -1, -1, 0, 0)
    vertex(-1, -1, -1, 1, 0)
    vertex(-1,  1, -1, 1, 1)
    vertex( 1,  1, -1, 0, 1)
 
    # +Y "bottom" face
    vertex(-1,  1,  1, 0, 0)
    vertex( 1,  1,  1, 1, 0)
    vertex( 1,  1, -1, 1, 1)
    vertex(-1,  1, -1, 0, 1)
 
    # -Y "top" face
    vertex(-1, -1, -1, 0, 0)
    vertex( 1, -1, -1, 1, 0)
    vertex( 1, -1,  1, 1, 1)
    vertex(-1, -1,  1, 0, 1)
 
    # +X "right" face
    vertex( 1, -1,  1, 0, 0)
    vertex( 1, -1, -1, 1, 0)
    vertex( 1,  1, -1, 1, 1)
    vertex( 1,  1,  1, 0, 1)
 
    # -X "left" face
    vertex(-1, -1, -1, 0, 0)
    vertex(-1, -1,  1, 1, 0)
    vertex(-1,  1,  1, 1, 1)
    vertex(-1,  1, -1, 0, 1)
 
    end_shape
  end
end
 
Teste3d2.new :title => "Teste 3D"

Esse exemplo gera um cubo em 3D com animação.

Executando

rp5 run teste_3d_2.rb

ruby-processing-modelo-3d-animacao

Você pode ver esse exemplo em execução no endereço: http://lab.patrickespake.com/ruby-processing-examples/example_3d_animation/run/. Você precisa ter paciência para visualizar o modelo rodando, ele demora um certo tempo para carregar no browser.

Código fonte completo: http://github.com/patrickespake/ruby-processing-examples/tree/c80a080dd1e27a562b252fa01bc1030d924a9f47/example_3d_animation.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

Ruby-Processing Exemplo de Modelo 3D com Drag

Postado em 23 ago 2009
Categoria(s) PIBIC, Processing, Ruby, Ruby-Processing

O exemplo abaixo ilustra uma aplicação no modelo 3D com drag, usando Ruby-Processing.
Para esse exemplo funcionar você deve possuir o Ruby-Processing instalado, caso não possua siga os passos: http://blog.patrickespake.com/2009/08/23/ruby-processing.

Exemplo Modelo 3D com Drag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
class Teste3d < Processing::App
  attr_accessor :rotx, :roty, :tex, :bg
 
  def setup
    size 800, 600, P3D
    self.bg = load_image "candy.jpg"
    self.tex = load_image "smile.jpg"
    texture_mode NORMALIZED
    fill 255
    stroke(color(44, 48, 32))
    self.rotx = PI/4
    self.roty = PI/4
  end
 
  def draw
    background self.bg
    no_stroke
    translate width/2.0, height/2.0, -100
    rotate_x self.rotx
    rotate_y self.roty
    scale 90
    texture_cube self.tex
  end
 
  def mouse_dragged
    rate = 0.01
    self.rotx += (pmouse_y - mouse_y) * rate
    self.roty += (mouse_x - pmouse_x) * rate
  end
 
  private
 
  def texture_cube(tex)
    begin_shape QUADS
    texture tex
 
    # +Z "front" face
    vertex(-1, -1,  1, 0, 0)
    vertex( 1, -1,  1, 1, 0)
    vertex( 1,  1,  1, 1, 1)
    vertex(-1,  1,  1, 0, 1)
 
    # -Z "back" face
    vertex( 1, -1, -1, 0, 0)
    vertex(-1, -1, -1, 1, 0)
    vertex(-1,  1, -1, 1, 1)
    vertex( 1,  1, -1, 0, 1)
 
    # +Y "bottom" face
    vertex(-1,  1,  1, 0, 0)
    vertex( 1,  1,  1, 1, 0)
    vertex( 1,  1, -1, 1, 1)
    vertex(-1,  1, -1, 0, 1)
 
    # -Y "top" face
    vertex(-1, -1, -1, 0, 0)
    vertex( 1, -1, -1, 1, 0)
    vertex( 1, -1,  1, 1, 1)
    vertex(-1, -1,  1, 0, 1)
 
    # +X "right" face
    vertex( 1, -1,  1, 0, 0)
    vertex( 1, -1, -1, 1, 0)
    vertex( 1,  1, -1, 1, 1)
    vertex( 1,  1,  1, 0, 1)
 
    # -X "left" face
    vertex(-1, -1, -1, 0, 0)
    vertex(-1, -1,  1, 1, 0)
    vertex(-1,  1,  1, 1, 1)
    vertex(-1,  1, -1, 0, 1)
 
    end_shape
  end
end
 
Teste3d.new :title => "Teste 3D"

Esse exemplo gera um cubo em 3D, quando você clica e faz drag o cubo se movimenta.

Executando

No terminal digite:

rp5 run teste_3d.rb

Resultado

ruby-processing-modelo-3d-drag

Você pode ver esse exemplo em execução no endereço: http://lab.patrickespake.com/ruby-processing-examples/example_3d_drag/run/. Você precisa ter paciência para visualizar o modelo rodando, ele demora um certo tempo para carregar no browser.

Código fonte completo: http://github.com/patrickespake/ruby-processing-examples/tree/c80a080dd1e27a562b252fa01bc1030d924a9f47/example_3d_drag.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

Ruby-Processing Exemplo de Modelo 2D

Postado em 23 ago 2009
Categoria(s) PIBIC, Processing, Ruby, Ruby-Processing

O exemplo abaixo ilustra uma aplicação no modelo 2D, usando Ruby-Processing.
Para esse exemplo funcionar você deve possuir o Ruby-Processing instalado, caso não possua siga os passos: http://blog.patrickespake.com/2009/08/23/ruby-processing.

Exemplo Modelo 2D

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Teste2d < Processing::App
  def setup
    fill 255, 255, 0
    my_font = create_font "", 32
    text_font my_font
    text_align CENTER
    text "Teste 2D", 10, 50, 800, 50
  end
 
  def draw
    c = color rand(255), rand(255), rand(255)
    fill c
    text range_rand(33, 126).chr, range_rand(32, width - 32), range_rand(80, height - 32)
    puts frame_rate
  end
 
  private
 
  def range_rand(min, max)
    min + rand(max - min)
  end
end
 
Teste2d.new :title => "Teste 2D", :width => 800, :height => 600

Esse exemplo gera letras randômicas e imprime na tela com cores randômicas.

Executando

No terminal digite:

rp5 run teste_2d.rb

Resultado

ruby-processing-modelo-2d

Você pode ver esse exemplo em execução no endereço: http://lab.patrickespake.com/ruby-processing-examples/example_2d/run/. Você precisa ter paciência para visualizar o modelo rodando, ele demora um certo tempo para carregar no browser.

Conclusão

No Linux existe um problema de performance que aparentemente está associado com o modo P2D, as aplicações em ruby-processing rodam na média com 2 frame rate, já em ambiente Windows a performance é muito superior rodando com até 37 frame rate. Quando foi alterado para o modelo para P3D em ambiente Linux a performance aumento bastante chegando atingir 43 frame rate. Aparentemente esse problema está associado com a Java Virtual Machine no ambiente Linux.

Código fonte completo: http://github.com/patrickespake/ruby-processing-examples/tree/c80a080dd1e27a562b252fa01bc1030d924a9f47/example_2d.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark