Proposte per Tesine di Laurea di Primo Livello

Quelle che seguono sono alcune proposte di tesine di laurea (di primo livello).  Quelle etichettate con un * (o due *) sono più difficili (o molto più difficili) delle altre: sceglietele se siete particolarmente motivati, perchè a questa maggiore difficoltà non corrisponde un proporzionale aumento del voto di laurea.

Tesine già svolte in passato

DocBook e documentazione dell'aula informatizzata

Scopo di questa tesina è scrivere la documentazione necessaria per l'utilizzo al pieno dei servizi dell'aula informatizzata della Facoltà di Economia: come ottenere un account, come effetuare il login ai computer, come cambiare la propria password, etc... La documentazione verrà realizzata in DocBook, che è un linguaggio di markup XML per la stesura di documentazione tecnica.

LaTeX e documentazione dell'aula informatizzata

Scopo di questa tesina è scrivere la documentazione necessaria per l'utilizzo al pieno dei servizi dell'aula informatizzata della Facoltà di Economia: come ottenere un account, come effetuare il login ai computer, come scegliere tra Linux e Windows, etc... La documentazione verrà realizzata in LaTeX, che è un linguaggio per la scrittura di documenti molto utilizzato in ambito scientifico.

Java Server Pages*

Durante il corso di Laboratorio di Sistemi Informativi si è visto come realizzare applicazioni web tramite l'uso del linguaggio PHP. Una possibile alternativa, particolarmente adatta per applicazioni di grosse dimensioni è JavaServer Pages (JSP), che riprende dal PHP l'idea di mescolare codice HTML e linguaggio di programmazione, utilizzando Java per ques'ultimo.

Scopo della tesina è studiare il funziona di JavaServer Pages e di alcune tecnologie correlate (Java Servlets e JDBC). Come completamento della tesina, occorre anche sviluppare una applicazione web in JSP che può essere, ad esempio, la traduzione in JSP del progetto finale del corso di Laboratorio di Sistemi Informativi.

Prerequisiti: conoscenza di Java e dei fondamenti della programmazione web.

Il linguaggio LOGO

Un linguaggio di programmazione molto particolare, sviluppato prevalentemente per fini didattici, è il Logo. La caratteristica più conosciuta di questo linguaggio è la gestione della grafica tramite la tartaruga: una tartaruga virtuale dotata di una penna sotto il corpo si sposta, a seconda dei comandi impartiti dal programmatore, lasciando nel contempo sullo schermo il segno del suo passaggio. Il Logo, comunque, è un linguaggio di programmazione a tutti gli effetti, anche molto potente. Questa tesina consiste nello studiare i fondamenti del linguaggio, e i principi ispiratori in ambito didattico che hanno portato alla sua realizzazione.

Sviluppo di Homebrew per Wii

La Wii è una console per videogiochi sviluppata dalla Nintendo. Sebbene inizialmente la Wii potesse eseguire solo programmi certificati dalla Nintendo, alcuni hacker sono riusciti a superare questa limitazione e hanno dato origine ad una florida comunità di sviluppari di applicazioni homebrew (fatte in casa). Il tool principale per lo sviluppo di applicazioni con la Wii è DevKit PPC. Scopo di questa tesina è imparare i rudimenti della programmazione per la Wii con DevKit PPC e scrivere un semplice programma di esempio.

Prerequisiti: conoscere i rudimenti del linguaggio C, e saper lavorare con la linea di comando.

OpenGL

Secondo la definizione di Wikipedia, OpenGL è una specifica che definisce una API multilinguaggio e multipiattaforma per scrivere applicazioni che producono computer grafica 2D e 3D. OpenGL è ampiamente usato per sviluppare videogiochi, programmi di realtà virtiale, CAD, etc.. Scopo della tesina è apprendere i rudimenti di OpenGL e sviluppare (con Java o con altro linguaggio di programmazione a scelta che lo supporti) delle piccole applicazione esemplificative.

Prerequisiti: ricordare qualcosa (basta veramente poco) del corso di algebra lineare.

