Google Summer of Code 2011

StatusNet is an official Google Summer of Code mentor organization.

StatusNet would be a great mentor for the Google Summer of Code 2011 (GSoC) project. GSoC is a Google-sponsored project in which Open Source projects (like StatusNet) mentor college students (like... maybe you! or you, over there! or even YOU!) as they develop features for that very same Open Source project.

Information for students


'''We're an official mentor organization! Student submissions do not open until March 29. See Google's timeline.'''

The Google Summer of Code program runs over a summer (surprise!), so you'll have time to get a pretty good-sized project going. The best projects will be:


 * Useful: Tired of working on nothing but toy programs for class? This is the place for you! The code you write will become part of a software package that real people are using.
 * Non-trivial: You've got 2-3 months to work, which is enough time to get something pretty serious done. Dream big, but make sure it's realistic -- if you're new to StatusNet, you probably want to start smaller than if you're already an expert!
 * Iterative: The best projects can be divided up into several major steps, each of which would be useful even if the rest of the project doesn't get finished. Programming tasks can sometimes end up a LOT harder than you thought at first, and it's easy for schedules to slip! Make sure that even if it does, you're going to end up with something you're proud of.
 * Awesome: If you're not excited about your project, find one that you do love!

Community


Ok, we admit it... we're not just a bunch of altruists here to give you some summer work. ;)

We're really hoping that you'll stick around and become a regular part of StatusNet's open developer community... but even if this won't be your regular hangout, you'll get the most out of your experience if you're comfortable talking with your fellow devs!

Come join us!

 * StatusNet 0.9 with OStatus:
 * Join the !statusnet group on identi.ca for important dev updates and !statusnetsoc for GSoC-specific stuff. You can join remotely. You should.
 * IRC chat:
 * Come hang in #statusnet on Freenode, we're friendly!
 * Forum:
 * forum.status.net for help with installing, administering, and designing StatusNet sites
 * Mailing list:
 * We may be social network junkies, but we're still old school! Join the statusnet-dev mailing list to hash out ideas long-form.
 * Wiki:
 * You're here on our wiki now!

