Workshop: Introduction to LibreOffice Development

Preface

This is the program for the 3 day LibOCon 2023 workshop in Bucharest, focusing on LibreOffice development. Targeted audience are the undergraduate computer and IT students or anyone who knows programming well, and now want to become familiar with a large scale real world software project.

The below program is based on the experiences from the previous hackfests and workshops dedicated to the LibreOffice development in the universities across the world.

These are the sessions which will be held in the 3-day program. Each day is presented in two parts, morning from 9-13, and afternoon from 14-18. 

Day One

No programming knowledge or specific tool is required for sessions 1, 2 and 3. For these parts, basic computer knowledge and skills would be sufficient. Participants should be able to install LibreOffice (portable versions can also be used), create accounts, work with LibreOffice, and report/triage bugs. Basic information about IRC/Wiki/mailing lists will be given during the sessions.

For sessions 4 and 5 (Git and Gerrit), the required knowledge is more. Having worked with a programming language is needed.

1. Office software, and the open source/free software development model (1 hour)

Presenter: Hossein Nourikhah

This is the introductory session for the students to understand the development model of open source/free software, and its role in shaping the digital life of the people across the world. After that, the importance of office software and in case, LibreOffice is discussed. Also, a brief history of LibreOffice is also presented.

List of topics:
+ Free / open source software (FOSS) development model
+ Ideas and the history of FOSS
+ Importance and impact of FOSS throughout the world
+ Different FOSS Licenses
+ Knowing LibreOffice
+ Installing and working with the LibreOffice software

2. Effective communication in open source/free software projects (1 hour)

Presenter: Hossein Nourikhah

As there are multiple communication channels for the open source/free software projects, and specifically LibreOffice, we will discuss them in this session. In this session, participants will get connected to the LibreOffice community.

List of topics:
+ Open source /free software communication channels:
+ TDF websites and single sign on account
+ IRC channel and Matrix groups
+ Mailing lists
+ TDF Wiki

3. Bug reporting and triaging (2 hours)

Presenter: Stéphane Guillou

LibreOffice uses Bugzilla to track the software bugs. In this session, various things around bug reporting and triaging will be discussed. Students will have the time to have experience of reporting and triaging bugs in Bugzilla.

List of topics:
+ Bug reporting and triaging
+ Importance of bug tracking
+ Bug reporting
+ Bug triaging
+ Hands on experience with Bugzilla
   + Setting up a Bugzilla account
   + Reporting bugs
   + Triaging bugs

4. Git basics (2 hours)

Presenter: Stéphane Guillou

In this session, students will learn basic git commands. The knowledge will be beneficial for the next sessions of the workshop, but it can be beneficial for other software projects as well, as version control systems are in use in many software projects today.

List of topics:
+ Git basics
   + Understanding the version control systems
   + Setting up git
   + Staging environment
   + Doing a commit
   + Understanding the diff
   + Modifying the commit
   + Branches
   + Merge and re-base

5. Gerrit for code reviews (2 hours)

Presenter: Xisco Faulí

In this session, basics of code review is discussed. Students will be able to work with the LibreOffice Gerrit. In this session, the importance of clean code, and the role and the process of code review will be discussed.

This session is also useful for any other software project, as code reviews are very common today to ensure the quality of the code.

List of topics:
+ Gerrit for code reviews
  + What is Gerrit?
  + Hands on experience with Gerrit
    + Setting up
    + Committing your changes
    + Pushing your changes
    + Add a Reviewer
    + Modify your changes
    + Split your changes
    + Edit your changes online

Day Two

We expect that the participants have completed at least a Java/Python programming course before. LibreOffice BASIC is something that should be easy to understand for those people, and is not counted as a prerequisite.

6. Software localization (l10n) and internationalization (i18n) (1 hour)

Presenter: Hossein Nourikhah

In this session, the role of software localization (l10n) and internationalization (i18n) is discussed. As an example, the localization process of LibreOffice through Weblate is shown, and students will have the opportunity to work with it, and change the localization parameters of the software.

List of topics:
+ Localization (l10n) and internationalization (i18n)
   + Role of l10n and examples
   + Role of i18n and examples
   + Process of localization
   + Hands on experience
      + Setting up a Weblate account
      + Translate strings through weblate
      + Modify the localization parameters

Usable resource for this session:
LibreOffice Localization Guide
https://wiki.documentfoundation.org/LibreOffice_Localization_Guide

7. LibreOffice automation via scripting (BASIC, Python) (3 hours)

Presenter: Rafael Lima / Alain Romedenne

In this session, one only needs a working installation of LibreOffice. Two different scripting language are suggested in this path: Basic and Python.

List of topics:
+ LibreOffice automation via scripting
   + Basic scripting in LibreOffice
   + Python scripting in LibreOffice
      + UNO API
      + ScriptForge

Usable resources for this session are:
+ LibreOffice BASIC programming guide
https://wiki.documentfoundation.org/Documentation/BASIC_Guide
+ LibreOffice help (ScriptForge parts)
https://help.libreoffice.org/latest/en-US/text/sbasic/shared/03/lib_ScriptForge.html

