Welcome to The Document Foundation Planet

This is a feed aggregator that collects what LibreOffice and Document Foundation contributors are writing in their respective blogs.

To have your blog added to this aggregator, please mail the website@global.libreoffice.org mailinglist or file a ticket in Redmine.

20 March, 2019

  • Mail chew, admin; team all-hands over lunch midday. Built ESC agenda, poked financials again. Looked at SPADE with the babes: perhaps avoiding Art GCSE was indeed a smart move.


The Call for Location for LibreOffice Conference 2020 is now open.


Once a year, the LibreOffice Community gathers for a global community event: the LibreOffice Conference, or LibOCon. After a series of successful events – Paris, October 2011; Berlin, October 2012; Milan, September 2013; Bern, September 2014; Aarhus, September 2015; Brno, September 2016; Rome, October 2017; and Tirana, September 2018 – the venue for 2019 is Almeria, Spain.

To ease the organization, TDF Board of Directors has decided to open the call for location for 2020, to give the 2020 event organizers the opportunity of attending the conference in Almeria in September 2019. The LibreOffice Conference takes place between September and November, with a preference for September.

The deadline for sending in proposals is June 30, 2019.

After receiving the applications, we will evaluate if all pre-conditions have been respected and the overall quality of the proposal, and give all applicants a chance to answer questions and clarify details.

What applicants need to know

Organizing the LibreOffice Conference is a time-consuming task, where several team members are needed. Getting closer to the event, it tends to become a time consuming job, and each member of the team should be able to devote as much time as necessary. Also, dealing with finances and sponsors is a specific responsibility of conference organizers, who must be able to manage the budget according to the amount of sponsorships, and commit expenses based on the resulting amount of money. TDF will provide a list of sponsors of previous events.

In the past, we have received applications from several third parties, including casinos or professional event managers. Keep in mind that the LibreOffice Conference is a community event, by the community for the community. While we appreciate the interest of people with professional background, proposals not supported and driven by community members (not only TDF members) will not be considered as valid.

What must be covered by the proposal

IMPORTANT: Proposals missing the following information might be considered incomplete. While we try to give every applicant a chance to add or clarify missing information, there is no guarantee that the proposal will be accepted, since we have a rather short time frame. In order to enhance the chances for your proposal to be accepted, please answer as many of the following questions as possible.

The team

Only proposals with a fair amount of team members who can spend the appropriate amount of time and are part of the LibreOffice community will be considered as valid. Based on our experience, at least five team members are required, and those team members need to interact and communicate with the community. Please name all the team members, their role in the community, and their availability in term of time (especially during the month prior to the conference).

At least one team member should be working exclusively on sponsor relations, and on managing invitations for VISAs (as required for many countries). Both of these tasks require a fair amount of time

19 March, 2019

  • Mail chew, slideware, product management bits. Sync with Tracie, monthly mgmt call, debugging weird online corner-case.

18 March, 2019

  • Out for a run; mail chew, status report & review, customer call.

17 March, 2019

  • All Saints, slugged, read Marooned in Realtime to lego-playing babes; lots of applied resting.

16 March, 2019

  • Out to the Cambridge Science Festival for lots of fun with E. and M. At the Engineering Department for the 1st time - build & test Tsunami defences in the Dyson building - liquid nitrogen ice-cream from the material scientists, hover-craft building from styrofoam, cloud-chamber to visualize background radiation, thermal imaging cameras - and more.
  • Back to David's for some tea, cake & catch-up. Home for left-over pizza dinner with H. in front of a movie.

15 March, 2019

  • Mail; sync with Kendy, lunch, TDF board call, more hackery. Took 3x smaller babes to YFC pizza evening. Watched Petersen on biology & traits, interesting & slightly frightening.
  • N. off to a sleep-over, and car driving outing; everyone else to YFC pizza night at church.


Berlin, March 15, 2019 – MITRE announced that The Document Foundation, the home of LibreOffice, has been approved as CVE Numbering Authority (CNA). The Document Foundation is at the center of one of the largest free open source software ecosystems, where enterprise sponsored developers and contributors work side by side with volunteers coming from every continent. The nomination is the result of significant investments in security provided by the LibreOffice Red Hat team under Caolán McNamara leadership.

