In lamenting not really knowing the various states of a distributed team working on Plan 9 related projects, I was thinking through expedient mechanisms for loosely keeping in touch. There are a bunch of tools that seem to help with distributed teams: phone calls,
IM,
IRC,
VNC, Peer-to-peer and centralized file sharing,
SCM, etc. I was thinking of
architecting a simple suite of tools to provide basic
fuctionality within a Plan 9 paradigm.
The cornerstone would be a modified version of faces, which checked against a centralized file system (or maybe just a centralized place with file systems bound from several different servers). People currently active ('logged into') within the collaboration framework would have their face appear. Mouse-over the face gives a quick bit on their current status (i.e. working on /
sys/
src/
collab.c), right click pops up a menu of different options (chat, blog, view, share, mount, etc.) -- each of these would plumb an action to an appropriate tool (either in ACME or raw).
- chat - simple point-to-point IM facility, I'm toying with the idea of walkie-talkie style audio chat as well.
- blog - pops up the person's "blog" which really is just news(1), but personalized for that person, maybe work out something more complicated with wikifs later, but news(1) will do for now
- view - If the person has shared a window with you, view will plumb it to a viewer -- I haven't quite decided how to handle different types of views, could just do VNC, but I'd rather have the ability to share windows -- or really what I want is the ability to share ACME windows and keep the sides in sync (like a distributed Zerox) -- ultimately, there's all sorts of granularity to sharing, but for now it'll be a single thing (kinda works like snarf) and it'll have to be integrated into ACME and other tools which use it.
- share - really mostly described above -- this basically grants the person access to your current share
- mount - pops up a window with the person's public namespace mounted -- this could just be their /usr directory, or it could be something more. Haven't quite decided how to handle this completely.
There will be a variety of command-line tools that allow you to post shares, export portions of your
namespace into your public
namespace, and allow you to easily update your blog or status.
I think the simple approach works for 1-to-1 communication, not sure how to handle 1-to-many or many-to-many without things getting complicated. There's also various ways you can build on this to add additional context (like maybe per-project collaboration spaces). They key thing is that everything works through file system mounts.
A big missing item is
SCM, I have been toying with some ideas around a git-like mechanism with a
venti back-end. For the most part this isn't an immediate requirement though, centralized file repository backed by
venti is fine -- although it would be nice to have a formula or script for setting up replicas of such
centrailized repositories.