Howdy guys. All right. So in this video, what we're going to do is learn a little bit about how to use the glob module And this is really useful so we can actually just look into a certain directory of files and basically read all the contents of the files in that directory So if you have you know a hundred let's say height maps or text files or JSON files in a single directory Like I do here So here I have a bunch of height maps at least four just for this simple test And what I want to do is I want to read in all these height maps here and I want to basically reassemble the height field from these four tiled height maps and so what we're going to do is we're going to start off this video by First learning how to use the glob module so we can read in text from a all these text files and Perform let's actually take a look here at the example What we'll do is we'll basically just learn how to create this setup right here So each text file has a certain line in it and we're going to get all of our files we're going to read all the lines from all those files and then basically Create this set of texts and so once we learn how to do that We're then going to go and learn how to read in all those height maps And basically reassemble them into a height field Okay, so without further ado, let's get started All right, so let's create a geometry node here and I am going to call this my glob test glob test like so And we're going to dive inside. I'm going to make a sub network Because I want to make this a SOP level HDA and this is going to basically get files from Directory, I'm just going to say dirt there All right, and so I'm just going to right click on it and say create digital asset and let me put on my namespace and we will do our version number as well And I'll just get rid of these guys here for the actual label So let's do this There we go, and I'm actually going to save it into the directory My actual hip directory here, so I'm just going to make a new hd a folder And let's just save it right there hit accept What I want this to do I I basically want this to be a generic File reader so we can read in you know text files. We're going to read in png's Maybe even bgo's fbx files, right? And so we need a couple parameters in order to do that The first parameter is the directory in which we should actually look into and so I'm just going to call this file there and we'll call this file Directory like so there we go All that looks good. So this gives us the ability then to go and assign a particular Directory to look into so I have a couple set up here. So what I'm going to do is select this text files folder We're going to focus on these guys first And so if you middle mouse click on the label here, you could see it expand to the full path All right, so right now it's just using the dollar hip Because it the hip files right next to that particular folder All right, so next thing that we want to do is we want to Put in a string and this is going to be our Suffix or file type actually it's called file type It'll be better. So file type There we go and the type of files that I want to look for is txt so text files Cool. So with that information we have enough parameters now. We can go jump inside of our hda here And all I'm going to do is I'm just going to drop down a null node here So let's do a null node and then a python node All right, very cool So this is going to get all files and set adders Something like that And I'm just creating the null node just to make a little network out of it. It really is just this simple You don't necessarily need the null node there. Then I'm going to put output node there just to Signify that this is the actual output There we go. Cool. All right, so let's jump into our python node and get a couple things set up So make sure you also have the python shell open if you don't you can always hit one of the plus buttons on any of these Panes up here and you could actually bring up the python shell like so Cool. All right, so we need to import a couple modules first So we're going to import os and then we're going to import glob. That's going to be the focus of this video all right, so with that done We now need to get access to our Parameters on our hda. So there's file der and the file type All right, so let's do that first To do that we need to get access to the hda. So we're going to say hda is equal to node dot parent All right when They say node they mean this particular node. So this node that we're actually on So now we have the parent What I want to do is I want to say a file der. So that's our variable And we're going to say hda.parm and we want to get the file der And then we want to eval that as a string like so And then we want to get the file type So we know what files we're searching for So I'm going to say hda.parm and we're going to do a file type It's easy as that and we'll also eval that as a string There we go so let's uh Let's build a path here. So let's put in some comments here. So let's get harm data And then we're going to get or build path Because we need to build a path for this all to work for the glob to work And so our path is going to be equal to our file der like so plus Actually, let's just do that first and then print out that so we can see what we got. So let's say print path There you go. So we have a path to our text files folder So now if I were to add on let's say add on the file type here You can see now we have this TXT so we need to add a little bit of information For the glob to actually work and that extra information is a Astrict like that or what is referred to as a wild card and then a dot because we also we want to turn this into a file type look up All right. So now if we were to print that And we also need to make sure we add another Here Plus symbol there. So now you can see we have the wild card and we're going to be searching for all things that are text files within that directory All right. So now that we've got that all set up Um, we can easily now Get all the files. So let's say get all files like so And to do that, it's actually quite simple. We're just going to say a files is equal to a glob dot glob And provided the path to look at like so And to commit the code what i'm doing on the keyboard is i'm using control enter To commit the code rather than just clicking out of there. It's just a quicker way to do it so Now what we can do is if the glob module actually finds a bunch of files using this particular file type It'll fill this files variable which becomes an array automatically And then we can actually loop through it for each file. So i'm going to say for a file in files Let's just print the file. So we'll say print file and see what we get. So control enter Now look at that we get all of the let's actually Yeah, we're fine now. Let's do that one more time make a little bit of space here And I'll just hit space bar and then control enter. There we go So we're getting test zero zero one text test zero two text And test zero zero three text. So what I've done ahead, I've just gone ahead and Done this already so you can see we have our three files in here, right? And in each one of those text files, I have a single line of text Just for this example Once you get the hang of this you can do what you know, whatever you want with these particular files All right, and so What I want to do now now that we have access to the file All right, let's first check We're just going to check to make sure that it is in fact a file. So we're going to say is file We don't want to work on anything else. That is an empty file All right, so we just want to do a really simple check We're going to say if it is a file then we can actually do something with it All right, and so what I want to do at this point now is I want to get the The text from that text file And so all we need to do in this particular case is say f is equal to open And we're going to going to use path or actually file Excuse me, and we just want to read it. So I'm just going to use the mode r for that All right, and so for each one of those let's print f dot Read line like so Look at that. We have a little python This is how we use the glob module pretty cool. Hey All right, so now we're actually rolling through each file that we found and pulling out the data that we need Very cool. So let's actually store that and then a sign or actually add it to a detail attribute So what I'm going to do is I'm going to create a new variable called lines And this is going to be equal to an empty array and we're going to fill it All right, so to fill it we're going to say lines Is equal to I'm sorry lines dot append F dot read line like so All right, and so now if I were to Exit out of the loop over here and print Our lines array You can see now we have all those guys in an array. Which is perfect because we can add an array now to Our geometry as a detail attribute. All right, so let's do that Let's make a little bit of a comment for us. So we're going to say create um detail adders like so And what I want to do is I want to say geo. All right, so that's coming from up here By default the python node comes with these two guys already filled out for you So we need to access the the geometry For this particular note and we want to then add an array Atrib like so And the first argument for this is the who dot atrib type and that's going to be a global for a detail attribute And then we want to call it lines And then we want to declare the type Of attributes so attribute data dot string There you go Cool So you notice once I hit control enter on the keyboard. I now get A new array attributes in the detail context here And so we need to set it. So now I'm going to say geo dot set global atrib value global atrib value And we want to first assign the name That's how we get the research for the actual attribute. Then we want to assign it the lines And there you go. So now I have my array assigned with those Text file values The other piece of information that we're going to need is the actual count Because we're going to loop through this and so I need to actually extract out the count. So to do that It's it's actually quite simple. We're just going to do a geo dot add atrib and I need to capitalize that so add atrib like so we'll say who dot atrib type uh Dot global because we want it to be a detail and we're going to call it count Well, let's actually make a little bit more detailed. So file count And we're going to do the length of Lines right here like so Now look at that. So now we have a new detail attribute And because it's an int you can assign it right away. I found that with arrays you need to first declare Or add the attribute array and then assign it All right, very cool. So now we've got our count and all of our text information Cool, so we can jump out of here. I'm just going to save this guy like so Uh, what we need to do now is loop through this. So I'm going to create a for each number loop here There we go And I'm just going to wire that guy in like so and I'm going to call this my loop data All right, and so at the for each end node here, I am going to Get our detail attribute. So I'm going to say detail and we're going to get that information from our get files hd a And the attribute I'm looking for is the file count And we just need zero because it's just a single value. So if I were to click on this now We get a value of three which matches our file count Very cool. So on every iteration, uh, I want to Create some text some geometry using a font node here And then what we're going to do is we're going to merge it together like so And then pass it into the final output here and hit shift s on the keyboard to get my wire designs changed All right, so how do we get the line? from um our array over here And so I'm actually going to create a wrangle node for this one attribute wrangle node And we're going to wire it in on this side over here. I'm going to call this curve file And we're going to create it as a detail attribute And all I need to do is also wire in the loop data here into that second input And we need to get the iteration. So I'm going to say int iter is equal to detail And we want the information from the second input. So we put one right there And I want the iteration value There we go And zero So that will get us the current iteration which we can then use to Get a particular index value from our array All right. And so to do that I am just going to do s at curve file Is equal to I should say curve text Like so it was equal to our detail And actually we already have we don't need to use a detail method here. We can just do s array at Lines like so And then pass in the iter value there So now our curve text is pretty cool. Hey And that's the last one in the list because We can come in here and actually do this here. So as I roll through it, you can see the text is changing Awesome. So let's go now and set up the font node so we can access that and so to access that Uh, we need the two backticks and we need the detail s And I'm going to get the information from our curve file node and we just want the uh Curr text I think is is that what I called it? Yeah curr text There you go So now if we take a look here Look at that pretty cool. Hey But you'll notice that when we combine them all together. They're all on the same line So all we really need to do and you could do this in many ways But we could also come in here into the font node and change the origin So we're going to say detail and we want to get it from our loop data node And we want to do iteration And there we go And then let's just negate that so it goes ascending there So there you go. It's got hello python. This is how we use the glob module pretty cool. Hey All right, so with that, let's move on to doing the height field or height map assembly All right, so let's do A little bit of height map assembly. So I'm going to call it that So I'm going to drop down new geo node call height map assembly And let's go and grab our hda So I'm just going to make sure I save the node and then I'm going to lock this particular instance of it Do a control c to copy it And then paste it in here because we're going to update the code to take into account The fact that we're working on height maps currently our code Assumes that you're going to be working with text files, right because we're doing this read line right here And when it comes to the height maps, we really just need the file, right? And so Let's update our code to handle that. So one thing I'm going to do is I'm going to go and add a new toggle up here So let's just drag and drop that in here and we'll say this is is height and I'll call it Is height question mark And we'll hit apply So if I toggle this Basically, we're going to switch the code and in this case now I want to look for a pngs All right, you could also do the if check based off of the the file type as well I'm just going to use this this toggle right here for right now All right, and so we need to go and get that particular value So we'll we'll say is height for the variable name And we'll say hd a dot palm and we'll look for Is height like so eval that as an int There we go cool All right, so I'm going to actually move this lines array down just below our glob method there All right, and I'm going to do an if check. So I'm going to say if Not is highly me actually put this here. There we go Not is height meaning it's false Then we're going to treat this as a text file and read the lines from it Else we are going to process it as though it were image files or height maps in this case All right, and so I'm going to Store it into an array called height maps Like so you more than welcome to change that around a little bit There's a bunch of ways you could do that. So you could say for a file in files like so Again, let's check to make sure that is an actual file. So os dot path dot is file We'll Pump in the file value there And then we want to basically just assign That to our array. So we'll say height match dot append file like so All right And we also need to treat our Array a little bit differently. So file count will work just fine And actually we could change this around the files like so there we go And So that works just fine, but this one Actually should go in here Like so because it's dealing with the the text. All right, so let's just uh Get this situated and make a little of space for All right, so Now we've got that all cleared up that should work. We just need to come up to our hda and change our Folder to height maps here and there we go. We got a file count of four, which is perfect because I have four height maps in there and I need to Make sure now I create The height map array attributes And we'll do that again Outside of that for loop there. There we go And this should be spelled appropriately Not that it's super important All right, we'll call this height maps And we want to pump in Height maps that array and assign it to the height maps array. That is the detail attributes There we go. So now we have all of our Not really really long here Let's actually print this guy out over here. Let's just uh Do a print right after this guy. So we'll do a print height maps There we go. Cool. You'll notice though that we're getting this backslash right here for the the height Map itself and that's actually not going to work for Our particular height map file node. It'll actually throw an error and so For each one of those files. Uh, what we need to do is actually do a file is equal to file Dot replace and we need to do an ossep. So ossep And replace it with a forward slash like so So now let's actually make a little space for ourselves And I'll just hit space bar control enter. You can see that now we've replaced those two back slashes with the forward slash there perfect All right, so now we have all the information that we want We have our file count and our height maps and so uh this point. Let's save our hda And um, just get our height maps assembled. So I'm going to drop down a for each number And this will loop through each one of those height maps and basically creates a High field for it. So let's do a loop data for the name. That's what I usually like to call it And then we're going to need a height field and in this case You probably want to you know wrap this up into an even bigger hda But in my case, I know that the the file size for each tile is 506 All right, so that gives me a Tile right there and then what we need to do is um get the height field file node like so All right, and we want to assign this to the height All right, and the file Is the one of the files or the current file in the loop here If I go to here, it's one of these files. So we need to get that curve file So let's do an attribute wringle and we'll say curve file like so And we'll pump our loop data into that first or second input there And let's just do a detail So let's get our iter again. So iter is equal to detail from the second input And we want to get our iteration like so and zero No, so that's the current iteration and that needs to be an int. There we go And then we want to get that curve file. So s at curve file just like we did before Is equal to a detail And we can actually just access the array again. There you go s at height maps and then the iter there you go and It's not being populated there. Let's see if We have oh, yeah, there we go. So curve file And I do want to actually merge each iteration But I think I need to change so we have fits and put so yeah, that's good right there Um, let's just make sure that on each pass we just get rid of the curve file So let's do an attribute delete at the very end here Once we've done that and we will delete curve file So each time basically we run through this We should get The curve file. So let me actually select this guy right up here Yeah, so curve file And let's actually pin that So then I can see And it's actually kind of see because it's it's hard to see because it's so long Yeah, so there we go. It's working though All right, so let's uh unpin that and Let's now assign that curve file. So we just need to do The two back ticks and we're going to do detail s And we're going to get the information from the curve file node We'll say curve file And we don't need to assign anything there And then let's actually merge This one together down here Hey, it looks like this guy's having a bit of a time here Oh, it's because the curve file is empty on that pass there So let's go and check our Yeah, so we have our height maps right here It's called height maps and we're getting So as that height maps Let me misspell it Let's actually see here. Hold on a second Let's do um Another array we'll call this maps is equal to s array height maps What does that give us there? Yeah, so I give this the same deal So let's just see if I can access that now. So we'll just say um At maps itter Let's actually click on this guy down here And then click on this guy It was pretty odd But this isn't working for me Let's try this Sorry about that. Let's see a string and we'll just make a local variable And that is equal to that guy And then we'll just say maps is equal to curve file And that is still ending up empty as well So i'm thinking that it just doesn't like to access the array that way. Let's let's try detail function. We'll say zero We'll say a height maps and zero See if that works and then click on this guy Let's do a single pass here. See that works So that populates the curve file Interesting. So that's populating it perfectly But then when we go and turn it off Oh I didn't set the count. I am so sorry about that guys. So let me actually put in the detail here And I want to get the account from our Get files from dur. So we need to do dot dot forward slash get files from dur And we want to get a count or file count There we go. And then we just need to put in There we go Let me turn this off now. All right. So now we're good. I'm really I really apologize I don't did not mean to waste your guys's time there But it happens with this stuff All right, so now that we've got that all sorted out. Um, what I need to do is um We can actually set the height here. So let me actually I also need to set the size. So let's set this to 505 And I'm doing that because When I exported it I added a one pixel padding to it Let's put the height scale to 100. So now we have all of our height tiles Right here all stacked on top of each other So we need to move them. Uh, basically by the iteration So I'm going to use a height field x form or transform Like so and for this first one, I'm going to take care of the x axis So we're going to translate it here. So to do that I'm going to say detail So detail and we want to get the information from our loop data like so and iteration And zero and then I want to do a mod two So that way we get this pattern of zero one zero one, right? And that that works for the number of tiles So basically I have four tiles. I cut that in half. And so that would be whatever Modular you use and I want to multiply that by a 505 All right, so let's take a look. So now we got these guys On the x axis, let's do the z axis now And let me actually just put down another one just to keep these guys separated here So let's actually copy this because it's basically the same. We just want to divide it rather than Do a modulus. So I just want to do a divide And I also need to floor it because we are getting some remainders from that There we go. Cool. Very nice All right. So now we've got all of our tiles. I'm all hooked back up Very cool Last thing really all you need to do is just drop down a height field splice So height field a splice And then I'll turn it back into a terrain for you From your height map. So let's say, you know, you're exporting out of like world machine or guy or something like that And all you have are, you know, the height maps It looks like I am getting a little bit of a pixel offset here Let's go back up here And Let's do 506 Should be 505 Let's actually do it grid spacing Two was the original grid spacing I used No, I didn't like that at all It's basically just scaling it And I think this needs to be 505 as well Well, we'll leave it there and that's basically gets us Our height map tiles are Basically got the main concept across. I just had to, you know, figure out the one pixel offset there at the ends Um, but yeah, there you go. So if you also wanted to recenter it, you can also drop down another height field transform Over here And you can do the centroid There we go. So we do centroid And zero dx Negate that And we'll do times zero point five I believe Nope, we just need the whole thing And we'll just copy that and Do dz There you go. So now you're all recentered up Cool All right, so that's what I wanted to show. That's how we go and use the glob method to go and find files. Thanks so much


