Archive

Posts Tagged ‘programming’

RMagick4J 0.3.6

August 16th, 2008 Serabe No comments

I am glad to announce a new version of rmagick4j.

RMagick4J aims to implement the ImageMagick funcionality and the C
portions of RMagick for make it works in JRuby.

Current stable version: 0.3.6
Project URL: http://code.google.com/p/rmagick4j/
Installation: gem install rmagick4j

Google Summer of Code project should be thanked for making this new
release possible.

In release 0.3.6 you can find the next improvements:

  • More Draw primitives (clip-path [creatin a clip-path and using a
    clip-path], fill-rule, rotate, scale [reimplemented], skewX, slewY,
    stroke-linecap, stroke-linejoin, stroke-miterlimit, translate).
  • Solve a bug with transparent stroke and line primitive.
  • Added the following Draw instance methods:
    • annotate
    • get_multiline_type_metrics
  • Solved a bug that caused the background become black while resizing
    images with alpha channel.

Please try out your applications with rmagick4j and help us provide
feedback. It is our goal to make a fully-compatible implementation of
RMagick4j in JRuby.

article clipper RMagick4J 0.3.6
 
share save 171 16 RMagick4J 0.3.6

RMagick: Dibujar con patrones

July 22nd, 2008 Serabe No comments

Una interesante cualidad de la clase Draw de RMagick es la posibilidad de definir patrones a través del método pattern.

En primer lugar, lo básico:

RUBY:
  1. require 'rubygems'
  2. require 'RMagick'
  3.  
  4. include Magick

Ahora definamos el patrón. Para ello, necesitamos cinco parámetros, el nombre, dos números que recomiendo ponerlos a cero (después de unas cuantas pruebas, no he notado diferencias notables) y después las dimensiones del patrón.

RUBY:
  1. draw = Draw.new
  2.  
  3. draw.pattern('circles', 0, 0, 10, 10) do
  4.   draw.stroke 'none'
  5.   draw.fill 'red'
  6.   draw.rectangle 0, 0, 10, 10
  7.   draw.stroke 'LightGreen'
  8.   draw.fill 'blue'
  9.   draw.circle 5, 5, 5, 0
  10. end

Ya, por último, dibujamos un cuadrado y lo plasmamos en una imagen de 300x300.

RUBY:
  1. draw.stroke 'circles'
  2. draw.stroke_width 25
  3.  
  4. draw.fill 'none'
  5.  
  6. draw.polygon 150,0, 300,150, 150,300, 0,150
  7.  
  8. img = Image.new 300, 300
  9.  
  10. draw.draw img
  11.  
  12. img.write 'pattern.jpg'

Obteniéndose el siguiente resultado:

pattern RMagick: Dibujar con patrones

Dibujo con patrón como brocha

article clipper RMagick: Dibujar con patrones
 
share save 171 16 RMagick: Dibujar con patrones

Ay, Serabe, que no haces nada ni tan siquiera regular.

May 18th, 2008 Serabe 3 comments

Hoy me he tirado unas cuatro horas para encontrar un bug, uno de estos puñeteros bichos que te atrapan y te dejan cosas como estas:
black Ay, Serabe, que no haces nada ni tan siquiera regular.
Para que os hagáis una idea, tenía que ser esto:
really black Ay, Serabe, que no haces nada ni tan siquiera regular.
Como se puede apreciar, son sensiblemente diferentes. Así que cuatro horas de mi vida han transformado lo primero, en lo segundo.

El problema venía en que, tal y como Tom (mi mentor del GSoC) propuso, se ha cambiado la clase PixelPacket de forma que ahora trabaja con enteros. El problema, mejor no os lo cuento que es más aburrido que lo anterior.

En fin, que hoy me voy a la cama con un ego más grande que el de Enrique Dans.

article clipper Ay, Serabe, que no haces nada ni tan siquiera regular.
 