Adding a Proposal
When adding an idea to this section, please try to include the following data:


 * if the application is not widely known, a description of what it does and where its code lives
 * a brief explanation
 * the expected results
 * pre-requisites for working on your project
 * if applicable, links to more information or discussions
 * mailing list or IRC channel for your application/library/module
 * your name and email address for contact (if you're willing to be a mentor)

If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.

Federated Direct Messages
ATM you cannot send direct messages between federated instances of StatusNet, would be great if that could be implemented.


 * This seems pretty fundamental to devote to a GSoC project. --Evan 15:05, 29 March 2011 (UTC)

Interested Mentors:

Overhaul the XMPP Interface
XMPP bot suffers some problems like switching the interface language randomly and pick up entirely wrong messages for the conversation, especially when talking to a federated contact.


 * This is a bug fix, not a summer project. --Evan 17:26, 28 March 2011 (UTC)

Social Analytics Plugin
Social network analytics is becoming an interesting niche application category. There are several services that are specializing in this and some interesting applications being developed (e.g.: ThinkUp) to give insights into what's happening in your social network over time. Most of these services have to get their data via API calls. One nice thing about StatusNet is that same sort of data is available directly to developers via StatusNet's plugin system. It would be cool to crunch some numbers and show some pretty charts. A good plugin would have some (or all, or more) of these features:
 * Charts of stats (Google Analytics like)
 * Use some of the awesome JQeury/JavaScript charting libs out there
 * number of followers over time
 * posting behavior over time
 * Your posts
 * Average per week
 * Average notices that receive replies / repeats
 * Your friends posts
 * As above
 * Information about your subscribers/subscribees:
 * Average subscribers per month
 * How man remote subscriptions?
 * Where are they from? (plot on map)
 * Who updates the most, least?
 * Who replies to you / repeats you the most?
 * Which of your subscribers has the most mutual followers?
 * Who used to subscribe to you?
 * Identify likely spammers (maybe)
 * Which of your subscriber has the most subscribers?
 * etc.
 * Map (OpenStreetMap / Google Maps) plot of all your friends' locations
 * Breakdown by country, etc.
 * Analytics about Twitter and Facebook data that we get via bridges/mirrors
 * Export data: CSV/tab-delimited, XML, JSON

Interested Mentors: zcopley

Internal URL shortener analytics / "pimp out" the URL shortener
StatusNet 1.0 will have an internal URL shortener (Check it out in the 1.0.x development branch). It would very interesting and useful to have metrics and an API for this. Think along the lines of what Bit.ly and goo.gl provide.

Some things to measure -- these could be site wide and per user


 * total clicks / click per day / per week / per month
 * popular / least popular
 * breakdown by media type (vids, images, etc.)
 * referrers
 * countries
 * etc.

Provide pretty charts! (Bonus for using JQuery Sparklines.)

Other neat ideas:
 * a RESTful API for the internal shortener
 * Endpoints for:
 * shorten
 * expand
 * validate
 * clicks
 * more (use your imagination!)
 * Generate QR Codes (Cool!)
 * Make a bookmarklet for the internal URL shortener
 * Integration with browsers (that would be sweet!!)
 * Way(s) to browse the links
 * Functionality to provide your own custom URL for the shortener
 * Pronounceable URL facility (make URLs easier to read aloud)
 * Export link database (as Activity Streams, CSV, etc).

Interested Mentors: zcopley

Cluster map of your social network
Similar to http://inmaps.linkedinlabs.com/, but for StatusNet data. See http://gephi.org/ for info on how to make it work.

This is interesting problem. Gephi has suggested use of WebGL for a web interface for its this years GSoC.

Using this library for drawing force directed graphs. http://thejit.org/static/v20/Jit/Examples/ForceDirected/example1.html

Interested Mentors:

Implement a "real-time" API (like Twitter's streaming API)
This is a hold-over from last year, and still a killer nice-to-have. Real-time API streaming is sort of a burgeoning area, and StatusNet could really get on par or perhaps even take the lead in this area given some elbow grease.

Description from last year:


 * Messaging is an inherently "push" medium, but today most clients use pull-based REST APIs like the traditional Twitter API, which StatusNet implements and extends. Real-time message delivery is available for server-to-server communications, chat interfaces, and even the web but dedicated messaging clients need this too!


 * Twitter has added a real-time streaming API. a compatible implementation would enable Twitter clients that may upgrade to use it in the future to easily adapt to access FOSS StatusNet-based services as well.


 * http://apiwiki.twitter.com/Streaming-API-Documentation

This year, let's also say there's no imperative to make our streaming API Twitter compatible. There are some really interesting new ways to do this kind of streaming (e.g: WebSockets).

Interested Mentors: candrews

Queue manager interfaces
StatusNet can delay time-intensive work so it's done not at Web time but by offline daemons. We have a (crummy) built-in queue manager, and a pluggable architecture for adding additional queue managers.

It would be very helpful to implement a queue manager plugin for one of the following queue protocols or systems.


 * AMQP queue manager. Make a QueueManager implementation class that uses the AMQP protocol for talking with the actual queue server (RabbitMQ).
 * Gearman queue manager. Ditto, for Gearman.
 * Amazon SQS queue manager -- a queue manager implementation class that uses Amazon Web Services SQS service.
 * Kestrel and/or Starling -- the queue managers used by Twitter.

Interested Mentors: candrews

Real-time browser interface
StatusNet users love getting real-time updates in the browser interface. We have a real-time update framework that currently supports Meteord, Orbited, and Cometd. It would be great to get support for more and better realtime plugins; see Realtime for some potential real-time engines to support.

Implementations should be done as a plugin and should use the RealtimePlugin architecture. They should take into account security (i.e., you can't get to notices you shouldn't see by fingerpokin' at the real-time server).


 * Strophe.js plugin -- make a subclass of the RealtimePlugin that uses Strophe.js
 * Ape plugin -- make a subclass of the RealtimePlugin that uses Ape
 * Frozen Mountain plugin -- a plugin to use the Frozen Mountain realtime update server
 * Tornado plugin -- support the FriendFeed Tornado server
 * WebSockets -- support the new standard for 2-way client/server communications specified in HTML5, perhaps using Socket.IO for fallback on browsers that don't support WebSockets

Interested Mentors: candrews

Photo-sharing and Flickr API
Status Updates aren't just about "140 characters" of text any more. A lot of people are sending photos around, and StatusNet has some native support for attaching uploaded files to help with this.

But we could do with much better photo uploading and sharing capabilities:
 * uploading multiple files
 * adjusting photos after posting (cropping, tagging, adding descriptions)
 * better integration of commenting and other user-to-user abilities

Implementing the Flickr API for at least basic upload and search features could make StatusNet a more attractive platform to use for photobloggers as well, as it could help integrate picture posting into existing tools and workflows. Any implementation should also support Activity Streams for output. This is a microapp!

See http://lists.status.net/pipermail/statusnet-dev/2009-September/002320.html.

Interested Mentors:Santosh Lakshman(Lucky Murari) googlinx (at) gmail.com

Status update device
The Ben NanoNote is a nifty little computer. It would be great to make a dedicated client application that runs on the NanoNote.


 * Qataki is a nice little curses-based status update system that might work on the NanoNote. Might be interesting to look at something more graphical. --Evan 20:07, 24 March 2010 (UTC)

Interested Mentors:

Foursquare/Gowalla Lite
StatusNet is location-aware, and has a pluggable architecture for location vocabularies. Current vocabularies are "official" locations: cities and countries.

It should be possible to make basic Foursquare or Gowalla-like system that lets people "check in" in a distributed way. The microapp architecture lets us do different activity types; "checkin" would just be a new activity type.


 * Find a "place" vocabulary that uses restaurants, cafes, bars, etc. Ideally it would be Open Content and user editable. SimpleGeo is good!
 * Build a location plugin that uses that vocabulary (compare the GeonamesPlugin to figure out what you need to do).
 * (optional) use Salmon to collect "checkin" data for a particular place, and show checkins for that place.
 * (optional) build a mobile client application for checking in

Interested Mentors: Evan

Additional location providers
StatusNet is location-aware, and has a pluggable architecture for location vocabularies. It would be great to support more and different location data services.


 * Yahoo! Geo location provider -- a geographical names provider that links to Yahoo! Geo (see geonames.org plugin for model)
 * OpenStreetMap location provider -- a geographical names provider that links to OpenStreetMap

Interested Mentors: candrews

Receive location updates
There are a few location services that broadcast user locations. Build a plugin to integrate one.


 * Plugin to integrate location with Google Latitude (per user)
 * Plugin to integrate location with Yahoo! Fire Eagle (per user)

Interested Mentors: candrews

Real-time search
NOTE: really advanced! Google, Bing, Collecta, and Twitter have real-time search interfaces. Users can start a search for certain terms, and as notices are written that match that search term, the notices are distributed to the searcher(s).


 * Show real-time search results in the Web interface for a single site.
 * Receive notices from remote sites using e.g. PubSubHubbub or ping. Index and redistribute.
 * (Optional) Allow remote subscriptions to search results using OStatus. For example. subscription to foo+bar@example.com would re-distribute notices that match "foo" and "bar".

Interested Mentors:

RDBMS backend
StatusNet currently supports MySQL and PostgreSQL for data storage. It uses DB_DataObject which in turn uses PEAR DB, so theoretically it should work on lots of different database backends, but there are some tricky bits that make this more difficult than it should be.


 * SQLite port - make sure the software runs on SQLite. Add a schema interface for SQLite.
 * Oracle port - make sure the software runs on Oracle.
 * MaxDB port - make sure the software runs on MaxDB.

Interested Mentors: candrews

NoSQL backend
NoSQL databases like CouchDB, MongoDB, Cassandra, Redis, Riak, etc. are increasingly interesting.


 * Build a database abstraction layer that will allow using both our existing RDBMS backend as well as a NoSQL DB. Very, very hard!
 * Make a branch of StatusNet that runs on one of the above NoSQL backends; don't bother trying to make it multi-backend.

Interested Mentors:

Schedule notice delivery
Plugin to schedule notices for delivery. Should allow one-time delivery and repeated delivery. See http://identi.ca/remindme for an example bot that does something similar.


 * daemon (like a cron daemon?) to post the notice when it's time.
 * Web UI for scheduling the notice
 * API for scheduling the notice
 * (optional) Command syntax for scheduling a notice. "at Fri 4PM It's beer o'clock!"

Interested Mentors: candrews

Pastebin server
Make a pastebin or snippets server by making an extension of StatusNet.


 * Syntax coloring
 * Groups
 * Tags
 * Posting interface (need a bigger text area!)

Interested Mentors:Santosh Lakshman(Lucky Murari) googlinx (at) gmail.com

WordPress theme plugin
It would be nice to have a plugin that would allow an admin to use a WordPress theme on their StatusNet site.

Interested Mentors:

Add More Supported Networks
StatusNet already works with Twitter and Facebook. We want to support as many networks as possible and we need your help!

Please see Supported_Networks for a list of networks. Since we already have infrastructure for this, we particularly are looking for proposals which would add a few of these networks and/or very complete support for two-way communication on networks.

Interested Mentors:

Private Site Federation
Some companies will have multiple StatusNet instances. For example, they may set up instances by department (hr.bigco.com, engineering.bigco.com, etc) or by geography (americas.bigco.com, asia.bigco.com). Naturally, these will be company-internal private sites, but there is still great value in members of each internal site being able to communicate to their coworkers the other sites. Thus, private site federation would be great feature for StatusNet to gain.

Interested Mentors:

Easy Bots
Creating bots is a fun tasks, and a great way to introduce potential new programmers to the wonderful world of StatusNet. Right now, creating a bot isn't terribly easy. This project would involve making an API for StatusNet that allows for the easy creation of bots, which may or may not be interactive.

Interested Mentors: candrews

OpenSocial
Integrate with Shindig to make StatusNet an OpenSocial container.

Social news plugin
The goal is to provide an experience similar to Digg or Reddit, but federated.


 * Define activity types like a social news item (Bookmark?), vote up or down, and comment (probably just comment).
 * Show a dashboard of "hot" items in the user's network (nothing Internet-wide). What kind of algorithm will you use for "hotness"?
 * (Optional) Import a backup of activities from Digg.
 * (Optional) Import a backup of activities from Reddit.
 * (Optional) Get it to integrate with Pligg.
 * (Optional) Get it to integrate with Reddit.

Social game
Social games like Farmville use the Facebook platform, or other platform. This task is to use StatusNet to make a social game -- and to allow players to be on different sites.


 * Design a game to play (a farm? a castle? what else?)
 * Define activity types for the game.
 * Implement the game