2010-04-05

Condivisione dati

Uno dei problemi di chi utilizza tanti computer (intendendo con "tanti" più di due computer) è la condivisione dei dati tra gli stessi.

Avere un serverino a casa aiuta, ma devi sempre ricordarti di copiarci sopra i dati e, ancora più importante, devi ricordarti di prelevare i dati che ci hai copiato su.

Detto questo, si pone un altro problema che affligge chiunque abbia a che fare professionalmente con i computer: l'organizzazione dei dati.

L'organizzazione gerarchica arborescente (l'albero delle directory) dei normali filesystem è a dir poco inefficente. Viene incontro il fatto di non avere le lettere di unità che complicano solo la vita agli utenti Windows. Tuttavia per ora non c'è molto che si possa fare.

Quando si parla di backup si introduce un ulteriore problema: la macchina di cui si fa il backup. Incrociare i dati per cercare di evitare i duplicati è un lavoro lungo e tedioso. Praticamente nessuno lo fa volentieri (leggi come: non lo fa nessuno, nemmeno io).

La cosa più comoda sarebbe avere uno spazio "condiviso" in locale, ossia uno spazio su ciascuna macchina che si sincronizzi più o meno in tempo reale (se connesso alla rete) con le altre macchine.
Un sistema simile esiste e si chiama Dropbox.

Come si dice: «morto un papa, se ne fa un altro», si può dire «risolto un problema, ne introduciamo due».
Infatti Dropbox è un servizio limitato nella sua forma gratuita (devono pure campare), e comunque parcheggi i tuoi dati su un server remoto che si trova negli USA.

A parte questo, sarebbe carino avere qualcosa di simile in un ambiente limitato quale la rete di casa, e con spazio illimitato (mi compero un HDD più capiente e posso moltiplicare la capacità del backup).

Un sistema di questo tipo è tecnicamente semplice. Delicato nella fase di progetto, ma semplice nella realizzazione. Un po' per necessità, un po' per diletto, sto provando a farmene uno io in casa.

Come scelte architetturali, ho optato per l'uso di Python.
Lato server (Debian) lavoro con Django e Sqlite3.
Lato client (Ubuntu) lavoro con Python e le sue (infinite) librerie.

Eventualmente metterò in pista anche un client per Windows sempre in Python.

Perché queste scelte?
Intanto per la ricchezza delle librerie già presenti. Non mi va di concentrarmi sul protocollo HTTP, o sull'implementazione delle hash.
Ho già tutte le librerie di cui ho bisogno e anche di più.

Come client il fatto di lavorare in Python mi permette di avere un unico client che giri quasi ovunque. Mi preoccuperò dei vari aspetti delle sfumature dei sistemi operativi se e quando ne avrò bisogno.

Django è un ambiente per lo sviluppo di applicazioni web molto buono e completo, pur essendo solo alla versione 1.1, e mi permette di lavorare concentrandomi sul codice.

Python può essere programmato con diversi paradigmi. Personalmente preferisco lavorare con linguaggi funzionali, ma per la maggior parte delle cose va più che bene.

Se e quando il progetto vedrà la luce in una versione 0.1 alfa, deciderò se pubblicarlo. Dopo una giornata sono al 20% del lavoro sul server.