Pacchetti per Ubuntu Linux

A differenza di quanto accade in Windows, nei sistemi Linux il software non è distribuito sotto forma di programma da eseguire per lanciare l'installazione, ma sotto forma di pacchetto. Esistono vari formati per i pacchetti, tra cui il formato .deb, utilizzato dalla distribuzione Debian e dai suoi derivati, come la Ubuntu.

Scopo di questa tesina è capire come sono fatti i pacchetti .deb e imparare a crearne di nuovi. Obiettivo finale è quello di prendere un software per Linux, attualmente non presente nella distribuzione Ubuntu, e realizzare il pacchetto corrispondente.

Prerequisiti: dimestichezza con i programmi a linea di comando su sistemi Linux.

Facebook e reti sociali

Facebook è un sito che fa parte della categoria dei Social Network, ovvero che consente a gruppi di persone di conscersi, scambiarsi informazioni e interagire in vario. Chiunque può crearsi gratuitamente un account su Facebook, inserire un proprio profilo, tenere traccia di una lista di amici, inserire proprio foto, etc... e queste informazioni sono condivise (a vario livello di dettaglio) con gli altri utenti del sito.

Dal punto di vista informatico, una peculiarità di Facebook è che consente di scrivere delle estensioni di Facebook, che girano su un server web di nostra scelta, ma che hanno accesso a tutte le informazioni presenti nel sito principale e alle quali si accede direttamente tramite il sito principale di Facebook.

Questa tesina consiste in un piccolo studio di Facebook e del fenomeno delle social networks, per poi concentrarsi sullo sviluppo di una semplice estensione del sito.

Dynamic HTML e DOM

Dynamic HTML o DHTML è un termina che indica un insieme di tecniche per lo sviluppo di pagine web dinamiche e interattive. Si basa sull'utilizzo di HTML, CSS, JavaScript e DOM (Document Object Model).

Scopo della tesina è studiare le tecnologie collegate a DHTML (DOM in particolare), per poi sviluppare una applicazione web interattiva. Questa può essere, ad esempio, una versione modificata del progetto per il corso di Laboratorio di Sistemi Informativi.

Prerequisiti: conoscenza di HTML e JavaScript

AJAX*

AJAX è l'acronimo di Asynchronous JavaScript and XML, ed indica una tecnica di sviluppo del software per il web che ha lo scopo di creare applicazioni interattive, con la stessa fluidità che mostrano applicazioni che vengono eseguite in locale. L'idea principale di questa tecnica è che gli eventi che si verificano non causano il ricaricarsi di una intera pagina, ma solo lo scambio di piccoli pacchetti di dati necessari ad aggiornare la pagina corrente; il tutto avviene sotto il controllo di JavaScript. Per facilitare lo sviluppo di applicazioni AJAX sono disponibili vari framewoks, più o meno complessi, e più o meno legati ad una particolare architettura software.

Scopo della tesina è studiare i principi di AJAX e di uno (a piacere) dei framework più comuni (quale ad esempio script.aculo.us). Infine, occorre sviluppare una applicazione web all'interno del framework che può essere, ad esempio, la versione "ajaxificata" del progetto per il corso di Laboratorio di Sistemi Informativi.

Prerequisiti: un buona conoscenza di HTML e JavaScript e i rudimenti di DHTML

Virtualizzazione sotto Linux

Virtualizzazione è un termine generico che indica una qualunque tecnica il cui scopo è astrarre una risorsa nascondendone i dettagli fisici agli utilizzatori. In particolare, è possibile virtualizzare un singolo computer fisico (o un singolo sistema operativo), in modo che esso appaia come un insieme di computer logici. Ognuno dei computer logici creato in questo modo è detto macchina virtuale.

Sotto Linux sono stati sviluppati vari sistemi di virtualizzazione, che coprono tutte le tecniche ad oggi note. Un esame di alcune soluzioni è disponibile in questo articolo. Scopo della tesina, dopo una introduzione generale al problema della virtualizzazione, è confrontare alcuni dei sistemi freeware o open source disponibili sotto Linux, mettendone in luce vantaggi, svantaggi e prestazioni. Ciò verrà fatto sia basandosi su materiale già disponibile on-line, che provando in prima persona i vari prodotti.

