 Rwy'n cael ei wneud i'w ddechrau'n hyn sy'n gweithio ar hyn o deall, ac mae gennym i Paeuno o'r unrhyw o'r Llyfr Gwys. Rydw i chi'n fydda chi wedi'u gweithio yma ddim, dwi'n gweithio ar hyn o Paeuno. Mae'n gweithio'n cael ei ddweud i Paeuno, ac mae'r adnod oedd yn diolch yn Epythyn, ac yna yn ymrydig i ddaeth yng ngwybod. It was first implemented when Titan was very recognisable in the form of Culture Now이고, and has partially changed in the time you've since. when you use it, to interact with people on this, it feels an awful lot... like writing in Java, that that way, you start writing in Java, and its equals relatively slower than it should be, especially when you use it... as a remote process, which is a common use case especially for processing documents. Felly, mae'n fwyaf i gyd wedi bod y gweithio ar y gondol rhai, ond y master ac yn fawr ar y 5.1 oes y syniad yn gyfêl am Ymgylch yn gyfêl, ymgylch yn gyfêl, o'n gyfêl rywbeth, yn gyfêl yn gyfêl, yn cyfrifiadau yn cyfrifiadau yn gyfêl a'r cyfrifiadau yn cyfrifiadau yn gyfêl a bydd eich cyfrifiadau yn gyfrifiadau yn gyfrifiadau yn gyfrifiadau yn gyfrifiadau yn gyfrifiadau. o'r ddweud sy'n cael ei gwynhau, o wybodio ar gyfer gondol. Bydd i'n gondol i hefyd yma. Yn dechrau'r brif, y bwysig mewn cyflawn i'n gwaith i'r rhoed y mae'r hyn mae'r gondol i'n cael ei ch fermention. Mae'r brif iawn o'r gondol o'r cyffran hwn, o choi'r gynghwyd. A chaf nefïdd ystafell sydd i ddod o'r ddweud bod hyn o fwyaf gweld y fwyaf ar draws. Dwi'n gweithio cael ei ddes i. Felly, mae'r gwaith yn y pethau yn cymhwytofyn, fel rwy'n ffordd, mae'r ddweud y gallai gweld hynny'n gweithio hynny. Yr ymdryd yma, mae'n gweithio'n gwybod ddweud o'r hynny'n gweithio'n gweithio o hynny'n gweithio hynny o bryd hynny. ac mae gwasanaeth gyd yn ei ddweud i'r hyffordd. Felly, yn ddigon, o ddweud y gwasanaeth, sydd yn ei ddweud o'r ddweud yn y ffaser, mae gwasanaeth gyd yn ei ddweud i'r hyffordd hyffordd. Felly mae'r gweithio mae'ch cael ei ddweud yn y ddweud, oherwydd mae'r gwasanaeth, mae'n gwasanaeth. Maen nhw'r rhai ddechrau, mae'n rhaid i ddod o'r plan gyda cefnodau, mae'n rhaid i hynny y byd teulu a ddaod o'u ddysgu ddod. Mae'n clwm oedd hynny i'w ddach chi oedd hynny i chi wnes i ymddangos hwnnw o gwybod amdano i gyfioedd pan hwnnw. O'r gorffod Slice Symtax. Mae'n llei nhw'n ffordd â'r cyflwyno hwnnw o'r ddaid yn llwyddrwy. Mae'r rhaglen yn reiflu â gennym. Gynnwch rhywun wedi bod yn rhan o wneudEEC yn ymddangos i gweithio y pwyo, a yn y pwyo a'r ysniad mewn gwneud hynny yn y pweylo'i gweithio'r ffyrdd ac yn gweithio'r pwyeithio'r ysniad, ac yn wych yn le'ch ymddangos i gweithio'r bwyeithio y pweylo yn dweud, yn gweithio'n unrhyw o rhywun. Of course, you can do what you'd expect on a list of iterating. You do the, in the syntax, that little under the hood, iterate through the entire list, so don't expect that to be expected, especially fast. So one example that if you're iterating over document footnotes in a COM PEC document, difficulties. Rydych chi'n gallu cyllidden nhw, oherwydd y servo lliwyrgyn, ac rydych chi'n gwneud y gynedd y cwyl i'r gwrth. Mae'r gynedd, gallwn gwbl, y byddai oedd ei chyletaeth, oherwydd y gynedd yn ddefnydd y cyllideg ymuno, oherwydd y gyrdd yn dda y byddai'n ffordd, mae'n defnyddio bod chi'n ddisgu'r llob yn gwybod wedi'u unrhyw fit yn y ffordd ym mwrdd nesaf. Yn y clyw ddweud o'r Caerdydd, nid yw hwn yn cynnig o'r dweud, ond oedd y ddechrau ddechrau o'r fawr yn ddweud. A'r ddaf yn cael ei ddweud o'r ddweud, ond mae'r ddweud yn cael ei ddweud eich cyfnod ar hyn y dyfodol. Yn y cas yw'r wneud, mae'r ddweud yn cael ei gweithio, mae'n dechrau i ddweud. Yn hyn yn ystyried, byddai'r cyfanail hynny'n gwneud, mae'r cyfanail yn rhan rwy'r cyfanydd yn daeth. Fyddai'r cyfanydd hon yn yr hyn yn hyn. Dwi'n rhan ag welch am derbyn gyda eich cyfanydd. Ynwed gyda'r cyfanydd, mae'n gwneud, a'i lle o'n cyfanydd yr ysgrfflwg anwaith ac fy neud. In this register, the other way, you use the method of access and now you can simply subtract it. Anyone who has used, you know, for a while probably realizes that both of these things can go existing one object. They are merely interfaces. An object can be accessed by index and by name at the same time. What happens when you do that? It just works. a gwnaeth gwnaeth y cyffredinol yn ymddangos. Ond os yw ychydig fydden ni'n clywodd yn ymddangos, hyd yn ystyried y defnyddio cyffredinol, oherwydd mae'n ddyn nhw'n ddyn nhw'n ddyn nhw'n ddyn nhw'n ddyn nhw'n ddyn nhw. Fy gydig iawn yn hynny'n gwneud oherwydd y cyflwyno ac mae'n yn cydyn nhw'n ddyn nhw'n ddyn nhw'n ddyn nhw. y cyfnod trafion o bobl yn gyntfaiff ysgol Lleidoghau Siadol, ac yn gwneud ymrydol i'r Omwyr Siadol o'r Omwyr Siadol i'r Omwyr Siadol ac yn ymrydol i'r Omwyr Siadol, yn gwneud awd Lizon o'r ffordd o ffordd o'r ogym ownedu, ac mae'n rhoi'r cyffrediniant oedd y bwysig ac mae'n rhoi'r stadion i leidoghau Siadol i'r Omwyr Siadol, sydd wedi cael ei structures ei gynnwys. Y brifau'r gael efallai yn ysgrifordd y gallwn yw'i ddwylau ac'ch oed yn awg yn cael y ffordd ar ffordd. Ydw i'r ffordd yw eu mas, o mollu cyflol, dyma'r ffordd ac roedden nhw'n iawn. Ydi wrth digwydd yn cyeffaith y ffordd i wel, mae'r ffordd yn cael ei wneud yw'r hyffordd. Y gallwn ei wneud ar gyfer o hyd yn y ffordd o'r berthymau, mae'r ffordd yn argymau y ffordd ac i fel y rhai bum, A ganddo amser, y blwyddyn ddod o'r rhaid o'n byw, os ydych yn y gyfnod o'r ffordd, o'r ffordd o'r hyn mae'n ganddo, o'r rhaid o'r ffordd o'r ffordd o'r hyn mae'n ganddo, o'r rhaid o'r ffordd o'r hyn mae'n ganddo. ac nid gael eich hollwch i'r ffordd o wahanol. Rydych chi'n gwilio'r 10,000 o gyngor, a wneud i chi'n gweld i'r methu yw'r hollwch yn ddifent. Yn gyfnod o'r hyffordd o'r hwn ymlaen i'r ffordd i'r hyffordd, yw ydych chi'n cael ei fod yn cael eu cyfnod a gael y ddyn nhw'n ffynol am gyda chi'n erbyn'n ddysgu'r llyfrinol. Rwy'n ddysgu'r llyfrinol am gyda'r llyfrinol, ac yn y cyd-dyn nhw rwy'n gilydd ar gyfer eich gael y ddysgu'r llyfrinol, ac yn y cyd-dyn nhw hwnnw'n ddysgu'r llyfrinol, a'r ddysgu'r llyfrinol. Now we will instead be able to do it correctly, and assign what we do expect to, to one of the few places which require this small thing but it really annoys me every time I solve this as the solution to the problem. Y cyfnod gyllewyr hefyd mae'r gyfrifoedd yn fwy o'r cyffredin diolch yma o'n dechrau i'w y taith o gyfnod gydechrau'i cyfrifoedd. iechyd wedi cael ei ddau испuno, chi'n dweud bod y cyfnodau yn reisio cyfleidiowynydol wedi'i'i gweld eisiau'r cyfwyddiadau. Byddai'n ymddiffyn i yw'r如果你 MMTG, roedd eich cymdeithasig hefyd, yw'r cyfnodau yma. Yr cyfnodau a'r cyfnodiau a'r cyfnodau yn ei ddweud hyn yn rhoi'n efallai'r ffansiff. Yw'r cymaeg yw'r cyfnodau'u cyflym er mwyn i ni – yw'r cyfnodau felfydig, yw ddweud yw eich cyfnodau yn ei ddweud. A byddwn ni wedi ddweud o'i gael eich fathau allan o'r gael. Felly, mae'n rhan o'i ddweud o'r blaen. Ond yw'r cyfrifiad yw'r cyfrifiad a'i ddweud o'r cyfrifiad yng ngyfodol, a'u gofio'r cyfrifiad a'u cyfrifiad, sy'n gael allan o'r cyfrifiad o'r cyfrifiad, ychydig eich bod ni'n gael eu gwypad. Yn y fwy o'r cyfrifiad, yn y pethau sydd wedi'u gael, mae'r cyfrifiad wedi'u gael yn ychydig. ond rydyn ni wedi gweld, mae'r ddechrau i'r ddweud y ddweud. Rydyn ni'n ddweud fel cyhoeddion bod hynny'n dda. Mae'r ddiogel yw'r dddorol, y ddorol yn cyffredig o ddiogel a'r ddorol, ac yn ddifenni cyfnod o'r ddodol y bydd yn ddodol. This is rather outside the core appe of all the previous collection interfaces. That is part of the core appe, but this one is specific to Kelch and to Ryther. But it is so commonly used that I made a special detective shooting for this to make you get used. Again, this is a form of index access, and this syntax here is a comma that isn't generally used in core Python, but it is available and is used by the NumPy scientific extension. I borrowed this, and now, where you have a cell range, you can access your spreadsheet or table simply by its coordinates, including slices. They're often created 2D cell range from any existing cell range, or you can do it by character style row column, or name range, or just for the Python indexing. There is a small controversy with this one that, unlike the API which previously existed, which expects the argument in one way round, they are the other way round in this, and that is because that is the way that NumPy expects them. So, to conform with the Python expectation, I am using the Python order, otherwise anyone who comes from this Python background will be very confused, and the same applies to the range slice syntax for the same thing. Now, there is a slight difference in this case between the text table instance and the same for the spreadsheet. The text tables in writer try quite hard to pretend to be on spreadsheet, but they are not exactly the same. A spreadsheet is always a square array underneath, so even if you hide some of its cells, they are still really there. The same isn't true for a writer text table. Each row can have a completely independent number of cells in it. So, in this case, you can't slice whole rows and columns of a writer text table because they have to exist in that sense. A small tidy up, there wasn't previously a way to integrate a whole constant group after I was working on my user interface, but I realised that that would be a nice thing to happen. So now we can simply import a whole constant group by name and then revert to its members, like an object number. Hatch values. If you hoped to put a Python object into a dict, that would be previously worked very well, if you got the same object from a new appy in more than one way or at more than one time. It might work better now. And I say might, but I'm not entirely convinced this works as well as it should to get, so please take care if you ever have to use this one to check that it works. If you didn't before, perhaps it works now, perhaps not. We need to test that. Finally, some performance improvements. While working on this, I realised that the pioneer code was doing some extremely silly things. Now, to instantiate a unit object on the Python side, you have to make various queries against the writer-league-office process. Unfortunately, it was doing rather more than was strictly necessary. You would imagine that a few would be enough, but in fact it was doing up to 50 calls for every single Python object crossing across the bridge to the client-side process. And the amount of time this took, you could almost find on watch. So I fixed that. Now it's going to be a lot faster, including a little faster in the local case. Perhaps not so much with a notice without testing very hard, but a little faster. The results of this now, a major aim of the changes was not to break the existing code. They succeed almost. I hoped very much not to break anything. In fact, it turns out I have broken one thing in a way that can't be fixed without changing the Python code. Luckily, it's one of ours. That is in the LibreLogo code. A feature that most people don't even know exists. Who knows that LibreLogo exists? Really? This is the benefit of actually coming to a LibreOffice conference and know about all the obscure features. Did you also know that it's really written in Python underneath? Who knew that? The more OK it is, it'll sound some hands. Excellent. So what happened was inside the LibreLogo code there was a variable which contained either zero or a pi unit object, and it expected that choice to be one of true or false when you evaluated it. Unfortunately now, when the object is a collection, the collection is true when it's what a member. When it's empty, it's false and I broke the code because there's no way to fix it. Sorry about that. That's low for fixing it. No problem. Thanks for your work. You fixed it in LibreLogo because the check is a little bit insane. I tried to think of a way in which that could break existing code. I didn't think of one, but one existed. That's the nature of code in the wild, unfortunately, because of all the things you can't possibly predict. Question then. Is it still possible that you use East9 and the code will still work after your changes? East9? So your collection is never true if you say East9? No, it shouldn't be none, but Python has a separate interface for determining whether something is true or false. In the case of something which now behaves like a list, because it's got the X index or X name interfaces, that will now depend on whether it has a member inside it. If it doesn't have any confidence that it's false, if it does, then it's true. And neither is none, right? None is a separate value. Yes, true box and none are 3-0. We've already reached a question. Does anyone else have a question, please? First, this is really excellent work, especially that going to the native Python constructs for iterating and so on and so on and so on. I have two remarks. Maybe we can also continue this. I'll be at the hackfest later if you're coming. I will be at the party, but we can... We might meet in the middle of dinner then. So this high-level interface for accessing tables and so on, maybe it's a little bit fancy, it's a little bit magic. Yes, but if you're mangling a spreadsheet and you want to do certain things with ranges of cells, I imagine it could be of... Yes, it's very helpful, but maybe we've already done it, provided it's separate modules that we can have with a litterpile, you know, and if you don't know whether this is feasible, it's just very much so... It's a little difficult to implement this as an extension to all have it behave in a performant way. There is a way of doing it, which I consider the problem is that it's slow and may involve doing rather more calls to the control in LibreOffice process than would be the case as I've implemented it inside the UNO code. But in terms of how it's implemented, the Pino C++ source can only depend on the core interfaces. So the special affordance for the cell ranges is a soft dependency in the code. It looks it up dynamically to make sure it's there before it uses it. There's no dependency in C code. So this was the minor mark. There's also a major mark. You know that it's this code to set up a new LibreOffice process? I kind of scheme over that because it can be quite long and there are various ways of doing it. Yes, but my major criticism concerning this call is that I think it should distinguish to use cases where there's only just one interface. There is this use case where start in some kind of augmented LibreOffice environment within the context of the current user. So the user becomes user's LibreOffice profile and so on. Start in LibreOffice, and then we have some things inside there. But in my view, it should be distinguished from the other use case, which as well I want to maybe turn and document it to a PDF with a LibreOffice process for this. But I don't want to interfere with the current user settings and so on and so on and so on. You effectively want to run with an isolated user profile. That's really possible. You're quite happy to set the entire LibreOffice process to use a clean user profile. Yes, I know this, but I think there's only one interface so that I cannot distinguish the two use cases. But it's a rather special thing, maybe we can discuss it. OK, to this point we'll work on that one later on. Any other questions at the back? Yes, I'm not a vital programmer myself but I still understand how excellent this is. OK, thank you very much. I'm just asking, why didn't anyone think of this before? Even if they had, it requires a certain level of Python knowledge which I in no way shape or form had before starting this process and half of which is probably already formatted in my head which doesn't bode well for any future bugs but I will do my best. The whole pioneer code has been rather unloved for most of its history. It's been maintained to the point that it works but nobody has taken the time to improve it in a way that's for a long time. OK, thank you.