MagiCum S.r.l. Progetto Inno-School Area Sviluppo Web Autore: Alessio Bernardo Revisione: 1 Data: 23/05/13 Titolo: Sviluppo piattaforma e-learning e sviluppo siti web File: Documentazione tecnica Sito: http://inno-school.netsons.org/ INDICE 1.0 Introduzione ........................................................................................ 2.0 Piattaforme e-learning ........................................................................................ 3.0 Moodle ........................................................................................ 4.0 Requisiti d’installazione ........................................................................................ 4.1 hardware ........................................................................................ 4.2 software ........................................................................................ 5.0 DBMS MySQL ........................................................................................ 6.0 Modello client-server ........................................................................................ 6.1 Server iterativo ........................................................................................ 6.1.1 Esempio server iterativo ........................................................................................ 6.2 Server concorrente ........................................................................................ 6.2.2 Esempio server concorrente ...................................................................................... 6.3 Esempio client ........................................................................................ 1 1 1 1 1 2 2 2 2 3 3 4 6 INDICE FIGURE Figura 1 ........................................................................................ 4 1.0 Introduzione Questo progetto mira a rinnovare il metodo di insegnamento, a partire dalle scuole elementari fino ad arrivare all’università. Si tratta di un nuovo metodo di insegnamento, online. Attraverso delle piattaforme è possibile caricare online lezioni, slaid, immagini, filmati, quiz riguardanti le lezioni con possibilità di valutazione e molto altro ancora. Tutto ciò porta sempre più ad un informatizzazione della scuola. Infatti se uno studente dovesse risultare assente, potrà studiare la lezione da casa. Basta una connessione ad internet ed un Pc. 2.0 Piattaforme e-learning Tutto ciò è possibile grazie alle cosiddette piattaforme e-learning. Si tratta di piattaforme basate su database in grado di raccogliere e salvare dati, rendendoli disponibili in ogni momento agli utenti registrati. L’utente, una volta fatto il login, è in grado di accedere ai dati, alle lezioni, ai quiz. Inoltre esiste la possibilità di creare dei forum o chat con i quali si può comunicare con gli altri utenti. Ci sono varie piattaforme e-learning disponibili, come ad esempio moodle, cloudcourse (google), macromedia authorware (adobe). 3.0 Moodle Moodle consente una gestione stratificata della piattaforma con i ruoli (admin, docente, editor, tutor, cotutor, ecc.) e una ampia offerta delle attività previste per il corso (Forum, Diari, Blog, Quiz, Risorse, Sondaggi, Compiti, Chat, Workshop, ecc.). Consente a docenti e tutor valide possibilità di tracciamento delle attività degli allievi e crea in automatico report dettagliati. Il suo punto di forza maggiore sta nello sviluppo più rapido e significativo di tutte le altre piattaforme e-learning. Ciò è dovuto al fatto che la sua community è una delle più numerose e partecipate a livello internazionale. 4.0 Requisiti di installazione Per poter installare moodle su un Pc o su un server sono richiesti dei requisiti minimi, sia hardware, sia software. 4.1 Hardware Moodle necessita di circa 150 MB di spazio sul disco fisso, ma va considerato che è necessario ulteriore spazio per l'upload del materiale da distribuire, e un minimo di 256 MB di memoria RAM. Stando alle linee guida formulate dalla community, è consigliabile disporre di almeno 1 GB di memoria RAM, e tenere conto che per ogni 50 utenti connessi il sistema può richiedere fino ad 1 GB di RAM. 1 4.2 Software Moodle è compatibile con qualsiasi computer che supporti PHP (con sistemi operativi come Unix, Linux, Windows, Mac OS X) e si integra con diversi tipi di database (anche se la soluzione ottimale è anch'essa open: MySQL). Inoltre si tratta di un software open source. 5.0 DBMS MySQL Come accennato in precedenza il DBMS ottimale da utilizzare è MySQL. Per poterlo utilizzare è necessario l’installazione di un web server come easyPHP o XAMPP. L’importante è che supportino PHP5. Prima di iniziare l’installazione della piattaforma è necessario quindi creare il database in MySQL, sul quale poi opererà la nostra piattaforma e-learning (in questo caso moodle). 6.0 Modello client-server Tutte le piattaforme e-learning sono basate sul modello client-server. Il client (utente) accedendo al server, accede a tutte le informazioni contenute da esso. Dopodiché il client si disconnette chiudendo la sessione. La presenza di un server permette ad un certo numero di client di condividerne le risorse, lasciando che sia il server a gestire gli accessi alle risorse per evitare conflitti di utilizzazione. Figura 1 6.1 Server iterativo I server iterativi sono quei server in grado di comunicare con un client alla volta. Viene usato il protocollo UDP. 2 6.1.1 Esempio server iterativo import java.io.*; import java.net.*; public class serverIterativo{ public static void main(String[] args) throws Exception{ StringBuffer revline; int len; String line; ServerSocket listen_socket = new ServerSocket(6789); System.out.println("in attesa sulla porta 6789"); while(true){ Socket conn = listen_socket.accept(); System.out.println("Ricevuta richiesta di servizio"); // preparazione degli stream di input e output InputStream sin = conn.getInputStream(); BufferedReader in = new BufferedReader(new InputStreamReader(sin)); PrintStream out = new PrintStream(conn.getOutputStream()); //lettura riga line = in.readLine(); if(line == null) {System.out.println("Ricevuta linee vuota");} else{ //rovesciamento riga len = line.length(); revline = new StringBuffer(len); for(int i = len-1; i>=0;i--) revline.insert(len-1-i,line.charAt(i)); //stampa linea rovesciata out.println(revline); System.out.println("Inviata risposta"); } } conn.close(); } } 6.2 Server concorrente Il server è in grado di soddisfare più richieste contemporaneamente ricevute da diversi client 3 6.2.2 Esempio server concorrente import java.io.*; import java.net.*; public class server extends Thread { public final static int DEFAULT_PORT = 6789; protected int port; protected ServerSocket listen_socket; //Crea un ServerSocket che attende la connessione; inizia il thread public server(int port) { if (port == 0) port = DEFAULT_PORT; this.port = port; try {listen_socket = new ServerSocket(port);} catch (IOException e) {fail(e, "Ex creating server socket");} System.out.println("Server: listening on port" + port); this.start(); } //Body del thread del server. Aspetta ed accetta connessioni da //client. Per ogni connessione, crea un oggetto Connection per //gestire la comunicazione attraverso il nuovo socket. public void run(){ try { while(true) { Socket client_socket = listen_socket.accept(); Connection c = new Connection(client_socket); } } catch(Throwable t){}; //Fa partire il server, in attesa su una porta opzionalmente // specificata public static void main(String[] args) { int port = 0; if (args.length == 1) { try {port = Integer.parseInt(args[0]);} catch (NumberFormatException e) {port = 0;} } new server(port); } }// fine classe server 4 //La classe seguente e' il thread che gestisce tutta la comunicazione col //client class Connection extends Thread { protected protected protected protected Socket client; BufferedReader in; InputStream sin; PrintStream out; //Inizializza gli stream e avvia il thread public Connection(Socket client_socket) { client = client_socket; try { sin = client.getInputStream(); in = new BufferedReader(new InputStreamReader(sin)); out = new PrintStream(client.getOutputStream()); } catch (IOException e) { try {client.close();} catch (IOException e2){}; System.err.println("Ex. while getting socket streams:" + e); return; } this.start(); } //Legge una linea, la rovescia e la rimanda indietro public void run() { String line; StringBuffer revline; int len; try { for(int i=len-1;i>=0;i--) { //Legge una linea line = in.readLine(); if(line == null) break; //la rovescia len = line.length(); revline = new StringBuffer(len); for(int i=len-1;i>=0;i--) revline.insert(len-1-i,line.charAt(i)); //scrive la linea rovesciata out.println(revline); } } 5 catch (IOException e){} finally {try {client.close();} catch (IOException e2){};} } 6.3 Esempio client import java.io.*; import java.net.*; public class client{ public static final int DEFAULT_PORT = 6789; public static void usage(){ System.out.println("Usage: java client <hostname> [<port>]"); System.exit(0); } public static void main(String args[]){ int port = DEFAULT_PORT; Socket s = null; if((args.length != 1 ) && (args.length != 2 )) usage(); if(args.length == 1 ) port = DEFAULT_PORT; else { try {port = Integer.parseInt(args[1]);} catch (NumberFormatException e) {usage();} } try{ //ESEGUE RICHIESTE E LE ELABORA finally{ try{if(s!= null) s.close();} catch(IOException e2){} } } } try{ s = new Socket(args[0],port); InputStream sin = s.getInputStream(); BufferedReader fromServer = new BufferedReader(new InputStreamReader(sin)); OutputStream sout = s.getOutputStream(); PrintWriter toServer = new PrintWriter(new OutputStreamWriter(sout)); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Connected to " + s.getInetAddress() + ":"+s.getPort()); String line; while(true){ 6 System.out.print(">"); line = null; line = in.readLine(); if(line.equals(""))break; toServer.println(line); toServer.flush(); line = fromServer.readLine(); if(line == null){ System.out.println("Connection closed by server"); break; } System.out.println(line); } } catch (IOException e){System.err.println(e);} 7