Prerequisiti: dimestichezza col sistema operativo Linux.

Rapid Application Development con PHP

Sviluppare una applicazione web in PHP richiede, ogni volta, la (ri)scrittura di una grossa quantità di codice dalla struttura sempre uguale. Si tratta del codice necessario alla implementazione delle funzionalità di inserimento, modifica, cancellazione e interrogazione della base di dati. La parte veramente peculiare di una applicazione web è spesso una percentuale molto piccola del codice prodotto.

Per ovviare a questo problema, si stanno diffondendo recentemente una serie di framework per lo sviluppo di applicazioni in PHP, che hanno lo scopo di velocizzare il processo di sviluppo. Tra gli altri, abbiamo CakePHP, PHP on Trax e Symfony.

Scopo della tesina è scegliere uno di questi framework, e studiarne sia i principi teorici che ne stanno alla base, (tipicamente l'architettura model-view-controller e i template) che la loro effettiva realizzazione. Infine, occorre sviluppare una applicazione web all'interno del framework che può essere, ad esempio, la traduzione del progetto finale del corso di Laboratorio di Sistemi Informativi.

Prerequisiti: conoscenza del PHP.

Calcolabilità*

Un computer è essenzialmente una macchina per effettuare dei calcoli. Anche quando i dati elaborati sono testi, immagini, o audio, all'interno essi vengono trattati come numeri e sottoposti ad operazioni aritmetiche.  Sembra che le possibilità di elaborazione di un computer siano illimitate. Ma è veramente così? In realtà, niente è più lontano dalla verità. Ci sono alcuni "calcoli" che un computer non è in grado di effettuare. Non solo non lo è adesso, ma non lo sarà mai, per quanto potente e veloce esso sia. Si tratta delle cosiddette "funzioni non calcolabili". L'obiettivo della tesi è introdurre i concetti di base della calcolabilità, e di mostrare così i limiti intrinseci dei calcolatori.

L'evoluzione dei processori nei personal computer

I processori che si trovano nei personal computer di oggi (Interl Pentium IV e AMD Athlon) hanno una lunga storia. Si può considerare tranquillamente come capostipite di entrambi i modelli il "vecchio" Intel 8086, uscito nel 1978. Da allora, varie generazioni si sono susseguite che hanno portato al primo Intel a 32 bit con l'80386 fino al Pentium IV e all'Athlon XP. Obiettivo della tesi è confrontare le architetture interne di questi processori (cache, pipeline, microprogrammazione, etc..) e studiarne la loro evoluzione.

Problemi P ed NP

È ben noto che problemi diversi richiedono tempi di elaborazione diversi. Ordinare un array, ad esempio, richiede tempo proporzionale a n * log(n) dove n è il numero di elementi. Moltiplicare due matrici quadrate con un algoritm naïf richiede tempo propozionale a n^3, dove n è la dimensione delle matrici. I problemi più "facili" sono quelli per cui esiste un algoritmo che li risolve in un tempo polinomiale rispetto alla dimensione dei dati in ingresso. Sono i problemi della classe P. Non sempre un algoritmo simile esiste. Ci sono problemi che possono essere risolti solo in tempo esponenziale nella dimensione dei dati in ingresso.  

C'è poi una classe di problemi particolari: la classe dei problemi NP. Questi possono essere risolti in tempo polinomiale da una macchina non-deterministica (una sorta di computer in grado di contattare un oracolo, una entità divina che ne guidi l'esecuzione). Tuttavia, nessuno è mai riuscito a capire se P è uguale a NP, ovvero se questi problemi posssono o non possono essere risolti in tempo polinomiale anche da macchine "tradizionali". Il problema è particolarmente interessante in quanto praticamente tutti i metodi crittografici si basano sull'assunzione che P è diverso da NP. Se si riuscisse a trovare un algortimo polinomiale per i problemi NP, praticamente tutti i metodi crittografici perderebbero efficacia.

