Archivi per MrModd

Come sincronizzare due cartelle su Linux

Di recente ho dovuto trovare un modo per effettuare il mio solito backup attraverso Linux.

Fin’ora ho sempre usato questo comodo programma per Windows, ma la mia conversione a Linux ha reso il backup settimanale un’impresa lunga e noiosa. Ho così deciso di trovare una soluzione per Linux che facesse lo stesso lavoro (se non meglio :P).

L’idea è stata quella di fare un backup incrementale di una cartella locale su una cartella remota preservando gli attributi, la data di creazione e la data di modifica di ogni file e preservando la struttura ad albero della cartella. La risposta è stata rsync, un potentissimo programma disponibile tra i pacchetti di qualunque distribuzione che consente di sincronizzare due posizioni del filesystem locale oppure una cartella del sistema e una presente in un altro computer attraverso una connessione ssh.

Partendo da degli script bash trovati nel wiki di Arch ho realizzato un breve codice (non più disponibile) che consente di effettuare un backup di una cartella. Lo script include anche un automatismo che monta un’eventuale periferica esterna (o anche una cartella Samba) e la smonta a processo completato oppure alla ricezione di un segnale di interruzione (ad esempio CTRL+C).
Come sincronizzare due cartelle su Linux prosegui la lettura »

Breve digressione sulla differenza tra symlink e hard link

In questo articolo voglio far luce su una caratteristica peculiare di sistemi Unix based, che ho riscontrato anche negli ultimi due sistemi operativi di casa Microsoft (anche se implementati malissimo :P). Sto parlando dei collegamenti simbolici e degli hard link.

Prima di poter chiarire la differenza tra le due tipologie di collegamenti è bene riportare alla mente il concetto di puntatore in informatica.

Un puntatore è un valore che rappresenta una locazione di memoria. Utilizzando un’analogia pratica è come fornire ad un corriere espresso l’indirizzo al quale egli deve consegnare un pacco. Il pacco rappresenta il dato che deve essere salvato in RAM, mentre l’indirizzo è la posizione all’interno della memoria dove questo verrà collocato. I filesystem vantano una tecnica simile ai puntatori, che prende il  nome di hard link, per permettere di ripescare un determinato file dal disco.

Un hard link non è altro che l’indirizzo fisico di un file presente sul disco. Quando dal window manager noi facciamo doppio click su un documento, in realtà clicchiamo  un hard link che conduce alla posizione del file.

Le potenzialità degli hard link però non si fermano qui, infatti la relazione che intercorre tra un file e il suo hard link non è biiettiva, ovvero non deve esistere necessariamente un solo hard link per ogni file. È possibile, anzi molto probabile su ambienti Unix like, che un file sia puntato da diversi hard link sparsi per l’hard disk.

Propongo un esempio per cercare di chiarire questo concetto. Digitando il comando “ls -a” in una qualsiasi cartella del disco si notano sempre all’inizio dell’elenco due cartelle speciali: “.” e “..“. Esse sono degli hard link rispettivamente alla cartella corrente e alla cartella superiore. Ammettendo che si abbia una cartella di nome Pippo dentro una cartella di nome Pluto avremo che la cartella “.” (ovvero l’hard link relativo ad essa) presente dentro Pippo punta alla stessa locazione del disco a cui punta la cartella “Pippo” (ancora una volta il suo hard link) presente dentro la cartella Pluto.

Da questo esempio (seppur abbastanza contorto, lo ammetto :P) si evince che la cartella Pippo è puntata da due hard link.

È possibile scoprire il numero di hard link posseduti da un file digitando in console il comando “ls -l“: la prima colonna dell’output rappresenta i diritti dei vari utenti sul file, la seconda colonna è un numero intero maggiore o uguale ad 1 e rappresenta il numero di hard link.

A questo punto si deduce logicamente che se si hanno diversi hard link per uno stesso file sparsi per il filesystem, cambiando il contenuto del file attraverso un hard link automaticamente cambia il contenuto su tutti gli altri collegamenti.

I symbolic link, spesso abbreviati in symlink, sono ben diversi dagli hard link, in quanto non puntano ad una posizione fisica del disco, ma al percorso (relativo o assoluto) nel filesystem che conduce al file (ad un suo hard link). Ad esempio un symlink può puntare a “/home/utente/Desktop/file.txt” o, per chi è più familiare con sistemi Microsoft, a “C:\users\utente\desktop\file.txt“.

Riprendendo l’analogia di sopra, se l’hard link rappresenta l’indirizzo di un’abitazione a cui il corriere deve consegnare il pacco, allora il symlink rappresenta le indicazioni stradali per arrivarci (es. tra 100m gira a sinistra, poi dritto per 500m, …). Se una strada cambia senso di marcia allora il corriere non potrà più arrivare a destinazione utilizzando le indicazioni fornitegli, ma potrà farlo conoscendo l’indirizzo di destinazione e avendo una buona cartografia. 🙂

