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

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

    <tr>
      <td><img src="group_red.gif" width="52" height="17"
      alt="image" /></td>
    </tr>

    <tr>
      <td>
        <table id="ta1130" name="ta1130" summary="Abstract" border="1"
        cellpadding="8" cellspacing="0" bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>OpenOffice.org Software
            Development Kit (SDK) - For own solutions and products
            based on OpenOffice.org and Java</strong></font></td>
          </tr>

          <tr>
            <td>J&uuml;rgen Schmidt <em>Technical Lead
            Software Engineering, Star Office Software Entwicklungs
            GmbH</em></td>
          </tr>

          <tr>
            <td>
              This session describes the opportunities to extend or
              control OpenOffice.org with Java or other languages
              where an UNO language binding exists.<br />
               OpenOffice.org is an open source driven office
              productivity formerly based on StarOffice. While it
              is widely known that OpenOffice.org is multi-platform
              and that it is fully compatible with the Microsoft
              Office formats, few to date are aware that it offers
              a complete API for developers to support the creation
              of own extension or the control of OpenOffice.org
              from own applications. The API based on the Universal
              Network Objects (UNO) component model which allows
              the integration of 100% pure Java components in
              OpenOffice.org. It is also possible to control
              OpenOffice.org from a Java application to use the
              provided office functionality for example a report
              generator or a document converter.<br />
               The session gives an introduction into the UNO
              component model and it will discuss the main API
              concepts (hopefully this section will be an extra
              session). The capabilities of the API are
              demonstrated using some examples of Java-UNO
              components. The session provides an overview about
              the OpenOffice.org Software Development Kit
              (SDK).<br />
               The attendees will learn how to use, extend and
              customize a professional office application with
              Java. They learn to create highly integrated office
              components in Java which are platform independent and
              can be used on every platform where OpenOffice.org
              and Java will be available. This is an advantage for
              all who want to create extensions for their office
              environment or a wider audience. 

              <h4>Outline</h4>

              <ul>
                <li>Introduction
                  <ul>
                   <li>OpenOffice.org
                       - short overview (application
                       areas: writer, calc, draw, impress)</li>
                   <li>OpenOffice.org Software Development Kit (SDK)
                      - short overview</li>
                  </ul>
                </li>
                <li>(optional
                  <ul>
                  <li>The UNO component model</li>
                  <li>Introduction to UNO</li>
                  <li>Concepts</li>
                  <li>Key features</li>
                  <li>)
                  </ul>
                </li>
                <li>Examples
                  <ul>
                    <li>Calc Add-in component
                      <ul>
                        <li>concepts</li>
                        <li>code sample</li>
                      </ul>
                    </li>
                    <li>Java application using a remote connection to
                        OpenOffice.org
                      <ul>
                        <li>demo of a document converter</li>
                        <li>code sample</li>
                      </ul>
                    </li>
                    <li>OfficeBean
                      <ul>
                        <li>demo of simple examples</li>
                        <li>code sample</li>
                      </ul>
                    </li>
                  </ul>
                </li>
              </ul>
