<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Eclipse Test & Performance Tools Platform Project</title>
<link rel="stylesheet" href="../eclipse-webtools/templates/eclipse/eclipse.css"></head>
<body text="#000000" bgcolor="#ffffff" link="#0000ee" vlink="#551a8b" alink="#ff0000">
&nbsp; 
<table BORDER=0 CELLSPACING=5 CELLPADDING=2 WIDTH="100%" >
  <tr> 
    <td ALIGN=LEFT width="60%"><font class=indextop>eclipse test & performance tools platform project</font><br>
      <font class=indexsub>Project Management Committee</font></td>
    <td WIDTH="40%"><img SRC="../../images/Idea.jpg" HSPACE=50 height=86 width=120 align=CENTER></td>
  </tr>
</table>

<p>This project proposal is in the <a href="/projects/dev_process/"> 
  Proposal Phase</a> and is posted here to solicit additional project participation 
  and ways the project can be leveraged from the Eclipse membership-at-large. 
  You are invited to comment on and/or <a href="contributing.html">join the project</a>. 
  Please send all feedback to the <a href="#test">eclipse.test-and-performance 
  newsgroup</a> or the <a href="https://dev.eclipse.org/mailman/listinfo/test-and-performance-proposal"> 
  test-and-performance-proposal</a> mailing list.</p>
<table BORDER=0 CELLSPACING=5 CELLPADDING=2 WIDTH="100%" >
  <tr> 
    <td ALIGN=LEFT VALIGN=TOP COLSPAN="2" BGCOLOR="#0080C0"><b><font color="#FFFFFF" face="Arial,Helvetica">Project 
      Management Committee</font></b></td>
  </tr>
  
  <tr> 
    <td> 
      <p>The Eclipse Test &amp; Performance Tools Platform Project is managed 
        by a Project Management Committee (PMC). The work of the Top Level Project 
        is organized into Projects, each with its own Project Lead who is responsible 
        for its success. Where appropriate, larger Projects may be further divided 
        into Subsystems, each with its own Lead. </p>
      <p>This page lists those individuals expected to comprise the PMC or to 
        lead currently planned Projects. As with any Eclipse Project, this Project 
        will be a meritocracy. We will welcome to the Project all participants 
        who are able to make the requisite commitment and contribution, and will 
        assign responsibility accordingly over time. </p>
      <p>The initial Eclipse Test &amp; Performance Tools Platform PMC will be 
        chosen from the appropriate contributors at the project kickoff meeting.</p>
      <p>Our email addresses are show below in &quot;disguised&quot; form as a 
        spam control measure. Usually, we ask that you do not email us directly. 
        Instead join the newsgroup <a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.test-and-performance" target="_blank">eclipse.test-and-performance</a> 
        (NOTE: It is password protected for spam-protection. If you don't already 
        have an Eclipse news server password you will need to <a href="http://dev.eclipse.org/newsManager/newsRequestForm.html" target="_blank">get 
        one</a> ). When the Project is created, a mailing list will be set up 
        for developers to get involved in the Project or Subsystems. </p>
      </td>
  </tr>
</table>
<table BORDER=0 CELLSPACING=5 CELLPADDING=2 WIDTH="100%" >
  <tr> 
    <td ALIGN=LEFT VALIGN=TOP BGCOLOR="#0080C0"><b><font face="Arial,Helvetica"><font color="#FFFFFF"> 
      Candidate PMC Members</font></font></b></td>
  </tr>
  <tr> 
    <td> 
      <p><b>Tyler Thessin</b> (tyler.thessin at intel.com)<br>
        Tyler Thessin is an engineering manager for <a href="http://www.intel.com/software/products/" target="_blank">Intel 
        Software Development Products</a>, namely Intel VTune Performance Analyzers, 
        at Intel Corporation. He is responsible for common tools infrastructure 
        for performance analyzers and threading tools. He started with Intel in 
        1993 working on software development tools then participated in managing 
        several new business opportunities around video conferencing and enterprise 
        hosting and Internet streaming media solutions before returning to managing 
        software performance tools products. Tyler has been leading the creation 
        of this proposal and is offering to lead the PMC and the Hyades Platform 
        project.</p>
      <p><b>Mike Norman</b> (mgn at scapatech.com)<br>
        Dr. Norman is CEO and founder of a specialist load testing software tools 
        vendor known as Scapa Technologies which was founded in 1998 and is based 
        in Edinburgh, Scotland. In 1990, Dr. Norman co-founded the Edinburgh Parallel 
        Computing Centre at the University of Edinburgh where he led the Centre's 
        Research Group. From 1994 to 1999, he founded and ran a specialist IT 
        consultancy and analyst company, Makespan Ltd. Dr. Norman holds a BSc 
        degree in Physiology from the University of London, and both an MSc in 
        Artificial Intelligence and a PhD in Computer Science from the University 
        of Edinburgh. His specialist interest is the scalability and performance 
        of server-based computer systems, an area in which he is the author of 
        dozens of scientific papers. Dr Norman initiated the original Eclipse 
        Hyades project at the Eclipse Board of Stewards in September 2002 and 
        led it through to Version 3.0 in June 2004. During 2004 he worked with 
        a broad range of stakeholders to propose an Eclipse PMC for Test and Performance 
        which would incorporate the Hyades project. Mike is offering to join the 
        project PMC in a coordination and communication role, and as Project Lead 
        for the Hyades Test Tools Project.</p>
      <p><b>Harm Sluiman</b> (sluiman at ca.ibm.com)<br>
        Harm Sluiman is a senior development manager for Autonomic Computing tools 
        as well as Rational Test and Performance Tools at the <a href="http://www.can.ibm.com/torontolab/" target="_blank">IBM 
        Toronto Lab</a>. He was responsible for database, test, trace and performance 
        tooling in WebSphere Studio. He is an IBM Senior Technical Staff Member, 
        a member of the Canadian Excellence Technical Community, an affiliate 
        of the IBM Academy of Technology, and an initial member of the original 
        Eclipse Hyades project. He has written several articles on test and performance 
        tooling, as well as contributed to several OMG RFPs related to data access, 
        and has been a frequent speaker at conferences. He has been an IBM employee 
        since 1974 starting in the hardware and microcode support area, before 
        spending time in the field before moving to R&amp;D. Prior to working 
        on WebSphere Studio, he was the lead for distributed processing and database 
        tooling for VisualAge for C++. He was a contributor to JSR 47 and JSR 
        165, and holds many patents in the areas of data model, test tools and 
        performance analysis. Harm is offering to join the project PMC with an 
        architecture role.</p>
      <p><b>Serge Lucio</b> (slucio at us.ibm.com)<br>
        Serge Lucio is a Senior Product Manager at IBM Rational, focusing on Automated 
        Software Quality products' strategy. Since 2001, he has been leading the 
        creation of the UML 2 Testing Profile at the Object Management Group and 
        driving its adoption in the industry. Prior to that, Serge worked as a 
        consultant, helping organizations improve their test and verification 
        practices for automotive, aerospace and telecom systems. Serge is offering 
        to join the project PMC as Project Lead for the Hyades Tracing and Profiling 
        Tools and Hyades Monitoring Tools projects.</p>
    </td>
  </tr>
</table>
</body>
</html>
