SwellRT: Difference between revisions

From Berkman Klein Google Summer of Code Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
SwellRT, the first full-stack framework for developing decentralized real-time collaborative apps in JavaScript/Java/Android. It is basically an alternative equivalent to the Google Drive Real-Time API but decentralized and open source. For instance, we can build GoogleDoc-like collaborative documents which have decentralized/federated contents; not limited to just text but with embedded videos, maps, etc. that may be also collaborative. If one person disconnects temporarily, they can continue working and it will sync when connection is recovered (so accommodating unstable/poor connectivity). More at [http://swellrt.org http://swellrt.org] and [https://github.com/P2Pvalue/swellrt https://github.com/P2Pvalue/swellrt]
SwellRT, is a free/open source backend as a service that allows faster development of apps providing -out of the box- common features found in any modern application (auth, real-time storage, event based integration...). In addition, servers can be federated on Internet through the Matrix protocol, enabling decentralization of data and users, and interoperability among providers. It has similarities with Google Firebase, Meteor or Realm frameworks, but it provides stronger capabilities for collaborative text editing and a simpler API. More at http://swellrt.org and https://github.com/P2Pvalue/swellrt
 


===Ideal candidate:===
===Ideal candidate:===
SwellRT is interested in proactive candidates with experience in back-end development. Depending on the project, different sets of programming languages are required (as specified in the ideas below), although SwellRT core components are developed using Java. Qualities that we would welcome are initiative, creativity, and interest/experience with decentralized / federated / distributed systems or protocols. You may check Github’s open issues and the project ideas below to have an overall ideas of the possible evolutions of SwellRT. Of course, GSoC candidates are encouraged to adapt our proposals to their interests and we are very open to new ideas or unexpected evolutions of chosen ones.  
SwellRT is interested in proactive candidates with experience in backend development and mobile platforms. Depending on the project, different sets of programming languages are required (as specified in the ideas below), although SwellRT core components are developed using Java and JavaScript. Qualities that we would welcome are initiative, creativity, and interest/experience with decentralized / federated / distributed systems or protocols. You may check Github’s open issues and the project ideas below to have an overall idea of the possible evolutions of SwellRT. Of course, GSoC candidates are encouraged to adapt our proposals to their interests and we are very open to new ideas or unexpected evolutions of chosen ones.


===Project ideas:===
===Project ideas:===


====Wave Federation protocol over the  Matrix Protocol====
====Android Native Client====
 
To develop a native client library of SwellRT for the Android platform. Starting with the current Java client implementation, some platform dependent components should be replaced with native ones for Android, mainly, the HTTP and Websocket client libraries. This work would also require knowledge of Android's threading model, Gradle tool, and Java/Android application packaging models.  
SwellRT is based in the Apache Wave protocol (Former Google Wave). It allows different servers to set up a federated network providing distributed real-time storage services. Currently the Wave Federation protocol is implemented over the XMPP transport. This projects looks for a replacement of the XMPP layer, specifically using the Matrix protocol  ([https://en.wikipedia.org/wiki/Matrix_(communication_protocol) https://en.wikipedia.org/wiki/Matrix_(communication_protocol]). The GSoC intern would need to integrate the Matrix protocol in the Java server of SwellRT and to set up a federated network  to test the implementation. To perform this task, the intern will have to understand the concepts of the Wave Protocol and the Wave Federation protocol.
Knowledge recommended: Java and Android, HTTP and Websocket protocols.
 
''Knowledge recommended:'' Java and knowledge in network protocols.  
<br>
<br>
'''Mentors:''' Samer [mailto:shassan@cyber.law.harvard.edu shassan@cyber.law.harvard.edu], Pablo [mailto:pablojan@ucm.es pablojan@ucm.es]
'''Mentors:''' Samer [mailto:shassan@cyber.law.harvard.edu shassan@cyber.law.harvard.edu], Pablo [mailto:pablojan@ucm.es pablojan@ucm.es]
Line 23: Line 22:
'''Mentors:''' Samer [mailto:shassan@cyber.law.harvard.edu shassan@cyber.law.harvard.edu], Pablo [mailto:pablojan@ucm.es pablojan@ucm.es]
'''Mentors:''' Samer [mailto:shassan@cyber.law.harvard.edu shassan@cyber.law.harvard.edu], Pablo [mailto:pablojan@ucm.es pablojan@ucm.es]


====iOS Client library====
====iOS Native Client====
 
To develop a native client library of SwellRT for the iOS platform. Starting with the current Java client implementation, the base Objective-C version should be generated using the Java2Objc tool. After this, some platform dependent components should be replaced with native ones for iOS , mainly, the HTTP and Websocket client libraries. This work would also require knowledge of iOS threading model and application packaging.  
To develop a native client library of SwellRT for the iOS platform. SwellRT provides a  REST service layer and a WebSocket API, however a native library wrapping these services is more suitable for client applications. The GSoC intern will need to understand the concepts of the Apache Wave Protocol as long as the concepts of SwellRT. Existing native library in JavaScript, Java and Android can be taken as guidance.
Knowledge recommended: Java and Objective-C, HTTP and Websocket protocols.
 
''Knowledge recommended:'' Objective C or Swift. Understanding of HTTP, Websockets, JSON and optionally OAuth1/2
<br>
<br>
'''Mentors:''' Samer [mailto:shassan@cyber.law.harvard.edu shassan@cyber.law.harvard.edu], Pablo [mailto:pablojan@ucm.es pablojan@ucm.es]
'''Mentors:''' Samer [mailto:shassan@cyber.law.harvard.edu shassan@cyber.law.harvard.edu], Pablo [mailto:pablojan@ucm.es pablojan@ucm.es]


====Python Client library====
====High-performance Server ====
To develop a native client library of SwellRT for the Python language. SwellRT provides a  REST service layer and a WebSocket API, however a native library wrapping these services is more suitable for client applications. The GSoC intern will have to understand the concepts of the Apache Wave Protocol as long as the concepts of SwellRT. Existing native library in JavaScript, Java and Android can be taken as guidance.
SwellRT server is a Jetty-based Java application. It has an internal bus architecture and a custom thread model. As long as SwellRT is based on processing live transformation operations we would like to refactor current code base to provide a better scalable implementation, ideally based on a non-blocking IO server and an actor based architecture.
 
Knowledge recommended: Java, HTTP, Websocket, non blocking IO servers and actor based frameworks.
''Knowledge recommended:'' Python. Understanding of HTTP, Websockets, JSON and optionally OAuth1/2
<br>
<br>
'''Mentors:''' Samer [mailto:shassan@cyber.law.harvard.edu shassan@cyber.law.harvard.edu], Pablo [mailto:pablojan@ucm.es pablojan@ucm.es]
'''Mentors:''' Samer [mailto:shassan@cyber.law.harvard.edu shassan@cyber.law.harvard.edu], Pablo [mailto:pablojan@ucm.es pablojan@ucm.es]

Revision as of 14:52, 1 March 2017

SwellRT, is a free/open source backend as a service that allows faster development of apps providing -out of the box- common features found in any modern application (auth, real-time storage, event based integration...). In addition, servers can be federated on Internet through the Matrix protocol, enabling decentralization of data and users, and interoperability among providers. It has similarities with Google Firebase, Meteor or Realm frameworks, but it provides stronger capabilities for collaborative text editing and a simpler API. More at http://swellrt.org and https://github.com/P2Pvalue/swellrt


Ideal candidate:

SwellRT is interested in proactive candidates with experience in backend development and mobile platforms. Depending on the project, different sets of programming languages are required (as specified in the ideas below), although SwellRT core components are developed using Java and JavaScript. Qualities that we would welcome are initiative, creativity, and interest/experience with decentralized / federated / distributed systems or protocols. You may check Github’s open issues and the project ideas below to have an overall idea of the possible evolutions of SwellRT. Of course, GSoC candidates are encouraged to adapt our proposals to their interests and we are very open to new ideas or unexpected evolutions of chosen ones.

Project ideas:

Android Native Client

To develop a native client library of SwellRT for the Android platform. Starting with the current Java client implementation, some platform dependent components should be replaced with native ones for Android, mainly, the HTTP and Websocket client libraries. This work would also require knowledge of Android's threading model, Gradle tool, and Java/Android application packaging models. Knowledge recommended: Java and Android, HTTP and Websocket protocols.
Mentors: Samer shassan@cyber.law.harvard.edu, Pablo pablojan@ucm.es


Access control for real-time JSON objects

SwellRT provides a real-time storage of JSON objects that can be edited by different users at the same time. In some scenarios, some properties of JSON objects are not desirable to be accessed (or edited) by anyone except for specific users. In this regard, the GSoC intern would need to design and implement an access control layer for JSON objects that can be accessed by different users. That layer would be integrated in the SwellRT implementation in Java. Also, the JavaScript client will be used for testing. To perform this task, the intern would have to understand the concepts of the Wave Protocol.

Knowledge recommended: Java, JavaScript and security policies.

Mentors: Samer shassan@cyber.law.harvard.edu, Pablo pablojan@ucm.es

iOS Native Client

To develop a native client library of SwellRT for the iOS platform. Starting with the current Java client implementation, the base Objective-C version should be generated using the Java2Objc tool. After this, some platform dependent components should be replaced with native ones for iOS , mainly, the HTTP and Websocket client libraries. This work would also require knowledge of iOS threading model and application packaging. Knowledge recommended: Java and Objective-C, HTTP and Websocket protocols.
Mentors: Samer shassan@cyber.law.harvard.edu, Pablo pablojan@ucm.es

High-performance Server

SwellRT server is a Jetty-based Java application. It has an internal bus architecture and a custom thread model. As long as SwellRT is based on processing live transformation operations we would like to refactor current code base to provide a better scalable implementation, ideally based on a non-blocking IO server and an actor based architecture. Knowledge recommended: Java, HTTP, Websocket, non blocking IO servers and actor based frameworks.
Mentors: Samer shassan@cyber.law.harvard.edu, Pablo pablojan@ucm.es