Update MacPorts
sudo port selfupdate
List all avaiable ports
port list
Display installed ports
port installed
Display outdated ports
port outdated
Search ports
port search gtk
Get info of a port
port info rb-gtk2
Install a port
sudo port install rb-gtk2
Deletes all intermediate files that MacPorts creates while building a port
sudo port clean --all rb-gtk2
Upgrade a port
sudo port upgrade rb-gtk2
Uninstall a port
sudo port uninstall rb-gtk2
Upgrade all outdated ports
sudo port upgrade outdated
Vediamo un’ottima gemma per Ruby per verificare il PageRank di Google di un sito web. La gemma in questione si chiama pageranker e la potere installare nel classico modo:
sudo gem install pageranker
Una volta installata potete usarla nei seguenti due modi:
$ pageranker 'pioz.it'
oppure da integrare nel vostro codice:
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'pageranker'
=> true
irb(main):003:0> Pageranker::check('google.it')
=> 8
irb(main):004:0> Pageranker::check('http://www.google.com')
=> 10
irb(main):005:0> Pageranker::check('dsadasdasdsadrfer.com')
=> nil
Molto semplice e utile. Per maggiori info visitate la homepage: http://github.com/pioz/pageranker
Per usare i tasti HOME ed END nel modo classico (HOME va all’inizio della riga, END alla fine).
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