Coder Social home page Coder Social logo

mikyll / roquiz Goto Github PK

View Code? Open in Web Editor NEW
65.0 3.0 2.0 169.17 MB

Applicazione per esercitarsi con i quiz del corso Ricerca Operativa M. Se ti è stata utile considera di lasciare una stellina alla repo! ⭐

License: Other

CSS 2.85% Java 22.41% Kotlin 0.05% Swift 0.80% Objective-C 0.01% Dart 58.14% HTML 0.63% CMake 6.48% C++ 8.15% C 0.49%
java operational-research javafx ricerca-operativa quiz timer flutter dart google mobile

roquiz's Introduction

Downloads Domande Validazione Domande Stargazers Contributors MIT License Issues
java dart flutter

ROQuiz

Applicazione multipiattaforma per esercitarsi con i quiz del corso Ricerca Operativa M.

L'app permette di simulare dei quiz d'esame: vengono pescate, in modo casuale, delle domande a risposta multipla a cui l'utente deve rispondere entro un tempo limite, definito da un timer.
Pool corrente: 107 domande differenti (ultima modifica: 2023-07-19).

Download · Spiegazione Domande · Feature Request | Bug Report

Demo

Mobile

DemoMobileGIF TopicsAndQuestionListGIF SettingsMobileGIF
Demo quiz Argomenti e lista domande Impostazioni

Desktop

TimeoutGIF PlayingAroundGIF
Tempo scaduto Demo app

Desktop (Old)

Versione Java funzionante ma non più supportata.
EndQuizGIF TimeoutGIF
Terminazione quiz Tempo scaduto

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

Download

Scaricare l'ultima release, per il proprio dispositivo (desktop/mobile).

Formattazione domande

Le domande sono caricate da un file di testo (.txt) che ha il seguente formato:

  • (opzionale) Argomenti:
    • la riga di un argomento inizia col carattere speciale '@', seguito dal titolo dell'argomento (es: Complessità). 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

Spiegazione Domande

Questo documento, a cura di Lorenzo di Palma e Filippo Veronesi, contiene la spiegazione alla maggior parte delle domande presenti nel quiz.

Come Contribuire

Vedi CONTRIBUTING.md.

Contributors Attuali

mikyll
mikyll
filippoveronesi
filippoveronesi
TryKatChup
TryKatChup
Federicoand98
Federicoand98
lollofred
lollofred
RedDuality
RedDuality

Funzionalità

