<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 -
        Friday</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="fc1100" name="fc1100" summary="Abstract"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>OpenOffice.org on three
            continents</strong> A Real Life Case Study</font></td>
          </tr>

          <tr>
            <td>Michael Bona <em>Vorstand/CIO skilldeal AG,
            Gitschiner Strasse 94, 10969 Berlin, Germany</em></td>
          </tr>

          <tr>
            <td>
              The case study presents reasons for, obstacles and
              experiences of a migration from MS Office to
              OpenOffice.org in the context of a small but very
              international company.<br />
               The Case Study is based on a real project and shows
              how OpenOffice.org (OOo) helped a small company gain
              a competitive cost advantage over much larger
              competitors and helped the IT infrastructure keep up
              with the rapid growth of the company. It is also a
              demonstration of the potential benefits and risks of
              a migration. The case study is divided into four
              parts: 

              <ol>
                <li><strong>Before migration</strong>: "Migration
                Corp." is a small but very international company.
                The roughly 20 employees work in six offices on
                three continents and have five working languages in
                everyday business. In an industry dominated by
                three global giants, "Migration Corp." manages
                rapid growth thanks to innovative products and
                rigid cost control. In support of this strategy the
                complete IT has been outsourced. The outsourcing
                service company is asked to come up with solutions
                to provide a reliable IT-infrastructure at very low
                cost. An audit of the existing IT shows that a
                significant part of IT costs is spent on licenses.
                At the same time, management has trouble tracking
                all licenses due to dispersed organisation and
                rapid growth. As one measure, the outsourcing
                service company suggests migration to
                OpenOffice.org on clients. The Case Study shows a
                number of interesting and not widely discussed
                reasons why the management was initially sceptical
                but eventually agreed.</li>

                <li><strong>Migration</strong>: OpenOffice.org is
                rolled out in several stages together with a
                company-wide standard desktop installation. Install
                glitches for multi-user installations and the
                complexity of adding dictionaries are two examples
                for the challenges of the standard install which
                are eventually overcome. All in all, the process is
                fairly smooth. The Case Study shows the problems of
                the roll-out and how they were solved.</li>

                <li><strong>After migration</strong>: Seven months
                after migration, the result is largely positive.
                Most users are happy with OOo even though not all
                have received training. Calls for end user support
                have gone done quite quickly and most problems in
                exchanging documents have been resolved. The Case
                Study shows what issues remain and presents a
                number of suggestions for a smooth migration.</li>

                <li><strong>Conclusion and Outlook</strong>:
                "Migration Corp." is now a convinced OOo convert.
                OOo has become a cornerstone of the IT
                infrastructure and will be employed in a number of
                new and unexpected ways. In the planning stages are
                plug-ins for custom financial functions and using a
                database for file storage, indexing and archiving.
                To make this happen, "Migration Corp." hopes for an
                effective and mutually beneficial dialogue with
                fellow users and the development community.</li>
              </ol>
            </td>
          </tr>

          <tr>
            <td><em>Biography: Michael Bona is CIO at skilldeal AG,
            a Berlin based IT-Consulting and Outsourcing company.
            He holds a management degree from ESCP-EAP - The
            European School of Management. Bona has worked on IT
            projects in several European countries before
            co-founding skilldeal AG in 2000. The focus of his work
            are innovative and cost-optimised solutions for small
            and medium companies - often resulting in projects
            based on Free or Open Source Software.</em></td>
          </tr>
        </table>

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

    <tr>
      <td>
        <table id="fc1200" name="fc1200" summary="Abstract"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>User Experience
            (Panel)</strong></font></td>
          </tr>

          <tr>
            <td>Lutz H&#246;ger <em>Product Manager, User
            Experience</em> Christian Jansen <em>Product
            Specialist, User Experience</em> Matthias
            M&#252;ller-Prove <em>Product Manager, User
            Experience</em> <em>Sun Microsystems / Star Office
            Software Entwicklungs GmbH, Sachsenfeld 4, 20097
            Hamburg, Germany</em>, Nick Richards</td>
          </tr>

          <tr>
            <td>This panel will concentrate on usability issues of
            OpenOffice.org. It will tackle the general conception
            that open-source software and usable software exclude
            each other. A team of professional usability experts,
            together with user interface contributors of the
            OpenOffice.org community can create an Office product
            that holds its own in the face of Office suite
            competition.</td>
          </tr>

          <tr>
            <td><em>Biography: Lutz H&#246;ger (TBD);
            Christian Jansen has held a position on the StarOffice
            User Experience team for over 4 years.
            As a member of this user experience team at Sun Microsystems,
            he plays a major role in the product design of StarOffice.
            His responsibilities include designing and specifying the
            graphical user interface and the functionalitly behind it and
            in so doing, addressing easy-to-use-interface needs.
            Specific areas include color schemes and accessibility
            considerations. He holds a degree in Communication Design
            from the 'Hamburger Akademie f&uuml;r Kommunikationsdesign und
            Art Direction'
            (Hamburg Academy for Communication Design and Art Direction);
            Matthias M&#252;ller-Prove is a creative
            computer scientist. His reputation as a first-class
            human-computer interaction expert is based on nine
            years of direct experience designing professional
            software interfaces for international operating
            companies. Before joining the StarOffice User
            Experience team at Sun Microsystems, he played a
            significant role in designing the user interface of
            Adobe GoLive. He holds a degree from University of
            Hamburg (Dipl.-Inform.) and is member of the usability
            professionals association upa and ACM/SIGCHI;
            Nick Richards is the Marketing Project 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="friday.html"
        title="Agenda for Friday">Back</a></p>
      </td>
    </tr><!-- End Abstract -->
    <!-- Start Abstract -->

    <tr>
      <td>
        <table id="fc1330" name="fc1330" summary="Abstract"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090"><font color="#FFFFFF"><strong>The
            Open ECDL</strong>: how to use opensource software -
            namely OpenOffice.org &#226;&#8364;&#8220; for
            delivering ECDL courses</font></td>
          </tr>

          <tr>
            <td>Egidio Pentiraro <em>Advisor, EdOsNet.org, Via
            Ragazzi del 99 n. 19, I - 23100 Sondrio SO,
            Italy</em></td>
          </tr>

          <tr>
            <td>ECDL stands for "European Computer Driving
            Licence". ECDL is an internationally recognised
            qualification that enables people to certify their
            competence in essential computer skills &amp;
            knowledge. In the past, the ECDL was mainly based on
            Microsoft products: Windows, Office, Internet Explorer,
            Outlook.<br />
            Recently, the ECDL has become a really ' vendor
            independent certification '. Now, the ECDL Tests can be
            performed everywhere with opensource software, such as:
            GNU/Linux, OpenOffice.org, Mozilla, Evolution.</td>
          </tr>

          <tr>
            <td><em>Biography:</em></td>
          </tr>
        </table>

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

