<html xmlns="http://www.w3.org/1999/xhtml">
<head profile="http://www.w3.org/2005/10/profile">
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />

  <title>OpenOffice.org Conference 2008</title>
  <link rel="stylesheet" type="text/css" href="../../marketing.css" />
  <link rel="stylesheet" type="text/css" href="../ooocon.css" />
  <link rel="stylesheet" type="text/css" href="programme.css" />
  <script language="JavaScript" type="text/javascript" src="../ooocon.js">
</script>
</head>

<body>
  <div id="MyContent">
    <div id="title">
      <a href="/conference/index.html"><img style=
      "border: 0px solid; margin-left: 25px; float: left;" src=
      "../images/oooconlogo.gif" alt="OpenOffice.org Conference logo" /></a>

      <h3>OpenOffice.org Conference (OOoCon 2008)</h3>

      <p>5th-7th November 2008<br />
      Beijing, China<br />
      <a href="../travel.html#registration"><span class="register">Register
      Now</span></a> <!--
    <a href="http://ooocon.kiberpipa.org"><span class="register">Video recordings of the Conference</span></a>
--></p>
    </div>

    <div id="midtabs">
      <ul>
        <li class="th"><a href="../index.html">Home</a></li>

        <li><a href="../news.html">News</a></li>

        <li><a href="../venue.html">Venue</a></li>

        <li><a href="../hotels.html">Hotels</a></li>

        <li><a href="../travel.html">Travel</a></li>
        <!--        <li><a href="../programme.html">Programme</a></li> -->

        <li id="progroot">
          <a onmouseover="dropdown('prog','visible');" onmouseout=
          "dropdown('prog','hidden');" href="../programme.html">Programme</a>

          <ul id="progmenu" class="subtabs" onmouseover=
          "dropdown('prog','visible');" onmouseout=
          "dropdown('prog','hidden');">
            <li style="display: none;" id="fixfox"><a href=
            "../programme.html">Programme</a></li>

            <li><a href="wednesday.html">Wednesday</a></li>

            <li><a href="thursday.html">Thursday</a></li>

            <li><a href="friday.html">Friday</a></li>
          </ul>
        </li><!--
        <li><a href="../speakers.html">Speakers</a></li>

        <li><a href="../attendees.html">Attendees</a></li>
