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

Bello vero?? Magari un giorno spieghero` come creare un widget GTK personalizzato manipolando la renderizzazione con Cairo…
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.
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
Vediamo come creare una semplicissima app per facebook in Rails che stampa ‘Hello NOME_UTETE_FACEBOOK COGNOME_UTETE_FACEBOOK’
Per prima cosa installiamo la gemma facebooker
sudo gem install facebooker
Poi creiamo un’app vuota
rails myfaceapp
e il plugin facebooker per rails
./script/plugin install git://github.com/mmangino/facebooker.git
Ok creiamo un controller, per esempio ciccio con la vista index
script/generate controller ciccio index
Modifichiamo subito il file app/controllers/application_controller.rb aggiungendo
ensure_application_is_installed_by_facebook_user
filter_parameter_logging :fb_sig_friends
A questo punto andiamo a modificare l’azione index nel controller ciccio (file app/controllers/ciccio_controller.rb)
def index
@firstName = facebook_session.user.first_name
@lastName = facebook_session.user.last_name
end
Infine editiamo la vista dell’azione index app/views/ciccio/index.html.erb
Hello <%= @firstName %> <%= @lastName %>!
Bene. Ora la nostra app e` quasi pronta…
Ora dobbiamo configurarla er in facebook. Andiamo all’indirizzo http://www.facebook.com/developers/apps.php e creiamo una nuova app (Imposta Nuova Applicazione). Inseriamo il nome dell’app e accettiamo la licenza. Andiamo poi sul tab ‘Modelli’ (Canvas) e inseriamo Canvas page URL con mytestapp e Canvas Callback URL con http://localhost:3000/ciccio/index/. Salviamo le modifiche.
A questo punto l’ultimo passo: copiamo la Chiave API e la Secret Key (Applicazione Nascosta). Ora nella nosta app rails creiamo il file app/config/facebooker.yml come segue:
development:
api_key: API_KEY_APPENA_COPIATA
secret_key: SECRET_KEY_APPENA_COPIATA
pretty_errors: true
set_asset_host_to_callback_url: true
test:
api_key: API_KEY_APPENA_COPIATA
secret_key: SECRET_KEY_APPENA_COPIATA
pretty_errors: true
set_asset_host_to_callback_url: true
production:
api_key: API_KEY_APPENA_COPIATA
secret_key: SECRET_KEY_APPENA_COPIATA
pretty_errors: true
set_asset_host_to_callback_url: true
Avviamo la nostra app con ./script/server e testiamola all’indirizzo http://apps.facebook.com/mytestapp/