L'obiettivo di questa tesina è studiare i concetti di complessità computazionale legati ai problemi P ed NP.

Interpreti e compilatori

Durante il  corso di laurea sono stati visti vari linguaggi di programmazione: C++, Java, SQL, PHP, ecc.. Questi linguaggi, tuttavia, non possono essere eseguiti direttamente, in quanto il computer capisce un solo linguaggio di programmazione, il linguaggio macchina. Occorre quindi "tradurre" tali linguaggi in linguaggio macchina. Ci sono due strade possibili per effettuare tale trasformazione: la interpretazione e la compilazione. C++ è un linguaggio tipicamente compilato, mentre SQL tipicamente è interpretato.

Java è una via di mezzo, in quanto viene compilato in una forma intermedia (il Java Bytecode) che viene eseguito non direttamente dal processore ma da un programma particolare, la Java Virtual Machine. Quest'ultima soluzione, in realtà, non è affatto una novità introdotta da Java, ma fu utilizzata per la prima volta dal linguaggio LISP, ed è oggi ampiamente sfruttata da vari linguaggi di programmazione (PHP, C#, Prolog, etc..)

L'obiettivo di questa tesina è presentare interpreti, compilatori e soluzioni miste, e discuterne meriti e demeriti. Nel contempo, vengono anche presentati strumenti di supporto alla fase di compilazione, quali linker e loader, che sono comunque fondamentali per un sistema di sviluppo completo.  È anche prevista una piccola dimostrazione pratica dei concetti introdotti, tramite l'utilizzo della famiglia di compilatori GNU  e del Java Development Kit della Sun.

Alcuni riferimenti online:

Linguaggi dichiarativi

Linguaggi come PHP, C++ e Java sono tra loro molto simili, in quanto sono tutti esempi di linguaggi imperativi (a oggetti). Nei linguaggi imperativi il programma descrive un algoritmo da eseguire, che porta alla soluzione di un problema.  In altri termini, il programma descrive "come" risolvere il problema. SQL, invece, è un linguaggio di tipo dichiarativo: una query in SQL descrive la soluzione che vogliamo, non i passi per arrivare a tale soluzione. Il compito di prendere le misure più opportune per ottenere tali risultati, nella maniera più efficiente possibile spetta al server di database. Esempi di linguaggi dichiarativi sono i linguaggi funzionali (LISP, ML, Haskell), i linguaggi logici (Prolog) e logico-funzionali (Curry).

Obiettivo della tesi è introdurre uno di questi nuovi paradigmi, mettendo in evidenza i punti distintivi principali, e illustrandoli con degli esempi scritti in un linguaggio di programmazione specifico.

Poichè delle tesine per i paradigmi logico e funzionale sono già state sviluppate, in questo momento è possibile trattare solo il modello logico-funzionale. Per questo motivo, si consiglia questa tesina solo a chi conosce già abbastanza bene o il paradigma funzionale o quello logico.

Tris

Uno dei giochi più famosi in italia è il tris (noto anche come Tic-Tac-Toe). Potete giocare on-line a tic-tac-toe al sito http://boulter.com/ttt/.

Scopo della tesina è scrivere un programma che impari a giocare a tris.  Inizialmente il programma muove a caso, ma a mano a mano che viene sconfitto tiene traccia delle mosse che lo hanno portato a perdere in modo da non ripeterle più. In questo modo, il programma in poco tempo diventa imbattibile! Si può usare qualunque linguaggio di programmazione si desideri.

Replicazione in MySQL

MySQL permette la replicazione delle basi di dati. Un server agisce come master, mentre altri server si collegano a questo in qualità di slave. Gli slave mantengono il proprio database consistente rispetto al master, con aggiornamenti continui. La replicazione dei database ha vari vantaggi, tra i quali:
La tesina consiste in un piccola parte teorica in cui si affronta il problema della replicazione, e  in una pratica in cui si mette a punto un sistema di almeno due server MySQL in configurazione master-slave.  Per questo motivo, si consiglia la tesina solo a chi ha la possibilità di avere accesso a due computer collegati in rete.

