862 resultados para MySQL Server
Resumo:
The Peer-to-Peer network paradigm is drawing the attention of both final users and researchers for its features. P2P networks shift from the classic client-server approach to a high level of decentralization where there is no central control and all the nodes should be able not only to require services, but to provide them to other peers as well. While on one hand such high level of decentralization might lead to interesting properties like scalability and fault tolerance, on the other hand it implies many new problems to deal with. A key feature of many P2P systems is openness, meaning that everybody is potentially able to join a network with no need for subscription or payment systems. The combination of openness and lack of central control makes it feasible for a user to free-ride, that is to increase its own benefit by using services without allocating resources to satisfy other peers’ requests. One of the main goals when designing a P2P system is therefore to achieve cooperation between users. Given the nature of P2P systems based on simple local interactions of many peers having partial knowledge of the whole system, an interesting way to achieve desired properties on a system scale might consist in obtaining them as emergent properties of the many interactions occurring at local node level. Two methods are typically used to face the problem of cooperation in P2P networks: 1) engineering emergent properties when designing the protocol; 2) study the system as a game and apply Game Theory techniques, especially to find Nash Equilibria in the game and to reach them making the system stable against possible deviant behaviors. In this work we present an evolutionary framework to enforce cooperative behaviour in P2P networks that is alternative to both the methods mentioned above. Our approach is based on an evolutionary algorithm inspired by computational sociology and evolutionary game theory, consisting in having each peer periodically trying to copy another peer which is performing better. The proposed algorithms, called SLAC and SLACER, draw inspiration from tag systems originated in computational sociology, the main idea behind the algorithm consists in having low performance nodes copying high performance ones. The algorithm is run locally by every node and leads to an evolution of the network both from the topology and from the nodes’ strategy point of view. Initial tests with a simple Prisoners’ Dilemma application show how SLAC is able to bring the network to a state of high cooperation independently from the initial network conditions. Interesting results are obtained when studying the effect of cheating nodes on SLAC algorithm. In fact in some cases selfish nodes rationally exploiting the system for their own benefit can actually improve system performance from the cooperation formation point of view. The final step is to apply our results to more realistic scenarios. We put our efforts in studying and improving the BitTorrent protocol. BitTorrent was chosen not only for its popularity but because it has many points in common with SLAC and SLACER algorithms, ranging from the game theoretical inspiration (tit-for-tat-like mechanism) to the swarms topology. We discovered fairness, meant as ratio between uploaded and downloaded data, to be a weakness of the original BitTorrent protocol and we drew inspiration from the knowledge of cooperation formation and maintenance mechanism derived from the development and analysis of SLAC and SLACER, to improve fairness and tackle freeriding and cheating in BitTorrent. We produced an extension of BitTorrent called BitFair that has been evaluated through simulation and has shown the abilities of enforcing fairness and tackling free-riding and cheating nodes.
Resumo:
Il lavoro svolto da Fabrizio Amici ha suscitato immediatamente il mio interesse in primo luogo perché quando si parla di virtualizzazione con vari fornitori e commerciali, questi la indicano come una soluzione che possa coprire a 360 gradi le esigenze di un Datacenter. Questo è vero nella misura in cui il progetto di virtualizzazione e consolidamento dei Server sia svolto sotto certi criteri progettuali. Per esperienza personale non ho trovato in letteratura lavori che potessero fornire indicazioni approfondite sui parametri da considerare per una corretta progettazione di sistemi di virtualizzazione, spesso ci si avvale di vari fornitori che accennano ad eventuali criticità. Un lavoro come quello proposto da Fabrizio va esattamente nella direzione di rispondere a quelle domande che nascono quando si affronta la tematica della virtualizzazione e soprattutto cerca di capire quali siano i limiti intrinseci della virtualizzazione. In particolare nei vari confronti che, con piacere, ho avuto con Fabrizio, il mio suggerimento è stato quello di esasperare il sistema che aveva assemblato, caricando i test sino ad osservarne i limiti. Dai vari test sono emerse sia conferme, sia inaspettati comportamenti del sistema che rendono ancora più chiaro che solo una prova sperimentale può essere il banco di prova di un sistema complesso. L'elemento che colpisce maggiormente analizzando i risultati è il diverso comportamento in funzione delle CPU utilizzate. I risultati indicano chiaramente che le prestazioni sono fortemente influenzate da come si distribuiscono i core nelle macchine virtuali. Dalla lettura dei risultati viene confermato che i sistemi virtualizzati devono essere progettati per non raggiungere il 70-80% della componente più critica (RAM, CPU) ma anche che sono fortemente sensibili alle disponibilità prestazionali dei sistemi al contorno (Rete, SAN/Dischi). L'approccio metodico sperimentale ed i risultati forniscono una serie di elementi che permettono di affrontare la tematica della virtualizzazione in un quadro generale più solido, offrendo fra l'altro spunti di ricerca ulteriori anche in previsione di nuove soluzioni che vari costruttori, sviluppatori e system integrator proporranno nei prossimi anni. Ing. Massimiliano Casali Esperto di Gestione ICT, Pubblica Amministrazione,Repubblica di San Marino
Resumo:
Nello sviluppo di sistemi informatici si sono affermate numerose tecnologie, che vanno utilizzate in modo combinato e, possibilmente sinergico. Da una parte, i sistemi di gestione di basi di dati relazionali consentono una gestione efficiente ed efficace di dati persistenti, condivisi e transazionali. Dall'altra, gli strumenti e i metodi orientati agli oggetti (linguaggi di programmazione, ma anche metodologie di analisi e progettazione) consentono uno sviluppo efficace della logica applicativa delle applicazioni. E’ utile in questo contesto spiegare che cosa s'intende per sistema informativo e sistema informatico. Sistema informativo: L'insieme di persone, risorse tecnologiche, procedure aziendali il cui compito è quello di produrre e conservare le informazioni che servono per operare nell'impresa e gestirla. Sistema informatico: L'insieme degli strumenti informatici utilizzati per il trattamento automatico delle informazioni, al fine di agevolare le funzioni del sistema informativo. Ovvero, il sistema informatico raccoglie, elabora, archivia, scambia informazione mediante l'uso delle tecnologie proprie dell'Informazione e della Comunicazione (ICT): calcolatori, periferiche, mezzi di comunicazione, programmi. Il sistema informatico è quindi un componente del sistema informativo. Le informazioni ottenute dall'elaborazione dei dati devono essere salvate da qualche parte, in modo tale da durare nel tempo dopo l'elaborazione. Per realizzare questo scopo viene in aiuto l'informatica. I dati sono materiale informativo grezzo, non (ancora) elaborato da chi lo riceve, e possono essere scoperti, ricercati, raccolti e prodotti. Sono la materia prima che abbiamo a disposizione o produciamo per costruire i nostri processi comunicativi. L'insieme dei dati è il tesoro di un'azienda e ne rappresenta la storia evolutiva. All'inizio di questa introduzione è stato accennato che nello sviluppo dei sistemi informatici si sono affermate diverse tecnologie e che, in particolare, l'uso di sistemi di gestione di basi di dati relazionali comporta una gestione efficace ed efficiente di dati persistenti. Per persistenza di dati in informatica si intende la caratteristica dei dati di sopravvivere all'esecuzione del programma che li ha creati. Se non fosse cosi, i dati verrebbero salvati solo in memoria RAM e sarebbero persi allo spegnimento del computer. Nella programmazione informatica, per persistenza si intende la possibilità di far sopravvivere strutture dati all'esecuzione di un programma singolo. Occorre il salvataggio in un dispositivo di memorizzazione non volatile, come per esempio su un file system o su un database. In questa tesi si è sviluppato un sistema che è in grado di gestire una base di dati gerarchica o relazionale consentendo l'importazione di dati descritti da una grammatica DTD. Nel capitolo 1 si vedranno più in dettaglio cosa di intende per Sistema Informativo, modello client-server e sicurezza dei dati. Nel capitolo 2 parleremo del linguaggio di programmazione Java, dei database e dei file XML. Nel capitolo 3 descriveremo un linguaggio di analisi e modellazione UML con esplicito riferimento al progetto sviluppato. Nel capitolo 4 descriveremo il progetto che è stato implementato e le tecnologie e tools utilizzati.
Resumo:
In questa Tesi forniamo una libreria di funzioni aritmetiche che operano in spazio logaritmico rispetto all'input. Partiamo con un'analisi dei campi in cui è necessario o conveniente porre dei limiti, in termini di spazio utilizzato, alla computazione di un determinato software. Vista la larga diffusione del Web, si ha a che fare con collezioni di dati enormi e che magari risiedono su server remoti: c'è quindi la necessità di scrivere programmi che operino su questi dati, pur non potendo questi dati entrare tutti insieme nella memoria di lavoro del programma stesso. In seguito studiamo le nozioni teoriche di Complessità, in particolare quelle legate allo spazio di calcolo, utilizzando un modello alternativo di Macchina di Turing: la Offline Turing Machine. Presentiamo quindi un nuovo “modello” di programmazione: la computazione bidirezionale, che riteniamo essere un buon modo di strutturare la computazione limitata in spazio. Forniamo poi una “guida al programmatore” per un linguaggio di recente introduzione, IntML, che permettere la realizzazione di programmi logspace mantenendo però il tradizionale stile di programmazione funzionale. Infine, per mostrare come IntML permetta concretamente di scrivere programmi limitati in spazio, realizziamo una libreria di funzioni aritmetiche che operano in spazio logaritmico. In particolare, mostriamo funzioni per calcolare divisione intera e resto sui naturali, e funzioni per confrontare, sommare e moltiplicare numeri espressi come parole binarie.
Resumo:
Viene presentato un sito web per definire e somministrare questionari clinici per la reumatologia. In particolare viene definito il questionario PRO-CLARA creato dal prof. Fausto Salaffi.
Resumo:
Il Progetto XCModel, che da dieci anni si sviluppa e si perfeziona col contributo di varie persone, consente la progettazione di scene 3D e la resa fotorealistica. Esso si appoggia sulle funzionalita' grafiche di X-Window in Linux: si tratta di un ambiente in costante evoluzione, dovuta sia alle continue innovazioni hardware che ai cambiamenti degli standard. XCModel e' composto da vari pacchetti, ognuno dei quali specializzato nel trattare un particolare aspetto della modellazione o della resa (curve, superfici, textures, luci, ...) e che si presentano come applicazioni dotate di una sofisticata interfaccia grafica. Tutte attingono alle funzioni della Libreria XTools, che fornisce numerose primitive grafiche facenti uso delle potenzialita' di X-Window. I recenti cambiamenti nelle specifiche di X-Org, ed in particolare la de- standardizzazione del backing-store, ha obbligato il team di XCModel ad una consistente riprogettazione di XTools e di tutti i pacchetti che su di esso s'appoggiano. S'e' colta l'occasione per un massiccio debugging e per modificare i pacchetti in base alle impressioni emerse nel corso degli anni da parte degli utilizzatori, primi tra tutti gli studenti del corso di Grafica tenuto dal Prof. Giulio Casciola, project-manager di XCModel: questa e' un'ulteriore testimonianza del continuo adattamento e dell'aggiornabilita' del Progetto! Nella fattispecie, ci si occupera' delle modifiche effettuate in particolare al pacchetto XCSurf, finalizzato alla creazione ed alla modifica di curve e superfici 3D da utilizzarsi successivamente per la creazione delle scene: tale pacchetto e' di fatto risultato il pie' avulso dalle specifiche di XTools, il che ha costretto ad un massiccio intervento al codice del programma, ma d'altro canto ha consentito una standardizzazione del pacchetto in linea con gli altri, in particolare ridisegnandone l'interfaccia. Nel primo capitolo si effettuera' una veloce panoramica dell'ambiente XCModel e delle problematiche emerse dai cambiamenti degli standard di X-Window. Il secondo capitolo affrontera' un'ampia analisi dell'hardware, del software e dei paradigmi che caratterizzano la grafica interattiva, e gli ambienti necessari per interagire con essa ed esaminando i vari obiettivi raggiungibili. Infine, il terzo capitolo analizzera' nel dettaglio le modifiche effettuate ai pacchetti di XCModel ed in particolare ad XCSurf per l'adattamento ai nuovi standard, nel rispetto delle politiche e delle linee guida dettate dalla grafica interattiva.
Resumo:
Il Cloud Storage è un modello di conservazione dati su computer in rete, dove i dati stessi sono memorizzati su molteplici server, reali e/o virtuali, generalmente ospitati presso strutture di terze parti o su server dedicati. Tramite questo modello è possibile accedere alle informazioni personali o aziendali, siano essi video, fotografie, musica, database o file in maniera “smaterializzata”, senza conoscere l’ubicazione fisica dei dati, da qualsiasi parte del mondo, con un qualsiasi dispositivo adeguato. I vantaggi di questa metodologia sono molteplici: infinita capacita’ di spazio di memoria, pagamento solo dell’effettiva quantità di memoria utilizzata, file accessibili da qualunque parte del mondo, manutenzione estremamente ridotta e maggiore sicurezza in quanto i file sono protetti da furto, fuoco o danni che potrebbero avvenire su computer locali. Google Cloud Storage cade in questa categoria: è un servizio per sviluppatori fornito da Google che permette di salvare e manipolare dati direttamente sull’infrastruttura di Google. In maggior dettaglio, Google Cloud Storage fornisce un’interfaccia di programmazione che fa uso di semplici richieste HTTP per eseguire operazioni sulla propria infrastruttura. Esempi di operazioni ammissibili sono: upload di un file, download di un file, eliminazione di un file, ottenere la lista dei file oppure la dimensione di un dato file. Ogniuna di queste richieste HTTP incapsula l’informazione sul metodo utilizzato (il tipo di richista, come GET, PUT, ...) e un’informazione di “portata” (la risorsa su cui effettuare la richiesta). Ne segue che diventa possibile la creazione di un’applicazione che, facendo uso di queste richieste HTTP, fornisce un servizio di Cloud Storage (in cui le applicazioni salvano dati in remoto generalmene attraverso dei server di terze parti). In questa tesi, dopo aver analizzato tutti i dettagli del servizio Google Cloud Storage, è stata implementata un’applicazione, chiamata iHD, che fa uso di quest’ultimo servizio per salvare, manipolare e condividere dati in remoto (nel “cloud”). Operazioni comuni di questa applicazione permettono di condividere cartelle tra più utenti iscritti al servizio, eseguire operazioni di upload e download di file, eliminare cartelle o file ed infine creare cartelle. L’esigenza di un’appliazione di questo tipo è nata da un forte incremento, sul merato della telefonia mobile, di dispositivi con tecnologie e con funzioni sempre più legate ad Internet ed alla connettività che esso offre. La tesi presenta anche una descrizione delle fasi di progettazione e implementazione riguardanti l’applicazione iHD. Nella fase di progettazione si sono analizzati tutti i requisiti funzionali e non funzionali dell’applicazione ed infine tutti i moduli da cui è composta quest’ultima. Infine, per quanto riguarda la fase di implementazione, la tesi presenta tutte le classi ed i rispettivi metodi presenti per ogni modulo, ed in alcuni casi anche come queste classi sono state effettivamente implementate nel linguaggio di programmazione utilizzato.