(the examples may change)
            </td>
          </tr>

          <tr>
            <td><em>Biography: J&uuml;rgen Schmidt has worked
            for StarOffice for over five years. He was deeply
            involved in the development of the UNO component model
            which is the foundation for the StarOffice API.
            Currently he is technical lead for the StarOffice
            Software Development Kit (SDK) which is used in
            StarOffice and OpenOffice.org.</em></td>
          </tr>
        </table>

        <p><a href="thursday.html"
        title="Agenda for Thursday">Back</a></p>

        <table id="ta1230" name="ta230" summary="Child work spaces"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090"><font color="#FFFFFF"><strong>The
            new development process - How Child
            Work Spaces will improve the developer experience and
            the quality</strong></font></td>
          </tr>

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

          <tr>
            <td>Beginning with the OpenOffice.org 1.1 builds a new
            development process based on Child Work Spaces (CWS)
            was introduced. Due to the new development process
            future StarOffice releases will be based on
            OpenOffice.org and actually have most of the binaries
            in common. What is even more important, the usage of
            CWS makes it much easier for developers to contribute
            to the OpenOffice.org project. New features and patches
            can be developed and tested without interfering with
            other projects.<br />
             This session will outline the new development process
            and explain what tools are available. In addition, the
            speaker will talk about the history and illustrate what
            the benefits of the new process are compared to the
            past.</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>

        <table id="ta1400" name="ta1400" summary="Glow project"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>
		The Glow Project - an <i>outlook</i> for
			OpenOffice.org Groupware
            </strong></font></td>
          </tr>

          <tr>
            <td>Colm Smyth <em>Staff Engineer with Sun
            Microsystems</em></td>
          </tr>

          <tr>
           <td>
		Glow is the codename for a groupware client project being
		started within the OpenOffice.org Groupware initiative.
		The presentation will describe the motivation, goals,
		technologies and roadmap for Glow,
		and introduce the initial team who are developing
		the first milestone. 
	   </td>
          </tr>

          <tr>
            <td><em>Biography: 
	    Colm is a software developer with 16 years experience.
	    He has developed
	    clients, servers, middleware (object, content, data and messaging)
	    and some things that defy conventional classification.
	    He has been with Sun
	    for over 5 years and currently is a Technical Architect with
	    the StarOffice
	    team. Colm is an enthusiastic developer of rich clients in Java
	    and is Sun's lead engineer on the Glow project
	    within OpenOffice.org Groupware.
            </em></td>
          </tr>

        </table>
        <p><a href="thursday.html"
        title="Agenda for Thursday">Back</a></p>

        <table id="ta1500" name="ta1500" summary="Scripting"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>Scripting OpenOffice.org
            in your language of choice.</strong></font></td>
          </tr>

          <tr>
            <td>John Rice <em>Staff Engineer with Sun
            Microsystems</em></td>
          </tr>

          <tr>
            <td>The talk will describe the Scripting Framework
            being developed to enable any scripting language which
            has an UNO bridge to be plugged into OpenOffice.org.
            Using the framework users and developers will be able
            to write scripts in any supported scripting language to
            automate OpenOffice.org.<br />
             Developers will learn about the overall design of the
            scripting framework and how one would go about writing
            their own scripting runtime to plug in their favorite
            scripting language to OpenOffice.org. Details of the
            Java, Beanshell and Python runtimes will be
            presented.</td>
          </tr>

          <tr>
            <td><em>Biography: John Rice is a Staff Engineer with
            Sun Microsystems, working as technical lead on the
            Scripting Framework project for OpenOffice.org
            (http://framework.openoffice.org/scripting). John has
            over 15 years industrial experience in the development
            of software applications. He has worked with companies
            including Hitachi, Lotus and ICL, covering
            a board range of development areas including neural
            network research, Lotus Notes groupware products, ICL/
            Fujitsu's document management system and a number of
            award winning internet based information management
            tools.</em></td>
          </tr>

        </table>
         
        <p><a href="thursday.html"
        title="Agenda for Thursday">Back</a></p>

        <table id="ta1615" name="ta1615" summary="Localization"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>Web-based Distributed
            Localization of OpenOffice.org</strong></font></td>
          </tr>

          <tr>
            <td>J&aacute;nos Noll <em>Founder of Free Software
            Foundation Hungary</em></td>
          </tr>

          <tr>
            <td>I will present two "in-house developed" web-based,
            database-backed systems for distributed localization of
            the OpenOffice.org messages and the help, respectively.
            These systems allow involvement of a large number of
            people in the localization of OpenOffice.org. This
            system has been used for the Hungarian localization
            (which is, sadly, far not 100% finished, as of today).
            I will also present a "next generation" localization
            tool, which is not implemented yet. This tool should
            make localization as easy as clicking with the mouse
            and entering text.<br />
             My talk will be about tools for OpenOffice.org
            allowing distributed, Internet-based translation. I
            will present two programs and scenarios which helped to
            translatethe OpenOffice.org strings and the
            OpenOffice.org help, and a plan of an interactive
            program, that could make doing translations and
            revisions easy and very productive.<br />
             The first program has been used to translate the
            OpenOffice.org strings. The program provides a
            database-backed web-based editor, where individual
            strings can be searched for, translated and revised
            (marked being good and appropriate) by the registered
            translators. The program was written in the popular PHP
            web programming language, and it is using Apache,
            PostgreSQL, and is running on Linux. The translation
            process also includes some scripts that bridge the gap
            between the web-based translation engine and the
            "standard" OpenOffice.org localization tools.<br />
             The second program has been used to translate the
            OpenOffice.org help. This tool is conceptionally
            similar to the first, but due to the different
            structure of the material to-be-translated and the
            different tools it uses (T9N toolkit), it has a
            slightly different structure which makes it worth to
            present this separately.<br />
             And last, there is an idea for an interactive, client
            program, which can "look up" the message string on the
            screen under the mouse cursor in a translation
            database, and by identifying it, it can provide access
            to the translation allowing to modify or revise it.
            This application would radically speed up testing
            (QA-ing) a localized OpenOffice.org program.</td>
          </tr>

          <tr>
            <td><em>Biography: I have been a Linux user and
            programmer for 5-6 years now. In the past years, it was
            an honor for me to take part in two Hungarian civil
            societies, the "LME" (Association of Hungarian Linux
            Users), founded in 1998, and the "FSF.hu Foundation for
            Propagating and Supporting Free Software in Hungary". I
            am using Linux at home and at work, which implies that
            I needed a good Office product for writing documents,
            presentations and so on. OpenOffice.org fullfilled my
            needs, and I've been using it for two years now.
            OpenOffice.org localization in Hungary has been lacking
            (at least localization of the "GPL" version, as a
            commercial OOo-based product is available for money),
            that is why I was happy to be an organizer of the 2002
            OOo-localization marathon, during which a group of 150
            people localized all the approx. 21 thousand strings in
            OOo in just 3 days.<br />
             In my work I do mostly web programming and system
            management, and I work with opensource products
            day-by-day.</em></td>
          </tr>

        </table>
         
        <p><a href="thursday.html"
        title="Agenda for Thursday">Back</a></p>
        
        <table id="ta1715" name="ta1715" summary="Packaging OOo"
        border="1" cellpadding="8" cellspacing="0"
        bordercolor="#000080">
          <tr>
            <td bgcolor="#184090">
            <font color="#FFFFFF"><strong>Packaging
            OpenOffice.org</strong></font></td>
          </tr>

          <tr>
            <td>Chris Halls <em>The Debian project</em></td>
          </tr>

          <tr>
            <td>This talk gives an introduction to the process of
            making OpenOffice.org packages. It gives an overview of
            the existing techniques used to build OOo and integrate
            it into the operating system. Also, I will introduce
            some of the important tips, tricks, tools and resources
            for packages.<br />
             The Debian team, and several other distributors, have
            been providing their own packages of OpenOffice.org for
            their system. The source is modified to integrate
            better with the native package management, as well as
            taking into account constraints put on the packages by
            the rest of the system, including components with
            restricted licensing such as the GPC library and the
            JDK. The methods used to overcome these problems will
            be covered, as well as the concepts behind the extra
            features such as language packs, auto user install,
            language fallbacks and managing three different
            architectures. There are several tools and resources
            available for packages, such as various mailing lists,
            scripts, ccache &amp; distcc, IRC, some Issuezilla
            queries and web resources such as Ximian's LXR and
            Tinderbox.<br />
             Targeted Audience: People interested in packaging,
            porting and the installation of OOo, and those
            developers who are interested in techniques to improve
            the end user installation experience.</td>
          </tr>

          <tr>
            <td><em>Biography: Chris Halls, is a software
            developer, living &amp; working in Frankfurt, Germany.
            He is also a Debian Developer and part of the team that
            packages OpenOffice.org for the Debian distribution, as
            well contributing to the tools project. He is 29,
            married and is British.</em></td>
          </tr>

          <tr>
        </table>
      </td>
    </tr>
  </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>