Alcuni riferimenti online:

Rush Hour*

Rush Hour è un rompicapo prodotto dalla Binary Arts. Potete trovarne una versione da giocare on-line al sito http://www.igoweb.org/~wms/rushHour. Si tratta di far uscire la macchinina rossa attraverso il varco indicato dalla freccia gialla. Le uniche mosse possibili sono spostare avanti o indietro i vari veicoli. Scopo della tesina è scrivere un programma che, avendo come input una configurazione iniziale di macchine, sia in grado di trovare, se esiste, la sequenza di azioni da compiere per risolvere il gioco. Si può usare a questo scopo qualunque linguaggio di programmazione si desideri.

Il linguaggio macchina della famiglia Intel

Durante il  corso di laurea sono stati visti vari linguaggi di programmazione: C, Java, SQL, PHP, ecc.. Tuttavia, nessuno di questi linguaggi può essere eseguito direttamente dal computer. Quest'ultimi capiscono solo un linguaggio molto particolare, detto linguaggio macchina, fatto da istruzioni semplicissime (per il computer, non per un essere umano) che consistono essenzialmente nello spostare dati da un registro interno ad un altro e nell'eseguire semplici operazioni aritmetiche.

Obiettivo della tesi è studiare le caratteristiche fondamentali del linguaggio macchina dei processori Intel, fino ad arrivare a scrivere qualche semplicissima applicazione, per il sistema operativo Linux, direttamente in tale linguaggio. 

Alcuni riferimenti online:

Linguaggi regolari ed espressioni regolari

Uno dei settori teorici dell'informatica riguarda i cosiddetti "linguaggi formali". Si tratta di studiare come definire dei linguaggi di programmazione (e simili) in maniera formale e non ambigua. Esistono varie classi di linguaggi formali, una di queste è quella dei linguaggi "regolari". I linguaggi regolari sono utilizzati, ad esempio, per descrivere, in maniera formale i componenti di base di un linguaggio di programmazione: cosa è un identificatore? cosa è un numero intero? cosa un numero reale?

Sono anche utilizzati nelle cosidette "espressioni regolari": alcuni editor di testi, oltre ad avere le funzioni di ricerca di stringhe all'interno di un documento, possono anche ricercare delle "espressioni regolari". Ad esempio una espressione del tipo "a.*[0-9]b" identifica una qualunque stringa che inizia con  a, poi ha un certo numero di caratteri qualunque seguiti da un cifra numerica e dal carattere b.

La tesina si occupa dello studio dei linguaggi regolari e dei concetti ad essi collegati. Dopo una parte iniziale in cui vengono introdotti i linguaggi regolari e le espressioni regolari, è possibile seguire una linea più teorica o più pratica.

Tesine eliminate per mancanza di adeguata pianificazione

Trattamento di dati geografici con MySQL

I sistemi GIS (Geographic Information Systems) sono usati per raccogliere, modellizzare, analizzare informazioni che descrivono proprietà fisiche del mondo geografico. MySQL dalla versione 4.1 in poi ha supporto sperimentale per il trattamento di dati di natura geografica. Questo rende possibile utilizzarlo come backbone per un sistema GIS.

La tesina consiste in una piccola parte teorica in cui si introducono i sistemi GIS e le problematiche da affrontare per aggiungere ai DBMS il supporto per il trattamento di dati geografici. La parte pratica consiste invece nello sperimentare sull'utilizzo di queste estensioni geografiche in MySQL.

Alcuni riferimenti online:

Tesine eliminate perché troppo complesse

Interprete per un semplice linguaggio imperativo**

Durante il  corso di laurea sono stati visti vari linguaggi di programmazione: C, Java, SQL, PHP, ecc.. Questi linguaggi, tuttavia, non possono essere eseguiti direttamente, in quanto il computer capisce un solo linguaggio di programmazione, il linguaggio macchina.  Un metodo per permettere l'esecuzione di tali programmi è scrivere un interprete. Un interprete per il linguaggio XYZ è un programma, scritto nel linguaggio che si vuole, che prende un programma scritto in XYZ come input e lo esegue. 

