Gli elaborati possono essere svolti singolarmente o in gruppi di 2
persone. Gruppi più ampi non sono possibili. E' previsto che lo
stesso gruppo lavori sia sul progetto in Java che su quello in PHP.
L'esame si svolgerà in ogni caso singolarmente.
I componenti di un gruppo possono sostenere l'esame in
sessioni diverse, ma è necessario che il gruppo venga
preventivamente registrato (contattare il docente).
Ciascun gruppo, completati gli elaborati dovrà preparare una breve
relazione che commenti il lavoro svolto. Per quanto rigurda
l'elaborato Java, è sufficiente la documentazione Javadoc prodotta
automaticamente.
Il codice DEVE essere opportunamente indentato e commentato.
Comunicazioni riguardanti le consegne e l'esame avverranno anche
mediante posta elettronica e pubblicazione di avvisi sulla pagina
comunicazioni.htm.
POP3 (Post Office Protocol - Version 3) è il protocollo comunemente utilizzato da molti internet provider per fornire agli utenti una casella di posta in arrivo. Il progetto consiste nel preparare un semplice client che permetta all'utente di leggere i propri messaggi di posta ed eventualmente scaricarli in files locali . Il progetto, oltre a permettere di approfondire minimamente l'utilizzo dei socket in Java, permette l'approfondimento di un protocollo molto diffuso.
Per prima cosa è necessario leggere la parte introduttiva delle specifiche del protocollo: rfc1939. Inoltre è meglio esercitarsi utilizzando il programma telnet da linea di comando. Esempio di sessione:
C:\>telnet mailserver.dti.unimi.it 110 +OK CommuniGate Pro POP3 Server 4.0.6 ready &kt;219733.1103287239@dti.unimi.it> USER sassi +OK please send the PASS PASS ******************* +OK 2 messages (15879 bytes) LIST +OK 2 messages 1 8443 2 7436 . STAT +OK 2 15879 RETR 1 +OK 8443 bytes will follow Return-Path: <sassi@dti.unimi.it> Received: from [159.149.71.47] (HELO DONDOLO) by dti.unimi.it (CommuniGate Pro SMTP 4.0.6) with SMTP id 1474511 for sassi@dti.unimi.it; Fri, 17 Dec 2004 13:39:39 +0100 Message-ID: <055001c4e433$cb2681e0$f4451897@DONDOLO> ... ... DELE 1 +OK marked deleted DELE 2 +OK marked deleted RETR 3 -ERR no such message QUIT +OK CommuniGate Pro POP3 Server connection closed C:\>
I comandi POP3 che possono tornarvi utili sono:
USER PASS STAT LIST RETR DELE NOOP RSET QUIT
Il programma, deve leggere dal file di configurazione "RCconf.ini" il nome del server da contattare, username e password (fare il login utilizzando i comandi USER e PASS). Potete utilizzare un qualunque server POP3 dove abbiate un account (Libero, Tin, ...); alternativamente, il server POP3 della vostra casella email all'università va benone (ganimede.crema.unimi.it).
Una volta stabilita la connessione, il programma deve presentare all'utente una lista dei messaggi (potete utilizzare i comandi LIST e STAT, metterne gli output in una stringa e quindi offire all'utente le infomazioni ottenute opportunamente formattate). Per ciascun messaggio deve presentare il numero progressivo, il mittente, il soggetto e la dimensione in Kbytes. L'utente a questo punto può fare alcune cose (è di fatto un interprete di comandi):
In ogni caso, il programma deve sempre verificare la risposta del server (+OK o -ERR) e agire di conseguenza.
Il progetto può sembrare complesso, ma è solamente inusuale. La connessione con il server POP3 si ottiene attraverso la classe Socket contenuta nel pacchetto java.net, che quindi va importato all'inizio del programma.
import java.net.*;
Nel vostro programma, dovete istanziare un oggetto Socket e connetterlo al server POP3 sulla porta standard (110) semplicemente con:
webSocket = new Socket(nomeServer, 110);
dove nomeServer è semplicemente una stringa con l'indirizzo IP del server. La connessione potrebbe non riuscire; dovete preparvi a gestire le eccezioni sollevate. All'oggetto Socket sono connessi due Socket binari. E' possibile accedere ai due streams con i metodi getOutputStream() e getInputStream(). E' sempre conveniente "incartare" i due streams in modo da poterli manipolare più facilmente, come mostrato nell'esempio seguente:
webOut = new PrintWriter(webSocket.getOutputStream(), true); webIn = new BufferedReader(new InputStreamReader(webSocket.getInputStream()));
Da questo punto in poi, lavorare sui due streams è pressoché identico a quanto visto per i files: potete scrivere sullo stream di uscita (cioè inviare comandi al server POP3) con il metodo print() e leggere da quello di ingresso (la risposta del server POP3) con il metodo realLine().
Prima di iniziare questo progetto:
Forza 4 è un gioco in cui due giocatori infilano a turno pedine colorate in
una scacchiera verticale di 7 colonne per 6 righe:
/---------------------------\ 6| | | | | | | | |---|---|---|---|---|---|---| 5| | | | | | | | |---|---|---|---|---|---|---| 4| | | | | # | | | |---|---|---|---|---|---|---| 3| | | | # | o | | | |---|---|---|---|---|---|---| 2| | | # | # | o | | | |---|---|---|---|---|---|---| 1| | # | o | # | o | o | | \---------------------------/ A B C D E F G
Ciascun giocatore ha a disposizione 21 pedine e vince il giocatore che per primo ne riesce ad allineare 4 (in orizzontale, verticale o nella direzione diagonale). Le pedine vengono infilate dall'alto e cadono nella prima posizione libera. L'elaborato consiste nel preparare un programma in Java che permetta di giocare a forza 4 contro il computer (sembra difficile ma non lo è).
Il programma deve iniziare chiedendo all'utente se vuole iniziare per primo. L'utente specifica la mossa indicando la colonna in cui vuole lasciare cadere la pedina (il programma calcolerà la riga opportuna).
Dopo ogni mossa dell'utente il programma stampa la scacchiera, quindi decide la mossa del computer e ristampa la saccchiera con aggiunta la nuova pedina. La mossa del computer (la colonna) viene indicata sotto la scacchiera.
La logica secondo la quale il computer sceglie la mossa è la parte centrale del programma. Per quanto riguarda l'elaborato le regole da implementare sono:
Una schermata tipo deve essere simile a:
Pedine nella scacchiera: 5 'o'=umano; '#'=computer /---------------------------\ 6| | | | | | | | |---|---|---|---|---|---|---| 5| | | | | | | | |---|---|---|---|---|---|---| 4| | | | | | | | |---|---|---|---|---|---|---| 3| | | | | | | | |---|---|---|---|---|---|---| 2| | | | o | | | | |---|---|---|---|---|---|---| 1| | # | # | # | o | | | \---------------------------/ A B C D E F G Ho messo la mia pedina nella colonna B Umano, in quale colonna muovi? _
Dopo ogni mossa il programma deve verificare se uno dei due contendenti ha vinto (ci sono nella scacchiera 4 pedine allineate), nel qual caso lo indica sotto la scacchiera. Può accadere che i due contendenti arrivino ad una patta (la scacchiera è piena e nessuno ha vinto); anche questa eventualità va evidenziata sotto la scacchiera.
Oltre alle regole indicate potete implemetare quelle che ritenete opportune (contribuirà solo per il 30 e Lode).
La regola numero
4 implica che il programma verifichi ogni possibile mossa umana a fronte
di una qualsiasi mossa del camputer. Cioè esplori tutte le combinazioni
(che sono al più 49) "mossa computer" + "mossa umano".
Al termine di ogni coppia di mosse il computer avrà allineato num'#' pedine,
mentre l'umano num'o'.
Per il computer, una possibile strategia
è quella di scegliere la mossa che, rispettando le altre
regole, massimizzi la differenza num'#'-num'o' (a patto che num'o' sia
diverso da 4).
Prima di iniziare questo progetto:
Ai fini della valutazione verranno considerate la semplicità e la chiarezza del codice sviluppato per risolvere il problema. Parzioni di codice che implementino inutili complicazioni tolgono punti. Al contrario, eventuali integrazioni a quanto richiesto, quando concordate con il docente saranno valutate positivamente.
Per l'esame è necessario accompagnare il progetto con una breve relazione che spieghi sinteticamente le scelte fatte e la struttura del codice. E' importante essere sintetici (max 1 o 2 pagine).
Il polo di Crema vuole istituire un sito per i sondaggi online e ve ne affida l'incarico. Ciascun sondaggio è a risposta multipla e deve permettere un massimo di 5 alternative. Inoltre un sondaggio rimane attivo un mese a partire dal momento in cui è stato predisposto. Esempio:
"Volete che vengano piantati più alberi nell'area dell'università?" 1) No; 2) Si, ma solo alcuni lungo il viale; 3) Si, ma solo alberi a basso fusto; 4) Sinceramente non mi interessa.
L'utente occasionale deve poter votare anche senza alcuna registrazione. Per evitare che lo stesso utente voti più di una volta, utilizzate un cookie.
Il file sondaggi.php sarà la homepage del sito e per i cinque sondaggi più votati (e non scaduti) deve presentare un istogramma delle preferenze (utilizzare una immagine di un pixel e deformatela, come abbiamo visto durante la lezione 13). Inoltre deve contenere un link alla pagina di registrazione degli utenti (registrazione.php) e alla pagina di inserimento di un nuovo sondaggio (inserisci.php). Infatti, Gli utenti che vogliono inserire un nuovo sondaggio devono registrarsi e scegliere una password. Ogni utente può creare un massimo di 3 sondaggi.
Infine, attraverso la pagina cerca.php, gli utenti devono poter controllare l'andamento dei sondaggi dopo averli cercati per parola chiave o attraverso il nome dell'utente che li ha inseriti.
Creare il database MySQL opportuno, contenente le tabelle degli utenti e quella dei sondaggi.
La dieta degli studenti universitari non è spesso ottimale. Talvolta anche se si parte con la precisa intenzione di cucinare qualcosa di nuovo, ci si ferma, una volta aperto un ricettario, di fronte al fatto che gli ingredienti richiesti non coincidono con quanto contenuto nel frigorifero.
L'associazione degli studenti vi incarica di preparare un sito dove sia possibile indicare quanto disponibile nel frigorifero ed ottenere di conseguenza una serie di ricette che contengano tali ingredienti. Obiettivo di questo elaborato è quello di costruire il ricettario on-line.
Costruire per prima cosa il database delle ricette, che contenga, oltre al testo della ricetta vera e propria, una lista degli ingredienti (che verrà utilizzata per la ricerca). Inoltre costruire il database degli utenti che devono essere registrati per inserire nuove ricette.
Il progetto si compone dei file:
L'ufficio di un piccolo editore è pieno di bozze di libri. Infatti gli autori mandano per posta ordinaria le minute dei loro lavori, sperando di essere pubblicati. Il numero delle bozze è molto elevato e la loro gestione diventa via via più complessa. Talvolta una bozza scompare per giorni nel disordine dell'ufficio.
Per risolvere almeno parzialmente il problema, l'editore decide di invitare i futuri autori ad inviare bozze solo in formato elettronico. Incarica quindi voi di preparare il sito.
Il progetto prevede che prepariate il sito per la gestione delle bozze.
©2004 Roberto Sassi