Domande frequenti
Perché iCloud Drive non è supportato?
Perché a quanto pare non esiste nessun modo ufficiale per fare sì che una app possa accedere all'intero contenuto di iCloud Drive (può soltanto utilizzare un suo contenitore specifico). Se qualcuno che legge ne sa qualcosa di più, per favore mi contatti!
Una segnalazione per utenti esperti: esiste una libreria NPM non ufficiale che sembrerebbe essere in grado di accedere all'intero drive. Potrebbe risultare utile per chi conosce Node/JavaScript eccetera.
Sfortunatamente non posso implementare quel metodo in DeDuplicate perché:
- Prima di tutto, sarebbe totalmente inaffidabile.
- Su iOS, correrei seriamente il rischio di violare i "termini e condizioni" dell'App Store e la app potrebbe venire rimossa o, ancora peggio, il mio account da sviluppatore potrebbe essere cancellato.
- L'autore della libreria, nell'introduzione, suggerisce la possibilità che perfino l'account dell'utente (tu!) rischi di essere bannato.
Perché Google Photos non è supportato?
Perché la API di Google Photos è così limitata che è impossibile supportarlo anche solo parzialmente. Nello specifico:
- Le informazioni sui media che vengono ricevute non contengono i loro valori hash, essenziali per identificare i duplicati in una app come DeDuplicate.
- A una app non è permesso di cancellare elementi che non sono stati creati dalla medesima app, e nemmeno di spostarli (per esempio, in un nuovo album "Duplicati"). Ovviamente questa limitazione impedisce ad una app di poter fare qualsiasi cosa perché, anche se i valori hash fossero disponibili, sarebbe in grado soltanto di mostrare una lista dei duplicati senza però poi poterli eliminare.
Sfortunatamente, a giudicare dal fatto che già da diversi anni molta gente su internet ha espresso il desidero di avere queste funzioni ma Google non le ha mai implementate, possiamo dedurre che queste limitazioni sono volute e che non ci sia niente da fare.
Abbiamo capito; Google Photos è molto limitato; ma se hai proprio bisogno di cancellare i duplicati ecc., puoi sempre usare Google Takeout, che è lo strumento offerto ufficialmente da Google per scaricare i propri dati sui loro servizi.
Un utente mi ha fatto notare questa efficace soluzione alternativa che è basata su di esso e che permette di trasferire tutto su Google Drive (che è supportato da DeDuplicate) senza bisogno di dover scaricare e ricaricare niente. Puoi seguirlo precisamente o trarne soltanto ispirazione per una tua procedura.
- Apri Google Takeout per esportare tutti i tuoi media di Google Foto, selezionando Google Drive come destinazione (sono supportati anche altri servizi cloud, ma solo in Google Drive si può eseguire il prossimo pass).
- Quanto ha finito, vai dall'archivio ZIP che ne è risultato ed estrailo direttamente sul tuo drive, senza scaricarlo, usando ZIP Extractor (ricordati di cancellare lo ZIP).
- Ora che tutti i tuoi media si trovano su GDrive, puoi usare DeDuplicate regolarmente!
Questo metodo ha le sue ovvie limitazioni. Innanzitutto il tuo spazio libero sul cloud dev'essere pari almeno alle dimensioni dell'archivio ZIP (in realtà il doppio, perché temporaneamente ti serve spazio anche per ospitare i files estratti, prima di poter cancellare lo ZIP). Tutta la tua roba su Google Photos è rimasta lì dov'era; ne hai semplicemente fatto una copia di backup su Google Drive, ed è soltanto in Google Drive che ne hai eseguito la deduplicazione ed eventuali altre modifiche.
Inoltre, se vuoi cancellare tutti i tuoi contenuti da Google Photos sappi che sfortunatamente non esiste un metodo che lo esegue in automatico, bisogna farlo manualmente.
Perché Amazon Drive non è supportato?
Perché il servizio è stato deprecato:
- Le sue app per dispositivi mobili sono state rimosse dagli store alla fine di ottobre 2022;
- Non si possono più caricare nuovi files dal 31 gennaio 2023;
- È stato chiuso il 31 dicembre 2023!
Non sono proprio le condizioni ideali per supportarlo e, ad essere sincero, non ne vale proprio la pena dal momento che non esiste più.
Gli utenti di Amazon Drive, in definitiva, avrebbero più che altro bisogno di un programma per trasferire tutti i propri dati in un altro servizio cloud finché sono ancora in tempo :) Se hai familiarità con la linea di comando, c'è uno strumento chiamato “rclone” che permette di trasferire i tuoi contenuti da un servizio all'altro.
Ho delle foto duplicate ma la app non le considera tali, perché?
Perché non sono davvero dei duplicati, anche se lo sembrano ad occhio nudo! Tieni presente che questa app cerca duplicati esatti, che hanno lo stesso identico contenuto.
Due immagini possono apparire identiche ma, se per qualche ragione una delle due è stata ri-codificata, i contenuti dei due files saranno diversi! Se per esempio salvi un JPEG di nuovo come JPEG, non ottieni lo stesso file; la stessa cosa vale per gli MP3, i video... (e qualsiasi altro formato di compressione "lossy").
Tecnicamente è possibilissimo identificare anche immagini simili ma è tutto un altro paio di maniche. Per quello scopo una app avrebbe bisogno di scaricare tutti i files per poi usare qualche algoritmo per confrontarle.
La app si è bloccata o si chiude, aiuto!
A giudicare dalle statistiche, gli errori sono piuttosto rari... ma possono capitare. Come ampiamente indicato, questa app compie tutte le sue operazioni direttamente sul tuo dispositivo, senza appoggiarsi a server esterni. È proprio questa caratteristica che la rende particolarmente sensibile alla privacy ma è un aspetto che ha anche i suoi lati negativi, tra cui un certo livello di imprevedibilità a causa del fatto che...
- Le informazioni sui tuoi files che vengono scaricate devono essere conservate in memoria; teoricamente è possibile che si presenti una combinazione di fattori (per esempio scansionando un numero enorme di files mentre si ha poca memoria libera) che può mandare in crash la app.
- Se la connessione di rete è instabile la scansione può fallire, e al momento non è previsto un meccanismo particolarmente elegante per gestire questo tipo di errori: la app potrebbe rimanere bloccata sul caricamento.
Le future versioni cercheranno di avere un meccanismo di gestione degli errori molto migliore. Questa è solo la prima versione!
Quanto è veloce la app?
Nei test fatti durante lo sviluppo, abbiamo scansionato 100.000 files in meno di 10 minuti (ricorda: è il numero dei files, non la loro dimensione, che condiziona il tempo necessario per completare l'operazione). Ovviamente dipenderà anche dalla tua connessione internet.
C'è anche un altro fattore: le anteprime. Dopo la fase principale della scansione, la app prova ad ottenere un'anteprima di ogni file che ha uno o più duplicati. Tipicamente, soltanto certi tipi di file come le immagini e i video possono avere un'anteprima; ma dipende anche dal servizio cloud che stai usando in quel momento.
Le anteprime sono delle immagini di pochi KBs ma richiedono comunque il loro tempo per essere scaricate, se ce ne sono tantissime!
Perché questa app?
Perché avevo personalmente bisogno di qualcosa del genere ma non riuscivo a trovare una soluzione che soddisfacesse tutti questi requisiti:
- Nessuna limitazione durante la prova
- Nessun bisogno di registrare nuovi account
- Connessione diretta con le piattaforme cloud, senza server intermedi
- Nessuna necessità di scaricare effettivamente i files
- Versione mobile e multipiattaforma
Che me ne frega di cancellare i duplicati? Ho tantissimo spazio libero!
Anch'io: ho 1 TB di spazio cloud e mi ci sono voluti anni per arrivare a riempirlo a metà. Ma mi disturba comunque il fatto di avere migliaia di files inutili e ridondanti, e voglio sbarazzarmene.
Ho fatto questa app proprio per evitare lo sforzo disumano di farlo manualmente. Ora posso semplicemente aprire questa app ogni tanto e controllare. Certe volte troverà qualcosa e altre volte no... ma che problema c'è? Ci mette pochi minuti.
Come posso raggiungere lo stesso scopo senza una app come questa?
L'unico modo per cancellare i duplicati da un disco cloud è sempre stato quello di scaricare tutti i dati sul proprio computer (vanificando, di fatto, lo scopo del cloud) per poi utilizzare una delle tante utility, che esistono da sempre, per trovare i duplicati sul proprio hard disk. Insomma, un modo "offline", non basato sul cloud. Il problema è che ci vuole molto tempo per scaricare i dati, bisogna avere abbastanza spazio libero nel computer, e infine bisogna sincronizzare di nuovo i cambiamenti effettuati (le cancellazioni) col cloud, che nel peggiore dei casi può significare dover rifare l'upload da capo. Insomma: è un procedimento lunghissimo, tedioso e scomodo. E ovviamente non puoi farlo usando semplicemente il tuo telefono.Puoi aggiungere una certa funzione che manca?
Ci posso provare! È già successo nel passato recente. Questo progetto ovviamente non è il mio lavoro a tempo pieno quindi non posso garantire nulla ma sono assolutamente intenzionato a fare miglioramenti.Devo autorizzare la app ad accedere ai miei files?! Non mi fido!
Uno dei motivi che mi ha spinto a creare questa app è proprio la mancanza di fiducia verso altre soluzioni esistenti che, per un motivo o per l'altro, non mi convincevano. In altre parole, capisco perfettamente questo tipo di preoccupazione.
La prima cosa che la app ti chiede, quando scegli quale servizio cloud usare, è di effettuare il login col tuo account. In quel momento la piattaforma in questione ti chiede esplicitamente se vuoi concedere alla app l'autorizzazione a manipolare i tuoi files. Da una parte è normale e inevitabile (senza quelle autorizzazioni, come potrebbe fare il suo lavoro altrimenti?), dall'altra mi rendo conto che sia un po' dura da digerire.
Quindi è vero... in una certa misura, ti devi semplicemente "fidare" che la app non sia truffaldina.
Da parte mia, non potrei garantire che la app sia sicura al 100% nemmeno se pubblicassi il suo codice sorgente; chi ti assicurebbe che nella app caricata sugli store sia usato lo stesso identico codice? Inoltre, ad essere onesti, non sarei comunque intenzionato a farlo: questo progetto è iniziato come un programmino per uso personale ma alla fine ci sto lavorando da ormai due anni. Ho scritto qualche articolo su Medium per spiegare il funzionamento di alcune parti interessanti della app ma l'idea di pubblicare l'intero codice non mi va molto a genio (nonostante non sia niente di trascendentale dal punto di vista puramente tecnico).
Detto questo, bisogna anche sottolineare che la app è pubblicata sull'App Store di Apple e sul Play Store di Google, dove (a detta loro) le app vengono analizzate prima di permetterne la pubblicazione. Non significa molto ma è meglio di niente, no? Inoltre, a giudicare dalle pretese che hanno avuto per poter integrare i loro servizi nella mia app, posso presumere che Google Drive, Dropbox, OneDrive ecc. tengano sotto controllo l'uso che viene fatto delle loro API, per evitare attività sospette.
Ok, tutte queste sono chiacchiere. Mettiamola così:
Se sei un utente "pro", potresti monitorare il traffico di rete in uscita e constatare tu stesso che le uniche connessioni che vengono effettuate dalla app sono con la API del servizio in uso, più cose aggiuntive come Google Firebase per le statistiche, Sentry per la diagnostica e infine il mio server (lo stesso che ospita questo sito) per gli aggiornamenti OTA.
Due ultime considerazioni a proposito di privacy e sicurezza:
- La app riceve l'indirizzo email e l'eventuale foto del profilo relativi al tuo account ma questi dati vengono usati esclusivamente nell'interfaccia grafica per indicarti in quale account sei loggato, e non vengono mai trasmessi fuori dal tuo dispositivo. Gli indirizzi email degli utenti non vengono assolutamente raccolti in alcun modo.
- Firebase e Sentry, gli unici due servizi di terze parti utilizzati, sono configurati in modo tale da inviare esclusivamente dati anonimi, che non possono essere ricondotti all'utente e usati per tracciarlo.
Piani futuri?
È mia intenzione quella di continuare a sviluppare la app, specialmente se riesce a suscitare interesse. C'è un ampio margine di miglioramento sotto vari aspetti (in particolare l'interfaccia e la gestione degli errori) e vorrei supportare anche ulteriori servizi cloud di altre parti del mondo.
Rispetto alla primissima versione sono già stati fatti molti progressi! All'inizio la app era solo per OneDrive, ora supporta tutte le principali piattaforme.
Ma questa app non era gratuita in passato?
Di recente, ho sperimentato diversi modelli di prezzi. Dalla pubblicazione della versione iniziale, ho scoperto che Android, iOS e (più recentemente) Windows hanno le loro peculiarità in termini di acquisizione utenti e conversioni.
Il mio obiettivo iniziale era offrire questa app completamente gratis e sostenere lo sviluppo con le entrate pubblicitarie. Tuttavia, si è rivelato un po' irrealistico: i guadagni dalle pubblicità erano troppo bassi per considerare l'idea di mantenere l'app a lungo termine.
Le entrate non erano solo basse, ma anche altamente imprevedibili: il cosiddetto "eCPM" può fluttuare tanto che un mese e il mese successivo la cifra può ridursi di un terzo, senza alcun apparente motivo. È un problema noto e non del tutto inaspettato, ma dopo due anni, speravo in qualcosa di più sostanzioso. Inoltre, in passato ho avuto una brutta esperienza con la rete pubblicitaria e, in breve, ho capito che possono tagliare i rapporti con te in qualsiasi momento senza una ragione chiara. Non è saggio dipendere esclusivamente da una fonte di reddito così instabile.
Suppongo che le pubblicità funzionino meglio per giochi o app con un enorme base di utenti giornaliera, non tanto per questa.
Sono giunto alla conclusione che DeDuplicate è più una app di nicchia che le persone scoprono quando ne hanno realmente bisogno, piuttosto che un'opzione per l'utente occasionale.
A volte l'esigenza dell'app sorge all'improvviso (ed è per questo che esistono le versioni di prova), in altri casi è qualcosa che vogliono usare regolarmente (qui entra in gioco il modello di abbonamento), e altre volte preferiscono fare un pagamento una tantum e averla per sempre (il modello pagato in un'unica soluzione).
Attualmente sto valutando questi diversi modelli di prezzi, modificandoli in base al periodo e al paese dell'utente.
Una cosa di cui sono certo è questa: indipendentemente dai cambiamenti che apporterò, non lascerò indietro i precedenti acquirenti. Ad esempio, se hai acquistato la versione a pagamento dell'app (o l'acquisto in-app "No Ads"), e l'anno prossimo l'app passa a un modello di abbonamento, avrai ancora accesso illimitato all'app.
Ho già implementato diverse misure per soddisfare le esigenze dei clienti precedenti, ma gestire tutte le diverse combinazioni non è facile. Se c'è qualcosa che non va — ad esempio, l'app continua a richiederti un abbonamento nonostante tu l'abbia pagato, o continua a mostrare pubblicità quando non dovrebbe — ti prego di contattarmi e metterò le cose a posto.