What is CVE?

Common Vulnerabilities and Exposures (CVE) is a reference list of public cybersecurity vulnerabilities, with entries that describe those vulnerabilities and provide references for them. These references are often used as the vulnerability names, especially in security updates. To date, LibreOffice has a track record of rapid response to all reported threats.

What is a CVE Numbering Authority (CNA)?

A CNA is an organization that can assign and announce CVE entries within a particular scope. Some CNAs are organizations providing CVEs for their products such as The Document Foundation.

How will The Document Foundation assign CVEs?

The Document Foundation Security Team provides a forum for all of the vendors and individuals who contribute to LibreOffice development to co-ordinate the work of protecting our users from threats related to the application.

As a CNA, The Document Foundation Security Team now has the ability to assign CVE IDs to vulnerabilities affecting our products, the ability to control the disclosure of vulnerability information without pre-publishing, and notification of vulnerabilities in our products by researchers who request a CVE ID from us.

14 March, 2019

  • Music practice with babes; mail, customer call. Lunch. Some hackery, sync with Andras. Plugged away at fixing minor issues until late.


We’ve finished editing and uploading almost all the videos from the second room of the LibreOffice Conference 2018 in Tirana, Albania. To view slides for the talks, find the PDFs in the program here:

As for the main room, the audio isn’t great in many cases (due to technical and acoustic limitations of the venue). Listening with headphones should improve the experience.

You can find the playlist at the following address: LibreOffice Conference 2018. To find second room videos, you should scroll down the list on the right side.


General Activities

  1. LibreOffice 6.2 was released as final on February, 7
  2. Xisco gave a talk about QA at FOSDEM
  3. Mark Hung added support for playing embedded videos in slideshow
  4. Mark Hung fixed an old issue, which prevented Linux users from adding sounds to custom animations in Impress
  5. Balazs Varga (NISZ) keeps fixing OOXML Chart bugs
  6. Miklos Vajna (Collabora) added support for the btLr text direction in Writer.
  7. Szymon Kłos (Collabora) added support for Browsersync integration for Online
  8. Dennis Francis (Collabora) implemented Discrete Fourier Transform in Calc
  9. Martin van Zijl fixed a bunch of old papercut issues, mostly related to selections in Writer
  10. Michael Weghorn did a lot of work on KDE5 & Qt5 file pickers
  11. Katarina Behrens (CIB) and Aleksei Nikiforov (BaseAlt) keep fixing KDE5 issues
  12. Tor Lillqvist (Collabora) continued the work on the new iOS app
  13. Zdeněk Crhonek created nearly 20 UI tests
  14. Andreas Kainz did many updates to the Sifr icon theme along with other UI improvements
  15. Tamas Bunth (Collabora) fixed some Firebird related bugs
  16. László Németh (NISZ) fixed some OLE in DOCX bugs
  17. Bjoern Michaelsen keeps fighting against SwClient
  18. Armin Le Grand and Katarina Behrens (CIB) improved tagged PDF export
  19. Samuel Mehrbrodt (CIB) removed support for Java 5
  20. Heiko Tietze introduced bound to Shift+Alt+Space that inserts a non-breakable narrow space
  21. Tamás Zolnai (Collabora) started to work on MS compatible Forms

Reported Bugs

666 bugs have been reported by 379 people.

Top 10 Reporters

  1. NISZ LibreOffice Team ( 94 )
  2. Telesto ( 23 )
  3. Roman Kuznetsov ( 13 )
  4. Aron Budea ( 12 )
  5. Nicolas Christener ( 10 )
  6. andreas_k ( 9 )
  7. Samuel Mehrbrodt (CIB) ( 9 )
  8. raal ( 8 )
  9. peter josvai ( 7 )
  10. Mike Kaganski ( 7 )

Triaged Bugs

634 bugs have been triaged by 78 people.