Let's go do not forget to like comment and it's my out tonight. That's exactly why I did the extra steps today I had derma planned so good I look so nice and glowy my body feels so hydrated and we're going out tonight because my cousin is in town It's her birthday. So we're definitely gonna celebrate and like I said, this is exactly why I took the extra steps today Get self-care into play and oh my god, y'all my body feels so good You know what you freshly shaved and then you moisturize your body and your body just feels so Good, that's how I feel right now and y'all been asking me about my body care as well ever since I went to St. Martin Let me push all on because summer is right around the corner But one of my favorite body oils is the Osea and Daria algae body oil and y'all They just came out with a body lotion just in time for summer time. It's lightweight and super hydrating at the same time And not only does this has a Daria. This has collagen in it Yes, a vegan collagen infused in this body lotion and make their products with clean ingredients This is poultry free vegan gluten free like the oil They have a Daria seaweed in their body lotion because it helps replenish your moisture barrier Automatic acid peptide and also turmeric so your skin can be on glow and not only is this for hydration girl It is also good for firming your skin This has clinically been proven to visibly firm your skin in just four hours girl for our words That is amazing You definitely need to add this to your body care routine So you'll be able to get your own Osea and Daria collagen body lotion All you need to do is click the link down below and I do have a discount code for y'all these two together I am a duo. I use this down. This is my favorite oil to lock in moisture So make sure you use my code it'll be on the screen and thank you so much Osea for sponsoring this video Yeah, y'all I feel so good. Okay, literally no better feeling than having a clean house Hi hooded skin in nigga free, okay The feeling is a match, but I have anus run so and also like I said, it's my cousin's birthday So we got to get something fixed for her and then also I need to go get her a gift And then I need to go to the mall to pick up some products that I Purchased online and also I need to go to the good dry cleaning. Yeah, we need to go to the dry cleaning and All this extra stuff. So let me just get dressed. I really don't want to like I really could just stay like this for the rest of the day, honestly, but We got to get the move in so I'm about to put some clothes on and then I'll check much all once I get in the car So but we cute. We cute. We hydrated No, I'll see y'all once I get in the car, but we outside Okay, y'all I just got dressed. I feel so good. My skin is so I try to grow. I'm so I just feel so good right now I'm so happy. So I'm about to make my way to the nail shop because I need to get these dogs done I am gonna get them redone Throughout the week with Tim, but I'm he's sick right now.  I love it for me. So let's go. Let's go. Oh, yeah, you don't get your feet My feet pretty my feet pretty Yes Look at those things Oh How are you? I didn't know y'all had an Instagram page We're gonna need your special She said you wanna be famous I don't want to be famous. No, see you struggling I mean she can I wasn't struggling No, you can't you can't even say no, that's fake news It like overlap Working man's feet Working man's feet That is Somebody come get them in Somebody come get them in 290,000 I'm not even at 400k Small celebrations. Come on look You gotta make a wish You made a wish and look You do too much you just want to do something So this is the fit of the night I have on this Dara Top these leggings are from cuckoo So cute and then my Givenchy short boots Chanel bag and this necklace is actually from Fury so Just a cute little dinner Outfit situation. I was gonna put on my Chanel like Dangly silver earrings, but no So but I'm probably gonna repeat this outfit because it's It's too good. So but yeah I'm on my way to house to have dinner with my cousin and this ponytail situation but Okay, y'all I'll check my child once I Get there You look so cute So y'all we just got back from space Actually, it was a lounge It was cool We stayed for like yeah, this thing was interesting, but I'm gonna go to sleep I'm gonna watch this movie until peacock with tiana Taylor Hopefully it's good. Yeah, so we just came from church and my cousins are in town So we're gonna go to brunch. I don't even know where to go But any who how did you like the service today? It's good. It was great. It was a new was a temporary pastor and He was very very relatable. He was funny But he was hilarious, but he was very You know into his message, which was like super dope, which is what you know We need sometimes and also we were late, but we came at the right time. You feel Yeah, because it's perfect time as soon as we set down. I needed to receive that what he was saying You still remember the three points. Yeah The first one was we missed Yes, we made it right in time for the first fight to go fight remember Yeah fight to go fight run your own race and keep a You thought I didn't remember I like that in my brain He did tell you to get out your phone and take your notes which you did Hello But yeah, we came late and I was a site thinking of myself like wow even though we came late we came Right on time to receive the message. Yeah, so basically he was just talking about Saying that you should be in your own lane focused on you and don't give up and keep faith Because some people get discouraged and looking at other people's lanes and it shouldn't be like that You should just stick to your lane, even though he was saying anything an example like a Scenario where his son was running a race He thought his son was gonna win but then he started slowing up losing and then he started going under the What the hurdles he was going under the hurdles, but he was like, I don't even know he was like I don't know who won that race, but all I know is I was in the stands cheering for my son So if I'm just cheering in the stands what you think God gonna do cheer for you in the stands Okay Yeah, it was such a good service. So now I'm getting ready to go to brunch and We'll go on it Starbucks But yes, it was such What would you take away? My biggest takeaway from this experience is that I'm gonna do it again Oh, yeah, for sure standing your own lane keeping faith and this is your race and God is rooted for you And you know, he said a prayer for us to give us the strength to continue on our race My own race my own lane not even look into nobody else's name my lane Yeah, because he was saying how we are so distracted by the fact that other people are doing, you know Especially due due to the social media We are so fixated on other people's highlights because you know, that's what social media. Yeah Essentially like posting their highlights and we are comparing ourselves to People's highlights not comparing us so like not essentially not comparing ourselves to you know Like sticking to our own lane and staying in our own lane and like, you know moving on our own pace So like a lot of time people get lost in the sauce by like trying to compare them So to other people I Was though I was really it was he was a it was a strange mixture being Chinese and He's from Australia. Yeah, he was But he he was preaching, okay But it's a pro predominantly Yeah, it's black and yeah, it's like a Asian But yeah, so I guess I'll check with y'all once I get to brunch with the girls I'm gonna skew outfit this from Zara if I can find out link it both a good sunglasses Shiny earrings regular jewelry. These my outfit online pants are like becoming a favorite. Okay They need to make it with no like detail in the front. I think the details cute, but a plain leg would be cuter, but Anyways So I'm getting ready to go into Sweet Lounge. I don't I've never been here before So this is where they wanted to go. We missed toast y'all, which is unfortunate, but it's okay I had to definitely make it to church this morning and y'all we got in last night at 5 a.m Y'all see my like I even did my skincare last night.  Have a good one, but what was often to say? Freak was often the same for the go to Sweet Lounge. I'm gonna just log off my phone And yeah, so I'm doing a u-turn. I don't know what the But yeah, I'll see y'all in there once we Dead my head is pounding. I just got off the shower I'm about to do my skincare and oh my god y'all and Lana is so Born to see my cousin came out here for her birthday and My other homegirls that's her friend is like a mutual damn near family She lives out here, too, and she was trying to like see What was going on in the city and There was nothing going on. No, like I mean we went to Where do we go? Sweet lounge we went to sweet lounge. That was my first time being there. It was a good time It was a good vibe, but it was just a big space with a lot of people that wasn't dancing So it wasn't even like vibey and the playlist was It was okay But it was giving like this is a dub. Let's go somewhere else. So then We had end up going to Where do we go? That's that like if that's how you know it was booty But we was just trying to find the vibes but only go out in Atlanta when it's like appropriate Or if it's last minute and you know, we out to dinner and you want to go get a hookah Real quick. I don't even like going out if it's necessary Now in Atlanta, you just I don't know girl It's not giving he said it. I'm good enough. Get in my good enough. He said it. I'm good enough. Get in my good enough and I shouldn't I'm up and sleep so good tonight tomorrow's monday This weekend was a good weekend for sure I'm just so happy my cousin had a good time yesterday was better than today for sure But it was definitely giving it with the hood and my head started hurting So I'm about to I'm actually gonna Make me a little concoction. I think I'm dehydrated honestly But yeah, I feel like every place we went to It wasn't a vibe. So I'm just like yeah, take me out the city take me to another country And then we end up going back to jay's house Then we just watched the movie and we ended up watching the movie on netflix called the mother I don't know if y'all watched that or seeing that trending on Netflix it's with jailo. It's her new movie and it was actually really good. I cried I'm crying. I'm also Coming off my menstrual.  I was working all morning, but my cousin is still here I did end up getting her a wig to put on for her birthday, but Um, oh citizens citizens market just opened at 5 p.m. I'm just reading sign. But anyway, um, it's her birthday and I still wanted to get her something because um We've been talking and on the phone and she's been going through it And that's one of my favorite cousins. I grew up with her. I know y'all don't y'all are just now seeing her Um in the vlogs kind of sort of not really I've been showing her Um in the past hold on the Anyway, she wants bakarai rouge 540 and that's nothing to get grow up. That's like definitely I must have a perfume collection. So I'm gonna get it for her because she doesn't have that so But let me put this camera down because the security man is right here But we finna walk up in here and I gotta pick up my shoes That are ordered. They're so cute So I'm in here. I'm waiting on Daniel to come down and bring me my shoes And I'm gonna try them on for y'all. They're so cute I just feel like they're the perfect statement for the summertime And I don't have like a white pair of sandals. I have the Hermes, but they're kind of dirty And I feel like different shoes just give off a different vibe for the outfit So yeah, I would rouse around here, but I don't have time They're for the clothes and I'm gonna drop this gift off before it gets late and I'm starving But yeah, um But ain't nothing happening in this mall I need somebody to just take me for a shopping spree, please They're on the way, baby. The way where it is simply from This one's like a mind-wide They're not giving me too much, but like and I need a comfortable shoe to wear They're huge They look like I'm pressing in a dinosaur They're beautiful. I need to get them. I already got them. I'm just trying them on Okay, that's what they look like They're so cute But they kind of look a little oversized Does it not look like I'm stepping into like a footprint or something? I don't know, but they're they're cute. I have to make it do Love these wow Oh my god. Can y'all imagine? Vacation Stephanie's on and this isn't bothering me. So that's a good thing All right, y'all, Daniel got me right to come shot with him, but easy breezy We out Mexican food What's this? What y'all watching? What you say? Y'all fell asleep on the movie last night That's what you want, right? Yeah, that's the That's what she wanted


