• View
  • Changes
  • Options
  • Related
  • Edit

  • First, whilst I did waste a few days coding an IRC bot to facilitate Tent:

    http://github.com/tav/scripts/blob/master/tentbot.py

    I've decided that IRC is not quite the right basis for this. The
    advantages are that it's there and some of us are very comfortable
    with it, but the downsides are:

    a) IRC is susceptible to network splits, which will render the service
    inaccessible and out of sync.

    b) Not everyone is familiar with IRC and has an existing client.

    c) Not everyone is familiar with IRC authentication, /msg NickServ identity ...

    d) It requires people to be on IRC as well as check the Tent site ...

    I also briefly contemplated Twitter -- but the downsides are that
    Twitter isn't really suited for "chat" -- it misses the "live" chat
    element and the API limitations Twitter imposes makes this pretty nigh
    impossible.

    However, people tend to have a web browser and be familiar with
    traditional login mechanisms. And live chat is easily possible as a
    web app -- see Campfire from 37Signals for a much-used web-based chat
    service.

    So, Tent is a wholly contained web app. The ~user/links can also be
    linked automatically and thus be click-able.

    Now, I didn't explain it earlier, but the notion of channel in IRC,
    e.g. #esp and the notion of #hashtags on Twitter are closely related.
    In both cases, you're simply saying "send this message to those
    subscribed to this topic".

    In Tent, I'm imagining a bastardised combination of IRC/Twitter.
    Imagine multiple columns of communication for each #channel. And being
    able to toggle between seeing messages from *just* those who you
    follow for a given #channel or seeing everyone's messages for it...

    One can send a message to multiple #channels easily, e.g.

    <tav> Morning everyone #esp #openkollab

    Then, those who follow me for #esp will see it in their #esp column if
    it was active, and likewise with those for #openkollab.

    Unlike in Twitter, where one has to specify #hashtags in the content
    of the message, we could provide a single optional *To:/Meta:* field
    for messages where a user could list as many channels as they want --
    allowing them to send the message without cluttering it with #channel
    names if they wanted to.

    And, oh, there would be no need to impose 140 character limits either
    -- though, practical considerations mean that individual line items
    would probably have a limit of something like 50kb -- which should be
    enough for now...

    Anything which doesn't have a #channel can automatically go into the
    default #mainstream channel.

    All channel names would be normalised, e.g. #WorLDPeace becomes
    #worldpeace and #Friedrichstraße becomes #friedrichstrasse.

    And, the equivalent of direct messages on Twitter or private messages
    on IRC could be achieved by putting @usernames in the "To:/Meta:"
    field. You can send the same message to multiple people by putting
    multiple @usernames, e.g.

    <tav> Hey guys, what do you think of Tent?
    [To: @Suresh @sdhorn]

    Of course, the private "flag" would only be set by the system if one
    hadn't also specified a public #channel, e.g.

    <tav> Hey guys, what do you think of Tent?
    [To: @Suresh @sdhorn #openkollab]

    ^ the above would obviously not be private... but would pop up in the
    personal messages column for both @Suresh and @sdorhn...

    Also, much like how Retweeting and how Git differentiates between
    author/committer, one can +1 an Item by pressing a simple +1 button.
    This would also allow the user to provide an optional comment on the
    item as well as "re-publish" the item into their own stream (but
    formatted with the original content) for those who are following them.

    This provides a simple, but unified mechanism for: a) promoting items
    from users that one's followers aren't following b) a way of marking
    something as being useful for later reference (i.e. star-ring it or
    marking it as a favourite) c) a way to do basic "threaded" comments
    without getting into the pains of nested comments d) a way to
    "republish" content into a different channel -- one could add
    different channels for one's own comment...

    [Aside: this mechanism could also perhaps be used to define
    "dependencies" more explicitly.]

    Now that #channels are hopefully explained, let's take a look at those
    line *Items*.

    First of all, "file sharing" could be enabled by having a form which
    allows users to attach a file to an Item by uploading directly to an
    Amazon S3 instance.

    Secondly, the ability to create new Items with the same
    <named-identifier> gives the system a very basic, but useful,
    versioning capability -- it just needs a view to see previous items
    with the same name...

    Now, from this, it's just a hop, skip and a jump away to that
    favourite tool of many of us... Wikis! =)

    So, how would that work? Well, slightly differently to traditional
    wikis. In place of the limits of the single flat + global namespace
    that most wikis impose, we already have personal namespaces in the
    form of ~user/items.

    So there would be no "shared" editing of the same item (page). In
    place, a user could either just make a new edit as a new item in their
    own stream or "push" an edit to the original author.

    When a user hovers over an Item, an "edit" link could appear which
    just copies the existing Item's contents and let's the user make
    changes before pressing either "send" (to their own stream) or "push
    to @original-author". Simple!

    And if the original author chooses to accept the push, then all it
    does is create a new Item with the pushed content. And *if* it
    happened to have the same <named-identifier> as a previous Item they
    had created, the references would be updated. That's all!

    Now, on the user inteface side, a user should be able to just "chat"
    without knowing any of this shit.

    The usual chat line items would be "sent" every time they press the
    "enter" key (i.e. hit return) or clicks on the "send" button.

    But to allow for long "page" Items, the frontend could switch to
    treating the "enter" key as a line break if the content starts with a
    format shebang (#!), e.g.

     #! markdown
     This is an item with **bolded** content.

    In which case the rest of the content is assumed to be in the
    specified format. A <named-identifier> could be also be specified for
    these items e.g.

     #! html <hello-world>
     <strong>Hello World</strong>

    These items could be arbitrarily long. Unlike the "normal" items,
    where both ~/links and http://foo.com are automatically handled and in
    case of links like flickr/youtube links -- automatically embedded --
    one would need to explicitly mark links using either the format's
    linking syntax or the common link syntax, e.g.

     http://google.com or
     ~tav/plexnet

    Items could also be "included" (transcluded) using:

      Add ~tav/plexnet

    And variables substituted using:

     (|`username|)

    In the "To:/Meta:" field, one could define additional metadata for the
    item if wanted, e.g.

     start=2009-08-16 end=2009-08-20 price=$300

    In fact the earlier usage of !type, #channel and @user was just a
    builtin shorthand for defining certain metadata, i.e.

     #openkollab --> channel=openkollab
     @mattcoop  --> channel=@mattcoop
     !intention --> type=intention

    Super "power users" could use the powerful transclusion language and
    builtin services to build "applications" easily, e.g. want to let
    others see a calendar view of events taking place this week related to
    the #channels they're subscribed to?

    Just create an item with the following content:

    {{.foreach `subscriptions | .find {'type': 'event', 'channel': _} |
    .if _.start == (.thisweek) | ~mattcoop/calendar}}

    Now this is obviously not something for the average user, but power
    users could leverage it to create useful apps from the various data
    being created and add unthought of new functionality...

    In fact, I imagine that the "builtin" shaila functionality would
    basically be such an app that provides just a frontend for creating an
    appropriate Item.

    That is, this system can start out being very easy for someone to use
    -- it's just like an IM chat! But, they can gradually become a power
    user in small, but comfortable steps!

    * Line/Page Items
    * !Types
    * <Named-identifiers>
    * ~user/links
    * To:/Meta: field
    * #Channels
    * @Userspaces
    * +1 of Items
    * #! Formats
    * Links
    * Add Transclusion
    * .Services

    By itself, each of the elements are straightforward and can be found
    in existing systems -- IRC, Wikis, Wagn, Unix, Twitter, etc. -- but
    together, it can provide a collaboration platform that is both simple
    for the novice user and yet unparalleled in it's power.

    Thoughts?

    --

    love, tav

  • View
  • Changes
  • Options
  • Related
  • Edit
  • There is an #openkollab channel on IRC for live collaboration! To join through webchat, just enter your nickname:


    You can also read:

    See the help section below if you want to log into irc://irc.freenode.net/openkollab using a desktop client.

    Videos    
    Videos ... new Videos card

    Join our email discussion at OpenKollab Google Group

    Meeting    

    Help    
    New to all this? How to connect ...

    Wheeled by Wagn v. 1.3.0.