Architecting a Low Level Note Sharing Software

By Jessy

on sunday robbie and i were driving back to cupertino after visiting my mom and brian in santra barabara on their vacation. we had a while, so we got to brainstorming about this idea of note sharing software. that is, software through which you can share notes you take in meetings and discussions, with a trusted network of friends. the goal is to make us all more effective by exposing what would normally be personal content to deeply trusted networks, thereby tightening the loop around making connections, routing information, and acting in sync on our efforts.

each set of notes has to be sharable with a distinct subset of people. i might want to share notes from one meeting with robbie and will, but notes from a different meeting with josh, matt and will. other than that, it’s fairly similar to a file share. new notes need to be pushed out to those people with whom they are shared. ideally, there would be a web interface as well, with a way to view and run queries against notes you have permissions on. in the nice-to-have category, you can add tags, and run queries on content,  attendees, or other types of metadata.

we’ve been looking into ways to use existing tools– everything from text files, to google groups, to evernote’s API. all of these have their merits for sure. but an interesting idea came up recently, which is to push the architecture for such a system below the application layer, into the filesystem layer. this has the distinct advantage, in my opinion, of not requiring any specific application for note taking. not only does this mean we dont have to agree with each other, it means we dont even have to agree with ourselves over time. the platform is application agnostic, freeing us up to use what we want, where we want, depending on the situation or content.not changing user behaviour

in this version of the note sharing software then, we would use the addition of a file to a specific directory to indicate that this is a note to be shared. the simplest way to think of it is as a subversion repository. svn add, svn up.

but the number of distinct sharing groups is huge. i am not just potentially sharing with every other person in the note sharing universe, i am potentially sharing with every distinct subgroup in that universe. this goes as something like n!. that’s a LOT of svn directories. among other absurdities, it suggests that perhaps a correlation of directories to sharing groups is not the optimal one.

so currently i’ve been wondering about using something like AMQP. it might be overkill, but it’s actually a lot simpler to use than you’d think for a low level messaging protocol. more importantly, the general concept of using a messaging-type approach is interesting. it would support queueing messages and delayed delivery in offline situations. the notes could be replicated across exchanges for each person being shared with. you could even let users define (or select) different queues for them to go to depending on various attributes– tags, sender, etc. hey, it’s practically a webhook!

i’d still like to find a way to specify the recipients of a shared set of notes in such a way that the user’s behaviour is minimally changed, and that is platform (and OS) indepedent. perhaps a script that detects a new file in the relevant directory, and runs a python based popup to request recipients?

we’ll be hacking on this next tuesday, and similar collaboration projects every other tuesday for the next few months at the rainbow mansion. the idea is to build a suite of tools that increase the ability of kick ass people to make kick ass decisions. too often, the “right” decision would have been informed by what others are working on. creating natural ways for that information to be available in trusted groups would, in itself, be kick ass :) .

Tags: , , ,

5 Comments

  1. drewp commented on March 6, 2009 | Permalink

    I recommend semantic web stuff:

    http://en.wikipedia.org/wiki/FOAF_%28software%29 for people and their connections

    http://www.w3.org/2001/Annotea/ for annotations on resources (anything with a URI)

    http://aksw.org/Projects/xOperator might be relevant too

    I would also hope it’s easier to share notes with everyone than it is to restrict them, even if it’s only a tiny difference in effort. That will promote public notes in cases where authors wouldn’t mind that.

  2. Jessy commented on March 7, 2009 | Permalink

    thanks drew. that’s a great suggestion. it actually ties into additional ideas we’ve been discussing about how to enrich brainstorms or discussions by creating tools which semantically annotate the content. these links are a great start for me to get more familiar with some of the technologies that are already out there, since i dont know much about them at all. much appreciated!

    for sharing, i agree we should have an easy ability to share with *, or make notes public. you could even designate certain categories as public by default. we also want to facilitate sharing of notes which might be sensitive for whatever reason, but for which sharing would be appropriate within certain very specific trusted groups.

    but finding a way to build a trend towards more public sharing is definitely a goal. maybe we can even have a tag that could expose specific subsections of notes…

  3. Joe Mathes commented on March 7, 2009 | Permalink

    “i am potentially sharing with every distinct subgroup in that universe. this goes as something like n!”

    It’s 2^n, which is smaller than n! for n>3, but still huge.

    http://en.wikipedia.org/wiki/Power_set

    But, you don’t need to do anything so horrid as having a separate folder for every set of users. Since most users will only have access to a very small subset of the files, and most of the files will only be accessible by a very small number of people, you could store a list of file addresses for each user. There’d be a canonical filesystem, and then the your personal list of files would be another index on top of that, which will connect you to all files you’re allowed to connect to. When you publish a file to a group of people, references to that file are added to all their user indices.

    If you want a user to be able to look up who else can see file X, then each file will need a list of the users who can see it.

    So, you have file objects, and user objects, and each of them maintains a two-way list of connections to objects of the other type.

    You also might try doing fancier stuff if some files turn out to be accessible by most users; they could store _exclusion_ lists instead of _inclusion_ lists, and possibly have the filesystem switch between the two when appropriate.

  4. Joe Mathes commented on March 7, 2009 | Permalink

    Sorry if that came out garbled. It’s late.

  5. Jessy commented on March 7, 2009 | Permalink

    oh yes– of course you’re right about the powerset!

    the svn folders example was more in the spirit of “what did we discuss that wouldnt work” :) . so yes i definitely agree. what you’re saying about access lists makes sense though, and is probably where we’d start with a messaging-type architecture. i think we’ll have to try a couple of iterations of the implementation before we know for sure though. we plan to start small in any case.

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

Archives

  • January 2010
  • November 2009
  • July 2009
  • May 2009
  • April 2009
  • March 2009
  • February 2009
  • January 2009
  • December 2008
  • November 2008
  • Site Feeds

    Posts
    Comments

    Marginal Structure Posts RSS feed

    Site Tags