Giovanni Ciatto, Stefano Mariani, Andrea Omicini
Proposed projects are divided into the following main categories:
Tuple Based coordination, where students may contribute in several ways to our software artifacts concerning the tuple based coordination, i.e.:
TuSoW: the same LINDA implementation you used during the Lab lessons
- Source code avaiable here: https://github.com/tuple-based-coord/TuSoW/
- heavily based on Kotlin
TuCSoN: another legacy implementation of LINDA, which is and has been the basis for several research works in our team. In particular, it supports not only tuple spaces but also tuple centres
-
You can read more about TuCSoN and the tuple centre notion by looking for the many papers mentioning them among the ones published by prof. Omicini
- log in with your
@studio.unibo.it
credentials on the Apice portal, in order to be able to download and read our papers
- log in with your
-
Or you may look for the many theses on these subjects available on AMS Tesi
ReSpecT: a language aimed at programming tuple centres in order to govern the interaction space
- A good starting point for developers: http://apice.unibo.it/xwiki/bin/view/Publications/RespectxComsis15
- Formal semantics: http://apice.unibo.it/xwiki/bin/view/Publications/RespectEntcs175
- Again, have a look to the many theses about it on AMS Tesi
Logic Programming as a Service (LPaaS), where students may contribute in several ways to our software artifacts concerning the LPaaS ecosystem
- Put it simply, LPaaS leverages a Logic Programming engine (e.g.
tuProlog
) wrapped by a ReSTful web service - Some interesting details are provided here: http://apice.unibo.it/xwiki/bin/view/Publications/LpaasBdcc2
Blockchain, where students may contribute in several ways in order to improve their (and our) understanding of the Blockchain model and technology
[Byzantine] Fault Tolerance ([B]FT) & State Machine Replication (SMR), where students may contribute in several ways in order to improve our understanding of the BFT & SMR models and technologies
Language and frameworks for Distributed Systems (DS) or Agent Oriented Programming (AOP), where students may contribute in several ways in order to create or improve new languages or toolkits within the scopes of DS, Coordination, and AOP
-
Projects in this category may rely on one or more of the following frameworks:
Simulation: where students may contribute by creating novel incarnations for the Alchemist simulator
DevOps: where students can practice with real-world DevOps technologies such as Docker and Kubernetes
Lesson Production: where students can help designing and writing lessons for the future editions of the course
Technology Know-How: where students may contribute exploring the functioning (and possibly the internal structure) of one or more real-world technologies
This category comprehends the following projects
-
Designing and implementing a RBAC access control feature for TuSoW, to be enforced by means of an authentication and authorization layer to be injected into the current model and implementation
-
Designing and implementing a variant of TuSoW supporting the replication of tuple spaces on several distributed machines
- This may also mean creating/looking for a Storage Layer for TuSoW to be injected into the current model & implementation
-
Designing and implementing a variant of TuSoW supporting the sharding of tuple spaces on several distributed machines
- This may also mean creating/looking for a Storage Layer for TuSoW to be injected into the current model & implementation
-
Designing and implementing a server-side interface for LINDA (or TuSoW core) based on Javalin + simple project, max 1 person
-
Designing and implementing a client-side interface for TuSoW supporting two or more of the follwing platforms:
- JVM (Java, Kotlin, Scala, etc)
- .NET (C#, F#, VbNET <-- please don't)
- JavaScript
- Python
- < any language you like >
(notice that these are actually different projects)
Teams composed by more than 1 people may be asked to support more than 1 plaftorms
-
Designing and implementing an observability module for TuSoW enabling the implementation of a Web-based monitoring (graphical) interface, targetting: - JavaFX - some web GUI
(notice that this activity may require some modification to the current implementation of TuSoW service)
-
Designing and implementing an Android-based porting of TuSoW supporting replication of tuple spaces among several devices, possibly interconnected by means of Bluetooth or Wifi-Direct - there are some ongoing activities on this track, yet if you are interested let's talk about it
-
Designing and implementing an Android-based porting of TuSoW supporting federation of tuple spaces à la LIME among several devices, possibly interconnected by means of Bluetooth or Wifi-Direct - there are some ongoing activities on this track, yet if you are interested let's talk about it
-
Fix the "phantom in" problem by supporting primitives cancellation from the client side in TuSoW
-
Experiment with novel Coordination languages in TuSoW, e.g.
- JSON|YAML and JsonPAth
- XML and XPath
- whatever you like
-
Completely rewriting the current Java EE based source code using Javalin, Vert.x or some other lightweight, micro-service oriented library or framework. The novel implementation should include at least:
- an improved modularization of the Knowledge-Base Layer
- a suite of fine grained unit tests
Notice that the novel implementation should anyway adhere to the
LPaaS Swagger Specification
-
Designing and implementing an observability module for LPaaS enabling the implementation of a Web-based graphical interface
-
Designing and implementing a client-side interface for LPaaS supporting one of the follwing platforms:
- JVM
- .NET (C#, F#, VbNET <-- please don't)
- Python
(notice that these are actually different projects)
-
Design a novel 2P-Kt Playground capable of switching among in-browser or LPaaS-based computing mode
Furthermore, we are also interested in students designing and developing an unbiased and non-trivial usage scenario for LPaaS. You can propose some.
No specific project here, but just some ideas you can use as a starting point when proposing a project of yours.
We have four different rearch interestes concerning blockchains:
-
Extending the common notion of smart contract, in order to support asynchrony and time-reactiveness as a first step towards autonomous smart contracts
- More info here: http://apice.unibo.it/xwiki/bin/view/Theses/BlockchainMaffi2018
-
Experimenting and reproducing Hyperledger Fabric's Execute-Order-Validate architecture over Tenderfone
- More info here: https://arxiv.org/pdf/1801.10228.pdf
-
Port Tenderfone over 2P-Kt
- Tenderfone source code: https://gitlab.com/pika-lab/blockchain/tenderfone/tenderfone-sc
-
Formalising the Ethereum Blockchain Platform by means of the ABS formalism
-
Creating (i.e. designing & implementing) our home-made logic-based blockchain technology from scratch, possibly relying on some Fault Tolerant layer such as:
Projects in this category follow a common pattern:
- Students choose a consensus algorithm from the list below,
- They study the corresponding paper / reference and try to understand the consensus algorithm's functioning
- They create a proof of concept implementation it using a technology of choice
- They test the consensus algorithm's robustness agains crash and byzantine faults
There is an implic step hidden into the procedure above: consensus
algorithms are usually aimed at implementing some sort of SMR system
(e.g. a replicated DB). Even if the goal of a project in this category
is to study & implement a consensus algorithm, students may need to
actually use it in order to test it. To do so they will have to create a
simple SMR system, like, e.g. a replicated Key-Value store supporting at
least two operations: put
and get
.
Students may choose any of the following consensus algorithms:
- PBFT, Castro, M., & Liskov, B. (2002). Practical byzantine fault tolerance and proactive recovery
Honey Badger, Miller, A., Xia, Y., Croman, K., Shi, E., & Song, D. (2016). The Honey Badger of BFT Protocols- BFT2F, Li, J., & Mazières, D. (2007). Beyond one-third faulty replicas in Byzantine fault tolerant systems
Zyzzyva, Kotla, R., Alvisi, L., Dahlin, M., Clement, A., & Wong, E. (2007). Zyzzyva: Speculative Byzantine Fault Tolerance- Q/U, Abd-El-Malek, M., Ganger, G. R., Goodson, G. R., Reiter, M. K., & Wylie, J. J. (2005). Fault-scalable Byzantine fault-tolerant services
- Sieve, Cachin, C., Schubert, S., & Vukolić, M. (2016). Non-determinism in Byzantine Fault-Tolerant Replication
- Mastercrypt, Cachin, C., Schubert, S., & Vukolić, M. (2016). Non-determinism in Byzantine Fault-Tolerant Replication (yes, the same paper of Sieve)
- Mod Smart, Sousa, J., & Bessani, A. (2012). From Byzantine consensus to BFT state machine replication: A latency-optimal transformation
- HQ, Bershad, B., ACM Digital Library., D., ACM Special Interest Group in Operating Systems., B., Rodrigues, R., & Shrira, L. (2006). HQ Replication: A Hybrid Quorum Protocol for Byzantine Fault Tolerance
RAFT, Diego Ongaro and John Ousterhout, (2014). In Search of an Understandable Consensus Algorithm- BFT-Smart https://github.com/bft-smart/library
- Google's Chubby https://static.googleusercontent.com/media/research.google.com/it//archive/chubby-osdi06.pdf
Overviews and surveys are available in order to perform a quick evaluation and comparison among the protocols above:
- Cachin, C., & Vukolić, M. (2017). "Blockchain Consensus Protocols in the Wild"
- Aublin, P.-L., Guerraoui, R., Knežević, N., Quéma, V., & Vukolić, M. (2015). The Next 700 BFT Protocols. ACM Transactions on Computer Systems, 32(4), 1–45
- Sankar, L. S., Sindhu, M., & Sethumadhavan, M. (2017). Survey of consensus protocols on blockchain applications
- Malkhi, D., & Reiter, M. (1998). Byzantine quorum systems
Finally, the following readings may of interest for who is interest in understanding the many impossiblity results affecting the distributed consensus:
- Fischer, M. J.; Lynch, N. A.; Paterson, M. S. (1985). "Impossibility of distributed consensus with one faulty process"
- Lamport, L.; Shostak, R.; Pease, M. (1982). "The Byzantine Generals Problem"
- Chapters 7, 8, 9 of Tanenbaum & van Steen's "Distributed Systems" book
-
Design and implement a plugin for Swagger's Codegen aimed at generating server stubs starting from a Swagger specification file.
- Vert.X target - Javalin target - Play target - choose your own target
-
Design and implement a Domain Specific Language aimed at easing the development of JADE-like agents
- It is possible to use any one among the following DSL engineering technologies: Xtext, MPS, ANTLR
-
Design a Kotlin|Scala DSL for Jade-like Agents
-
Design and implement an Alchemist incarnation aimed at simulating situated tuple spaces and, possibly, the Spatial Tuples model
-
Design and implement an Alchemist incarnation aimed at simulating situated tuple centres
-
Design and implement an Alchemist incarnation aimed at simulating JADE-like agents
Projects in this category follow a common pattern:
-
Students choose a technology from the list below aimed at setting up clusters of interconnected machines,
-
They must study it and understand its purpose & functioning, possibly looking for scientific paper describing it
-
They must figure out and document how to set up a single-machine cluster
-
They must figure out and document how to set up a multi-machine cluster
-
They must figure out and document how to set up access control and usage quotas
-
They must figure out and document how to submit computational jobs to the cluster
-
They must figure out and document how to submit storage-intensive jobs to the cluster
-
They must figure out and document how to deploy web-services or super-servers on the cluster
Avalilable technologies:
-
Design a lab lesson about replication of Linda tuple spaces
- master-slave
- crash-tolerant
- BFT
-
Design a lab lesson about federation of Linda tuple spaces
-
Design a lab lesson about sharding of Linda tuple spaces
-
Design a lab lesson non-blocking IO
-
Propose your own lab lesson to be designed
Projects in this category follow a common pattern:
-
Students choose a technology from the list below,
-
They must study it and understand its purpose & functioning, possibly looking for scientific paper describing it
-
They must undestand how the technology setup works and it is deployed in a real-world scenario
- Docker Swarm may be useful in some cases
- Such information must be included into the final report
-
They must test it, possibly creating some non-trivial testbed scenario
- It is not sufficient to just copy & past examples from the Web
- The test bed scenario must be propertly designed in order to reveal the technology pros and cons
-
They must stress it, possibly creating some testbed pushing the technology out of its comfort zone
-
They must produce a detailed report describing
- the technology,
- its reference model (if any),
- the assumption it relies upon,
- the tests performed and their rationale,
- the problems it solves
- the problems it DOES NOT solve
- etc
Avalilable technologies:
Docker Swarm- Traefik
- Etcd
CEPHRedisLagom and, in particular, its Event Sourcing feature- Apache Flink
Apache Kafka- Apache ZooKeeper
- IPFS -- Inteplanetary File System
- Storj
Notice that projects in this category are quite different. Here, we only expect students to produce some non-trivial testbed + some other code examples as software artifacts. The real goal of this sort of projects is to condensate into some useful and written form the knowledge related to a particular technology. Because of this, the final repor must be very detailed and properly written, without assuming the reader have any prior knowledge concerning the technology presented into the report. For this reason final report have no page limitation in this category.
Notice that technicalities are not the only thing that matters. This is why we ask you to reason about a technology, and think about:
- why should people use it?
- why people should NOT use it?
- does it scale?
- etc.
As a rule of thumb consider the following statement:
if your report does not present any problem of the target technology, you are probably missing something