-->

        <li><a href="../cfp/index.html">Speakers</a></li>

        <li><a href="../sponsors.html">Sponsors</a></li>
      </ul>
    </div><br style="clear: left;" />
    <br />

    <h2>Abstracts of Conference Papers - Friday</h2>
    <!-- This next section created by OOoCon_abstracts.php -->

    <div class="abstract" id="a1371">
      <div class="header">
        <p class="title">Funding the project - the networked way</p>

        <p class="by">André Schnabel (project member / supervisory board
        member / OOo Germanophone project / OpenOffice.org DEutshcland
        e.V.)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> Funding the project is a topic which has been
        (and will be) discussed for several years. As the project is growing
        (in numbers and in activities) funds will get even more important. As
        the project itself is no legal entity, we need structures to support
        funds. The presentation is going to show the ways we currently have
        for funding the project and how we can find new ways. The
        presentation will be held from my perspective as a community member,
        as well as founding member of the German association "OOo Deutschland
        e. V." - presenting our work and problems and how we try to cooperate
        with other associations to fund the OpenOffice.org project. Aim of
        the presentation is to get to know the associations that exist
        worldwide for supporting OOo and develop ideas how to make our work
        more efficient.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> I'm professional developer, based in Germany.
        I'm involved in the OOo project since 2002 taking several roles
        (Co-Lead of the Germanophone project, Lead of QA project, member of
        the Community Council). As founding member of OOo Deutschland e.V. I
        made several experiences about the problem but also the joy of
        founding the project.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1394">
      <div class="header">
        <p class="title">OpenOffice - what influence does it (and you) have
        on the future?</p>

        <p class="by">Haegg, Fredirk (QA Engineer / Sun Microsystems,
        StarOffice)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> Recent articles about "ODF as the winning
        format", critical voices to Microsoft's Format, schools of poor
        countries being able to offer Office-education to new generations
        because of OpenOffice.org.. We are making an important difference to
        the way the future will look for some people. I believe many of us
        doesn't realize how amazingly big this movement really is. This was
        what made me come up with the idea. - Short interviews of people from
        third-world countries. To hear what OpenOffice.org really means for
        them. - Presentation of news-texts, to find indicators with which
        help we might draw conclusions about OOo's future position, on a
        global-view.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> 6 years at StarOffice (6 years next week)</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1448">
      <div class="header">
        <p class="title">Why registration is important for the OOo
        project</p>

        <p class="by">Martin Damboldt (Program Manager / Sun Microsystems
        GmbH)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> Often registration rings a bell for people and
        has some kind of bad touch. The Service Tag based registration
        support we use in OpenOffice.org is anything else than evil. The
        whole OpenOffice.org Project can massively benefit from the outcomes
        we gather by registrations. Some key aspects and important items and
        features will be highlighted. Give an over view about OpenOffice.org
        registration. Show benefits in relation to product development,
        optimization, feedback channels. Demonstration of Google Maps ("Pink
        dot Maps")</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Martin Damboldt was born 1976 in Lueneburg,
        Germany. He joined StarDivision in 1996. Since 2002 he is responsible
        Program Manager for OpenOffice.org / StarOffice.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1510">
      <div class="header">
        <p class="title">Project: Education</p>

        <p class="by">Suarez-Potts, Louis (Community Manager / Sun
        Microsystems, Inc.)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> How can we get OpenOffice taught in schools? I
        mean not only the teaching of courses for users but also and perhaps
        more fundamentally important, the teaching of coding OpenOffice.org.
        Engaging students (and also instructors and professors) in coding
        OpenOffice.org in the formal environment of a secondary and
        post-school sounds promising?after all, we all recognize the value
        that students currently bring to OpenOffice.org and Foss in general,
        and we also all probably believe that by engaging students we can
        help build the future we want. (It goes without saying that just
        about every enterprise believes the same and many have significantly
        funded education efforts throughout the world.) If the why seems
        clear enough, the how remains a lot more murky. This presentation
        examines what OpenOffice.org and other Foss projects have been doing
        and evaluates the efforts. My interest is pragmatic: which efforts
        have resulted in contributors (of all levels) coming to
        OpenOffice.org and other projects?</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Louis Suárez-Potts is the longtime Community
        Manager and Chair of the Community Council for OpenOffice.org; he
        joined Sun Microsystems in 2007 and has led the OpenOffice.org
        community since 2000. The lead and co-lead of several projects and
        the primary spokesperson and representative of OpenOffice.org,
        Suárez-Potts also represents the project regarding OpenDocument
        format (ODF) matters, and is on the OASIS ODF Adoption Technical
        Committee and is a member of the ODF Alliance. He speaks frequently
        on the ODF, OpenOffice.org, education and open source, and community
        development throughout the world. Suárez-Potts is currently working
        on several articles regarding open source development and education.
        He lives in Toronto and received his PhD from U.C. Berkeley.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1497">
      <div class="header">
        <p class="title">FLOSS around the world: similarities &amp;
        differences</p>

        <p class="by">Ghosh, Rishab (Senior Researcher, Head Collaborative
        Creativity Group / United Nations University UNU-MERIT)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> Free/Libre/Open Source Software developer
        communities are growing around the world. Most code is still written
        in Western Europe and North America, but a large and increasing
        amount of developers are contributing from Asia - especially China,
        India and Japan; Latin America and even Africa. The FLOSSWorld
        conducted the first large, multi-lingual survey of developers,
        businesses, universities and governments covering 8 countries in
        Asia, Latin America and Africa, along with a detailed comparison of
        regional and national collaborative development platforms, mailing
        lists, projects and communities. It turns out that FLOSS developers
        are very similar wherever in the world they live.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Rishab Aiyer Ghosh first developed and sold
        free software in 1994. He switched from writing in C and assembly to
        English, and has been writing about the economics of free software
        and collaborative production since 1994. He is Founding International
        and Managing Editor of First Monday, the most widely read
        peer-reviewed on-line journal of the Internet, and Senior Researcher
        and Head of the Collaborative Creativity Group at MERIT, at the
        United Nations University in Maastricht, the Netherlands. In 1997, he
        co-authored tools to measure contributions by free software
        developers by analysing source code, pioneering now widely used
        research techniques. In 2000 he coordinated the European Union
        -funded FLOSS project, the most comprehensive early study of
        free/libre/open source users and developers. He is involved in
        government policy initiatives on free software and open standards,
        and conducts research funded by the European Union and the US
        National Science Foundation. In January 2007, the European Commission
        published a major study led by him on the impact of open source on
        the economy, competitiveness and innovation. Since 2005 Rishab has
        been board member of the Open Source Initiative.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1422">
      <div class="header">
        <p class="title">Writer 3.0 - What's new, what's going on</p>

        <p class="by">Wittmann, Oliver-Rainer (developer / Sun Microsystems
        GmbH)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> The presentation will give an overview about
        the made changes and enhancements in Writer for OpenOffice.org 3.0.
        Highlights are: - Multiple Page View - Cross-references to the
        headings and numbered paragraphs - New list level attributes - Better
        user interface and better support for notes by M. Odendahl -
        Microsoft Word 2007 file format import - Enhancement of indexes by G.
        Castagno - Text grid enhancement for CJK by Novell - Grammar checking
        framework Also included in the presentation are changes and
        enhancements, which are currently in progress. Highlights are: -
        Support for meta data according ODF 1.2 - Support for multiple
        different views for a certain text document - Introduction of outline
        level attribute The presentation will demonstrate the community work
        of the Sun Writer team. The presentation will also show the influence
        of ODF on the feature/enhancement work in OOo.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> - Software engineer with Diploma in computer
        science, University of Hamburg, 1999 - Since July 2002 working at OOo
        Writer as a Sun employee</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1397">
      <div class="header">
        <p class="title">Making the New Notes - Community, Cooperation,
        Concepts</p>

        <p class="by">Max Odendahl, Christoph Noack, Christian Jansen (OOo
        Developer, OOo UX Co-Lead, UX Engineer / Christian: Sun Microsystems
        GmbH)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> The activity to improve the often requested
        Notes functionality in Writer was somehow special: including major
        community involvement. The software development was done by a student
        initially sponsored in the Google Summer of Code and the User
        Experience (UX) was mainly represented by a volunteer; both being
        supported by Sun employees. *** This case study wants to shed some
        light on the development of the Notes and how to overcome the main
        challenge - pure remote collaboration. With tools like wiki or mail
        we structured ideas, collected requirements, developed design
        proposals and discussed issues. *** So, how far did we get? What have
        we learned during our cooperation? What worked well what not? We want
        to share with the community the experience we gathered. And we want
        to show what interesting ideas are still there to further improve the
        Notes after OpenOffice.org 3.0 being released.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Besides studying computer engineering in
        Germany, Max Odendahl started working for OOo development in Summer
        07 with GSoC and has stayed ever since and developed the new Notes2.
        *** After supporting OOo for years, Christoph Noack joined the Notes2
        activity being the UX representative. The rest of his spare time is
        spent as Co-Lead of the UX project. His normal job is also in the
        field of Human Machine Interaction, but this case he works for the
        automotive industry. *** Christian Jansen is an User Experience
        Engineer at Sun Microsystems. During the last 9 years, he played a
        major role in designing the user interfaces of OpenOffice.org,
        Mozilla Lightning and Web Based Applications. He holds a degree in
        Communication Design from the 'Hamburger Akademie für
        Kommunikationsdesign und Art Direction'.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1470">
      <div class="header">
        <p class="title">Layout: towards a pretty UI</p>

        <p class="by">Michael Meeks (lowly developer / Novell, Inc.)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> OpenOffice has a vast amount of user-interface
        code, all of it targeting the (increasingly) venerable though
        dependable VCL toolkit. Come and see how the new layout work, built
        on the existing UNO toolkit/ makes moving away from VCL for much of
        the application possible. See sparkling demos, find out how to help
        out migrating old dialogues; catch up with the progress so far, and
        find out how to create new and beautiful dialogues.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Michael is a Christian and enthusiastic
        believer in Free software. He very much enjoys working for Novell
        where as a member of the Desktop research team he has worked on
        desktop infrastructure and applications, particularly OpenOffice.org,
        CORBA, Bonobo, Nautilus and accessibility, amongst other interesting
        things. He now works as an Architect, trying to understand and nudge
        the direction of our Linux Desktop work. Prior to this he worked for
        Quantel gaining expertise in real time AV editing and playback
        achieved with high performance focused hardware / software
        solutions.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1464">
      <div class="header">
        <p class="title">Red Office 4.5 UI Implementation</p>

        <p class="by">Sun, Chao (framework enginneer / Beijing Redflag 2000
        Software Co., Ltd.)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> To develop a brand new highly optimized
        framework for the current OpenOffice system. Giving developers the
        maximum flexibility and the comprehensibility. One Layout Manager for
        all user interface elements based on UNO, Extensions and Scripting
        code extending and manipulating the user interface.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Master Degree of Industrial Computing Systems,
        Nottingham Trent University, Nottingham, UK Work Experience:
        05/2007-Now</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1484">
      <div class="header">
        <p class="title">Properties Sidebar, make editing much easier</p>

        <p class="by">Yang, Jinfang (Staff software engineering / IBM)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> This topic will give a description about
        Symphony Properties Sidebar, from what it is like and how it is
        implemented. In normal ways, when a user wants to do some properties
        changes to an object, he/she need select the object, find the menu
        and open the related dialogue, go through the attributes, change and
        apply. Why not collect users' most common used operations and make
        them docked at the first sight so that he/she can operate the at the
        most convenience? That's what Symphony Properties Sidebar aims at. It
        covers text properties, paragraph properties, shape properties, cell
        properties, graphic properties and page properties... For those items
        not so common used, sidebar provides "All Properties" button at the
        end of the panel. Click the button will bring up the whole set model
        dialogue Through the Properties Sidebar, users can change the
        object's properties by minimized clicks. It gets very positive
        feedback and will have much more rich content in the future. In the
        topic, there will be also some implementation details. It combines
        docking window and infobox's technology. Also it enhanced existing
        docking window, from visual, layout, to window management styles. The
        structure of the sidebar panel and the message delivering mechanism
        between documents and sidebar will be presented.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Working on IBM Symphony since 2004. Has has
        been technical lead of Symphony overall UI and user experience. Now,
        work as Presentation application owner.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1467">
      <div class="header">
        <p class="title">Learn more about office users - Feature usage study
        by document element statistics</p>

        <p class="by">Su Ying, Rui ( / IBM)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> Office Application, with document, spreadsheet,
        and presentation support, always provides thousands of features. This
        brings great challenge to office product development focus and office
        suite UX design. Therefore Office application manufacturers haves
        program, like MS CEIP to investigate on office feature., while
        However those programs need great quite much cost and not all the
        users are willing to participate. This presentation will give another
        approach on office feature survey from information stored office
        documents themselves. Comparing to other office feature survey, it's
        a cheaper and but also effective way. This approach intends to takes
        large quantity of office documents from internet as sample file sets,
        detaches document element usage information from them, and analyses
        those information to get document element statistic for office
        feature usage frequency, and the correlation between feature and
        documents sets. we have got some valuable conclusion to show in the
        presentation. In this presentation, a plug-in live demo based on IBM
        Lotus Symphony is to be shown on how the method works. In the last
        part of the presentation, future work on this methods will be
        discussed.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Su Ying is working in IBM Lotus Symphony team
        and in charge of Symphony spreadsheet development for over three
        years.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1447">
      <div class="header">
        <p class="title">Numbers, Numbers, Numbers, or how data helps to
        improve the OOo User Interface</p>

        <p class="by">Jansen Christian, Bartel Andreas (User Experience
        Engineer / Sun Microsystems, Inc.)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> In order to improve the usefulness and
        usability of OpenOffice.org, the User Experience Project started to
        put more efforts into quantitative usability engineering. So far, two
        project have been initiated with the aim to collect and understand
        usage patterns and to characterize usability bottlenecks encountered
        by users of OpenOffice.org. Usage tracking and the deployment of a
        standardized usability evaluation questionnaire are well suited
        instruments to understand how OpenOffice.org is actually used and
        what kind of usability problems occur during its usage. This
        presentation will introduce both methods in detail and discuss their
        value for the development of OpenOffice.org. A Q&amp;A session will
        round up the talk.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Christian Jansen is an User Experience
        Engineer at Sun Microsystems. During the last 9 years, he played a
        major role in designing the user interfaces of OpenOffice.org,
        Mozilla Lightning and Web Based Applications. He holds a degree in
        Communication Design from the 'Hamburger Akademie für
        Kommunikationsdesign und Art Direction'.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1427">
      <div class="header">
        <p class="title">Accessibility in Symphony</p>

        <p class="by">Xing Li (Staff Software Engineer / IBM)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> IBM Lotus Symphony is a suite of
        open-standards-based office productivity tools based on Open Office.
        IAccessible2 is a new accessibility API which complements Microsoft's
        earlier work on MSAA and fills critical accessibility API gaps in the
        MSAA offering. IAccessible2 was created out of necessity to produce a
        usable and accessible ODF based office suite. It is an engineered
        accessibility interface and helps provide an Assistive Technology
        (AT) access to many significantly advanced functions in rich document
        applications. The additional functionality includes support for rich
        text, tables, spreadsheets, Web 2.0 applications, and other large
        mainstream applications. IAccessible2 is firstly implemented in IBM
        Lotus Symphony and has already got support from the leading AT
        vendors in their screen reader software. The presentation includes:
        Symphony brief introduction and major accessibility improvements
        IAccessible2 API introduction IAccessible2 architecture
        implementation in Symphony Future consideration on IA2 and
        OpenOffice.org This session will also include a demo to illustrate
        the support from Jaws on IA2 implementation in Symphony. The demo
        will be focused on those IA2 highlighted supports compared with MS
        Office, such as numbering &amp; bullet, document attributes, table
        support, dialogue control relations, accessible enhancements in ODF
        1.1, etc.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Symphony chief programmer of IBM China
        development Lab</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1468">
      <div class="header">
        <p class="title">Improving and Maintaining Performance of OO in
        Long-term Development</p>

        <p class="by">Li Heng (Project Lead Of Performance Project / Beijing
        RedFlag Chinese 2000 Software Co.,LTD.)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> So far, the location of OO hotspots is
        dynamic,but the usual focus, "String", "Lock", etc. It is very
        different in different release versions. That means if all
        improvements of performance may cancel out each other when we use
        different methods or follow different directions. OO is a huge
        software system, so we can not make it faster and faster only by
        tuning. Somewhere, we need refactor the code in a large scope. For
        refactoring and improvement follow the same direction or method we
        need measure the performance of OO in the same conditions, and
        comparing with same benchmark. This session will show some tools
        (valgrind, virtualmachine ,etc.) that can measure performance of OO
        in the same conditions, and list some benchmark can compare and find
        some problems.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Biography: 1.Director of System Research &amp;
        Development Dept. and Interoperability Technology Dept. of RedFlag
        Chinese 2000. 2.Senior Software Architect for RedFlag Chinese 2000.
        3.Worked on RedOffice/RedOffice SDK for RedFlag Chinese 2000 for 7
        years.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1404">
      <div class="header">
        <p class="title">OOo &amp; ODF Accessibility today</p>

        <p class="by">Timmermann, Malte (Technical Architect OpenOffice.org,
        Member OOo Security Team / Sun Microsystems / OOo Architecture
        Designs and Implementations in multiple projects)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> Accessibility is a very important thing, and
        the demand becomes higher and higher. We started our Accessibility
        efforts with OOo 1.1 by supporting the Java Accessibility API. Many
        things had changed since then. We now have native support for GNOME
        Accessibility, and also make good progress on Mac Accessibility with
        our native Mac port. The next step is to improve Windows
        Accessibility by replacing the old Java based accessibility with the
        new IAccessible2 API. Accessibility is also important for document
        formats, so we made many improvements in ODF 1.1, and are just
        evaluating the ODF 1.2 specification for Accessibility issues. The
        presentation will give you a good overview about all these
        Accessibility related technologies, and what programmers and document
        authors have to take care for.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Working on StarOffice and OpenOffice.org since
        1991 in many different areas. Initiator and member of the OOo
        Security Team, member of the OASIS ODF TC. Details see
        http://blogs.sun.com/malte/entry/who_is_malte</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1429">
      <div class="header">
        <p class="title">IBM Lotus Symphony Technical Overview</p>

        <p class="by">Ma Yong Lin (Advisory Software Engineer/ESC Member
        invited on regular basis / IBM)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> Based on OpenOffice.org technology and
        leverages the IBM Lotus Expeditor, IBM Lotus Symphony offers more
        than a simple office application suite. Symphony also provides very
        rich APIs for customers to build composite applications which can
        integrate Symphony. This presentation gives an overview of the
        architecture of Symphony and also show various enhancement made based
        on customer requirements in such areas as office suite and reusable
        components. This presentation also serve as an introduction to some
        of the other topics that will be presented in this conference.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> I Worked on Symphony project since 2002. Ever
        lead the development work of many areas, like Infobox, Provisioning,
        Stability, Performance and Symphony on Mac. Currently, I am an
        achitect of Symphony.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1365">
      <div class="header">
        <p class="title">Icon-Language, from vision to icon-typing</p>

        <p class="by">Gros, Jochen (Emeritus Prof. Hochschule für Gestaltung
        Offenbach / )</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> Since early days of Mac and PC, there are
        predictions of "a new language of icons, that may succeed, where
        Esperanto has failed". Meanwhile I developed the visual grammar and
        around 1000 icon-glyphics (pixel and spline based). NOW I'd like to
        show icon-typing in OpenOffice via "Autocorrect": 1. Type "love+",
        "hug+", or "party+" and get little pictures (like emoticons). 2. Type
        "art", "architecture" or "office" and get the words together with
        pictures (as illustrations). 3. Type a short message in any spoken
        language and get the same picture language. FUTURE options and
        problems. 1. OpenOffice allows animated GIFs per "Autocorrect", but
        the icon-vocabularies are not easy to transfer as a package. 2.
        Icon-Typing is already programmed inside a font (like Arial), but
        therefore OpenOffice should enable OpenType features, like Apple
        Pages. 3. Lots of different projects could make use of icon-language
        in a text-processing program, starting with language-learning for
        kids.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Born 1944. From 1974-2004 Professor for
        Design-Theory at the Hochschule für Gestaltung (University of Fine
        Arts) Offenbach, Germany. Fascinated by Egypt hieroglyphics and
        Chinese Characters and designing icon-language since more than a
        decade.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1481">
      <div class="header">
        <p class="title">Running OpenOffice.org on Mobile Internet
        Devices</p>

        <p class="by">Cheng, Xiuzhi (Director of Open Source Technology
        Department / Beijing Redflag 2000 Software Co., Ltd)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> MID (Mobile Internet Devices) are becoming
        increasingly popular. This case study shows how to redesign OOo to
        meet the special requirements of an MID such as UI and operating
        procedures etc. Additionally, an MID-based OOo implement ion will be
        introduced and an outlook on further work will be given.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Born in 1973 from RedFlag2000 Beijing,China.
        Works on OpenOffice.org and RedOffice for seven years. Now is
        responsible for the RedFlag2000 OpenSource team. Major on Software
        Architecture,Document Format.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1456">
      <div class="header">
        <p class="title">Enabling ODF for Social Collaboration with Composite
        Application and Mashups</p>

        <p class="by">Kumar, Santosh (Advisory Software Engineer / IBM)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> This paper will present how ODF documents can
        be used in Composite Application and Mashups to create social
        collaborative applications. It will demonstrate OpenOffice derivative
        Lotus Symphony spreadsheet as composite application to dynamically
        generate spreadsheets from Notes/domino database in Lotus Notes 8.
        The composite application integrated ?on glass? enables ODF
        spreadsheets to have tabular data, associate styles, create graphical
        reports charts from Domino database in a single integrated view. The
        session will show usage of UNO, API?s to add features like drilling
        down to specific document, presence awareness and ability to chat
        enabling collaborative functionality in ODF documents. The second
        part of presentation will outline use case scenario of enabling ODF
        spreadsheets as Data Mashup to bring contextually related data from
        feeds and services. These feeds and services in an aggregated way to
        deliver new understanding of data in web enabled online spreadsheets.
        It will showcase ODFDOM API layer extensibility to create primitive
        Dojo based online Spreadsheet which then can be integrated with
        social services like profile, location and visualization service. It
        will demonstrate publishing RSS/Atom feeds from ODF spreadsheets to
        be consumed in Mashup tools enabling creation of mashups with ODF
        data. Reference:
        http://www.ibm.com/developerworks/blogs/page/CompApps?entry=symphony_spreadsheet_editor_to_display</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Santosh Kumar is currently Advisory Software
        Engineer at IBM India Software Labs. In his current job role, he is
        lead developer in Domino Designer in Eclipse. He has been part of
        team in IBM shipping eclipse based products such as Lotus Component
        Designer and Data Access tool for IBM Workplace. He has been
        developing contributed POC?s involving ODF and spreading the
        knowledge on ODF and its programmability features. Santosh holds a
        bachelor degree in Electronics and Communication Engineering from
        COEP, Pune, India.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1477">
      <div class="header">
        <p class="title">The New Drawing Core - State-of-the-Art Vector
        Graphic With OOo</p>

        <p class="by">Dürr, Herbert and Behrens, Thorsten ( / )</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> Started more than two years ago, the reworked
        drawing core is now ready and all of OOo's applications have been
        ported to make use of it. This talk will showcase the improvements
        directly visible to the user, as well as highlight the opportunities
        the new architecture will bring the developers - followed by a
        walk-through of the most important code components.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Herbert is a Unix hacker of old, working on
        OOo's graphics cores from the day it was open-sourced. He knows
        everything about fonts. Thorsten has spent his hacking time on
        building a new graphical output layer, and also implemented the
        post-2.0 Impress slideshow.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1419">
      <div class="header">
        <p class="title">Digital Signatures  A Global Challenge</p>

        <p class="by">Joachim Lingner (Software Engineer / Sun Microsystems
        GmbH)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> The field of digital signatures is still in
        development. Algorithms change, because of the constant need for
        stronger encryption, and new concepts have been developed, for
        example for long-term archiving. Accordingly, legal regulations have
        developed or changed as well. Taking this into account, one needs to
        investigate if OOo's signature implementation still fits the
        requirements. Because of the diversity of regulations in different
        countries it would be useful to have pluggable signature algorithms
        in form of extensions. To achieve a seamless and homogeneous
        integration in OOo, one needs defined ways of getting access to
        dialogues, the status bar, menu items, selecting the algorithms, etc.
        The presentation will propose ideas for an appropriate framework.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Joachim Lingner is a software developer and
        has been working for Sun Microsystems since 1999. His work focuses on
        the area of programmability, which includes language bindings and
        extension infrastructure.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1384">
      <div class="header">
        <p class="title">Get OOXML Done Within One Week</p>

        <p class="by">wang Alex (chairman and CEO of Sursen, chair of OASIS
        UOML-X TC, / )</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> After OOXML becomes ISO standard, more and more
        OpenOffice users will have the requirement to edit the OOXML document
        they received from others. How long should they wait for this
        feature? 5 years? 2 years? No, only one week! I am not mad, that's
        true! When using OpenOffice to edit OOXML document, preserve the
        whole layout of OOXML document is more than enough for us to settle
        it without touching the format of OOXML. Furthermore, UOML, the
        document layout interoperation standard, together with its related
        tools, has been ready to provide the required functions. therefore,
        we can easily handle OOXML in a week.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Donglin Wang (Alex Wang), Professor, 37 years
        old, chairman and CEO of Sursen, chair of OASIS UOML-X TC, chair of
        China Docbase standard committee, and he is also awarded the top ten
        excellent entrepreneur, the top ten leading persons in China¡¯s
        software industry. Graduated from computer science of Nankai
        University when he was 19 years old, he began to engage in the
        research of leading IT technology. In 1995, Alex developed SEP
        technology independently, only two years later than PDF; meanwhile,
        Suren Company is founded to push SEP to market. Built from nothing at
        the beginning, Sursen then boost its success of leading technology in
        e-Gov and digital library business, extending it into more market
        widely. As Chief Architect of UOML, Alex knows how to share knowledge
        out of the limitation of different kinds of format.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1475">
      <div class="header">
        <p class="title">The new ODF 1.2 Metadata Framework and its Support
        in OpenOffice.org 3</p>

        <p class="by">Schubert, Svante (Software Engineer / Sun Microsystems
        Inc.)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> * The OASIS OpenDocument Format 1.2 will
        introduce a new RDF based metadata framework, which leverages all the
        work done for the Semantic Web onto ODF applications and documents.
        This presentation will give an easy overview about the importance and
        elegance of the new metadata framework, the OOo 3 API support and the
        incredible possibilities of future projects (OOo extensions) using on
        this functionality. For more information please take a look at the
        GullFOSS blog for further details. [1]
        http://blogs.sun.com/GullFOSS/entry/new_extensible_metadata_support_with</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Svante Schubert works for Sun Microsystems and
        has been full-time developer for OpenOffice.org since its foundation.
        On OpenOffice.org he is co-lead of the 'ODF Toolkit projekt',
        responsible for the new ODFDOM library and co-lead of the 'XML
        project', with emphasis on XML based filters and the new metadata
        model of the OpenDocument Format 1.2.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1472">
      <div class="header">
        <p class="title">ODFDOM - the new opensourced multi-tiered API for
        the ISO OpenDocument Format</p>

        <p class="by">Svante Schubert (Software Engineer / Sun Microsystems
        Inc.)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> ODFDOM is the name of the new free OpenDocument
        framework sponsored by Sun Microsystems Inc. The Java 5 reference
        implementation of ODFDOM is available under LGPL3 since May 2008. It
        is the successor of AODL and Odf4j, designed together with their
        architects to provide the ODF developer community an easy lightwork
        programming API, meant to be portable to any object-oriented
        language. One of the greatest achievement of ODFDOM is that
        information from the OpenDocument RelaxNG schema is directly
        generated into the source code, bringing robustness to the ODF
        developer without any schema knowledge required. The upcoming
        presentation will give an overview over the layered concept and
        design ideas, and in addition deliver insights about the roadmap and
        upcoming features (e.g. RDF support). Please visit the ODFDOM wiki
        (i.e. http://wiki.services.openoffice.org/wiki/ODFDOM) for further
        details.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Svante Schubert works for Sun Microsystems and
        has been full-time developer for OpenOffice.org since its foundation.
        On OpenOffice.org he is co-lead of the 'ODF Toolkit projekt',
        responsible for the new ODFDOM library and co-lead of the 'XML
        project', with emphasis on XML based filters and the new metadata
        model of the OpenDocument Format 1.2.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1490">
      <div class="header">
        <p class="title">ODF Accessibility: Perspectives on Past &amp;
        Future</p>

        <p class="by">Donald Harbison (Program Director / IBM Software)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> Members of the OASIS ODF TC, OASIS ODF Adoption
        TC and IBM Lotus Symphony development team, will host a discussion of
        ODF accessibility from several perspectives, including the view from
        a government ICT leaders seeking accessibility solutions for document
        authoring software; an historical perspective reviewing the key
        events that led to the creation of the Accessibility Subcommittee at
        OASIS ODF TC; and the major milestones achieved. The panellists will
        discuss how the accessibility requirements were identified and
        solved, with a focus on demonstrating new APIs and support for ATVs
        (Accessibility Technology Vendors). Dr. Asakawa will discuss and
        demonstrate new tools that aid in checking and fixing documents,
        rendering them more accessible for persons with disabilities.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Donald Harbison directs IBM's activities in
        support of OpenDocument Format. He is also the current Chair of the
        OASIS ODF Adoption TC.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1482">
      <div class="header">
        <p class="title">Introduction of SMIL and Implementation in IBM Lotus
        Symphony</p>

        <p class="by">Guo, Yan Peng ( / IBM/Lotus Symphony)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> SMIL(Synchronized Multi-media Integration
        Language) is a standard language that is recommended by OASIS
        (Organization for the Advancement of Structured Information
        Standards) and also it is integrated into ODF. SMIL defines an
        XML-based language that allows authors to write interactive
        multimedia presentations. Using SMIL, an author can describe the
        temporal behaviour of a multimedia presentation with plentiful of
        animations, associate hyperlinks with media objects and describe the
        layout of the presentation on a screen. ODF uses SMIL to present the
        animation elements for slide show of presentation. This presentation
        will focus on SMIL animation, introduce the key elements and
        attributes of SMIL, what they represent, how they work, and the 5
        layer structure that recommended by OASIS for defining animation
        sequence. This presentation will also describe how to implement an
        SMIL engine by using Lotus Symphony as one example.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em></p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1426">
      <div class="header">
        <p class="title">Transforming an OWL Ontology to an OpenOffice
        Document Template</p>

        <p class="by">Toussi, Massoud (Student / Lim&amp;Bio, Université
        Paris 13)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> Writing a scientific paper is not a trivial
        task. Word processors help facilitating this task in many ways,
        especially in formatting the text layout and spell checking. However,
        most of word processor lack specific tools for helping authors
        organize their ideas, i.e. handle semantically their articles.
        Although in some specific domains, for exampling screen play writing,
        applications other than word processor have been developed to do
        this, unfortunately in academic writing there is still work be be
        done. Some minor tools, such as those helping authors with the
        management of bibliographic references were lacking in word
        processors even until recently, and authors had purchase separately.
        One of the most interesting aspects of OpenOffice suite for academics
        is of course its powerful bibliography management database. But
        still, it is difficult to say we can handle with ease our ideas in
        this suite. Another capability of OpenOffice is its extended use of
        XML files in Open Document Format (ODF). This is an interesting
        aspect which allows the management of the content of a document
        independently from its layout and style. The author has developed an
        ontology of a scientific article OWL language. Based on this
        ontology, named Paper Element Nodes (PEN), a scientific paper has a
        type, a style, a content, a version and a cover letter. A scientific
        paper type can be any of editorial, research paper, review article,
        case report, analysis article, methodology article, and so on. Its
        style can include layout styles, references styles, language styles,
        and illustration styles. Its the content, which conveys the core
        meaning of the article, can also be divided into several parts which
        are called nodes in our model. The main nodes of the content of a
        scientific paper include: title page, abstract, introduction,
        methods, results, discussion, tables, illustrations, legends for
        illustrations, etc. Each of these nodes are further divided into sub
        nodes. For example the title page includes the title of the article,
        author names and affiliations, author roles, acknowledgements,
        disclaimers, number of tables and illustrations, word count and the
        address of corresponding and reprints authors. All these nodes and
        their subdivisions are coded in OWL DL language in the original PEN
        ontology. During this session, the author demonstrates how these
        concepts can be directly implemented in an OpenOffice template. The
        final result will be a template document which is ready to be used
        for writing a scientific paper. This makes possible to write a
        scientific article with much less effort. As a medical informatics
        graduate, the author will demonstrate how this newly created template
        can be used to facilitate the writing of a scientific paper about a
        clinical trial study. So far, the author shows that the ODF has the
        capability of presenting a semantic structure of a scientific
        article. This is beneficial for academic writers by helping them
        prepare well-structured manuscripts. Another more important benefit
        of using this kind of ontology based template is the fact that search
        engines of tomorrow can be able to parse scientific articles in a
        semantic way. For example they will be able to search all articles
        using OpenOffice and ODF in their methods. A progress which will make
        us closer to Web 3.0 concept.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> PhD Candidate in Medical Informatics MSc in
        Medical Informatics MD</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1476">
      <div class="header">
        <p class="title">Improving ODF applications by sharing ODF tests</p>

        <p class="by">Schubert, Svante (Software Engineer / Sun Microsystems
        Inc.)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> * Although the OpenDocument (ODF) is being
        shared as file format by many applications, no common ODF test suite
        is available to test their ODF compliance. Even worse it seems not a
        single ODF test is being shared. This presentation should give
        insights what ODF test scenarios are shareable among ODF
        applications, which help to avoid reinventing the wheel, saving time
        and money and raising the overall quality level. Basics of ODF
        testing are shown, like when two ODF documents are formally equal
        according to the ODF spec. Furthermore the demand for basic tools is
        stated, where most tests will depend on. Finally providing a view
        what an ODF test suite shareable among ODF applications might look
        like.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Svante Schubert works for Sun Microsystems and
        has been full-time developer for OpenOffice.org since its foundation.
        On OpenOffice.org he is co-lead of the 'ODF Toolkit projekt',
        responsible for the new ODFDOM library and co-lead of the 'XML
        project', with emphasis on XML based filters and the new metadata
        model of the OpenDocument Format 1.2.</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1408">
      <div class="header">
        <p class="title">OpenOffice.org Extensions in Java with NetBeans in
        practise</p>

        <p class="by">Juergen Schmidt (Main Developer, API project lead,
        Extensions co-lead / Sun Microsystems, Inc.)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> The session will be an extended workshop/lab
        session where the attendees will run mainly by their own through some
        exercises. Initially the presenter will give an overview of the base
        concepts and exercises and later on the attendees will do it on their
        own. The presenter will show/demo the final results at the end of
        each exercise (predefined time slots). At the end of each exercise
        there will be a short challenge where the attendees have to apply
        what they have learned. The three winner of each challenge will get a
        price. The idea is to either have a lab with machines where all the
        software is preconfigured or to work with an OpenSolaris Live DVD/CD
        where all software is installed and preconfigured (TBD). The
        workshop/lab documentation will contain all necessary info to run
        through the exercises and will provide useful additional information
        to other resources. The complete workshop/lab material will be
        provide on a CD including full working solutions for all exercises.
        The CD can be used later on on other systems as well.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Juergen Schmidt is working for Sun
        Microsystems in the StarOffice group for more then 11 years. He was
        deeply involved in the development of the UNO component model which
        is the foundation for the OpenOffice.org/StarOffice API. The
        OpenOffice.org community is one aspect of his daily work. He is
        involved in the OpenOffice.org project since the beginning, he is the
        project lead of the OpenOffice.org API project and the co-lead of the
        Extensions. His main goal is to spread the knowledge around the
        programmability features of OpenOffice.org around the world and to
        show that it is more than only an office productivity suite. Juergen
        Schmidt speaks frequently about the programmability features of
        OpenOffice.org. Some examples are the OpenOffice conferences, JAX
        2003 (Germany), OOP 2004 in Munich (Germany) and JavaPolis 2006 in
        Antwerpen (Belgium), Jazoon 2007 in Zurich (Switzerland), JavaOne
        2003, 2007 and 2008 in San Francisco (USA), FOSS.in 2007 in Bangalore
        (India), FOSDEM 2008 in Brussels (Belgium), Sun Tech Days in
        Hyderabad 2008 (India), Community One 2008 in San Francisco (USA) and
        LinuxTag 2008 in Berlin (Germany).</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1442">
      <div class="header">
        <p class="title">Building OpenOffice.org: tips and tricks, best
        practices</p>

        <p class="by">Glazunov Vladimir (Release Engineer / Sun
        microsystems)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> Building the OpenOffice is quite complicated
        process. There are some things that remain overlooked by developers
        and some practices that can simplify the developer life. In this
        presentation the overview of the OOo build system will be given
        (covering tools, configuration files build.lst etc.), some important
        features will be highlighted (such as distributed builds, build
        process monitoring et), and best practices will be described.</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Born in Russia, 1971 Graduated from
        St.Petersburg State university, dept. applied mathematics since 2000
        working by Sun microsystems as a Release Engineer</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div>

    <div class="abstract" id="a1493">
      <div class="header">
        <p class="title">ODFDOM Workshop - using the new opensourced
        multi-tiered API for ODF</p>

        <p class="by">Svante Schubert, Lars Behrmann, Frank Meies (Software
        Engineer / Sun Microsystems Inc.)</p>
      </div>

      <div class="content">
        <p><em>Abstract:</em> ODFDOM is the name of the new free OpenDocument
        Java 5 framework sponsored by Sun Microsystems Inc. This workshop
        will provide interesting exercises applicable to all ODFDOM layers.
        The upcoming workshop will give the opportunity to get in touch with
        this exiting new API and to discuss any idea/problem directly with
        the architects. Aside of the exercises, discussion about further
        future goals of ODFDOM and its language independence are topic of
        this workshop. Please visit the ODFDOM wiki for further details about
        ODFDOM. [1] http://wiki.services.openoffice.org/wiki/ODFDOM</p>
      </div>

      <div class="bio">
        <p><em>Biography:</em> Svante Schubert works for Sun Microsystems and
        has been full-time developer for OpenOffice.org since its foundation.
        On OpenOffice.org he is co-lead of the 'ODF Toolkit projekt',
        responsible for the new ODFDOM library and co-lead of the 'XML
        project', with emphasis on XML based filters and the new metadata
        model of the OpenDocument Format 1.2. Lars Behrmann works for Sun
        Microsystems since 2007. He's a member of the OpenOffice.org XML Team
        and on OpenOffice.org he's co-lead of the ODF Toolkit project where
        he's responsible for AODL, which is the .NET module of the Toolkit.
        Frank Meies graduated in Mathematics at Munster, Germany. Has been
        working on StarOffice/OpenOffice.org Writer since 2001, Co-lead OOo
        Writer since 2007</p>
      </div>

      <p><a href="friday.html">Back</a></p>
    </div><!-- End of section created by OOoCon_abstracts.php -->
  </div>
</body>
</html>
