<html><head>
<meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
</head>
<body>
<!-- Coded by John McCreesh using Bluefish and Tidy under RedHat Linux 8.0-->

  <table id="top" name="top" summary="" border="0" cellspacing="5"
  cellpadding="5">
    <tr>
      <td>
        <h2><font color="#184090">Abstracts of Conference Papers -
        Thursday</font></h2>
      </td>
    </tr>

    <tr>
      <td><img src="group_blue.gif" width="52" height="17"
      alt="image" /></td>
    </tr><!-- Start Abstract -->

    <tr>
      <td>
        <table id="tc1130" name="tc1130" summary="" border="1"
        cellpadding="8" cellspacing="0" bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>Marketing OpenOffice.org
            in your country</strong></font></td>
          </tr>

          <tr>
            <td>Nick Richards <em>Co-Lead OpenOffice.org Marketing Project</td>
          </tr>

          <tr>
            <td>An overview of the past years progress expanding
            into how to engage disparate national communities with
            OpenOffice.org. Hints on who to talk to, why you'd want
            to talk to them and suchlike. A seminar where 'best
            practice' is shared.</td>
          </tr>

          <tr>
            <td><em>Biography:
            Nick Richards is the Marketing Project Co-Lead at OpenOffice.org.
            This means he gets in the way of programmers, asks lots of
            questions and talks too much. He is in the final year of
            a History degree at King's College London.
            </em></td>
          </tr>
        </table>

        <p><a href="thursday.html"
        title="Agenda for Thursday">Back</a></p>
      </td>
    </tr><!-- End Abstract -->
    <!-- Start Abstract -->

    <tr>
      <td>
        <table id="tc1230" name="tc1230" summary="Abstract"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>Migrating from Microsoft
            Office to
            Openoffice.org/StarOffice</strong></font></td>
          </tr>

          <tr>
            <td>Frank Gamerdinger <em>Product Specialist Desktop
            solutions, Sun Microsystems, Germany, 85551
            Kirchheim-Heimstetten, Germany</em></td>
          </tr>

          <tr>
            <td>This session will discuss issues in migrating from
            Microsoft Office to OpenOffice.org/StarOffice.<br />
            An general overview of a migration project will be
            given and some possible migration scenarios are
            covered. The presentation will also discuss technical
            details faced during migration.</td>
          </tr>

          <tr>
            <td><em>Biography: Frank Gamerdinger has worked in the
            IT industry for XXX years. He has been a Java software
            developer and freelance IT consultant and has written
            articles for the German computer press.Joining Sun
            Microsystems 4 years ago, he is now one if the
            StarOffice product specialists in the Desktop Solutions
            group, assisting strategic StarOffice and desktop
            pilots.</em></td>
          </tr>
        </table>

        <p><a href="thursday.html"
        title="Agenda for Thursday">Back</a></p>
      </td>
    </tr><!-- End Abstract -->
    <!-- Start Abstract -->

    <tr>
      <td>
        <table id="tc1400" name="tc1400" summary="Abstract"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>Where do we go from
            here?</strong> The future of OpenOffice.org</font></td>
          </tr>

          <tr>
            <td>Louis Suarez-Potts <em>Community Manager,
            CollabNet</em></td>
          </tr>

          <tr>
            <td>OpenOffice.org was conceived nearly three years ago
            with the desire to join what seemed, in the late 90s,
            to be a movement that would permanently change the way
            software was produced. CollabNet, founded by Brian
            Behlendorf of Apache fame and funded by a stellar
            group, was contracted by Sun Microsystems to provide
            the collaborative work environment for what was hailed
            as the largest open-source project in the world.<br />
            No one expected success, at least not on the level that
            we have seen. There was not even what would count as a
            valid measure of success, when the project was
            conceived. Open source held the promise of simplifying
            software development, of allowing corporations to get
            to market faster, and of generally improving the code.
            All these have turned out to be true, albeit with some
            qualifications (what counts as "get to market"?). But
            no one anticipated that OpenOffice.org would engage the
            millions of endusers it has and gain such an enormous
            following outside USA's borders; and no one anticipated
            that the infrastructure on which OpenOffice.org runs,
            an early version of CollabNet's SourceCast, would be
            able to handle a participant community of 90,000
            registered users and developers, working side by side,
            collaborating trans-nationally.<br />
            This paper examines where we stand today in terms of
            community organization, and involvement. It touches on
            the present political and technical structure of
            OpenOffice.org. It then moves on to discuss what the
            future of the project may look like, from a
            technological, community, and political perspective (by
            "political" I mean a politics specific to
            OpenOffice.org, not the wider world). This paper will
            be of interest to anyone who is curious as to where
            OpenOffice.org is going and how it is going to get
            there.</td>
          </tr>

          <tr>
            <td><em>Biography: I have been helping to lead
            OpenOffice.org since its inception, in October 2000. As
            a consultant for CollabNet, which hosts OpenOffice.org
            and several other Sun OSS sites, I have been able to
            exploit my academic training and background. I received
            my PhD in English from the University of California,
            Berkeley, where I taught courses on nineteenth- and
            twentieth-century U.S. and British culture. I am at
            present working on two books, one, a study of the
            difference corporate-sponsored open-source efforts have
            made to the open-source milieu, and the other, a
            refinement of my dissertation.</em></td>
          </tr>
        </table>

        <p><a href="thursday.html"
        title="Agenda for Thursday">Back</a></p>
      </td>
    </tr><!-- End Abstract -->
    <!-- Start Abstract -->

    <tr>
      <td>
        <table id="tc1500" name="tc1500" summary="Abstract"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>What is the difference
            between OpenOffice.org and
            StarOffice?</strong></font></td>
          </tr>

          <tr>
            <td>Erwin Tenhumberg
              <em>Product Marketing Manager, Desktop Solutions Group, Sun Microsystems, Inc.</em>
            </td>
          </tr>

          <tr>
            <td>At trade shows and similar events the most
            frequently asked question is <cite>What is the
            difference between OpenOffice.org and
            StarOffice?</cite>. The goal of this session is to
            provide everybody who does marketing for OpenOffice.org
            with detailed answers to this question. In this session
            the attendees will learn what differences and
            similarities exist between StarOffice and
            OpenOffice.org concerning the functionality as well as
            the support and service offerings. The presentation
            will also give a brief overview about other derivative
            products like RedOffice, KaiOffice or
            OpenOfficePL.</td>
          </tr>

          <tr>
            <td><em>Biography:</em>
            Erwin Tenhumberg is a Product Marketing Manager in the
            Desktop Solutions Group at Sun Microsystems, Inc. Within this
            group he mainly focusses on the developer aspects of both
	    OpenOffice.org and StarOffice[tm] including the SDK.
	    Erwin started working for Sun as a Systems Engineer in
	    Langen, Germany. There he did pre-sales for
	    various software products including StarOffice and SunRay[tm].
	    Before Erwin joined Sun he worked for different companies where
	    he did Java consulting, software development and desktop
	    application administration and helpdesk.</em>
            </td>
          </tr>
        </table>

        <p><a href="thursday.html"
        title="Agenda for Thursday">Back</a></p>
      </td>
    </tr><!-- End Abstract -->
    <!-- Start Abstract -->

    <tr>
      <td>
        <table id="tc1615" name="tc1615" summary="Abstract"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>OpenOffice Instituted By
            Computer Engineering Technology
            School</strong></font></td>
          </tr>

          <tr>
            <td>John McLafferty <em>Instructor, Computer
            Engineering Technology, Palliser Campus, Saskatchewan
            Institute of Applied Science and Technology, Moose Jaw,
            SK, Canada, S6H 4R4</em></td>
          </tr>

          <tr>
            <td>
              I am an instructor in the Computer Engineering
              Technology Department, Palliser Campus, of the
              Saskatchewan Institute of Applied Science and
              Technology in Moose Jaw Saskatchewan, Canada. It is a
              5 semester course (4 months/semester) with 3
              semesters of work terms. The course is accredited by
              the Canadian Association of Technicians and
              Technologists.<br />
               The decision was made more than two years ago to
              teach OpenOffice (StarOffice initially) to all the
              1st semester students as an introduction to computer
              applications. This also requires that the students
              use OpenOffice when submitting required lab reports
              and various homework assignments.<br />
               The Department was using the WordPerfect Office
              suite. We were starting to have problems with license
              and compatibility between versions. In addition, the
              students were resorting to bootlegged versions of the
              software for their home computers. The Department
              goal was to have all the students use the same base
              software so there would be no problems with some
              having a spread sheet that didn't work right, and
              others with spell check problems, and so on.<br />
               We had talked about doing something with the course
              and the software for a while, but because we could
              see a big job ahead of us, we did what anybody else
              would do; hope that the college would buy us out for
              retirement. As it turned out, the decision was made
              for us. We got a list of the number of students
              coming into 1st semester and looked at our computer
              labs. Another lab was needed and we had 3 days and no
              software budget. The Department had some experience
              with Linux and I had been using StarOffice from the
              moment Sun released it. The decision was made; we
              rolled out StarOffice/OpenOffice and Linux.<br />
               None of the horror stories that would be expected
              from making a total change in office application and
              operating system software occurred, but we were
              totally surprised by some of the unexpected things
              that happened. For example, the initial apathy by the
              students, and the apprehension of going into a
              "Microsoft Free Zone"
              computer lab.<br />
               Nothing is harder on a computer lab than 1st
              semester students who think they know what they are
              doing. The lab required some attention for the first
              week with permission and password problems; after
              that, it was virtually maintenance free.<br />
               I plan on adding more open source software (MySQL
              and PHP) to the 1st semester course next
              September.<br />
               Session Description: 

              <ul>
                <li>Reasons for choosing OpenOffice for use in a
                high technology course.</li>

                <li>How Open Office was implemented.</li>

                <li>Unexpected surprises encountered.</li>

                <li>Why we would do it again the same way.</li>
              </ul>
            </td>
          </tr>

          <tr>
            <td><em>Biography: I am an Instructor with the
            Saskatchewan Institute of Applied Science and
            Technology in Moose Jaw, Saskatchewan, Canada. I have
            been involved with teaching and consulting in the Micro
            processors, Computers and Software fields since I saw
            my first 4004 chip. The Computer Engineering Technology
            department of SIAST, myself, and all the instructors
            have been proactive in the use of open source software
            and including this software in our courses. Because of
            the success that I have had with open source software,
            I have been promoting its use in other departments
            within the college and also within education and
            business in general.</em></td>
          </tr>
        </table>

        <p><a href="thursday.html"
        title="Agenda for Thursday">Back</a></p>
      </td>
    </tr><!-- End Abstract -->
    <!-- Start Abstract -->

    <tr>
      <td>
        <table id="tc1715" name="tc1715" summary="Abstract"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090"><font color="#FFFFFF"><strong>The
            OpenOffice.org developer survey -
            first results, findings and next
            steps</strong></font></td>
          </tr>

          <tr>
            <td>Erwin Tenhumberg <em>Product Marketing Manager,
            Desktop Solutions Group, Sun Microsystems,
            Inc.</em></td>
          </tr>

          <tr>
            <td>Together with the beta release of the
            OpenOffice.org SDK we started the first developer
            survey on OpenOffice.org. The goal of the survey is to
            determine what interest developers have in
            OpenOffice.org and what tools they prefer for their
            work. In addition the survey will help to improve the
            quality of the SDK.<br />
            In this session we will have a close look at the first
            results and try to interpret the different numbers.
            During the session we will also discuss what questions
            should be added to future developer surveys. Besides,
            we will try to draw first conclusions an think about
            necessary next steps.</td>
          </tr>

          <tr>
            <td><em>Biography: Erwin Tenhumberg is a Product
            Marketing Manager in the Desktop Solutions Group at Sun
            Microsystems, Inc. Within this group he mainly focusses
            on the developer aspects of both OpenOffice.org and
            StarOffice[tm] including the SDK. Erwin started working
            for Sun as a Systems Engineer in Langen, Germany. There
            he did pre-sales for various software products
            including StarOffice and SunRay[tm]. Before Erwin
            joined Sun he worked for different companies where he
            did Java consulting, software development and desktop
            application administration and helpdesk.</em></td>
          </tr>
        </table>

        <p><a href="thursday.html"
        title="Agenda for Thursday">Back</a></p>
      </td>
    </tr><!-- End Abstract -->
    </table>
  <hr />

  <p><a href="thursday.html">Back to Thursday</a><br />
   <a href="#top">Back to Top</a><br />
   <a href="agenda2.html">Back to Overview</a></p>

  <p>Please Note: Program content subject to change.</p>
</body>
</html>

