<?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'

	#*****************************************************************************
	#
	# template.php
	#
	# Author: 		Denis Roy
	# Date:			2005-06-16
	#
	# Description: Type your page comments here - these are not sent to the browser
	#
	#
	#****************************************************************************
	
	$year="2006";
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "2005 Election Statement";
	$pageKeywords	= "foundation, governance, board, elections";
	$pageAuthor		= "Mike & Wayner";
	
	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);

	# End: page-specific settings
	#
	
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML
<!--<div id="maincontent">-->
	<div id="midcolumn">
		<h1>Kai-Uwe M&auml;tzel: $pageTitle</h1>
      <p>The success of Eclipse is of genuine interest to the Eclipse committers. 
        The success requires the committers to work effectively. As committer 
        representative I will:</p>
      <ol>
        <li>Enable the continuous success of Eclipse.</li>
        <li>Communicate the varied perspectives and needs of the international 
          Eclipse committer community to all the other parties represented by 
          the Eclipse Foundation.</li>
        <li>Work closely together with all the other parties represented by the 
          Eclipse Foundation to get their best possible support that continues 
          to allow the committers to work effectively and to produce results that 
          satisfy the needs of all the parties.</li>
      </ol>
      <p>In the scope of these general responsibilities, I would like to address 
        the following in the next year:</p>
      <ul>
        <li>We must continue to improve our infrastructure. Last year we made 
          progress. Considerable improvements are to be put in place in the spring 
          of this year. In addition to actively supporting this process, improvements 
          to our bug reporting system are necessary. Components dealing with high 
          bug report traffic pay a non-trivial overhead for managing those bug 
          reports. A considerable portion of the overhead is generated by the 
          need to request the bug reporters to complete bug reports with required 
          information such as build ids; by transferring the bug reports to the 
          correct product and component; by identifying duplicates; and by explaining 
          reporters what severity, priority, and state express and by whom they 
          may be manipulated. Improvements to the bug reporting system can be 
          implemented to minimize the overhead. Changes to be investigated are 
          an improved bug reporting form, tool supported duplication identification 
          and management, and a more fine grained rights management.</li>
        <li>The work on the first Eclipse projects was started about four years 
          ago. They are maturing. This maturing can pose risks to technical innovation, 
          if left unmanaged. In close cooperation with all the parties represented 
          by the Eclipse Foundation we should explore what can be done to keep 
          our development performance as high as it is and to sustain and extend 
          our current technical leadership.</li>
        <li>Eclipse is the home of numerous projects that build onto each other. 
          We, the committers, have to work with all the other parties to ensure 
          a steady flow of contributions and concrete collaborations between the 
          projects in order to let the projects&rsquo; scopes and boundaries naturally 
          evolve beyond their initial specification. We should work with the Eclipse 
          Foundation to explore options to encourage and foster these collaborations.</li>
        <li>We, the Eclipse committers, publicly connect our names with the brand 
          &rsquo;Eclipse&rsquo;. We are interested that the &rsquo;Eclipse&rsquo; brand gains reputation 
          and sustains its level of quality. We should work with the Eclipse Foundation 
          to explore ways in which the committers of new projects can be supported 
          in adopting the essential process attributes of existing, successful 
          Eclipse projects. Such attributes are starting small and concrete, convince 
          by delivering, and grow on previous concrete successes.</li>
      </ul>
      <br/>
   	</div>
	<div id="rightcolumn">
		<div class="sideitem">
			<h6>Quick Links</h6>
			<ul>
				<li><a href="../">Election Home</a></li>
				<li><a href="../nominees.php">Candidates</a></li>
				<li><a href="../keydates.php">Key Dates</a></li>
				<li><a href="../election_process.php">Election Process</a></li>
			</ul>
		</div>
	</div>
	
<!--</div>-->
<script language="javascript">
<!--
	if (top.location != location) {
		top.location.href = document.location.href ;
	}

-->
</script>
EOHTML;

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
	
		$html .= "</table>";
		

?>