time. So my name is Potash Limab and I work with Olapuram and my course will be about how to do some more case studies. I will discuss only one big case study and a small example from the past year. So probably you all know what Olapuram is. Olapuram is an open source company. Olapuram is a subsidiary of Olapuram who do consultancy around the number of these main developers of Olapuram online. But from all point of view, the most important thing that we are dedicated to enterprise is the product called Olapuram Office and we provide the university support for Olapuram Office. So let's define the terms of what we mean by university support. For my point of view, level 1 support is some basic support for troubleshooting. For example, the inter-count range and to the left has to speak on the table or something like that. So very basic level 2 support towards the poor inter-level. Some configuration, some registry hacking or I don't know. The problem can be solved. So these tasks are usually outsourced to our partners or to our customers who can give us the interest in the native language and usually we don't date those support requests. Of course there are exceptions. But the most important thing that we are doing is the level 3 support and the resolution of the issue requires change in the source code level. And it also requires if you change the source code of course we have to create a building. We cannot wait for six months to appear in the upstream development. So we create a building before this program tamper fits me and they provide the user in the case that I need. So usually the university support should I cycle that depending on the service level agreement that we have with the customer. We confirm the problem and the very at the problem usually happens during the day, business day, I would say. And then we start to fix the issue by today which may take a few days or sometimes it depends on the complexity of the problem and then we provide an ATF payment. So we of course push at least our team to get it immediately to master branch development usually and it will appear in the next level of the strength plan. But if you take time solving it will take up to six months. On the other hand, all of our offices which we are using on a monthly basis up to four months for users, all of this can get fixed that doesn't need for a particular customer. So the case today is about the south-eastern health and social care trust which internally called Vastar Hospital because it's shorter. So the whole picture there's Vastar Hospital. It's an organization in Northern Ireland in the UK and they started a big migration project two years ago and they started to migrate to or product which was called all of our office at the time but now it's called all of our office. So they had a license agreement with Microsoft or Microsoft software this week but somehow Microsoft office was not part of this contract and then they licensed it, they had to renew it at a quite high price which was 145 pounds per year per user. So the primary goal was the cost saving and that's why they accepted our proposal or solution. So we not only provided them licenses for all of our office but also furthering support package which included the matrixes and still price was much, much lower than it would be with the Microsoft office which of course had been without leveraging code support. So S.Torbara is a precutable company in the United Kingdom and we have had the most under of certified developers in the community and we have experience in the diversity support and so on. It reused the release of the migration. So first of all we presented them the standard migration protocol, so the strategy that the document foundation recommends which means that we asked them to install Polaborab office on all the workstations, do not segment the users as like users, normal managers can run with Polaborab office but we suggested to use Polaborab office already with Microsoft office from the first day and of course we also recommended to use the open document format. Unfortunately, the state is advised and they are able to create proprietary migration formats and OSL because they said that it would have been impossible for them to exchange documents with other trusts and organizations who would use ODF. So this of course, as you can expect, caused some problems in the migration but here we are near some of their problems. About three years later we brought a case study about this migration process which is a very requested Polaborab website where we described the technical problems that we ran during this migration process and basically it was a size story. It was after two years of the pilot, this sound system has essentially just created a long report about the project and basically what they wrote that migration is possible at least is the person of the staff can migrate to Polaborab office and the existing issues are minor and can be solved. During the pilot they reported around 130 missions and out of them 108 have been resolved. So I would like to show you a few examples of their problems that we have solved during the course of this project. Starting with the easier, simpler ones and the online kind of show you some, which I felt for outside the technical areas of the single one thing, but rather for the future development. So the first one is the some check boxes, you know you can enter check boxes several days into the document and it was a problem to import and export them but there was a problem with the option to import some of the oversight back in the day about these things. And it's funny how users use the check boxes in different times. So if I saw the form there was at least three types of check boxes, they use small controls, small text controls or even they use a special character which doesn't exist in the form and then we get an empty object. So I had a bugger port which just made me and the way that these developers changed this to and another thing instead of the empty box, so Jack was there. Then we had some problems with the ActiveX form code to us, so we could import them but they were alive in the sense that we imported the EMF metaply in German instead of the picture control. It was an export program, it was not similarly handled in the US and write the documents, but in the end it was not the world of those problems. So now we can export the default text to us. Another example when the user just couldn't resize the table, that actually goes to the margin. It was a clearly defect that could be missed easily. Another interesting example and in the audio team document which was not from Microsoft Office but from the surface of there which is some depredated OSNL signals which was the OZI guy from Microsoft Office, of course, but we had to implement this in the office to show the before and after specials show that we were finally able to import this variation from ourselves. Tables, so when we got an email when the subject is a table issue, we are very sad because I think these problems happen very frequently. The most annoying problem is that the writer, we don't have the concept of a floating table. By word it's quite common. A floating table means that the table floats around the page and the text can run on it, but unfortunately when you click on a table in word and move the mouse or you write on Excel, the table becomes a floating table. So if we are using some heuristic now on the whole, whether it's a real floating table or it's a normal table, which should be very important. So the problem is that floating tables are usually imported in right sections, but those sections cannot span to multiple pages. So we have to use heuristics before we import floating tables to cover up. We have a problem with the built-in time sheets, which is quite important, and ways to get paid at the end of the course, so that the time sheets saved by the OZI were not consumed by the visual basic macro, because the format was incorrect. So we have to use the BFF oscillator from Microsoft, which identified quite a few products in our library that export code. We solved all of these. Another interesting family problem is that third-party companies produce more than no extra data, which is not a bad answer, basically. However, third can point in this, and the users don't care about the senders, they just care about the end result. So we have to implement Microsoft's third behavior and accept invoiced OXML files. So this one is a floating table program before and after the specials pretty much show the result of this workpiece, so you see in the end that we have a table that's made. The managing we have to implement is a little bit of a confusion on their side, so it's a user experience problem. They didn't understand what was going on and asked us to change these message codes that comes out when you want to merge the cells in time. This is clearly the effect found in those of the fashion. Another interesting thing that some users like, they use the documents instead of them. So they put documents into the documents, and those documents appear on the iPhone, so they just prove him files of the word document and embed documents into the documents. In the video here, it's not clear, but I think it offers many, many combinations. You can have, for example, a file in a doc, and you can embed XLS, XLSX, OX in this document. You can have the same with OX, and the video here is smaller in these cases. So we unified this video here, somewhat similarly, but I'm sort of confused what it's doing. These problems, the second problem is in mics, XLS, so it's still not fully released, but they did a lot of work about the invocators, both the documents and the standard compines point of view. So one of the big advantages to have support from a company is that it is possible to find out or suggest the ways where the project will develop. So it's often asked, question, there is the roadmap, but it's on the roadmap about the plan. Actually we implement features, but it's a slack. And if somebody wants to influence on the roadmap, then we do consultancy work, and we are happy to develop features. So for example, the previous dimension, the time sheet, at all get another feature that the empty lines had to be deleted. On the other hand, they were protected, but there was a protection that was not being overwritten in the office. The problem was that XLS is a more kind of protection model, which we imported and exported correctly, but we didn't have the options on the user interface. So this example shows where we added those options. So again, the time sheet filled in in the office, they also wanted to disable some components of the office. For example, they didn't want the base UI, they didn't want the PDF import. And I think in the beginning, they didn't want to mount the intro, but in the final version, they had installed it. And this feature is just about what people create. It means Microsoft install the console files, which are the inside. So when they install the product, they have these options grayed out, and the user interface starts to use applications. Another big topic in development task was the integration with SharePoint. So unfortunately, replacing Microsoft software doesn't only mean replacing office, but more brands that cannot replace, but they need to implement it. So one of these examples was SharePoint, and exporting SharePoint list to God was solved within the course of this application model project. The other favorite feature request was the watermarks. They marked watermarks somehow, and it looked like an easy feature, and we had a recursive feature already. But in the end, it became a nightmare for us, because it turned out that the correct internal availability with Microsoft Office in terms of watermarks and it came to really a lot of time. But by now, I think that the feature is all big, and it's been working perfectly for all five, four months. And it's really compatible with Microsoft Office. So in this hospital, there are users who use the auto text having probably conditions, just typing some radiation, and it was a trend to do this medical text. I don't know exactly, however, we had this sort of problem before, the auto text from the OS format. It was already the binary format before it was present in the office. Other big area, we developed a lot of things, such as the Merge. So Merge, Merge really needs a database, a range of assets and stuff is there, and it's plenty of options, storing data, but in fact, it was possible to use tables, simple tables to use as a data source, but this feature wasn't presently right. Somehow, the users applied this feature and created a new internet for them. The other problem with Merge is that, as I mentioned, they don't use the running format, they use the ranks of running formats, and there are quite a few problems in these formats in terms of Merge. So for example, the management of things, Merge is working as such to run the running formats. It was something else before, it was something extremely of a lice, that was granted to us from the database. It was a featuring word, and they expected the same behavior. But we had a converse, we eventually got to the interface level and the compatibility level that we had to do. Incidentally, these parts were reported to Orban's in-law many years ago, but obviously, nobody fixed them because they weren't easy to use. It was important to have the big customer who actually sponsored. This microfeature, highlight-close customization, is also asked by the hospital because they said that if these highlight-close, they want to customize it, then all right, the customers can have problems in making the distinction between those colors. So this was in the running, it was not a very big work, but it's a nice feature, as I mentioned. And these formats found it interesting to mention that these might as well document how often people take models with the right interests, and they often ask how would the VBA... You have just a couple of minutes. All right. And how would the VBA be in support of the office as it is here? It's pretty good with the VBA somewhat, but who can guarantee that you can run and be a model of the models from Microsoft of these files. So it would be a huge task to implement everything, and it's not easy to do so. What I thought was that you get a macro from a customer that has to be run, and they implement every single piece that comes from each of us. They implement the format number for the function or the option button from the community with the existing button from us. He even met with the world-raising models, which is 20 years old, and I hate technology, but I need that to understand this world-raising models. I'd like to mention, for me, as well, Thor, which is the association yesterday, this is why I just showed you this useful translating from visual-based applications to phone number of these, which this way the phone number of these can be used as a drop-in replacement for Microsoft of these in some cases. It's very useful because sometimes visual-based applications are crucial for mobilization of the source-loving types of systems, and it's not possible to replace it. They are higher-up because I don't have much time left before they also release the proxy detection on Windows, which is an important form of getting the crash reports, and I just assume that the mother seems to have done what I don't have time to talk about them, but the slides will be uploaded. So, with a final word, thank you, Payesh, of course, because all one hand, everything we do is very important, we take back to the world of making and the users who use the office for free, but we should mention that what we do is funded by our customers, and I would like to thank them to the fund for work and which helps making this better for everyone, especially the staff, the staff here, the social staff, and the NG, and the other customers that won't ever see, who won't support, so that was my presentation, very much. I think I used more time than I had, so if you have any questions, you can find me later in the world. That's those questions, so thank you very much again.