ice. So by now we've seen a lot of different brackets in R. So round brackets are used when you call a function, right? So when we use the please give another example of the exponent thing. Sure, sure. Well, what, what do you want to see? So let's just do some live coding. Right. So a lot of people say, why should you write functions? Right. So because if I have, for example, a function, right, so let's make a function that does at least something useful. Right. So let's call it a name of the function is going to be going to be. All right. So is a function, right? And this function takes as an input parameter a and a parameter B. Right. And it's going to do something. So it's going to multiply a with B. And let's make a good function. Right. So let's, let's make a good function that really does something. So generally you write functions after you've written some code. Right. So I don't want to give away one of the assignments because I want you guys to kind of struggle with it. So let's do something like a box. Right. So let's, let's print out a box. So let's call it do box. Right. So do box is a function. It takes a single parameter which is called and roll. That's a bad value because that's a n dot roll. Right. And standard the box contains five rows. Right. So I'm going to say for x in one, two n dot roll. Right. I'm going to do something. And what am I going to do? Well, I'm going to cut and what am I going to cut? So I'm going to cut axis, just a couple with a new line behind it. Right. So now I can say do box. Right. And default parameter will make sure that I now print five lines of axis. So it looks like kind of a square e thingy and R. Right. So if we go to R, then do box makes a little box. Right. And we can now do some new parameter. And this parameter can be like 50. Right. So now we do a big box or a big row of axes. Right. You have to use a little bit of imagination. So if we go back to notepad, right, then we can do a second parameter, which is called the length. Right. So, so let's call it B dot length. Right. B dot length standard is also five. And now here, instead of doing axes, and then I want to do a set number of B length. So I'm going to say, repeat the value X. And how often do I want to repeat X? I want to do B dot length. Right. And then this is my X row or something like that. Right. And now I'm going to cut. So I'm going to cut X row with a new line. Right. So now I have two parameters. The first one defines how many rows I'm going to do. And the second one defines how many axes there are on a row. So if I now do do box, then it will print a box, which is five by five. Right. And it adds spaces to it. So that's perfectly fine. That's just the cut function at work. Oh, you guys can see. Sorry. So if I do box, then, and now I can define. So I want to do a box. And I want to, for example, do a box, which is six by nine. Right. Then it looks like this. I can do a box, which is nine by six. And then it looks like this. Right. So now, of course, when we're dealing with these variables, I could just say, well, I'm going to define, I'm going to be lazy, and I'm going to define my b-length being five first. Right. And now when I call my function, then I will take the b-length from here. Right. So I can now say, for example, b-length is five, then execute the do box function with six. Right. And now I can redefine my b-length to be 15. And then I'm going to say do box six. Right. So any normal person would expect that when I call do box six and do box six, that it would return the exact same thing. But because of the fact that here I'm using b-length, which is not defined as an input parameter, now these two functions will do completely different things, which is of course very unexpected. Because the only way to know that this do box is actually dependent on b-length is to read the code of the function. But the idea of writing functions is to kind of hide the implementation for the user. Right. So by making do box depend on a variable which is defined, I actually run into issues. It even becomes worse when I clear R. Right. So when I say edit, wait, there's an option. So when I just remove all of the objects in R. Right. So now b-length is not defined. Right. It's not found. So now when I call my function do box, so I have to paste it in first. So when I create my function and I now call do box six, then actually it gives me an error which no one expects because like it only has one input parameter. Right. And I filled in the input parameter. So the function should just work, but it does not work. Why? Because the function is dependent on this b-length variable, which should be an input parameter, but it's not because it reads it from the parent scope. And there are some good reasons to do this. I've used like reading and writing from the parent environment sometimes when you're dealing with big data. It's not very common, but it is common enough that I want to stress this is if you write a function, all of the variables used inside of the function should either be input parameters, or they should be internal temporary variables like x-row. Right. It's fine to use x-row here because x-row is defined within the function. So it's something that like goes wrong a lot of the times. So that's why when I talk about functions, I do want to kind of hammer in that don't do this. Write proper code. Don't make your code depend on some magic variable that the user needs to define because it can be very tricky and calling the same function with the same parameter should always give you the same answer, unless it depends on random numbers, of course. But even then, we have ways of dealing with that. Good. So let's continue with the PowerPoint. Right. So brackets. We see in a lot of brackets, round brackets.  Right. So for example, when I do the if statement, so if round bracket, and then inside of the round bracket is the statement that I want to check. Right. So a round bracket is generally something that is used in functions when you call a function, when you define a function parameter list, or when you do statements in control structures. So the square brackets are when you index vectors, matrices or data frames, the double square brackets are when you index a list. And the curly brackets, they define blocks of codes. And this is used to surround expressions. So we know which expression belongs to the if statement, or which, which expressions belong inside of the function. Right. So it, it, it's six in the Pfizer beginning and an end of a block of code. So at the end of the, of the, so at the closing bracket here, R will know, okay, so now the if statement is done, or the while statement is done, or the function is done. So just as a handy overview for you guys, so that you can kind of look up which bracket should I use, because I know from the assignments, because the current assignments will be relatively hard. And that is, I think good, because you can only learn programming when you kind of run against problems that you either have to Google, or that you have to kind of figure out. But if you, if you just do assignments, right, and the assignments is just following or typing in code that some other person gives you, you never learn how to program. Learning how to program is kind of struggling with errors, figuring out what the errors means, fixing the errors. That's where kind of the whole air folks, I laid this from programming comes from. For if statement, do I need to use idents and curly brackets? Yes, clean code means that you want to make clear where something starts and where something ends, right? So in this do box function, which I'm going to fix, because it's now a bad function, because it depends on something else, right? So when I define the square bracket, or when I do use a curly bracket, I do spaces. And when when I then open up a new section of code, right, because this is the section of code that belongs to the function. And this is the section of code, which is inside of the for loop. I again do indentation. And the indentation is not necessary in our, but it is there to help you figure out what's going on. I could write this whole thing on a single line and our would not care. Because I could just say, well, I don't use the indentation, I'm just going to use like this, right? And I just do just comma to specify where the end is. I don't even need the last one, because I can just say, well, that ends there, right? But it's just clear like this. And then in theory, I think I could even put the whole thing on a single line, right? So then, but no one can understand what's going on here, right? And no one's going to zoom out this far to see your whole function definition. So work clean, right? Write small lines of code. Every line of code that you write should be it should be visible where it starts where it ends where it belongs to. Okay, Leonardo Proust, is it better to use tap or space? It does not matter from a programmer's perspective. But if you want to earn money, you use spaces. People who use spaces generally get paid 10 to 20% more money for the same job as people who use tabs. People who mix tabs and spaces get paid just as much as people who use tabs. So use spaces, spaces earns you more money. I don't know why there was this whole stack overflow, like big research thing that they did. And they just figured out that if you use spaces, you get more money. It's just that's that science that they just did the research, they just asked or they, they spidered a whole bunch of these open source repositories. And then they compared people's income to which one of the two they were used or which one of the three, right?  But in the end, the conclusion was, if you use spaces, you get paid 10 to 20% more money for the exact same job. So use spaces, that's all I can kind of conclude for that. But is it better? I don't know. There's no real better in this case. But do a dentation, that's the important part. Make sure that when you look at code, it looks nice and clean. The thing which I like about spaces, and that's just a personal preference, is that they are not as annoying in Notepad++. Because I actually have it set up that every time that I press top, it actually will put two spaces for me. But like you can see in my editor, and I have to probably zoom in, I don't know if it's visible, but there are these little very invisible yellow dots here. And you can make them much brighter, but trust me, they're there. So if you look very closely, you can see that there's like four little dots. And in Notepad++, and to actually get a tab, I have to open up a data file, just because I don't, all my tabs automatically get, so tabs look like this in Notepad++. So if I would write the same function, and I would use tabs, then it would look like this, which is okay, right? Like the indentation is still clear, you can see that this is one level deep, this is two levels deep. But I don't know. For me, spaces are where it's at. But some people like tabs, and as long as you use it consistent, don't be a madman, don't mix spaces and tabs together, because then like it just gets everyone crazy. But in R, there's no, no rule on if you should use spaces, or if you use tabs. But it is one of these things, like, either one is fine, don't mix them. It's like drinking booze. Right?  That's just crazy.  Good. All right. So we had almost done, right? Because we have functions, we have variables, and all of these things. And actually, after these two lectures, everything's complete, you can write a complete operating system by just being aware of tabs and not of tabs and spaces, but by being aware of the fact that you have variables, you have control structures, and you have functions. And there is nothing more. There is no more magic in programming. Programming, the whole computer just does nothing else than execute if statements, do while and for loops. And besides that, there is a little bit of talking to hardware, which is also using if statements and for loops. And generally, it's just executing a function. So after this lecture, you are fully fledged programmers and you could program anything that you want. But of course, there will be more lectures just to help you guys along. Good. So the last, no, this is not the last topic. The one to last topic that we have for today is escaping the inevitable. So about strings, right? They are enclosed by using double floaty things or single floaty things. We can combine strings using paste, right? We've already seen that in the first assignment when you paste measurements with a vector. You can print them to the screen in R using the function print. Like you saw in the examples, I generally use cut. So cut is exactly the same as print, but cut is nicer because it allows you to not only write to the screen, you can also directly write to a file. And generally, you want to write to files because having the output on the screen is nice for when it's five plus five. But when it's RNA seek data, you want to write it to the to the hard drive. And using cut gives you flexibility, right? Because you can say write it to the screen now. And then once you check that everything is okay for the first couple of lines, then you can say, okay, so now I'm going to write it to the file, and I'm going to do it for all 100,000 elements that are there. So paste is there to paste two things together. Print is there to print things to a screen. And cut means print them anywhere.  But the mouse in theory, you can, it's an output device in a way. That's more of an input device, but you can use it as an output device as well. So about strings, forgetting to close a string happens a lot in R. And it is one of these things that people run into during the assignments, and you can struggle with it for a very, very long time. So in R, no command after we'll produce output. Right? So if you are in R, right? So imagine that let me go to R, right? And in R, I'm, I'm typing. So I'm saying I have a variable and I want to put a string in and blah, blah, blah, blah, and something more and something more. And I press enter. And I forgot to close it. Right? And I think, okay, everything's fine. I made a string, right? So I, I now know that, but normally you don't know that you're missing a bracket. And now I'm typing five plus five, right? And I'm like, why the hell's nothing happening or five plus five, right? So why the hell's nothing happening three plus seven, why the hell's nothing happened, right? Because like, I expect there to be output. But I forgot to close my string. So the only way that you can kind of detect this little error, which comes up a lot, is to look in front. So in front, you see here that input lines in R start with a larger than symbol. And when I'm still inside of something, which I did not close, it uses pluses, the same thing holds for if state.  So press stop. And now you will see it will give you a larger than symbol again. The same thing happens for if statement. So if I say if five smaller than six, do something, right, so I open up a block, then the same thing holds here. So now you can say got, and I can do something, right? And then nothing will happen until I close the bracket, right? And now it will execute the command because five is smaller than six. But this plus symbol in front, and that is a clear sign, especially when you are defining strings and stuff, that something went wrong. And this is something that is very common for people who start out with programming to fall into.  And I didn't. And now I spent all of this time just trying to do stuff. And I didn't get any output. So when you don't get any output, while you expect output 70 to 80% of the time is because you forgot to close a string. The other 20% of the time, it is because you opened up an if statements or another a block of code, right, an if statement, a while statement or a function. And you haven't closed the final bracket yet. So if you notice in our these little plus symbols, press the stop button just to force our to stop what it's doing. So stop making a string or stop making something else. And then this will really help you. And I added this slide because first time that I gave the assignments, people got stuck on defining a little string. And this becomes even more troublesome with the escaping the inevitable part, because Helen Neama, this explains a lot, had a full line of plus while doing the assignment. Yeah, yeah, no, I know that it happens. So that's why I made a slide for it, because it's something that's so common that during the assignments, and when we do the assignments in person, I can just walk and say, Oh, wait, wait a second, like there's pluses, so press the stop button and try again. But that's also the reason why I tell people never to program in our program in notepad plus plus, then just copy paste it into our it the same thing can happen. But at least notepad can help you a little bit with figuring out if something is closed or not by having like the highlighting. So it does happen a lot. And especially in this part, where we are going to do string escaping, because escaping the inevitable means that when you have if you print two things together, then you print it to the screen, you can use cut to do the same thing. And then you can say file is out.txt. And it will directly write it to this file. But the problem comes in when we want to print this character itself to the file. It sometimes happens that you want to print the like double air quote thing, especially when you're dealing with text or other things, right? It's just a standard text character, which might occur in a text. So if you want to print this thing, then we need to escape it. You need to escape the character. So there are a few characters in R that need escaping. So the ones that need escaping are quotes. So the double air quote, the single air quote, and you just escape it by putting a slash in front of it. A new line. So the enter on the keyboard is also a text character, right? Because text contains enters. So you need to be able to put enters in text that you make. So the new line is also a escaped character. It is defined by slash n. The top character, so pressing top on the keyboard is also a normal character, which occurs a lot in text files and data files. In tab separated files, there's a lot of tab characters. So to have our output a tab separated file, you need to print or you need to cut tabs to a file. So you can do that by slash t. Since the backslash character is the escape character, to print a backslash character, you have to escape it. So printing a backslash to a file or to R to the window, you need to say slash slash. And then there's a special one, which is the backspace, which is the backspace key on your keyboard. Also that is a typable character in R. So you can do slash B to have a backspace character happening in R. So let me guys show you a couple of examples. So here you see that when I do cut without a new line, then the new input, so the input will continue on the line where I did the printing. This of course doesn't look very nice. So generally you say cut and you say, for example, hello world. And then you say slash n. So now it will print or will print the text to the screen and it will do an enter and then you continue on the next line instead of continue on the same line. If we want to print hello world and then add like this floaty air thingy or floaty air thingy, it's actually called a quote. So a double quote, right? So if we want to print a double quote behind hello world, we can do it like this, right? So now it says hello world double point space quote. If we want to do a slash, it's the same thing. So we do slash slash, right? So now we can print a slash character. We can print a top character as well. So we can do slash T. And of course here, we see that it just goes further apart. And we can also use the backspace character. So if we say, well, slash B, because I want to remove the D from world, then this also works, right? So now we have hello, a tab character, then world, and then the D was printed, but then back spaced out of the string. And this is the way that you can more or less build up more complex strings. So this is always very difficult. And here, especially here with the backspace backspace quote, the backspace double quote, this often runs into problems of having not closed strings properly. Because the string highlighting in notepad plus plus can be relatively difficult, although notepad plus plus understands it, it sometimes goes wrong. So if you do something like this in notepad plus plus, then now it cannot figure out where the string starts or where the string ends, right? Because it doesn't know that this is an escaped character. But you can only remove one letter. No, you can remove as many letters as you want using slash B, right? They could remove another one. It's just, it's just like a string is like typing on a keyboard, right? So here, the string here says, press the ha on the keyboard, press the E on the keyboard, blah, blah, blah, blah.  And now we can say, press it again, right? So now this would remove the L as well. We can remove the whole string by just adding more slash Bs. Just eat it up. So backspace is like a string is just interpreted from left to right. So R just looks at the first letter, prints it to the screen, second letter and so on and so on. Good. All right. So these ones need to be escaped. There are more. There's a slash zero, which is like the end of a string for C and C++. But these are the ones that you have to be aware of and are very commonly used in normal text. So that you have to, what is the point of slash B? Well, if you send it to a printer, then slash B is a reasonable character to sometimes print, right? Because you want to remove, like it's really useful in when you do a string of things. And it's relatively useful if you want to do kind of fancy stuff. I mean, you could just leave out the character you want to have deleted. Yeah, if I define a string like this, yes. But if I do it in a for loop, or if I do it in a function, which I call, then I might not want to do that. And it's interesting in a way, because it also allows you to do things like progress bars, right? I might want to have a function which shows me a progress bar. And if an error occurs, then I want to have the progress bar run backwards in R. And you can do that using the slash B character. So it's not completely useless. There are some very, very specific needs for having a backspace character. You have a backspace on your keyboard as well, right? Like you could have just typed in the text like proper, but you made a mistake. So you have to press the backspace key. So that there's a reason why it's on your keyboard. And if there's a reason why it's on your keyboard, there's also a reason that you might want to trigger it using a program. Is that a good answer? Or, but because like, I always wonder, I have some code that I use slash B just for the fun of it. But it's not something that you use daily or something. Like it's not that bad. But I use the backspace character on my keyboard a lot. So during programming, you might want to use it as well. And you can do really nifty funny typewriter thingies with it, right? If you would just have like a text from, from a file that is a very big file that you want to print with like delays, like we can, yeah, it's after five. So let's just do a funny, funny thing then, right? So display text like a five year old, right? It takes as the input my text. And then you can do something like four, let's four. So the first thing is we need to string split str split, right? Because we need to get the letters of the my text. And then these are the letters, right? And now we can say for the letters in for L in the letters. And then we can do something like cut L. And then we can say sys dot sleep, run if one. And then if, yeah, let's just run if one, if run if one, smaller than 0.0, 0.02. What do we want to do? Then we want to say cut a slash backslash character and to sleep a little bit again, right? So we want to sleep a random amount of time and then we want to cut L again, something like this, right? So just as a little nonsensical example for the thing. So now we would have like a function which displays text like a kind of five year old typing on a typewriter. So and then we need to get a long text. So let's get a long text from somewhere. Let's just take the moodle standard text. Split is missing. Yes, she's like this. And just say this is the text that I wanted to do and then display text like a five year old. And then, right, so just as a little example, we need to have some text. Let's add in some random enters as well. So we can see kind of what's happening. So we can do the cut and slash new line. Just a little bit more of the time. That's not a lot of why does it not do this? Cut L slash B. Let's do this just more often and do this more often as well. So it's like 30% of the time. Sister sleep, I think it's cold like that. Just don't remember the sleep thingy. I think that's the, so it's with a capital. So now it should be a little bit more fun, fun. I don't know, why does it not, so it sleeps, then it does a run if, then it does another run if. Why does it not add new lines too? Anyway, so oh, you can't see it running. Sorry, I'm not showing you the screen. Yeah, sorry, I'm, I was just coding and not looking at the, but it doesn't put in the new lines actually. So let me actually do, so this is here, so then it should be here to R. I have no idea why it's not, why it's not cutting the new lines, because I'm just wondering why the new lines don't get, and there's a lot of spaces in there as well for some weird reason. So then we do it like this, a little bit of debugging, because this would just print a whole bunch of new lines, but just print one. Ah, I'm sorry, unlist. I am sorry, the unlist function is very, very powerful, so you have to use it sometimes, but now it should be more or less like what I wanted to do, and I would just print a whole bunch of them, that's good, so we can just delete the hashtags for. So now we have a little function that does a little bit more. So it's just like, but still does it on one line. So let's just remove this one. So it's, and then this one should be 2% of the time, and this one should be like 3% of, no, 5% of the time, right? So, so now it seems like just someone typing in a typewriter, and sometimes you have to go back, right? Like it's not something that you use a lot, and I'm just coming out of, so like, it's just, but you can do these kinds of things, right? Like it's creative, in a way. This is of course not the best way of doing it, but it does seem now like someone's typing in a typewriter. It's not that useful. But for progress bar, sometimes you want a progress bar to go back, and then you use slash B. So that's the only reason why I think it's, it's probably in there because of the fact that you can write to printers and other machines as well, right? You can think about sensors or an external or an external device, which responds to the backspace. So that's probably one of the reasons why it's there. All right, let me see. How many slides do we have left? We still have 10 slides left. So we do need to do another break, I think, very quick break. And then I do want to get rid or I do want to get through the last ones. So let's have a vote in chat again. Do we just want to plow through for another like 10 minutes? And I'm just gonna not do anything interesting or not do like these kinds of things. But I'm just going to go through the slides, so that we just, I can say what I want to say about the slides. Or do we want to do a break? So throw in chat, plow through or break. And we can watch this thing like type it. And the nice thing is, is if you display it again, right, it, because of the random numbers, it will always generate a new way. PT plow through. Okay, okay, I'm up for that. I'm up for that. Like it's, it's pizza day. So, all right, Shia Valdez slides, which is also good. Sorry, I'm just butchered your name. Shia Vash Felizade. Is that okay? I'm wondering. So you create a sort of chatbot. PT, okay, plow through, plow through. That's good. Okay, then we're gonna plow through. Yeah, you can, that's the nice thing, right? Like, I don't know why that guy came up with something like this. But you can, you can do things with programming. So, and these things don't have to be useful all of the time. They can be just for fun. And for fun, you need a backspace, because backspaces are cool. Otherwise, they wouldn't be on your keyboard. Good. All right, so let's plow through. So we talked about string escaping. The backslash is one of them. There's probably more, right? There's probably a delete key as well. I didn't put it on here, but there's probably a delete key as well. That's probably slash D or something. But I never used that one. I did use the backslash. So just so that we know. Good. Okay, so when using cut, we print verbatim, right? Meaning we need to make sure to add at the end of the line. Otherwise, R continues on the same line. Not only that, but when we use cut, we can use this separator parameter to specify how we want to separate elements. Right? So we can say cut hello world. Don't forget the new line, separators comma. So we say hello comma world. We can have cut hello world with separator being space, and we can put a separator to being minus. So there's different separators that you can set, and it will automatically use those. Good. So the last thing that I wanted to discuss for today is random numbers and random distributions, right? Because in the end, we're working in science. We want to have reproducible research. And that also is means that when working with random numbers, we also want to have reproducible random numbers. And this is one of these XKCD comics where it says int get random number return four, right? And of course, this is a perfectly valid random number generator, even though it always generate or always returns four, which we now know. But if we would not know the output of the function, right, and we would just say get random number, it would return four, we would say get random number, and it would return four. Again, we have no way of proving that this, this function is not a random number generator, because we don't know how it generates the numbers. But it's an interesting kind of thought experiment, because no one, you can prove that something is really random, right? You can only say that, well, there seems to be a structure with a certain likelihood. But in the end, it could still be random. So uniform distributions, I think everyone knows about uniform distribution. So every value has the same chance of being drawn in R. It's the run if function. And if you generate 10,000 to 100,000 uniform numbers, then it looks kind of like this when you make a histogram. So uniform numbers are drawn, the minimum number is zero, the maximum number is one, inclusively. But if you look at the histogram, it means that every section of the of the plot has the same probability of being drawn. So that's a uniform distribution, very much used when you have a group of students, and you select one of the students to answer your question, right? Because every student has the same chance of being like you answer it, right? That's how I imagine a uniform distribution. There's the Gaussian distribution, also called the normal distribution. Values near the mean have a higher chance of being drawn. In R, you can do this using the R norm function. So the R norm function draws an X amount of numbers from the normal distribution. So the standard normal distribution has a mean of zero and a standard deviation of one. You can specify in the function parameters, the mean and the standard deviation, in the run if function, so the R uniform function, you can also specify the minimum and the maximum value. So it has an N, a min and a max. And here it has an N, a mean and a standard deviation. Then we have the Poisson distribution. So Poisson distributions are special distributions because they are distributions are made up of integers, so whole numbers. And numbers at the lower end of the distribution have a higher chance of occurring. And the way that I always imagine a Poisson distribution is, if you would look at a, at a bush of flowers, right? And the Poisson distribution is the number of bees on a single flower. Some flowers will have zero or a lot of flowers will have no bees on there. Some flowers will have one bee on there. Some flowers will have two, but that's already much, much less. Right? So this is just the number of bees that you can observe on a flower when you look at a random flower, right? And Poisson distributions are always whole numbers, because you cannot observe half a bee. Well, you could, but generally we don't consider half bees to be interesting. Okay, good. So when we talk about randomness, we want to have repeatable randomness, right? So if you, if we need repeatable randomness, so if we have a function, then we want randomness to repeat. So to do this, we can use this set seed function. So the set seed function is like resetting your graphical calculator. When I was doing mathematics in high school, then when we had an exam, everyone was forced to reset their graphical calculator. And the reason for this was is one, it deletes all of the cheating notes that are in your calculator. But it also allows the teacher to have you generate a random number and then do something with it. And then everyone in the class gets the same, right? Because everyone in the class after resetting your graphical calculator, the first random number that you draw will always be seven. The second one will always be nine. The next one will always be 12, right? So it starts again from a fixed point. So every time that you, at least that was in my high school. So in my high school, the first thing that it said on the on the on the exam sheet would be, take your graphical calculator, reset it, draw five random numbers and write them on the piece of paper. And if you had the wrong five numbers, then the whole exam was invalid because you didn't reset your calculator. So they assumed that you were cheating and you had cheat notes in your calculator.  You just had to make sure that you set the seed of your graphical calculator back to the factory default seed, which was just known because it was written down in the like manual of your graphical calculator. So once people figured it out, everyone started cheating because everyone could use cheat notes during math. So then they quit the whole thing with doing it. Anyway, to have repeatable randomness, you have the set seed function. So when I set my C to one in R, and I do five random numbers between zero and two, and I round them down, then I get 1120. And you can check this in R, right? So you can go to your R when you can do set seed, you can say set seed one, let me show you guys are right. And then I do round. And I do run if, and I do five numbers between, what was it, zero and two. Right, so I get exactly the same, everyone in the world, everyone who uses R, if you set your C to one, you draw five random uniform numbers between zero and two, round them down, it will always be 11120. Right, so that's, if that's how it works, right, because otherwise it wouldn't be repeatable. If I set my set to C to two, and I do the same thing, then I will get 01102. So if I want to have repeatable randomness, the only thing that I have to remember is to set my seed back to a certain fixed number. And you can choose any number as a seed. And then from then on, all of the random numbers that are that you draw will always be the same until infinity. So you can draw an infinite amount of random numbers. If you set your seed from that point on, all of the numbers will be similar. Good. So just as a tip for you guys, if you ever write algorithms, or if you ever need to do something with like simulation, right, where you want to have your simulation come up with the exact same answer as the previous simulation, you can use the set seed function and random numbers to kind of force that. So again, programming is like working in a lab. Make sure you work clean, right? So that means use proper indentation.  Don't start mixing spaces and tabs. Keep variable names logical. And then make sure that you code in a single directory. So I always have three folders on any project that I do here as a professional programmer. So I have one folder where I put all of the input data. And this folder, when I'm on Linux, I make this folder read only to make sure that the valuable input data that we spend tens of thousands of euros on collecting or doing samples and then sending it for sequencing. When I get that data, I put it somewhere and I make it read only just to make sure that I don't accidentally overwrite my input data. All of the code that I have goes into another directory. And this whole directory is put into version control. Any output data that my code generates is put into another directory, not into the input data folder, just to prevent overriding input files and losing hundreds of thousands of euros of data. And that can happen at the blink of an eye with a computer, especially when you're not paying attention or when you're programming on a Sunday. So don't be that guy that deletes five years of work or 10 years of work of a lab just by not making sure that the input data is set to read only and that it's in its own folder in its own directory on the hard drive, right? It happens. It happens to the best of us. Like NASA lost moonlanders because of dumb programming errors. So make sure that you're not that guy that screws up the whole lab. Good. Clean code also means that you have to think of speaking names for variables and functions, things like my some account or total or those are names which you can do something with. Don't be that guy that leaves behind code which is called variables called AA or ABA or X, X, A or these kinds of things. It does not save you time in the end. It just makes it harder for yourself. When you code more than a couple of years, going back to your old code, being able to read it and understand it without having to figure out what X, I, I, I, J and J, I mean is like a time saver. You will think yourself not now, but in the future. Now it will feel like an extra chore. But in 12 years, when you look back on your code, you will be happy that you came up with good names. Use indentation to denote blocks, use spaces because you earn more money. Align your comments. Comments should align at the end. You are not a madman. We are dealing like with coding as being in a lab. We are professionals. So use indentation, right? So when I open up a block, everything goes two spaces forward. When I open up another block, everything goes another two spaces forward. Make code readable for others. Don't be that guy that writes the next Facebook and then loses everything because no one else can understand your code and no one else can maintain it. Good. So in science, we need reproducible results. So make sure you can run a script without errors. So write your answers in Notepad++ or write it in another editor. At the end of the day, do Ctrl A, Ctrl C, go to R, do Ctrl V. It should run from beginning to end without any errors or warnings. And that's the way that I try to do my coding.  So when I go to Notepad and I go and I say View and I want to have my folder as a workshop. And I go, for example, to a random project that I have on my hard drive, like data analysis for Texas. Or I can go to, for example, whatever we want, whatever we want. So we go to call a code that I wrote for an equal, which is very, very old code. Yeah, so this won't work because it's still on my D drive. I don't have a D drive anymore. So but in theory, that should work. But let's take some more, like, random code, right? So let's go to Heymo Lisa's expression, right? This is my code. And my code, I should just be able to do this, right? So Control A, Control C, go to R fingers crossed, right, that I don't like mess up myself. So copy paste, right, should run from beginning to end without having any errors. Right? That's the way that you should write code. Also, you speaking names, mean 11, mean 17, right? Data kidney parental kidney, right, it makes sense, you can read, you can understand what's happening. Right, this is biomarked, so we're doing stuff. So I just re ran part of my analysis, and I'm 100% confident that it worked because it just run from beginning to end. So write code like that, that is really important, because if you are working as a programmer or bioinformatician in a group, your professor will come to you in two and a half years, and will ask you, could you rerun that analysis that you wrote two and a half years ago?  Well, not just that, but you might actually lose your job, because in the end, you are there to make sure that everything works. So be a professional. Spend the time now, don't spend the time later. That's it. Any questions, any remarks, any comments, any likes, any dislikes. By the way, you guys can like the video, it really helps for discoverability on YouTube. And I want to thank you guys for being here. It's been a long one, but I think we managed to get through. Thank you guys for the questions. I really like having questions because it just makes it more interactive. And it allows me to write a little function that lets me output text like a five year old who does use the backspace key and doesn't type it in perfectly. And I am going to do another try. It's called si ja fash. That's okay, right? Si ja fash. Yeah, I try, I try. No worries. So thank you guys for being here. If there's no questions, I will just hang around a little bit. So just you guys might come up with questions. It's a Persian name. Yeah, it's a nice name. Okay. Although I butchered it the first time that I tried to say it. I actually wonder why you call yourself CI in emails. That it's like, if you have a good name, strong name, use the whole thing. All right, David, see you around. And do the assignments, of course. The assignments are not on Moodle yet, I will directly upload them so that you guys can start. Let me actually do that live because I did change some little things in the assignments again this year, just to make sure that no one can go away with well, to avoid the butchering part. That's a good reason. Let me go to our course. And then we go to assignments two. And I will then save it as a so the assignments are relatively difficult. So don't be scared of the assignments, I lecture three are I think easier than lecture two. And it is hard, but it is just to force you guys to be professional, ask questions and kind of really learn what it is to be a programmer, right?  And the assignments are online now, at least on Moodle. And I will upload them tonight on my homepage. Because that takes a little bit more effort because I have to log in and these kinds of things. So thank you, thank you, thank you guys. Thank you for being there, like without your questions, it's not as fun. And it's just the same thing as last year. And I'm here for you guys. I was a little bit disappointed that no one showed up this morning. I offered you guys that you could come and have me help you with the assignments. No one showed up. That's a little bit like sad. But in the end, like I assume that because no one was there that everyone did the assignments and everyone was able to finish them perfectly. And of course, if you want to have some feedback on your assignments, I'm also more than willing to look at your assignments and give you some feedback, of course. It's not that bad because I say the assignments, you don't have to turn them in. But if you have a solution and you think, is this correct? Or am I doing anything wrong? Then I'm more than willing to help. Question from chat, what are the COVID regulations over there? Well, at least in our building, you still have to do this the whole time. So you have to wear a mask inside of the building. When you can't keep your distance, you have to wear a mask. But in Germany itself, I think the only requirement on masks is in doctor's office, hospitals, public transport. These things still require FFP2s for the rest we gave up. So we just roll over and said, COVID's gone, which I don't agree with, which I definitely don't agree with. So the rules are very minimal.  It's a disease that spreads via the air. It's a virus. We have no idea about the long-term effects. The first time that people discovered that HIV was a thing, it was also like, yeah, well, it's just a virus.  And then like five to 10 years ago, or five to 10 years later, people started developing AIDS and then all of a sudden was, oh my God, this is really bad. Fortunately, it's only in the gay community and not really in the whole community. COVID says, see you next fall. I think that, yeah, I'm not going to do any like long-term predictions or stuff, but read the papers that have been published in Nature at the end of last year, especially by the guys from the Wuhan Institute of Vorelogy and look at how China is reacting to the current COVID outbreak and then start realizing that we might actually be wrong and the Chinese might actually be right and then realize what it would mean if it really turns out to be HIV-like and taking over your immune system long-term. I'm wearing my mask zealously from the beginning because my Chinese friends all tell me, wear your mask. And my Chinese friends are good friends, so they want the best for me. So if my friends tell me wear a mask and don't get the virus, then I will wear a mask and don't get the virus because I think that that's the smart thing to do. But that's just my opinion, like other people can think differently from it. But I don't know. I'm undecided about it. But I do go outside sometimes without my mask to smoke a cigarette. And I'm not as careful as I should be probably. We'll see. Good. So I see the freeware number dropping. So thank you guys for being there. Yeah, better safe than sorry. That's always the best approach, I think. So viewer numbers are dropping. So thank you guys for being here again. And end of the lecture. Do the assignments. And if you need any help, contact me by email. Don't wait until next week in the hopes that we can do it in person. Start working on ready on it this weekend. It will take you somewhere between half an hour to two and a half hours to do the assignments. Alright, see you guys next time. And see you next week, at least here. And I hope in person. But if not, then next week here. Alright, so catch you on the flip side.