<!--
    <tr>
      <td>
        <table id="fc1430" name="fc1430" summary="Abstract"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>OpenOffice.org Enterprise
            Deployment</strong></font></td>
          </tr>

          <tr>
            <td>Martijn Dekkers <em>Technical Architect Linux,
            Computacenter</em></td>
          </tr>

          <tr>
            <td>Session will present a paper describing
            best-practice for deploying medium to large scale
            OpenOffice.org deployments.<br />
            One of the barriers to widespread adoption of
            OpenOffice.org witin the business community is
            deployment of the product. The highest costs of
            operating a software product within a business
            environment are associated with deployment and
            management. This paper presents best-practice in the
            area of piloting and deployment of OpenOffice.org, and
            discusses several methods of smoothing user adoption
            and acceptance of OpenOffice.org.<br />
             Today, not many organisations are comfortable running
            Open Source Software in a production environment
            &#226;&#8364;&#8220; not due to a lack of trust in the
            capabillities of the software as such, but rather due
            to lack of support etc. Not many organisations are
            ready to commit to a community-based support, and
            prefer the comfort of a commercial support contract,
            and therefore would turn to StarOffice for live
            deployment within their organisation. Notwithstanding,
            organisations still benefit from OpenOffice.org in many
            ways.<br />
             First OpenOffice.org is used in the piloting phase of
            the project, allowing a single individual or project
            team to engage directly with the community for advice
            and support , at a relatively low cost and risk point.
            The fact that OpenOffice.org is Open Source, and all
            facets of the product are &#226;&#8364;&#339;out
            there&#226;&#8364; in the open often instill a true
            sense of confidence in the potential adopting
            organisation that &#226;&#8364;&#339;what they see is
            what they will get&#226;&#8364;.<br />
             Secondly, should an organisation decide to deploy
            StarOffice, OpenOffice.org can be used by employees at
            home free of charge, maintaining full
            compatibillity.with the office work environment.<br />
             The path for adoption from OpenOffice.org through to
            StarOffice proposes an attractive vale proposition to
            all involved and is a true win-win situation all
            around. The organisation benefits from community
            support, and a smooth, risk-free adoption path. The
            benefit to the community of this approach is likewise
            enormous. As adopting organisations actively engage
            with the developer community, valuable lessons are
            learned, and product adjust can &#226;&#8364;&#8220;
            and often are &#226;&#8364;&#8220; made right there and
            then. Finally, Sun Microsystems benefits as well, as it
            can clearly see a return on the considerable investment
            it has made into OpenOffice.org to date.<br />
             Finally, the paper discusses aspects of operational
            management of OpenOffice.org in a live production
            environment, and outlines several areas where
            OpenOffice.org can see more improvement in order to
            effectively compete with other products.</td>
          </tr>

          <tr>
            <td><em>Biography:</em></td>
          </tr>
        </table>

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

  <p><a href="friday.html">Back to Friday</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>

