progmobile organizzato
This commit is contained in:
parent
01130c6715
commit
a0dc9ab579
2 changed files with 274 additions and 0 deletions
41
anno3/progmobile/relazione.md
Normal file
41
anno3/progmobile/relazione.md
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
# Introduzione
|
||||||
|
|
||||||
|
Lo streaming musicale è una pratica sempre più comune.
|
||||||
|
Un numero sempre maggiore di persone si iscrive a servizi come Spotify e Apple Music per poter ascoltare i propri artisti preferiti in qualunque situazione.
|
||||||
|
Questi servizi sono in genere supportati da abbonamenti o pubblicità.
|
||||||
|
|
||||||
|
Queste piattaforme, nonostante abbiano raggiunto una grande diffusione, sono molto criticate dagli appassionati, dai critici di musica e dagli artisti stessi.
|
||||||
|
|
||||||
|
Le critiche più diffuse sono le seguenti:
|
||||||
|
* bassissima qualità di riproduzione: i file audio inviati in streaming da Spotify sono in formato mp3 128kpbs, 192kbps per gli utenti premium. Inoltre Spotify [mente sull'encoding dei dati inviati](https://community.spotify.com/t5/iOS-iPhone-iPad/Spotify-Premium-sound-quality-issues-320-kbps-quot-equivalent/td-p/857381).
|
||||||
|
* censura: entrambe le piattaforme praticano la censura, sia a [fini](https://www.theverge.com/2019/4/12/18305087/congress-apple-criticism-china-communist-tiananmen-pro-democracy) [politici](https://www.breitbart.com/tech/2015/11/13/spotifys-political-censorship-should-worry-us-all/) che per motivi [puritani](https://www.reddit.com/r/spotify/comments/1znw32/why_the_fuck_are_all_the_songs_getting_censored/), non permettendo agli utenti di disabilitare il filtro per la [censura](https://discussions.apple.com/thread/7105598).
|
||||||
|
* Catalogazione imprecisa: Spotify ed Apple Music offrono nella maggior parte dei casi una sola versione di ogni disco. Inoltre se l'utente carica un mastering differente di un brano già esistente nel loro database, lo scartano.
|
||||||
|
* Assenza di artisti di nicchia: i database di queste due grandi piattaforme, oltre ad essere prive di tutta la musica non distribuita da etichette riconosciute, offrono uno scarso catalogo per generi meno [mainstream](https://www.hypebot.com/hypebot/2018/05/why-spotify-may-actually-kill-jazz-soul.html). Ne sono un'esempio i brani di musica classica, che [sono solo l'1% del totale](https://news.allaboutjazz.com/how-spotifys-continued-expansion-is-killing-niche-music-genres).
|
||||||
|
* Pubblicazioni di falsi dati per motivi di PR: [Spotify ha mentito in varie occasioni riguardo al suo catalogo](https://www.theguardian.com/technology/2017/jul/13/are-spotifys-fake-artists-any-good).
|
||||||
|
* DRM: il Digital Rights Management è una tecnologia che limita le possibilità di riproduzione del file su dispositivi non autorizzati
|
||||||
|
* Mancata retribuzione agli artisti: Spotify ed Apple Music obbligano gli artisti a fare contratti con delle case discografiche per poter essere pubblicati nella loro piattaforma. Inoltre i compensi finali sono estramemente limitati e per questo molti artisti [rifiutano](https://time.com/3554468/why-taylor-swift-spotify/) di pubblicare la [loro](https://www.theguardian.com/technology/2013/jul/29/spotify-vs-musicians-streaming-royalties) [musica](https://www.bbc.com/news/newsbeat-43240886).
|
||||||
|
|
||||||
|
La nostra app si propone come un'alternativa per appassionati di musica e collezionisti, che non vogliono rinunciare allo streaming seppur continuando ad usufruire della propria collezione musicale di brani di nicchia ed in alta definizione, scaricati da piattaforme come Bandcamp o "rippati" dai CD audio.
|
||||||
|
|
||||||
|
Il nome, Apollon, è un omaggio alla divinità greca del sole e della musica.
|
||||||
|
|
||||||
|
# Specifiche generali dell'applicazione
|
||||||
|
|
||||||
|
L'applicazione avrà come funzionalità principale quella di riprodurre la collezione musicale personale di ogni singolo utente.
|
||||||
|
Lo streaming è permesso in tre preset di qualità, alto, medio e basso.
|
||||||
|
L'applicazione offre funzionalità di ricerca e la possibilità di creare playlists.
|
||||||
|
L'app all'avvio si connetterà ad un server, programmato con le stesse tecnologie e pattern dell'applicazione, gestito da ogni utente. Una spiegazione più ampia del server è offerta in appendice. Basti notare che il server offre la possibilità di gestire più utenti, autenticati tramite nickname e password.
|
||||||
|
|
||||||
|
# Alternative su play store
|
||||||
|
Oltre alle piattaforme come Spotify e Apple Music che offrono lo streaming musicale ma con gli svantaggi di cui sopra,
|
||||||
|
vi sono solamente due alternative per chi vuole usufruire dello streaming della propria collezione musicale.
|
||||||
|
La prima è subsonic, supportato da [varie](https://f-droid.org/en/packages/org.moire.ultrasonic/) [applicazioni](https://play.google.com/store/apps/details?id=net.sourceforge.subsonic.androidapp) ma che non supporta il database più diffuso in ambito audiofilo di [mpd](https://www.musicpd.org/) e non permette di fare seek della traccia audio.
|
||||||
|
La seconda alternativa è il già citato mpd, che offre una funzione di streaming originariamente pensato per le webradio. [Vi](https://f-droid.org/en/packages/com.namelessdev.mpdroid) [sono](https://f-droid.org/en/packages/org.gateshipone.malp) [app](https://play.google.com/store/apps/details?id=net.prezz.mpr) che supportano un buon numero di features per mpd ma non permettono di creare playlists o di gestire più utenti. La maggiore limitazione di mpd è che permette lo streaming di un solo brano alla volta qualsiasi sia il numero di ascoltatori.
|
||||||
|
|
||||||
|
# Benefici dell'applicazione
|
||||||
|
|
||||||
|
La comunità di audiofili con un particolare interesse per le tecnologie ha deciso da anni che lo standard per i sistemi di riproduzione di musica digitali sono costituiti da sistemi Linux con kernel real time e MPD come riproduttore.
|
||||||
|
La nostra applicazione ha come interesse primario quello di attrarre questa comunità permettendo da una parte l'integrazione con le tecnologie già in uso (MPD e Linux), dall'altra ampio margine di controllo sulla riproduzione dei file e la gestione della libreria.
|
||||||
|
Gli utenti possono condividere la loro vasta libreria musicale con più utenti e fare streaming dei propri file audio in diversi formati in base alle esigenze e alla banda disponibile.
|
||||||
|
Il catalogo musicale è nel pieno controllo dell'utente che andrà a gestirlo con gli strumenti che già utilizzava.
|
||||||
|
Il server con il quale l'applicazione comunica supporta la lettura dei metadati dei file e del database di MPD.
|
233
anno3/progmobile/relazione_ferra.txt
Normal file
233
anno3/progmobile/relazione_ferra.txt
Normal file
|
@ -0,0 +1,233 @@
|
||||||
|
Programmazione Dispositivi Mobili
|
||||||
|
|
||||||
|
Università degli Studi di Torino
|
||||||
|
Dipartimento di Informatica
|
||||||
|
|
||||||
|
Relazione NewsVoF
|
||||||
|
Anno Accademico 2017/2018
|
||||||
|
Studenti:
|
||||||
|
|
||||||
|
Matteo Marsala
|
||||||
|
Francesco Ferraris
|
||||||
|
|
||||||
|
1
|
||||||
|
|
||||||
|
Introduzione:
|
||||||
|
|
||||||
|
Da svariati anni, il web è afflitto da un fenomeno spaventoso: le Fake News.
|
||||||
|
Gli studi sperimentali nell’ambito delle bufale online sono numerosi, ma
|
||||||
|
sono presentati agli utenti con eventi organizzati, dentro laboratori in cui le
|
||||||
|
persone forniscono i propri dati al fine di uno studio campionato. Da qui
|
||||||
|
nasce l’idea: creare un’applicazione apposita che permetta di acquisire dati
|
||||||
|
da studiare e allo stesso tempo far sı̀ che l’utente si diverta e sia invogliato
|
||||||
|
a usare l’applicazione, nonchè ad informarsi sulle notizie che popolano il web.
|
||||||
|
I dati che si riceveranno potranno poi essere usati per costruire vari esperimenti, su argomenti noti come la Social Influence e di come sia capace di
|
||||||
|
generare un pensiero su un fatto di cui non si abbia una conoscenza completa,
|
||||||
|
oppure argomenti come il Backfire Effect, che non ci permette di cambiare le
|
||||||
|
nostre convizioni, anche se errate.
|
||||||
|
Tali esperimenti potranno poi essere utilizzati in futuro per un obbiettivo
|
||||||
|
sociale più ampio, come la rimozione delle bufale dal web.
|
||||||
|
Ovviamente, oltre al fine principale dell’applicazione e a quello di rispettare
|
||||||
|
le specifiche accademiche, si vuole costruire qualcosa che abbia come scopo
|
||||||
|
finale quello di presentare un’app interessante, utile, divertente e che non
|
||||||
|
occupi spazio inutile sulla memoria del proprio device.
|
||||||
|
|
||||||
|
2
|
||||||
|
|
||||||
|
Specifiche generali dell’applicazione:
|
||||||
|
|
||||||
|
L’applicazione avrà come funzionalità principale quella di permettere agli
|
||||||
|
utenti di valutare le notizie da noi manipolate tramite i lettori RSS. Per
|
||||||
|
far questo, bisognerà effettuare il log-in.
|
||||||
|
Nel caso in cui non si voglia creare il proprio account, si potranno comunque leggere le notizie ma, in ogni caso, non si potranno valutare.
|
||||||
|
Saranno presenti anche altre funzionalità, non completamente utili per il
|
||||||
|
nostro scopo, ma formative dal punto di vista della Programmazione Mobile. Sarà quindi possibile cambiare i propri dati del profilo, accedere alla
|
||||||
|
classifica globale, contattare con una mail i creatori dell’applicazione, leggere
|
||||||
|
1
|
||||||
|
|
||||||
|
una guida introduttiva e impostare le opzioni preferenziali dell’applicazione.
|
||||||
|
Gli amministratori potranno anche accedere ad una pagina privata che riassume i dati degli utenti che hanno votato una determinata notizia, ricercare
|
||||||
|
utenti o notizie a seconda di una parola chiave o di una caratteristica, e cosı̀
|
||||||
|
via.
|
||||||
|
|
||||||
|
2.1
|
||||||
|
|
||||||
|
Situazione del PlayStore:
|
||||||
|
|
||||||
|
Attualmente sul Play Store non esiste nulla di simile, in quanto NewsVoF
|
||||||
|
è un’applicazione di nicchia usata per gli studi sperimentali in ambito accademico, non commerciale.
|
||||||
|
Tuttavia, è presente un’applicazione (chiamata Fighting Fake News)
|
||||||
|
che mostra liste di bufale dando la possibilità agli utenti di affermare di aver
|
||||||
|
letto tale notizia. Oltre a ciò, esiste anche Hoaxy, un motore di ricerca per
|
||||||
|
le fake news.
|
||||||
|
Inoltre, esisteva un sito creato per lo stesso fine, ma non collegato ad
|
||||||
|
applicazioni Android. Per questo motivo abbiamo deciso di ampliare i canali
|
||||||
|
con cui raggiungere l’utente, in modo da aver una maggior mole di dati su
|
||||||
|
cui lavorare.
|
||||||
|
|
||||||
|
2.2
|
||||||
|
|
||||||
|
Benefici dell’applicazione:
|
||||||
|
|
||||||
|
L’esistenza di un’applicazione scaricabile da Play Store è già un vantaggio
|
||||||
|
in sè, in quanto non esistono piattaforme accademiche mobile simili. Questo
|
||||||
|
rende possibile la reperibilità di più dati, in quanto le persone potranno effettuare le proprie scelte da dispositivo mobile e non solamente da PC.
|
||||||
|
Inoltre, tale applicazione andrà a colmare alcune lacune presenti nel sito:
|
||||||
|
grazie al login utente, sarà possibile catalogare i voti anche secondo le caratteristiche degli utenti, quali età, sesso, stato di residenza, ecc. Si potranno
|
||||||
|
inserire sempre più caratteristiche a seconda del tipo di dati che si vogliono
|
||||||
|
studiare.
|
||||||
|
Gli utenti saranno invogliati a usare l’applicazione grazie alla classifica
|
||||||
|
delle risposte: chi avrà giudicato le notizie nel modo corretto, avrà degli effetti grafici sul suo nome, visibile nella classifica pubblica e la gloria della
|
||||||
|
vittoria.
|
||||||
|
|
||||||
|
2
|
||||||
|
|
||||||
|
In futuro, sarà possibile poi implementare un processo di gamification più
|
||||||
|
ampio, in modo da invogliare sempre di più gli utenti a usare l’applicazione.
|
||||||
|
|
||||||
|
3
|
||||||
|
|
||||||
|
Implementazione e funzionalità:
|
||||||
|
|
||||||
|
3.1
|
||||||
|
|
||||||
|
Schema di navigazione di base:
|
||||||
|
|
||||||
|
L’activity principale (MainActivity) fornirà da subito l’elenco delle notizie
|
||||||
|
da leggere. Come spiegato dalla guida iniziale (visibile solo al primo accesso
|
||||||
|
all’applicazione), i titoli delle notizie saranno rossi o verdi, per indicare se la
|
||||||
|
maggior parte degli utenti pensa che la notizia sia vera o falsa. Questo ci
|
||||||
|
servirà, in futuro, per analizzare i dati relativi alla social influence.
|
||||||
|
Nel caso in cui l’utente decida di effettuare il login, le notizie mostreranno
|
||||||
|
l’ora in cui sono state caricate e potranno essere votate, in modo che il voto
|
||||||
|
sia salvato nei database. L’Actionbar presenta i pulsati per tornare alla
|
||||||
|
home, per effettuare il login o per accedere al menu di navigazione. Da qui si
|
||||||
|
potranno raggiungere altri Fragment, con contenuto diverso e appropriato:
|
||||||
|
• Profilo: Questa pagina sarà disponibile solo per gli utenti loggati,
|
||||||
|
che avranno quindi fornito i propri dati. Tutti avranno la possibilità
|
||||||
|
di essere modificati tramite un semplice click. Sarà inoltre possibile
|
||||||
|
cambiare la foto personale, salvata tramite SharedPreferences e non su
|
||||||
|
database;
|
||||||
|
• Classifica: Questa activity mostra una tabella con i giocatori che si
|
||||||
|
sono posizionati in classifica votando almeno una notizia. Vi sarà anche mostrata la propria percentuale, in modo da incentivare gli utenti
|
||||||
|
a valutare più news per farla salire. Il numero di voti generali totali
|
||||||
|
sarà presente su ogni record.
|
||||||
|
Inoltre, questo Fragment dispone di uno spinner, utile per cercare i
|
||||||
|
votanti tramite una loro caratteristica specifica (in questa release sono
|
||||||
|
disponibili ricerca per città e lavoro);
|
||||||
|
• Contatti: Questo Fragment è stato creato per implementare l’invio di
|
||||||
|
mail tramite applicazione esterna.
|
||||||
|
|
||||||
|
3
|
||||||
|
|
||||||
|
• Login/Logout: Fragment necessario per effettuare il log-in. Una volta
|
||||||
|
effettuata quest’azione, verrano sbloccate alcune funzionalità, come la
|
||||||
|
pagina profilo o la possibilità di valutare le notizie. Una volta loggati
|
||||||
|
sarà possibile effettuare il Logout.
|
||||||
|
Inoltre, dalla pagina di login sarà possibile accedere alla pagina di
|
||||||
|
creazione del proprio account. Saranno richieste una Email, un Username, e una Password.
|
||||||
|
Sarà anche presente un checkbox, per il consenso alla condivisione dei
|
||||||
|
dati personali e per le norme di utilizzo.
|
||||||
|
• Guida: Questo fragment non è altro che un riassunto di ciò che l’utente
|
||||||
|
ha letto al suo primo login. Ciò è stato pensato poichè solitamente le
|
||||||
|
applicazioni rimangono inusate per parecchio tempo, e in questo caso
|
||||||
|
le funzionalità principali vengono dimenticate.
|
||||||
|
• Amministrazione: l’idea di questa pagina è puramente tecnica: solo
|
||||||
|
l’amministratore la vedrà e potrà accedervi, usufruendo di alcune funzionalità, come la possibilità di vedere gli utenti iscritti, quella di promuoverli ad amministratore o visualizzare gli utenti che sono già di
|
||||||
|
massimo grado e quindi che potranno vedere quella pagina.
|
||||||
|
Vi è inoltre una Search Bar, con cui sarà possibile ricercare istantaneamente le notizie per parole chiave, gli utenti per caratteristica
|
||||||
|
oppure selezionare una delle azioni disponibili nello spinner.
|
||||||
|
Questa pagina potrebbe servire per un infinità di cose che però non
|
||||||
|
sono state implementate, ma sicuramente per un’applicazione richiesta
|
||||||
|
da un cliente potrebbero essere aggiunte: da questo pensiero è nata
|
||||||
|
l’idea di quest’activity.
|
||||||
|
|
||||||
|
3.2
|
||||||
|
|
||||||
|
Motivazione delle scelte:
|
||||||
|
|
||||||
|
La scelta di utilizzare un Drawable Layout per costruire il menu è stata
|
||||||
|
fatta per permettere all’utente di non dover faticare per fare l’azione desiderata, prevedendo in anticipo quale sarà il risultato di ogni sua mossa. Tutto
|
||||||
|
4
|
||||||
|
|
||||||
|
questo è stato ottimizzato dai Fragment, che migliorano l’user experience e
|
||||||
|
diminuiscono la complessità temporale e spaziale dell’applicazione. Inoltre,
|
||||||
|
anche la parte grafica sarà semplice ed elegante, per non disorientare l’utente
|
||||||
|
con aspetti inutili e non necessari.
|
||||||
|
Passando allo storage, Il nostro Database è formato da 3 tabelle finali:
|
||||||
|
Users, News e Vote. La tabella users ha come attributi l’username, la password, il ruolo (Amministratore o utente, alla creazione sempre utente), la
|
||||||
|
percentuale e il nome. La tabella news ha come attributi il titolo e il valore
|
||||||
|
di verità. La tabella vote ha come attributi il voto, l’username e il titolo.
|
||||||
|
Username e titolo sono le chiavi private delle precedenti tabelle, formando
|
||||||
|
cosı̀ una relazione ternaria. La chiave primaria della tabella vote è quindi
|
||||||
|
formata dalla chiave primaria della tabella degli utenti, più la chiave primaria
|
||||||
|
della tabella delle notizie.
|
||||||
|
Questo database non è costruito con il classico modello Java ma è Online, in modo da avere i dati condivisi tra tutti gli utenti su ogni device. Le
|
||||||
|
richieste HTTP al db vengono fatte con Volley, libreria che rende le connessioni con Android facili e soprattutto veloci.
|
||||||
|
Infine, è necessario specificare quali pattern sono stati utilizzati all’interno
|
||||||
|
dell’applicazione, al fine di capire meglio l’architettura usata:
|
||||||
|
• Singleton: Serve a garantire che venga creata una e una sola istanza,
|
||||||
|
fornendo un punto di accesso globale ad essa. In questo caso, l’istanza
|
||||||
|
identifica un gestore delle richieste al web server che accede al database
|
||||||
|
nel quale sono salvati i dati;
|
||||||
|
• Observer-Observable: Viene usato per segnalare la ricezione dei
|
||||||
|
messaggi dal database. Infatti, gli Observers, verranno avvertiti quando
|
||||||
|
ci sarà un cambiamento, in modo che possano gestire la propria interfaccia (es. classifica, amministrazione, ecc);
|
||||||
|
|
||||||
|
4
|
||||||
|
|
||||||
|
Autovalutazione e testing dell’applicazione:
|
||||||
|
|
||||||
|
La valutazione dell’applicazione è stata fatta con un introspezione: sono stati
|
||||||
|
scelti svariati utenti, tra cui amici, familiari e colleghi per vedere cosa non
|
||||||
|
capivano, cosa mancava o se ci fosse qualcosa di poco chiaro. Le tipologie di
|
||||||
|
5
|
||||||
|
|
||||||
|
utente sono state scelte appositamente: l’intero gruppo di testing era infatti
|
||||||
|
composto da persone esperte nell’arte della programmazione mobile e da altri
|
||||||
|
che erano in difficoltà a mettere il proprio cellulare in modalità silenziosa.
|
||||||
|
In molti casi, questo tipo di analisi è stato utile e ha dato alcune idee per
|
||||||
|
l’applicazione (alcune implementate, altre no).
|
||||||
|
Inoltre, oltre ad un numero cospicuo di funzioni e ad un’efficacia perfetta, un’applicazione deve poter garantire una buona resistenza ai malfunzionamenti sotto ogni condizione di utilizzo. Per poter garantire questa affidabilità, è stato necessario pianificare un’attenta strategia di testing, mirata
|
||||||
|
all’automatizzazione.
|
||||||
|
Per i motivi sopra elencati, sono stati effettuati anche test tecnici con le
|
||||||
|
quali sono state controllate la maggior parte delle funzionalità principali.
|
||||||
|
Dato che la fase di testing deve poter trovare la propria collocazione nel
|
||||||
|
processo che conduce dall’idea iniziale alla distribuzione al pubblico, è stato
|
||||||
|
deciso di effettuarlo in modo parallelo allo sviluppo, utilizzando la filosofia di
|
||||||
|
programmazione detta Test Driven Development, in modo da permettere
|
||||||
|
al testing di guidare lo sviluppo, cosı̀ che l’obbiettivo primario del codice sia
|
||||||
|
quello di superare i test.
|
||||||
|
Tutto questo ha portato a dei grossi vantaggi, poichè il codice è sempre
|
||||||
|
stato verificato su più valori (minimizzando quindi la possibilità di errore) e
|
||||||
|
i test sono ripetibili via via che la progettazione avanza.
|
||||||
|
Passando alla praticità di quanto detto, i test sviluppati sono di due tipi:
|
||||||
|
• I Test Unitari, che si occupano di testare una singola funzionalità o
|
||||||
|
classe, valutandone il lavoro isolatamente e sviluppati grazie alla libreria JUnit4.
|
||||||
|
• Gli Integration Test, che verificano l’azione congiunta di più elementi, sviluppati grazie ad Espresso. Questo framework creato da
|
||||||
|
Google, è stato ideato per testare le interfacce grafiche, ed essendo
|
||||||
|
molto elastico ha preso piede tra gli sviluppatori android, motivo per
|
||||||
|
cui è diventato parte dell’Android Testing Support Library.
|
||||||
|
|
||||||
|
6
|
||||||
|
|
||||||
|
Inoltre, dopo un breve studio, Espresso offre delle potenzialità altissime:
|
||||||
|
è possibile infatti simulare l’interazione con una view o oggetto, chiamando il metodo onView(), o utilizzare gli elementi integrati in un
|
||||||
|
AdapterView, con il metodo OnData().
|
||||||
|
Tuttavia, è necessario utilizzare il metodo perform() per effettuare l’
|
||||||
|
azione vera e propria.
|
||||||
|
|
||||||
|
7
|
||||||
|
|
||||||
|
In conclusione, questo progetto ha portato ad imparare a lavorare con
|
||||||
|
i dispositivi mobili, lavorando inoltre su un’applicazione che sarà utile
|
||||||
|
per la nostra tesi di laurea e, con un po’ di fortuna, anche dopo. Proprio
|
||||||
|
per questo motivo, tutto il codice è strutturato in maniera modulare, in
|
||||||
|
modo che in futuro si possa rispondere con facilità all’implementazione
|
||||||
|
di funzionalità aggiuntive. Inoltre, i metodi più importanti presentano una documentazione scritta secondo gli standard dei JavaDoc,
|
||||||
|
in modo da minimizzare il tempo perso a rileggere il codice per capirlo
|
||||||
|
nella sulla interezza.
|
||||||
|
|
||||||
|
8
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue