Archive

Posts Tagged ‘perl’

Come ti estendo l’homebanking col Perl

Gennaio 31st, 2009 - Gennaio 31st, 2009

Ireland, 1 year.

Sono al giro di boa del primo anno. Non faro’ il solito post commemorativo del tipo “questo giorno un anno fa ero all’aeroporto ignaro del futuro”. Forse lo faro’ dopo. Accontentati di quello che avevo scritto un mese fa. Piuttosto festeggio con un bel rilascio su CPAN.org dei miei sforzi informatici delle ultime 2 settimane, per provare quanto sia sensato il fumetto di xkcd.com : cioe’ che abbia piu’ senso una settimana incasinando col Perl che 900 ore di corso universitario o 400 ore di compiti a casa :)

11th_grade

Cosi’, dopo 2 settimane di programmazione piu’ o meno autistica, ho rilasciato una prima release usabile: il modulo si chiama Finance::Bank::IE::PermanentTSB, e si aggiunge al namespace Finance::Bank, accanto ad altri moduli dello stesso tipo.

Il modulo permette di stampare da riga di comando il saldo di tutti i conti correnti bancari collegato all’homebanking di PermanentTSB.

pallotron@terminus ~ $ ptsb -b
Parsing configuration file...
 
You need a passphrase to unlock the secret key for
user: "Angelo Failla <afailla@newbay.com>"
2048-bit ELG-E key, ID F83D3FCA, created 2008-02-18 (main key ID B68B318D)
 
gpg: encrypted with 2048-bit ELG-E key, ID F83D3FCA, created 2008-02-18
      "Angelo Failla <afailla@newbay.com>"
 
Connecting...
 
-----------------------------------------------------------
|       Account name | Acc. # |     Balance |   Available |
-----------------------------------------------------------
| Switch Current A/C |   0220 |      135.35 |      235.35 |
|          Visa Card |   2667 |     -419.66 |       80.34 |
-----------------------------------------------------------

Ovviamente i dati dell’output sono taroccati :D
Lo script e’ anche in grado di stampare l’estratto conto basandosi su range temporale, regular expression (per matchare la description), e condizioni matematiche (tipo <300, >=2000, etc).

L’idea del modulo mi e’ venuta dopo che ho scoperto la potenza di WWW::Mechanize. E’ un modulo Perl che permette di automatizzare l’interazione con un sito web: gestisce la navigazione attraverso pagine, i click, la gestione delle form, il fill out delle form, etc. C’e’ qualche pazzo che l’ha usato per scriversi bot che tengono d’occhio aste di Ebay o che effettuano operazioni periodiche su Ogame (famoso gioco alla Warcraft, ma online; ci giocavo 2 anni fa, ma poi ne sono uscito pulito!).

Il miglior modo per imparare qualcosa quando programmi e’ di solito scrivere qualcosa che ti serva veramente. Cosi’ mi sono detto: «devo scrivere qualcosa che mi serva veramente e nel frattempo mi possa servire per imparare il modulo e rispolverare altre cose del Perl».

Noi sistemisti siamo pigri e non amiamo fare le stesse cose ripetutamente, e, dove possibile (quasi dovunque!), ci piace automatizzare :D
Se poi possiamo avere tool command line per fare le cose piu’ disparate sicuramente non disdegniamo.

Il sito di PermanentTSB e’ una chiavica, non fa grafici e istogrammi del conto, non salva/esporta gli estratti conto in file CSV, non tiene dati piu’ vecchi di 6 mesi! Un invito a nozze per rimediare a cio’ con WWW::Mechanize!

D’apprima ho iniziato scrivendo un modulo per familiarizare con le librerie, obiettivo: “inserire da command line, le ore lavorate nel sistema di time tracking aziendale”. Devo dire che lo script e’ stato molto apprezzto a lavoro visto che per inserire anche un solo record nella interfaccia aziendale si devono cliccare milioni di volte, e il sistema non e’ a prova di errore!

Queste due settimane mi sono servite a:

  • rispolverare Perl;
  • imparare la programmazione dei package/moduli;
  • capire come funziona la comunita’ CPAN;
  • imparare WWW::Mechanize;
  • imparare come funzionano le test unit in Perl usando Test::More e Test::MockObject;
  • imparare come funziona git, il sistema di versioning creato da Linus Torvalds usato dalla comunita’ di sviluppo del Kernel Linux. Veramente fico per velocita’ e completezza di opzioni e feature. Meglio di subversion/cvs.

In piu’ e’ servito a coprire anche un po’ di spazi vuoti che ultimamente sto avendo a lavoro. :P

Alla prossima!

Popularity: 22% [?]

pallotron Informatica, Linux, Programmazione, Unix , , , ,

Io ti odio!

Febbraio 14th, 2009 - Febbraio 14th, 2009

Caro collega,

stavolta lo scrivo qui: ieri ti ho odiato, per l’ennesima volta!

Quando il nostro collega DBA indiano e’ venuto da me chiedendomi:

«Angelo, come faccio ad inserire una stringa “NAME” su un file “tmp.log” da 1 GB tra la quarta e la quinta colonna con VI/VIM?»

Tu hai sentito… ti sei voluto alzare… con quell’aria da saccente… *dovevi* intrometterti… il tuo istinto da “nerdone-primo-della-classe-so-tutto-io” ti ha fatto venire alla mia scrivania mentre io scrivevo il one-liner perl necessario alla magia, consigliandomi di poterlo fare cosi’ e coli’… con sed piuttosto che con awk, e blabla…

nerd

Non e’ stato sufficiente che ti dicessi di farti i cazzi tuoi… dovevi gareggiare… dovevi farti sputtanare… e dopo 2 minuti hai avuto anche la sfacciataggine di mandare una email al collega col subject “sed version”, scrivendo questa zozzeria:

$ cat tmp.log | sed 's/^\(\W*\w\+\W\+\w\+\W\+\W*\w\+\)/\1 fff/g'

Ma ti ho punito con la eleganza del Perl:

$ perl -lpne 's/^((\w+\W+){3})/$1NAME /;' tmp.log

Sei old! OLD! Mettitelo in testa. Guarda quella linea, e’ ILLEGGIBILE. Con tutte quelle sequenze di escape!

Peccato che il DBA abbia scelto il tuo sed. In questo mondo non c’e’ giustizia.

Popularity: 32% [?]

pallotron Informatica, Irlanda, Lamentazioni, Lavoro, Programmazione, Unix , , , , ,