Facciamo un piccolo test: calcoliamo Fibonacci ricorsivamente in Ruby (v1.9.1) e in Python (v2.5.1) e vediamo chi vince
Ruby Fibonacci code (f.rb)
def fib(n)
if n == 0 || n == 1
n
else
fib(n-1) + fib(n-2)
end
end
36.times { |i| fib(i) }
Python Fibonacci code (f.py)
def fib(n):
if n == 0 or n == 1:
return n
else:
return fib(n-1) + fib(n-2)
for i in range(36):
fib(i)
Ora lanciamo i due programmi nel seguente modo:
time ruby f.rb && time python f.py
E vediamo l’output:
real 0m9.956s
user 0m9.875s
sys 0m0.034s
real 0m24.471s
user 0m24.060s
sys 0m0.074s
Ecco Ruby impiega 9.956 secondi mentre Python 24.471 secondi!
Ruby vince nettamente su Python!!
Oh beh provate pero` questo codice in C (f.c):
int
fib(int n)
{
if(n == 0 || n == 1)
return n;
else
return fib(n-1) + fib(n-2);
}
int
main()
{
int i;
for(i = 0; i < 36; i++)
fib(i);
}
Compiliamo:
gcc f.c
Ed eseguiamo:
time ./a.out
0.546 secondi!
Di seguito uno script che rinomina le foto con estensione jpg o JPG con numero crescente, esempio
cimg0285 -> 001.jpg
cimg0342 -> 002.jpg
....
cimg1078 -> 121.jpg
Inoltre ordina le foto in base alla data di scatto della foto.
Come dipendenza installate la gemma exifr per leggere i metadati di un file JPEG:
sudo gem install exifr
Di seguito il codice:
#!/usr/bin/ruby
# Script by Pioz
require 'rubygems'
require 'exifr'
require 'optparse'
options = {}
optparse = OptionParser.new do |opts|
opts.banner = "Usage: #{opts.program_name} [options] directory"
options[:prefix] = ''
opts.on( '-p', '--prefix PREFIX', 'Add PREFIX to filenames' ) { |prefix| options[:prefix] = prefix }
options[:outdir] = nil
opts.on( '-o', '--out-directory DIRECTORY', 'Copy images in DIRECTORY' ) { |outdir| options[:outdir] = outdir }
opts.on_tail( '-h', '--help', 'Display this screen' ) do
puts opts
exit
end
end
begin
optparse.parse!
rescue OptionParser::InvalidOption
puts optparse.help
exit
end
if ARGV.size != 1
puts optparse.help
exit
end
dir = ARGV.first
outdir = options[:outdir] || dir
Dir.mkdir(outdir) unless File.exist?(outdir)
dates = {}
Dir["#{dir}/*.{jpg,JPG}"].each_with_index do |path, i|
dates[path] = EXIFR::JPEG.new(path).date_time_original
end
dates.sort{|x,y| (x[1] || x[0]) <=> (y[1] || y[0])}.each_with_index do |pair,i|
outname = "#{options[:prefix]}%0#{dates.size.to_s.size}d" % (i+1).to_s + '.jpg'
if dir != outdir
require 'ftools'
File.copy(pair[0], "#{outdir}/#{outname}")
else
File.rename("#{dir}/#{outname}", "#{outdir}/tmp_#{outname}") if File.exist?("#{outdir}/#{outname}")
if File.exist?(pair[0])
File.rename(pair[0], "#{outdir}/#{outname}")
else
File.rename("#{dir}/tmp_#{File.basename(pair[0])}", "#{outdir}/#{outname}")
end
end
end
Vediamo come convertire un video flv di Youtube in mp3 usando ffmpeg.
Per prima cosa dobbiamo ottenere l’URL esatto del video per poter scaricare l’flv.
Per far cio` ci serve un token che cambia nel tempo ma che possiamo ottenere dal file video_info; scarichiamolo:
http://www.youtube.com/get_video_info?video_id=VugK063j0Zo
Questo file contiene una serie di valori in stile parametri http. A noi serve quello con chiave token: nell’esempio token=vjVQa1PpcFNk6LFs5OQXj-teHu8POPhx7isbKGtGbOc%3D.
A questo punto abbiamo tutto il necessario per generare l’url per il download diretto del video flv:
http://www.youtube.com/get_video?video_id=VIDEOID&t=TOKEN
nell’esempio:
http://www.youtube.com/get_video?video_id=VugK063j0Zo&t=vjVQa1PpcFNk6LFs5OQXj-teHu8POPhx7isbKGtGbOc%3D
Bene, ora possiamo con ffmpeg ottenere direttamente l’audio del video in formato mp3 con il seguente comando:
ffmpeg -i 'URL DIRETTO DEL VIDEO' -acodec libmp3lame -ac 2 -ab 128kb -vn -y file_output.mp3
Nell’esempio
ffmpeg -i 'http://www.youtube.com/get_video?video_id=VugK063j0Zo&t=vjVQa1PpcFMpsZHHpcVB1lB6w_EvoJYGbZTNi4KQ2g4%3D' -acodec libmp3lame -ac 2 -ab 128kb -vn -y magically_magical.mp3
It’s magical…
Vediamo come creare una repository apt. Per far cio` usiamo l’utiliti reprepro:
sudo apt-get install reprepro
ora creiamo una directory di lavoro e il file di configurazione:
mkdir -p repository/conf
nano repository/conf/distributions
Il file distributions sara` una cosa del genere:
Origin: Company name
Label: Pioz's debian repository
Suite: stable
Codename: debian
SignWith: default
Architectures: i386 amd64 source
Components: main non-free contrib
Description: This repository include my programs
Bene a questo punto generiamo la repo con il seguente comando da dentro la cartella repository appena creata:
reprepro includedeb debian pacchetto1.deb pacchetto2.deb ...
Se avete una chiave privata verra` usata per garantire la repository. Bene adesso mettete online la cartella repository e siamo OK.
Per seguiamo i seguenti passi:
Aggiungiamo la chiave pubblica ad apt
echo key.pub | sudo apt-key add -
Aggiungiamo il repo al file
/etc/apt/sources.listdeb http://www.pioz.it/repository debian main
Aggiorniamo
sudo apt-get update
Installiamo qualche programma
sudo apt-get install pacchetto1.deb
gimdb e` un programma che ti permette di esplorare l’Internet Movie DataBase di Amazon. E` scritto in Ruby e usa la libreria grafica GTK. gimdb scarica le informazioni dei film che richiedi e le salva in un database sqlite3 locale.
Puoi creare utenti e salvare per ognuno di loro i film da vedere, i film visti e i film preferiti. gimdb puo` anche lavorare in modalita` offline cercando i film solamente nel database locale.

gimdb potrebbe essere utile se non sai che film guardare e non trovi piu` la lista dei film da guardare che avevi stilato tanto tempo fa…
Dipendenze
- ruby
- activerecord
- sqlite3-ruby
- nokogiri
- libgnome2 (sudo apt-get install libgnome2-ruby)
- libglade2 (sudo apt-get install libglade2-ruby)
Installazione
sudo apt-get install libgnome2-ruby
sudo apt-get install libglade2-ruby
sudo gem install gimdb
Ad ogni modo informazioni piu` dettagliate disponibili nella homepage del progetto: http://github.com/pioz/gimdb