 Всем привет! Я Майкоганский, софтфейер-энженер. Всем привет! Я Майкоганский, софтфейер-энженер, работающий в коллабора-продуктеете, mostly working on its core part. This talk is about the feature that is new in LibreOffice 7.2, multi-column support in textboxes, shapes and other graphical objects. This is the first time when I pre-record a talk for a conference, so please excuse if I do something incorrect or funny. First of all, I want to tell that I'm glad to be part of the great team of professionals, which collaborative productivity is. It is in a unique position, making commercial customers happy, and at the same time bringing the improvements resulting from that, to benefit everyone in the open source project. The feature that we have implemented is the perfect example of this mutual benefit, that commercial customers and other users get because of collaborative commitment to invest its expertise and do all the development in open source. And I'm proud that I'm part of it. Let's proceed to the multi-column support in LibreOffice. And first of all, let's discuss what was supported prior to LibreOffice 7.2. If you work with writer, you possibly know that multiple column is itself not a new feature in LibreOffice. It was available long before in Writer. It already had it in the very first release of OpenOffice.org, and I suppose it was available before that. Writer's columns are really very powerful, useful, configurable far beyond what is available in our competitors. In Writer's pages, in Writer's sections, in Writer's frames, you may use columns and set them very finely, but not in graphical objects like text boxes, shapes, or all that uses Edit Engine, the component that does not rely on Writer's layout machinery. Here you see a text document with a section that uses two columns. Also you see a dialog to configure the columns. And you may see how rich the configuration is, where you can set up distribution of the text or the form of the separator line, something that is absent in our competitors. It was already present in Writer before the 7.2 release. But other modules, Kalk, ImpressDraw, didn't have this multi-column support, because they didn't use Writer's layout machinery, as was already stated. They all rely on Edit Engine to do that. Since we discussed here the development that brought this capability into these modules, the question is, did they actually need this support or maybe it was okay without it? Let's see. I want to focus on Impress as the module that benefits most visibly, when any new feature appears that provides new layout capabilities. When authors create slides, they might want to put their text into columns, and they would expect naturally that the text would flow freely from one column into the other, which is what columns are about. At the same time, they want the good stuff that they already have with the boxes in Impress. For instance, allowing them to automatically scale the text to fit the size of the box. But that wasn't able directly, and a user would need to create, for instance, two text boxes or a table with two columns, and then you would need to type a text, move it from one element to the other, from one cell to the other, to distribute them. You would need to make sure to apply the same properties to the two elements, so that the text looks consistent. When you edit the text, you naturally need to do this all again, because, for instance, scaling might need adjustments. All that would need to be done manually. The other aspect requiring the new feature was interoperability with other suits that already provide multi-column support in presentations. When LibreOffice users get documents created in those suits, they naturally want to see them as they were intended to be, but that wasn't possible before 7.2. Indeed, we tried to work around the missing feature, and tried, for instance, to import multi-column texts into tables, trying to figure how to distribute the text over different cells, but that couldn't be done perfectly. Often the text ended up being distributed in a different way, not as it was intended to be. Here is the screenshot of Microsoft PowerPoint with a slide with two-column layout and a configuration dialog. Naturally, we needed to provide ways to import and export the data to allow our users to interoperate with users using other office suits. Now we see that the need is real. Let's proceed to the change itself. When you start working on a new big feature, you need quite some effort. The feature takes much time. It requires developers to work for weeks and even months. Indeed, that means that you may only be sure that the feature will be completed at some stage when someone supports the development and makes it possible for developers to focus on their task. When a commercial company gets a support contract and they listen to their employees, they create support tickets to resolve problems that their employees have. The company does just that. It makes the difficult development possible, which otherwise could be impossible for a volunteer. It could be just too huge for a volunteer who needs to eat in the first place. And we are glad to have Suse, our valued customer who keeps helping the whole community because they are the ones who made this development possible. Thank you. When implementing the new feature, you need to check if it would bring changes, possibly incompatible changes to the file format that is used in the office suite. And we studied ODF and it has required support or if we need to extend it to support the new feature. And it turned out that ODF already has all the required support for it. It already defined that graphical objects may have columns, element in it. Это было очень приятно для меня. И я хочу спасибо всем всем людям, которые работают в ODF Техническомитете в ООЭЗе. Спасибо. Тогда мы proceeded to analyse the scope of the task if we needed to implement all the rich feature set implemented in Writer columns in graphical objects. And after discussing the possibilities we decided to not implement everything that Writer has and focus and limit the task to the simple same width columns without separators. There were two reasons for this decision. First, keeping things simple allowed us to provide the new feature faster. And second, possibly the most important was that having two complex feature set implemented from the start would create another compatibility problem This time in the opposite direction the users would be unable to save these features into external file formats which would make them which would make it difficult for them to share their documents with the users of other office suits. So we decided to limit our task and additionally it was unclear if this set of features was actually demanded so that would justify the development. The next nice part of the task was to implement the document model for the feature and to make sure that it gets stored to and imported from the file formats The two file formats first of all it is our native ODF and the second the OXML that Microsoft uses. I really enjoyed how well engineered our existing code was when I worked on this feature The code that already handled this task for writer was so well engineered that it was very easy to reuse it it needed very few changes very few modifications to make it work for broader set of objects We made some refactoring to make it reachable from edit engine and it worked I always enjoy working with a code that is so well engineered because it makes the task easier, it allows to do more good stuff in less time and I am very glad to be able to work together with brilliant engineers like Miklos who is always ready to share their expertise and point ways to avoid inventing a wheel It is him who pointed me to this well written code One thing that required a completely new development from our site was the text layout itself We needed to make quite a few changes and most demanding part was the new iterative algorithm to distribute lines of text over several columns When you implement an iterative layout algorithm one of the biggest problems is to make sure that this algorithm ends at some point that it never hangs and since we changed an algorithm that was previously linear into iterative, we needed to make sure that it can't freeze so I am glad that we were able to do that I am sure that our algorithm never hangs it works reliably but I am proud with it In the end there were a number of commits implementing the feature in steps there were an initial set of merged patches then there were some more patches that fixed some omissions bugs and now the change is ready for everyone to enjoy the end result in LibreOffice 7.2 You may see that the boxes in Impress as visible on this slide as well as in all other models got the power to distribute your text over the columns just as you would expect The configuration of this feature is very simple It is hosted in the text properties dialog where other text properties were already hosted Also it is available on the sidebar and you may see the comparison of the dialogs used in Microsoft Office and in LibreOffice 7.2 you may see the parity of features So what's left to do? There are a number of issues filed against this new feature in bugzilla it is natural, it is a new feature it is a big feature and some problems are inevitable in the first steps and especially when the feature was just published to the wide testing but one of the most important issues there is in my opinion bug140022 which is about still unresolved compatibility problem between Microsoft Office and our new implementation in LibreOffice To resolve it we need some missing bits in initialization of edit engine and recently Noelle Grandin has made some nice changes toward this, thank you very much for that Yet more work is needed on this problem as well as on other still unresolved problems with the new feature I am glad that the feature is functional and is ready for you to test Please do that This is basically the end of my report about working on this new feature that is landed in LibreOffice 7.2 The feature that is brought to you is a special support to benefit the community The task was really a great pleasure Thank you for your attention that allowed me to feel all that pleasure again as if I was working on it the second time Now it's time for questions and I am sure that I am ready there in the room waiting for them to answer Thank you very much