Project ideas on web systems

List of project ideas related to web services and systems.

Extension VideoIO to include WebRTC

The existing Flash VideoIO project provides a simple to use video box with extensive API to enable several use cases such as video messaging, playback, two-party calls and multi-party conferencing. It works on top of the Flash Player plugin. This project extends the VideoIO component so that it detects the emerging WebRTC in the browser, and if available uses that, otherwise falls back to the Flash application. The goal is to enable smooth transition of video related applications to emerging HTML5 technologies. A common API enables web applications to be independent of the underlying capability of the browser or plugin. The common API will be in JavaScript.

SIP in Javascript

The goal of this SIP in Javascript project is to port the existing Python-based Session Initiation Protocol (SIP) and related Session Description Protocol (SDP) library of the 39 Peers project to Javascript. The project should use event-based model with best practices in Javascript object oriented design.

Due to the current limitations of Javascript (no UDP socket, no TCP server socket, no device access), implementation of certain network applications such as a VoIP phone in pure Javascript is not possible. However, using the separate flash-network project that provides the complete socket and media API to Javascript one can build many types of network application including a SIP phone in the browser. In future, the availability of native WebRTC in browsers will enable multimedia sessions in the browser.

The demonstration of this project should combine the SIP javascript with flash-network and flash-videoIO to build a complete SIP-based video phone in the browser. The browser phone should interoperate with existing SIP phones such as X-Lite and Bria.

Additionally, it should support SIP over web socket using an appropriate third-party SIP proxy that supports such an extension.

Completed

The project is completed at http://code.google.com/p/sip-js/ to support both Flash Player and WebRTC/WebSocket mode. In the WebSocket mode it needs a SIP proxy server capable of SIP over WebSocket such as the sipd.py application from http://code.google.com/p/p2p-sip project.

Partly Completed

An initial implementation is completed and available as open source at http://code.google.com/p/sip-js and we are looking for more developers to interoperate with WebRTC and SIP over web socket. An initial demonstration is available as Web-based SIP phone.

Bring full socket API to web applications

Using Javascript, Flash Player and Adobe Integrated Runtime (AIR) applications create an easy to use Javascript API that allows any web application to use complete socket API. In particular, AIR supports datagram (UDP) socket as well as (TCP) server socket that allows building any type of network application. But Flash Player lacks these primitives hence web applications relying on Flash Player cannot build any type of network system. Flash Player also has custom cross-domain security restrictions preventing it from building general purpose network clients that can connect to existing network services on the Internet without installing custom cross-domain security provisions on the server.

The idea behind this flash-network project is to bring the power of AIR to web applications by having your Javascript code talk to an embedded Flash application that in turn talks to a locally running AIR application for full network/socket API. Once the system is installed, it does not depend on any server side custom provisions. Additionally, it should allow integration with the flash-videoio project to enable audio/video sessions using RTP (real-time transport protocol) and SRTP (secure-RTP) from the browser. This project is another step in bringing peer-to-peer applications to the end users, and away from "managed" services that are common today.

Security and permissions are of great importance in bringing the full socket API to web applications. In particular, the end-user with the browser should have absolute control over which web application can access the socket API, and should be able to audit and manage the API usage at any time.

Partly Completed

An initial implementation is completed. The developer's guide is available at http://theintencity.com/flash-network and works on popular browsers using latest Flash Player. Future work involves better access control, security and management of usage.

Translator between RTCWeb/WebRTC and SIP/RTP

Build a generic framework for creating RTC web applications, and interoperating with traditional SIP systems. The IETF RTCWEB working group is defining standards for voice and video communication within a browser. Google has released open source WebRTC software that includes high quality voice and video engine. Interoperating with SIP involves RESTful APIs for signaling in the web side that uses native RTCWEB or external WebRTC-based plugin/application, and SIP/RTP on the other side. The translator can sit in the local host or network to enable directly talking to both other browsers or SIP/RTP user agents, or in a server-side gateway which provides a network hosted translation.

Web-based video office to allow visitors to talk to the owner

Build a web-based video office application which the owner can use to talk to his office visitors. When someone visits the office, the owner should notification on his existing instant messaging client, so that he can visit his office to talk to the visitor. The application should have a list of waiting visitors, and give an option to the owner to select which visitor he wants to talk to. Visitors should be able to send offline message to the owner in his office, which the owner sees when he next opens his office.

