Stuff Michael Meeks is doing |
Older items: 2023: ( J F M A M J ), 2022: ( J F M A M J J A S O N D ), 2021, 2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000, 1999, legacy html
Today we release LibreOffice 5.2.0, the next step in our journey, and what will become the base of the increasingly stable 5.2.x series. There is a fine suite of new features for people to enjoy - you can read and enjoy all the great news about the user visible features from many great hackers, but there are, as always, many contributors whose work is primarily behind the scenes, and a lot of work that is more technical than user-facing.
Some moons ago, the ESC decided to add some under-the-hood wiki
pages so that people could add their own credits: I encourage you to read
those here: 5.1
and 5.2.
There are lots of good things there, and it saves me reading and summarizing
~10k commits each release, but then again - that can be fun too. This is my
very quick attempt to make up for a year of inactivity on this front, and
pluck a few of the un-mentioned bits out of 17,734 commits (that is an average
of ~50 commits every day of the year) from liboffice-5-0-branch-point
to libreoffice-5-2-branch-point
:
A great initiative of Norbert Thiebaud has been to collect together most of the infrastructure and entry points that we have at TDF, and build an attractive list of these to help those new to the project find and use our tools and services. Checkout http://devcentral.libreoffice.org/:
LibreOffice has been able to run in a headless mode, doing its own
pixel-bashing for a long time, and this is used intensively by both LibreOffice
Online and also the Linux / gtk3 port. It has been a neverending source of
amazement to myself and others that the (unreadable) template code using
Vigra produces rather poorly performing code for all manner of cases - and
needs special case optimization in the client code.
One of the great joys of LibreOffice 5.2 is the final replacement of vigra,
and the removal of the basebmp
directory which allows us to use
native (and assembler accelerated on eg. ARM) cairo for pixel bashing. While
basebmp has served well and accelerated rendering for years, cairo also gives
us accelerated anti-aliased line rendering and more. Thanks to Caolán
McNamara (RedHat) for that.
There were a large number of OpenGL and OpenCL improvements in this time period.
cache/opengl_device.log
files with details of your
drivers. After lots of work, it was discovered that Intel GL drivers
on Windows 7 were flaky beyond belief, so these were black-listed.switch()
statement.vcldemo
test
paths, improved native widget rendering, faster clipping. There
was a chunk of work put into lifecycle fixing, and shutdown
cleanup, and many bug fixes.vcl/opengl
,
opencl/
and sc/source/core/opencl/
here:
Tomaž Vajngerl (Collabora), Tor Lillqvist (Collabora),
Noel Grandin (Peralex), Stephan Bergmann (RedHat),
Caolán McNamara (RedHat), Markus Mohrhard,
Marco Cecchetti (Collabora)
Performance improvements are hard to screenshot; but important nonetheless. We maintain performance regression tests (running under valgrind) at http://perf.libreoffice.org/ - which really helps to pin-point and repair issues as they arise.
One big-win in 5.2 was Armin Le Grand (CIB)'s work to improve our thread-pool, and use it to accelerate the 3D software renderer - which gives a particularly noticable speedup for 3D chart re-rendering.
Markus Mohrhard has done some simply excellent work on crash reporting - to help us find the most frequent crashes on Windows. While many Linux distributions have had similar tools deployed for years, covering Windows is important too. The implementation re-uses Google's Breakpad to create minidumps which are analyzed on the server side and charted prettily at http://crashreport.libreoffice.org/stats/
Markus would love some help from someone with web development skills
to help improve the front-end, and analytic / querying / data presentation
here. Please poke the developer list libreoffice@lists.freedesktop.org
.
This work has already lead to several vital fixes of the top crashers that have been seen in the wild, using good data to nail the worst quality issues. Thanks to Markus Mohrhard, Caolán McNamara (RedHat), and Miklos Vajna (Collabora) who have commits referencing crashreport URLs.
Work is ongoing around code quality in many areas, with 196 or so cppcheck fixes thanks to Caolán McNamara (RedHat), Julien Nabet, Jochen Nitschke, Noel Grandin (Peralex), Michael Weghorn, Takeshi Abe, Giuseppe Castagno and others.
Caolan and the RedHat guys manage to keep the Coverity scan count, and crash-testing (loading and saving ~91k documents to many formats) counts at or around zero at all times, as well as doing fuzzing and other cleanup.
Continuing the VclPtr re-work where we added strong referenced
lifecycle to all our widgets, Dipankar Niranjan in
tdf#96888
has cleaned out all of the old & awful 'dog-tag' work that tried to get
lifecycle right in VCL, using much cleaner references.
In more recent times Yurtoglu, Melike Ayse and
Noel Grandin have worked to abstract the VclReferenceBase
and apply this to Menus, to ensure they are correctly lifecycle managed.
Thanks too to
Jocken Nitschke for internalizing the DeletionListener
tdf#97525
which should be removed when we eventually reference count the sal/
backend resources.
Other great work to exorcise manual refcounting comes from
Thomas Arnhold, Daniel Robertson, Noel Grandin, Aleksas Pantechovskis
and especially Xisco Fauli for their work on
tdf#96525 and
tdf#89329,
converting lots of manually reference counted or copy-on-write structures
to using the nice cow_wrapper
template; as well as converting
pImpl pointers to use std::unique_ptr. This reduces the scope for
programmer error, and missed corner cases and allows us to make
copy-on-write ref-counting thread-safe if necessary. There are 140 cases
fixed, and about 68 refcounting instances still needing love.
We continued to build and execute more critical unit tests this year - each one stopping some suite of regressions from ever returning. Grepping for the relevant TEST and ASSERT macros we continue to grow the number of unit tests:
The LibreOfficeKit API is the foundation of the Android App, GNOME Documents, and the ongoing LibreOffice Online work, and a lot changed in the last year. The two main building blocks of the LOK API are the methods of the exposed objects, and the callback types. Since 5.0, the following new methods has been added:
lok::Office::getFilterTypes()
allows obtaining an up
to date list of filter name - MIME type pairs, added for GNOME
documents.lok::Office::setOptionalFeatures()
and
lok::Office::setDocumentPassword()
allows opening
password-protected documents.lok::Office::freeError()
allows releasing an error
string allocated by the API.lok::Document::getPartPageRectangles()
allows
obtaining the size and position of pages in a Writer document.lok::Document::getTileMode()
allows writing clients
that work with both the new (Cairo) and the old (Vigra) headless
backend (see above).lok::Document::initializeForRendering()
has been
extended to allow key-value style options while initializing, like
Writer's hide whitespace mode.lok::Document::postMouseEvent()
has been extended to
handle click buttons and modifiers.lok::Document::postUnoCommand()
has been extended to
get a callback when the result of an executed UNO command is
ready.lok::Document::getTextSelection()
and
lok::Document::paste()
has been added to handle copy and
paste.lok::Document::getCommandValues()
has been added to
query possible values for UNO commands (font and style names, Calc
row/column header details, Calc cell cursor).lok::Document::setVisibleArea()
has been added to be
able to do correct page up / page down.lok::Document::createView()
,
lok::Document::destroyView()
,
lok::Document::setView()
,
lok::Document::getView()
and
lok::Document::getViews()
have been added as an initial
support for collaborative editing.lok::Document::renderFont()
has been added to help
providing font previews.lok::Document::getPartHash()
has been added to help
clients tracking reordered slides.lok::Document::paintPartTile()
has been added to allow
stateless rendering of different parts of a document.LOK_CALLBACK_DOCUMENT_SIZE_CHANGED
: Size of the
document changed.LOK_CALLBACK_SET_PART
: The current part number is
changed.LOK_CALLBACK_SEARCH_RESULT_SELECTION
: Selection
rectangles of the search result when find all is performed.LOK_CALLBACK_UNO_COMMAND_RESULT
: Result of the UNO
command execution.LOK_CALLBACK_CELL_CURSOR
: The size and/or the position
of the cell cursor changed.LOK_CALLBACK_MOUSE_POINTER
: The current mouse pointer
style.LOK_CALLBACK_CELL_FORMULA
: The text content of the
formula bar in Calc.LOK_CALLBACK_CONTEXT_MENU
: Context menu structure
(after a right-click).
An outcome of our Turkish Hackfest
in Ankarah was discovering that LibreOffice would not even build in the tr_TR.UTF-8
locale. Interestingly toupper('i') != 'I'
in this locale; fun cf.
tdf#99589.
Thanks to Krishna Keshav, Gökhan Gurbetoğlu and Apurva Priyadarshi
for the fixes.
A large number of UX / usability papercuts were fixed and improved such as keyboard shortcuts, consistent display issues, mis-sized and mis-placed controls, and some regressions from UI file conversion. Thanks to Caolán McNamara (RedHat), Akshay Deep, Regina Henschel, Maxim Monastirsky, Jürgen Funk (CIB), Bubli Behrens (CIB), Samuel Mehrbrodt (CIB) & Jay Philips.
One metric we watch in the ESC call is who is in the top ten in the freedesktop Weekly bug summary. Here is a list of the people who have appeared more than ten times in the weekly list of top bug closers in order of frequency of appearance: V Stuart Foote, Adolfo Jayme, Cor Nouws, Maxim Monastirsky, Eike Rathke (RedHat), raal, m.a.riosv, Julien Nabet, Caolán McNamara (RedHat), Miklos Vajna (Collabora), Beluga, Alex Thurgood, Michael Meeks (Collabora), Buovjaga, Yousuf (Jay) Philips, Joel Madero, Samuel Mehrbrodt (CIB), Markus Mohrhard, Timur, Jean-Baptiste Faure, Xisco Faulí, Aron Budea, tommy27, Michael Stahl (RedHat), Heiko Tietze, David Tardon, Laurent BP With many thanks to everyone else that helped to close and triage so many bugs for this release.
Thanks fundamentally to Norbert Thiebaud - we now have not only
great Jenkins / CI infrastructure, with gerrit integration - but we have a
much enlarged and more reliable hardware build farm that encourages people to
use Jenkins to check their work before pushing, in turn increasing the
quality and reliability of master. This year we've seen the benefits of
running our full suite of make check
unit tests on our debugging
builds under Linux.
The work Jenkins did for just master in the six month run up to the 5.2 branch point we have 34,124 tinderbox builds covering seven configuration across linux, mac and windows. With 27,737 builds covering three platforms tested on our gerrit infrastructure. This is for the CI managed hardware, there are a number of other volunteer run Tinderbox builders. This is extremely helpful for keeping master build-able and usable, making it easy for newbies to get stuck in. With 60,000 builds for 8k commits we are doing a lot of loop test and validation of the LibreOffice code at CI time.
Some of my favorite heroes are those who open up the code so
that others can work on it ! One of the key tasks there is translating
the remaining German
Comments (a list). The last four thousand lines seem to defy
translation - why this graph should flatten like this - I have simply
no idea. All patches from German speakers who love to finish things -
much appreciated. Many thanks to those who stuck with it, with more
than 2 commits; in order of commit count: Albert Thuswaldner, Phillip Sz,
Thomas Klausner, Chris Sherlock, Philipp Weissenbacher &
Matteo Casalin.
We are now down to seven modules left:
include, reportdesign, sc, sfx2, stoc, svx, sw
The 5.2.x releases run well on Windows XP, but we cannot be sure how long our tooling will continue to target that platform. As such - while the ESC has no concrete plans to drop Windows XP support, we are 'deprecating' it after the 5.2.x series - meaning that having a modern C++ compiler and a modern Windows build OS base-line have a higher priority. That means that in future it is possible that future major LibreOffice releases may not run on Windows XP; you have been warned. For now, there is no change here.
I hope you get the idea that more developers continue to find a home at LibreOffice and work together to complete some rather significant work both under the hood, and also on the surface. If you want to get involved there are plenty of great people to meet and work alongside. As you can see individuals ('Assigned') make a huge impact to the diversity of LibreOffice (the colour legends on the right should be read left to right, top to bottom, which maps to top down in the chart):
These charts, made so early in the month are still missing som individuals and commits queued up in gerrit for review - hence the July numbers. In terms of diversity of code commits, we love to see the unaffiliated volunteers contribution by volume, though clearly the volume and balance changes with the season, release cycle, and volunteers vacation / business plans:
Naturally we maintain a list of small, bite-sized tasks which you can use to get involved at our Easy Hacks page, with simple build / setup instructions. It is extremely easy to build LibreOffice, each easy-hack should have code pointers and be a nicely self contained task that is easy to solve. In addition some of them are really nice-to-have features or performance improvements. Please do consider getting stuck in with something.
Another thing that really helps is running pre-release builds and reporting bugs just grab and install a pre-release and you're ready to contribute alongside the rest of the development team.
LibreOffice 5.2 is great; it is made by a set of developers having fun, working together, and building an increasingly attractive and beautiful Free Software Office suite, I hope you enjoy using it. Thanks for reading, don't forget to checkout the user visible feature page and thank you for supporting LibreOffice.
If I have missed your good work out (and this is a very incomplete view based on a few hours of analysis) - please do add yourself to the relevant wiki page and potentially mail me a unified diff to this page; thanks !
Raw data and commit stats built using our gitdm-config - are available for many of the above graphs.
My content in this blog and associated images / data under
images/
and data/
directories are (usually)
created by me and (unless obviously labelled otherwise) are licensed under
the public domain, and/or if that doesn't float your boat a CC0
license. I encourage linking back (of course) to help people decide for
themselves, in context, in the battle for ideas, and I love fixes /
improvements / corrections by private mail.
In case it's not painfully obvious: the reflections reflected here are my own; mine, all mine ! and don't reflect the views of Collabora, SUSE, Novell, The Document Foundation, Spaghetti Hurlers (International), or anyone else. It's also important to realise that I'm not in on the Swedish Conspiracy. Occasionally people ask for formal photos for conferences or fun.
Michael Meeks (michael.meeks@collabora.com)