Top 10 Triagers

  1. Xisco Faulí ( 109 )
  2. durgapriyanka.arun ( 58 )
  3. Dieter Praas ( 48 )
  4. raal ( 46 )
  5. Oliver Brinzing ( 46 )
  6. Heiko Tietze ( 33 )
  7. V Stuart Foote ( 32 )
  8. Buovjaga ( 29 )
  9. Alex Thurgood ( 22 )
  10. Julien Nabet ( 22 )

Fixed Bugs

158 bugs have been fixed by 49 people.

Top 10 Fixers

  1. Caolán McNamara ( 18 )
  2. andreas kainz ( 6 )
  3. Aleksei Nikiforov ( 6 )
  4. Eike Rathke ( 6 )
  5. Michael Weghorn ( 5 )
  6. heiko tietze ( 5 )
  7. Mike Kaganski ( 5 )
  8. Samuel Mehrbrodt ( 5 )
  9. Miklos Vajna ( 4 )
  10. Katarina Behrens ( 4 )

List of critical bugs fixed

  1. tdf#121532 LO62b1: on macOS local help opens an empty page in default browser ( Thanks to Stephan Bergmann )
  2. tdf#122449 Crash in: mergedlo.dll when closing “Edit Index Entry” dialog (gen/gtk) ( Thanks to Caolán McNamara )
  3. tdf#122643 Crash in: libc-2.27.so after setting Named Ranges to e.g. F:F (non-absolute columns) ( Thanks to Luboš Luňák )
  4. tdf#123320 Writer crash if Paragraph edited after delete of custom Character Style used in Drop Caps ( Thanks to Caolán McNamara )

List of crashes fixed

  1. tdf#123163 CRASH when FILEOPEN of DOCX from scan and Nuance PDF Converter that also can’t be open with MSO ( Thanks to Caolán McNamara )
  2. tdf#123309 GTK3 Chart – crash when change symbol ( Thanks to Caolán McNamara )
  3. tdf#123406 kde5: Crash pressing Esc in undocked Find toolbar ( Thanks to

13 March, 2019

  • Up early, mail chew. Set off eventually for Baden-Baden: a lamentable airport RyanAir frequents at a great distance from where people want to be. Worked on a late train, but missed the connection. Very expensive taxi; the 2nd time bitten by this destination (with a chronic lack of sensible bus connections); hey ho.
  • Really font Nice to be in Germany though: the distinctive architecture, smell of sausage & pastry stalls in the street - lots of happy memories.
  • Ryanair, hacked on the flight & drove home. Mail chew, polished a patch a little. Dinner, band practice, bed.


Yes, it’s that time again! You can improve your C++ skills with the help of LibreOffice developers: we’re running regular workshops which focus on a specific topic, and are accompanied by a real-time IRC meeting. For the next one, the topics are Classes and Arrays. Start by watching this presentation:

Please confirm that you want to play a YouTube video. By accepting, you will be accessing content from YouTube, a service provided by an external third party.

YouTube privacy policy

If you accept this notice, your choice will be saved and the page will refresh.

And check out these sections from C++ Annotations: Classes and Arrays.

Then join us for a discussion via our #libreoffice-dev IRC channel on Freenode. You can ask experienced LibreOffice developers questions, and learn more about the language. See you then!

12 March, 2019

  • Up earlyish, found the Nextcloud Enterprise Day, and enjoyed a series of talks - presented the latest Collabora Online features in 4.0. Talked with a number of prospects. Took a long tunnel to lunch, more presentations & talks. Drinks & food in the evening together. Bed late.

11 March, 2019

  • Slept badly, up far too early; drove to STN - new terminal setup has USB sockets but no mains / power: annoying.
  • Arrived in Stuttgart, met up with Pedro & found the new Nextcloud office; caught up with lots of friends & collegues. Late kebap with Szymon & Pedro, found our AirBnB, bed.

10 March, 2019

  • All Saints christening; back for roast chicken lunch, read together - Elize over; N. doing hair curling test for ball preparation. Organ practice with H. home, quartet: some great Musescore scores. Read to babes, put them to bed variously.

