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:

$ perl -MTime::Local -e ‘print timelocal(0,0,0,28,01,2009)."\n"’
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.

simone@katrina:~$ cat xml-tidy.pl
#!/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. :-P

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:

s;<\(.\{-}\)>;<\1>\r;g

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:

$ perl -MDBIx::Class::Schema::Loader=make_schema_at,dump_to_dir:. -e ‘make_schema_at("Sim::Prova", {debug=>1}, [ "dbi:Pg:dbname=XXX","YYY_user","ZZZ_passwd" ])’

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.

#!/usr/bin/perl
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).

# C
$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.

« Previous Articles    
SIMOTRONE WEB PAGE is based on WordPress platform, RSS tech , RSS comments design by Gx3.