Required: Javascript or Actionscript, server programming

Completed and closed

A Video Office application is created using Flash-VideoIO, Google App Engine, its Channel API and XMPP module. You can create your own video office using your Google account -- visit the link for details on how.

Web-based random video chat application

Build a chat-roulette style random video chat application that connects random people. Your application should have an option to logout and login, and to select a next random person. It should allow both video chat and text chat among the two connected people.

Required: Javascript, server programming.

Completed and closed

This project is implemented as Random Face application using Flash-VideoIO on Google App Engine using its Channel API. You can view the source code of two files, index.html that renders the front end user interface and main.py that forms the back-end service using Google App Engine.

Two-party video chat application on Facebook

Build a Facebook application that allows you to video chat with your online friend. The interface should enable two-party video call and display the video of both sides in a call. You do not have to worry about text chat because users can already use Facebook's text chat. The goal is to provide embedded experience of video call from within Facebook.

Required: Javascript, PHP
Desired: FBML/FBJS familiarity

Completed and closed

The project is already implemented as face-talk using flash-videoio. It is a FBML application for Facebook. The source code of face-talk will be made available soon.

Browser extension to video chat with others browsing the site

Build a Firefox (or IE) extension to video and text chat with other people browsing the same web site. Once a user installs this extension, he sees a user list and a chat history area. The user list and chat history content keeps changing as the user browses from one web site to another, and reflects the current user list and chat history associated with the currently opened page in the browser. How do you intend to handle multi-tab browsing?

Required: Javascript, Xul, server programming.

Browser plugin to provide high quality audio capture interface

Create a browser plugin (either for Firefox or IE) that allows access to high-quality encoded voice using Speex and UDP. The plugin API allows an application to start and stop an audio session, set local and remote transport addresses to receive and send voice packets to. The plugin should not be dependent on any other browser plugin such as Flash Player. It should support multiple simultaneous sessions.

Required: C/C++, or in whatever language you can write a browser plugin.

Browser plugin to send Flash audio/video on UDP

Create a browser plugin (either for Firefox or IE) that allows the Flash application to use the plugin to convert its RTMP-based media to raw UDP, and vice-versa. The Flash application determines the target transport addresses. The plugin must prompt the user for approval before sending UDP packets to the target address in a session.

Required: Actionscript, C/C++ or in whatever language you can write a browser plugin.

Browser modification to enable end-to-end media path

Modify an existing open source browser such as Mozilla to define new APIs that enable end-to-end connectivity across NAT and Firewall. An application program such as using Javascript embedded in web sites should be able to use the API for establishing end-to-end voice calls. How do you authenticate a connection request?

Required: C/C++, or whatever language the browser is written in.

Secure soft-card for web authentication

Create a web authentication system that allows a user to obtain a soft-card, a secure and signed image file that looks like an identity card, and use that to store passwords for web sites and to authenticate with the web site. This is similar to how Firefox can store passwords, and supply them when needed, and how the videocity project defines a soft-card. The authentication of soft-card should be based on public-key cryptography.

Required: any high-level programming language, Python preferred.

Shared browsing among multiple people

Build a mechanism that allows shared web browsing among multiple people. Ideally, this should be a browser extension, but it is not a requirement. For example, you can build this as a browser inside a browser using iframe. The goal is to build a collaboration platform that allows a user to control a shared browsing session, e.g., to demonstrate or some some web sites to his friends or family. How would it work for embedded content and input, e.g., controlling the youtube video playback, so that everyone watches the same video in the session.

Required: Javascript or Actionscript, and server programming.

Web-based instructional software to teach high-school math

Build a web-based math tutoring application, that allows an instructor to teach fundamentals of math (or any other subject) to his students on the web. The application should have tools and widgets to enable common activities in learning a subject, e.g., video communication, drawings, equations, graphs, boxes, etc. You do not need to create the math syllabus, but should allow a user (teacher) to add or edit lecture materials.

Required: Javascript or Actionscript, and server programming.

Web-based Internet radio and TV system

Build a web-based Internet radio and TV application. A user should be able to browser through multiple channels, see the program, and tune-in to a particular channel. A publisher owns a channel and should be able to create programs for a channel. The programming should allow incorporating existing freely available media resources on the web, e.g., youtube, with proper credits. Do not worry about billing in this project. The end-user should not be able to control or record the media, except changing the channel.

Required: Javascript or Actionscript, and server programming.

