Google Summer of Code at MITH

Guidelines

Information for Students

Student Application

Ideas

MITHgrid

Controllers for Touch and Mouse

Additional Data Presentations

JSON-LD Aware Data Store

Additional Facets

MITHgrid Demos

Server Side MITHgrid

Extend the MITHgrid Expression Language

OokOok Temporal CMS

Gamification Server

W3C Open Annotation

Streaming Video Annotation Wordpress Plugin

Additional Streaming Video Drivers

Shelley-Godwin Archive (SGA)

Shared Canvas Viewer

Shared Canvas Drupal Plugin

Music Encoding Initiative (MEI)

MEI to VexFlow

Guidelines

Information for Students

These ideas are contributed by MITH staff. They are vague or incomplete because they are ideas of what might be possible in the context of the given projects. Think of them as pie in the sky ideas that we would like to see done, but that we don’t need right now in order to accomplish any of our current funding objectives. If you wish to submit a proposal based on these ideas, you may wish to contact us to find out more about the particular suggestion you are looking at.

We expect you to thoroughly research the technologies and approaches in your proposed project. You may find that you discover a more interesting idea as you research one of the ideas on this page. We do not expect you to simply cut and paste one of the ideas on this page. We are interested in well researched projects which interest you and will contribute to a larger community, regardless of where the ideas originated.

Student Application

We don’t have a formal application format that we expect you to stick to. Instead, write a narrative (500 - 750 words) that explains what you are wanting to do, what you think it will take to accomplish it, and why you think you’re the best person to do it. Include a timeline listing major milestones. Every application must contain your name, contact information, and a listing of any relevant programming languages and your level of expertise.

 

When reading your application, we are looking to answer the following questions:

  1. What are you hoping to accomplish with your project?
  2. Why is this project important to you? What itch does it scratch?
  3. How do you see this project being important to a particular community? To which community is it important?
  4. What are the major milestones in the project?
  5. Which milestones do you expect to complete by the mid-summer evaluation?
  6. What are your technological proficiencies?
  7. What past experience do you have with the technologies used in this project?
  8. What experience do you have with similar projects?

Ideas

MITHgrid

MITHgrid is a data-centric, responsibility-oriented JavaScript library built on jQuery and based on ideas from the MIT Simile Exhibit and Fluid Infusion projects. It is a foundational library for parts of the Video Annotation library and Shelley-Godwin Archive Shared Canvas viewer.

Controllers for Touch and Mouse

Brief explanation: MITHgrid uses controllers to manage the bindings to UI elements and the translation of UI events to MITHgrid events. Swapping out one set of controllers for another can change how an application interacts with the available input devices.

Expected results: Create a set of MITHgrid controllers that manage common events in applications, such as a next page/previous page controller (where swiping left or right or clicking a previous/next button would be equivalent) that can use either touch or mouse input. This may require reworking some of the MITHgrid API to allow sets of controllers to be swapped in or out as needed by the application.

Knowledge prerequisite: Familiarity with the MITHgrid architecture and CoffeeScript. You will need to be comfortable with function scoping and closures.

Skill level: medium

Mentor: James Smith as general mentor. Specific help for each technology may require help from its developers.

Additional Data Presentations

Brief explanation: MITHgrid uses presentations to manage data displays and lenses (templates) to manage the actual data formatting. MITHgrid defines a few basic presentations that provide a blank HTML area and a Raphaël canvas. Additional presentation types would be nice.

Expected results: Additional presentations capable of managing a paged table, a graph of plotted data, or other structured display of data.

Knowledge prerequisite: Familiarity with the MITHgrid architecture and CoffeeScript. You will need to be comfortable with function scoping and closures.

Skill level: medium

Mentor: James Smith as general mentor. Specific help for each technology may require help from its developers.

JSON-LD Aware Data Store

Brief explanation: MITHgrid’s core data management is modeled after the simple triple store in MIT’s Simile Exhibit project. A triple store that is closer to the RDF data model as expressed through JSON-LD might be useful for some applications. Such a data store would make import and export of JSON-LD much easier.

Expected results: A MITHgrid data store that supports namespaced properties and blank nodes.

Knowledge prerequisite: Familiarity with the MITHgrid architecture and CoffeeScript. You will need to be comfortable with function scoping and closures. Familiarity with XML namespaces or RDF is a must.

