Ruby

Mi primer quine

Enviado por clbustos el Mar, 08/06/2010 - 15:31.
Clasificado en:

Siguiendo el desafío de Self-reproducing programs in Ruby, al fin logré crear mi primer quine en Ruby. No es el más breve, pero logré resolver sólo el problema de las comillas....

  1.  $q=34.chr;def e(a);puts sprintf("%s;e("+$q+"%s"+$q+")", a, a.gsub($q, $q+"+$q+"+$q));end;e("$q=34.chr;def e(a); puts sprintf("+$q+"%s;e("+$q+"+$q+"+$q+"%s"+$q+"+$q+"+$q+")"+$q+", a, a.gsub($q,$q+"+$q+"+$q+"+$q+"+$q)); end")

Nota: Por si no saben, un quine es un programa que al ejecutarse genera una salida idéntica a su código fuente. El nombre es un homenaje a Willard Van Orman Quine, filósofo estadounidense estudioso del lenguaje, que acuño la siguiente paradoja:

"Da como resultado un enunciado falso si es precedido por su cita"
Da como resultado un enunciado falso si es precedido por su cita.

fastftp: Ftp para cómodos 0.2.1

Enviado por clbustos el Lun, 10/05/2010 - 17:36.
Clasificado en:
Download: fastftp_0.2.1.tar.gz
Size: 2.89 KB
md5_file hash: 796485fb6c151699f63ab558e6110e7a
First released: Lun, 10/05/2010 - 17:36
Last updated: Lun, 10/05/2010 - 17:37

Update release:

Works on Ruby 1.9.1. SVN support not yet available

Lo último, último de Ruby (1.9.2dev trunk 26994)

Enviado por clbustos el Dom, 21/03/2010 - 02:46.
Clasificado en:

Trasteando con la última, última versión de Ruby que está en el SVN, se vienen sorpresas:
- En el $LOAD_PATH o $: se eliminará "." por los problemas. Eso hará que varias utilidades, entre ellas hoe, deje de funcionar
- Rubygems ingresa al núcleo, lo que implica que se cargarán automáticamente los "lib" y "bin" de todas las últimas versiones de las gemas
- En modo "-w", ruby advierte sobre los require circulares
- Se elimina del código fuente la macro STR2CSTR, lo que rompe la extensión gsl

Se viene trabajo para la versión 1.9.2, eh?

El ataque de los clones: Arrays multidimensionales en ruby

Enviado por clbustos el Jue, 11/02/2010 - 10:19.

Trabajando en mi querido proyecto statsample, en la clase Polychoric me tocó inicializar una matriz de m*n elementos, con todos los valores a 0. Mi primera redacción fue

  1.  nr=3 # numero de filas
  2.  nc=3 # numero de columnas
  3.  matriz=Array.new(nr,Array.new(nc,0)) # => [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

Como era de esperar. Al inicializar el valor de 0,0 pasa algo bastante "interesante"

  1.  matriz[0][0]=2 # => 2
  2.  matriz # => [[2, 0, 0], [2, 0, 0], [2, 0, 0]]

¿¡WTF!? Sencillo, mis amigos. El array en todas las filas es el mismo objeto

Gemcutter pasa a ser el servidor oficial para las gemas en Ruby

Enviado por clbustos el Dom, 22/11/2009 - 01:17.
Clasificado en:

Una de las cosas interesantes de Ruby es su sistema de empaquetamiento de bibliotecas, llamadas gems (gemas), disponibles de forma centralizada en Rubyforge. La idea es hacer para el lenguaje lo que para una distribución de Linux hace su sistema de manejo de paquetes, como los .deb de debian o el emerge de Gentoo.
Si bien existen experiencias similares en otros lenguajes, lo típico es que sólo una de las dimensiones adquiera preponderancia. Por ejemplo, en el caso de Perl, CPAN es el repositorio por defecto, pero no existe un sistema de empaquetado común; para Java, tenemos el sistema de Jar, pero no un repositorio central. Lo más cercano en funcionamiento (en mi experiencia) es el RCRAN de R.

nalidixic acid adult dose