St. Lucia's most august decision-making chamber, the House of Parliament, remained without a deputy speaker for nearly five years until the Pierre administration assumed office in 2021. Prime Minister, Hon. Philip J. Pierre and government legislators have taken steps to ensure the business of the people of St. Lucia in the lower House of Parliament is conducted in conformity with the Constitution and standing orders of the House of Assembly. This constitutional amendment is to end the violation of Article 46 of the Constitution that has taken place for more than five years in this honorable House. The Prime Minister has sought Parliament's approval to amend the Constitution of St. Lucia to ensure the position of deputy speaker is compulsory occupied as has been the convention for more than three decades before it was discontinued. And you know, the tragedy of all of this is that when you see you have to amend a document like a constitution to protect the country from an individual like the former Prime Minister who became the Prime Minister of this country, albeit on the basis of the support of the majority of the people of this country. We now face the situation where we have to protect the Constitution of this country from that kind of eventuality, that kind of problem. For the simple reason that he disobeyed, he disregarded with impunity a convention that had existed in this House that is the opposition had declined the nomination of appointing a deputy speaker. The responsibility was that of the government of the day to honour the letter and the spirit of the Constitution. Parliament's approval of the Constitutional Amendment would guarantee the election of a deputy speaker and also ensure the position is filled immediately or no later than the following sitting of the House. So to clarify it, Mr Speaker, we're doing it the right way and that is the difference between us and them. The deputy speaker may be elected either from among the members of the House who are not members of the cabinet or parliament secretaries or from among persons who are not members of the House. From the office of the Prime Minister, Rihani Yazudo.


