text 6 May Scrolling with trackpad with Thinkpad on Ubuntu 10.04 - 10.10

Con questo trick riuscirete a scrillare le pagine usando il trackpad del vostro Thinkpad tenendo premuto il tasto centrale. Create il nuovo file /usr/lib/X11/xorg.conf.d/20-thinkpad.conf e incollateci il seguente:

Section "InputClass"
    Identifier "Trackpoint Wheel Emulation"
    MatchProduct "TrackPoint"
    MatchDevicePath "/dev/input/event*"
    Driver "evdev"
    Option "EmulateWheel" "true"
    Option "EmulateWheelButton" "2"
    Option "Emulate3Buttons" "false"
    Option "XAxisMapping" "6 7"
    Option "YAxisMapping" "4 5"
EndSection

Ora riavviate X.

Se invece stai usando Ubuntu 10.10 sposta il file in /usr/share/X11

 sudo mv /usr/lib/X11/xorg.conf.d/20-thinkpad.conf /usr/share/X11/xorg.conf.d/20-thinkpad.conf

text 25 Mar Set Gtk::Label wrap dinamically

Ahime` come si sa` le Gtk::Label non supportano il wrapping dinamico su resize.
Vabbe`, estendiamo Gtk::Label e iimplementiamo il wrap dinamico.
Ecco la classe in Ruby:

require 'gtk2'
class WrapLabel < Gtk::Label
    def initialize(s = '')
      super()
      self.wrap = true
      self.wrap_mode = Pango::WRAP_WORD_CHAR
      self.set_alignment(0.0, 0.0)
      self.text = s
      self.signal_connect_after('size-allocate') do |w, a|
        lw_old, lh_old = self.layout.size
        if lw_old / Pango::SCALE != a.width
          self.layout.set_width(a.width * Pango::SCALE)
          lw, lh = self.layout.size
          self.set_size_request(-1, lh / Pango::SCALE) if lh_old != lh
        end
      end
    end
  end
end

text 15 Mar Balloon widget in GTK

GTK ballon widget

Bello vero?? Magari un giorno spieghero` come creare un widget GTK personalizzato manipolando la renderizzazione con Cairo…


text 12 Mar Switching ruby1.8 to ruby1.9 in MacOSX

Allora se usate MacOSX e avete installato XCode avrete anche Ruby 1.8. Ora vediamo come installare anche Ruby 1.9 e switchare tra le due versioni.

Per prima cosa usando Macports installiamo Ruby 1.9

sudo port install ruby19

Adesso possiamo questo semplice script in bash per switchare tra le due versioni

#!/usr/bin/env bash

rbv=$(ruby -v)
rv=${rbv:5:3}

function r18 () {
  ln -s /System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/erb /usr/bin/erb
  ln -s /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/gem /usr/bin/gem
  ln -s /System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/irb /usr/bin/irb
  ln -s /usr/bin/rake.1.8 /usr/bin/rake
  ln -s /System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/rdoc /usr/bin/rdoc
  ln -s /System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ri /usr/bin/ri
  ln -s /System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby /usr/bin/ruby
  ln -s /System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/testrb /usr/bin/testrb
}

function r19 () {
  ln -s /opt/local/bin/erb1.9 /usr/bin/erb
  ln -s /opt/local/bin/gem1.9 /usr/bin/gem
  ln -s /opt/local/bin/irb1.9 /usr/bin/irb
  ln -s /opt/local/bin/rake1.9 /usr/bin/rake
  ln -s /opt/local/bin/rdoc1.9 /usr/bin/rdoc
  ln -s /opt/local/bin/ri1.9 /usr/bin/ri
  ln -s /opt/local/bin/ruby1.9 /usr/bin/ruby
  ln -s /opt/local/bin/testrb1.9 /usr/bin/testrb
}

function cleanruby () {
  rm /usr/bin/erb
  rm /usr/bin/gem
  rm /usr/bin/irb
  rm /usr/bin/rake
  rm /usr/bin/rdoc
  rm /usr/bin/ri
  rm /usr/bin/ruby
  rm /usr/bin/testrb
}

if [ ${rv} = 1.8 ]; then
  echo "Current version is 1.8 swaping to 1.9"
  cleanruby
  r19
elif [ ${rv} = 1.9 ]; then
  echo "Current version is 1.9 swapping to 1.8"
  cleanruby
  r18
fi
exit

Ecco, ora per switchare tra le 2 versioni lanciamo quello script.
Ricordo che dovrete reinstallare tutte le gemme per Ruby 1.9.


text 10 Mar GTK ruby application with Glade

Vediamo oggi come creare un’applicazione GTK in ruby utilizzando la potenza di Glade, il disegnatore di interfacce.

Per prima cosa installiamo glade e le librerie necessarie per il tutto:

sudo apt-get install glade
sudo apt-get install libgnome2-ruby
sudo apt-get install libglade2-ruby

Bene ora apriamo Glade e disegnamo la nostra interfaccia.

Salviamola e generaimo il template con:

ruby-glade-create-template interface.glade > interface.rb

Bene vediamo che diavolo abbiamo creato, apriamo il file interface.rb

#!/usr/bin/env ruby
#
# This file is gererated by ruby-glade-create-template 1.1.4.
#
require 'libglade2'

class ProvaGlade
  include GetText

  attr :glade

  def initialize(path_or_data, root = nil, domain = nil, localedir = nil, flag = GladeXML::FILE)
    bindtextdomain(domain, localedir, nil, "UTF-8")
    @glade = GladeXML.new(path_or_data, root, domain, localedir, flag) {|handler| method(handler)}

  end

end

# Main program
if __FILE__ == $0
  # Set values as your own application. 
  PROG_PATH = "interface.glade"
  PROG_NAME = "YOUR_APPLICATION_NAME"
  ProvaGlade.new(PROG_PATH, nil, PROG_NAME)
  Gtk.main
end

Dobbiamo fare una piccola modifica per vedere la finestra: alla fine della funzione initialize aggiungiamo @glade.get_widget('window1').show_all. Ovvero otteniamo la finestra principale, di default glade la chiama window1 e invochiamo show_all.

Lanciamo la miniapp con ruby interface.rb