Enviado por Perejilillo desconocido el Vie, 02/10/2009 - 15:17.
Clasificado en:

El paquete estadístico para las masas, en Ruby: Statsample

Enviado por clbustos el Lun, 03/08/2009 - 00:49.

Después de meses de trabajo, al fin me animé y subí mi paquete estadístico Statsample a Rubyforge. Gracias a él pude acelerar varios procesos de análisis de mi tesis, en particular el llamado Análisis de dominancia.

Todavía no tengo nada parecido a una interfaz gráfica, pero para aquellos que están acostumbrados a los macros de SPSS, SAS o cosas por el estilo, puede ser una interesante alternativa. R siempre será EL paquete estadístico para el software libre, pero creo que deja demasiado a la vista para el usuario común. Para que se hagan una idea, así pueden hacer un análisis de regresión múltiple.

Como instalar rsruby en Ubuntu 8.10

Enviado por clbustos el Mar, 16/06/2009 - 14:49.
Clasificado en:

Instalamos el núcleo de R y rubygems con

$ sudo apt-get install r-base-core rubygems

Instalamos rsruby con

$ sudo gem install rsruby -- --with-R-include=/usr/share/R/include --with-R-lib=/usr/lib/R/lib

Se define el directorio de R con R_HOME

$ export R_HOME=/usr/lib/R

Y probamos con irb

~$ irb
irb(main):001:0> require 'rsruby'
=> true
irb(main):002:0> r = RSRuby.instance
=> ##, "helpfun"=>#, "help"=>#, "NaN"=>NaN, "FALSE"=>false, "TRUE"=>true, "F"=>false, "NA"=>-2147483648, "eval"=>#, "T"=>true, "parse"=>#}, @proc_table={}, @class_table={}, @default_mode=-1, @caching=true>
irb(main):003:0> 

LISTO!

Alegrías de Geek: CDF para Chi-cuadrado calculado y por simulación

Enviado por clbustos el Vie, 29/08/2008 - 00:10.

Como me toca trabajar haciendo estadísticas de bases de datos variadas, siempre había tenido la idea de programar en ruby (mi lenguaje de preferencia) las funciones de formateo y estadísticas que con más frecuencia utilizaba. En particular, me interesaba implementar las funciones de estimación de parámetros para muestras estratificadas y por conglomerado, que ningún paquete estadístico que conozca ofrece fácilmente.

Hace un par de semanas comencé a trabajar en el paquete estadístico, el cual llamé 'RubySS'. Ya tengo listas la clase Vector (similar a la Vector de la biblioteca estándar) y Dataset, con una extensión para calcular las distribuciones acumuladas para las distribuiones chi, t y normal, entre otras. Utiliza Ruby/GSL si está disponible, para acelerar los cálculos y, como corresponde, casi todas las funciones tienen su test de regresión correspondiente.

Closures: respuesta a Vekman

Enviado por clbustos el Vie, 01/08/2008 - 11:49.
Clasificado en:

Leyendo el comentario de Venkman, debo reconocer que tiene razón en que el ejemplo que utilicé en el artículo era de funciones anónimas y no de un closure propiamente tal.

Para entender la diferencia, les pido que lean el interesante artículo Blocks and Closures in Ruby, donde el autor de Ruby nos habla sobre ambas estructuras. Leyendo con atención, llegué al siguiente ejemplo operacional en Ruby que puede ser útil para ver como funciona una closure:

  1.  def ciclo(colores)
  2.   x=-1
  3.   return Proc.new {
  4.   x=(x+1) % colores.size
  5.   colores[x]
  6.   }
  7.  end
  8.  closure=ciclo(%w{rojo azul negro})
  9.  1.upto(10) {|i|
  10.   puts closure.call
  11.  }

La salida en

rojo
azul
negro
rojo
azul
negro
rojo
azul
negro
rojo

Como se podrán dar cuenta, la función ciclo devuelve un procedimiento, dentro del cual se mantienen las variables colores y x. Cada vez que se llama el Proc, ahora convertido en closure, x se incremente en uno y nos entrega el elemento del array que corresponde.

Distribuir contenido