Web-based multi-party video conferencing

Build a multi-party video conferencing application using Flash-VideoIO or your own. It should use asynchronous events instead of polling. It should have an API to enable embedding the widget in other web sites. A conference will be identified using an URL. It should have an API to access and modify conference and participants metadata.

Required: Javascript and/or Actionscript, and server programming.

Completed

Part of this project is completed as Public Chat, a multi-party audio, video and text chat application built on top of Python-based Google App Engine and using Channel API for asynchronous instant messaging and presence. You can see the source files: index.html is the front-end user interface, webtalk.js is the client side Javascript to do signaling, and main.py is the back-end service code. It defines RESTful API for userlist and chathistory resources. Since this is HTML/Javascript based application, just copying the code to your web site should work well.

Web-based real-time experts-advice social application

Build a web-based application to connect experts with users in real-time. A user can sign up as expert on some topic, maintain his appointments in a calendar, and provide advice using real-time video conferencing and text. A user can browse through list of experts for a topic, reserve an appointment with an expert, pay for the service, and connect with him during the reserved slot. The system should allow a user to provide review feedback and rating to an expert after getting served.

Required: Javascript or Actionscript, and server programming.

Web-based scalable presence and messaging system

Build a large scale presence and instant messaging application using existing web technologies such as HTTP, comet programming, websockets, etc. Do not use XMPP for IM and presence. The goal is to demonstrate that the basic web technologies are enough to build scalable instant messaging applications. How would you integrate it with existing IM systems?

Web-based shared collaboration space

Build a web-based collaboration application with common widgets such as white-board, text chat, etherpad style document editing, and video conferencing. The goal is to enable collaboration among participants, e.g., in an job interview or project discussion.

Required: Javascript or actionscript, and server programming.

Web-based shared video, slides and photo viewing

Build a web-based application to share media with others in real-time. A user should be able to invite his friends and family, and show them video, slides or photos while video chatting with them. The media resources may be uploaded from user's computer or downloaded from web URL. The goal is to enable people to show-off interesting photos or videos in real-time, and laugh or discuss together.

Required: Javascript or actionscript, and server programming.

Web-based unified messaging system

Build a web-based unified messaging application that combines various forms of messaging such as phone voice mails, emails, instant messaging and discussion forum. A user should be able to access his message box from web, or get it delivered via email. A user should be able to leave a message for another person from web or email. The backend service will need to interface with existing SIP-based phone systems as well as emails.

Required: Javascript or actionscript, and Python.

Web-based Voice-over-IP client

Build a web-based client application that talks to a backend gateway to implement SIP-based voice-over-IP. Your client should be able to make or receive phone calls, handle missed calls, and acts as a desktop phone for the user. You may use an existing gateway such as siprtmp for the backend.

Required: Javascript, actionscript.

Scalable IM and presence for web

Using standard HTTP, build a client-server system for instant messaging and presence that can be used from JavaScript. You can get inspired by existing protocols like XMPP. The client written in JavaScript should display contact list and presence status, communication window with text-area that allows multi-party chat communication. The goal is to allow easy integration with existing HTML/JavaScript based web sites. You will use AJAX for HTTP request to the server, some variation of BOSH for bi-directional stream instead of client initiated polling, and JSON data format instead of having to work with XML. The focus should be on scalability, robustness and simplicity instead of features or protocol data format. Consider using paginated contact list instead of all at once, if the contact list is huge. Also use RESTful architecture as much as possible for accessing resources. The main challenge is building the scalable and robust server. Language: client in JavaScript, server in Python, Java or erlang.

Indian railways trip planner

India has the largest railway network. However, because of the low cost (compared to flights), fixed cost (unlike market driven ticket cost of flights), and low cancellation penalty, the railways tickets get booked quickly. Planning a trip by rail is difficult unless seats are available in direct train. There are too many connections, too many trains and too many train routes. Sometimes there are quota from a neighboring station so that if you can't get ticket from your home town you can take the train from the neighboring town, either next or previous. There are several provisions for last minute, last hour and last week ticket purchase at a higher cost. In summary, railway trip planning is very complicated.

The goal of this project is to build an online railway trip planner that periodically downloads the railway train schedule, availability, etc., from existing Indian railways web site, and provides following features:
1. Get availability and cost information for your trip.
2. Allow flexible dates for your trip.
3. Allow constraint driven search, e.g., reach on so-and-so date, or must have AC 2 tier.
4. Be able to save, compare and print itineraries, and integrate with online ticketing system.
5. Show your journey information on a map.
6. Be able to pick the connections and compare multiple options.