09 March, 2019

  • Tidied the house, re-assembled shelving in boiler-cupboard. Lunch. Out for a walk at Noughton park with J. and E.
  • Read the All Party Parliamentary Group on British Muslim's proposed definition of Islamophobia - its conclusion are interesting: Islamophobia is rooted in racism and is a type of racism that targets expressions of Muslimness or perceived Muslimness - followed by some rather helpful (albeit sad examples) of the deepy noxious things that can happen in our society. The most encouraging bit is leaving room for intellectual debate, discussion and so on of comparative religion, theology and practice. So often 'phobia' definitions seem tailor made as pejoratives for bigots to thoughtlessly cast at their intellectual opponents in order to exclude them from respectful discussion & debate. Proxies for a lazy way of not engaging with diverse viewpoints. Good to see a more nuanced view here. Lets see if such positive nuance survives into the hard sphere of politics. Also encouraging to see examples used - I'm a fan of the clarifying effects of casuistic presentation - something often sadly missing in our codes of conduct.

08 March, 2019

  • Plumber arrived to service the boiler: analog timer loosing hours per day. Interview; mail chew & catch-up, more CV triage.


#BalanceforBetter #IWD2019

A balanced world is a better world. How can you help forge a more gender-balanced world? Celebrate women’s achievement. Raise awareness against bias. Take action for equality.

07 March, 2019

  • Interview, admin, ESC call, partner call.

06 March, 2019

  • Interviews, partner calls, admin, band practice in the evening.

05 March, 2019

  • Up in the night; hacked at the tile-cache, and some unit tests. Read the libstdc++ std::cerr implementation looking for the locking - still looking. Re-worked unit test logging to avoid threading crash when re-directed to std::stringstream.
  • Packed babes off to school, practice, back to bed for a bit. Interview, mail, lunch, tech call, admin.

01 March, 2019

= Andreas Kainz: GSOC

10:09 UTC


It’s time to register to the GSOC programm for the different LibreOffice tasks.

As the notebookbar is available for the regular users I hope to get students how are interested in Improve the LibreOffice notebookbar.

Open tasks are

And of corse there are some open bugs (tdf#102062) and missing uno commands that need to be done.

So join the LibreOffice GSOC project and be part of an open and helpful community.

28 February, 2019


Image may contain: text
...Because of the official announcement has been published, I had closed my draft article here.

If you are a Japanese speaker, please check the JP team's announcement also.

(Anyway, as above link, now we JP team has our own blog under the TDF domain.  Thank you to everyone in TDF who worked for this!)

21 February, 2019


As mentioned in my previous such report, a hack week is when we are allowed to hack on anything we want in LibreOffice for a few days at Collabora. I used this time to implement core support for the btLr text direction in Writer.


If you work with tables in Word, it’s very easy to create this writing direction: the context menu in a table cell has a menu item to set the direction of the text, where you can rotate the text by 90 degrees counter-clockwise or clockwise. The counter-clockwise btLr direction is the problematic one. Support for tbRl was fine already, since that is needed typically for Chinese/Japanese scripts as well.

Results so far

Here is how the baseline, the current and the reference rendering of btLr text looks like:

btlr-cell.docx, baseline

btlr-cell.docx, current

btlr-cell.docx, reference

You can see how the second paragraph in the cell was missing from the rendered result and now we basically pixel-by-pixel match the reference.

How is this implemented?

If you would like to know a bit more about how this works, continue reading… :-)

The document model and UNO API were reasonably straightforward to implement, but the layout was much more challenging. Writer already supported 3 writing directions:

  • typically used for Latin (left to right, top to bottom)

  • Chinese/Japanese (top to bottom, right to left)

  • Mongolian (top to bottom, left to right) text.

This new one is also a vertical direction, also left to right, but bottom to top. The initial layout contained code to read the new enumerator from doc model, extend the SwFrame class to handle this new bottom to top mode, some handling of switching between horizontal/vertical mode and at the end mapping from Writer layout’s direction to VCL’s "900" font orientation. There are more things to handle in layout, but this was good enough to look at other areas as well.

