<?php
/**
 * Copyright (c) 2018 Eclipse Foundation and others.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 *    Christopher Guindon (Eclipse Foundation) - initial API and implementation
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>
<div class="col-xs-24">
  <h1><?php print $pageTitle; ?></h1>
  <p>
    The Eclipse PluginFest is a two day workshop to test interoperability and compatibility between Eclipse based plugins and products. The workshop format will feature
    interoperability testing sessions among participating organizations.
  </p>
  <p>
    The goal of the workshop is to further enable the tool chain that supports the software development lifecycle for mobile developers. Therefore, participation is open to
    organizations that produce or use Eclipse based solutions addressing the needs of mobile developers.
  </p>
  <p>
    <strong>Date:</strong> February 23 - 24, 2011<br>
    <strong>Location:</strong> Mountain View, CA
  </p>
  <h3>Event Goals</h3>
  <ul>
    <li> Detect and resolve interoperability problems between products in the tool chain</li>
    <li>Create a community of tools providers within the mobile development market</li>
    <li>Identify areas for development and collaboration within Eclipse</li>
    <li>Publish helpful "how to's" and source code examples</li>
    <li>Find new partners and end users</li>
  </ul>
  <h3>Who Should Attend</h3>
  <ul>
    <li>Organizations that produce, use, or are planning to use solutions for mobile developers and that are
      utilizing Eclipse as the main tool for development or tool integration point.
    </li>
    <li>At least one representative must be a software engineer or technical architect in charge of the product
      being tested at PluginFest. Technical representatives should arrive prepared to make source code level changes to their product, either directly or with the assistance of their home office, within the time frame of PluginFest. The second representative may be another developer or a product manager.
    </li>
  </ul>
  <h3>Registration</h3>
  <p>
    Companies that would like to participate should send an e-mail to <a href="mailto:mobilepluginfest@eclipse.org">mobilepluginfest@eclipse.org</a>
    with the name of the individuals and products.   Registration is free for members of the Eclipse Foundation.   A
    cost for non-member organizations is $1500.
  </p>
  <h3>Participating Companies</h3>
  <ul>
    <li>ARM</li>
    <li>Google Android</li>
    <li>Motorola</li>
    <li>Nokia</li>
    <li>RIM</li>
  </ul>
  <br><br>
</div>