Ogni tanto mi piace prendere nota della pazzia imperante nel mondo.
Un fantastico buono per un trattamento in un salone di bellezza stile cartolina recita così:
Nell’Isola Incantata viviamo la nostra Favola nella meravigliosa Favola dell’Universo, insieme a persone di ogni razza, colore e religione… in grado di ascoltarci, e ascoltare “Gioiosamente immersi nella Vita”… con animali, piante e cose siamo abitanti di “Gioiopolis” città metafisica dove accadono gli AMANTI-PENSIERI le FANTASTIC-AZIONI le MERAVIGLI-OPERE.
Qui celebriamo la nostra Favola… la Magia della Vita…
Qui sperimenti-amo l’amore… amandoci… amando.
No dai, non fate così. C’è gente che paga pure.
Per convertire una data in timestamp in perl:
1235775600
Attenzione, la data inserita è il 28 febbraio 2009, a mezzanotte.
Il modulo Time::Local fornisce funzioni che sono l’opposto di quelle built-in di perl localtime() e gmtime().
Attenzione ai mesi che vanno da 0 a 11 (gen .. dic).
Mi è capitato troppe volte di trovarmi file XML assolutamente illeggibili per le mani.
Una soluzione, come al solito, arriva da CPAN: XML::Tidy!
Ridi e scherza, questo modulino è in realtà un sacco di codice che parsa alla perfezione i file xml e li riordina ad-hoc.
#!/usr/bin/perl
use strict;
use warnings;
use XML::Tidy;
my $VERSION = 0.02;
my $file_in = $ARGV[0] || die "Usage:\t$0 <input.xml> <output.xml>\n";
my $file_out = $ARGV[1] || ‘output.xml’;
my $tidy_obj = XML::Tidy->new(‘filename’ => $file_in);
$tidy_obj->tidy();
$tidy_obj->write($file_out);
Il mio semplice script prende un file in input da cmdl e sputa fuori un output.xml “raddrizato” (2 whitespace di default come indentazione, se si vuole modificare bisogna dare un arogomento al metodo ->tidy()).
Per ulteriori info.
Nota: La libreria perl sta anche in un pacchetto debian (libxml-tidy-perl) che guarda caso fornisce uno scriptino (/usr/bin/xmltidy) molto simile (quasi identico) al mio.
Tutte le volte che devo scrivere una regex un po’ complicata con vim esco di testa.
In effetti scrivere regular expression fa spesso uscire di testa, ma con vim è un massacro perchè è leggermente diverso dallo standard che sono abituato ad affrontare col perl. Sic.
Qui c’è un bello schema riassuntivo: Vim Regular Expressions
Se per caso servisse sistemare dei tag uno per riga, si potrebbe usare una cosa del genere:
A forza di spaccarsi la testa sulle cose, ogni tanto se ne esce.
Avendo un database su PostgreSQL, e volendo manipolarlo con strumenti ORM in perl si può usare DBIx::Class (DBIC per gli amici).
DBIC si appoggia a “schemi” di tabelle nel database che gli permettono di interagire col db-server in maniera corretta (e ottimizzata).
Gli schemi sono un po’ pallosi da estrarre, ma a tutto c’è soluzione:
Dopo questo comando nella directory Sim ci sarà un pacchetto Prova.pm (lo schema) che caricherà le classi che rappresentano le tabelle del database XXX (nella dir Sim/Prova/tabella_*.pm).
Le rappresentazioni delle tabelle sono interessanti da guardare.
Da questo momento sarà possibile scrivere script che usino lo schema (Sim::Prova), si connettano attraverso di esso (metodo connect) ed agiscano sui dati del database XXX.
use Sim::Prova;
my $schema = Sim::Prova->connect(‘dbi:Pg:dbname=XXX’, ‘YYY_user’, ‘ZZZ_passwd’, {});
my @all_authors = $schema->resultset(‘Authors’)->all;
foreach (@all_authors) {
print $_->name ."\n";
}
L’oggetto $schema porta la connessione, tramite ->resultset(‘table’) capisce com’è organizzata la tabella nel db e poi accetta i metodi utili per fare qualcosa (CRUD: Create, Retrieve, Update, Delete).
$schema->resultset(‘tabella’)->create( {id => 1, name => ‘Simone’} );
# R
my @rows = $schema->resultset(‘tabella’)->all;
foreach $row (@rows) {
print $_->id ." | ". $_->name ."\n";
}
# U
my $author = $schema->resultset(‘tabella’)->find(1);
# dentro $author c’è il nostro record.
$author->name(‘Mario Rossi’);
# rimpiazza l’attributo "name" di $author con qualcosa di diverso.
# A questo punto il database ha ancora il record non cambiato, ma
# $author contiene un record differente.
$author->update();
# così aggiorno i dati sul db.
# D
# Come update, si identifica il record giusto e…
$author->delete();
Un po’ di basic usage e di manualistica.
Guitar Hero fa conoscere cose nuove. ![]()
Avalancha, Héroes del Silencio
Giusto per la cronaca…
Negli States la benzina costava sempre meno di 3 dollari al gallone (1 GUS = 3,785 L), il che significa poco meno di 80 centesimi di dollaro al litro. Non male contro il nostro euro e 20…
Per la precisione, contando che abbiamo sempre speso in effetti meno di 3 $ per gallone e che il cambio euro – dollaro è molto favorevole, ho calcolato mediamente di aver speso 0.51 euro al litro mentre eravamo in Florida… Un bell’andare.