The ODF filter required updating, which was a bit challenging as it was necessary to write different attribute names depending on which enumerator is used from an emumeration, and we don’t have good support for this. Once the filter code was in place, I could write some layout-level tests as well.

Since we have .ui files for UI descriptions, adding UI support was really easy.

Time came to step away from coding for a moment and write up paperwork to propose this feature to be part of the next ODF version (thanks to Andras for the help there!).

Finally I went back to layout, and improved things a bit more: after fixing baseline offsets, the positioning of the text was exactly matching what Word does. How do I know? I used this little script:

gs -dNOPROMPT -dBATCH -sDEVICE=jpeg -r75 -dNOPAUSE -sOutputFile=btlr.jpg btlr.pdf
gs -dNOPROMPT -dBATCH -sDEVICE=jpeg -r75 -dNOPAUSE -sOutputFile=btlr-word.jpg btlr-word.pdf
composite -compose difference btlr-word.jpg btlr.jpg out.jpg

Which allows seeing the differences between our and Word’s


Firebird Project announces the first Beta release of Firebird 4.0, the next major version of the Firebird relational database, which is now available for testing.This Beta release arrives with features and improvements already implemented by the Firebird development team, as well as with countless bugfixes. Our users are appreciated giving it a try and providing feedback to the development


Recently my LibreOffice work is mostly focused on the Online. It's nice to see how it is growing with new features and has better UI. But when I was working on improving toolbars (eg. folding menubar or reorganization of items) I noticed one annoying thing from the developer perspective. After every small change, I had to restart the server to provide updated content for the browser. It takes few seconds for switching windows, killing old server then running new one which requires some tests to be passed.

Last week during the Hack Week funded by Collabora Productivity I was able to work on my own projects. It was a good opportunity for me to try to improve the process mentioned above.

I've heard previously about browsersync so I decided to try it out. It is a tool which can automatically reload used .css and .js files in all browser sessions after change detection. To make it work browsersync can start proxy server watching files on the original server and sending events to the browser clients if needed.

What is the advantage? Developer tools in the browser are not good enough?

  • Changes tracked by git - no need to copy changes from the browser's developer tools to the source files
  • You can setup testing matrix with all apps (writer, calc, impress) and all is reloaded instantly at one time (even on other devices like tablet or smartphone)
  • Fast prototyping


  • You have to remember to run syntax tests before commiting the changes

To integrate browsersync I needed to do some build system changes. First, all static files are served from 'loleaflet/dist' directory. These files are not the original sources but copies. I modified the Makefiles to create symlinks instead if the browsersync is activated. Thanks to that we can modify sources tracked by git and proxy can detect changes.

To try it out on your own:

  1. Delete your 'loleaflet/dist' folder or
    make clean
    you might need to delete generated 'Makefile' if repository was used before
  2. Install browsersync:
    npm install -g browser-sync
  3. Run 'configure' script with additional --enable-browsersync argument
  4. Run server with:
    LOOL_SERVE_FROM_FS=1 make run
  5. In the other console run browsersync:
    make sync-[writer|calc|impress]
More information can be found in: 'loleaflet/README'

In the video below you can see how it works:

Next step will be to allow browsersync usage with cloud storage integrations like richdocuments, I noticed also some issues with access from other devices (app is still using original server for some resources).

20 February, 2019


The paper Mesh: Compacting Memory Management for C/C Applications is about moving memory allocations for compaction, even though the memory pointers are exposed. The idea is to merge allocation blocks from different pages that are not overlapping at page offsets, and then letting multiple virtual…

19 February, 2019


Last week I started implementing a FOURIER() formula for LibreOffice Calc that computes Discrete Fourier Transform [DFT] of a real/complex data sequence. This is a long-time wanted feature in Calc. I’d like to thank Collabora Productivity for a fully funded hack week and lots of encouragement that enabled me to work on this feature.

The implementation is still a work in progress and current syntax of the formula is :