The focus in this session will be on running different examples, and writing various scripts that show the different aspects of LibreOffice and its automation capabilities. ScriptForge (Python) can be a good choice here, as it provides a modern API that can be easily used, but it should be noted that it is not as feature complete as the UNO API.

8. Building LibreOffice from source code (4 hours)

Presenter: Hossein Nourikhah

This session is a prerequisite of the next session on C++‌ development. For this session, preparations are needed to speed up the process as downloading and compiling can be time consuming. For example, having source code and requirements downloaded, or preparing virtual machines with the prerequisites and LibreOffice source code can speed up the build process.

List of topics:
+ Building LibreOffice from source code
   + Setting up the development environment
   + Getting the LibreOffice sources
   + Configuring LibreOffice with appropriate settings
   + Compiling LibreOffice

Usable resources for this path are:
Getting Involved in LibreOffice Development
https://wiki.documentfoundation.org/Development/GetInvolved 

For start, focus will be becoming familiar with LibreOffice project and compiling the examples and modifying them. Creating extension and working with examples from JLOP book will be more advanced parts of this session.

Day Three

This last part (except documentation) needs more programming experience, and specially C++. Participants who have had a C++ programming course before, and implemented some project in their courses should be able to understand the sessions.

9. LibreOffice Documentation (1 hour)

Presenter: Olivier Hallot

In this session, the documentation for software, and its role in software development is discussed.

List of topics:
+ Various types of documentation
   + references, tutorials, books, etc.
+ User documentation
+ Developer documentation
+ How to contribute 

10. LibreOffice SDK development (Java, Python) (2 hours)

Presenter: Hossein Nourikhah

In this session, one does not require building LibreOffice, but a working installation of LibreOffice binaries and SDK would be enough. Several languages can be used in LibreOffice SDK programming, from Python to Java and even C++. But, we would avoid C++ here, and refer the students with C++ knowledge to the last session.

List of topics:
+ SDK examples
   + Running SDK examples
      + Python
      + Java
   + Modifying SDK examples
+ Writing extensions
+ Working with JLOP examples

Usable resources for this path are:
+ Java LibreOffice programming (JLOP)
https://flywire.github.io/lo-p/
Python Guide
https://wiki.documentfoundation.org/Macros/Python_Guide

For the start, focus will be becoming familiar with LibreOffice project and compiling the examples and modifying them. Creating extension and working with examples from JLOP book will be more advanced parts of this session.

11. Introduction to problem solving techniques (30 minutes)

Presenter: Michael Meeks

In this session, it will be discussed how to get into the complex problems with problem solving techniques. These ideas will be useful when dealing with the large code base of LibreOffice that has evolved for many years.

12. Introduction to LibreOffice Core (30 minutes)

Presenter: László Németh

In this session, first it will be discussed how to get into the complex LibreOffice core code base. One should know problem solving techniques to be able to have a good start. Then, an overview of the code structure and classes will be given.

13. LibreOffice core design (C++) (2 hours)

Presenter: Heiko Tietze

This session requires understanding of programming and general computer knowledge, and the prerequisite is building LibreOffice from source code. The focus is on the how to improve LibreOffice through better design, and improving UI/UX.

List of topics:
+ Design and UI/UX
   + Understanding EasyHacks
   + Finding code pointers
   + Improving a user interface with Glade (requires setup in advance, simple on Linux)
   + Adding a new dialogue box

Usable resources for this path are:
+ LibreOffice design team blog
https://design.blog.documentfoundation.org/category/easyhack/
+ potential easy hacks
https://bugs.documentfoundation.org/buglist.cgi?keywords=easyHack%2C%20skillDesign%2C%20&keywords_type=allwords&list_id=1621809&query_format=advanced&resolution=---

Required knowledge for this session are:
1. Knowing C++ and object oriented programming
2. Familiarity with compiling C/C++ code
3. Basic understanding of UI/UX

14. LibreOffice core development (C++) (1 hour)

Presenter: Hossein Nourikhah

This session requires more programming knowledge, and the prerequisite is building LibreOffice from source code. In this way, one can gain a better understanding of how LibreOffice is compiled, built and delivered to the user in the form of installation packages.

List of topics:
+ Development and bug fix
   + More EasyHacks
      + Finding EasyHacks to work on
      + Different difficuly levels
   + C++ development
      + Bug fixing
         + Fixing regressions
         + Describing a bug fix, from the start to the end
      + Writing tests

Usable resources for this path are:
+ LibreOffice developers’ guide (Devguide)
https://wiki.documentfoundation.org/Documentation/DevGuide

Required knowledge for this session are:
1. Knowing C++ and object oriented programming
2. Familiarity with compiling C/C++ code
3. Familiarity with office file formats in general

15. Introduction into Writer development (1 hour)

Presenter: Miklos Vajna

In this session, an overview of LibreOffice Writer code and some of the important sub-modules and data structures will be provided. The idea is to give an overview so that people can understand basics, and then be able to read and process the existing references.