<?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		= "";
require_once ($_SERVER['DOCUMENT_ROOT'] . "/membership/promo/promos.php");

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="http://feeds.feedburner.com/eclipse/fnews"> <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 id="rightcolumn">
    <?=chooseRandomPromo(); ?>
    </div>
    
</div>
<?php
	$html = ob_get_contents();
	ob_end_clean();

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