<?xml version="1.0"?>
<!--
   Copyright 2004 The Apache Software Foundation
  
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
  
       http://www.apache.org/licenses/LICENSE-2.0
  
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<!-- $Id$ -->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "./dtd/document-v12.dtd">
<document>

 <header>
  <title>Jakarta Tapestry - Developers</title>
 </header>

<body>

<section>
	<title>Jakarta Tapestry - Developers</title>

<p>
		Tapestry is a community project, and now follows the
		<link href="http://www.apache.org/foundation/">Apache Software Foundation</link> meritocracy rules to guide
		its future development.
Tapestry Developers plan features, discuss and vote  on the
 <link href="http://jakarta.apache.org/site/mail2.html#tapestry">Tapestry Developers' Mailing List</link>.
</p>
 
<p>
	 The following are the current Tapestry committers.
</p>

<section>
		<title>Mind Bridge</title>

            Mind Bridge has been a long term contributor to Tapestry.
</section>

<section>
	<title>Neil Clayton</title>

            Neil has contributed 
            to the Component Reference, and undertaken the daunting task of 
            creating a new (and actually useful) Tapestry Tutorial, which is 
            nearing completion.
	</section>

<section>
    <title>Paul Ferraro</title>
    Paul has been an avid Tapestry user since 2002.
</section>

<section>
		<title>Erik Hatcher</title>
		
		Erik began by contributing Javadoc fixes (flagged by IDEA) as he was
        learning Tapestry.  He has added the OGNL type converter facility for
        expression bindings and is active in making the Table component easy
        to use.
</section>

<section>
		<title>Harish Krishnaswamy</title>
		
		 	Harish is a Tapestry enthusiast and is also becoming a HiveMind enthusiast. Hopefully 
 	he will help integrate the two.
 	
</section>

	
<section>
	<title>Richard Lewis-Shell</title>
		Richard is one of the real early adopters of Tapestry.
	
</section>
 
<section>
	<title>Howard Lewis Ship</title>	
	   Howard started the Tapestry project in early 2000.
</section>

<section>
	<title>Geoff Longman</title>	



       Geoff has advanced Tapestry light years with his excellent
	   Eclipse plug-in, <link href="http://spindle.sf.net/">Spindle</link>.

</section>
	
<section>
	<title>David Solis</title>

David is another long-term user,
and has  added a suite of WML components to the framework. 		
</section>

</section>
</body>
</document>
