<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="fb1100" name="fb1100" summary="Abstract"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>StarOffice migration within
		the scope of TCO and ROI 
            </strong></font></td>
          </tr>

          <tr>
            <td>Frank Sieber<em>
		Senior Consultant, .riess integration ag,
		Draisstr. 10, D-76307 Karlsbad-Langensteinbach, Germany</em>
            </td>
          </tr>

          <tr>
            <td>
		The spirit of OpenSource together with the features
		of a high professional office software package has
		tremendously increased the interest in StarOffice
		or OpenOffice.org for a huge amount of companies
		all over the world. For the first time there
		is a real alternative office software available on
		the market, compatibly running on all common operating systems.
		<br>
		For most companies the introduction of StarOffice means
		an opportunity and a challenge at the same time. On the
		one hand there is the tempting offer of an advantageous
		license model, on the other hand one should consider
		the investment in time and efforts migration brings about.
		<br>
		Therefore, the first step should be an migration study,
		concerning the Total Cost of Ownership and
		Return on Investment (TCO+ROI) for such a mission.
		<br>
		This presentation focuses on the key issues
		of an appropriate TCO and ROI analysis for a
		successful StarOffice migration project. 
		<br>
		The practical experiences of .riess as Sun's
		first StarOffice Migration Partner in Germany offers
		precious guidance in your considerations in
		introducing StarOffice.
            </td>
          </tr>

          <tr>
            <td><em>Biography: After his diploma in physics Frank started his career at .riess as a systemengineer in 1996. Today, his main activities consists in concept development, planning and implementing business continuity solutions in computing center environments.
            </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="fb1100" name="fb1200" summary="Abstract"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>Smooth Desktop Migration
            to Linux and OpenOffice.org</strong></font></td>
          </tr>

          <tr>
            <td>Diplom-Oekonom Bernd Kretschmer <em>freier
            Journalist</em> (written together with Jay S.
            Hill)</td>
          </tr>

          <tr>
            <td>
              Those attempting to implement open source software
              solutions in the current software environment find
              themselves with daunting obstacles. The Microsoft
              muscle influences governments around the world
              through its lobbying power. Microsoft's massive
              advertising campaigns tell people that Microsoft is a
              soft and fuzzy butterfly, and is innovative in its
              development of software. The facts are that they are
              a brutal monopolistic business, and have never
              created anything close to a visionary product.<br />
               In spite of the problems in dealing with Micorosoft,
              there are slow and timid adopters in organizations
              who, although they are aware of the problems with
              Microsoft, are not irritated enough to leave their
              dank Microsoft cafeteria and have a bite from the
              smorgasborge of the alternatives, however savory
              those alternatives might be.<br />
               What makes organizations and people timid in
              migrating to Linux desktops?<br />
               Fear of losing functionality, fear of not being able
              to work as easily with others as they currently do,
              fear of spending money and time learning new
              software, fear of losing their existing work because
              they can't use it with the new tools, and fears of
              being hamstrung in different ways than they have by
              Microsoft.<br />
               Smooth migration paths:<br />
               Windows applications in Linux environments: 

              <ul>
                <li>MS Win2K Terminal Services, Citrix Metaframe,
                Tarantella</li>

                <li>Codeweaver, VMWare, Win4lin, Wine, ...</li>

                <li>MS Office, Lotus client, etc. on top,</li>
              </ul>Open Source applications in Windows
              environments: 

              <ul>
                <li>OpenOffice.org for Windows</li>

                <li>more Open Source apps</li>
              </ul>Benefits: 

              <ul>
                <li>Use of legacy applications in new environments,
                vs. similar applications in the old
                environment</li>

                <li>Easy to back out of an application at no
                risk,</li>

                <li>Can go ahead with proprietary file formats
                without risks of Microsoft macro viruses</li>

                <li>No direct spending of high-level budgets,</li>

                <li>Trust grows step-by-step</li>

                <li>Not all of the migration steps must happen
                simultaneously.</li>
              </ul>Minor obstacles: 

              <ul>
                <li>Sometimes need to reformat files created in
                Star/Openoffice, when beeing used in Microsoft
                Office.</li>

                <li>Need to rewrite proprietary Macros in Open
                languages.</li>
              </ul><em>The speech represents a chapter of a new
              book that I am writing with Jay S. Hill, Texas, for
              managers about migration to Linux.</em>
            </td>
          </tr>

          <tr>
            <td><em>Biography: IT journalist, MA in economics and
            business administration, book author with &gt; 100 book
            projects in the last 20 years, some of them on Unix and
            Linux.</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="fb1330" name="fb1330" summary="Abstract"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>Pladao Office</strong>
            the Thai localized version of
            OpenOffice.org</font></td>
          </tr>

          <tr>
            <td>Nusorn Photpipat <em>Managing Director, Software
            Design Engineer, Algorithms Co.,Ltd., 99/30 Moo 4
            Software Park Building 5th Floor Unit C, Chaengwattana
            Rd, Klongklur, Pakkred, Nontaburi 11120
            THAILAND</em></td>
          </tr>

          <tr>
            <td>
              By endorsement of Thailand's Ministry of Information
              and Communication Technology and supporting of Sun
              Microsystems (Thailand) Ltd., Pladao Office, the open
              source Office Suite based on OpenOffice.org, become
              standard Office suite of Thai.<br />
               To localize and enable OpenOffice.org to support
              full functionalities of Thai language need to do
              bi-lingual function and special work include: 

              <ul>
                <li>Word break engine/ Breaking Iterator</li>

                <li>Collating order</li>

                <li>Searching (full text search, by using breaking
                iterator before search)</li>

                <li>Output method (both display and hard copy)</li>

                <li>Spell Checker</li>

                <li>Date/Time format</li>

                <li>Bullet/Numbering</li>

                <li>UI Switch (English and Thai)</li>
              </ul>And more.<br />
               The purpose of this case study is to present the
              reason of doing bi-lingual of both functionalities
              and user interface. It will show their current
              status, present what has been done in the past year,
              and discuss the road ahead showing what is going to
              be done in the end of this year.
            </td>
          </tr>

          <tr>
            <td><em>Biography: Nusorn had been nominated as one of
            100 Global Leader for tomorrow 2003 by World Economic
            Forum.</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="fb1430" name="fb1430" summary="Abstract"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>Internationalization and
            Localization of OpenOffice.org</strong> The Indian
            Perspective</font></td>
          </tr>

          <tr>
            <td>Shikha G Pillai, Bhupesh Koli <em>National Centre
            for Software Technology(NCST), 68, 4th Cross,
            Electronics City, Hosur Road, Bangalore - 561229,
            India</em></td>
          </tr>

          <tr>
            <td>India supports a culturally and linguistically
            diverse population, majority of whom are excluded from
            the productive usage of information technology due to
            the lack of standardized and economical Indian language
            enabled software.<br />
             OpenOffice.org is the leading office productivity
            suite through open-source initiatives, available with a
            rich feature set across all main platforms, along with
            internationalization and localization support for major
            International languages. This paper examines the
            development aspects, usage and prospects of
            OpenOffice.org internationalized and localized to cater
            to the Indian market.<br />
             Most Indian scripts originate from the Brahmi script
            and follow complex rules of layout involving
            consonants, vowels, special symbols, conjuncts and
            ligatures. Unicode encoding for Indian languages
            establishes a similar pattern among the scripts. In
            this paper, we will examine this pattern and how the
            orthographic rules can be used to develop Complex Text
            Layout algorithms for Indian scripts. Also explored are
            storage and rendering aspects of Indian text, along
            with font technologies suitable for Indian
            scripts.<br />
             The Internationalization(i18n) and Localization(l10n)
            framework of OpenOffice.org sets guidelines for
            localization and internationalization work of the suite
            in other languages. The project
            <a href="http://www.ncb.ernet.in/bharateeyaoo">BharateeyaOO.o</a>
            commenced on the lines of these frameworks, to achieve
            Indian language support in OpenOffice.org. With
            initiatives for localizations in major languages of
            India, Complex Text Layout support, Indian locales,
            dictionary support and collation algorithms, the
            project aims at a completely "Indianized" office suite
            packaged economically for the Indian user. This paper
            concludes with an insight into the development,
            implementation details and progress of this
            project.</td>
          </tr>

          <tr>
            <td><em>Biography: Shikha G Pillai and Bhupesh Koli are
            staff scientists at the National Centre for Software
            Technology (Bangalore) researching in Indian language
            processing, script encoding, font technology and
            globalization aspects. They have been involved for the
            past 21 months, in the project "BharateeyaOO.o" for
            development of localization and internationalization
            support for major Indian languages in OpenOffice.org.
            Their work has been registered at
            <a href="http://l10n.openoffice.org/languages.html">
            http://l10n.openoffice.org/languages.html</a>.</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="fb1430b" name="fb1430b" summary="Abstract"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090"><font color="#FFFFFF"><strong>The
            ja.openoffice.org project now and
            beyond</strong></font></td>
          </tr>

          <tr>
            <td>Maho Nakata <em>ja project owner Kyoto University,
            2-8 Fukunokawa Haitsu, Fukunokawa City 1, Okazaki,
            Sakyo-ku, Kyoto, 606-8326, Japan</em> Takashi Nakamoto
            <em>ja project comitter Shibuya Makuhari Senior High
            School, 1-14-5 Mizuho, Hanamigawa-ku, Chiba City,
            Chiba, 262-0026, Japan</em></td>
          </tr>

          <tr>
            <td>This session focuses on the introductions of ja
            project activities including ja project overview,
            ja-dev technical issues and other sub projects
            including translating project.</td>
          </tr>

          <tr>
            <td><em>Biography: Maho Nakata: Study quantum chemistry
            at Kyoto Univ., and will be a Ph.D in Mar. 2003. Maho
            Nakata has been a ja native language project leader
            since Dec. 2002. He has also been a committer of
            FreeBSD since Oct. 2002.<br />
             Takashi Nakamoto: Student at Shibuya Makuhari Senior
            High School. Takashi Nakamoto has been a ja native
            language project developer since Dec. 2002.</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>

