Summer of Code Projects - okennedy/laasie GitHub Wiki

The Laasie project is looking for talented coders interested in contributing to the Laasie project. A concrete list of projects is presented below; A high level description of the areas we are looking for assistance with is as follows:

  • The Client Proxy: The Laasie proxy is a system component that mediates between the client application and the Laasie server. It is typically implemented as a client-side library, and is responsible for: (1) Maintaining a local replica of the application state as a JSON object, (2) Managing client callbacks for notification of updates to the application state, (3) Forwarding client state updates to the server, (4) Managing the push/pull interface to the server infrastructure, (5) Provide datastructure support, subclassing language-specific data and collection types to provide abstractions over the JSON application state representation. Currently, Proxy implementations exist for the following platforms: Cappuccino

  • State Representation / Storage: Laasie is designed primarilly to support semi-structured application state (i.e., JSON objects). There are many situations where this encoding strategy is not ideal, for example when bulk data transfers are required. Image or Audio data, and streaming data are two examples.

  • Workloads / Applications: A crucial challenge for us is developing a thorough understanding of what developers need from Laasie, how Laasie is going to get used, and where our design, development, and optimization efforts are required. Generating real-world test cases will allow us to guide these efforts, and to showcase Laasie's functionality to end-users.

Project Ideas

Concrete project ideas are as follows:

  • Porting The Proxy to Additional Platforms: We are looking for people to implement proxy functionality in other languages such as Java, Javascript, and Cocoa/ObjC, and to extend existing language support by adding new datastructures, and support for our new state mutation and query language BarQL. The primary goal of this task would be to replicate proxy functionality (maintaining the JSON object, applying updates, handling notifications, and providing supplemental datastructure and UI support functionality).

  • Implementing HTML5 LocalStorage (or equivalent): There are many situations where a client is forced to restart: closing the browser window, restarting for software updates, crashes, etc... The potentially high startup cost of state transfer can be avoided for many applications by using local storage to persist the client's state replica (e.g., HTML5 local storage for Cappuccino and/or Javascript). The primary challenge of this task is to build a local persistence mechanism that can keep its persisted state synchronized efficiently. This may include re-implementing fragments of Laasie's monadic log within the host language, or using some form of checkpointing on the local state.

  • Blob Storage: As stated above, Laasie is ill suited to be used for long-term storage of bulk-data. (1) Laasie's standard JSON encoding requires the use of a "safe" bulk data encoding such as BASE64, making data transmission inefficient, (2) Bulk data transfer (e.g., downloading images, audio, etc...) is best handled out-of-band from the primary Laasie state line, so as to not block the channel, and (3) Performing transfers out-of-band allows clients to avoid making requests for large data objects that are not immediately necessary. Numerous strategies for delta-encoding of bulk data have been proposed. One strategy described in a paper entitled LBFS would lend itself well to our setting. The goal of this task is to implement an LBFS-style (or similar) block store with persistence (in Java), an HTTP interface to this block store, and to implement proxy functionality for interacting with this block store (in JavaScript or Cappuccino).

  • Laasie-based Applications: We require applications to exercise Laasie functionality, identify areas for improvement, and to demonstrate the design of a Laasie application. The goal of this project idea is to develop a fully-featured application on top of Laasies. Suggested application ideas include:

  • A Chat Client (IRC-style)

  • Calendaring Software

  • A Text/Code Editor

  • A LaTeX Editor

  • Legacy Protocol Mapping: Another source of workloads is legacy protocols. The goal of this project idea is to establish a translation layer between Laasie's log structured data representation and an existing protocol (e.g., IMAP, POP, CalDAV, Jabber, IRC, RSS, ATOM, etc...). Once several such mappings have been established, this project will eventually develop into a research project -- Our goal is to eventually create an infrastructure that simplifies the construction of such interfaces.