Skill level: advanced

Mentor: James Smith as general mentor. Specific help for each technology may require help from its developers.

Additional Facets

Brief explanation: MITHgrid uses facets to provide filtering of data based on user selected criteria. For example, a text search box might be a facet that filters data based on a simple text match against a particular property. Facets provide real-time filtering of data shown in presentations.

Expected results: Additional facets capable of providing a range of selection types. For example, selecting a numeric range or particular items from a list.

Knowledge prerequisite: Familiarity with CoffeeScript. Some familiarity with the MITHgrid architecture may be helpful. You will need to be comfortable with function scoping, closures, and HTML.

Skill level: easy

Mentor: James Smith as general mentor. Specific help for each technology may require help from its developers.

MITHgrid Demos

Brief explanation: MITHgrid doesn’t have very many demos, but it has some interesting technology. Additional demonstrations would help people understand the power of MITHgrid.

Expected results: At least one compelling demonstration of the strengths of MITHgrid along with a web page explaining how the pieces of the demonstration fit together.

Knowledge prerequisite: Familiarity with the MITHgrid architecture. Since MITHgrid is distributed as a JavaScript library, the demonstration will need to be a MITHgrid application written in JavaScript or CoffeeScript and embedded in a web page.

Skill level: medium

Mentor: James Smith as general mentor. Specific help for each technology may require help from its developers.

Server Side MITHgrid

Brief explanation: MITHgrid is designed to work in a browser, but some of its capabilities would be useful in a Node.js application.

Expected results: Make MITHgrid work in the browser and Node.js equally well. A bonus would be a generic way to load additional parts of MITHgrid beyond the core, allowing MITHgrid plugins and extensions.

Knowledge prerequisite: Familiarity with Node.js and CoffeeScript. Some familiarity with the MITHgrid architecture would be helpful.

Skill level: medium

Mentor: James Smith as general mentor. Specific help for each technology may require help from its developers.

Extend the MITHgrid Expression Language

Brief explanation: MITHgrid includes an expression language borrowed from the MIT Simile Exhibit project. This language allows an application to walk the triple store graph and retrieve particular data. It would be nice if this language supported functions and variables or other aspects of regular languages.

Expected results: A JavaScript parser that translates the expression to a JavaScript object that can traverse the data store as needed and produce the expected results.

Knowledge prerequisite: Familiarity with the MITHgrid architecture, CoffeeScript, function scoping, closures, and programming language design. Familiarity with BNF or similar notation systems will be a huge help as will be past experience with programs such as YACC.

Skill level: advanced

Mentor: James Smith as general mentor. Specific help for each technology may require help from its developers.

OokOok Temporal CMS

OokOok is a content management system that tracks all versions of a project, providing access to a coherent view of the project based on a timestamp. OokOok is designed to provide a platform for digital humanities projects that can support reliable citation.

Gamification Server

Brief explanation: We designed OokOok to host multiple projects and manage participation in projects through “boards” modeled in part after guilds in games such as World of Warcraft. Board ranks have permissions, and some ranks are lower rank than other ranks. A gamification server could track user participation and events and assign attributes such as experience or levels that would encourage people to explore and participate in other projects.

Expected results: Create a generic REST service that allows management of users, events, rewards, levels, etc., and document how this service could be used to reward users who participate in OokOok-hosted projects.

Knowledge prerequisite: Familiarity with REST frameworks, preferably in Perl. Some experience or interest in designing games will help in developing the reward structure.

Skill level: medium

Mentor: James Smith as mentor.

W3C Open Annotation

As part of a series of experiments during the Open Annotation development process, MITH, in collaboration with Alexander Street Press (ASP), developed a streaming video annotation client that can be embedded in a web page. The client allows annotations to be text attached to rectangles or ellipses drawn within the video frame. Annotations are imported/exported using the Open Annotation data model.

Streaming Video Annotation Wordpress Plugin

Brief explanation: This tool could be part of a Wordpress plugin to allow blog readers to add annotations to videos embedded in blog posts, possibly as an alternate commenting system.

Expected results: Create a Wordpress plugin that makes it trivial for the blogger to add annotation capabilities to their embedded videos. This plugin will need a way to communicate existing annotations with the browser as well as store new annotations made by readers.