FOURIER(Array, GroupedByColumn, Inverse, Polar)

First argument is the data array range, but there are some restrictions on its shape. If the array is grouped by columns(rows), you need to indicate that by setting the second argument GroupedByColumns = TRUE(FALSE). In this case the array can contain 1 or 2 columns(rows), where the first column(row) contains the real part of input series and second column(row) if present contains the imaginary part of the input series. If there is only 1 column(row), the input series is treated as purely real. If the number of rows(columns) is not a power of 2, zeroes are appended to the input series internally to make the series length equal to the next nearest power of 2.

The third argument “Inverse” is a boolean flag to indicate whether an inverse DFT needs to be computed. This argument is optional and the default value is FALSE.

The fourth argument Polar is a boolean flag to indicate whether the final output needs to be in polar coordinates. This argument is optional and the default value is FALSE.

The result of this formula consists of two columns – first column contains the real parts (or the magnitudes if Polar=TRUE) and second column contains the imaginary parts (or the phases if Polar=TRUE).

Below is a screenshot of a sample usage of FOURIER() formula.



The data x[n] column was generated by the formula “=10*COS(2*PI()*COS(2*PI()*A2:A257/128))” (a typical frequency modulation example). Here I wanted to get an Phase-Magnitude spectrum and plot it, so I used “=FOURIER(B2:B257,1,0,1)” (Note that the Polar argument is set to 1).


I made a choice to implement a radix-2 decimation-in-time Fast Fourier Transform algorithm from scratch. Of course this would mean the data length should be an even power of 2. But like Gnumeric, my implementation pads zeroes to the data sequence to round the length to the next power of 2. This is something to improve upon in the future. The current implementation is not yet merged to LibreOffice core repository, but is in review @ gerrit. A Fourier analysis tool user-interface is also in the works too.

15 February, 2019


I’d like to share the results of the quick benchmark tests I’ve done to measure the performance of the R-tree implementation included in the mdds library since 1.4.0.

Brief overview on R-tree

R-tree is a data structure designed for optimal query performance on spatial data. It is especially well suited when you need to store a large number of spatial objects in a single store and need to perform point- or range-based queries. The version of R-tree implemented in mdds is a variant known as R*-tree, which differs from the original R-tree in that it occasionally forces re-insertion of stored objects when inserting a new object would cause the target node to exceed its capacity. The original R-tree would simply split the node unconditionally in such cases. The reason behind R*-tree’s choice of re-insertion is that re-insertion would result in the tree being more balanced than simply splitting the node without re-insertion. The downside of such re-insertion is that it would severely affect the worst case performance of object insertion; however, it is claimed that in most real world use cases, the worst case performance would rarely be hit.

That being said, the insertion performance of R-tree is still not very optimal especially when you need to insert a large number of objects up-front, and unfortunately this is a very common scenario in many applications. To mitigate this, the mdds implementation includes a bulk loader that is suitable for mass-insertion of objects at tree initialization time.

What is measured in this benchmark

What I measured in this benchmark are the following:

  • bulk-loading of objects at tree initialization,
  • the size() method call, and
  • the average query performance.

I have written a specially-crafted benchmark program to measure these three categories, and you can find its source code here. The size() method is included here because in a way it represents the worst case query scenario since what it does is visit every single leaf node in the entire tree and count the number of stored objects.

The mdds implementation of R-tree supports arbitrary dimension sizes, but in this test, the dimension size was set to 2, for storing 2-dimensional objects.

Benchmark test design

Here is how I designed my benchmark tests.

First, I decided to use map data which I obtained from OpenStreetMap (OSM) for regions large enough to contain the number of objects in the millions. Since OSM does not allow you to specify a very large export region from its web interface, I went to the Geofabrik download server to download the region data. For this benchmark test, I used the region data for North Carolina, California, and Japan’s Chubu region. The latitude and longitude were used as the dimensions for the objects.

All data were in the OSM XML format, and I used the XML parser from the orcus project to parse the input data and build the input objects.

Since the map objects are not necessarily of rectangular shape, and

Older blog entries ->