Features dell'app e sviluppi futuri.
Feature 🖥️|📱
Visualizzazione lista domande in-app ✔️
Possibilità di modificare il file domande ✔️
Scelta degli argomenti ✔️
Visualizzazione lista domande (totale, pool, per argomento) ✔️
Strumento di ricerca delle domande per keystring ✔️
Impostazioni persistenti ✔️
Impostazione: tema scuro ✔️
Impostazione: toggle controllo aggiornamenti app ✔️
Impostazione: toggle controllo nuove domande ✔️
Impostazione: modifica del file domande (da dentro l'applicazione) ✔️
Impostazione: caricamento file domande esterno ✔️
Impostazione: modifica del numero di domande del quiz ✔️
Impostazione: modifica del timer del quiz ✔️
Impostazione: toggle mescolamento delle risposte ✔️
Impostazione: toggle alert di conferma ✔️
Impostazione: toggle tema scuro ✔️
Template per pubblicare una issue ✔️
Impostazione: modifica del file domande (reference) ✔️
Modifica domande: scroll automatico alla riga dell'errore
Controllo domande duplicate
Unit/Function test
Pipeline CI/CD per build e deploy
Versione web ospitata su GitHub pages

Built With

  • IDE: VSCode v1.81.1
  • Framework: Flutter v3.13.1

Build

Setup Flutter e Run del Progetto

  1. Scaricare l'SDK Flutter dal sito web docs.flutter.dev.
  2. Assicurarsi di aver inserito la directory bin/ alla variabile d'ambiente PATH.
  3. Aprire un terminale e lanciare flutter doctor.
    Questo comando indica se ci sono problemi con l'SDK e fornisce informazioni sulle dipendenze necessarie per il suo funzionamento.
  4. Lanciare il comando flutter run per avviare l'applicazione. Flutter chiederà di selezionare il dispositivo (es. Chrome, Android). Si può specificare direttamente il device id con l'opzione -d, ad esempio per la versione web con Microsoft Edge:
    flutter run -d edge
    

Compilazione Release

Il progetto dell'applicazione flutter si trova nella directory app-mobile/flutter_application. Per compilarlo, lanciare uno dei comandi seguenti, in base all'output desiderato:

  • Android: flutter build apk --split-per-abi;
  • Windows: flutter build windows;
  • Linux: flutter build linux;
  • Web: flutter build chrome, flutter build edge.

Riferimenti

Link e risorse a cui ho fatto riferimento durante lo sviluppo dell'app.

roquiz's People

Contributors

federicoand98 avatar filippoveronesi avatar github-actions[bot] avatar lollofred avatar mikyll avatar redduality avatar trykatchup avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

roquiz's Issues

Quando viene inserito un file di domande formattato ma senza argomenti la schermata Domande non viene caricata correttamente [BUG]

Descrivi il bug
Quando viene inserito un file con nuove domande, anche se formattato correttamente non viene caricato perchè mancano gli argomenti.

Come riprodurre
Passaggi per riprodurre il bug

  1. Dalle impostazioni caricare un'altro file di domande.txt
  2. Avviare il quiz
  3. La schermata resterà bloccata su uno sfondo grigio

Comportamento previsto
Dovrebbe aprire il file e riprodurre le domande correttamente

Bug terminazione quiz

Descrivi il bug
Il bug impedisce di terminare il quiz, se si risponde a tutte le domande.

Come riprodurre
Passaggi per riprodurre il bug:

  1. Avvia un Quiz
  2. Seleziona una risposta per ciascuna domanda del pool
  3. Seleziona "Termina"
  4. Non succede nulla.

Comportamento previsto
Il pulsante termina dovrebbe terminare il quiz a prescindere che l'utente abbia risposto a tutte le domande oppure no.

Screenshot
Test con quiz con pool da 3 domande. Se si prova a terminare senza aver risposto ad almeno una domanda, viene richiesta (come previsto) la conferma. Se si risponde a tutte le domande, e si prova a terminare, non succede nulla:

bug terminazione quiz

Desktop:

  • SO: tutti quelli disponibili
  • Versione: 1.6.0

Mobile:

  • (opzionale) SO: Android 11
  • Versione: 1.6.0

[Desktop] NullPointerException in Informazioni

NullPointerException quando si prova a cliccare i link nella sezione Informazioni dell'app desktop, se si è arrivati al Menu dopo aver terminato un quiz. Non causa crash a runtime.

Molto semplice da sistemare

[Mobile] Eccezione "setState() or markNeedsBuild() called during build"

Quando provo a utilizzare QuestionWidget in ViewQuiz, ottengo questo errore:

Il problema sembra essere legato al fatto che la callback assegnata a onTap chiami setState(), aggiornando lo stato del widget padre ViewQuiz. Tuttavia, provando a sostituire la callback (che in realtà è una closure: (int index) => _setUserAnswer(index)), succede questo:

Che fa pensare il problema sia relativo al timer.

Soluzione provvisoria: costruire il widget interamente all'interno di ViewQuiz.

StackOverflow thread

Test Vari

Aggiungere qualche test (unit, funzioni, integration):

  • testare le funzionalità di base del quiz (inizio, card, terminazione, etc.);
  • testare il funzionamento degli argomenti;
  • testare l'aggiornamento delle impostazioni:
    • aggiornamento delle domande;
  • testare la UI;

[BUG] Alert di conferma anche quando le impostazioni non sono cambiate

Descrivi il bug
Quando si torna indietro dalla pagina delle impostazioni, viene mostrato l'alert di conferma anche se le impostazioni non sono cambiate.

Come riprodurre
Passaggi per riprodurre il bug:

  1. Vai nelle impostazioni
  2. Clicca il tasto indietro
  3. Vedi l'alert

Comportamento previsto
L'avviso dovrebbe essere mostrato solo se le impostazioni sono effettivamente cambiate.

Mobile:

  • Versione: [es: 1.7.0]

Informazioni aggiuntive
Il problema è l'impostazione del controllo degli aggiornamenti dell'app, che non viene salvata nelle Shared Preferences.

Pipeline CI/CD

Creare una pipeline CI/CD che:

  • automatizza i test al rilascio di una nuova feature (branch feature);
  • automatizza il deploy (artifact e nuove versioni);

Bug inserimento file domande personalizzato

Se l'utente carica un file domande con meno domande di quello corrente, l'impostazione del numero di domande (e quella del timer) potrebbero avere un valore più alto del limite consentito.

Ad esempio:

  • il numero di domande per quiz è impostato a 107;
  • si carica un nuovo file con 104 domande;
  • si può avviare un quiz con più domande di quelle contenute nel pool;
  • index out of range.

[BUG] Eccezione al ripristino delle impostazioni

Descrivi il bug
Quando si ripristinano le impostazioni, mentre c'è un'animazione in corso, l'app spara un'eccezione (non dà problemi in Release, solo in debug).

Come riprodurre
Passaggi per riprodurre il bug:

  1. Avviare l'app in debug mode;
  2. Vai nella pagina delle Impostazioni (ViewSettings);
  3. Partendo dalle impostazioni di default;
  4. Deseleziona gli alert di conferma;
  5. Imposta il tema scuro;
  6. Ripristina le impostazioni;
  7. Eccezione sparata dall'AnimationController

Comportamento previsto
Nessuna eccezione.

Screenshot

Desktop:

  • SO: Windows
  • Versione: 1.10.0

Informazioni aggiuntive
Debug output:

════════ Exception caught by animation library ═════════════════════════════════
The following assertion was thrown while notifying status listeners for AnimationController:
'package:flutter/src/widgets/overlay.dart': Failed assertion: line 1392 pos 14: '_zOrderIndex != null': is not true.

Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
  https://github.com/flutter/flutter/issues/new?template=2_bug.yml

When the exception was thrown, this was the stack:
#2      OverlayPortalController.hide (package:flutter/src/widgets/overlay.dart:1392:14)
overlay.dart:1392
#3      TooltipState._handleStatusChanged (package:flutter/src/material/tooltip.dart:442:28)
tooltip.dart:442
#4      AnimationLocalStatusListenersMixin.notifyStatusListeners (package:flutter/src/animation/listener_helpers.dart:240:19)
listener_helpers.dart:240
#5      AnimationController._checkStatusChanged (package:flutter/src/animation/animation_controller.dart:815:7)
animation_controller.dart:815
#6      AnimationController._tick (package:flutter/src/animation/animation_controller.dart:831:5)
animation_controller.dart:831
#7      Ticker._tick (package:flutter/src/scheduler/ticker.dart:249:12)
ticker.dart:249
#8      SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1325:15)
binding.dart:1325
#9      SchedulerBinding.handleBeginFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:1177:11)
binding.dart:1177
#10     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:633:13)
compact_hash.dart:633
#11     SchedulerBinding.handleBeginFrame (package:flutter/src/scheduler/binding.dart:1175:17)
binding.dart:1175
#12     SchedulerBinding._handleBeginFrame (package:flutter/src/scheduler/binding.dart:1092:5)
binding.dart:1092
#13     _invoke1 (dart:ui/hooks.dart:328:13)
hooks.dart:328
#14     PlatformDispatcher._beginFrame (dart:ui/platform_dispatcher.dart:351:5)
platform_dispatcher.dart:351
#15     _beginFrame (dart:ui/hooks.dart:272:31)
hooks.dart:272
(elided 2 frames from class _AssertionError)

The AnimationController notifying status listeners was: AnimationController#7eab8(⏮ 0.000; paused)
════════════════════════════════════════════════════════════════════════════════

[REFACTOR] Refactor Controllo Versione

  • aggiungere una classe Version in model:
    • major, minor, patch;
    • metodi vari (toString(), metodo per convertire in stringa o lista di interi, etc.);
  • aggiungere una classe VersionManager in persistence:
    • void initAppVersion(), per caricarla dall'apk;
    • Future<Version> checkUpdates() per controllare se sono presenti nuove versioni, e aggiungere eccezioni come errori;

Lag nella schermata del Menu

Quando si modificano gli argomenti o le impostazioni e si ritorna alla schermata del menu, questa viene mostrata dopo un leggero ritardo.

[BUG] Delay cambio tema scuro/chiaro

Descrivi il bug
Quando si salvano le impostazioni dopo aver cambiato il tema, la schermata del menu viene aggiornata con un leggero ritardo.

Come riprodurre
Passaggi per riprodurre il bug:

  1. Vai nelle impostazioni;
  2. Cambia il tema, cliccando sullo switch;
  3. Salva le impostazioni;
  4. Nota come l'applicazione mostra un piccolo ritardo nell'aggiornare la schermata del menu.

Comportamento previsto
Una descrizione chiara e coincisa di cosa ci si aspetterebbe che succeda.

Screenshot

2023-09-03_22-54-02.mp4

Desktop:

  • SO: Windows
  • Versione: 1.7.0

Mobile:

  • SO: Android 12
  • Versione: 1.7.0

Informazioni aggiuntive
Il problema non si verifica nella versione web.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.