#summary Melange discussion on IRC channel #melange
#labels Contents-Complete,Phase-Guidelines,Importance-Useful

The [MelangeIntro Melange] community uses the `#melange` channel on
`irc.freenode.net` ([http://freenode.net Freenode]) for conversations and
discussions about the project.  Also, `#melange-dev` is used for the
core developers to hold coding discussions.

  * It's logged [MelangeIrcLogs here].

Everyone is welcome to participate on the `#melange` IRC channel, even those
who are not project owners or members.  Most of the time, the channel will
be open (no `+m` moderation).  

Contributors listed as "project owners" on the
[http://code.google.com/p/soc/ SoC project] hosted on
[http://code.google.com Google Code] are set to `ACCESS` template `AOP` in the
channel, which is the `AUTOOP` level for the channel.  Contributors listed
as "project members" on that project page are set to
`ACCESS` template `VOP` in the channel, which is the `AUTOVOICE` level for the
channel.



Occasionally, the project contributors (owners and members) may need to hold
an IRC meeting on the channel, and in those cases the `+m` moderation
_might_ be enabled if the meeting participants deem necessary.  (This is
why project members are set to `ACCESS` template `VOP`, the `AUTOVOICE` level
for the channel.)

----
_Copyright 2008 Google Inc._
_This work is licensed under a_
[http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-attribution-2_5.html Creative Commons Attribution 2.5 License].
[http://creativecommons.org/licenses/by/2.5/ http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-2_5-88x31.png]