Knowledge prerequisite: Familiarity with the Wordpress plugin architecture is a must. Wordpress is written in PHP, so you will need to be able to write PHP code. The annotation client is written in JavaScript, so some knowledge of Javascript is necessary to tie the pieces together in the blog post. Some familiarity with the Open Annotation data model will help in designing the server side storage of annotations.

Skill level: medium

Mentor: James Smith as general mentor. Specific help for each technology may require help from its developers.

Additional Streaming Video Drivers

Brief explanation: As part of the streaming video annotation client project, ASP developed a JavaScript driver API for streaming video players. The annotation client can provide annotation capabilities to any player with such a driver. ASP delivered a dummy driver for testing purposes as well as a driver for Youtube videos. Drivers for additional video services such as Vimeo would make the annotation client more useful.

Expected results: Create additional streaming video player drivers that allow the annotation client to work with videos from a wider array of content providers.

Knowledge prerequisite: The driver is written in JavaScript, so you can use JavaScript or compile from CoffeeScript. You will also need to be familiar with the APIs of the targeted video providers.

Skill level: easy

Mentor: James Smith as general mentor. Specific help for each technology may require help from its developers.

Shelley-Godwin Archive (SGA)

Shared Canvas Viewer

Brief explanation: Shared Canvas is a way of describing a manuscript or other document as a series of annotations onto a shared space, or canvas. As part of SGA, MITH is developing a reader that can display documents using the shared canvas data model. Shared Canvas can be extended to allow many different media annotations. For example, sheet music can be annotated with recordings.

Expected results: Create an interface that resembles the Internet Archive book reader and uses the Shared Canvas data model as its book document format. The best result would be a JavaScript application built using the MITHgrid library that could be embedded multiple times in a single page to allow viewing of multiple documents.

Knowledge prerequisite: JavaScript is the primary language for the SGA shared canvas reader. The shared canvas reader is built on MITHgrid and jQuery. Thus, the book reader interface should be in JavaScript or compiled from CoffeeScript and embedded in an HTML page. You should be comfortable with function scoping and closures in JavaScript/CoffeeScript.

Skill level: advanced

Mentor: James Smith as general mentor. Specific help for each technology may require help from its developers.

Shared Canvas Drupal Plugin

Brief explanation: This tool could be part of a Drupal plugin to allow site builders to create reading interfaces for Shared Canvas from a set of control and display widgets.

Expected results: Create a Drupal plugin that encapsulates the JavaScript libraries required for Shared Canvas and provides a simple set of tags, filters, or widgets. Someone using this plugin should be able to design a custom reading interface for a Shared Canvas document without writing any JavaScript.

Knowledge prerequisite: Familiarity with the Drupal plugin architecture is a must. Drupal is written in PHP, so you will need to be able to write PHP code. The Shared Canvas viewer is written in JavaScript, so some knowledge of Javascript is necessary to tie the pieces together in a node. Some familiarity with the Open Annotation and Shared Canvas data models will help.

Skill level: medium

Mentor: James Smith as general mentor. Specific help for each technology may require help from its developers.

Music Encoding Initiative (MEI)

MEI to VexFlow

Brief explanation: VexFlow is an open source JavaScript library to render Common Western Music Notation (CMN) in an HTML5 canvas. MEI to VexFlow is a JavaScript program that interfaces with VexFlow to render music notation expressed in the MEI format. The Music Encoding Initiative (MEI) is a community-driven effort to create a commonly-accepted, digital, symbolic representation of music notation documents. It has substantial impact on the editorial community and has driven the introduction of digital editing in the musicological community. MEI to VexFlow only covers part of MEI’s vocabulary. In particular it needs

  1. better support for “spanners” such as slurs, hairpins (crescendo/decrescendo) and directives;
  2. dealing with system breaks and pagination.

Expected results: Improve MEI to VexFlow’s code to support one (or both) of the two requirements specified above. A test page should be created to demonstrate these functionalities. MEI test data can be provided by the mentor.

Knowledge prerequisite: JavaScript is the primary language for MEI to VexFlow and VexFlow. jQuery is used in both projects, so a good understanding of the library is required. You should also be very comfortable with reading and writing music notation (CMN) and understand basics of music typography.

Skill level: medium

Mentor: Raffaele Viglianti as mentor.