<?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("./_projectCommon.php");    # All on the same line to unclutter the user's desktop'

$pageTitle 		= "2011 Eclipse Weather Forecast";
$pageKeywords	= "";
$pageAuthor		= "";

ob_start();
?>
<style type="text/css">
h2 {
border-bottom: solid
}
h3 {
border-bottom: thin dotted
}
</style>

    <div id="maincontent">
	<div id="midcolumn">
        <h1>Eclipse Weather Forecast <a href="https://newsroom.eclipse.org/rss/news/eclipse_org/announcements.xml"> <img src="/images/rss2.gif"></a></h1>
		<p style="font-size8px;">
		Inspired by the <a href="http://linuxfoundation.org/en/Linux_Weather_Forecast">Linux Weather Forecast</a></p>

		<p style="font-size8px;">
		Last Update: February 1, 2011.</p>

        <p>The Eclipse Weather Forecast is a resource for technical and business decision makers in the
        Eclipse Ecosystem.  Eclipse has an incredibly diverse ecosystem with hundreds of projects spanning
        dozens of technologies, and this page will help
        people quickly understand the latest releases of Eclipse packages and interesting technical trends.</p>

        <p> Please send feedback or suggestions on the weather report to
        <a href="mailto:weather@eclipse.org">weather@eclipse.org</a>.
        </p>


	<br><h1>Forecast summaries</h1>
	<h2>Current Conditions</h2>
	<p>The current release of the <a href="http://www.eclipse.org/downloads/">Eclipse Developer
	Packages</a> is "Helios" (released September, 2010),
	and is built on the 3.6.1 Eclipse platform.  The current release of
	<a href="http://download.eclipse.org/equinox/">equinox</a> is 3.6.1 which is
	based on OSGi Service Platform Release 4.2.</p>
    <p>
    For up-to-the-minute Project Review and New Project Proposal information, please see the
    <a href="http://www.eclipse.org/projects/whatsnew.php">What's New with Eclipse Projects</a> page.
    </p>


	<br><h2>Long term forecast</h2>
	<p>
	The next planned release of the Eclipse Packages is
	<a href="http://wiki.eclipse.org/Eclipse/Helios_Plan">"Helios SR1" (3.6.2)</a>
	(expected late February, 2011), and will be built on the 3.6.2 platform.
    </p>

   	<br><h2>Weather Advisories</h2>

   	<p><b>Orion Project is underway</b>  The
   	<a href="http://wiki.eclipse.org/Orion">Orion</a>
    is a proposed new open source project under the Eclipse top-level project. The project
    is currently in the Pre-Proposal phase. To facilitate gathering of a community for this new
    project, an initial code contribution has been made within the E4 incubator.
    Orion's objective is to create a browser-based open tool integration platform which is
    entirely focused on developing for the web, in the web. Tools are written in JavaScript and run
    in the browser. Unlike other attempts at creating browser-based development tools, this is not an
    IDE running in a single tab. Links work and can be shared. You can open a file in a new tab. Great
    care has been taken to provide a web experience for development.
    </p>


   	<p><b>VM argument in eclipse.ini ignored in java 1.6u21</b>  The
   	<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319514">Bug 319519</a> raises
   	and important issue that the ecosystem may be facing whereby the 1.6u21 version
   	of the Java VM is ignoring arguments from eclipse.ini.
   	<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319514#c5">Although</a> subsequent
   	builds of Java 1.6 have fixed this issue, it is still possible users may be accidentally
   	encounter and use this version.</p>

   	<p><b>Increasing OSGi Runtime releated projects at eclipse.</b>  The
   	<a href="http://www.eclipse.org/proposals/virgo/">Virgo</a> and
   	<a href="http://www.eclipse.org/proposals/gemini/">Gemini</a> are recent projects at Eclipse that focus on implementing
   	OSGi Expert group specificaitons, and complementary technologies.  These projects are indicators of an
   	increasing activity and interest in runtime tehcnologies at Eclipse, specifically with OSGi at the core. </p>

   	<p><b>Continued Interest in Modeling At Eclpse</b>  The
   	The demand for new and interesting projects in the Modeling space continues.  SAP has recently proposed
   	a project for Domain Modeling called <a href="http://www.eclipse.org/proposals/graphiti/">Graphiti</a>.
   	Interest in Eclipse modeling technologies, particularly in Europe, continues to be strong.</p>

 	<p><b>Progress on common build infrastructure.</b>  Recent hardware donations from Google, IBM and Intel
 	have given the Eclipse webmaster some much need resources to revamp the common build infrastructure over the
 	coming weeks and months.
 	</p>

 	<p><b>Progress on git/egit/jgit</b>  Webmaster has made progress for supporting early adopters from
 	certain eclipse projects wishing to use GIT as a source code repository.  The Foundation is taking
 	a cautious and incremental approach, but it could be that GIT becomes a standard option for projects before the
 	end of 2010.
 	</p>

    <p><b>Jetty Project has moved to Eclipse.</b>  <a href="http://www.eclipse.org/proposals/jetty/">Jetty</a>, a Java-based
    web server and implementation of the Servlet Specification has moved to Eclipse as an Eclipse Project.  We expect
	increased activity around the use of Jetty in the Eclipse Ecosystem as a result.
    </p>

    <p><b>Problems with Sun JVM 1.6.0.4 through 1.6.0.9.</b>  If you are experiencing
    <a href="http://wiki.eclipse.org/IRC_FAQ#Crashers.2C_Freezing.2C_and_other_Major_Issues">frequent crashes and freezes
    with Eclipse</a> the most likely culprit is that you are using one of these versions of the Sun JVM.  Users
    are recommended to install a version 1.6.0.10 or later, 1.6.0.3 or before.  Or use JVM 1.4.2 or 1.5 JVM.  This issue
    is specific to the Sun JVM and other vendors JVMs within these versions should be OK.
    </p>

	<br><h2>Archives</h2>
	<p>
	Please see the <a href="./Archives.php">archived information</a> from previous weather forecasts.
    </p>

  </div>

</div>
<?php
	$html = ob_get_contents();
	ob_end_clean();

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