Proposte di Stage/Tesi

Nota bene:

  • questa pagina è spesso outdated, prendetela come suggerimento e ispirazione anche perché accetto volentieri proposte di progetto da parte degli studenti
  • anche i titoli sono in generale di massima, per identificare un argomento/contesto

Tesi (in corso/terminate)

Requisiti

Cose utili per chi si voglia cimentare:

  • LaTeX (non accetto più elaborati in Word/Libreoffice o altro)
  • git (non esiste che uno studente del nostro dipartimento esca da qui senza conoscerlo, inoltre è il sistema con cui condivido tutto il materiale delle tesi, note, commenti, etc.)
  • progettazione e programmazione a oggetti
  • nozioni di ingegneria del software
  • sistemi operativi Unix/Linux o sistemi analoghi (lo sviluppo avviene su Linux mentre Windows viene lasciato in disparte e caldamente sconsigliato), chi non sa usare una shell eviti di contattarmi
  • capacità di cercare materiale e documentazione (prima di iniziare qualunque lavoro è necessario conoscere ciò che è stato già fatto nel mondo)
  • spirito critico
  • metodo e disciplina interiore
  • indipendenza
  • intraprendenza
  • propositività

Nota bene: tratto solo argomenti di tesi che si occupino di Software Libero e tutto il software prodotto deve essere pubblicato con una licenza libera.




Stage sviluppatore Android o iOS (presso ST)

