<?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>
  <h2>Enabling the Eclipse Mobile and Embedded Software Development Lifecycle</h2>
  <p>The Eclipse PluginFest is a two day developer event to test interoperability and compatibility between Eclipse based plugins and products.  The event will be a workshop format
    that 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 and embedded development.   Therefore, participation is open to organizations that
    produce or use Eclipse based solutions addressing the embedded and mobile markets.
  </p>
  <p>The Eclipse Pluginfest is being hosted and sponsored by Symbian Software and will occur at the Symbian Waterloo office location in London, UK.</p>
  <table class="table">
    <tr>
      <td>
        <strong>
          Date:
      </td>
      <td> January 23 - 24, 2007</strong></td>
    </tr>
    <tr>
      <td><strong>Location:</strong></td>
      <td>Symbian Offices
      <td>
      <td rowspan="6"><img src="http://www.symbian.com/files/rx/file1966.gif" width="150" alt="" /></td>
    </tr>
    <tr>
      <td> </td>
      <td>2 - 6 Boundary Row</td>
    </tr>
    <tr>
      <td> </td>
      <td>SE1 8HP London
      <td>
    </tr>
    <tr>
      <td> </td>
      <td>United Kingdom</td>
    </tr>
    <tr>
      <td> </td>
      <td><a href="http://www.symbian.com/images/rx/img/img1099.gif">View Map</a></td>
    </tr>
  </table>
  <h2>Event Goals</h2>
  <ul>
    <li>Detect and resolve interoperability problems between products in the tool chain</li>
    <li>Create a community of tools providers within the embedded and mobile development sectors</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>
  <h2>Who Should Attend</h2>
  <ul>
    <li>Organizations that produce, use, or are planning to use solutions for the embedded or mobile sectors 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>
  <h2>Participants</h2>
  <table class="table">
    <tr>
      <th>Company</th>
      <th>Product</th>
      <th>Product Prerequisites</th>
    </tr>
    <tr>
      <td>ARM</td>
      <td>RealView DEVELOP Eclipse Plugins</td>
      <td>SDK 3.2, CDT 3.1</td>
    </tr>
    <tr>
      <td>Borland Software</td>
      <td>Borland StarTeam 2006 Eclipse Client</td>
      <td>SDK 3.1 or 3.2</td>
    </tr>
    <tr>
      <td>Code Red Technologies</td>
      <td>Internal tools</td>
      <td>SDK 3.2.1, CDT 3.1.1</td>
    </tr>
    <tr>
      <td>Collabnet</td>
      <td>Subversion</td>
      <td> - </td>
    </tr>
    <tr>
      <td>IBM</td>
      <td>Rational Systems Developer, Rational Test Realtime</td>
      <td>SDK 3.2, uml, CDT, EMF, EMFT, GMF</td>
    </tr>
    <tr>
      <td>Klocwork</td>
      <td>Klocwork Development Suite</td>
      <td>SDK 3.2, CDT</td>
    </tr>
    <tr>
      <td>LynuxWorks</td>
      <td>LynuxWorks Luminosity</td>
      <td>SDK 3.2</td>
    </tr>
    <tr>
      <td>Macrobug</td>
      <td>Internal tools</td>
      <td>Carbide C++ (e.g. platform 3.1.2), CDT 3.0.2 + Nokia patches</td>
    </tr>
    <tr>
      <td>Mentor Graphics</td>
      <td>Nucleus EDGE development tools</td>
      <td>SDK 3.1</td>
    </tr>
    <tr>
      <td>Mobile Tools for the Java Platform Project (IBM & Nokia)</td>
      <td>Mobile Tools for the Java Platform</td>
      <td>SDK 3.2, JDT 3.2, EMF 2.1</td>
    </tr>
    <tr>
      <td>Motorola</td>
      <td>Internal tools</td>
      <td>SDK 3.2, CDT, MTJ, current version only works on Linux x86 host</td>
    </tr>
    <tr>
      <td>Nokia</td>
      <td>Carbide C++ Development Tools</td>
      <td>SDK 3.2.1, CDT 3.1.1</td>
    </tr>
    <tr>
      <td>Perforce Software</td>
      <td>P4WSAD, the Perforce Plug-in for WebSphere Studio</td>
      <td> - </td>
    </tr>
    <tr>
      <td>QNX Software Systems</td>
      <td>QNX Momentics Development Suite v6.3 SP3 with QNX Momentics IDE 4.0</td>
      <td>SDK 3.2, CDT 3.1</td>
    </tr>
    <tr>
      <td>Sony Ericsson</td>
      <td>Internal tools</td>
      <td>SDK 3.1, CDT 3.1</td>
    </tr>
    <tr>
      <td>STMicroelectronics</td>
      <td>Internal tools (Workbench, profiler, Time Sequence Chart)</td>
      <td>SDK 3.2, CDT 3.1.1</td>
    </tr>
    <tr>
      <td>Symbian Software</td>
      <td>Internal tools</td>
      <td>SDK 3.1, CDT 3.0, EMF 2.1</td>
    </tr>
    <tr>
      <td>SysOpen Digia</td>
      <td>EUnit Pro</td>
      <td>SDK 3.2.1, CDT 3.1.1</td>
    </tr>
    <tr>
      <td>Telelogic</td>
      <td>Rhapsody</td>
      <td>SDK 3.2, CDT</td>
    </tr>
    <tr>
      <td>Wind River</td>
      <td>Wind River Workbench 3.0 alpha 2</td>
      <td>SDK 3.3 M4, CDT 4.0 M4, EMF 2.3.0 M4, RSE 2.0 M4
    </tr>
  </table>
  <br>
  <ul>
    <li>More to come!</li>
  </ul>
  <h2>Registration</h2>
  <p>Space is limited for this event, so we are restricting each product group to two representatives.   Registration will also be accepted
    on a first come, first served basis.
  <p>There is no fee to attend PluginFest.  Attendees will be expected to cover the cost of travel and hotel.  To register, e-mail the Eclipse Foundation at
    <a href="mailto:pluginfest@eclipse.org">pluginfest@eclipse.org</a> with the following information:
  </p>
  <ol>
    <li>Name of product to be tested or indicate if you will be testing "internal tools"</li>
    <li>Company name</li>
    <li>Name, email address, and title of the engineer/architect/developer representative</li>
    <li>Name, email address, and title of the second representative, if applicable
    <li>Product prerequisites, including Eclipse SDK version (3.0,3.1,3.2) and other Eclipse project requirements (ex. CDT, EMF, etc)
  </ol>
  <h2>Hotel</h2>
  <p>The following hotel is a 6 minute walk away from the Symbian Office.  Availability is on a first come, first served basis.<br><br>
    <a href="http://www.mercure.com/mercure/fichehotel/gb/mer/2814/fiche_hotel.shtml">Mercure London City Bankside</a><br>
    75 - 79 Southwark St., SE1 0JA London<br>
    Phone (+44) (0)207 902 0800<br>
    Fax (+44) (0)227 902 0810<br>
    Email <a href="mailto:h2814@accor.com">h2814@accor.com</a><br>
  </p>
  <h2>Questions</h2>
  <p><a href="http://wiki.eclipse.org/index.php/PluginFest_2007" target="blank">PluginFest Wiki Page</a>
    <br><br>
    Lynn Gayowski, Marketing Events Manager, Eclipse Foundation<br>
    Email <a href="mailto:pluginfest@eclipse.org">pluginfest@eclipse.org</a><br>
    Phone (613) 224-9461 ext. 234<br>
    <br><br>
  </p>
</div>