People tags

Notes on the upcoming lists implementation. Checkout @shashi's people_tags branch for the code.

Beta testing
http://statusnetdev.net/g0 is where the latest code is running. You can sign up for a new account and start testing now! Please send any bug reports or feedback to connect2shashi@gmail.com or to identi.ca/shashi

Note: if you want to test the federation, we will be setting up sub-domains soon.

Checklist
Here is a (guess of a) list of things to implement.

You can now test the twitter-compatible api at by using http://statusnetdev.net/g0/api as the api path in your twitter client.
 * Peopletag as list.
 * Decide & implement DB schema
 * basic caching
 * Inbox handling in Notice.php
 * UI
 * actions/*
 * edittag - description, allow deletion / renaming tag
 * style peopletag list
 * autocomplete for tags -- Branched out
 * ajax tag editing -- TODO field specific search
 * ajax subscription / unsubscription
 * OStatus subscribe / unsubscribe forms
 * cache statistics
 * OStatus & Feeds
 * Discovery
 * PuSH feed
 * use Salmon to keep track of tags from remote instances.
 * use salmon to add/remove subscriptions
 * RSS
 * Atom
 * API (see twitter api documentation scroll down to lists section)
 * List methods (create, update, index, show, destroy, statuses, memberships, subscriptions)
 * List Members Methods (index, create, destroy, show)
 * List Subscribers Methods (index, create, destroy, show)
 * remove need to authenticate where not required.

Configuration options

 * enable/disable people tags
 * max tags a user can create (default 100)
 * who can a user tag?
 * local users
 * local users and remote subscriptions
 * any OStatus user
 * Plugin to allow tagging groups
 * Some super users who don't care about twitter compatibility might want this. Plus this gives an opportunity to develop and show off a pretty comprehensive set of plugin hooks.

Cache

 * local subscribers
 * global subscribers
 * tags (tag, tagger, tagged) -- how best to pack this?
 * statistics

Documentation

 * Some places use the word "peopletags" and some use "people tags" some use "profiletags". Fix this.
 * Take time to comprehensively write documentation for every function.

Manual Tests

 * Installation Passed
 * Tagging / Untagging locally Passed
 * Tagging / Untagging remotely Passed
 * No way to figure out private tags Passed
 * CacheLog checks with caching enabled Passed
 * Tagging / Untagging locally with memcache Passed
 * Tagging / Untagging remotely with memcache Passed
 * Tag Autocomplete Passed
 * @# replies Passed
 * API tests Unknown

Discussion
Things yet to be figured out: -- let peopletags have descriptions. Send an @# notice to everyone in the peopletag who are subscribed to you as a mention. Basic idea is to keep the ease and awesomeness of peopletagging interface and also the goodness of twitter's list interface.
 * How can peopletags and lists coexist?
 * lists (on twitter) have a description that go with them, peopletags don't, but peopletags are self-descriptive and cooler. They can also be used to send notices using the @# syntax.
 * Should groups be allowed to be included in lists? (they are themselves lists of people). There are a few issues with this:
 * Twitter API compatibility
 * Showing both users and groups in the same view - maybe, a plugin.
 * Do what with FAOF?
 * Any more questions?

Feel free to discuss!

OStatus workflow

 * New activity verb - ostatus:untag being used

Discovery and Subscription process

 * Peopletag represented as a list activity object of person activity objects is the activity:subject of the atom feed.
 * Rest of it works exactly like follow/unfollow for groups.

Tags by remote servers

 * a tag/untag activity object comes with a "target" which is the peopletag and an "object" which is the remote person being tagged. "actor" is the tagger - garbageCollect user's feed.

UI Notes
The sidebar is getting too cluttered, need feedbacks and suggestions.
 * A peopletag list item widget has a (un)subscribe button, statistics: no. of members & subscribers
 * Profile list item widget will have editable tags with autocomplete.
 * Sidebar widgets peopletag mini list:
 * has a mini avatar, username & tag, statistics on mouseover!
 * each item has a height of 50px which is huge and needed to accommodate the avatar


 * List of sidebar widgets:
 * Public page:
 * List of tags with largest subscribers
 * Profile page:
 * Tag cloud by most subscribed
 * Latest subscriptions
 * Peopletagsbyuser page
 * tag cloud by most subscribed
 * Peopletagsforuser page
 * tag cloud by frequency