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

$pageTitle 		= "Technology Project";
$pageKeywords	= "technology";
$pageAuthor		= "Bjorn Freeman-Benson Nov 20/05";

//require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php");
//$projectInfo = new ProjectInfo("technology");
//$projectInfo->generate_common_nav( $Nav );

ob_start();
?>		
    <div id="maincontent">
	<div id="midcolumn">
        <h1><?= $pageTitle ?></h1>
        
        <ul class="midlist">
			<?php require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/fragments/project-list.php"); ?>
            <?= project_list_as_html( "project-page-paragraph.html", "technology" ) ?>
        </ul>
       
<h2><a href="archived.php">The Technology Project Archives</a></h2>
<p>Projects under the Eclipse Technology Project have limited lifecycles. 
Unlike the major top-level Projects, the Technology Projects are meant 
to be technology explorations or incubators. When these projects have 
explored, proved, or disproved their associated technologies, the 
project comes to its <a href="archived.php">natural end</a>. For some projects, this end is 
a paper publishing the research results; for others, this end is 
to be incorporated into the base technology of another top-level 
project.
</p>

       <h2>About The Technology Top-Level Project</h2>
       
<p>The Eclipse Technology Project encapsulates three separate activity streams, 
Research, Incubators, and Education. All three streams are overseen 
by a single <a href="team-leaders.php">Project Management Committee (PMC)</a>. The PMC
has a weekly conference call and <a href="pmc-minutes.php">publishes its minutes</a>. The work is done 
in subprojects working against a <a href="http://dev.eclipse.org/viewcvs/index.cgi?cvsroot=Technology_Project">CVS repository</a>. The Eclipse 
<a href="technology-charter.html">Technology Project Charter</a> describes the organization of the 
project, as well as roles and responsibilities of the participants.</p>

<p>For technical discussions and questions, please go to the <a href="news://news.eclipse.org/eclipse.technology">eclipse.technology newsgroup</a>
 (for access see the <a href="/newsgroups/">newsgroups page</a>). If you are are developer and 
 want to participate in discussions relating to the implementation of the subprojects, there 
 are developer <a href="/mail/">mailing lists</a> and <a href="/newsgroups/">newsgroups</a> created for each of the projects. Downloads are 
 available from the project pages and the <a href="/downloads/">main downloads page</a>.</p>

      </div>
  </div>
<?php
	# Paste your HTML content between the EOHTML markers!	
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