Le applicazioni mobile sviluppate da ST servono a dimostrare le funzionalità e potenzialità dei firmware sviluppati all'interno dell'iniziativa STM32 Open Development Environment (http://www.st.com/stm32ode). Lo studente progetterà e svilupperà un'innovativa applicazione multi piattaforma (Android/iOS e Windows Universal) utilizzando tool di sviluppo nativi e/o cross-platform.

Il lavoro di stage comporta lo studio e lo sviluppo di opportune architetture mobile client-server per l'interfacciamento con il Cloud, per la gestione della compatibilità elettrica tra le diverse board e per la ricezione di notifiche. Una parte importante del lavoro si focalizzerà inoltre sullo studio e lo sviluppo di efficaci interfacce utente che rendano intuitivo l'uso del tool.

Requisiti:

  • Amare scrivere buon codice, riutilizzabile e pulito
  • Conoscenza logica OOP (Object oriented Programming)
  • Conoscenze dei più comuni design pattern
  • Conoscenza di almeno un tool di versioning del codice (es. Git)
  • Conoscenza di Java e/o ObjectiveC e/o C#
  • Conoscenza del framework Android e/o iOS e/o Xamarin Android
  • Nice to have: conoscenza JUnit ed espresso (framework per unit testing)
  • Conoscenza Material design iOS
  • Conoscenza framework iOS
  • Conoscenza linguaggio Objective C e/o Swift
  • Nice to have: conoscenza framework di testing per iOS.

Stage sviluppatore ARM MBED (presso ST)

Mbed (http://www.mbed.org) è una iniziativa Open Source (HW e SW), promossa da ARM, che ha lo scopo di proporre un ambiente di sviluppo SW embedded (SDK) semplificato grazie al fatto che, basandosi su design HW/SW predefiniti dalle aziende partner, si ottiene un abbassamento della barriera di ingresso tradizionalmente presente nello sviluppo dei dispositivi embedded. Le numerose aziende partner di questa iniziativa, tra cui ST, promuovono i propri componenti fornendo development boards, il FW base port completo ed esempi e demo applications.

In questo contesto esiste un JavaScript interpreter sul quale il candidato dovrebbe:

  • Verificare la compatibilita con le ST Nucleo boards e fare un primo assessment funzionale e delle performance.
  • Creare delle classi JavaScript per alcune categorie di sensori ST per i quali esiste gia un driver C/C++
  • Sviluppare una semplice demo che dimostri funzionalità e performance dei sensori ST e delle classi JavaScript sviluppate sopra.

Competenze tecniche richieste:

  • Buona conoscenza pratica del linguaggio C/C++ e JavaScript, conoscenza almeno scolastica di un Real Time Operating Systems (RTOS)
  • Conoscenza scolastica di almeno un tool di Version Control (tipo SVN, CVS, GIT)
  • Conoscenza Inglese tecnico e capacita di lettura schematici

Competenze personali:

  • Grande tenacia nel problem solving e attenzione ai dettagli (es. non basta dimostrare che funziona, e' necessario sapere come e perche')
  • Qualche esperienza in progetti pratici su sistemi embedded

SECURITY of INTERNET of THINGS (col collega Bruschi)

l'avvento di “Internet of things” determinato dalla disponibilità e pervasività di una innumerevole serie di dispositivi intelligenti quali smartphone, sensori di varia natura, stampanti, SCADA (Supervisory Control and Data Acquisition) e dispositivi medicali, impone una serie di analisi dei protocolli e dei sistemi sottostanti al fine di evitare che gli stessi siano fonti di nuove forme di attacco informatico. Le tesi proposte in questo ambito, di tipo prettamente sperimentale, sono mirate allo studio e analisi di questi sistemi nella prospettiva della loro sicurezza informatica.

TRUSTED EXECUTION ENVIRONMENT (col collega Bruschi)

Negli ultimi dieci anni, i produttori di dispositivi mobili hanno dotato i loro dispositivi di CPU che prevedono una modalità di esecuzione protetta per la realizzazione di ambienti di esecuzione protetti noti come TEE in cui garantire l’esecuzione isolata di opportuni codici fidati, l’accesso sicuro a credenziali, periferiche e memoria. Le tesi proposte in questo ambito si prefiggono l’analisi di sicurezza delle principali TEE oggi presenti sul mercato nonché una implementazione innovativa di alcuni moduli critici.

[IN CORSO] ANALISI TOX (E RELATIVO PROTOCOLLO/ARCHITETTURA) E CONFRONTO CON PIATTAFORME SIMILI (SKYPE/VOIP-SIP/JITSI/ETC.)

Tox (http://tox.im) è un sistema di messaggistica (e telefonia e videochiamata) completamente distribuito (basato su DHT), non dipendente da una autorità centralizzata.

E' completamente libero (GPL), ha client per le più diffuse piattaforme, il traffico è crittografato (verificare) e molto resiliente (no “single point of failure”).

Questa proposta di tesi si prefigge lo scopo di verificare strumentalmente (metriche/misurazioni) le caratteristiche funzionali, fare un confronto funzionale (e, ove possibile in caso di disponibilità del sorgente, architetturale) ed eventualmente ipotizzare e testare l'implementazione di servizi aggiuntivi basati sul protocollo.

(per laurea triennale o magistrale)

ANALISI IPFS (E RELATIVO PROTOCOLLO/ARCHITETTURA) E CONFRONTO CON PIATTAFORME SIMILI

IPFS (http://ipfs.io) è un “filesystem” completamente distribuito (basato su DHT), non dipendente da una autorità centralizzata. E' completamente libero (GPL), è molto resiliente (no “single point of failure”). Attualmente è in versione alpha.

Questa proposta di tesi si prefigge lo scopo di verificare strumentalmente (metriche/misurazioni) le caratteristiche funzionali, fare un confronto funzionale (e, ove possibile in caso di disponibilità del sorgente, architetturale) ed eventualmente ipotizzare e testare l'implementazione di servizi aggiuntivi basati sul protocollo, servizi orientati alla distribuzione di contenuti multimediali relativi al contesto museistico.

(per laurea triennale o magistrale)

[IN CORSO, ma c'è spazio per estensioni] Confronto fra mezzi pubblici e mezzi privati sulla base dei dati Google e ATM

Usando le API di Google e facendo scraping dal sito ATM Giromilano è possibile confrontare un tragitto (da A a B) effettuato con i mezzi pubblici e con un mezzo privato.

L'idea è quella di usare i dati car2go (ne faccio scraping da quando sono partiti) per avere una base di tragitti reali in auto per stilare una classifica dei confronti mezzo pubblico/ mezzo privato su base reale.

Il lavoro non è banale, specie lo scraping di ATM, ma di grande soddisfazione.

Output: uno studio sulla performance dei mezzi pubblici vs. mezzi privati in base a giorno, orario, distanza, zona, etc.

Tagged context distributed mirrored (e chi più ne ha più ne metta) filesystem

Tutto da pensare…

FIXME esiste git-annex che si avvicina molto all'idea

Un filesystem distribuito e sincronizzato anche offline, basato su tag (e non su directory), che supporti anche dispositivi mobili, deve permettere di avere su ogni nodo (pc, notebook, cell) una “vista” selezionata dei propri dati/documenti

Nota bene: i pezzi sono già tutti esistenti, c'è “solo” (non è cmq banale) da integrare il tutto

es.

Primi step

  • state of the art dei tagged filesystem
  • state of the art dei distributed filesystem

(potrebbero diventare tesine separate)

[fatto, ma si può estendere] Linux boot (o anche un generico filesystem) via bittorrent

Per fare il boot da rete di molte macchine contemporaneamente (es. in caso di un'aula didattica - es. SiLab) si può pensare di usare bittorrent in fase iniziale?

Ad esempio fare un miniboot (via PXE) per poi lanciare un download bittorrent del vero initrd…

Avrebbe senso? Migliorerebbe i tempi di boot? Probabilmente sì se il bottleneck è il server vedi ad es. aula didattica fatta partire da un portatile con knoppix o simili)

(claro che la rete deve essere “switchata” o anche meglio se geografica)

cfr. Tesi Bruschi, ora sarebbe da espandere in un generico filesystem via bittorrent… e fare studi comparativi con sistemi esistenti (vedere link in fondo alla pagina della tesi realizzata)

In ogni caso...

Si accettano richieste, proposte e suggerimenti che coinvolgano:

  • Arduino e simili (piattaforme embedded, IoT, etc.)
  • Software Libero