Versioni Disponibili
- Desktop (Windows, Linux e MacOS)
- Mobile (Android)
Funzionalità
- L'app simula un quiz d'esame, pescando in modo casuale delle domande a risposta multipla a cui l'utente deve rispondere entro il tempo limite definito da un timer.
- Pool di 87 domande differenti, divise per argomento (elenco aggiornato al 25 gennaio 2022).
- Possibilità di scelta di argomenti specifici per le domande da includere nel quiz.
- Possibilità di personalizzare le impostazioni dell'app in modo persistente:
- Scelta di un numero specifico di domande (default: 16, selezionate casualmente).
- Modifica del tempo a disposizione per il quiz (default: 18 minuti).
- Controllo all'avvio dell'app se nella repository sono presenti nuove domande.
- Possibilità di inserimento di domande personalizzate (modificando il file Domande.txt).
Demo
Desktop
Terminazione quiz | Tempo scaduto |
Mobile
Installazione versione mobile | Terminazione quiz |
Esecuzione
Versione Desktop (Windows e Linux)
- Scaricare l'ultima release (Windows, Linux o MacOS) ed estrarre il contenuto.
- Eseguire Launcher con doppioclick.
Versione Mobile (Android)
- Scaricare l'apk.
- Selezionare
INSTALLA
eINSTALLA COMUNQUE
.
Formattazione domande
Le domande sono caricate da un file "Domande.txt" che ha il seguente formato:
- (opzionale) Argomenti:
- la riga di un argomento inizia col carattere speciale '@', seguito dal nome dell'argomento. Ogni riga di argomento è seguita dalle domande relative a quell'argomento, fino all'argomento successivo. Alla fine della riga dell'argomento possono essere usati caratteri non alfabetici (ad esempio '=') per separare visivamente le domande di argomenti differenti (tali caratteri verranno ignorati).
- Domande:
- una riga per la domanda;
- 5 righe per le risposte (la riga inizia con una lettera maiuscola, seguita da un punto e dalla risposta);
- una riga per la risposta corretta (una lettera da A a E);
- una riga vuota se non è l'ultima domanda (questa riga separa la domanda da quella successiva, o dall'argomento successivo).
NB: non è importante la lettera con cui iniziano le risposte, basta che siano in ordine, altrimenti la risposta giusta e la lettera non corrispondono.
esempio (tre domande di due argomenti diversi nel file Domande.txt):
@Programmazione Matematica ============================================================================= Dato un insieme F, un intorno è A. L'insieme di tutti i sottoinsiemi di F B. L'insieme dei punti di F a distanza minore di epsilon da un punto x di F C. Una funzione N: F -> 2^F D. Una combinazione convessa di due punti x e y di F E. Nessuna di queste C @Dualità =============================================================================================== Se un problema di programmazione lineare (primale) ha soluzione ottima finita, allora: A. Il suo duale non è detto che abbia soluzione ottima finita. B. Anche il suo duale ha soluzione ottima finita e i valori delle soluzioni coincidono. C. Anche il duale ha soluzione ottima finita, ma non è detto che i valori delle soluzioni coincidano. D. Anche il duale ha soluzione ottima finita, ma i valori delle due soluzioni non coincidono. E. Nessuna di queste B Quale tra queste affermazioni è falsa rispetto ad una corrispondenza primale-duale? A. Ai costi corrispondono condizioni su variabili e viceversa. B. I vincoli sono dati dalle righe di A per il primale, dalle colonne di A per il duale. C. Ai costi corrispondono i termini noti e viceversa. D. Ad un vincolo corrisponde una condizione su una variabile e viceversa. E. Nessuna di queste. A
Contribuire
Aggiunta domande o feature al progetto:
- Fare una fork della repository.
- Clonare la repository in locale.
- (Opzionale) Creare un nuovo branch.
- Aggiungere le modifiche:
- Per aggiungere nuove domande: modificare il file 'Domande.txt', inserendo le nuove domande sotto gli argomenti relativi. NB: in caso non si sappia sotto quale argomento inserire una somanda, scriverlo successivamente in un commento nella pull request.
- Per aggiungere delle feature, basta implementarle e integrarle col resto dell'applicazione (in caso di dubbi o domande sul funzionamento di alcune parti di codice, basta aprire un issue e cercherò di rispondere il prima possibile).
- Fare commit e push.
- Creare una pull request aggiungendo informazioni se necessario.
Proposta feature:
- Aprire un issue spiegando in cosa consiste la feature da aggiungere.
- Possibilmente aggiungervi la label "enhancement".
Roadmap
Features da aggiungere e sviluppi futuri:
- aggiungere la scelta degli argomenti
- impostazioni persistenti
- download domande aggiornate
- impostazione per abilitare/disabilitare il controllo delle domande aggiornate
- deploy su MacOS
- aggiornamento automatico del Readme quando vengono aggiunte nuove domande (GitHub actions)
- aggiungere bottone per visualizzare l'elenco delle domande, dagli argomenti
- fare il porting su mobile
- Android
- iOS
- aggiungere test domande duplicate
- verifica aggiornamenti app
- creare tool per inserire domande nuove (che sfrutta il test per le domande duplicate)
- desktop: aggiungere impostazione dark mode (riferimento utile)
- mobile: fare refactor e sistemare le classi (usare classe Quiz)
- mobile: aggiungere scelta argomenti
- mobile: aggiungere possibilità di caricare un file domande personalizzato
- cambiare il controllo per le domande nuove e farlo in base alla data di modifica o ad un numero di versione
Built With
Desktop
Per l'implementazione dell'app desktop ho utilizzato Java 11 e JavaFX 11, come IDE Eclipse (versione 2020-03 (4.15.0)), e SceneBuilder per la creazione della grafica (file FXML). Vedere i passi seguiti per il setup del progetto.
versione Java: JavaSE-11 (jdk-11.0.11)
versione JavaFX: JavaFX 11 (javafx-sdk-11.0.2)
Mobile
Per l'implementazione dell'app mobile ho utilizzato Flutter, come IDE Visual Studio Code (versione 1.64.2).
versione Flutter: 2.8.1
versione Dart: 2.15.1
Disclaimer
L'obiettivo dell'applicazione è esercitarsi coi quiz dopo aver studiato la teoria (molto meglio se dal libro, in quanto è completo ed esaustivo). Non mi assumo responsabilità di alcun tipo nel caso di errori nelle domande o nelle risposte, né tantomento nel caso di bocciature potenti. Fatene un buon uso e buona fortuna con l'esame <3
Riferimenti
- Ciclo di vita della classe Application
- Guida a classe Timeline usata per realizzare il countdown: Timers in JavaFX and ReactFX
- Lavorare coi moduli Java: Java 9 Modules in Eclipse
- Creare jre custom con JavaFX (jlink): Custom jre with JavaFX 11 e How to use jlink to create a Java image with javafx modules
- JavaFX ottenere HostService senza riferimento alla classe Application (Main extends Application): Open a link in a browser without reference to Application
- Soluzione per eccezione SSL handshake: SSLHandshakeException: Received fatal alert: handshake_failure
- Gestione dei moduli (ad esempio Gson): InaccessibleObjectException ("Unable to make {member} accessible: module {A} does not 'opens {package}' to {B}")