Temi di tesi e stage - Giovambattista Ianni
Indice
Come richiedere la tesi
Di solito assegno la tesi entro la fine delle sessioni di esame (Febbraio/Marzo, Giugno/Luglio, Settembre). Per manifestare interesse per un tema di tesi è sufficiente inviarmi una e-mail con i vostri dati (nome, cognome, numero di matricola), segnalando l'argomento di interesse. Conviene cominciare il lavoro di tesi e l'eventuale tirocinio abbinato, quando mancano esami da sostenere per al massimo 24 crediti, o per al massimo 36 crediti per la laurea specialistica. Per ovvi motivi di tempo, non mi è possibile seguire con la dovuta attenzione molti tesisti in contemporanea, dunque sono spesso costretto a fare selezione. Non è possibile prenotare il posto per la tesi: vi prego di contattarmi esclusivamente nel momento in cui si ha intenzione di iniziare.
I temi di tesi che leggete sotto possono essere assegnati sia per la laurea triennale che per la laurea magistrale. Nel secondo caso il lavoro di tesi (sullo stesso tema) richiede carico di lavoro, livello di approfondimento e originalità maggiore.
Attenzione: le medie indicate non sono obbligatorie, ma solo indicative del livello di difficoltà del tema proposto.
Licenze d'uso del software prodotto
E' fortemente consigliato che tutto il codice sorgente prodotto nel corso del lavoro di tesi sia rilasciato nel dominio open source sotto licenza GPL 3.0 (o differente, se ritenete opportuno) e che venga lasciata una copia dei propri sorgenti su un repository github pubblico.
Come apporre la licenza GPL sul proprio codice: http://www.gnu.org/licenses/gpl-howto.html
Intelligenza Artificiale
Introduzione di moduli di ragionamento automatico in robot
Strumenti da usare, conoscenze richieste: programmazione multithread e a oggetti, answer set programming, software di riconoscimento oggetti (openCV, da imparare sul momento).
Di cosa si tratta: sviluppo di AI per giochi su dispositivi mobili e di moduli di libreria per BrainyBot
Cosa imparerò: gestione di robot sperimentali, tecniche di intelligenza artificiale applicata.
Media base suggerita: almeno 25. Tesi disponibile anche per laureandi magistrali in versione più complessa.
Robocup vision module
Strumenti da usare, conoscenze richieste: programmazione multithread e a oggetti, C++, sviluppo in ambienti Linux, software di riconoscimento oggetti (openCV o similare, da imparare sul momento).
Di cosa si tratta: riadattare e sviluppare un modulo di visione artificiale da usare a bordo di un giocatore partecipante alla Standard Platform League della Robocup.
Cosa imparerò: gestione di robot sperimentali, tecniche di artificial vision applicata.
Media base suggerita: almeno 25. Tesi disponibile anche per laureandi magistrali in versione più complessa.
Scrittura di un servo driver per Tapsterbot
Strumenti da usare, conoscenze richieste: configurazione di hardware Arduino, programmazione C++, Javascript e Python.
Di cosa si tratta: sviluppo dei driver dei motori del futuro BrainyBot 2. Sito di BrainyBot 1: qui
Cosa imparerò: gestione di robot sperimentali, gestione di attuatori robotici.
Media base suggerita: almeno 25. Tesi disponibile anche per laureandi magistrali in versione più complessa.
Introduzione di moduli di ragionamento automatico in software per lo sviluppo di videogiochi.
Strumenti da usare, conoscenze richieste: programmazione multithread e a oggetti, answer set programming, C# (quest'ultimo si imparerà durante la tesi). Di cosa si tratta: la tesi prevede l'utilizzo e la sperimentazione su un framework che consente l'introduzione di sistemi di ragionamento automatico all'interno del noto software di sviluppo Unity. Cosa imparerò: sviluppo di videogames in ambienti professionali, tecniche di intelligenza artificiale applicata.
Media base suggerita: almeno 26. Tesi disponibile anche per laureandi magistrali in versione più complessa.
Game development engines.
Strumenti da usare, conoscenze richieste: programmazione multithread e a oggetti. Cosa imparerò: sviluppo di videogames in ambienti professionali. Di cosa si tratta: la tesi prevede l'utilizzo e la sperimentazione su alcuni dei software per lo sviluppo di videogiochi più noti, tra cui Unity, Unreal Engine, Godot e vari altri.
Media base suggerita: almeno 26. Tesi disponibile anche per laureandi magistrali in versione più complessa.
Stream reasoning. La tesi prevede lo sviluppo e l'analisi teorica di alcune tecniche di stream reasoning.
Strumenti da usare, conoscenze richieste: programmazione, capacità di analisi teorica. Cosa imparerò: dimostrare le proprietà formali di una tecnica di AI, scrivere un lavoro scientifico.
Media base suggerita: almeno 27. Tesi disponibile anche per laureandi magistrali in versione più complessa.
Sviluppo di estensioni per il browser Chrome
- Spoofstick: ridisegno di una estensione Chrome anti URL typo-squatting
Perfezionamento dell'estensione Chrome H-Index Calculator
Strumenti da usare, conoscenze richieste: Javascript. Cosa imparerò: Javascript (se già non lo conosci), tecniche di estensione per browser.
Media base suggerita: almeno 25. Tesi disponibile solo in versione per laurea triennale.
Filtri intelligenti anti-advertising sul Web. Sviluppo di estensioni Chrome finalizzate all'eliminazione avanzata di contenuti indesiderati sul web. Tecnologie: javascript, html 4, http, opencv.
Media base suggerita: almeno 26.
Language Switcher. Perfezionamento dell'estensione Chrome Language Switcher.
Reti di Calcolatori
Capture Sanitizer: Estensione di un tool per la pseudonimizzazione reversibile di un file di cattura pcap.
Strumenti da usare, conoscenze richieste: buona conoscenza delle reti di calcolatori. Uso della libreria libpcap e del C.
Media base suggerita: almeno 25. Tesi disponibile sia in versione per laurea triennale che per laurea specialistica.
Cloud, Sicurezza Informatica
E' possibile avere in formato tesi uno dei progetti assegnati per l'esame di Network & Security (anche quelli che risultano già assegnati):
Temi di tesi disponibili nella forma di stage presso NTT Data:
Tema: SELinux
Tesi 1: Studio e sperimentazione di un modello di controllo accessi MAC basato su SELinux per software applicativo (es. PostreSQL). SELinux è stato principalmente pensato ed applicato per l’implementazione di modelli di controllo accessi di tipo MAC alle risorse dei sistemi operativi Linux. A valle di uno studio sulle caratteristiche generali di SELinux, si punta ad approfondire il tema dell’applicazione di modelli MAC alle risorse interne dei software applicativi. Un esempio concreto di integrazione di SELinux a livello applicativo è costituito da PostgreSQL. Si punta a utilizzare PostgreSQL, o altra applicazione ad ampia diffusione, per la definizione di un modello di controllo accessi MAC. Riferimenti: https://wiki.postgresql.org/wiki/SEPostgreSQL_SELinux_Overview
Tesi 2: Realizzazione di un prototipo di convertitore di policy d’accesso dal formato ACL (es. eTrust AC) al formato SELinux basato su etichettature di contesto. Riferimenti: https://casupport.broadcom.com/cadocs/0/g007711e.pdf
Tema: Cloud Native Architectures
Tesi: Progettazione e sviluppo di un’applicazione “Cloud Native” allo stato dell’arte. Il processo di sviluppo di un’applicazione va rivisto profondamente in ottica cloud native. Occorre utilizzare microservizi, architetture containerizzate e protocolli REST-based. Inoltre è necessario utilizzare tecniche di DevOps. Dopo aver studiato le nuove tematiche, si richiede di realizzare un prototipo di applicazione a microservizi che utilizzi in modo appropriato le nuove tecnologie.
Tema: Perfomance Elasticstack
Promotore NTT Data: R. Spadafora
Tesi: Performance comparison of Elasticstack on VM and Elasticstack on Kubernetes. Elasticsearch è un search engine, ed insieme ad altre componenti software come Logstash e Kibana è uno degli strumenti più utilizzati per log analysis, data intelligence e ricerche full text ad alte prestazioni. A valle di uno studio sulle caratteristiche generali di elasticstack, si punta a valutare la performance in ambiente virtualizzato e in ambiente docker utilizzando kubernetes come orchestratore. Un esempio concreto potrebbe essere quello di indicizzare 100GB di log monitorando le due soluzioni in termini di performance.
Promotore NTT Data: M. Marano
Tesi: Tecnologie FIDO2. Il protocollo FIDO2 (https://fidoalliance.org/fido2/) permette l’autenticazione sicura a servizi online. Il candidato dovrà studiare dettagliatamente il protocollo ed implementare un autenticatore FIDO2 per Android che permetta l’autenticazione sicura (utilizzando meccanismi propri del sistema operativo come l’impronta digitale o il pin) ad un’applicazione web che lo stesso candidato si occuperà di sviluppare.
Sistemi Operativi
Thread Monitor. E' molto difficile capire il comportamento di un programma che faccia uso di più thread e risorse condivise. La tesi prevede lo sviluppo di una apposita API in grado di consentire la visualizzazione e il monitoraggio dello stato dei vari thread in un programma concorrente. In particolare il sistema complessivo dovrebbe essere in grado di visualizzare, per ogni monitor presente nel sistema: i thread in stato di Wait, i thread in attesa di ottenere il lock sul monitor, l'eventuale thread attualmente attivo nel monitor stesso.
Strumenti da usare, conoscenze richieste. E' richiesta una buona conoscenza delle problematiche legate alla multi-programmazione in Java.
Preparazione e sottomissione di package applicativi per Ubuntu/Debian. La tesi prevede di curare la (non banale) fase di rilascio di alcuni pacchetti applicativi per distribuzioni Linux Ubuntu/Debian.
Media base suggerita: almeno 24.