share save 171 16 Ay, Serabe, que no haces nada ni tan siquiera regular.

Sweating blood

April 28th, 2008 Serabe No comments

Si alguno está investigando sobre las Stories de RSpec, y no consigue hacerlas funcionar, un

RUBY:
  1. require 'spec/story'

debería solucionarlo todo...

Joder lo que hace mi inutilidad y mi falta de documentación.

article clipper Sweating blood
 
share save 171 16 Sweating blood
Categories: Programming, Ruby Tags: , , , , ,

Problema 2

March 23rd, 2008 Serabe No comments

Enunciado:
Suma todos los números pares de la sucesión de Fibonacci menores que un cuatro millón.

Primera solución:

La primera solución es muy simple. Hay un método que devuelve un array con todos los números de la sucesión de Fibonacci menores que un máximo max tomando como inicio un array de dos elementos arr.

RUBY:
  1. def fib1(max,arr=[1,1])
  2.   while(arr.last <max) do
  3.     arr <<(arr.last+arr[arr.size-2])
  4.   end
  5.   arr.pop
  6.   arr
  7. end

Después simplemente se eliminan los impares y se suman los que quedan.

RUBY:
  1. def euler2a(max, ini=[1,1])
  2.   fib1(max,ini).delete_if{|x| x%2 == 1}.inject{|memo,obj| memo+obj}
  3. end
  4.  
  5. puts euler2a(4e6)

Segunda solución:

Esta solución es un poco mejor. Se va a hacer un nuevo método que calcule todos los números de la sucesión de Fibonacci menores que un máximo max pero que sólo almacene aquellos que pasen una condición que se le pasa como bloque:

RUBY:
  1. def fib2(max,a=1,b=1)
  2.   arr = []
  3.   arr <<a if yield(a)
  4.   while(b<max) do
  5.     arr <<b if yield(b)
  6.     a,b=b,a+b
  7.   end
  8.   arr
  9. end

Después sólo hace falta pasar el filtro adecuado, y sumar los resultados:

RUBY:
  1. def euler2b(max,a=1,b=1)
  2.   fib2(max,a,b){|x| x%2==0}.inject{|memo,obj| memo+obj}
  3. end
  4.  
  5. puts euler2b(4e6)

Tercera solución:

Esta tercera solución es una modificación directa de la segunda. En vez de almacenar los datos, se suman directamente.

RUBY:
  1. def fib3(max,a=1,b=1)
  2.   res = 0
  3.   res += a if yield(a)
  4.   while(b<max) do
  5.     res += b if yield(b)
  6.     a,b=b,a+b
  7.   end
  8.   res
  9. end
  10.  
  11. def euler2c(max,a=1,b=1)
  12.   fib3(max,a,b){|x| x%2==0}
  13. end
  14.  
  15. puts euler2c(4e6)

Y eso es todo.

Actualización: Hay diferencias entre la página de PyEuler y la del Proyecto Euler. El problema ha sido actualizado para corresponderse con esta última.

article clipper Problema 2
 
share save 171 16 Problema 2

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:
  1. require 'rubygems'
  2. require "gruff"

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

RUBY:
  1. g = Gruff::Spider.new 10
  2. g.title = "Calificaciones"

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:
  1. g.data "Matemáticas", 8.5
  2. g.data "Historia", 6.7
  3. g.data "Lengua y Literatura", 5.3
  4. g.data "Eduación Física", 4.8
  5. g.data "Física y Química", 8.9
  6. g.data "Religión", 10

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

RUBY:
  1. g.write('marks.png')

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

Tweets del 12-03-2008

March 12th, 2008 Serabe No comments
article clipper Tweets del 12 03 2008
 
share save 171 16 Tweets del 12 03 2008

Tweets del 29-02-2008

February 29th, 2008 Serabe No comments
article clipper Tweets del 29 02 2008
 
share save 171 16 Tweets del 29 02 2008
Improve the web with Nofollow Reciprocity.