jueves, 4 de agosto de 2011

Cambiar Wallpaper en Gnome con Ruby

Bueno he aquí un pequeño script de ruby para cambiar el fondo de pantalla de un escritorio de Gnome, para ejecutarlo solo es necesario escribir en una terminal el siguiente comando:

ruby wallpaperDaemon.rb parametro1 parametro2 parametro3..N&

donde
parametro1     = Ruta en la cual se encuentran las imágenes para el fondo de pantalla
parametro2     = Tiempo en segundos para realizar el cambio de pantalla
parametro3..N = Extensión de archivos a ser tomadas en cuenta para cambiar el fondo de pantalla
&                   = Escribir al final para que se ejecute en segundo plano

Por ejemplo el comando completo para ejecutar el script seria:

ruby wallpaperDaemon.rb /home/alfredo/Imágenes/Wallpaper/ 10 png jpg bmp jpeg&




#!/usr/bin/env ruby

require 'rubygems'
require 'gconf2'

class WallpaperChanger
   def initialize(w_ruta)
      @w_directorio = w_ruta
      @w_tipos = []
      @w_imagenes = []
   end

   def buscarWallpaper
      buscarDirTipo(@w_directorio)
   end

   def wallpaperAleatorio()
      w_cliente = GConf::Client.default
      w_min = 0
      w_max = @w_imagenes.size-1
      w_cliente['/desktop/gnome/background/picture_filename'] = @w_imagenes[rand(w_min+rand(w_max))]
   end

   def agregarTipo(w_tipo)
      if @w_tipos.include?(w_tipo)
         puts "#{w_tipo} ya se ha ingresado"
      else
         @w_tipos.push(w_tipo)
      end
   end

   private
   def buscarDirTipo(w_directorio)
      Dir.new(w_directorio).each do |w_archivo|
         w_ruta = w_directorio + '/' + w_archivo
         unless (w_archivo =~ /^\.+/)
            File.directory?(w_ruta) ? buscarDirTipo(w_ruta) : verificarTipo(w_ruta)
         end
      end
   end

   def verificarTipo(w_archivo)
      @w_tipos.each do |extension|
         if w_archivo.end_with?(extension)
            agregarImagen(w_archivo)
         end    
      end
   end

   def agregarImagen(w_archivo)
      @w_imagenes.push(w_archivo)
   end
end

#REVISO LA EXISTENCIA DEL DIRECTORIO
if File.directory? ARGV[0]
   w_directorio = ARGV[0]
else
   raise 'Directorio no valido'
end

#VALIDO EL TIEMPO PARA CAMBIAR EL FONDO DE PANTALLA
if /[1-9][0-9]*/ =~ ARGV[1]
   w_tiempo = ARGV[1].to_i
else
   raise 'Tiempo no valido'
end

#CREANDO EL CAMBIADOR DE WALLPAPER
w_wallpaper = WallpaperChanger.new(w_directorio)

#AGREGANDO LOS TIPO DE EXTENSIONES DISPONIBLES
2.upto(ARGV.size-1) {|parametro| w_wallpaper.agregarTipo(ARGV[parametro])}

#BUSCO ARCHIVOS QUE COINCIDAN CON LOS TIPOS INGRESADOS
w_wallpaper.buscarWallpaper

loop do
   w_wallpaper.wallpaperAleatorio
   sleep(w_tiempo)
end


Megaupload: http://www.megaupload.com/?d=BB3700PD

Buscar Archivos en Carpetas

Bueno el día de ahora no tenia nada que hacer así que se me ocurrió realizar un pequeño script para mostrar todos los archivos que existen en un directorio especifico y aquí esta el resultado.




#!/usr/bin/env ruby


