giovedì 6 settembre 2012

Sincronizzare file tra Google Drive e Dropbox con hard link? E perché mai?

Coworking in the cloud...

Perché mai dovrei avere la necessità di sincronizzare gli stessi file tra due servizi cloud differenti? Da anni sono felice possessore di un account free Dropbox, che dai miseri 2GB è diventato di 21GB grazie ai referee e ad altre promozioni acchiappate al volo. Da un po' però uso sempre più Google Drive per scrivere e far di conto, e soprattutto editing condiviso (vuoi mettere la possibilità di discutere con gli altri coautori direttamente online?), mentre Dropbox non è adatto al versioning di documenti.


Pensateci. Per modificare un file, prima dovete mandare una email per avvisare gli altri in modo tale che non lo aprano contemporaneamente. Poi dovete lavorare con un software DTP desktop, con i relativi problemi di non piena compatibilità in termini di formattazione testo e formato dati tra i vari pacchetti. Insomma, una gran perdita di tempo e troppi rischi di duplicazione e perdita di informazioni.

Qualche giorno fa mi sono unito ad un gruppo di persone per un lavoro già iniziato, e durante la telco su Skype ho cominciato a prendere appunti su Google Drive. Al termine della chiacchierata dico "ragazzi, ora vi mando il link a un documento online, così possiamo lavorarci meglio a più mani". Loro ovviamente avevano già creato una cartella condivisa su Dropbox e mi hanno chiesto di metterci dentro il file. Non mi andava di insistere, e inizialmente mi sono rassegnato, ho scaricato il file in formato .doc e l'ho copiato nella cartella.

Poi mi son detto: non mi arrendo, voglio trovare un modo per poter - almeno io - modificare i file sui quali lavorare via web in Google Drive e mantenerli sincronizzati con DB. Tempo fa mi ero imbattuto in cloudHQ, un servizio a pagamento per sincronizzare svariati servizi cloud tra i quali proprio Drive e DB. Purtroppo però i piani sono tutti a pagamento, li si può provare per 15 giorni, dopodiché verranno declassati a un non ben precisato piano free. Scartato.

Poi ho trovato syncdocs, un software a pagamento che però non mi ha convinto molto per mancanza di chiarezza sulla eventuale versione trial. Escluso anche questo.

Infine ho pensato di usare Wappwolf, un servizio molto potente che consente di effettuare svariate operazioni tra diversi servizi cloud, ma le soluzioni individuate (upload da un servizio all'altro) mi sono sembrate un po' macchinose. E ovviamente il fantastico Otixo, ancora un altro servizio web che fornisce strumenti di coworking e consente di gestire in maniera integrata i servizi cloud, permettendo di spostare elementi da uno all'altro, ma che non ne contempla la sincronizzazione incrociata.



La soluzione per sincronizzare Google Drive e Dropbox

Poi la lampadina si è accesa, e ho ripescato dalla memoria (che risiede per gran parte su Delicious) un vecchio articolo su How-To-Geek che parlava di symlink e che sapevo mi sarebbe tornato utile prima o poi. I link simbolici (o symlink appunto) sono arcinoti a chi usa soprattutto Linux e MacOS. Ne esistono essenzialmente di tue tipi: i soft link, ovvero semplici scorciatoie a file e cartelle come i "collegamenti" in Windows, e gli hard link, vere e proprie copie di file e cartelle di fatto sincronizzate con gli "originali".

I symlink vengono gestiti tramite linea di comando, ma grazie a Link Shell Extension (che in realtà li denomina HardLink) è possibile integrare i comandi di creazione e gestione direttamente nel menu contestuale di Esplora Risorse di Windows. Prima di LSE è necessario installare MS Visual C++ 2005, trovate entrambi gli installer qui, mentre la descrizione dei tipi di HardLink e delle loro modalità d'uso sia sul sito dello sviluppatore che brevemente in italiano qui.

Di seguito vi spiegherò come ho utilizzato LSE per sincronizzare cartelle e file tra Google Drive e Dropbox usando le Junction, un particolare tipo di HardLink, ma vi raccomando vivamente di approfondire tutte le altre tipologie sul sito dello sviluppatore.

Partiamo dal concetto che non è possibile creare una sincronizzazione diretta tra le cartelle Dropbox e Google Drive sul nostro computer perché - se ci fate caso - nella cartella di GD quelli che sembrano dei file con estensione .gdoc sono in realtà dei link ai documenti che risiedono su web. Quando difatti facciamo doppio clic su di essi viene aperta una finestra del browser che ci consente poi di editarli.

I documenti nella cartella desktop di Google Drive sono solo dei link...

Esiste però insyncun fantastico software attualmente free in beta, che supera questo problema creando fisicamente una cartella sul nostro computer con tutti i file sincronizzati del nostro account Google Drive, che potremo dunque modificare con qualunque software desktop.

...mentre gli stessi in quella di insync sono veri e propri file

La sincronizzazione tra una cartella o i singoli file che risiedono nella cartella condivisa su Dropbox con i collaboratori e quella sul mio account Google Drive viene realizzata mediante la creazione di Junction, uno specifico tipo di HardLink. E' molto semplice, vediamo come.

Innanzitutto clic tasto destro del mouse sulla cartella presente in Dropbox che voglio sincronizzare e scelgo la voce "Pick link source". Verrà copiato nella clipboard il percorso agli elementi.


Successivamente clic tasto destro sulla cartella insync di Google Drive (attenzione, quella insync!) nella quale voglio collocare la cartella da sincronizzare e dal menu contestuale scelgo "Drop as..." -> "Junction". La directory verrà immediatamente clonata con tutto il suo contenuto.


Da questo momento le cartelle presenti rispettivamente in GD e DB rimarranno sincronizzate, tutte le modifiche, eliminazioni, creazioni e ridenominazioni di file si propagheranno in maniera bidirezionale e ognuno potrà scegliere come editare i documenti, io su Google Drive e gli altri su Dropbox.

Alcune accortezze vanno però tenute in considerazione. Se vorremo modificare i file con software desktop, dovremo farlo solo sulle copie presenti in insync e non in quelle presenti in Dropbox. In questo modo infatti saremo sicuri che a modificare il documento in un determinato momento saremo solo noi, poiché lavoreremo sulla copia di GD, non direttamente condivisa con DB. Certo, rimane il fatto che se viceversa qualcuno nel frattempo starà modificando la copia su DB, si potranno creare copie non sincronizzate. Ma questo è un problema risolvibile, perché Dropbox gestisce i conflitti di sincronizzazione creando copie del file. Il problema da affrontare sarà fare eventualmente un loro merge.

Un'ultima cosa, naturalmente possiamo impostare i medesimi HardLink anche su altre macchine sulle quali abbiamo impostato gli stessi account GD/insync e Dropbox.

Gli HardLink sono tanto affascinanti quanto pericolosi. Se parliamo di Junction per singole cartelle o Hard clone per i file, le cose filano abbastanza lisce e soddisfano le esigenze di gran parte degli utenti. Ma se cominciamo a creare HardLink tra file collocati in svariate cartelle, allora sfioriamo la metafisica, e le cose diventano molto molto intricate. Per avere un'idea date un'occhiata alla sezione "Advanced thoughts on Unrolling" o alla descrizione della DeLorean Copy (sic!) sul sito di LSE e capirete (o forse no).

Bene, penso di aver solo esposto la punta dell'iceberg degli HardLink. Se conoscete altri metodi più efficaci di sincronizzazione tra sistemi cloud, condivideteli qui... buona sincronizzazione!