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