Google Summer of Code 2010

From StatusNet

Jump to: navigation, search

StatusNet would be a great mentor for the Google Summer of Code 2010 (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.

Contents

Information for students

Emblem-notice.svg.png

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

Favourite.gif

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
  • IRC chat:
  • 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!

Mentors

This list is not yet finalized; if you're a StatusNet developer and would like to help with mentoring a student, come on and add yourself!

Provisional list:

  • Brion Vibber - software architect at StatusNet, Inc; longtime experience with FOSS web apps through MediaWiki.
    • Interested especially in projects with an emphasis on scalability and inter-service communications, or that make third-party installations easier to maintain.
  • Evan Prodromou - founder.
    • Especially interested in more and better support for different queuing, database, IM, geographical systems.
  • Brenda Wallace - longtime developer
  • James Walker - software services architect at StatusNet, Inc; long time FOSS developer and previous GSoC mentor for Drupal
    • Interested in Open Web protocols and standards, specifically those related to OStatus.
  • Sarven Capadisli - User experience architect at StatusNet, Inc
    • Interested in open front-end standards (microformats, RDFa), and UI design. I can guide you with implementation of an intuitive-enough interface, browser extensions, and progressive enhancement design strategy.
  • Zach Copley - Senior software developer, StatusNet, Inc.
    • Very interested in API-related projects, mashups and ways to integrate StatusNet with other services and types of software.
  • Craig Andrews - Software Engineer (day job is Consultant at Molecular, Inc)
    • Interested in many things... API, Instant Messaging, Authentication/Authorization providers, geolocation data presentation, and much more.

Ideas

These are just some project ideas that folks have tossed around here on the wiki. You're not limited to these ideas, and some of them might actually not be good fits -- please make sure you get in touch with potential mentors and talk about your idea well before the April 9 submission deadline!

Adding a Proposal

Edit.gif

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.


Chat interfaces

It's easy to liken microblogging/messaging to instant messaging, and a lot of folks like to bridge their chat clients to their messaging services, keeping all their real-time mini communications in one place. StatusNet has had an implementation for XMPP/Jabber chat for some time, but there are many other popular chat services.

AOL Instant Messenger is fairly high on the list, but there are a number of others with similar popularity.

StatusNet 1.0.x branch has started the infrastructure for adding multiple interface chat plugins; scalable implementations of more major chat protocols that work with StatusNet's backend message queueing system and can handle thousands of users would rock!

  • IRC Plugin -- make a plugin to send and receive notices to/from a configurable IRC bot on a configurable IRC network.
  • AIM Plugin -- ditto.
  • Windows Messenger

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.

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

Rich post editing

A social communication system like StatusNet knows a lot about your situation: who you follow, who's sent a message to you recently, how links and media will be handled. These smarts should be made available when you're typing out your message! Type-ahead suggestions for friend and group names, live previewing of link behavior, even some light formatting could make messaging richer and more fun.

Prerequisite knowledge:

  • familiar with jQuery for front-end and API communications
  • working with HTML rich-text editing widgets

Some good starting-off points would be to fix some issues with the existing Autocomplete and Infinite Scroll plugins.

see http://gitorious.org/~evan/statusnet/evans-mainline/commits/tinymce for some initial work on this. I'd really like to see a dedicated rich-text editing plugin, not just general tinkering with improving submission UI. --Evan 18:18, 23 March 2010 (UTC)

Implement Twitter streaming API

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. Realtime message delivery is available for server-to-server communications, chat interfaces, and even the web, but dedicated messaging clients need this too!

Twitter's adding 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


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.

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

Twitter's @anywhere like platform

This will not be the same as twitter's @anywhere because this is just a guess of what it'll be looks like. But the idea is as follows

This is something about empowering Other websites with statusnet( a minor set of) capabilities. following will be key points

  • External site only need to use some Javascript provided by statusnet in order to do this integration
  • configured status.net account can be subscribed from the right on that external site (without going on to the status.net site)
  • allows statusnet users to reply notices right on that page
  • allow statusnet users to send notice about some event/object displayed in the webpage
 eg:- Adding a notice about a youtube video. (with automatic tinyurled link to the video/page)
  • widgets of viewing latest posts/replies of the account attached to that page

proof of concept: http://me.arunoda.com/ev

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)

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.

  • Find a "place" vocabulary that uses restaurants, cafes, bars, etc. Ideally it would be Open Content and user editable.
  • 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

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

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)

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".

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.

People search server

It can be tricky to find people on the OStatus network. Build a search server that lets users find

  • find people on the network with full-text profile info search (name, bio, etc.)
  • find people on the network by location (w/in 20 miles of San Francisco)
  • let sites provide a feed of new registrations, profile changes, and user deletions
  • Add a "subscribe" button that lets the user subscribe to people they find in the search service
  • (optional) support group search
  • (optional) avoid spam
  • (optional) avoid spoofing
  • (optional) OStatus feed for "real time" people search. Let users subscribe to notifications about new users in a location or matching keywords.

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.