Quindi, a livello pratico qual’è la differenza tra i due tipi di collegamento? Molto semplicemente se io sposto il file “/home/utente/Desktop/file.txt“, il symlink che puntava ad esso non funzionerà più, mentre continuerà a funzionare correttamente un suo eventuale hard link.

Come ultima osservazione vorrei far presente che se elimino un hard link di un file, in realtà non ho eliminato il dato fisico, a meno che esso non fosse l’ultimo. Nel momento in cui tutti gli hard link sono eliminati, il file non viene realmente cancellato (il che rende facilmente recuperabile dei dati eliminati erroneamente), ma lo spazio su disco su cui esso giace viene “flaggato” come libero. Quando il filesystem avrà bisogno di salvare un nuovo file potrà farlo benissimo sopra quella locazione.

Quando si dice Universal Serial Bus…

Dopo aver concentrato i sette anni di studio “matto e disperatissimo” in due sole settimane torno all’azione proponendo una serie di gadget tecnologici molto particolari.

Quando nel lontano 1994 Compaq, DEC, IBM, Intel, Microsoft, NEC e Nortel idearono lo standard USB (fonte Wikipedia), di sicuro non immaginavano che ciò che loro avevano definito Universal non era solo un canale di trasmissione di dati, bensì un connettore il cui utilizzo, con il tempo, sarebbe stato frenato solo dai limiti dell’immaginazione umana.

Al giorno d’oggi, è il caso di dirlo, in una porta USB del computer ci si deve aspettare di tutto; infatti al di là delle solite, noiose, periferiche come possono essere la tastiera, la stampante, l’hard disk o quant’altro, ci si può trovare attaccato anche l’oggetto più inutile che non ha la minima attinenza con il campo dell’informatica. Dalla bajour per illuminare la tastiera alla ventolina per rinfrescare l’utente nelle giornate più afose; dal carica batterie del cellulare al carica batterie delle pile Stilo.

Di seguito vi presento alcuni tra i gadget più bizzarri che possono essere alimentati dalla porta USB.

Comincerei con un accessorio ormai abbastanza popolare. Lo scalda tazza! Una piastra metallica che quando collegata al computer si scalda mantenendo caldo il contenuto della tazza che si poggia sopra di essa.

Dopo questo ci sono le batterie stilo. All’apparenza normali, ma che nascondono al loro interno una presa USB con la quale è possibile ricaricarle.

Si prosegue con la mini aspirapolvere che consente di pulire agilmente la scrivania e la tastiera.

E per concludere in bellezza c’è il forno a microonde!!! Immaginate quanto debba essere soddisfacente sentir scoppiettare una busta di popcorn in un forno attaccato al computer 😀

La lista di diavolerie elettroniche alimentate via USB che si possono trovare in giro sarebbe interminabile, ma io per il momento mi fermo qui ed intanto sorseggio un buon tè riscaldato dal mio scalda tazza USB. u.u

Conoscete altri gadget bizzarri?

Android può dividere per zero

Chuck Norris ha un nuovo nemico. Il suo nome è Android.

DroidMolta gente ha tentato per anni di effettuare una divisione per zero, con risultati disastrosi. Chi ha visto scoppiare il proprio computer sotto gli occhi, chi ha causato una BSOD su Windows e chi ha provocato un Kernel Panic. Alcune fonti fanno risalire i primi esperimenti nella Russia sovietica del 1962. Ma ora, nel 2010, questa estenuante ricerca si può dire conclusa. Chuck Norris non è più l’unico uomo ad essere capace di dividere per zero. A lui si è aggiunta la calcolatrice di Android.

Android può dividere per zero prosegui la lettura »

Il WiFi diventa libero

Risale a ieri la notizia di un cambio di direzione da parte del Consiglio dei Ministri circa le regolamentazioni delle reti WiFi pubbliche.

Locked Wireless

Dopo l’attentato dell’11 Settembre il governo italiano si mosse per garantire una maggiore sicurezza nella lotta contro il terrorismo. Tra i provvedimenti che vennero presi spiccò il famoso decreto Pisanu che, nell’articolo 6 e 7, imponeva delle restrizioni serrate ai provider che distribuivano reti senza fili accessibili a tutti. Di fatto questo, con il tempo, si è tramutato in un enorme rallentamento dello sviluppo della rete pubblica sul territorio italiano. Nella giornata di ieri il Consiglio dei Ministri si è riunito per discutere dei problemi sulla sicurezza del Paese e degli eventi atmosferici che in questi ultimi tempi hanno colpito gravemente diverse zone d’Italia.

