The Interface Ecology Lab is a supportive community of developers dedicated to human-centered computing, object-oriented design, and open source software. We are engaged in cutting-edge research that visualizes and embodies social and semantic information, with multi-touch interaction, for use in games, creativity support tools, interactive art, and other digital media. Eight Summer of Code Internships enabled students from Romania, India, and The United States to participate.
The foundation of our software is S.IM.PL (Support for Information Mapping in Programming Languages), the best-in-class open source framework for developing distributed programs across programming languages that share and store complex data structures. Its great for writing programs that connect iOS and WPF clients to Java servers.
Built on S.IM.PL, meta-metadata is a language and software architecture for metadata wrappers. for representing the rich structures of the world's metadata, facilitating extraction, manipulation, visualization, and embodiment. Mmd transforms the web into a structured type system and ontology of semantics. This facilitates extraction, manipulation, visualization, and embodiment of the world's data. We use meta-metadata to enable people to collect, visualize, and embody metadata as rich bookmarks to support ideation in InfoComposer and trans-surface interaction.
The Interface Ecology Lab works on developing innovative multi-touch hardware, such as ZeroTouch, to embody people's interaction with information. This makes important developing open source software for connecting sensory interface hardware like ZeroTouch, with common software platforms. Likewise, we are using S.IM.PL and meta-metadata to develop trans-surface interaction techniques for exchanging rich bookmarks between Android phones.
This summer's projects involve S.IM.PL, meta-metadata, and multi-touch:
Find our application template at the bottom of this page. Applications are strictly due on April 6 19:00 UTC (4 pm Central Daylight Time), and must be submitted through Google GSoC; specify Interface Ecology Lab @ Texas A&M University as the organization. Google will pay each participating student $5000 for the summer.
Applications for Projects M1-M7 require you to author a meta-metadata wrapper. See the meta-metadata guide for instruction on setting up a development environment and tutorials on authoring wrappers.
Subscribe to meta-metadata developers group, and s.im.pl api developers group to see our history and ask questions.
IRC channel: irc://irc.freenode.net/ecologylab.
Porting S.IM.PL to Python will mate Python's powerful fluid scripting with the cross-language object declaration support of S.IM.PL and meta-metadata. combine the rapid web app development aspects of with the multiple platform and language agnostic features of S.IM.PL. S.IM.PL Serialization is a de/serialization framework that supports information mappings across programming languages and platforms. S.IM.PL lets developers write complex data structures (e.g. trees, hashmaps, and graphs) in annotated Java and generate equivalent de/serializable class types in C#, Objective C, and partially in Javascript. S.IM.PL runs on Java Sun, Android, Mac OSX, and IOS.
The result will be great savings in time and simplicity for developers writing distributed applications with Java, C#, or iOS clients and server-side Python / Django. Writing code by hand for each programming language introduces human error and inconsistent representations between class definitions that are supposed to represent the same data. In the pre-S.IM.PL world, to save or pass an instance of a type from one programming language to another, one must hand-code a de/serialization scheme that marshals each instance of a type, such that its structure can be remade. Clients and servers often do not share a common programming language, so the entire process of defining the data structure and de/serialization across languages is foisted on developers.
Using standard object representations across programming languages and platforms provides the interoperability required for utilizing the best aspects of a language or platform, without incurring the development cost of writing and maintaining the same complex data structures each time the schema changes. Passing objects between platforms as serialized instances of S.IM.PL objects will provide a common context for clients, servers, and applications. The type definitions and JSON or XML bindings will be encapsulated in a SimplTypeScope.
The student will start by implementing de/serialization of S.IM.PL objects in Python/Django. Django models must be used because Django's database integration provides persistent storage. The student will create a Python/Django code generator in Java, which will be similar to other implementations, that takes a SimpleTypeScope as input and gives Python/Django code as output. The code generator will output code for adding objects into Django's administration management. As in other S.IM.PL language support packages, De/serialization must be implemented for JSON and XML serialization formats. The parsing in other languages will be ported. Testing this code will be accomplished by deserializing and serializing S.IM.PL objects from different platforms.
Once S.IM/PL de/serialization and code generation is finished, the student will implement HTTP OODSS in Python/Django. The Student may use the same session handling mechanisms that are implemented in Java HTTP OODSS or design another mechanism for handling sessions. Clients accessing the server will make a request through a serialized S.IM.PL object passed as a POST parameter. The server will send with a serialized OODSS Response object. Non-HTTP implementations of OODSS are designed for persistent bidirectional communication include Update messages that a server may send clients (push communication). Update messages will simulate bidirectional communication with long polling.
After Python/Django OODSS is developed, the student will use S.IM.PL Python to create an interactive web app for sharing and authoring rich bookmarks as lists and grids. The rich bookmarks will use the Metadata.js code from the M4 project to show explorable metadata over collected items. Each rich bookmark will be represented by a picture or a text snippet and have metadata that is available for viewing on demand. The student must use Django templates and interact with the server though asynchronous Javascript.
The student should be familiar with Python, Django, Java, Javascript, HTML, jQuery, and web services.
Port current meta-metadata functionalities from Java into C#, to support seamless cross-language and cross-platform metadata semantics interoperability and the creation of rich Windows applications built around meta-metadata.
Having meta-metadata in C# allows it to be used in native Windows frameworks such as WPF, WCF, and WinForms. This allows developers to create applications which can take full advantage of the Windows platform, including Windows 8, Windows Touch, and Windows Phone to name a few.
During the porting process, you will gain an understanding of how the meta-metadata system works, as well as interesting research and engineering problems such as:
C#, Java, XML, XPath.
As part of the application students will need to get familiar with meta-metadata by authoring a wrapper and running tests.
An information compositions is a spatially arranged set of rich bookmarks that visualizes concepts and ideas. InfoComposer is made to support the creative process of collecting, arranging, reflecting, and generating new ideas. Letting users save and collaborate with compositions will help people share ideas and communicate in a flexible, visually appealing medium.
Design an out of the box server solution for sharing information compositions. This will allow an individual or organization host a reusable, extensible, web portal application that stores information compositions and supports users in sharing and maintaining information compositions in a social network.
The student will create a self contained web application where users upload, download, browse, share, and publish compositions authored with InfoComposer. This site will also serve applications with an API for retrieval and storage of information compositions. This constitutes cloud storage with social networking for individuals who create information compositions. Saving compositions should also allow a user to add tags, which will be used for searching and browsing public information compositions. The student will also implement an account management service using the Django admin site. The student will use Django and Pinax to implement a social network where users can form groups and publish information compositions on the web publicly, to a group, or just for themselves.
In InfoComposer, an information composition is saved as an icom file, which is a zip compressed file that include all information about the composition. This file includes a generated HTML versions of the information composition, which the social network would use to show compositions. It also includes information about all clippings included in the composition and annotations. Being able to understand and use this information will make the information composition social network better. The student will use the Python implementation of S.IM.PL to help tag information compositions and provide as much information about information compositions as possible.
The student should be familiar with Java, Python, Django (Templates, Database Objects, Rest responses), HTML, Javascript, CSS, XML, and web services. While the student should have a local application development environment initially. We will provide a virtualized environment to enable more realistic deployment conditions.
The semantic service will transform the wild web into well structured rich semantics, in the form of XML or JSON, with a RESTful interface, using meta-metadata. Rich semantics will be directly mapped to classes and instances in programming languages including Java and C# for convenient use. The semantic service is critical for building thin clients (web-based, Android or desktop) working with rich semantics from multiple sources, such as a web site mixing all your social network activities; an application allowing you to collect rich bookmarks (see the figure; check out InfoComposer); a mobile app that you can share rich bookmarks with annotations to your family or friends, or even social networks.
The semantic service will store complex metadata semantics in a distributed database back-end, and communicate with clients through HTTP. SIMPL OODSS over HTTP, an easy-to-use web service framework, will simplify the implementation, by using S.IM.PL Serialization on information and message data structures. However, rich semantics also brings unusual challenges: storing complex metadata semantics into a database back-end (we are primarily focusing on PostgreSQL for now) results in large number of tables and performance issues; the messy nature of semantics in the real world requires dealing with cross references both in memory and in database; we must survive schema evolution along with changes in the wrapper repository, and maintain high performance through distributed, fault-tolerant data stores and caches.
In GSoC 2011, an Object-Relational Mapping module has been implemented, connecting metadata semantics with databases. This year, building on previous work, the student will put components together and finally kick off the service! The student will work with the mentor to design the service interface, create testings, deploy the service, code simple maintenance tools, and deal with aforementioned challenges. The student will learn about and experience web semantics, RESTful web services, distributed storage and processing, among other exciting techniques that are related to complex big data, and participate in cutting edge research. We will provide access to a virtualized environment on a many-core server that we have.
Java, XML/JSON, SQL (ideally PostgreSQL), HTTP. Experiences with web sites, services, Ehcache/memcached, and distributed systems will be a plus.
The specific scope of work may be adjusted according to the student's experiences. A minimum set of deliverables includes:
Optional deliverables:
This project seeks to help Google Chrome users better explore the web and improve the value of mashups by providing metadata about linked documents. The student will build a Chrome extension for interactive visualization and browsing of metadata as HTML5. For the general use case, the extension will display metadata associated with linked documents when the user brushes her mouse over hyperlinks. The extension will build on existing Javascript extraction that uses meta-metadata JSON objects to extract metadata as JSON and present the metadata through javascript injection.
The idea is to bring InfoComposer's treatment of rich bookmarks into HTML5! Launch InfoComposer, drag an image from Amazon from Firefox into an empty information composition, and see what we mean :).
The student will be responsible for designing structures, interactions, and visual styling (CSS3) of the metadata browser. A clean, space efficient, visualization is important. The student will need to create a design that mitigates difficulties inherent in displaying metadata that include large tree structures, cyclic graphs and lengthy text fields.
One deliverable is to develop an exciting use case involving mashups, including authoring new meta-metadata wrappers as needed. The student will use existing open source mashup and visualization tools, such as OpenStreetMap, Google Maps, and SIMILE. This use case will enable users to quickly create mashups from collected metadata.
Examples of possible mashup use cases are:
The Object-Oriented Distributed Semantic Services (OODSS) framework supports developers in defining web services easily by enabling them to specify the data sent over the wire, its serialized form, and the operations upon it together in one place. Near Field Communication (NFC) is a set of standards for smartphones and similar devices to establish radio communication with each other by touching them together or bringing them into close proximity. Mobile phones equipped with NFC chips can send OODSS messages to each other and also to PCs or other devices with NFC. NFC wraps the message into NFC Data Exchange Format (NDEF). There are four different types of NFC tags in NDEF. This project will develop libraries for wrapping, sending, receiving, interpreting NFC messages from OODSS messages targeting various programming platforms including Android, Windows phone 8 (in the future), and PC/Mac (Java, .NET, Objective-C, etc.) through USB connected NFC chip.
Enabling the trans-surface transfer of messages, such as rich bookmarks, across different devices can support a collaborative working environment. Information composition is a holistic form for representing collections and to support ideation. Image and text clippings from web pages function as visual, semiotic, and navigational surrogates (rich bookmarks) for significant ideas. compositions are formed by collecting rich bookmarks , which are generated by meta-metadata. Meta-metadata is an open source framework addressing problems associated with supporting metadata semantics for diverse information sources. Mobile devices usually have access to mobile versions of websites that are different from normal desktop version of the sites. Thus, the student will author meta-metadata wrappers for these website,versions.
Familiarity with XML and multiple languages, including Java, C, .NET, Objective-C is recommended. Previous experience with mobile devices development is a plus. The student must state in the application which devices and platforms s/he has available for development.
The student will be responsible for becoming familiar with S.IM.PL framework and OODSS. S/he will then develop high-level Windows, Mac, and Java APIs to support application developers developing software across phones, tablets and PCs, using NFC to communicate. Will work with the mentor and other people who are developing applications that potentially use NFC to communicate. The student and the mentor will also identify websites targeting mobile devices that are of particular interest. The student will author wrappers for these web sites. With the completion of each wrapper, the mentor will inspect the work and provide feedback.
Design and implement a Windows 7 and 8 application which converts incoming TUIO (http://www.tuio.org/) events into Windows touch events.
Currently the only available TUIO to Windows touch bridge application is Multi-Touch Vista (http://multitouchvista.codeplex.com/). This application is difficult to use, does not support multiple monitor setups, and contains bugs and memory leaks. The goal of this project is to create an application similar to the (only partially open source) Multi-Touch Vista, but better designed, more robust, and feature complete.
Required features of the application: able to listen for TUIO events and convert them to driver level Windows touch events, stable, and easy to install and run. The application should be free of memory leaks and should not output ghost touch events.
Other desired features include: having the application in the Windows system-tray so configuration options can be viewed and modified, supporting multiple monitors and multiple incoming TUIO ports, and options to disable and emulate stylus events. Future work, as these platforms enable support for multiple monitors and touch events, will build compatible functionality for Android and Apple.
The student should begin by learning about Multi-Touch Vista, Windows 7/8 touch events, and TUIO messages. Then, formulate a design and implementation plan. The final application should include adequate documentation, so that it can be easily utilized and distributed.
The desired student should have experience creating Windows drivers. The student should also be familiar with TUIO and OSC. Ideally, the student will have a touch-enabled Windows device. The Java TUIO-based simulator will in any case be utilized.
Please use the following format and guidelines when preparing your application
Describe your previous experience in software or hardware development, and what skills you bring to the table. Tell us what brings you to the open-source development community. Explain how open source fits with your other pursuits in life, academic or otherwise.
2 to 3 paragraphs describing your motivation for working on the project you have chosen. What you expect to gain from working on the project, why you are interested, and what you believe to be the expected benefits to the open-source community.
In roughly a page of text, breakdown your selected project into a set of milestones or deliverables and set realistic timetables for accomplishing these deliverables. Include a GANTT chart showing your planned progress over the summer. Explain the deliverables that are "must-haves", as well as expanding on future work that you may or may not accomplish, time permitting. Keep in mind that some things may take longer than you originally anticipated, so be sure and include contingency plans for such circumstances. This is the heart of your proposal.
Write a short paragraph detailing how you plan on keeping in communication with your project mentor and ensuring that your deliverables are on time. Will you have weekly Skype meetings? Is email your preferred method of communication? How do you plan to keep us informed of both progress as well as problems?
For projects M1-M7, the code sample is a meta-metadata wrapper that you have authored, along with an example URL that extracts metadata from it. Present a web page that links to the wrapper XML, any newly generated Java classes, and one or more input URL / output xml pairs.
For projects S1 and S2, write a small test program in Java or C# that uses S.IM.PL Serialization's Data Binding Annotation Language to serialize and deserialize some complex data structure. In order to show that you understand S.IM.PL's power, ideally, this will be a graph-like structure, with cycles. It will also use composite objects, collections, and polymorphism. Again, present a web page with links to the source file, and its output in one or more test cases.
Anything else that you want to let us know about yourself, about the project, or any other information you think would help your application should be included as well. This includes other projects you may have worked on, code samples you are particularly proud of, academic publications, your personal blog, software development experience, education, etc. Remember, you are trying to sell yourself as the right person for the job! Anything that would help convice us of that should be in your application, including its associated web pages.