Social music server

Implement a plugin to make a free, distributed LastFM alternative.

Twitter lists

Twitter has a lists feature (see http://blog.twitter.com/2009/10/theres-list-for-that.html). Implement something similar. Note that users on StatusNet can already tag their subscribers and subscriptions; an implementation should use this existing structure.

  • Show only notices by members of a list in the users' personal timeline. For example, /evan/all shows all evan's inbox; /evan/all/family only shows people tagged "family". Don't forget memcache, and clearing caches at post time.
  • Let a local user subscribe to another local user's list of people.
  • Implement Twitter lists API.
  • Indicate list subscriptions in output (different color)?
  • Let a remote user subscribe to a local user's list of people.
  • (optional) Improve and Ajaxify tagging interface.
  • (optional) build a "tag" command, so that "tag evan@status.net awesome conceited" would tag a local or remote account with one or more tags. "untag evan@status.net awesome exampleworthy" would remove the tags.

People and group recommendations

Implement a system to let new users (no existing network!) and existing users (partial social network) find the OStatus accounts of people they might want to follow but don't know about already (e.g. common interests, expertise in a field you know, common friends).

Find people you already know

Social networks aren't as fun if you can't find people to follow. Implement a system to let new users (no existing network!) and existing users (partial social network) find the OStatus accounts of people they already know and are interested in.

  • Use something like the Social Graph API to find OStatus accounts
  • Use open standard like PoCo to tap into on-line contact lists (Google, Yahoo, Plaxo, ...)
  • Use proprietary APIs to tap into online services' contact lists (Facebook, Twitter, ...)
  • address book upload (vcard?)
  • (optional) send invites to people that can't be found. "I've got a great StatusNet account!"

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!"

AtomPub API

Support the Atom Publication Protocol for posting new notices.

  • Make a plugin that exposes an APP endpoint for posting a notice
  • HTTP Basic Authentication
  • Accept HTML or plain text
  • Accept rich media (images, video, audio)
  • (optional) accept
  • (optional) OAuth
  • (optional) Accept ActivityStreams entries to change social data. A "follow" verb would create a new subscription. "favorite" would create a new fave. OStatus does a few of these already.
  • (optional) Catalogs?

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!)

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.


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.

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.

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.

Life streaming

It would be great if you could use StatusNet to pull together your activities from around the web into one place for people to follow.

  • Let users add an external feed (RSS1, RSS2, Atom) to their account. Be careful about which feeds can be used (Google Buzz looks for rel=me, for example.)
  • Handle RSSCloud and PubSubHubbub posts from these feeds for realtime updates.
  • Do periodic polling of feeds that don't have realtime support.
  • Republish items received from upstream feeds in user's timeline. Watch for loops! Use universal URIs.
  • (Optional) republish as ActivityStream objects.
  • (Optional) service-aware UI
  • (Optional) Integrate existing Twitter and Facebook plugins

Event management

There's a simple event schema in ActivityStreams. It might be possible to post event notifications and collect RSVPs from subscribers.

  • Add a plugin for event management.
  • Add database tables to represent events and event RSVPs.
  • Add UI to post events.
  • Enhance output, especially OStatus output, to represent events using ActivityStreams.
  • Enhance UI to view events qua events.
  • Enhance UI to RSVP to events (Yes, No, Maybe)
  • Enhance backend to push Salmon replies for events to the event organizer.
  • Enhance Salmon handling to receive and store RSVP data.
  • (optional) closed/invite-only events.


Easy migration of account

Federation is important, but it loses a lot of it's meaning if you can't easily jump ship from one server to another. I could start out using Identi.ca, but after a while want to set up my own server. Or an oppressive regime might shut down the StatusNet server used by political activists. Installing a new server might be easy, but as long as I have to fill in all my information again, manually subscribe to everyone I followed, lose all my notices and, most importantly, lose all my subscribers, the barrier to switching server is too high.

  • When setting up a new account on a server, you might be asked if you have an account on another server you want to import. Use OAuth to authenticate.
  • If the server you want to export an account from is under threat of being taken down, a way to download an offline backup of all your information might be the best solution.
I don't think this is a good project for a student new to StatusNet. It's very important core functionality and assigning it to a student would be a big risk for the project. It's also exceptionally hard to do well. --Evan 13:18, 5 April 2010 (UTC)
If we had more time to tune it up I'd be fine with starting it as a student project -- it would be a great opportunity to learn all the system internals! -- but yeah it's looking like the schedule we need it ready on won't allow the time to do it well that way. --brion 17:22, 5 April 2010 (UTC)

White persona.jpg
Personal tools