Sincronizzare i file con un drive esterno

Non ho mai trovato un programmino semplice e gratuito per mantenere aggiornata la copia di una directory su un disco esterno. Ci sono evoluti programmi commerciali che lo fanno, ma per una banalità del genere non voglio pagare. Ci sono i tools del sistema operativo ma richiedono troppa attenzione (no, se il file è già presente nella cartella di destinazione e ha la stessa data di ultima modifica non devi sovrascriverlo se no ci mettiamo una vita…). Ci sono ottimi tools open source, come rsync, ma che sono molto complessi e, nel caso di quest’ultimo ottimizzati per la sincronia tra due dispositivi intelligenti (2 pc, 2 server…) in modo da ridurre la banda utilizzata.

Per cui, vista la banalità della cosa, ho deciso di dedicare qualche ora a scriverne uno, invece che a provare l’ennesima cosa che non fa quello che voglio.

Requisiti che mi sono dato :

  • Sincronia unidirezionale da una cartella sorgente ad una di destinazione
  • Possibilità di scegliere se rimuovere o meno i file cancellati nella sorgente anche nella destinazione
  • Nessuna richiesta di conferma all’utente
  • Parametrizzazione da linea di comando, cosi si fa un bello script e non ci si pensa più
  • Resistenza all’errore. Se fallisce la copia di un file o l’esplorazione di una cartella si passa alla successiva

La versione molto alpha (ma che già fa tutto quello che voglio) è disponibile a questo indirizzo : https://bitbucket.org/sgalliani/mysync/downloads/20160131%20mySync.zip

le leggi fondamentali della stupidità – di Carlo M. Cipolla

“[…] Potremmo supporre che è in relazione con il basso livello culturale o col fatto che le persone non stupide hanno maggiori opportunità di avere buoni lavori. Però se analizziamo gli studenti ed i professori universitari (o i programmatori di software) la percentuale è esattamente la stessa. […]”
http://www.giovis.com/cipolla.htm

Fold

Mi ci è voluta più di qualche imprecazione per arrivare a questa implementazione :

fun Shop.getSetOfProductsOrderedByEveryCustomer(): Set<Product> {
    return customers.fold(allOrderedProducts, {
        orderedByAll, customer -> 
orderedByAll.minus( orderedByAll.filter { !customer.orderedProducts.contains(it) }) })
}

Salvo poi scoprire nelle soluzioni che esisteva il magico intersect

fun Shop.getSetOfProductsOrderedByEveryCustomer(): Set<Product> {
    // Return the set of products ordered by every customer
    return customers.fold(allOrderedProducts, {
        orderedByAll, customer ->
        orderedByAll.intersect(customer.orderedProducts)
    })
}

L’esercizio era questo : https://github.com/Kotlin/kotlin-koans/blob/master/src/ii_collections/_22_Fold_.kt

Comunque Kotlin è bellissimo.

Ransom32 Is a JavaScript-Based Ransomware That Uses Node.js to Infect Users

“Ransom32 may be the first cross-OS ransomware family. A new type of ransomware has been spotted, the first of its kind, a ransomware that uses JavaScript to infect its users, being coded on top of the NW.js platform.[…]” Un ottimo motivo per mettere node.js tra i virus riconosciuti da tutti i principali AV. Bellina anche l’idea del RaaS. Ormai è tutto as a Service.
http://news.softpedia.com/news/ransom32-is-a-javascript-based-ransomware-that-uses-node-js-to-infect-users-498342.shtml