class Busqueda


   def initialize(w_ruta)
      @w_directorio = w_ruta
      @w_tipos = []
   end


   def mostrarArchivos
      buscarDirectorio(@w_directorio)
   end


   def buscarArchivos
      buscarTipos(@w_directorio)
   end


   def buscarTipo
      buscarDirTipo(@w_directorio)
   end


   def agregarTipo(w_tipo)
      if @w_tipos.include?(w_tipo)
         puts "#{w_tipo} ya se ha ingresado"
      else
         @w_tipos.push(w_tipo)
      end 
   end


   def buscarDirectorio(w_directorio)
      Dir.new(w_directorio).each do |w_archivo|
         w_ruta = w_directorio + '/' + w_archivo
         unless (w_archivo =~ /^\.+/)
            File.directory?(w_ruta) ? buscarDirectorio(w_ruta) : mostrarArchivo(w_ruta)
         end
      end
   end


   def buscarDirTipo(w_directorio)
      Dir.new(w_directorio).each do |w_archivo|
         w_ruta = w_directorio + '/' + w_archivo
         unless (w_archivo =~ /^\.+/)
            File.directory?(w_ruta) ? buscarDirTipo(w_ruta) : verificarTipo(w_ruta)
         end
      end
   end 


   def verificarTipo(w_archivo)
      @w_tipos.each do |extension|
         if w_archivo.end_with?(extension)
            puts w_archivo
         end      
      end
   end
end


w_buscar = Busqueda.new(ARGV[0])
w_buscar.buscarTipo
w_buscar.agregarTipo('mp3')
w_buscar.agregarTipo('doc')
w_buscar.buscarTipo



La ejecución del script se realiza de la siguiente forma:

ruby buscar.rb "directorio"

Bueno el script se ejecuta bastante rápido(2 o 3 segundos) para mostrar todos los archivos en la carpeta home de mi computadora.

miércoles, 3 de agosto de 2011

Instalación Ruby-Gnome2 desde RubyGems

Buen tenia bastante tiempo de no escribir en este Blog pero el trabajo me tiene un poco ocupado, pero ahora que tengo un poco de tiempo libre me gustaría compartir la forma de instalar Ruby-Gnome2 desde RubyGems simplemente ejecutando los siguientes comando desde una terminal:

sudo apt-get install libgtk2.0-dev
sudo gem install gtk2

Ahora para ejecutar algún programa que utilice Ruby-Gnome2 es solamente necesario poner las siguientes lineas al inicio del programa


#!/usr/env/bin ruby


require 'rubygems'
require 'gtk2'

sábado, 29 de enero de 2011

Parte 2 - Creación de Menú

Al crear aplicaciones utilizando ruby-gnome2 es posible la utilización de menú, los cuales se pueden desarrollar de una forma muy sencialla como se muestra en el siguiente ejemplo:

#!/usr/bin/env ruby


require 'gtk2'


ventana=Gtk::Window.new
ventana.set_title("Titulo Ventana")
ventana.set_default_size(300,50)


#CREACION DE LA BARRA DE MENU
barraMenu=Gtk::MenuBar.new


#CREANDO EL MENU DE ARCHIVO
menuArchivo=Gtk::Menu.new


#CREANDO EL MENU DE AYUDA
menuAyuda=Gtk::Menu.new


#CREANDO ELEMENTOS DEL MENU ARCHIVO
elementoArchivoAbrir=Gtk::MenuItem.new("Abrir")
elementoArchivoCerrar=Gtk::MenuItem.new("Cerrar")


#CREANO ELEMENTO DEL MENU DE AYUDA
elementoAyudaAcerca=Gtk::MenuItem.new("Ayuda")


#AGREGANDO ELEMENTOS AL MENU DE ARCHIVO
menuArchivo.append(elementoArchivoAbrir)
menuArchivo.append(elementoArchivoCerrar)


#AGREGANDO ELEMENTOS AL MENU DE AYUDA
menuAyuda.append(elementoAyudaAcerca)


#ELEMENTO DE LA BARRA DE MENU QUE TENDRAN LOS MENU DE ARCHIVO Y AYUDA
archivo=Gtk::MenuItem.new("Abrir")
ayuda=Gtk::MenuItem.new("Acerca")


#AL HACER CLICK SOBRE LOS ELEMENTOS DE LA BARRA
#DE MENU SE LLAMA A UN DETERMINADO SUBMENU
#EN ESTE CASO SERIA LOS MENU DE ARCHIVO Y AYUDA
archivo.submenu=menuArchivo
ayuda.submenu=menuAyuda


#AGREGANDO ELEMENTOS DEL MENU A LA BARRA DE MENU
barraMenu.append(archivo)
barraMenu.append(ayuda)


#AGREGANDO MENU A LA VENTANA
ventana.add(barraMenu)


ventana.show_all
Gtk.main

El resultado del código anterior da como resultado una barra con 2 menús uno de archivo y el otro de ayuda. El menú archivo tiene dos elementos y el menú de ayuda uno.