Hello everyone. We are just about to get started with today's webinar. We're going to let attendees trickle in to the audience before we get moving. And I want to welcome you all to another Drupal Association hosted webinar this time with our partner tag one to talk about a really interesting and really powerful case study. Before we jump right into the content. I'd love to do a little bit of housekeeping. Which is as you join us feel free to use the chat link in the zoom toolbar if you want to say hello to each other, make introductions. Chat about the presentation as we go you certainly are welcome to do that and we encourage you to do that. We'd love to know where you are where you're coming from as you join us. Also, we're happy to take your questions as part of this presentation. We'll have a section for q amp a at the end of the presentation in particular. So go ahead and use the q amp a tab if you have any questions as you're joining us, and we'll try and answer all of those there. Live captioning has been enabled on the slides does as well as a machine can so we'll see how things go there. And again welcome and thank you very much. All right, so I think we're going to go ahead and get started so thank you again everyone for joining us. On the Drupal Association hosted webinar with our partner tag one, we're going to talk about building an internet for global global 10 company, driving innovation fostering real time collaboration with ygs and Drupal. This is a really powerful case study about an organization using Drupal at a scale that's beyond most of what we can comprehend an organization with over 150,000 employees. I think there's a lot to learn from this presentation from the preview I've had myself and I hope you all enjoy it very much. So, with that, let's give some introductions here. So, my name is Tim Lennon I'm has to net on Drupal at org. I'm the CTO here at the Drupal Association, been in the community for over 15 years and I'm sure you've seen me around before. I'd like to encourage everyone joining us if you don't know more about the Drupal Association you can visit us on Drupal at org slash association become a member and support the Drupal project by supporting us as the nonprofit foundation. And with that, I'd like to hand it over to Michael Myers the managing director of tag one consulting to introduce himself and kick us off. Thank you, Tim so much really appreciate you having us to everyone who has joined us thank you for taking time out of your busy day. Hope you enjoy today's presentation. I'm really proud to have been a part of this project. This was an amazing effort across organizations, working together as one team. We can disclose who the client is but it's an amazing company with even more amazing people that we get to work with, and I'm excited that we can at least share and demo some of what we've done. So before we get started just a quick backgrounder on tag one, we're the number two all time contributor to Drupal, and we build applications for the largest global companies, as well as well known organizations in every sector, using Drupal, as well as many other technologies. As Tim mentioned at the top, I would strongly encourage your organizations to support the Drupal association is very meaningfully driving our business is why people come to us. It's why people want to come work for us, your engagement and involvement in the community and your support of the community will be an investment that returns massive dividends. So there are also one of the Drupal seven extended support providers and tag one quo which is our extended support product and service is trusted by the biggest users of Drupal. So if you need to continue running your Drupal seven site and can't migrate. We have you covered. If your D seven sites are meeting your organization's needs and you have no business read reason to migrate, then you don't have to, and we have you covered. And even if you do plan to migrate and upgrade, and you just need more time to do so, we can help you with that as well. Tag one quo enables you to continue to securely run and build on Drupal seven for another seven years after end of life in November of 22 next year. So, I'll start today's case study webinar with a quick background on the internet, along with some usage data just to kind of put things into context. Then we're going to talk about the growing pains and the challenges and what happens when a popular application can't continue to keep up with the pace of innovation that an organization requires. And we're going to touch on a really interesting challenge and unintended consequence that arose from the company adopting more and more SAS products and building more and more internal tools. Then we're going to focus on how we address these challenges by building a new internet using rapid prototyping and highlight some of the cool things we did like real time collaboration in Drupal. I'll give you some insight into the results and hopefully leave some time at the end for questions and Tim, please feel free to jump in as we go. So, to kick things off, a quick background in the situation that led to this project to give you a sense of things. This internet is a truly mission critical system that's at the heart of one of the largest companies in the world. It serves a very large and very active global user base, nearly one in three people that can access the system, use it every day. There's thousands of spaces or groups or whatever you want to call them in the system. That's where individual teams or projects or products or even special interest groups are going to get together, and they're going to collaborate on that thing that topic. These spaces contain millions and millions and millions of pages of content in many, many languages. There's over half a million files in the system, another 500 something thousand stored elsewhere and referenced. It's running on a massive global infrastructure that's fault tolerant to ensure it's like incredibly fast and always accessible. And, you know, it is an important part of how this organization collaborates. In addition to the internet, the organization also relies on a lot of other tools to foster collaboration and drive growth. Like most, they're adopting and relying more and more on SaaS solutions, things like Slack, Box, Quip, Tableau, Rike, list goes on and on and on. And it's great because these enable their teams to use the latest and greatest tools which helps keep them on the cutting edge. You know, so it's a huge benefit for the company. They also have a fast growing number of internal tools and applications that facilitate getting things done. You know, whether it's something that only they can build because it's internal or like the internet that we're going to talk about something that they want to build because they want a lot more control over it. And having this ability to create all of this custom tooling is another huge asset. And so by enabling their teams to use the tools that they want that they feel are the best for the, you know, the job that they need to get done, they're providing a tremendous amount of room to maneuver and execute and that's really critical to their success. The popularity and the heavy uses of these applications, you know, to, you know, what really drives a lot of their productivity and getting things done created major challenges on two critical fronts. It's something probably all of us in the audience can can imagine as we've all also adopted, maybe the Google App Suite and Slack and all sorts of and Trello and whatever else we've built. And now we have to say, where is the canonical place where X, Y or Z document or decision or question even lives across all of our systems. I certainly sympathize and can hardly manage it on this scale.  The, yeah, the, the first, you know, their internet was crazy successful and it had been for many years but it was becoming clear that this software just wasn't going to continue to keep pace with the organization's need. It was the top of a very, you know, well known popular internet software and the vendor who they pay a lot of money and have a great relationship with kept saying, yeah, you know, we can add these features it's on our roadmap we're going to do that. We understand you need this functionality, but somehow they consistently fail to deliver, which is crazy given who this company is. And, you know, another problem was that the, the software wasn't scaling well. And so, you know, the, the more people were using it the more content that, you know, they were creating the slower it seemed to be getting. And that's obviously very problematic, you know, it's sort of self defeating. And users wanted significantly more control over everything, you know, from the content they created to the layout of these groups and spaces to being able to dynamically pull in content from other data sources and applications because of what Tim was talking about. You know, this led to user frustration. So they started to see little dips in numbers, you know, people were, you know, the product team is like vigilantly analyzing data and trends and on top of this system because it is so important to the company. When they start to see that people are getting frustrated. And, you know, that that productivity is dipping. That's been that they need to get out in front of. And so, you know, at a time when the company wanted to be fostering more collaboration, their internet, you know, which is all about collaboration was, you know, starting to handle it. And so this company is known for major innovations. And they set out in search of tools or considering building a tool that could drive that through collaboration. And in particular, real time collaboration which we'll talk a lot more about later. You know, the SAS, you know, you know, these internal apps had an unintended side effect, you know, that that now, as you know, we've all experienced them start to see more and more obvious but you know when you have multiple dated stores since project management tools, chat applications, digital visualization tools and so on and so forth like, you know, it's really hard to know what teams are using what and things change over time. And so it leads to scenarios that we've all been a part of like, oh man, like, you know, did you put that product description in the dropbox like, I swear I remember you mentioning it, you know, it wasn't in the team chat app or always email but I search both and I couldn't find it. What do you mean you put it in Slack I don't I don't think I'm in that channel like are you. One user in the Drupal community described the advent of Slack for example in the way it sort of transformed the way we work to be just an inbox generator, each channel becomes a new inbox. And then it integrates with your other tools and you don't know where you go and all these other things so finding things across them I have more unread Slack messages at the end of the day than emails now. And that's, you know, because an email at least I can send it off and take someone a few minutes to respond Slack they're like, Oh, I got you.  You know that that is extremely problematic. And so, you know the question becomes you know these these systems are great they have a lot of upside and advantage and we want to enable people to do use them. But how do we mitigate that downside right like how do we keep the good and get rid of the bad. And then, you know, I think that another big challenge they had is that, you know, at every level of the organization, people were a little skeptical of the idea that that we could build a better mousetrap. You know, for example, if a very large company that focuses exclusively on this as their core business, you're paying a ton of money has continued to fail to deliver, you know, you think you can do a better job. And I think that we were pretty confident at least on a lot of the things that needed to get done, you know, this isn't this isn't a problem. But where things I think rightfully got complicated is they said, Well, okay, you know, I believe you can build a better mousetrap, but that mousetrap has a ton of features. And we're talking about rebuilding all of those and adding all these things they couldn't and adding all these things we want, like, how are you going to do that in a timely manner. And of course, all of us have heard the adage, you know, you can have a cheat fast or good pick two. And so it's like, Okay, we believe you can do it. And we believe you can build it on a good timeline, you know, but I'm not so sure you can do it in a cost effective manner.   We solved that conundrum. Well, the product owner and his team did a ton of user engagement and interviews and analytics and research and, you know, this told them, you know, even more than they already knew about this application, which was a ton. And that enabled them to put together a really compelling pitch to key stakeholders and executives because they have concrete proof as to like how valuable and how widely used the system was. But look, give us the opportunity to put together a proof of concept. And they said, Okay, great. And if that proof of concept goes well, we might give you an opportunity to do some more proof of concepts and if you can continue doing these proof of concepts in a way that you know ultimately leads to an application. That's great. And so they gave us an initial bit of funding and some support and they said have at it. So initial three months was given some limited funding for the POC and we really knew that our strategy was going to be, you know, critical to our success. So we had to come up with an approach that would address the challenges that I've mentioned. And we came up with three main components. And first, we wanted to solve the hardest problems first. And if we could quickly and meaningfully demonstrate success in really difficult areas, it would one impress which we needed to do. And two, it would show them that we could make, you know, anything doable on a technical front and eliminate that as an as a concern or a risk. And then, you know, the challenge was, there was only so many home runs that we could hit right you know we needed to hit at least one or there wouldn't be a future. We wanted to hit to at least but you know we sat there thinking well even if we hit to that wouldn't be enough if that was all we deliver. So we needed to balance this out with something and what we did is we looked at that research with a product team and we looked at what the key influencers and the biggest users loved. And, you know, if we could build that easily and improve upon it, you know, or where there are features that had really, you know, they really wanted and they haven't been able to get could we do those quickly.  But we also had to consider, you know, people judge a book by its cover. First impressions are really important, you know, if we just went out of the gate, and we built all the, you know, the table stakes no one would be impressed because everybody can do that.  It wouldn't be all that impressive. You know, so if we could make it look good, you know, if we could, you know, get some features in there it would really benefit us and so we said okay, let's focus on what we can get for really little costs or no effort on that front because it's going to drive a lot of value. We can't really invest a lot of time into it. So the other critical thing was the architecture of the POC. You can take certain liberties when you're, you know, doing a proof of concept you can cut corners, you know, you can do things that you just can't do in a production environment with a mission critical application in or just clearly off the table. You know, and so the challenge though as I mentioned was, you know, if we did get approval to turn this into a fully fledged application and it turned out that everything we had done was a throw away to get there. Well, we were going to face plant at that point you know we wouldn't be able to deliver that production application and that reasonable timeframe or budget we would have failed. So from day one we really had to kind of calculate and balance these short and long term, you know, needs, which is it's really challenging in the context of all these other things that we need to do. And so we ended up making some really interesting and difficult choices. And one of them, you know, ultimately this organization wanted a fully decoupled app for reasons I'm not going to get into but it made total sense. But we decided, you know, in conjunction with them that starting as a progressively decoupled app would greatly accelerate development. And that's because, you know, a lot of what makes Drupal so popular site building layout builder web forms you know these things work really well out of the box with a tightly coupled theme and so it's not that you can't leverage them when you're doing the couple but we're able to get so much more so quickly so it was sort of like a cost benefit analysis we don't have to put a lot of effort in, but we can meaningfully demonstrate oh there's way better layout control than what you have. Oh you can create really complex forms you can't do now. Oh my gosh you know and I'll talk about later you can pull together views from different data sources and export that into a block that's crazy, you know. This speaks to what you were saying on the previous slide about leveraging high value low hanging fruit that might not have looked like low hanging fruit to them right. Like I'm sure they didn't think that complex layouts would be low hanging fruit or things like that right. No, it's, it's really important. It got to the point like our first demo was so wow we had a kind of back pedal. We had to like start setting expectations like sprint to you're not going to see as big of a jump. It was, you know, it was, yeah, no it really impressed people as to what you can get out of it. Let's talk more about this in a minute accessibility and another great thing that you get out of the box and so, you know, we could still embed things and pulling you know with progressive the couple that gave us sort of the best of both worlds. Definitely some throwaway components definitely things we needed to rebuild but you know we needed to get traction and it was the best ratio. Another thing and this, this was the one to punch. The internal distributions in Drupal. So we've been working with this company for five or six years now time flies, and we've done a large number of projects across a lot of different divisions and we worked with them on this internal Drupal distribution that's used in the policies departments and projects and we use this as the foundation for that initial POC and literally in, you know, an afternoon, we were able to stand up a site that would have taken anyone else months to build a team of people months to build. You know it contained a theme, you know with the company's identity and branding and so you know instantly you stand up a site that looks just like every other internal site that they're going to be using. There's an instant familiarity and how it works because of the menuing, the content creation, the layout process, the workflows, it functions like every site and so anyone who's used any of these other systems can jump right in and exact knows exactly what to do right so there's like a user benefit to this demo as well. You know tremendous focus on things like accessibility, which you know I just mentioned and you know we had incorporated numerous accessibility improvements into the platform. And so this went over like a really important stakeholder group, you know they review and vet every application before it goes live, you know, to meet accessibility standards so the fact that we were able to, you know, launch a POC that exceeded what most applications do in their initial production release, like you know gained us you know credibility with these teams that love working with us because of these systems. But there's also a lot of really, you know great custom modules in the district that just so that we were able to leverage you know so a really great example is no corporate LDAP integration so your corporate login is your only log right you have the AID and we could grant people access to the POC so we can say hey here's a link go check it out yeah of course you have access, just log in. And you log in and you'd see you know all of your profile data was there and everybody else's profile data was there because we had just pulled it right out of the directory so you know again it just created this really smooth powerful and you know we do a lot of performance and scalability tuning and that's critical to them to. And so that was impressive as well. And so, you know, I really can't stress enough you know the power of internal open source and you know reusing and reusing upon code from past projects whether you do it you know, formally, or informally, you know it you know it just wowed and to the point where we had a back pedal and say, you know, this is, you know, we were very honest and open with everybody is to do it and this is why you know Drupal is a great benefit and we're actually now automating this into this insane platform where you can as an end user go in, click a button in the web portal and spin up your own version of this Internet or any other application and customize it and you know, so this really impress people to the point where it's become productized. One of the big reasons for creating this new Internet was to address, you know, those challenges that came as a result of all of these, you know, sass apps, you know, proliferating in the wild. And I think Drupal is a great choice for this I've always thought of Drupal as this input output mechanism with a great layer of tools on top, you know it's just an information broker. But the challenge with these 30 party apps is they don't all do what you want, you don't know what they do.   You know, so it had to seamlessly work in the Internet as if it were, you know, a capability not coming from box or some other system. But the interesting thing that we learned very quickly is, you know, why we could, you know, build and demo much of what was requested with these integrations. It really came down to like each individual platform and what could it do now versus what could it do in the future. Currently, you know, we couldn't deliver every feature and functionality and capability that people wanted, even in a POC, but we were able to do enough and gain enough credibility and confidence with people that they could see a clear path forward. We were able to say, you know, look, you know, quit doesn't do this, like that's not going to happen. You know, we can put in a feature request, you know, we have a lot of pull within with an organization given your weight. We can't guarantee that, whereas these people have said it's on their roadmap, and we have a, you know, a high degree of confidence we can make that happen when it's available. And so, you know, really it was just about making people comfortable with an understanding, you know, this is and isn't doable and hear the challenges that we're going to face in going about it and, you know, ultimately they decided it was worth pursuing. This integration piece is really interesting to me because you're walking the line between deciding where when you choose to meet the users where they already are. And when you choose to say, you know, as you say when you looked at the previous internet tool when you choose to say this component of it at least should be rebuilt or should be custom. And do you, can you explain perhaps what the process was when you were working with the client about choosing which which of those kind of pathways you took when it was the right choice to do these third party integrations versus when it was a choice to build the feature into the platform itself. Yeah, now something we talked a lot about you know some of it you know it's as always some of it's dictated by you know external factors in control somebody, you know a key stakeholder or team loves box you got to have that. You know, other times you know we look and say oh my gosh you know you're paying how many millions of dollars a year to license that application like triple does that out of the box. Like, you know, you know, for political reasons we didn't always necessarily go after those, you know but that's like one of one of the exciting things about the internet and where it's going is there they're tackling those things now actually so now they're going to those groups that you'll, you know, say tool acts are saying, we can even make it look exactly like tool actually wouldn't even know it's not to X anymore, we'll put our logo, you know.  And people are saying, Oh, it's interesting. So, you know, I think that's going to be one of the amazing things, you know, but you got to be careful at the same point to because, you know, and this is one of the things I love about this organization is they don't want to put restrictions and constraints on things they want to, they want to influence you they want to provide guardrails they want to incentivize and de incentivize you to do certain things right like sure you can stand up a proprietary application, but wouldn't be a lot less expensive and faster if you click to button and you can do a Drupal install. Yeah, no, I think I think this is really interesting. And the point you make now is about sort of whether the organization itself focuses on user like conformity to the tools, right do they put that conformity of all their user groups and the sort of training of having everyone use the same thing as the way they kind of unified their process, or as you know this more open model where it's about finding the best tool for the job, and letting the users guide how those interact with each other and building something to unify them so I think it's just a powerful example at a scale that most of us are not used to. And the reality is it's a little above right because they just don't stand up a tool. I mean they like inspect the code that I mean they put these companies through the ringer before they'll even consider you know proof of concept in your application so it's, it's not like they're just, you know, turning on SAS applications, you know every minute, you know they do an insane amount of diligence, but they do it fast and better than than most we've ever seen. This this this flexible file management thing is similar to in the sense that like, and this is one of the coolest things I thought you know it's it might be a little simple to some people but you know when you create a new group. You know it's really beneficial to be able to create a slack space and a box folder and all of these things with it at the same time.  But you know, there's some friction sometimes in the process and there's naming and location issues like your slack name doesn't match your box name, nothing's in the same place and so there's also sort of this organizational advantage of doing it through the system. But again you kind of have to accommodate, you know, any workflow to the degree that you reasonably can. So if you want to stand up a slack channel great, you can create a group and you can associate a group with it.  It just makes everyone's life faster and easy on the efficiency and collaboration front. I'll just touch on this real quick, a lesson that we learned early on. Another division in the company came and said oh we have this really cool thing that we've been, you know, prototyping ourselves, it would be really cool if you know we could take on the search component. And I was like oh man like I kind of wanted to do search because I'm constantly searching for things. So I thought it was like really helped me, and I could contribute to it as like as a user. But the product owner was like of course you guys can do it like because you know there's only so many things that we can do. He was really smart because he picked an application that was a nice to have and he handed it off to a third party.  And so they had to drop this is something that they really wanted to do themselves, but they just lost the opportunity to and in the end we lost nothing because we never promised it.  And more importantly, it gave us like a working relationship with a user of the internet. You know, so now we were sort of like building relationships in sort of intertwined ways and getting bind and support from different groups throughout the company, you know just like that accessibility team, you know we needed to win everybody over in different ways. So this is perhaps the thing I you know I'm most excited about, you know, to me, collaboration is it's fundamental to the way that everybody, you know, works, learns how we teach, and working together is how we get things done, you know, and applications like content management systems and intranets are all about fostering collaboration but for some reason, you know, despite the fact that Google Docs came out in the early 2000s, you know, 2006 or so. No CMS in the market works the way that we do. No CMS works truly collaboratively and that's crazy. I was kind of thinking I was like, you know, like if I'm being honest, like, editing content in the CMS has always lagged behind user expectations, you know, he's kind of provided like just enough to get the job done. You know, we used to use, you know, MS word and cut and paste 20 years ago, you know, now we're just using a different tool to do it. You know, we've improved the editors they've gotten better. But, you know, for some reason editors just never keep up.  As you know, synchronous collaboration is extremely difficult to engineer into an application. That's one of the main reasons why applications don't do it, because nobody has the budget to do it, or at least until recently they didn't and that's an exciting change. You know, and so, you know, a major goal of this internet was to increase collaboration in particular they wanted more, you know, real time collaboration, because of their global distributed nature and more people working from home than ever before. There's a lot about this in the early POC phases we drafted requirements we did research, then if I potential solutions. And then we had to do a POC to show that we even do a POC for this because it was so, you know, it was kind of crazy. It was a really fun out there idea. And our research was really promising we did like we won over a lot of people with really cool ideas and concrete research. And they gave us the funding with the caveat that we spin it up as a second team, you know, doing that in parallel with our primary team, enabling them to collaborate but doing it in such a way that we would never block each other. They were willing to take a bet on it because it was so awesome and would drive so much value if we can deliver, but it was too risky that they didn't want to couple it to the other application, which is challenging because content creation is a couple from where it lands absolutely. Yeah, this is one of the coolest things I worked on in a very, very long time. So we added real time collaboration into Drupal using why jazz, I'll give you a little demo here. Why jazz is an open source real time shared editing framework and it enables you to make any application collaborative. So basically you can do shared to do list whiteboarding 3d modeling editing, it does everything, it just, you know, it abstracts all the complexity, and it gives you a ton of flexibility. So it's network agnostic, for example, and so this is actually in the background of no jazz application in a client server configuration using WebSockets, you know, and I can't show you the Internet itself but I was able to kind of like crop out this this is an early prototype before it started to look like anything identifiable. It's running in a pre launch version of a custom editor reveal, we built which is another really cool topic, you know, embedding and getting all these things into, you know, your content is super easy if you have an editor. So what you see here is two people using the Internet working together on a document with, you know, pretty much everything you'd expect from Google Docs, you know, President's Awareness who's online, you know, what are they doing where's their cursor what's highlighted, you know, editorial workflow components like inline comments global on redo, new redo for multiple authors.  As an aside, this is totally separate from an independent of the Internet project but I had to mention it because I'm so excited about this collaboration stuff. We also built an open source proof of concept in WordPress using YGS with the Gutenberg editor. This is because Malmweg has talked openly, you know, for a long time now about how real time collaboration is a critical part of the the future of WordPress and their roadmap. And so we wanted to show the Gutenberg team and automatic the power of YGS and how it solves a lot of the challenges that their early attempts that they had done in the community, you know, we just didn't feel, you know, did it, you know, did justice. And we wanted to show them that, you know what they wanted to do in the future was actually very doable today. And we want to add, you know, collaboration to every application every CMS out there. So, whereas the Internet was a client server implementation. This is a secure peer to peer implementation using WebRTC. And what's super cool about it is that any WordPress site, even the smallest shared hosting provider could run this out of the box without installing a single piece of software other WordPress. So, it's pretty wild. And, you know, the last thing I want to touch on is, you can start to see that there's a lot more to real time collaboration and even just a CMS, then shared editing, you know, you saw some layout building there. And so, you know, working together with your peers on the look and feel and the design of your pages is also something that could be done, you know, collaboratively. So, and of course, Drupal supports Gutenberg so you can take some of that code and check it out and do some integration yourself. The last big thing I want to talk about, you know, as we were wrapping up the the POC phases, you know, and looking more and more likely like this is going to greenlit to be a full on project. More and more groups about the company were weighing in and kicking the tires and looking under the hood.  But the problem is that that hill was the minefield. And at any moment, like one of those groups could just, you know, evaporate that snowball the map, no matter how big it had gotten. And that about happened. You know, one of these groups is their DDA group that supports mission critical applications after they go live. And so, you know, we built many other mission critical applications on my sequel with the company.  They have no doubt that this can work. But they threw out a challenge and they said, okay, you know, great, but you know, sure, my sequel supported and we run mission critical applications on it. But this is our internet. This is mission critical. Apparently another level of mission critical. And they have an Oracle support contract that apparently is second to none. I gotta know if you're texting, you know, Larry like hey dude I need some help or if there are like oracles you know just floating around you waiting to need help but they you know their opinion was we need to be able to run this application or Oracle because it's so critical to the company, and we have no better way to do it than this package that's crazy supported. So it's not that we were against Oracle. It's that you know we're trying to manage risk in a POC. And I mean, we are some of the most well known contributors to Drupal, we've been doing this for 17 years. And no one, no one we knew no we get a hold of no one knew anyone would ever run an active active Oracle configuration in anything, you know, anything like this.  What does that mean to our timeline, you know, and forget about our application, like, what if this goes live, like we, we've battle tested my sequel, you know, over and over and over again just at this company like we know it works like so that that risk that unknown you know our reputation is on the line as much as theirs. It just made us like, you know, nervous, I mean really really nervous but hey, we're you know we're building POC as we said, let's see what happens.  And it's not fun to go into a sprint having no idea what it's going to take to get something done, you know whether or not you can do it like that's not a place that we typically operate from, even with stuff like real time collaboration, we had a really good sense of what we could or couldn't do, based in the research and this was like, yesterday you said do this and today we're saying. Okay. We were blown away. It took us less than the entire sprint to build it, you know, there's a good Oracle driver for Drupal. It did need a couple of enhancements and changes and tweaks but you know the, the repercussions or you know the ripple effect wasn't there and that was you know a huge sigh of relief. And, and, and, you know, it was good on one hand, because you know it calmed our fears that it could be done easily, but it's still kind of nagged us in the back of our mind is this really the best decision for the company given the unknowns and the risks. What I didn't expect and this was really interesting is that, you know, if you think about like a big, you know, Fortune 500 company, you know, these people operate with insane technologies and and frankly, some of them look at PHP as like a rinky dink technology doesn't matter that it powers 80% of the web, you know, they're doing, you know, assembly. You know, they are as hardcore as it gets or whatever it is, you know, from their perspective, it's just not what they would use it's not what they know.  That was impressive. So, you know, the results. I wish I could share a lot of information and data with you guys I can give you some some anecdotal success stories.  And then we, you know, we got to an alpha we got the green light to go to a beta. And it's just been so amazing to see this continue to grow and go live. Another really important success factor for me is that, you know, a mission critical system, you know, certain applications in the company they should own, you know, and so even though they engaged us to build this with them. Initially, it was very clear from day one that we were going to help them bring on a team, we were going to transition out. And so, you know, nothing makes me feel better than, you know, getting this up and running, making them successful, and then stepping back and watching them be able to run with it, you know, and, and we'd love to come back in and we hope we get a chance to do so in different ways in the future and I'm confident we will and we're certainly working on many other things but like to be able to build something and walk away and see it thrive is is really awesome. And I feel like that point in particular fulfills one of the promises of open source that's sort of overlooked which is this idea that if you build solutions based on open source principles even if it's just an internal open source model. Right, the idea is it's not just that you're not locked into a vendor but you're not locked into an architecture or an idea or a conception of it. And it should be something learnable it should be something that the the whole team can embrace and continue to maintain right I think it's a really strong measure of a successful project. Yeah, no that's a really good point right you want to recreate the problem internally create your own vendor lock in, you know, with an even smaller pool of resources and developers. So this, there were a couple of things that really sealed the deal for me. And one of them is that teams that are using other tools for other purposes, you know, confluence is one in particular, you know, are using this as the internet and they're saying, Oh man your editor is way better than the confidence editor. It's like yeah because we built on it and we made it better. So we don't have real time collaboration and we don't have integration with all of these things and like, why aren't we using the internet for this could you migrate our content into this and can we like dump this.  Another interesting thing and I can't talk much about this is but like, they have certain things that are segmented and firewalled and you know independent. And even these groups, they are like super high security teams are saying, could we clone this, you know, could we somehow run our own instance, you know shared code base so you know we can manage it but you know, and I don't know what's going on behind a lot of insight but it's super cool to hear that. And perhaps my absolute favorite was, because they're really good about, you know, ultimately contributing back to open source communities and you know they're very engaged in open source even if they don't necessarily take credit for it and sometimes it takes organizations a long time to do it. And we were talking about it at one point with the senior executive and he's like, I think we should like productize this and sell this like this should be something that like we make as a company like. Like, we can't give this away. And, and I you know, I don't think he I don't know he was serious. But it was it was so you know that to me was like the biggest compliment of all for them to say like wow this is something that you know we think you know consumers and other companies would love to buy from us. So, at that time there was so much I wanted to talk about. You can check out tag one.com slash well for more about upcoming end of life. We've been doing this really awesome 20 years of Drupal series interviewing really well known leaders in the Drupal community that have helped make Drupal what it is talking about their Drupal journeys and experiences, which is fun and insightful. And of course the the real time collaboration stuff with YGS with tons of content on that as well. Please check it out and of course you can always reach out to Tim or I. I'll try and save some time for questions though. Fantastic thank you Michael. So as a reminder to our audience you can you can go ahead and ask additional questions using the q amp a tab in zoom and we also had a question coming in chat, which is where I'd like to start first, which was which is a great one so. Can we can we get some of the sort of technical meat and potatoes like what what Drupal versions what were some key modules that you use in the PS POC. Were you outright. We talked about integrating with things things like slack was that accomplished through custom modules is that you know what's kind of behind that. Well I guess maybe let's start with sort of Drupal modules. Yeah yeah I'll talk about as much as I can. You know, look I said they're they're huge supporters of open source you know there's a big reason they want to be using open source. If there was an open source module available we would always use it if it made sense I believe the box work. I believe others were working on that in the community and pretty sure I remember. And Anna and some folks collaborating with some third parties on that so I believe we did help with some existing modules. There were some things that didn't exist that we had to create. Certainly you know for proprietary internal things those were all custom modules that will, you know that will not be open sourced. As far as like specific modules, I mean it really. It's the core stuff that you would expect you know I can't think of any like esoteric module like oh my gosh like you know I've never seen that on a project like.  And it was you know sort of like those extremes like, you know, leverage as much as Drupal, you know, help improve some contrib only build custom what you have to. Sure, yeah. And, and was that were you working to sort of keep up on these PSEs with like the current latest point releases of Drupal was this during Drupal eight cycle or the early nine cycle as this project was going on. I honestly don't remember if it started on eight and went to nine. It might have I think the earliest. I think the initial POC may have been on eight. The, and that was one of the things that we were like talking about for like timeframes like if we were going to go to alpha, like when do we you know, you know can we get on nine sooner rather than later start schedule and so it was definitely during like the eight to nine transition that like early work was happening. Ultimately, it launched on, you know, the latest nine. Awesome. Okay, very cool. Let's see here so I think we maybe have time for like one more question and I thought I would try and ask one that kind of wrap wrap sort of this. What are the unique circumstances of a project at this scale and above so what is, what would you say is is uniquely different about working with a stakeholder of this science on a project deployed at a literally global scale. Or is it more of the same. Is it is it just the same problems at a larger scale. It's very different. I really do. And I think our success is enlarge.   I remember like he would show me oh here's the pitch deck I'm going to give to my executive team next week like let's go through it and you know give me your feedback and remember one day he's like oh yeah so hey you know we're starting this whole marketing promotional campaign and I'm like wait what it literally had like in parallel with everything else that we were doing. He literally had like videos being created and like like he was marketing and promoting a proof of concept as a fully fledged product out to user groups that we were doing like regular demos to I mean like the level of orchestration and management that went on to just give this, you know, legs to kind of get to life. I don't think most people on the project even got to see what was going on there and it was, it was really mind blowing to me that like, you know, we played a really important critical role in this project but there was so much going on. Yeah, so to me I think there's the lessons to take away from that are, as you say there's something critical to really strong product management on the inside of the organization of working with and that's a lesson for members of our audience who are you know end users of Drupal who are maybe looking at a large scale project of this sort or evaluating Drupal to be used in a large scale project, but also for teams or developers or whoever else about the strength of having well defined requirements and well defined process and touch points, and really strong representation of users I think, and I think that's certainly something that I'm taking away from this conversation that's really powerful. Besides, perhaps the, the need for incredible real time collaboration tools and checking out yjs in some more detail so with that though I think that's pretty much all the time we have. I do want to thank everyone again for joining us. We do really appreciate you taking the time in your day to understand the story. Again, for my part my name is Tim Lennon has been at the Drupal Association. We'd love to see you at the upcoming Drupal con in Portland at the end of April you can find information at events dot Drupal dot org, and you can join us on Drupal dot org slash association to learn about our programs and how you can support the Drupal community. And with that I'll hand it to you Michael to sign off. Awesome Tim, thank you so much for having me everyone who joined us thank you for hanging out through the full hour here. I love talking about this I really hope that you guys learned something from it are excited, or as excited as I am about real time collaboration and all the cool things that Drupal can do. Please don't hesitate to reach out to Tim or I with questions and make sure you check out triple con. Awesome. Thank you very much everybody. We hope you have a great rest of your day. For those of you in the US enjoy Thanksgiving coming up soon, and the Drupal Association will see you again.