Python web communication framework

Build a web framework in Python that integrates communication and video streaming, and allows you to quickly build web sites that support multimedia and communication. There are several Python based web frameworks such as Django and Pylons. The goal of this project is to emphasize on (1) quick web application development and (2) seamless integration with communication protocols such as XMPP and video streaming such as using Flash. Language: Python

Flash GUI for Python Software

Python is a great application programming language. ActionScript (e.g., in Flash Player) is a great user interface programming language. The goal of this project is to combine the best of both languages. You will create a new framework that will allow (1) a Python program to quickly add a user interface using ActionScript, and (2) an ActionScript software to easily connect and use Python program for additional tasks. One option is to create markup language in Python or XML similar to MXML which allows your to generate various components and scripts in Python and give it to the front end ActionScript software. The front end software takes the markup and creates new ActionScript, Flex and/or Flash components in run-time, and adjusts the user interface. The minor handling of the user input may be done in ActionScript itself, whereas major processing may get delegated to the back-end Python program. Some related work has been described earlier [1, 2] however your project will generalize the idea to build any user interface components. Another advantage of this approach is that it allows you to add additional features that do not exist in Flash Player such as UDP sockets. Language: ActionScript, Python

Web authentication in Python

Python has largely undocumented and some broken support for Digest authentication [1, 2, 3]. Existing web services in Python largely use basic authentication or custom authentication such as using parameters or HTTP cookies [4]. Using basic authentication is not secure, using parameters is not pure RESTful. In this project you will build an authentication mechanism on the server side using Digest authentication and HTTP cookies for a RESTful web service. The tasks are as follows:

Create a web service which handles "GET /login", "GET /view", and "GET /logout" requests. When accessing the 'GET /login' request the server authenticates using Digest authentication. If you use your browser to access this, you will see the password prompt in the browser. After entering the correct username and password, the browser sends another request to your web server with authorization header. Your server verifies the authentication using pre-configured usernames and credentials. If the authentication is successful, then it returns success "200 OK" response, otherwise it again returns the "401 Unauthorized" response. Failure responses should be limited in failed attempts, so that it does not go in infinite loop with automated clients. For success response, the server also sets a cookie containing a session identifier, different from the user's credentials, which the browser can use for subsequent requests such as "GET /view" to the same server. When the user goes to the /logout URL, the server clears the cookies, by expiring it, and removes the session, so that next time the browser will have to authenticate again. You can use the rfc2617.py module of p2p-sip software to learn about Digest authentication in Python.

RESTful server tools in Python

RESTful architecture has several benefits over traditional RPC-style web services. There are several existing RESTful client and server software for Python with one or more problems: too intrusive, tied to the framework, not WSGI compliant, or allow only one type of applications. The goal of this project is to build Python module(s) that allows a developer to quickly and easily create RESTful services. There are following tasks:

(1) Build a regular expression pattern matching URL "router" to transform a matching request and/or invoke a wsgi compliant application for matching request. The router is a wsgi compliant gateway.

(2) Define a unified data format for representing structured data, which can be easily and unambiguously mapped to both JSON and XML. Python 2.6 has built-in json module. Build a function represent(value, type) which takes the value in this unified data format and type of either 'text/plain', 'text/xml' or 'text/json' and returns a string formatted using that particular representations: plain text, XML or JSON, respectively. The conversion does not have to be bi-directional.

(3) Define a high level decorator, @resource, which transforms resource-type function with methods GET, PUT, DELETE, POST to a wsgi application that can be supplied to the router. This allows the developer to build the RESTful service handler either using low level wsgi application or high level resource-style function.

(4) Define a high level function bind(value), which transforms a Python name "value" to a wsgi compliant resource which can be supplied to the router. The value can be a module, object, class or function, and your software should handle these correctly, e.g., if "GET /value/attr" may return the value of property "attr" of that "value" object, or "POST /value" may create a new object of "value" class and return the new object "id".

(4) Use the wsgiref built-in web server and your software to demonstrate a simple RESTful service, e.g., for accessing file lists on your disk.

Completed and closed

The project is completed and hosted at http://code.google.com/p/restlite/

Bug fixes and enhancements are welcome!