<?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'
ini_set('display_errors', 1); ini_set('error_reporting', E_ALL);

	# 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 );
?>
