tag:blogger.com,1999:blog-184555952024-03-06T06:16:44.753+01:00Lorenzo Sfarra BlogOpen Source, Sistemi Operativi, Programmazione, altro...Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.comBlogger307125tag:blogger.com,1999:blog-18455595.post-30412099688560658392012-06-03T18:14:00.003+02:002014-07-12T12:44:34.875+02:00Torna a casa<blockquote>[..]And all the lines we cast will bring us home.
It's a long way but I'm coming home.<em></em></blockquote>
Dopo innumerevoli anni sulla <a title="Blogger" href="http://www.blogger.com/" target="_blank">piattaforma di Google</a>, ho deciso di trasferire il <a title="Lorenzo Sfarra Blog" href="http://lorenzosfarra.blogspot.com" target="_blank">mio blog</a> come sezione del mio sito, importando tutti i vecchi contenuti.
Da questo momento il blog su blogspot non sarà più aggiornato (non che lo sia stato particolarmente in passato.. ;) ), in favore del <a href="http://lorenzosfarra.com/blog/">"nuovo" blog</a>.
<br /><br /><br />
<iframe width="500" height="245" src="http://www.youtube.com/embed/WaxXjP_Tlc8" frameborder="0" allowfullscreen></iframe>Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com0tag:blogger.com,1999:blog-18455595.post-78269485544293511642012-01-21T15:20:00.003+01:002012-01-21T15:31:17.037+01:00Debutto tra le app AndroidFacebook Friends Monitor: questo il nome della mia prima app nativa per Android (>=2.3).<br />La pagina del progetto è consultabile sul mio <a href="http://lorenzosfarra.dyndns.org/facebookmonitor.php">sito web</a>, e spiega con più dettagli cos'è.<br /><br /><br /><a href="http://lorenzosfarra.dyndns.org/images/mobileapps/facebookmonitorpresentation.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 540px; height: 500px;" src="http://lorenzosfarra.dyndns.org/images/mobileapps/facebookmonitorpresentation.png" alt="" border="0" /></a><br /><br />In breve, l'applicazione si compone di alcune <span style="font-weight: bold;">activity</span> e un <span style="font-weight: bold;">service</span> che monitora gli amici di <span style="font-weight: bold;">Facebook</span> e il loro <span style="font-style: italic;">status</span> sulla chat, in modo che (in base a un sistema di priorità assegnate agli amici stessi) l'utente riceva una notifica quando un suo amico "monitorato" è disponibile per chattare.<br /><br />Maggiori informazioni nella <a href="http://lorenzosfarra.dyndns.org/facebookmonitor.php">pagina del progetto</a>.Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com0tag:blogger.com,1999:blog-18455595.post-48811831030394476572011-11-27T16:11:00.004+01:002011-11-27T16:19:36.432+01:003+ script in python semplici e utili per sviluppatoriAvete scritto un solo file o un intero progetto i cui sorgenti sono suddivisi tra 100 directory e subdirectory?<br />Avete dimenticato di includere una delle licenze GPL all'inizio del file?<br />Avete dimenticato la <span style="font-style: italic;">shebang</span> a inizio file?<br />Avete dimenticato di includere la vim modeline alla fine dei vostri file?<br /><br />Allora questa serie di (per ora) 3 script scritti in <span style="font-weight: bold;">python</span> vi potrebbe essere utile.<br />Segnalate tranquillamente errori/miglioramenti/idee per altri script.<br />Sono nati in modo molto spartano per esigenze personali, <a href="https://code.launchpad.net/%7Elorenzosfarra/+junk/simpledevelutils">li pubblico</a> perchè potrebbero servire ad altre persone:<br /><br /><span style="font-weight: bold; font-family: courier new;">bzr branch </span><span style="font-weight: bold; font-family: courier new;" class="branch-url">lp:~lorenzosfarra/+junk/simpledevelutils</span>Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com1tag:blogger.com,1999:blog-18455595.post-75299355147598739952011-10-13T18:26:00.004+02:002011-10-13T18:31:38.070+02:00RIP RitchieEro indeciso se scrivere 2 righe ma, visti i precedenti degli ultimi giorni, questo altrettanto (e probabilmente più) grande uomo merita una piccola citazione.<br />Sarò onesto, non avevo in mente il suo viso, o meglio l'ho sempre associato a questa figura :) :<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ecx.images-amazon.com/images/I/51TGEPRTDNL._SL500_AA300_.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 300px;" src="http://ecx.images-amazon.com/images/I/51TGEPRTDNL._SL500_AA300_.jpg" border="0" alt="" /></a><br /><br />Grazie per UNIX, il linguaggio C, il libro "The C Programming Language" (detto K&R).Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com0tag:blogger.com,1999:blog-18455595.post-9316592947517011582011-10-04T20:58:00.003+02:002011-10-04T21:02:53.762+02:00intercettazioni di culturaNon so cosa cercano gli utenti di Wikipedia, questo è un DL che rispetta la privacy in favore della popolazione italiana tutta. <sup>1</sup><br /><br />http://it.wikipedia.org/wiki/Wikipedia:Comunicato_4_ottobre_2011<br /><br /><br /><br /><sup>1</sup>: Questo è come avreste visto il messaggio corretto dai diretti interessati.<br />La mia versione originale era: non ho parole per lo scempio, da quando "DL" per esteso vuol dire "puttanata"?Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com1tag:blogger.com,1999:blog-18455595.post-81295246882509242662011-09-18T22:24:00.004+02:002011-09-18T23:14:13.269+02:00Roma - L'Aquila: i 100km più lunghi della storia<span style="font-weight: bold;font-size:130%;" >INTRODUZIONE</span><br />Quella che leggerete è una tragicomica verità.<br />Pensate che le unità di misura siano oggettive, matematiche, precise?<br />Non sulla A24. O meglio, non nel tratto urbano della A24 <span style="font-weight: bold;">Roma - L'Aquila</span>, dove i km sono più lunghi che in ogni altra parte del mondo.<br />Pensate che sia una storia lunga? Vi garantisco che c'è da divertirsi, e che seguirà almeno 1 altra puntata.<br /><br /><span style="font-weight: bold;font-size:130%;" >IL FATTO</span><br />L'<a href="http://www.arpaonline.it/">ARPA</a> (Autolinee Regionali Pubbliche Abruzzesi), gloriosa (si fa per dire) compagnia che a quanto ne so è l'unica a coprire questa tratta con un autobus, segnala sul biglietto che il tempo di percorrenza è di <span style="font-weight: bold;">1 ora e 40 minuti</span>.<br />Tantino, ma ci può stare.<br />Fino a qualche mese fa la media del Venerdì sera intorno alle 19 era di circa 2 ore, gran parte passate nel tratto che dalla stazione <span style="font-weight: bold;">Tiburtina</span> porta al casello in zona <span style="font-weight: bold;">Lunghezza</span>, quasi a passo d'uomo per vari tratti.<br />Poi sono cominciati i lavori per le <a href="http://www.provincia.roma.it/news/viabilit%C3%A0-due-nuove-complanari-su-24">complanari</a>, opera discutibile (es.: non si poteva potenziare la linea <span style="font-weight: bold;">FR2</span> da Lunghezza a Tiburtina, senza altri <span style="font-style: italic;">Nmila</span> milioni di euro per tonnellate di cemento?) che comporta la chiusura di ALMENO una corsia in entrambi i sensi, con tempi di percorrenza ormai diventati assurdi.<br />Un pendolare ha scritto <a href="http://www.ilcapoluogo.it/News/Attualita/Linea-L-Aquila-Roma-disagi-senza-fine-per-i-pendolari-Arpa-62976">questa interessante</a> lettera aperta all'<span style="font-style: italic;">ARPA</span> in cui spiega bene il problema, propone delle soluzioni e solleva il non banale problema del "confort" degli autobus.<br />Bene, a questa lettera è seguita <a href="http://www.ilcapoluogo.it/News/Attualita/Disagi-trasporti-Arpa-massima-attenzione-per-l-autolinea-L-Aquila-Roma-63246">una risposta del direttore dell'ARPA</a> che io ho letto in un venerdì pomeriggio poco prima di ripartire da Roma verso L'Aquila.<br />In questa lettera si snobbano completamente le soluzioni proposte con un politichese ormai noto a noi poveri italiani, sottolineando che vengono investite grandi risorse su questa tratta: «lo dimostra l’anzianità media dei bus impiegati sull’Aquila - Roma che si attesta sui sette anni, a fronte di una media aziendale del parco autobus di 9 anni e mezzo».<br />Vorrei far presente che non è tanto l'età a rendere migliori/peggiori (suggerirei al direttore di dare uno sguardo a Sharon Stone), ma il valore assoluto delle cose, e come quest'ultime vengono gestite e mantenute.<br />Ma torniamo a noi.<br />Letta questa bellissima lettera mi dirigo da Termini verso Tiburtina con la metro B (NO COMMENT, almeno stavolta, per non dilungarmi ulteriormente!).<br />Bene, salgo sull'autobus sul quale il nostro direttore ha investito grandi risorse, ed ecco lo stato:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU268LV0T1n2J7Nz5jUlcT05i3K_Jmyb_fAYa4QCMgWvqYsmZ5eP1HL7pJ97BnWy39DH6RSfOUM7S2S1ONIYU_2RyX14DNU8jIQdHlKS-xbQyAwKGx3bhbtZGPlRZeT-TUMntx/s1600/IMAG0131.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 241px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU268LV0T1n2J7Nz5jUlcT05i3K_Jmyb_fAYa4QCMgWvqYsmZ5eP1HL7pJ97BnWy39DH6RSfOUM7S2S1ONIYU_2RyX14DNU8jIQdHlKS-xbQyAwKGx3bhbtZGPlRZeT-TUMntx/s320/IMAG0131.jpg" alt="" id="BLOGGER_PHOTO_ID_5653808277512411458" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR0_LLH7PUsrdsrWs4lewtbcrPhOPLYuCitYfNntNRQce5XXNexE_NwpDxbc5K5YoYbPV6rbTIfPUqqLwYbm_AHTXnwNJNKZCiNnuTF0H8XRal9Uimww8VA7LcQogVE1ITyUl1/s1600/IMAG0130.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 241px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR0_LLH7PUsrdsrWs4lewtbcrPhOPLYuCitYfNntNRQce5XXNexE_NwpDxbc5K5YoYbPV6rbTIfPUqqLwYbm_AHTXnwNJNKZCiNnuTF0H8XRal9Uimww8VA7LcQogVE1ITyUl1/s320/IMAG0130.jpg" alt="" id="BLOGGER_PHOTO_ID_5653808274016936626" border="0" /></a><br /><br /><br />In pratica aria condizionata a SECCHIATE.<br />Considerando che l'autobus è sempre strapieno, qualcuno si doveva pur sedere in quei posti.<br />Io.<br />Ora, per me va anche bene, ma immaginate un anziano. Bene, dopo la vita passata per raggiungere l'autostrada, ecco comparire un cartello luminoso con la scritta "Veicolo fermo al km. 65".<br />Ovviamente ho subito pensato "100 euro che è un autobus dell'ARPA!". Peccato che non c'era nessuno con cui scommettere, adesso avrei 100 euro in più.<br /><br />A questo aggiungiamo il fatto che le tariffe sono aumentate a inizio Settembre 2011, per cui il singolo biglietto andata-ritorno costa 1 euro in più.<br />Caro direttore, spero che con questo euro potrete finalmente comprare più carta per coprire le bocchette dell'aria condizionata.Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com3tag:blogger.com,1999:blog-18455595.post-86404389618441955142011-08-14T15:10:00.006+02:002011-08-14T15:41:41.887+02:00Ma veramente!? - Cronaca del crtime su sistemi LinuxOk, non scrivo da un bel po' su questo blog, ma questa cosa vorrei condividerla.
<br />
<br /><span style="font-weight: bold;font-size:130%;" >LA PREMESSA</span>
<br />Non voglio dire di essere un grande esperto, ma ho comunque anni e anni di esperienza su sistemi Linux che rendono la questione ancora più interessante...e questo ha contribuito ancora di più a farmi sentire un pirla nella "scoperta" che ho fatto :)
<br />
<br /><span style="font-weight: bold;font-size:130%;" >IL FATTO</span>
<br />A lavoro per diverse ragioni dovevo risalire alla <span style="font-weight: bold;">data di creazione</span> di un file.
<br />Bene, così per abitudine:
<br />
<br />$ <span style="font-style: italic;">ls -l</span>
<br />
<br />mmh no vero, non c'è.
<br />
<br /><span style="font-style: italic;">$ man ls</span>
<br />
<br />mmmh niente di utile.
<br />
<br /><span style="font-style: italic;">$ stat <nomefile></nomefile></span>
<br />
<br />mmh<span style="font-style: italic;"> Access, Modify e Change</span>, ma niente <span style="font-style: italic;">Create</span> o <span style="font-style: italic;">Creation</span>.
<br />
<br /><span style="font-style: italic;">$ man stat</span>
<br />
<br /><blockquote>[...]
<br /> %x Time of last access
<br />
<br /> %X Time of last access as seconds since Epoch
<br />
<br /> %y Time of last modification
<br />
<br /> %Y Time of last modification as seconds since Epoch
<br />
<br /> %z Time of last change
<br />
<br /> %Z Time of last change as seconds since Epoch
<br />[..]</blockquote>mmh niente da fare. Iniziano i primi FORTI dubbi. Al che per togliersene un bel po'
<br />
<br /><span style="font-style: italic;">$ man 2 fstat</span>
<br /><blockquote>
<br /><span style="font-style: italic;">[..]
<br />struct stat {
<br /> dev_t st_dev; /* ID of device containing file */
<br /> ino_t st_ino; /* inode number */
<br /> mode_t st_mode; /* protection */
<br /> nlink_t st_nlink; /* number of hard links */
<br /> uid_t st_uid; /* user ID of owner */
<br /> gid_t st_gid; /* group ID of owner */
<br /> dev_t st_rdev; /* device ID (if special file) */
<br /> off_t st_size; /* total size, in bytes */
<br /> blksize_t st_blksize; /* blocksize for file system I/O */
<br /> blkcnt_t st_blocks; /* number of 512B blocks allocated */
<br /> time_t st_atime; /* time of last access */
<br /> time_t st_mtime; /* time of last modification */
<br /> time_t st_ctime; /* time of last status change */
<br /> };
<br />[..]
<br /></span></blockquote>ma...ma...NON C'È!
<br />
<br /><span style="font-size:130%;"><span style="font-weight: bold;">LA "SCOPERTA</span></span>"
<br />Finalmente è stato introdotto con l'arrivo di <span style="font-weight: bold;">ext4</span>.
<br />In aggiunta ai campi tradizionali (access,modification,change) sono stati aggiunti il <span style="font-weight: bold;">crtime</span>(creation) e<span style="font-weight: bold;"> dtime</span>(deletion) legati all'inode.
<br />Al momento sembra mancare negli strumenti tradizionali (stat, find, ls) la possibilità di ottenere informazioni dal filesystem ext4 maggiori rispetto a quanto possibile per ext2 o ext3.<span style="font-family:courier new;"><span style="font-weight: bold;">
<br /></span></span>Per ottenere queste informazioni:
<br />
<br /><span style="font-style: italic;"># debugfs -R 'stat /percorso/file' /dev/sda1</span>
<br />
<br />dove /dev/sda1 è il dispositivo su cui è montato il filesystem dove risiede il file di cui vogliamo vedere queste informazioni.
<br />
<br /><blockquote><span dir="ltr">Inode: 524360 Type: regular Mode: 0644 Flags: 0x80000
<br />Generation: 1374299388 Version: 0x00000000:00000001
<br />User: 0 Group: 0 Size: 515
<br />File ACL: 0 Directory ACL: 0
<br />Links: 1 Blockcount: 8
<br />Fragment: Address: 0 Number: 0 Size: 0
<br />ctime: 0x4d62a41b:29f0e708 -- Mon Feb 21 18:42:51 2011
<br />atime: 0x4e44d538:d129cbbc -- Fri Aug 12 09:24:40 2011
<br /> mtime: 0x4d62a41b:1d8b1d3c -- Mon Feb 21 18:42:51 2011
<br /><b>crtime: 0x4d62a41b:1d8b</b><b>1d3c -- Mon Feb 21 18:42:51 2011</b>
<br />Size of extra inode fields: 28
<br />EXTENTS:
<br />(0):2167296</span></blockquote>
<br /><span style="font-size:130%;"><span style="font-weight: bold;">CONCLUSIONI</span></span>
<br />Le conclusioni in questa storia sono:
<br /><ol><li>non si finisce mai di imparare...;</li><li>è terribile quando sei straconvinto di una cosa per anni e accorgersi che era completamente sbagliata;</li><li>La maggior parte di chi legge aveva la mia stessa convinzione ma non lo dirà mai, anzi dirà che lo sapeva perfettamente;</li><li>Non so che gli costava aggiungere questo campo anche prima.</li></ol>
<br />Ogni altra aggiunta e spiegazione su questo fatto sono ben voluti.
<br /><span style="font-family:courier new;"><span style="font-weight: bold;"></span></span>Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com4tag:blogger.com,1999:blog-18455595.post-28890233380233303072011-05-12T00:10:00.000+02:002011-05-13T22:29:51.549+02:00Finalmente si alza il sipario: ecco il nuovo sito di ubuntu-itSignore e signori,<br />dopo mesi di durissimo lavoro (che in realtà è il lavoro-dopo-il-vero-lavoro-ovvero-tempo-libero) siamo felicissimi e fieri di presentare la nuova veste del <a href="http://www.ubuntu-it.org/">sito ufficiale di ubuntu-it</a>:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq9aYrLQ0WUpUqtOdQQaLwi-qz7sRr1clSRmH3O9O_wohMd53gMbwGU2_np0z_eGcthlCXSqnMKwNSAw8shrC_8D9BdhooChyOLrOZs2PTcVR_4w_OrD1SMgw4XFspRjYMPzD1/s1600/newhome.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 183px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq9aYrLQ0WUpUqtOdQQaLwi-qz7sRr1clSRmH3O9O_wohMd53gMbwGU2_np0z_eGcthlCXSqnMKwNSAw8shrC_8D9BdhooChyOLrOZs2PTcVR_4w_OrD1SMgw4XFspRjYMPzD1/s320/newhome.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5605584856186111762" /></a><br /><br />Un cambio che vede il passaggio ad un nuovo CMS (Drupal), una grande attenzione ai contenuti, e una grandissima attenzione all'aspetto grafico.<br />Alcuni aspetti non sono ancora stabili al 100% ma abbiamo deciso di non temporeggiare ulteriormente, e di verificare insieme agli utenti dove occorre intervenire.<br /><br />Detto questo, non resta che godersi il sito.<br /><br />Enjoy!Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com6tag:blogger.com,1999:blog-18455595.post-80829742423799222502011-05-05T17:26:00.005+02:002011-05-05T17:33:54.848+02:00ubuntu-it, il nuovo sito sta arrivando....<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_h72AOCoTD8imiFF8Kd0wB95js4ze_q23uzuzW0d7tU7lGb5L-anyY0uErco35R3KWcX9uCwxJ5mzBR7wiChCC-_sl-6bID5Rtb9nDevYzmDgh66n1GXP4nW9bwo2psC3sJzU/s1600/assange.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 362px; height: 312px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_h72AOCoTD8imiFF8Kd0wB95js4ze_q23uzuzW0d7tU7lGb5L-anyY0uErco35R3KWcX9uCwxJ5mzBR7wiChCC-_sl-6bID5Rtb9nDevYzmDgh66n1GXP4nW9bwo2psC3sJzU/s400/assange.png" alt="" id="BLOGGER_PHOTO_ID_5603253963427948722" border="0" /></a>Il nuovo sito di ubuntu-it sta prendendo vita e manca davvero poco al suo esordio.<br />Un forte e costante lavoro che ha portato ad un risultato incredibile. Mancano pochi dettagli per andare online, questione di giorni...stay tuned!<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJiGeW16gthf7e_ZSKizwWXorqWG1bafGMwstGHo1WIllt4Ud6AR2AOA1YVQ3mCvwHu3t0TQt5XGIpLRGV6zxBmuet3hjo6Zv007cewJM-ipDYssK5laM3K4VSgFB0EOkB3SZy/s1600/scopriubuntu.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 261px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJiGeW16gthf7e_ZSKizwWXorqWG1bafGMwstGHo1WIllt4Ud6AR2AOA1YVQ3mCvwHu3t0TQt5XGIpLRGV6zxBmuet3hjo6Zv007cewJM-ipDYssK5laM3K4VSgFB0EOkB3SZy/s320/scopriubuntu.png" alt="" id="BLOGGER_PHOTO_ID_5603255146381561170" border="0" /></a><br /><br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.leoiannacone.com/it/wordpress/wp-content/uploads/2011/05/Schermata-Comunit%C3%A0-Ubuntu-Italia-Mozilla-Firefox.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px; height: 408px;" src="http://www.leoiannacone.com/it/wordpress/wp-content/uploads/2011/05/Schermata-Comunit%C3%A0-Ubuntu-Italia-Mozilla-Firefox.png" border="0" alt="" /></a>Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com3tag:blogger.com,1999:blog-18455595.post-37404895042803611122011-04-20T11:33:00.003+02:002011-04-20T11:38:47.092+02:00Ubuntu Party 2011 @ SchioMancano ormai pochi giorni al primo <span style="font-weight:bold;">Ubuntu Party</span> italiano.<br />L'evento si terrà a Schio, in provincia di Vicenza, il <span style="fonthttp://www.blogger.com/img/blank.gif-weight:bold;">30 Aprile e 1 Maggio 2011</span>. Organizzato dalla <a href="http://www.ubuntu-it.org">Comunità Italiana Ubuntu</a>, da <span style="font-style:italic;">AVi LUG</span> e da Piazza Telematica del Comune di Schio.<br /><br />Il nostro Fabio Colinelli ha preparato una piccola presentazione dell'evento:<br /><br /><iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/x_SdPgTmhuE" frameborder="0" allowfullscreen></iframe><br /><br />Partecipate numerosi!Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com0tag:blogger.com,1999:blog-18455595.post-61950785533340164282011-04-06T16:13:00.004+02:002011-04-06T16:17:37.953+02:0017532 ore dopoFiaccolata a e per L'Aquila.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipqJI-Six11TGYDUOUy4j1DS7MAzs5jr6tiSVfy_C93NR-RFbhJXqgTb_SrfPb82EIHEWZNVgH5601qeb81sjQ3vbQ4gNZBuus0e6Wg7CYxdnKLAHkHR54f9B49ktDPPRzKX-e/s1600/aq.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 185px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipqJI-Six11TGYDUOUy4j1DS7MAzs5jr6tiSVfy_C93NR-RFbhJXqgTb_SrfPb82EIHEWZNVgH5601qeb81sjQ3vbQ4gNZBuus0e6Wg7CYxdnKLAHkHR54f9B49ktDPPRzKX-e/s320/aq.jpg" alt="" id="BLOGGER_PHOTO_ID_5592474287950593122" border="0" /></a>Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com0tag:blogger.com,1999:blog-18455595.post-72652157534382520862011-01-23T15:23:00.010+01:002011-01-23T15:51:20.193+01:00bash tip: impostare redirezione output dall'interno di uno scriptPiccola ma utile tip.<br />Se si ha per qualche motivo la necessità di impostare la redirezione dell'output di uno script (<span style="font-style:italic;">stdout</span> e/o <span style="font-style:italic;">stderr</span>) senza utilizzare gli operatori per la redirezione (come <a href="http://www.pluto.it/files/ildp/HOWTO/Bash-Prog-Intro-HOWTO/Bash-Prog-Intro-HOWTO-3.html">ben descritto</a> per esempio sul sito dell'ILDP) dall'interno dello script o direttamente dalla linea di comando, ecco una possibile soluzione:<br /><br /><pre name="code" class="php"><br />#!/bin/sh<br /><br />exec > prova.log 2 > &1<br /><br />echo "queste due linee stampate"<br />echo "andranno in prova.log"<br /></pre>Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com0tag:blogger.com,1999:blog-18455595.post-74686172806130599232010-10-08T13:45:00.002+02:002010-10-08T13:50:37.918+02:00Ubuntu 10.10 in arrivo<span style="font-weight:bold;">Ci siamo quasi.</span><br /><a href="http://www.ubuntu.com/"><img src="http://www.ubuntu.com/countdown/banner1.png" border="0" width="180" height="150" alt="The next version of Ubuntu is coming soon"></a><br /><br />La Comunità di ubuntu-it è pronta per l'arrivo di <span style="font-weight:bold;">Maverick Meerkat</span>.<br />Utilizzo questa <span style="font-style:italic;">release</span> dalla versione Beta, e devo ammettere che è davvero sorprendente.<br /><a href="https://wiki.ubuntu.com/MaverickMeerkat/TechnicalOverview">Appuntamento a domenica</a>.Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com0tag:blogger.com,1999:blog-18455595.post-73623317189430189912010-09-03T10:04:00.003+02:002010-09-03T10:40:19.845+02:00#iuseubuntubecauseIl <a href="http://design.canonical.com">Design Team di Canonical</a> ha lanciato un'<a href="http://design.canonical.com/2010/09/why-do-you-use-ubuntu/">interessante iniziativa</a> con lo scopo di migliorare il <a href="http://www.ubuntu.com">sito di Ubuntu</a> e mettere in luce i motivi per cui usare la distribuzione stessa sottolineando le caratteristiche del prodotto.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://design.canonical.com/wp-content/uploads/2010/09/iloveubuntubecause-300x208.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 208px;" src="http://design.canonical.com/wp-content/uploads/2010/09/iloveubuntubecause-300x208.png" border="0" alt="" /></a><br /><br />Da qui l'idea di invitare gli utenti a inviare un tweet (<span style="font-weight:bold;">twitter</span> o <span style="font-weight:bold;">identi.ca</span>) con il tag <span style="font-style:italic;">#iuseubuntubecause</span> e mostrarlo nel sito web, dando voce alla comunità sul sito stesso. Già è stato fatto un test interessante (<a href="http://twitter.com/#search?q=%23iuseubuntubecause">twitter</a> / <a href="http://identi.ca/tag/iuseubuntubecause">identi.ca</a>).<br /><br />In realtà l'idea non è completamente nuova, in quanto microsoft aveva introdotto un <a href="http://www.microsoft.com/windows/social/">servizio simile da tempo per il suo Windows 7</a>.Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com0tag:blogger.com,1999:blog-18455595.post-36281056543239223972010-08-25T12:04:00.000+02:002010-08-25T14:11:32.460+02:00Piccoli tips & tricks con SmartyPreparando il nuovo sito web (a breve completamente online, rimanete in attesa! :) ) ho utilizzato alcuni di questi metodi con <a href="http://www.smarty.net">Smarty</a> che non sono complicati ma molto utili, e potrebbero risultare utili.
<br />
<br /><span style="font-weight: bold;font-size:130%;" >1. Mostrare l'età, che si aggiorna dinamicamente</span>
<br />In questo esempio verrà sempre mostrata la mia reale età (1985 è la mia data di nascita) sfruttando un'equazione matematica e utilizzando <strong>$smarty.now</strong> per recuperare l'anno corrente:
<br />
<br /><pre name="code" class="php">
<br />{math equation="x - 1985" x=$smarty.now|date_format:"%Y"}
<br /></pre>
<br />
<br /><span style="font-weight: bold;font-size:130%;" >2. Utilizzare le variabili della request</span>
<br />(In realtà non l'ho più utilizzato, meglio parsarle nel PHP)
<br />
<br />Questi gli equivalenti rispettivamente di $_GET['item'], $_POST['item'], $_COOKIE['item']:
<br /><pre name="code" class="php">
<br />{$smarty.get.item}
<br />{$smarty.post.item}
<br />{$smarty.cookies.item}
<br /></pre>
<br />
<br /><span style="font-weight: bold;font-size:130%;" >3. Modifier 'default' per variabili vuote</span>
<br />Per controllare una variabile vuota, invece di diverse righe di codice e l'uso di un <em>if</em> come in questo caso:
<br /><pre name="code" class="php">
<br /><table><tr><td>
<br />{if $item eq ''}
<br /> default item value
<br />{else}
<br /> {$item}
<br />{/if}
<br /></td></tr></table>
<br /></pre>
<br />
<br />si può sfruttare il modifier <strong>default</strong> in questo modo:
<br /><pre name="code" class="php">
<br /><table><tr><td>{$item|default:'default item value'}</td></tr></table>
<br /></pre>
<br />
<br /><span style="font-weight: bold;font-size:130%;" >4. Alternare stili CSS</span>
<br />Potrebbe essere il caso di liste o tabelle o altri elementi, nelle quali si vorrebbero alternare 2 colori diversi di background:
<br />
<br /><pre name="code" class="php">
<br />{foreach from=$projects name=workslist item=project}
<br />
<br /> {if $smarty.foreach.workslist.iteration is not odd}
<br /> <div class="projectdescription even">
<br /> {else}
<br /> <div class="projectdescription">
<br /> {/if}
<br />{/foreach}
<br /></pre>
<br />
<br />Ancora più elegante potrebbe essere una soluzione con la funzione <a href="http://www.smarty.net/manual/en/language.function.cycle.php">cycle</a>.
<br />
<br /><span style="font-weight: bold;font-size:130%;" >5. Lista separata da un carattere</span>
<br />Ad esempio, se vogliamo stampare una lista di nomi separati da una virgola ma (ovviamente) evitare la virgola finale:
<br /><pre name="code" class="php">
<br />{section name=sectionname loop=$names}
<br /> {$names[sectionname]}{if $smarty.section.sectionname.last == false}, {/if}
<br />{/section}
<br /></pre>
<br />L'output sarebbe qualcosa come:
<br /><em>Warty, Feisty, Karmic, Breezy, Lucid</em>
<br />
<br />Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com0tag:blogger.com,1999:blog-18455595.post-72501829114601766032010-08-13T15:32:00.003+02:002010-08-13T15:35:04.705+02:00ubuntu-it ha un nuovo contactMilo Casagrande è il nuovo contact di <span style="font-weight: bold;">ubuntu-it</span>.<br />Complimenti a Milo e mille volte <span style="font-style: italic;">grazie</span> a Matthew East per il lavoro svolto in tutti questi anni da contact e non solo.<br />La notizia ufficiale è consultabile sul sito web di <a href="http://www.ubuntu-it.org/news/304/32/Il-nuovo-contact-di-ubuntu-it.shtml">ubuntu-it</a>.Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com0tag:blogger.com,1999:blog-18455595.post-4219273391547052592010-08-10T20:21:00.004+02:002010-08-10T20:40:40.701+02:00forum admins @ workCapita ogni tanto, ma proprio ogni tanto, di incontrarsi con coloro che lavorano su ubuntu-it e che si trovano a Roma, dove lavoro, o nei dintorni. Per questa sera abbiamo organizzato (con sottofondo della partita della nazionale) un incontro tra admins del <a href="http://forum.ubuntu-it.org/">forum di ubuntu-it</a>, con <a href="http://wiki.ubuntu-it.org/Volans">volans</a> (a casa sua, tra l'altro).<br />Verranno apportate delle modifiche al forum attuale e continueranno i test per la prossima piattaforma.<br />Non ci credete ancora? Ok...ecco a voi la prova fotografica presa con cheese..:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGdb-HlKcnrnftqmoDj3LuNhCZ8QZM_t1DVx77mILCBhV8wwCOI8iPR8EEHHuhNkHLSQTzyyjowQaLPmLZR8ZkJr1PTj9ig3JBd7NqFoUzzpp2XPdsoJmLv3Vygs5GB8B_Ubwr/s1600/adminsAtwork.png"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGdb-HlKcnrnftqmoDj3LuNhCZ8QZM_t1DVx77mILCBhV8wwCOI8iPR8EEHHuhNkHLSQTzyyjowQaLPmLZR8ZkJr1PTj9ig3JBd7NqFoUzzpp2XPdsoJmLv3Vygs5GB8B_Ubwr/s320/adminsAtwork.png" alt="" id="BLOGGER_PHOTO_ID_5503852020586120066" border="0" /></a>Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com5tag:blogger.com,1999:blog-18455595.post-86177468486006247942010-07-18T18:12:00.003+02:002010-07-18T18:16:01.020+02:00Un terminale reale nel browser con JQuery e Django, parte IIMentre la <a href="http://lorenzosfarra.blogspot.com/2010/06/un-terminale-reale-nel-browser-con.html">prima parte</a> è incentrata sull'HTML, il codice javascript e il CSS, in questa seconda parte ci si concentrerà sul lato server-side, ovvero il codice <a href="http://www.python.org">python</a> associato al <a href="http://www.djangoproject.com">framework Django</a>.<br /><br />Per la spiegazione del funzionamento di Django ovviamente rimando al sito ufficiale, in questo articolo vengono riportati solo i passaggi principali.<br />Vediamo innanzitutto il contenuto del file urls.py, che descrive lo schema delle URL di questa applicazione (molto semplice):<br /><pre name="code" class="python"><br /> # Copyright (C) 2010 Lorenzo Sfarra (lorenzosfarra@ubuntu.com)<br /> #<br /> # This program is free software; you can redistribute it and/or<br /> # modify it under the terms of the GNU General Public License<br /> # as published by the Free Software Foundation; either version 2<br /> # of the License, or (at your option) any later version.<br /> #<br /> # This program is distributed in the hope that it will be useful,<br /> # but WITHOUT ANY WARRANTY; without even the implied warranty of<br /> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br /> # GNU General Public License for more details.<br /> #<br /> # You should have received a copy of the GNU General Public License<br /> # along with this program; if not, write to the Free Software<br /> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<br /> #<br /><br /><br />from django.conf.urls.defaults import *<br />from django.conf import settings<br /><br />MEDIA_ROOT = settings.MEDIA_ROOT<br /><br />urlpatterns = patterns('',<br /> (r'^cmd/(?P<command>.*)$', 'terminaljs.terminal.views.cmd'),<br /> (r'^media/(?P<path>.*)$', 'django.views.static.serve',<br /> {'document_root': MEDIA_ROOT}),<br /> (r'^$', 'terminaljs.terminal.views.index'),<br />)<br /><br /></pre><br /><br />Definiamo quindi che una URL con cmd/ iniziale richiama la view cmd con un parametro "command", il comando da eseguire. Definiamo inoltre che le URL con "media/" iniziale devono essere processate staticamente, ed infine definiamo la URL predefinita che richiama la view index.<br /><br />Passiamo quindi a vedere il codice delle view, definito nel file <span style="font-style:italic;">views.py</span>:<br /><br /><pre name="code" class="python"><br /># Copyright (C) 2010 Lorenzo Sfarra (lorenzosfarra@ubuntu.com)<br /> #<br /> # This program is free software; you can redistribute it and/or<br /> # modify it under the terms of the GNU General Public License<br /> # as published by the Free Software Foundation; either version 2<br /> # of the License, or (at your option) any later version.<br /> #<br /> # This program is distributed in the hope that it will be useful,<br /> # but WITHOUT ANY WARRANTY; without even the implied warranty of<br /> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br /> # GNU General Public License for more details.<br /> #<br /> # You should have received a copy of the GNU General Public License<br /> # along with this program; if not, write to the Free Software<br /> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<br /> #<br /><br /><br />from django.shortcuts import render_to_response<br />from django.http import HttpResponse<br />from commands import getoutput<br />import os.path<br /><br /># global variable<br />CWD = "/home/lorenzo"<br /><br />def index(request):<br /> return render_to_response("index.html")<br /><br />def is_trusted_command(command):<br /> #TODO: check if it's a trusted command<br /> return True<br /><br />def cmd(request, command):<br /> global CWD<br /> if command.startswith("cd "):<br /> new_path = command.split(" ")[1]<br /> if not new_path.startswith("/"):<br /> # relative path<br /> new_path = os.path.join(CWD, new_path)<br /> if os.path.isdir(new_path):<br /> CWD = new_path<br /> output = ""<br /> else:<br /> output = "cd: " + new_path + ": No such file or directory"<br /> elif is_trusted_command(command):<br /> output = getoutput("cd %s; %s" %(CWD,command))<br /> else:<br /> output = "Untrusted command."<br /> return HttpResponse(output)<br /></pre><br /><br /><br />Da sottolineare, così come fatto nella prima parte, la funzione <span style="font-style:italic;">is_trusted_command</span> che deve essere implementata anche server-side.<br /><br />Ovviamente il tutto è puramente dimostrativo, per chi fosse interessato a migliorarlo è presente tutto il codice su <a href="http://code.google.com/p/djsterminal">Google Code</a>.<br />Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com8tag:blogger.com,1999:blog-18455595.post-15144141806075059832010-07-17T17:42:00.004+02:002010-07-18T18:59:19.064+02:00Un terminale reale nel browser con JQuery e Django, parte INell'articolo vediamo come realizzare un terminale che accetta comandi e che li esegue effettivamente su una macchina reale.<br />Questa prima parte si concentra sull'HTML, il codice Javascript e il CSS necessario.<br />La seconda parte verrà invece incentrata sul lato della programmazione <a href="http://www.python.org">python</a> con il <a href="http://www.djangoproject.com">framework Django</a>.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyd36D-qIcVbALh5WMWX80VHkEWc3j2yjzMZi0skZuh1pnAqddwrt8LyICdyRWFrYNx4YFat2125uGX8bWDW2K86kQeU7i4-bqVo4H4OpRXlfrLNoO_jMLBfrsAJfzZOnU3WG_/s1600/djsterminal.png"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 197px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyd36D-qIcVbALh5WMWX80VHkEWc3j2yjzMZi0skZuh1pnAqddwrt8LyICdyRWFrYNx4YFat2125uGX8bWDW2K86kQeU7i4-bqVo4H4OpRXlfrLNoO_jMLBfrsAJfzZOnU3WG_/s320/djsterminal.png" alt="" id="BLOGGER_PHOTO_ID_5488199670047502290" border="0" /></a>Il lato server è stato realizzato con il web framework Python <a href="http://www.djangoproject.com/">Django</a>, il lato client sfrutta la libreria JS <a href="http://www.jquery.com/">JQuery</a> anche per le chiamate AJAX.<br /><br />L'HTML è piuttosto semplice e si trova nel file <span style="font-style: italic;">templates/index.html</span><br /><br /><pre name="code" class="html"><br /><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><br /><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"><br /> <head><br /> <title>Lorenzo Sfarra :: DJSterminal</title><br /> <link rel="stylesheet" href="/media/css/terminal.css"/><br /> <script type="text/javascript"<br /> src="http://www.google.com/jsapi"></script><br /> <script type="text/javascript"><br /> // You may specify partial version numbers, such as "1" or "1.3",<br /> // with the same result. Doing so will automatically load the<br /> // latest version matching that partial revision pattern<br /> // (e.g. 1.3 would load 1.3.2 today and 1 would load 1.4.2).<br /> google.load("jquery", "1.4.2");<br /><br /><br /> </script><br /><br /> <script src="/media/js/terminal.js" type="text/javascript">/* Terminal */</script><br /><br /> <script type="text/javascript"><br /> google.setOnLoadCallback(function() {<br /> /* Handle the enter keycode */<br /> $("#commandline").keypress(function(event) {<br /> if (event.keyCode == '13') {<br /> event.preventDefault();<br /> onEnterKey();<br /> }<br /> });<br /> });<br /> </script><br /> </head><br /><br /> <body><br /> <div id="terminal"><br /> <div id="terminaltop"><img src="/media/css/imgs/buttons.png" alt="buttons" align="left"/> <br/>Javascript Terminal</div><br /><br /><!-- Command line --><br /> <textarea id="commandline" cols="80" rows="15">lorenzo@josie:~$ </textarea><br /><!-- End command line --><br /> </div><br /> </body><br /></html><br /></pre><br /><br />Nelle prime righe importiamo i file necessari. In particolare sfruttiamo <a href="http://www.google.com">Google</a> per caricare la libreria <span style="font-weight:bold;">JQuery</span>.<br />Nelle linee 20-29 catturiamo il tasto Invio per gestire l'input come una riga di comando.<br /><br />Il file <span style="font-style:italic;">terminal.js</span> che contiene il sorgente javascript necessario si trova nella directory <span style="font-style:italic;">media/js</span>, ed è il seguente:<br /><br /><pre name="code" class="js"><br />/* Copyright (C) 2010 Lorenzo Sfarra (lorenzosfarra@ubuntu.com)<br /> <br /> * This program is free software; you can redistribute it and/or<br /> * modify it under the terms of the GNU General Public License<br /> * as published by the Free Software Foundation; either version 2<br /> * of the License, or (at your option) any later version.<br /> <br /> * This program is distributed in the hope that it will be useful,<br /> * but WITHOUT ANY WARRANTY; without even the implied warranty of<br /> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the<br /> * GNU General Public License for more details.<br /> <br /> * You should have received a copy of the GNU General Public License<br /> * along with this program; if not, write to the Free Software<br /> * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA.<br /> */<br /><br /><br /><br />// The command line prompt<br />var cliPrompt = "lorenzo@josie:~$ ";<br /><br />// the server address where the real console exists<br />var cliHost = "http://localhost:8000/";<br /><br />function isTrustedCommand(command) {<br /> /** <br /> * Function to check that the given command is trusted.<br /> * @param command the command to check<br /> * @return boolean<br /> */<br /> // TODO: check that this is a trusted command!<br /> return true;<br />}<br /><br />function executeCommand(text, cliPrompt, command) {<br /> /**<br /> * Function to execute the given command through an AJAX call<br /> * and retrieve the result to update the textarea value.<br /> * @param text the current textarea value<br /> * @param cliPrompt the prompt<br /> * @param command the command to execute<br /> */<br /> // build the URL for the command<br /> remoteCommand = cliHost + "cmd/" + command;<br /> output = "";<br /> // Perform the AJAX call<br /> $.ajax({<br /> url: remoteCommand,<br /> type: 'GET',<br /> dataType: 'text',<br /> error: function(data, textStatus, errorThrown) {<br /> // readyState == 4? Error.<br /> if (data.readyState == 4) {<br /> output = "Connection error.\n"<br /> }<br /> },<br /> success: function(data) {<br /> output = data + "\n";<br /> $("#commandline").val([text, output, cliPrompt].join("\n"));<br /> // Textarea with focus at bottom<br /> $("#commandline").animate({ scrollTop: 99999}, 10);<br /> }<br /> });<br /><br />}<br /><br />function onEnterKey() {<br /> /* Function called when a user press the Enter key on its keyboard. */<br /> text = $("#commandline").val();<br /> // Get the command<br /> promptIndex = text.lastIndexOf(cliPrompt);<br /> // build the command<br /> command = text.substring(promptIndex + cliPrompt.length);<br /> if (command == "clear") {<br /> // simply clear the textarea value<br /> $("#commandline").val(cliPrompt);<br /> } else if (isTrustedCommand(command)) {<br /> executeCommand(text, cliPrompt, command);<br /> } else {<br /> output = "Invalid command.";<br /> $("#commandline").val([text,output,cliPrompt].join("\n"));<br /> }<br />}<br /><br /></pre><br /><br />La funzione principale è ovviamente <span style="font-weight:bold;">executeCommand()</span> che effettua la chiamata AJAX necessaria per eseguire realmente il comando sul server di riferimento.<br /><br /><span style="font-weight:bold;">ATTENZIONE:</span> una funzione importantissima è <span style="font-weight:bold;">isTrustedCommand(command)</span> che ritorna "true" se il comando ha il "permesso" per essere eseguito. Questo ovviamente è necessario per proteggere il server. Al momento la funzione non effettua alcun controllo e ritorna immediatamente "true".<br /><br />Il foglio di stile <span style="font-style:italic;">terminal.css</span> si trova nella directory <span style="font-style:italic;">media/css</span>.<br />Passa alla <span style="font-weight:bold;"><a href="http://lorenzosfarra.blogspot.com/2010/07/un-terminale-reale-nel-browser-con_18.html">parte II »</a></span>.<br /><br />Per lo stile è stato preso come modello di riferimento il terminale presente nell'articolo <a href="http://mustardamus.com/articles/forwarding_emails_with_postfix">"Forwarding E-Mails with Postfix"</a>.Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com0tag:blogger.com,1999:blog-18455595.post-63701176781803075402010-06-19T13:36:00.003+02:002010-06-19T19:21:28.725+02:00GoogleCL: Google Command Line Tool<strong>GoogleCL</strong> è uno strumento creato da <strong>Google</strong> per interagire con alcuni dei suoi servizi direttamente dalla linea di comando.<br /><br />Se si vuole aggiungere un contatto, un evento, un articolo sul blog Blogger (cosa che sto provando proprio per questo articolo), sarà possibile farlo quindi con un comando specifico. Questo articolo ad esempio, dopo aver creato il file post.html con il contenuto, è stato pubblicato con il comando:<br /><pre name="code" class="python"><br />google blogger post --tags "GoogleCL, terminale, linea di comando, Linux, Google" --title "GoogleCL: Google Command Line Tool" post.html</pre>L'applicazione è scritta in python ed è già pronto un .deb, oltre ai sorgenti, sulla <a href="http://code.google.com/p/googlecl/">pagina del progetto</a>.Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com0tag:blogger.com,1999:blog-18455595.post-29298001521440982542010-06-12T15:09:00.003+02:002010-06-12T15:16:30.489+02:00Top 5 Design del mese, MaggioOgni giorno visito vari siti web per studiarne la grafica e prendere ispirazione.<br />Catalogo spesso quelli che mi hanno più colpito, quindi condivido questi siti web nel blog, sperando che alcuni possano essere utili anche ad altri.<br />Continuiamo con altri 5 design :)<br /><br /><span style="font-weight: bold;">1. The Croquis</span> (<a href="http://www.thecroquis.com/">http://www.thecroquis.com</a>)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsPyFj9iAgsnCy9p9PVZOYf22RlRLS5ezsVEW9qV0PL9I6gQeSB6wRmx8BIpVYawDtR9vMC5Et9kffzu9xOFiUZmeyKvPXCKinajzLF8QXucRy514GP7Db97wVhlYWSVduRxuC/s1600/croquis2.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 183px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsPyFj9iAgsnCy9p9PVZOYf22RlRLS5ezsVEW9qV0PL9I6gQeSB6wRmx8BIpVYawDtR9vMC5Et9kffzu9xOFiUZmeyKvPXCKinajzLF8QXucRy514GP7Db97wVhlYWSVduRxuC/s320/croquis2.png" alt="" id="BLOGGER_PHOTO_ID_5481874180367672738" border="0" /></a><br /><br /><span style="font-weight: bold;">2. BAHUR78</span> (<a href="http://www.bahur78.com/">http://www.bahur78.com/</a>)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjAPH987k3oDVAP5onU2kTe-3WjVyWpdcyfFLdPIVmEGKgJj9Utd36YgBMG7V9ka49PUwvAdYw0iSPhuk1oeY9hcd8euruCQVLwnGbwQvD50bombEqvR2xx_Z0QauvpdIaB3JG/s1600/bahur2.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 179px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjAPH987k3oDVAP5onU2kTe-3WjVyWpdcyfFLdPIVmEGKgJj9Utd36YgBMG7V9ka49PUwvAdYw0iSPhuk1oeY9hcd8euruCQVLwnGbwQvD50bombEqvR2xx_Z0QauvpdIaB3JG/s320/bahur2.png" alt="" id="BLOGGER_PHOTO_ID_5481874201919457554" border="0" /></a><br /><br /><span style="font-weight: bold;">3. Kiwi</span> (<a href="http://kiwi-app.net/">http://kiwi-app.net/</a>)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVGRgWQGldwXU0_tw7pjTTKWHB1495_RJT4GXu5QlxawgI0ZLSAdkah90RpwlJRFVXUhhjPix9EwdVmByf60W6xmxyMyhgu4smuGwEz5pm_LK8zHAshDAGOubnv_cNDryzBoD5/s1600/kiwi2.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 190px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVGRgWQGldwXU0_tw7pjTTKWHB1495_RJT4GXu5QlxawgI0ZLSAdkah90RpwlJRFVXUhhjPix9EwdVmByf60W6xmxyMyhgu4smuGwEz5pm_LK8zHAshDAGOubnv_cNDryzBoD5/s320/kiwi2.png" alt="" id="BLOGGER_PHOTO_ID_5481874207128884082" border="0" /></a><br /><br /><span style="font-weight: bold;">4. Square</span> (<a href="https://squareup.com/">https://squareup.com/</a>)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj41_82CyNtf4p6tp6v_k7gAy4Wibav4UHnuMz30xqkxE3Fz3Ds5XvaQnRmMaTzkpod-UAHsVAoBPuqlz2uwEaf6JkwWV0uggBAxBOfkXMFLji8uraq0CZjOU6c8u0ypPtebDeY/s1600/square2.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 224px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj41_82CyNtf4p6tp6v_k7gAy4Wibav4UHnuMz30xqkxE3Fz3Ds5XvaQnRmMaTzkpod-UAHsVAoBPuqlz2uwEaf6JkwWV0uggBAxBOfkXMFLji8uraq0CZjOU6c8u0ypPtebDeY/s320/square2.png" alt="" id="BLOGGER_PHOTO_ID_5481874193817960754" border="0" /></a><br /><br /><span style="font-weight: bold;">5. Narhir Design</span> (<a href="http://www.narhir.com/">http://www.narhir.com/</a>)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg07XqLuNum9JwNtrd7ZFWRLydjF12tYPcVN54b7QiJJxALuDMZc6pG6FS32ESadHLSll_A-2dTSqmgFuTEhMt0OuE3qJUIsJ420Y5_IAM5poJfKDBs1aPogkv01yGuruB-WSrW/s1600/narhir2.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 190px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg07XqLuNum9JwNtrd7ZFWRLydjF12tYPcVN54b7QiJJxALuDMZc6pG6FS32ESadHLSll_A-2dTSqmgFuTEhMt0OuE3qJUIsJ420Y5_IAM5poJfKDBs1aPogkv01yGuruB-WSrW/s320/narhir2.png" alt="" id="BLOGGER_PHOTO_ID_5481875228002800642" border="0" /></a>Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com5tag:blogger.com,1999:blog-18455595.post-48456117508062603662010-05-18T20:56:00.004+02:002010-05-18T21:12:20.626+02:00ubuntu-it-meeting Bologna - 22, 23 Maggio 2010Siamo arrivati al quarto <i>meeting</i> della <a href="http://www.ubuntu-it.org/">comunità italiana di Ubuntu</a>, dove i componenti dei gruppi che sono l'anima di <b>ubuntu-it </b>si riuniscono per discutere dei gruppi stessi, dei loro progetti, del futuro della comunità, con talk tecnici e organizzativi...e ovviamente per ritrovarsi insieme!<br /><br /><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEomOzHKKF-eRwSnMA2M0g7Gh5FPsLiPTleLizD_4mt8e8jnllN2Nw4lpiPsmPMWPZaaZTJ8TV8M4YmXO-G-jVd9mdwtFQzLDMJWCRXKhyV1RWP_4-qVx0tFt27B81NQWC6Jf5/s320/umeeting.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 65px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5472688045320350258" /><div>Purtroppo non potrò essere presente, ma seguirò (se non ci saranno impedimenti) il live del meeting tramite <a href="http://twitter.com/ubuntuitmeeting">twitter</a> e/o <a href="http://identi.ca/ubuntuitmeeting">identi.ca</a>, oltre ovviamente a leggere i verbali delle riunioni nei giorni successivi.</div><div><a href="http://wiki.ubuntu-it.org/UbuntuItMeeting">Buon divertimento</a>... :)</div>Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com2tag:blogger.com,1999:blog-18455595.post-17041844316834349392010-05-15T19:43:00.004+02:002010-05-15T20:00:43.918+02:00Top 5 design del mese, AprileOgni giorno visito vari siti web per studiarne la grafica e prendere ispirazione.<br />Catalogo spesso quelli che mi hanno più colpito, quindi condivido questi siti web nel blog, sperando che alcuni possano essere utili anche ad altri.<br />Continuiamo con altri 5 design.<br /><br /><span style="font-weight: bold;">1. matt cronin</span> (<a href="http://www.matt-cronin.com/">http://www.matt-cronin.com/</a>)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Oi9LYOKKSucK_KQq19Du5VrweEtEf5toc-c8B2EPJnLoLGGaEx9zqzmsrR44sZMxVspQiHdbqxqkAwNNAw0NFzE64P4itRHMFhyGG0kmtv3DMqDe1L0YU2Tp4awE0TIe2dla/s1600/mattcronin2.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 209px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Oi9LYOKKSucK_KQq19Du5VrweEtEf5toc-c8B2EPJnLoLGGaEx9zqzmsrR44sZMxVspQiHdbqxqkAwNNAw0NFzE64P4itRHMFhyGG0kmtv3DMqDe1L0YU2Tp4awE0TIe2dla/s320/mattcronin2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5471557611091518082" /></a><br /><br /><span style="font-weight: bold;">2. Newcastle web design & development</span> (<a href="http://newism.com.au/">http://newism.com.au/</a>)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf7N-4fy7CCqWKk1I8nQF3bqqVah7tG1W6ZM8cTjtdSOTqKBBQH-mYMnToS3DsCr2hCPpSEjzAGIIAyDg72eX-2Fh2WNbp6Ll82Q3Y3bkcWAfgV7cksBlDUYR98zmCjuI7KgrD/s1600/newism2.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 201px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf7N-4fy7CCqWKk1I8nQF3bqqVah7tG1W6ZM8cTjtdSOTqKBBQH-mYMnToS3DsCr2hCPpSEjzAGIIAyDg72eX-2Fh2WNbp6Ll82Q3Y3bkcWAfgV7cksBlDUYR98zmCjuI7KgrD/s320/newism2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5471558044826844018" /></a><br /><br /><span style="font-weight: bold;">3. Strutta - the contest platform</span> (<a href="http://www.strutta.com/">http://www.strutta.com/</a>)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9upjXPgHz6uN0jNfXv6Y2FcsxSj79v4YuMIZyB1-mEvJnyEl-JTL0RK5GQm3mvSXoP2Ht7Q3rK7FnzL6aJ9cRcYPtx_98uDZxmxywd-Sg7d1kiVTGj_lAV7DCpi_pMrJY4lWm/s1600/strutta2.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 204px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9upjXPgHz6uN0jNfXv6Y2FcsxSj79v4YuMIZyB1-mEvJnyEl-JTL0RK5GQm3mvSXoP2Ht7Q3rK7FnzL6aJ9cRcYPtx_98uDZxmxywd-Sg7d1kiVTGj_lAV7DCpi_pMrJY4lWm/s320/strutta2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5471558055391409010" /></a><br /><br /><span style="font-weight: bold;">4. Breezi</span> (<a href="http://breezi.com/">http://breezi.com/</a>)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTCILxbt_8e2vvpQ4AOEDN5oDAKvYf1rRCn5lagechh3KykjyrgNEav6kd0UgSYV7_Ip4ZUhqmQqBdDG9XxSEOJmjupDIg7tlFM6bzz6HDQqvK5VLj8JpnXq849_e_ZBQuEGqD/s1600/breezi2.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 210px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTCILxbt_8e2vvpQ4AOEDN5oDAKvYf1rRCn5lagechh3KykjyrgNEav6kd0UgSYV7_Ip4ZUhqmQqBdDG9XxSEOJmjupDIg7tlFM6bzz6HDQqvK5VLj8JpnXq849_e_ZBQuEGqD/s320/breezi2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5471557608110443570" /></a><br /><br /><br /><span style="font-weight: bold;">5. Change Given</span> (<a href="http://www.changegiven.com/">http://www.changegiven.com/</a>)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3ImKRLF5ilEiSWSLzbBwBaGT2BriQxIVJohW0aySyfY6eAoDrWLKXi1x-MxczuBaHWQO80LsKhbZJkIbym98gRcGnqXwkESJ9IVTunKE2-RGJNPy134ZmnlwSVh6UcQhgO5j5/s1600/changegiven2.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3ImKRLF5ilEiSWSLzbBwBaGT2BriQxIVJohW0aySyfY6eAoDrWLKXi1x-MxczuBaHWQO80LsKhbZJkIbym98gRcGnqXwkESJ9IVTunKE2-RGJNPy134ZmnlwSVh6UcQhgO5j5/s320/changegiven2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5471556253993120370" /></a>Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com0tag:blogger.com,1999:blog-18455595.post-41771402207858650982010-04-07T20:56:00.003+02:002010-04-07T21:05:35.953+02:00Ubuntu Lucid Lynx CountdownSono <a href="http://www.ubuntu.com/getubuntu/countdown">ufficialmente</a> stati selezionati i quattro design per il countdown che accompagnerà il rilascio di <span style="font-weight: bold;">Ubuntu 10.04</span>.<br /><br /><a href="http://www.ubuntu.com/"><img src="http://www.ubuntu.com/files/countdown/static.png" width="180" height="150" alt="Ubuntu: For Desktops, Servers, Netbooks and in the cloud" border="0" /></a><br /><br />Sono 3 versioni javascript e un'immagine singola (sopra) per chi non può o non vuole utilizzare javascript. Il codice per inserirlo nel proprio blog è semplicissimo e riportato nella <a href="http://www.ubuntu.com/getubuntu/countdown">pagina del sito ufficiale dedicata</a>.Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com0tag:blogger.com,1999:blog-18455595.post-48139337191739992842010-04-05T20:52:00.003+02:002010-04-05T21:13:46.710+02:00L'Aquila - 1 anno dopoStasera alle ore 24:00 partirà il corteo dalla Fontana Luminosa che arriverà in Piazza Duomo alle ormai dannatamente famose 3:32 per ricordare le vittime del terremoto, e per riunire nuovamente insieme chi lo ha vissuto.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://profile.ak.fbcdn.net/v227/44/17/n1428675917_5680.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 281px;" src="http://profile.ak.fbcdn.net/v227/44/17/n1428675917_5680.jpg" border="0" alt="" /></a>Lorenzo Sfarra (lrnzsfr)http://www.blogger.com/profile/06761614489735639733noreply@blogger.com0