Obiettivo della tesi è scrivere un interprete per un semplice linguaggio di programmazione, ad esempio una versione ridotta del C o di Java. Per scrivere tale interprete si può utilizzare il linguaggio di programmazione preferito.

Proposte per Tesi di Secondo Livello

Software CRM

Scopo di questa tesi è fare una ricerca sui software CRM (Customer Relationship Management) disponibili in versione libera/open source. I software CRM si occupano della automazione del front-office di una azienda, e sono pensati per essere utilizzati dalle divisioni marketing, vendite, distribuzioni e supporto al cliente. L'idea è che tutto quello che riguarda il cliente venga gestito in maniera integrata, consentendo di scambiare dati tra le divisioni coinvolte e quindi, almeno in linea di principio, migliorare la soddisfazione del cliente.

Il termine, tuttavia, è molto vago, e software CRM diversi svolgono le loro funzioni in maniera molto dissimile l'uno dall'altro. La tesi consiste nel:

  1. capire cosa si intende veramente con software CRM;
  2. evidenziare un elenco di caratteristiche che i software CRM possono e/o devono avere, che serva da base per poter confrontare tra loro software diversi;
  3. fare una ricerca sui software CRM liberi esistenti, e provarne qualcuno, confrontandoli sia tra di loro che con qualche soluzione commerciale

Software ERP

Scopo di questa tesi è fare una ricerca sui software ERP (Enterprise Resource Planning) disponibili in versione libera/open source. I software ERP si occupano della automazione integrata di tutti gli aspetti di una azienda.

Il termine, tuttavia, è molto vago, e software ERP diversi svolgono le loro funzioni in maniera molto dissimile l'uno dall'altro. La tesi consiste nel:

  1. capire cosa si intende veramente con software ERP;
  2. evidenziare un elenco di caratteristiche che i software ERP possono e/o devono avere, che serva da base per poter confrontare tra loro software diversi;
  3. fare una ricerca sui software ERP liberi esistenti, e provarne qualcuno, confrontandoli sia tra di loro che con qualche soluzione commerciale

Sviluppo di analisi statiche in Ciao Prolog

La tesi si divide essenzialmente nei seguenti punti:

  1. imparare i rudimenti della programmazione logica e del Prolog (in particolare il dialetto Ciao Prolog);
  2. imparare i rudimenti dell'analisi statica di programmi;
  3. imparare a usare CiaoPP (Ciao Pre-Processor), un software che esegue analisi statiche di programmi CiaoProlog;
  4. estendere CiaoPP implementando un paio di analisi aggiuntive, non previste attualmente dal software, ma già sviluppate dal punto di vista teorico.

La tesi è oggettivamente complessa, adatta principalmente a chi voglia proseguire la carriera in ambito prettamente informatico, eventualmente anche attraverso un dottorato di ricerca.

Formalizzazione del gioco "Magic, l'Adunanza"

Magic, l'adunanza è probabilmente il primo e più famoso gioco di carte collezionabili. Nel corso della sua lunga storia, le regole del gioco (ormai giunto alla decima edizione) sono state più volte modificate e ampliate. Il sito della Wizard of the Coast, produttore del gioco, riporta sia le regole di base per giocare, sia le regole complete con tutti i dettagli del gioco (Comprehensive Rules).

Queste ultime dovrebbero servire a fugare ogni possibile dubbio sull'effetto delle azioni dei giocatori. Sebbene in linea di massima questo sia vero, il fatto che il manuale sia scritto in "linguaggio naturale", e la notevole varietà di interazioni possibili tra carte diverse, rende alcune parti delle istruzioni ambigue.