Il ministro Maroni ha spiegato nella conferenza stampa che dall’1 Gennaio 2011 il decreto Pisanu decadrà e verrà rimpiazzato da nuovi provvedimenti che verranno elaborati entro l’arrivo dell’anno nuovo.

In realtà quindi non è detto che le nuove leggi ci permetteranno, dall’anno prossimo, di girare liberamente per la città connessi a degli hot spot pubblici, ma il governo non può ignorare la tendenza europea e mondiale in cui la connessione wireless non è affatto vista come una minaccia.

Fonte qui.

Le mele di Newton

Se Newton avesse odiato le mele forse oggi non conosceremmo la forza di gravità; la fisica classica sarebbe incompleta e noi non sapremmo che farcene di una bilancia.

Ma cosa sarebbe successo se Newton fosse vissuto ai giorni d’oggi? Io ho un’idea:

Mela di Newton

La rivolta dei filesystem

Che fosse solo il preavviso di un rovinoso declino la distruzione del filesystem del mio disco fisso di qualche tempo fa?

È difficile credere alle coincidenze quando in poco meno di due settimane accade per due volte l’unica cosa che non avresti mai ritenuto possibile. Prima la corruzione della partizione del mio hard disk e dopo, ancora più spaventoso, la corruzione del filesystem del server che ospitava questo sito. O_o

Mi suona ancora male, ma è così. A meno di quattro mesi dalla creazione del dominio mrmodd.it il server mi ha lasciato a piedi. Avrei potuto capire un attacco DoS, problemi con la dorsale, ma un filesystem corrotto??? Chissà, magari qualcuno è inciampato sul cavo della corrente. Resterà un mistero, fatto sta che al ripristino del dominio (hanno trasferito il sito su una nuova macchina) alcuni articoli erano spariti… Per fortuna che la mattina prima del disastro una vocina dentro di me mi ha spinto a fare un backup degli account di WordPress cosicché sono riuscito a preservare tutto.

Dato che ormai il danno era fatto ho deciso di farmi buttare giù tutto in modo da poter ricostruire tutto da zero senza far perdere tempo ai tecnici che intanto tentavano di salvare i dati. Così ora, dopo una giornata passata a rimettere in piedi tutto il sito, posso dire di aver concluso il recupero dei dati. Giacché c’ero ne ho approfittato per dare una svecchiata al tema ed aggiungere la chat di Disqus di cui sono estremamente soddisfatto.

Che ne pensate del nuovo tema?

Quando i programmatori falliscono

Sample codeLa gente pensa che per programmare basta semplicemente sapere come funzionano i soliti quattro blocchi condizionali: if, for, while e do while. Conosciuti questi allora puoi dire di essere un programmatore. Invece non è affatto vero! Può sembrare una cosa scontata e banale, ma per potersi reputare un “buon programmatore” non basta sapere la sintassi di un linguaggio qualsiasi di programmazione, bisogna anche avere intuito e saper pensare per algoritmi. In poche parole bisogna sapersi immedesimare in un calcolatore e non è semplice, soprattutto per chi parte come autodidatta. Per forza di cose, la logica necessaria a comprendere la soluzione di problemi semplici o complessi con gli occhi di un computer e non di un essere umano non si impara sui libri né tanto meno su internet. Purtroppo, ciò che questi ultimi insegnano, non sono altro che i mezzi necessari per far capire alla macchina cosa deve fare: ancora una volta la sintassi.

La logica si apprende sbattendo la testa su carta e penna, facendo esercizi che non serviranno mai nella vita, ma che aiutano a pensare per algoritmi. Questo è un messaggio che mi insegnò il mio professore delle superiori e che però non fu recepito dagli studenti perché richiedeva uno sforzo mentale che andava ben oltre lo studio a memoria delle pagine di un libro. La logica non si impara a memoria, si deve comprendere!

Il problema di internet è che in un corso on-line di C++ (un linguaggio a caso) non verrà mai chiesto a chi legge di scrivere l’algoritmo che fa la somma di due numeri in colonna, innanzitutto perché la prima cosa che farà il lettore sarà quella di cambiare sito, secondo perché l’algoritmo esiste già e non c’è motivo di reinventare la ruota.

Ma se non si studia sui libri e neanche su internet, allora dove si impara? La risposta più ovvia sarebbe a scuola, ma come diceva un altro mio professore usare la parola “ovvio/a” è assai pericoloso. Infatti non è per niente ovvio! Nella maggior parte dei casi, l’insegnamento dell’informatica nelle scuole si limita all’uso del pacchetto Microsoft Office o al più di Internet Explorer… O_o

