<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">











<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>James Parent POM - Team list</title>
    <style type="text/css" media="all">
      @import url("./css/maven-base.css");
      @import url("./css/maven-theme.css");
      @import url("./css/site.css");
    </style>
    <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
          </head>
  <body class="composite">
    <div id="banner">
                  <a href="http://james.apache.org/index.html" id="bannerLeft">
    
                                            <img src="../../opt/development/workspace/james-project/../../../../people.apache.org/www/james.apache.org/parent" alt="" />
    
            </a>
                        <a href="http://www.apache.org/index.html" id="bannerRight">
    
                                            <img src="../../opt/development/workspace/james-project/../../../../people.apache.org/www/james.apache.org/parent" alt="" />
    
            </a>
            <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
          
  

  
    
  
  
    
            <div class="xleft">
        Last Published: 2009-09-01
                      </div>
            <div class="xright">      
  

  
    
  
  
    
  </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
           
  

  
    
  
  
    
                                                <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
            <img alt="Built by Maven" src="./images/logos/maven-feather.png"></img>
          </a>
                       
  

  
    
  
  
    
        </div>
    </div>
    <div id="bodyColumn">
      <div id="contentBox">
        <div class="section"><h2>The Team</h2>
<p>A successful project requires many people to play many roles. Some members write code or documentation, while others are valuable as testers, submitting patches and suggestions.</p>
<p>The team is comprised of Members and Contributors. Members have direct access to the source of a project and actively evolve the code-base. Contributors improve the project through submission of patches and suggestions to the Members. The number of Contributors to the project is unbounded. Get involved today. All contributions to the project are greatly appreciated.</p>
<div class="section"><h3>Members</h3>
<p>The following is a list of developers with commit privileges that have directly contributed to the project in one way or another.</p>
<table class="bodyTable"><tr class="a"><th>Id</th>
<th>Name</th>
<th>Email</th>
<th>Organization</th>
<th>Roles</th>
<th>Time Zone</th>
<th>Actual Time (GMT)</th>
<th>Properties</th>
</tr>
<tr class="b"><td><a name="bago"></a>bago</td>
<td>Stefano Bagnara</td>
<td>bago at apache.org</td>
<td>-</td>
<td>Developer</td>
<td>2</td>
<td><span id="developer-0">2</span></td>
<td>-</td>
</tr>
<tr class="a"><td><a name="norman"></a>norman</td>
<td>Norman Maurer</td>
<td>norman at apache.org</td>
<td>-</td>
<td>Developer</td>
<td>2</td>
<td><span id="developer-1">2</span></td>
<td>-</td>
</tr>
<tr class="b"><td><a name="serge"></a>serge</td>
<td>Serge Knystautas</td>
<td>sergek at lokitech.com</td>
<td>-</td>
<td>Developer</td>
<td>-</td>
<td><span id="developer-2">-</span></td>
<td>-</td>
</tr>
<tr class="a"><td><a name="benrdf"></a>benrdf</td>
<td>Bernd Fondermann</td>
<td>bf_jak at brainlounge.de</td>
<td>-</td>
<td>Developer</td>
<td>-</td>
<td><span id="developer-3">-</span></td>
<td>-</td>
</tr>
<tr class="b"><td><a name="sbrewin"></a>sbrewin</td>
<td>Steve Brewin</td>
<td>sbrewin at synsys.com</td>
<td>-</td>
<td>Developer</td>
<td>-</td>
<td><span id="developer-4">-</span></td>
<td>-</td>
</tr>
<tr class="a"><td><a name="hilmer"></a>hilmer</td>
<td>Soren Hilmer</td>
<td>sh at widetrail.dk</td>
<td>-</td>
<td>Developer</td>
<td>-</td>
<td><span id="developer-5">-</span></td>
<td>-</td>
</tr>
<tr class="b"><td><a name="noel"></a>noel</td>
<td>Noel J. Bergman</td>
<td>noel at devtech.com</td>
<td>-</td>
<td>Developer</td>
<td>-</td>
<td><span id="developer-6">-</span></td>
<td>-</td>
</tr>
<tr class="a"><td><a name="danny"></a>danny</td>
<td>Danny Angus</td>
<td>danny at apache.org</td>
<td>-</td>
<td>Developer</td>
<td>-</td>
<td><span id="developer-7">-</span></td>
<td>-</td>
</tr>
<tr class="b"><td><a name="adc"></a>adc</td>
<td>Alan D. Cabrera</td>
<td>list at toolazydogs.com</td>
<td>-</td>
<td>Developer</td>
<td>-8</td>
<td><span id="developer-8">-8</span></td>
<td>-</td>
</tr>
<tr class="a"><td><a name="vincenzo"></a>vincenzo</td>
<td>Vincenzo Gianferrari Pini</td>
<td>vincenzo.gianferraripini at praxis.it</td>
<td>-</td>
<td>Developer</td>
<td>-</td>
<td><span id="developer-9">-</span></td>
<td>-</td>
</tr>
<tr class="b"><td><a name="rdonkin"></a>rdonkin</td>
<td>Robert Burrell Donkin</td>
<td>rdonkin at apache.org</td>
<td>-</td>
<td>Developer</td>
<td>-</td>
<td><span id="developer-10">-</span></td>
<td>-</td>
</tr>
<tr class="a"><td><a name="niklas"></a>niklas</td>
<td>Niklas Therning</td>
<td>niklas(at)apache(dot)org</td>
<td>Trillian AB</td>
<td>-</td>
<td>-</td>
<td><span id="developer-11">-</span></td>
<td>-</td>
</tr>
<tr class="b"><td><a name="jcheng"></a>jcheng</td>
<td>Joe Cheng</td>
<td>joe(at)joecheng(dot)com</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td><span id="developer-12">-</span></td>
<td>description=Former author to the mime4j product</td>
</tr>
<tr class="a"><td><a name="mwiederkehr"></a>mwiederkehr</td>
<td>Markus Wiederkehr</td>
<td>mwiederkehr at apache.org</td>
<td>-</td>
<td>PMC Member</td>
<td>-</td>
<td><span id="developer-13">-</span></td>
<td>-</td>
</tr>
<tr class="b"><td><a name="olegk"></a>olegk</td>
<td>Oleg Kalnichevski</td>
<td>olegk at apache.org</td>
<td>-</td>
<td>PMC Member</td>
<td>-</td>
<td><span id="developer-14">-</span></td>
<td>-</td>
</tr>
</table>
</div>
<div class="section"><h3>Contributors</h3>
<p>The following additional people have contributed to this project through the way of suggestions, patches or documentation.</p>
<table class="bodyTable"><tr class="a"><th>Name</th>
<th>Properties</th>
</tr>
<tr class="b"><td>Rob Oxspring</td>
<td>description=Contributed to the mime4j product</td>
</tr>
<tr class="a"><td>Roger Fullerton</td>
<td>description=Wrote spfjava, the first spf implementation in java</td>
</tr>
</table>
</div>
</div>
<script type="text/javascript">
function offsetDate(id, offset) {
    var now = new Date();
    var nowTime = now.getTime();
    var localOffset = now.getTimezoneOffset();
    var developerTime = nowTime + ( offset * 60 * 60 * 1000 )+ ( localOffset * 60 * 1000 );
    var developerDate = new Date(developerTime);

    document.getElementById(id).innerHTML = developerDate;
}

function init(){
    offsetDate('developer-0', '2');
    offsetDate('developer-1', '2');
    offsetDate('developer-8', '-8');
}

window.onLoad = init();
</script>
      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">&#169;  
          2006-2009
    
          The Apache Software Foundation
          
  

  
    
  
  
    
  </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>