Scopo di questa tesi è provare a modellare Magic tramite un formalismo a oggetti (in prima approssimazione, usando un linguaggio di programmazione ad oggetti standard come Java o, meglio, Ruby). I vantaggi di una descrizione formale del gioco sono da una parte quello di eliminare ogni possibile ambiguità nelle regole, dall'altra aprire la strada alla possibilità di effettuare simulazioni, in maniera automatica, alla ricerca della strategie più efficienti, o delle migliori combinazioni di carte.

In questo momento, il primo passo è realizzare un semplice ambiente software per giocare (in maniera virtuale) a Magic. Il software svolge solo il ruolo di arbitro ed esecutore delle azioni indicate da due giocatori umani.

Prerequisiti: conoscenza abbastanza approfondita del gioco.

Basi di dati in XML

Recentemente si sente molto parlare di linguaggio XML come evoluzione di HTML. In realtà, i due hanno scopi completamente diversi: HTML è un linguaggio per descrivere documenti ipertestuali (le pagine web), mentre XML è un linguaggio generico per descrivere qualunque tipo di dato. Quello che hanno in comune è che entrambi sono linguaggi basati su markup, e che hanno un progenitore unico chiamato SGML.

XML può essere utilizzato efficacemente per memorizzare basi di dati semi-strutturate. Scopo della tesina è studiare il linguaggio XML ed alcune tecnologie per basi di dati ad esso collegate, quali le DTD (Document Type Definition) e i fondamenti di XPath e/o XQuery. Risultato finale deve essere lo sviluppo di una semplice applicazione web che utilizzi XML per memorizzare ed interrogare i dati. Come punto di partenza per tale applicazione si può utilizzare il software realizzato per il progetto finale del corso di Laboratorio di Sistemi Informativi.

Basi di dati in XML

Recentemente si sente molto parlare di linguaggio XML come evoluzione di HTML. In realtà, i due hanno scopi completamente diversi: HTML è un linguaggio per descrivere documenti ipertestuali (le pagine web), mentre XML è un linguaggio generico per descrivere qualunque tipo di dato. Quello che hanno in comune è che entrambi sono linguaggi basati su markup, e che hanno un progenitore unico chiamato SGML.

XML può essere utilizzato efficacemente per memorizzare basi di dati semi-strutturate. Scopo della tesina è studiare il linguaggio XML ed alcune tecnologie per basi di dati ad esso collegate, quali le DTD (Document Type Definition) e i fondamenti di XPath e/o XQuery. Risultato finale deve essere lo sviluppo di una semplice applicazione web che utilizzi XML per memorizzare ed interrogare i dati. Come punto di partenza per tale applicazione si può utilizzare il software realizzato per il progetto finale del corso di Laboratorio di Sistemi Informativi.

Prerequisiti: conoscenza di HTML.

Avventure testuali e linguaggio Inform

I giochi di avventura sono programmi per computer che simulano un ambiente nel quale i giocatori usano comandi (tramite tastiera o mouse) per istruire il personaggio della storia ad interagire con l'ambiente in cui si trova.

Lo scopo della tesina è realizzare una semplice avventura testuale, priva cioè di immagini e in cui il personaggio viene controllato con dei comandi testuali. Nel realizzare l'avventura si utilizzerà il linguaggio di programmazione Inform, realizzato specificatamente a questo scopo.

Prerequisiti: aver giocato almeno una volta ad un gioco di avventura.

Il linguaggio macchina della famiglia ARM

Come sopra, ma si approfondirà l'architettura e il linguaggio macchina dei ARM, attualmente dominanti nel mercato dei tablet, cellulari e dispositivi embedded

Localizzazione di un software didattico: GCompris

GCompris è un software didattico per bambini, una sorta di collezione di vari giochi educativi. Alcuni di questi giochi sono stati adattati alla realtà italiana, ma altri no. Tra questi ultimi c'è un gioco che consente di imparare le regioni di varie nazioni (Francia, Germania, etc..) tra le quali manca però l'Italia.

Scopo della tesina è estendere GCompris con il supporto per le regioni italiane. Le modifiche apportate verranno poi inviate all'autore di GCompris per l'inclusione nelle successive versioni del software.