the fast, reliable localhost tunneling solution


GSoC 2011: Project Ideas

This is a list of PageKite-related project ideas for Google Summer of Code applicants. This list should by no means be considered "complete", we are more than open to other suggestions inspired by these or the PageKite concept itself.

For details on what PageKite is, see the links in the sidebar.

Note: Our application to take part in GSoC 2011 was not accepted by Google this time. We'll try again next year! In the mean-time, feel free to take inspiration from this list - whether you are a student or not!

Ideas

PageKite is a young project, just shy of a year old. As such, there are many, many opportunities for students to have a large impact.

Our ultimate goal is to encourage the decentralization of the WWW and make it really easy for anyone to host their own web server, so any projects which help accomplish that by using or improving on PageKite fall within our scope of interest.

Ideas are explicitly not limited to those which are likely to generate near-term revenue for the PageKite Service, we take a longer view of things and feel that any application which raises awareness of the technology and makes it more useful will ultimately benefit both the open source community and the company itself.

The following ideas fall roughly into roughly three categories: improvements to pagekite.py, re-implementation of the PageKite protocols, and interesting applications of the technology.

Detailed descriptions follow.


Improvements to pagekite.py

pagekite.py / Mac OS X desktop integration

Required skills: Python, Mac OS X
Difficulty: medium
Licensing: AGPL
Mentors: Bjarni R. Einarsson

The goal of this project is to integrate PageKite into Mac OS X as well as possible. Sub-projects could include:

  • Implementing a basic user-interface in Python, probably an indicator in the menu bar showing status and a sub-menu allowing an easy way to turn PageKite on or off.
  • Integrating with the file-manager context menus to make it easy to share a file or folder as a website, either permanently or temporarily, publicly or using some form of access control.
  • Integrating with the system so PageKite starts up with the OS.
  • Packaging the finished product for easy installation on Macs!

Alternate protocol implementations

C or C++ implementation of PageKite front-end

Required skills: C or C++, socket programming
Difficulty: medium/hard
Licensing: LGPL, Apache or BSD style
Mentors: Bjarni R. Einarsson

The goal of this project is to create a high-performance and/or low-footprint PageKite front-end, which could either be suitable for pagekite.net-style widely shared front-end deployments or, alternately, embedded in F/LOSS router software.

Rather than starting from scratch, this project should probably build on top of an existing low-footprint/high-performance HTTP reverse proxy (for example nginx or lighttpd), as a module if possible, or implemented on top of a mature event-driven library such as libevent.

C or C++ implementation of PageKite back-end

Required skills: C or C++, socket programming
Difficulty: easy to hard
Licensing: LGPL, Apache or BSD style
Mentors: Bjarni R. Einarsson

The goal of this project is to create a light-weight C or C++ implementation of the PageKite back-end, for use on embedded devices.

There are a few different approaches to this problem which could all be useful and vary significantly in complexity:

  • A blocking, single-threaded PageKite HTTP server would serve as a good introduction to low level socket programming.
  • A PageKite extension to libevent, including interfacing with the built-in HTTP server would provide high performance and an easy path towards PageKite support in any other software which uses libevent.
  • A full featured C (or C++) rewrite of the pagekite.py back-end functionality (preferably based on the libevent support above).

Android/Java implementation of PageKite back-end

Required skills: Java, socket programming
Difficulty: easy to hard
Licensing: LGPL, Apache or BSD style
Mentors: Bjarni R. Einarsson

The goal of this project is to create reusable Java code which Java and Android developers can use to add publicly visible HTTP servers to their applications.

  • A blocking, single-threaded PageKite HTTP server would serve as a good introduction to low level Java socket programming.
  • A full multiplexing PageKite back-end proxy using asynchronous I/O would be more complex, but also more powerful.
  • Providing an API to easily launch such a proxy in a separate thread from the main Java application would allow PageKite support to easily be added to existing Java web servers.
  • If targeting the Android environment, this project may have additional constraints as to what sort of external code can be depended on - keeping the footprint of the library small and minimizing dependencies is important in this context.

Add native PageKite support to HFS

Required skills: Delphi (reading Python)
Difficulty: medium to hard
Licensing: GPLv2
Mentors: Massimo (rejetto.com), Bjarni R. Einarsson

HFS is an easily installed stand-alone HTTP server for Windows. By adding native PageKite support to HFS, users of HFS would no longer need to know how to (or have permission to) reconfigure their routers or firewalls in order to make their sites visible.

The level of complexity for this task depends on the level of performance desired: implementing a blocking single-request server will be relatively easy, but full support for multiplexing multiple requests over the PageKite connection will require a more complex asynchronous design.

This project would be mentored by Massimo Melina, the principle author of HFS, with back-up and guidance on any PageKite-related issues from Bjarni.


Applications of PageKite

PageKite wallet for Unhosted

Required skills: Python, HTML/CSS/Javascript
Difficulty: easy
Licensing: AGPL or GPL
Mentors: Michiel de Jong, Bjarni R. Einarsson

The goal of this project is to create a trivial-to-install Unhosted wallet and/or key-value store which uses PageKite to expose itself to the wider Internet. This would allow users of Unhosted web-apps to keep their credentials and/or application data on their own hardware, for maximum privacy.

Once a working Python program has been created, a logical second stage for this project would be to explore various platform-specific packaging options for making it easy to install on Linux, Windows or Mac OS X.

See http://unhosted.org/ for details on the Unhosted project and protocols.

This project would be mentored by Michiel de Jong, the founder of the Unhosted project, with back-up and guidance on any PageKite-related issues from Bjarni.

Android web-identity application

Required skills: Java or Python, HTTP, HTML/CSS/Javascript
Difficulty: medium-to-hard
Licensing: AGPL or GPL
Mentors: Bjarni R. Einarsson

This would be a project to create a personal identity server which could be carried around in your pocket (an Android App). Some things a server like this could do:

  • Function as an OpenID server for the owner.
  • Expose a REST API for external access control.
  • Be an unhosted wallet (see above).

The access control use-case is a particularly interesting one, as it could provide a decentralized way to do access control using credentials users are already familiar with - names, e-mails or phone numbers. As an example:

  • User visits my personal photo album, is asked for identification (phone number, e-mail, anything that might be listed in my address book).
  • The photo album uses the REST API to contact my phone and request access.
  • The Android Identity app looks up the user in my phone book and may immediately grant access based on previous interactions, possibly by silently sending a one-time-password to the user over SMS or e-mail.
  • Alternately, it could vibrate or ring, and prompt me to make a decision manually.
  • An advanced implementation might let me chat directly with the user before granting access.

This application could be developed either as a prototype, using SL4A, in which case it could directly build on top of pagekite.py, or it could be a stand-alone Android application and the implementation of a native PageKite connection left as a separate project.


Miscellaneous

  • Teach pagekite.py to do uPNP.
  • Add support to pagekite.py and the PageKite protocol for streaming media and rebroadcasting one stream to many recipients (generalized ice-cast).
  • Add caching support to the pagekite.py HTTP implementation.
  • Add PageKite as a VLC streaming transport.
  • Add HTTP Proxy support to connectbot (on Android) and/or popular VNC clients.
  • Add native PageKite support to XAMPP or MAMP

Comments

  1. Karthic.Rao said on 2011-11-26, 04:58
    Nice Project , Wish you all the best and hope that the you get a entry into GSOC
    Permalink

Leave a comment

( (Please leave these blank: )

We use Gravatar for commenter's photos. Get your own, it's free!