Quindi c’è poco da fare, bisogna avere fortuna e sperare di trovare una persona (professore o amico che sia) che ti indichi la via giusta.

Ma perché parlo di questo? Perché per l’ennesima volta ho avuto la certezza che chi crea siti internet non è definibile come programmatore.
Tumblr di recente ha aggiornato il suo sistema di code, ma com’è giusto che sia non ha portato altro che problemi. Quando cominciano ad esserci tanti elementi in coda inizia a comparire un simpatico errore:

Tumblr Error

Questo di fatto impedisce di raggiungere gli ultimi post in coda. Premendo il tasto OK il messaggio ricompare obbligandoti a causare un’uscita forzata del browser. Il problema però non si ferma ad un semplice difetto di grafica. Ieri sera, dopo aver ucciso il processo di Firefox per liberarmi di questo odioso messaggio, ho scoperto che tutti i miei elementi in coda erano stati pubblicati contemporaneamente…

Come si può intuire il problema è dovuto ad un errore di programmazione nel javascript incorporato nella pagina, ma se su un sito come Tumblr la negligenza di certa gente può riversarsi massimo nel fastidio dell’utente, su siti più importanti come possono essere quelli delle banche potrebbe portare alla rovina di un’azienda (vabbeh forse è un po’ esagerato :D).

Per molti “programmatori” la creazione di pagine in html, php o ajax è solo un gioco, ma non bisogna dimenticare che sono pur sempre dei linguaggi interpretati da una macchina e, sebbene i browser riescano ad arginare gli errori umani correggendoli in fase di renderizzazione, a volte non riescono a capire cosa intendeva fare il web designer ed ecco che sussistono errori grafici e crash dei plugins.

Vorrei lasciarvi con una riflessione. Avete notato che tutti i siti che riportano l’icona del W3C validator in realtà non passano mai il test? Si sono comprati l’icona???

FAIL

Creazionismo secondo il Java

Studiando il Java dopo un po’ ci si accorge come tutto discenda da un’unica entità. Un’unica classe da cui derivano tutte le altre. “Un anello per domarli tutti” direbbero i fan del Signore degli Anelli. Insomma una superclasse, di nome Object, che può assumere ogni forma o dimensione, in base a come viene utilizzata.

Con un po’ di fantasia (un po’ molta, lo ammetto :D) si può reinterpretare la teoria creazionistica cristiana con l’ereditarietà dei tipi d’oggetto del Java. Sperando di non venire fulminato per questo vi propongo la mia revisione del primo capitolo della Genesi estrapolato dalla Sacra Bibbia:

(Tenete sempre a mente che in Java tutto deriva dalla superclasse Object 😉 )

Creazionismo secondo il Java prosegui la lettura »

Odissea di un N3rd

Tutto cominciò un paio di settimane fa, quando il mio fedele (o almeno così credevo) antivirus Kaspersky mi lasciò a piedi. Di punto in bianco il programma decise che internet era diventato troppo pericoloso per me e mi tagliò fuori dalla rete, impedendomi di arrivare anche solo alla home page di Google. Dopo 15-20 minuti passati invano a cercare le giuste impostazioni di Kaspersky decisi di divorziare da lui, dopo un matrimonio che durava dalla lontana versione 6 del programma, quando in Italia era ancora sconosciuto e io lo comprai direttamente dalla Russia. Quindi con una freddezza tale da congelare all’istante l’inferno lo disinstallai. Il giorno dopo misi Antivir, mio acerrimo nemico, con i suoi odiosi popup pubblicitari e i suoi aggiornamenti Always on Top che gridano “Guardami!!! Mi sto aggiornando!!! Sono un bravo antivirus!!!“.

I giorni passavano e io ero sempre più amareggiato. Circa una settimana fa decisi, più per sfizio che per altro, di installare sul mio netbook Ubuntu 10.10 RC (che poi sarebbe stata aggiornata alla release finale il 10/10/2010 alle 10:10). Discutendo con il mio caro amico Bl@ster capii che in realtà non avevo bisogno di Windows, in quanto tutte le applicazioni che mi servivano per l’università esistevano anche su Linux. Cominciai così a fare un backup dei dati più importanti prima del grande formattone quando di punto in bianco e senza un motivo apparente (e forse anche reale :D) Windows 7 si piantò. Morto. A quel punto il kernel Linux che era in me non ci vide più e con la stessa freddezza con cui avevo “ucciso” Kaspersky spensi brutalmente il computer. Attaccai al PC la pennetta che mi ero preparato con l’installer di Ubuntu 32bit e dopo svariati tentativi di azzeccare il tasto per accedere al BIOS riuscii a fare il boot da pen drive.

Da qui in poi la strada diventò tutta in discesa. Oppure no?

Odissea di un N3rd prosegui la lettura »