#!/usr/bin/perl -w @files = <*.txt>; foreach $file (@files) { print $file . "\n"; }in questo caso vengono listati tutti i files con estensione .txt.
4 mar 2011
Come leggere l'elenco di file in una directory in perl?
18 gen 2011
CSS-101: The easy way to learn CSS
Ho letto la segnalazione nella Smashing Newsletter numero 25, e la rilancio qui per ricordarmi di controllare quando avrò un po' di tempo! :-)
Libri e video sono ottimi strumenti per lo studio, ma quando si tratta di CSS i tutorial on line si rivelano spesso migliori, perché permettono di giocare con il codice, e vedere i risultati al volo.
In questo sito sono raccolti molti trucchi, e molte spiegazioni sul perché un certo comando produce un determinato risultato:
Non ho ancora provato, ma non voglio lasciarmi sfuggire questo link!
12 gen 2011
New song: Tie me up!
Dopo un lungo periodo di silenzio, finalmente riesco a pubblicare un nuovo pezzo strumentale intitolato Tie me up! :-)
ho ancora molti progetti vaganti nell'hard disk... spero di completarli e pubblicarli presto!

30 dic 2010
ElementTree: primi test!
Questo codice scansiona alcuni documenti di esempio e li scrive nella console, strutturati ad albero:
from elementtree.ElementTree import Element from elementtree.ElementTree import parse import urllib proxies = {'http': 'http://proxy:80'} def scanNode(node, depth): for element in node.getchildren(): if element.text and element.text.strip(): print " "*depth + element.tag, "(" + element.text + ")" else: print " "*depth + element.tag if element.getchildren(): scanNode(element, depth+1) def parseTree(url): print "--] Parsing di " + url + " [--" tree = parse(urllib.urlopen(url, proxies=proxies)) print tree.getroot().tag scanNode(tree.getroot(), 2) print def main(): parseTree("http://www.w3schools.com/xml/note.xml") parseTree("http://www.w3schools.com/xml/cd_catalog.xml") parseTree("http://www.w3schools.com/xml/plant_catalog.xml") parseTree("http://www.w3schools.com/xml/simple.xml") if __name__ == "__main__": main()
Semplice semplice, ma lo scrivo qui perché mi può sempre servire!
19 dic 2010
Unix e le password di default...
Ora, generalmente non mi occupo di queste cose, ma visto che in ufficio non c'era nessun altro prendo in carico la segnalazione e chiamo l'assistenza:
Tecnico help desk: Sì, sembrerebbe proprio un guasto hardware, se è così faccio subito uscire un tecnico per la riparazione. Possiamo fare un po' di troubleshooting per avere conferma che si tratti di proprio un guasto hardware?
Io: Certamente... ma mi deve spiegare come fare perché non è un apparato che conosco o che gestisco io!
Tecnico help desk: Allora intanto si colleghi alla console....
Io: Va bene! Mi dia un attimo di tempo che devo recuperare la password...
Tecnico help desk: La password? Nessun problema, quella gliela posso comunicare io!
Io: Ah, però! Conoscete le password degli apparati dei clienti? Che efficienza! :-)
Tecnico help desk: Allora, le detto le credenziali: l'utente è root, e la password abcde123
Io: Ehm, abcde123? Ma cos'è? La password di default?? Perché c'è una leggera probabilità che nella nostra azienda le password di default vengano modificate...
Tecnico help desk: (silenzio)
Io: Ehm, ma è la prima volta che vi capita un cliente che modifica la password dei propri apparati?
Tecnico help desk: (silenzio)
Una volta recuperata la vera password, ed una volta confermato il guasto hardware, nel giro di un paio d'ore arriva il tecnico on site:
Tecnico on site: Questo è il pezzo da sostituire. Ora dobbiamo entrare nella console e disabilitare quello guasto prima di scollegarlo.
Io: OK, mi collego alla console...
Tecnico on site: Perfetto... l'utente è root e la password è abcde123....
Sistemato anche questo, chiamo il nostro consulente e chiedo conferma che il problema sia stato risolto:
Consulente: Allora! Prima di lasciare andare via il tecnico, puoi fare qualche controllo?
Io: Certamente! Basta che mi spieghi come fare...
Consulente: Allora, ti colleghi alla console, la password è abcde123 e....
Uhm! Ho l'impressione che nel mondo Unix la sicurezza non sia sempre presa molto sul serio...
16 dic 2010
Bejeweled: determinare se ci sono ancora mosse disponibili
Come determinare se in una partita di Bejeweled ci sono ancora delle mosse disponibili?
L'input della funzione è una matrice MxN in cui il valore rappresenta uno dei colori.
Per stabilire se ci siano ancora mosse possibili, ho pensato sia sufficiente ricercare nella matrice se ci sono tre pattern fissi, e naturalmente i relativi pattern inversi, che però sono già compresi se effettuo il controllo in tutte e quattro le direzioni.
I pattern sono i seguenti:
XXyX XyX X XXy X
Ed y deve essere diversa da X, oppure si può ignorare? Io voglio che sia diversa, casomai basta eliminare il confronto!
Poi ho pensato che invece di verificare a mano se le coordinate sono fuori dalla matrice, ci starebbe bene un bel TRY...EXCEPTION! Provo a cercare il pattern... se viene sollevata un'eccezione, vuol dire che il pattern non c'è! Spero non sia un sacrilegio... sono pigro lo so... però è il modo migliore per rendere leggibile il codice!
Questo è il mio codice Python... linguaggio che ancora non conosco bene! Quindi ci saranno sicuramente dei giganteschi errori di stile (ehm ad esempio non c'è un modo migliore per gestire le matrici??) ma speriamo ci siano solo quelli, e che la soluzione sia abbastanza corretta!
# esempio di matrice di colori matrice = [ [1, 1, 2, 4, 4], [1, 2, 9, 3, 4], [8, 9, 8, 9, 8], [7, 6, 5, 4, 3] ] altreMosse = False def cella(direzione, a, b): # restituisce la cella a,b della matrice, ruotata secondo la direzione try: if direzione==0: return matrice[a][b] elif direzione==1: return matrice[len(matrice)-1-a][b] elif direzione==2: return matrice[a][len(matrice[0])-1-b] elif direzione==3: return matrice[len(matrice)-1-a][len(matrice[0])-1-b] except: raise Exception def Pattern1(direzione, a, b): # ricerca il pattern XXyX try: return (cella(direzione, a, b) == cella(direzione, a, b+1) and cella(direzione, a, b) != cella(direzione, a, b+2) and cella(direzione, a, b) == cella(direzione, a, b+3)) except: return False def Pattern2(direzione, a, b): # ricerca il pattern XyX # X try: return (cella(direzione, a, b)!=cella(direzione, a, b+1) and cella(direzione, a, b)==cella(direzione, a+1, b+1) and cella(direzione, a, b)==cella(direzione, a, b+2)) except: return False def Pattern3(direzione, a, b): # ricerca il pattern XXy # X try: return (cella(direzione, a, b)==cella(direzione, a, b+1) and cella(direzione, a, b)!=cella(direzione, a, b+2) and cella(direzione, a, b)==cella(direzione, a+1, b+2)) except: return False for direzione in range(0, 4): for a in range(0, len(matrice)): for b in range(0, len(matrice[0])): altreMosse = altreMosse or Pattern1(direzione, a, b) altreMosse = altreMosse or Pattern2(direzione, a, b) altreMosse = altreMosse or Pattern3(direzione, a, b) print "Ancora mosse? ", altreMosse
1 nov 2010
Shining Deep
Blue skies turn black into the gloom
Your eyes shining through the night
Angel tears, and demon love
Living on, long before the sunrise
Getting lost in a world of fantasies
Until the morning bright light
steals away all our fancy dreams
Sometimes I feel that I'm going nowhere
Waiting for something I can never have
Lost in time, can you feel my heart beating
How will it go? I can barely see my way
I don't know how to escape from here
A cold wind blows down the avenue
But don't mind, we will find our way
A way out to be pleased again
Lasting sorrow, don't look back and wonder
Keep on moving, dancing all night long
And still I can't forget the words you said
Whispers in my ears
Sometimes I feel that I'm going nowhere
Searching for something I can never have
Lost in time, can you feel my heart beating
How will it go? I can barely see my way
What should we do to live on?
What should we do, just killing time?
What should we do to raise our heads?
What should we do just to survive?
I've seen the end, I can't hold on
Can't find my way back anymore
And silver light still shines so bright
And shines so deep inside my eyes