998 resultados para Ballerina,Cloud Native,API,Linguaggio di Programmazione
Resumo:
La crescente disponibilità di dispositivi meccanici e -soprattutto - elettronici le cui performance aumentano mentre il loro costo diminuisce, ha permesso al campo della robotica di compiere notevoli progressi. Tali progressi non sono stati fatti unicamente per ciò che riguarda la robotica per uso industriale, nelle catene di montaggio per esempio, ma anche per quella branca della robotica che comprende i robot autonomi domestici. Questi sistemi autonomi stanno diventando, per i suddetti motivi, sempre più pervasivi, ovvero sono immersi nello stesso ambiente nel quale vivono gli essere umani, e interagiscono con questi in maniera proattiva. Essi stanno compiendo quindi lo stesso percorso che hanno attraversato i personal computer all'incirca 30 anni fa, passando dall'essere costosi ed ingombranti mainframe a disposizione unicamente di enti di ricerca ed università, ad essere presenti all'interno di ogni abitazione, per un utilizzo non solo professionale ma anche di assistenza alle attività quotidiane o anche di intrattenimento. Per questi motivi la robotica è un campo dell'Information Technology che interessa sempre più tutti i tipi di programmatori software. Questa tesi analizza per prima cosa gli aspetti salienti della programmazione di controllori per robot autonomi (ovvero senza essere guidati da un utente), quindi, come l'approccio basato su agenti sia appropriato per la programmazione di questi sistemi. In particolare si mostrerà come un approccio ad agenti, utilizzando il linguaggio di programmazione Jason e quindi l'architettura BDI, sia una scelta significativa, dal momento che il modello sottostante a questo tipo di linguaggio è basato sul ragionamento pratico degli esseri umani (Human Practical Reasoning) e quindi è adatto alla implementazione di sistemi che agiscono in maniera autonoma. Dato che le possibilità di utilizzare un vero e proprio sistema autonomo per poter testare i controllori sono ridotte, per motivi pratici, economici e temporali, mostreremo come è facile e performante arrivare in maniera rapida ad un primo prototipo del robot tramite l'utilizzo del simulatore commerciale Webots. Il contributo portato da questa tesi include la possibilità di poter programmare un robot in maniera modulare e rapida per mezzo di poche linee di codice, in modo tale che l'aumento delle funzionalità di questo risulti un collo di bottiglia, come si verifica nella programmazione di questi sistemi tramite i classici linguaggi di programmazione imperativi. L'organizzazione di questa tesi prevede un capitolo di background nel quale vengono riportare le basi della robotica, della sua programmazione e degli strumenti atti allo scopo, un capitolo che riporta le nozioni di programmazione ad agenti, tramite il linguaggio Jason -quindi l'architettura BDI - e perché tale approccio è adatto alla programmazione di sistemi di controllo per la robotica. Successivamente viene presentata quella che è la struttura completa del nostro ambiente di lavoro software che comprende l'ambiente ad agenti e il simulatore, quindi nel successivo capitolo vengono mostrate quelle che sono le esplorazioni effettuate utilizzando Jason e un approccio classico (per mezzo di linguaggi classici), attraverso diversi casi di studio di crescente complessità; dopodiché, verrà effettuata una valutazione tra i due approcci analizzando i problemi e i vantaggi che comportano questi. Infine, la tesi terminerà con un capitolo di conclusioni e di riflessioni sulle possibili estensioni e lavori futuri.
Resumo:
Modern embedded systems embrace many-core shared-memory designs. Due to constrained power and area budgets, most of them feature software-managed scratchpad memories instead of data caches to increase the data locality. It is therefore programmers’ responsibility to explicitly manage the memory transfers, and this make programming these platform cumbersome. Moreover, complex modern applications must be adequately parallelized before they can the parallel potential of the platform into actual performance. To support this, programming languages were proposed, which work at a high level of abstraction, and rely on a runtime whose cost hinders performance, especially in embedded systems, where resources and power budget are constrained. This dissertation explores the applicability of the shared-memory paradigm on modern many-core systems, focusing on the ease-of-programming. It focuses on OpenMP, the de-facto standard for shared memory programming. In a first part, the cost of algorithms for synchronization and data partitioning are analyzed, and they are adapted to modern embedded many-cores. Then, the original design of an OpenMP runtime library is presented, which supports complex forms of parallelism such as multi-level and irregular parallelism. In the second part of the thesis, the focus is on heterogeneous systems, where hardware accelerators are coupled to (many-)cores to implement key functional kernels with orders-of-magnitude of speedup and energy efficiency compared to the “pure software” version. However, three main issues rise, namely i) platform design complexity, ii) architectural scalability and iii) programmability. To tackle them, a template for a generic hardware processing unit (HWPU) is proposed, which share the memory banks with cores, and the template for a scalable architecture is shown, which integrates them through the shared-memory system. Then, a full software stack and toolchain are developed to support platform design and to let programmers exploiting the accelerators of the platform. The OpenMP frontend is extended to interact with it.
Resumo:
In questa tesi si indaga come è possibile strutturare in modo modulare programmi e prove in linguaggi con tipi dipendenti. Il lavoro è sviluppato nel linguaggio di programmazione con tipi dipendenti Agda. Il fine è quello di tradurre l'approccio Datatypes à la carte, originariamente formulato per Haskell, in Type Theory: puntiamo ad ottenere un simile embedding di una nozione di sottotipaggio per tipi ricorsivi, che permetta sia la definizione di programmi con side-effect dove i diversi effetti sono definiti modularmente, che la modularizzazione di sintassi, semantica e ragionamento relativi a descrizioni di linguaggi.
Resumo:
L'obiettivo su cui è stata basata questa Tesi di Laurea è stato quello di integrare la tecnologia delle Wireless Sensor Networks (WSN) al contesto dell'Internet delle cose (IoT). Per poter raggiungere questo obiettivo, il primo passo è stato quello di approfondire il concetto dell'Internet delle cose, in modo tale da comprendere se effettivamente fosse stato possibile applicarlo anche alle WSNs. Quindi è stata analizzata l'architettura delle WSNs e successivamente è stata fatta una ricerca per capire quali fossero stati i vari tipi di sistemi operativi e protocolli di comunicazione supportati da queste reti. Infine sono state studiate alcune IoT software platforms. Il secondo passo è stato quindi di implementare uno stack software che abilitasse la comunicazione tra WSNs e una IoT platform. Come protocollo applicativo da utilizzare per la comunicazione con le WSNs è stato usato CoAP. Lo sviluppo di questo stack ha consentito di estendere la piattaforma SensibleThings e il linguaggio di programmazione utilizzato è stato Java. Come terzo passo è stata effettuata una ricerca per comprendere a quale scenario di applicazione reale, lo stack software progettato potesse essere applicato. Successivamente, al fine di testare il corretto funzionamento dello stack CoAP, è stata sviluppata una proof of concept application che simulasse un sistema per la rilevazione di incendi. Questo scenario era caratterizzato da due WSNs che inviavano la temperatura rilevata da sensori termici ad un terzo nodo che fungeva da control center, il cui compito era quello di capire se i valori ricevuti erano al di sopra di una certa soglia e quindi attivare un allarme. Infine, l'ultimo passo di questo lavoro di tesi è stato quello di valutare le performance del sistema sviluppato. I parametri usati per effettuare queste valutazioni sono stati: tempi di durata delle richieste CoAP, overhead introdotto dallo stack CoAP alla piattaforma Sensible Things e la scalabilità di un particolare componente dello stack. I risultati di questi test hanno mostrato che la soluzione sviluppata in questa tesi ha introdotto un overheadmolto limitato alla piattaforma preesistente e inoltre che non tutte le richieste hanno la stessa durata, in quanto essa dipende dal tipo della richiesta inviata verso una WSN. Tuttavia, le performance del sistema potrebbero essere ulteriormente migliorate, ad esempio sviluppando un algoritmo che consenta la gestione concorrente di richieste CoAP multiple inviate da uno stesso nodo. Inoltre, poichè in questo lavoro di tesi non è stato considerato il problema della sicurezza, una possibile estensione al lavoro svolto potrebbe essere quello di implementare delle politiche per una comunicazione sicura tra Sensible Things e le WSNs.
Resumo:
Questa ricerca affronta in maniera interdisciplinare il tema delle funzioni polinomiali definite sugli anelli degli interi modulo la potenza di un numero primo. In primo luogo è stato esaminato il caso particolare del campo Zp, dimostrando che in esso tutte le funzioni sono polinomiali. In seguito è stato calcolato il numero delle funzioni polinomiali negli interi modulo 9 e modulo 25, mostrando un procedimento che può essere esteso a qualsiasi potenza di un numero primo. Esso fa uso di alcuni risultati di teoria dei numeri e di aritmetica e affronta il tema da un punto di vista prettamente algebrico. A queste dimostrazioni è stato affiancato un esperimento di tipo statistico, il cui obiettivo è cercare una regolarità che permetta, dati il numero primo p e il suo esponente n, di calcolare immediatamente il numero delle funzioni polinomiali nell'anello degli interi modulo p^n. Sono state presentate due congetture, ottenute utilizzando strumenti di tipo informatico: un software di calcolo e un linguaggio di programmazione ad alto livello. Gli strumenti della statistica descrittiva, in particolare il test di Pearson, si sono rivelati essenziali per verificare l'adeguatezza delle supposizioni. Questa ricerca può essere considerata il punto di partenza per dimostrare (o confutare) quello che è stato ipotizzato attraverso un'analisi di tipo sperimentale.
Resumo:
Nel presente elaborato si analizzeranno le prestazioni del linguaggio di programmazione parallela Chapel sul kernel Integer Sort di NAS Parallel Benchmarks. Questo algoritmo, a livello pratico, è utilizzato per studi o applicazioni sui metodi particellari. Saranno introdotti i concetti fondamentali di programmazione parallela e successivamente illustrate le principali caratteristiche di MPI e Chapel. Verranno poi approfonditi Integer Sort e i rispettivi dettagli implementativi, concludendo con un'analisi di prestazioni dei due linguaggi sul kernel preso in esame.
Resumo:
Negli ultimi anni le Web application stanno assumendo un ruolo sempre più importante nella vita di ognuno di noi. Se fino a qualche anno fa eravamo abituati ad utilizzare quasi solamente delle applicazioni “native”, che venivano eseguite completamente all’interno del nostro Personal Computer, oggi invece molti utenti utilizzano i loro vari dispositivi quasi esclusivamente per accedere a delle Web application. Grazie alle applicazioni Web si sono potuti creare i cosiddetti social network come Facebook, che sta avendo un enorme successo in tutto il mondo ed ha rivoluzionato il modo di comunicare di molte persone. Inoltre molte applicazioni più tradizionali come le suite per ufficio, sono state trasformate in applicazioni Web come Google Docs, che aggiungono per esempio la possibilità di far lavorare più persone contemporanemente sullo stesso documento. Le Web applications stanno assumendo quindi un ruolo sempre più importante, e di conseguenza sta diventando fondamentale poter creare delle applicazioni Web in grado di poter competere con le applicazioni native, che siano quindi in grado di svolgere tutti i compiti che sono stati sempre tradizionalmente svolti dai computer. In questa Tesi ci proporremo quindi di analizzare le varie possibilità con le quali poter migliorare le applicazioni Web, sia dal punto di vista delle funzioni che esse possono svolgere, sia dal punto di vista della scalabilità. Dato che le applicazioni Web moderne hanno sempre di più la necessità di poter svolgere calcoli in modo concorrente e distribuito, analizzeremo un modello computazionale che si presta particolarmente per progettare questo tipo di software: il modello ad Attori. Vedremo poi, come caso di studio di framework per la realizzazione di applicazioni Web avanzate, il Play framework: esso si basa sulla piattaforma Akka di programmazione ad Attori, e permette di realizzare in modo semplice applicazioni Web estremamente potenti e scalabili. Dato che le Web application moderne devono avere già dalla nascita certi requisiti di scalabilità e fault tolerance, affronteremo il problema di come realizzare applicazioni Web predisposte per essere eseguite su piattaforme di Cloud Computing. In particolare vedremo come pubblicare una applicazione Web basata sul Play framework sulla piattaforma Heroku, un servizio di Cloud Computing PaaS.
Resumo:
Agent-oriented programming (AOP) è un paradigma di programmazione che concepisce un software come insieme di agenti che possiedono caratteristiche di autonomia, proattività e che sono in grado di comunicare con altri agenti. Sebbene sia stato impiegato soprattutto nell'ambito dell'intelligenza artificiale questo tipo di programmazione si rivela utile per lo sviluppo di sistemi distribuiti riuscendo a gestire agilmente problemi di concorrenza. Lo scopo di questa tesi è analizzare le caratteristiche del paradigma e dei software basati su agenti, utilizzando come caso di studio Sarl, un linguaggio general-purpose molto recente. La parte principale del lavoro consiste nella descrizione dei modelli teorici che hanno portato alla nascita della programmazione ad agenti, in particolare del modello BDI, e dei principali framework per lo sviluppo di sistemi multi-agente.
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:
I paradigmi di programmazione più utilizzati nella realizzazione di sistemi embedded presentano delle limitazioni, in quanto non consentono di modellare alcuni aspetti fondamentali. Il paradigma ad agenti presenta delle caratteristiche che consentono di modellare alcuni aspetti fondamenetali di un sistema embedded, oltre a fornire un livello di astrazione più elevato. All'interno di questa tesi verranno mostrati i concetti fondamentali di questo paradigma, mostrando inoltre i costrutti di base di un linguaggio ad agenti come Jason. Nella programmazione ad agenti, l'ambiente riveste un ruolo fondomentale. All'interno di questa trattazione verrà introdotto un paradigma per la programmazione di ambienti, descrivendo inoltre il framework di riferimento: CArtAgo. Dopo aver descritto i concetti e gli strumenti per applicare il paradigma ad agenti, verrà proposto un metodo per la realizzazione di sistemi embedded tramite l'applicazione di Jason sulla scheda di prototipazione Arduino.
Resumo:
Da quando è iniziata l'era del Cloud Computing molte cose sono cambiate, ora è possibile ottenere un server in tempo reale e usare strumenti automatizzati per installarvi applicazioni. In questa tesi verrà descritto lo strumento MODDE (Model-Driven Deployment Engine), usato per il deployment automatico, partendo dal linguaggio ABS. ABS è un linguaggio a oggetti che permette di descrivere le classi in una maniera astratta. Ogni componente dichiarato in questo linguaggio ha dei valori e delle dipendenze. Poi si procede alla descrizione del linguaggio di specifica DDLang, col quale vengono espressi tutti i vincoli e le configurazioni finali. In seguito viene spiegata l’architettura di MODDE. Esso usa degli script che integrano i tool Zephyrus e Metis e crea un main ABS dai tre file passati in input, che serve per effettuare l’allocazione delle macchine in un Cloud. Inoltre verranno introdotti i due sotto-strumenti usati da MODDE: Zephyrus e Metis. Il primo si occupa di scegliere quali servizi installare tenendo conto di tutte le loro dipendenze, cercando di ottimizzare il risultato. Il secondo gestisce l’ordine con cui installarli tenendo conto dei loro stati interni e delle dipendenze. Con la collaborazione di questi componenti si ottiene una installazione automatica piuttosto efficace. Infine dopo aver spiegato il funzionamento di MODDE viene spiegato come integrarlo in un servizio web per renderlo disponibile agli utenti. Esso viene installato su un server HTTP Apache all’interno di un container di Docker.
Resumo:
Negli ultimi anni si sente sempre più spesso parlare di cloud computing. L'idea di fondo di questo concetto è quella di pagare per il solo effettivo utilizzo di un servizio, disponibile sulla rete, avendo a disposizione la possibilità di poter variare le proprie risorse utilizzabili a seconda delle necessità, che potrebbero essere, per esempio, applicazioni standard oppure spazi di storage per i dati. Quando cominciò a diffondersi l'utilizzo del Web, la rete Internet veniva raffigurata come una nuvola (cloud) in modo tale che si rendesse l'idea di un'entità esterna rispetto alla nostra casa o al nostro posto di lavoro, un qualcosa cioè al di fuori dei luoghi abituali in cui vengono utilizzati i PC. Tale rappresentazione diventa ora utile per poter spiegare il concetto di cloud computing. Infatti, grazie a questa nuova tecnologia, dati e programmi normalmente presenti nei nostri computer potranno ora trovarsi sul cloud. Molti reparti IT sono costretti a dedicare una parte significativa del loro tempo a progetti di implementazione, manutenzione e upgrade che spesso non danno un vero valore per l'azienda. I team di sviluppo hanno cominciato quindi a rivolgersi a questa nuova tecnologia emergente per poter minimizzare il tempo dedicato ad attività a basso valore aggiunto per potersi concentrare su quelle attività strategiche che possono fare la differenza per un'azienda. Infatti un'infrastruttura come quella cloud computing promette risparmi nei costi amministrativi che raggiungono addirittura il 50% rispetto ad un software standard di tipo client/server. Questa nuova tecnologia sta dando inizio ad un cambiamento epocale nel mondo dello sviluppo delle applicazioni. Il passaggio che si sta effettuando verso le nuove soluzioni cloud computing consente infatti di creare applicazioni solide in tempi decisamente più brevi e con costi assai inferiori, evitando inoltre tutte le seccature associate a server, soluzioni software singole, aggiornamenti, senza contare il personale necessario a gestire tutto questo. L'obiettivo di questa tesi è quello di mostrare una panoramica della progettazione e dello sviluppo di applicazioni Web nel cloud computing, analizzandone pregi e difetti in relazione alle soluzioni software attuali. Nel primo capitolo viene mostrato un quadro generale in riferimento al cloud, mettendo in luce le sue caratteristiche fondamentali, esaminando la sua architettura e valutando vantaggi e svantaggi di tale piattaforma. Nel secondo capitolo viene presentata la nuova metodologia di progettazione nel cloud, operando prima di tutto un confronto con lo sviluppo dei software standard e analizzando poi l'impatto che il cloud computing opera sulla progettazione. Nel terzo capitolo si entra nel merito della progettazione e sviluppo di applicazioni SaaS, specificandone le caratteristiche comuni ed elencando le piattaforme di rilievo allo stato dell'arte. Si entrerà inoltre nel merito della piattaforma Windows Azure. Nel quarto capitolo viene analizzato nel particolare lo sviluppo di applicazioni SaaS Multi-Tenant, specificando livelli e caratteristiche, fino a spiegare le architetture metadata-driven. Nel quinto capitolo viene operato un confronto tra due possibili approcci di sviluppo di un software cloud, analizzando nello specifico le loro differenze a livello di requisiti non funzionali. Nel sesto capitolo, infine, viene effettuata una panoramica dei costi di progettazione di un'applicazione cloud.
Resumo:
Il Web ha subito numerose trasformazioni rispetto al passato. Si è passati da un Web statico, in cui l'unica possibilità era quella di leggere i contenuti della pagina, ad un Web dinamico e interattivo come quello dei social network. Il Web moderno è, ancora oggi, un universo in espansione. La possibilità di arricchire le pagine con contenuti interattivi, video, foto e molto altro, rende l'esperienza web sempre più coinvolgente. Inoltre la diffusione sempre più ampia di mobile device ha reso necessaria l'introduzione di nuovi strumenti per sfruttare al meglio le funzionalità di tali dispositivi. Esistono al momento tantissimi linguaggi di scripting e di programmazione, ma anche CMS che offrono a chiunque la possibilità di scrivere e amministrare siti web. Nonostante le grandi potenzialità che offrono, spesso queste tecnologie si occupano di ambiti specifici e non permettono di creare sistemi omogenei che comprendano sia client che server. Dart si inserisce proprio in questo contesto. Tale linguaggio dà a i programmatori la possibilità di poter sviluppare sia lato client sia lato server. L'obiettivo principale di questo linguaggio è infatti la risoluzione di alcune problematiche comuni a molti programmatori web. Importante in questo senso è il fatto di rendere strutturata la costruzione di programmi web attraverso l'uso di interfacce e classi. Fornisce inoltre un supporto per l'integrazione di svariate funzionalità che allo stato attuale sono gestite da differenti tecnologie. L'obiettivo della presente tesi è quello di mettere a confronto Dart con alcune delle tecnologie più utilizzate al giorno d'oggi per la programmazione web-based. In particolare si prenderanno in considerazione JavaScript, jQuery, node.js e CoffeeScript.