<?php require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'

	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "RT Project Leadership";
	$pageKeywords	= "RT PMC project lead";
	$pageAuthor		= "Jeff McAffer";
	
$html = <<<EOHTML
	<div id="midcolumn">
		<h2>Who's running this project?</h2>
      <p>The RT Project is managed by a small group known as the RT  Project Management Committee (PMC). 
      We strive to have each RT sub-project represented on the PMC. Listed here are the current PMC members: </p>

			<h3>Project Management Committee Members</h3>
		      <ul>
		        <li> 
		          <b>Jeff McAffer, <a href="http://eclipsesource.com">EclipseSource</a>, RT PMC co-lead</b><br>
		          Jeff leads the Eclipse <a href="http://eclipse.org/equinox">Equinox 
		          OSGi</a>, <a href="http://eclipse.org/rcp">RCP</a> and <a href="http://eclipse.org/orbit">Orbit</a>
		          teams and is co-founder and CTO of <a href="http://eclipsesource.com">EclipseSource</a>. He is one 
		          of the architects of the Eclipse Platform and a co-author of <a href="http://eclipsercp.org">The Eclipse Rich 
		          Client Platform</a> and <a href="http://equinoxosgi.org">Equinox and OSGi - The power behind Eclipse</a> 
		          (Addison-Wesley).  Jeff co-leads the Eclipse <a href="http://eclipse.org/rt/team-leaders.php">RT PMC</a> 
		          and is a member of the <a href="http://eclipse.org/eclipse/team-leaders.php">Eclipse Project PMC</a>, the 
		          <a href="http://eclipse.org/tools/team-leaders.php">Tools Project PMC</a>, the Eclipse Architecture Council 
		          and the Eclipse Foundation Board of Directors.  Jeff is currently interested all aspects of Eclipse componentry 
		          from designing, developing and building bundles to deploying, installing and ultimately running them.  Previous 
		          lives include being a Senior Technical Staff Member at IBM, work in distributed/parallel OO computing (Server 
		          Smalltalk, massively parallel Smalltalk, etc) as well as expert systems, meta-level architectures and a PhD 
		          at the University of Tokyo.
		        </li>

		        <li> 
		          <b><a name="jochen"></a>Jochen Krause, EclipseSource, RT PMC co-lead</b><br>
		          Jochen Krause co-leads the Eclipse Rich Ajax Platform (RAP) and Eclipse Runtime projects, and is a member 
		          of the Eclipse Foundation Board of Directors and Architecture Council. Jochen has had a leadership role in 
		          the Eclipse community since its inception in 2002, and today is focused on driving Eclipse to be an application 
		          platform for web and desktop. Jochen is a founder of <a href="http://eclipsesource.com">EclipseSource</a> and has been bringing Eclipse technology 
		          to enterprise customers, while guiding strategic technical contributions to Eclipse. EclipseSource staff are 
		          involved in many Eclipse projects such as Equinox, PDE, RAP, ECF, p2, Riena, Eclipse Packaging and g-Eclipse.
		       </li>
				<li>
					<b>Christian Campo, Riena</b>
				</li>
		        <li> 
		          <b>Doug Clarke, EclipseLink</b>
		       </li>
				<li>
					<b>Mike Keith, Gemini</b>
				</li>
				<li>
					<b>Markus Kuppe, ECF</b>
				</li>
				<li>
					<b>Jesse McConnell, Jetty</b>
				</li>
				<li>
					<b>Glyn Norminton, Virgo</b>
				</li>
				<li>
					<b>Mark Rogalski, eRCP</b>
				</li>
				<li>
					<b>Sebastian Voigt, SmiLa</b>
				</li>
		        <li> 
		          <b>Thomas Watson, IBM, <a href="http://eclipse.org/equinox">Equinox co-lead</a></b><br>
	              Tom is a member of the Eclipse <a href="http://eclipse.org/rt/team-leaders.php">RT PMC</a> and 
	              co-leads the <a href="http://eclipse.org/equinox">Equinox Project</a> at Eclipse. Tom's focus is on 
	              modularity and the OSGi Framework design and development. Tom is the lead developer for the Equinox OSGi 
	              Framework implementation. Tom is also a leader in the specification development process at the OSGi Alliance.
	              In particular, Tom participates in the Core Platform Export Group at the OSGi Alliance and is currently 
	              working on the next OSGi specification.
		       </li>
			</ul>

			<p>&nbsp;</p>

	</div>
EOHTML;

generateRapPage( $App, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html );
?>
