So thanks again very much for joining us today for this webinar on the global flourishing study pre-registration and registered reports. My name is Leslie Markham, the program manager for this study at the Centre for Oaken Science and I'm joined by Teresa Stankov, the data manager and Mark Call, the product owner, who will provide details of the data and the registry respectively. And we also have Amanda Stoller from our communications team ready to help with any technical difficulties and to help with the questions in the Q&A. Please add any questions you may have to the Q&A. We'll try to answer some directly in the response box and we'll have plenty of time at the end of the presentation to answer more questions. And we'll also follow up with any that we can't get to today. The webinar recording will be sent to all people who are registered for this webinar along with some slides and the Q&A. This is the second part of an introduction to the Global Flourishing Study. If you didn't attend the first part, you can find the recording along with the slides and the Q&A on our website. And I encourage you to view that recording if you're intending to register for the access to the Global Flourishing Study data. For some reason I can't find my slides, there we go. So I'm just going to do a very quick overview. We did cover this in the first webinar so it's going to be very quick. But just as a reminder, this is a five-year longitudinal data collection on aspects of flourishing. Data is being collected in 22 countries and we will have over 200,000 participants. This is a big collaboration between Baylor University Institute for Studies of Religion, the Harvard Human Flourishing Program and Gallup Handling on the data collection. And we're also grateful for the number of funders that we have involved in this effort. Just also just to say right at the start, we only have Wave 1 sample data, which is the Sweden data set available at the moment. Please don't publish using this data because it has been perturbed and randomized. The Wave 1 global data will be available in the coming months once Gallup has wrapped up their collection in the field. There are three ways to access the data. You can prepare a registered report, which we'll talk about in this webinar. You can prepare a pre-registration or you can wait for the data to be public released approximately one year after the early access through registered reports and pre-registration. You can find a lot of information on our website, www.cos.io forward slash gfs. This is the website that's specifically providing access to data and tools for researchers. So please do take a look at that. So what are the benefits of pre-registration? When you pre-register your research, you're simply specifying your research plan in advance of your study and submitting it to a registry. Pre-registration separates planned or confirmatory hypothesis-generating research and unplanned exploratory hypothesis-generating research, and both are important. There are clear benefits of pre-registering your study. If you value reducing the impact of confirmation bias on your scientific claims, you want to prevent peer reviewers from being skeptical about your analysis choices and you want to increase the confidence researchers have in your claims. Confirmation bias describes the human tendency to seek evidence that supports rather than rejects existing beliefs, expectations or hypotheses, and this makes researchers more likely to make analysis choices that support their original claims. Analyzing secondary data can reinforce confirmation bias since it's tempting to focus on the areas that match existing beliefs and report positive results over impartial analysis of the data. Access to altered sample data and a rigorous analysis plan may help. In this picture, an archer with a bow contently looks at a wall with arrows, while an assistant is busy painting targets around the location where the arrows hit the wall. The problem is that the sharpshooter did not demonstrate accuracy. Hypothesis are only tested if they're made beforehand. Isn't it still possible that the sharpshooter is a good shot? It is indeed. The problem is that nothing has been done to challenge the claim that the sharpshooter is a good shot. They might be a good shot or they might not be, but based on the end result, i.e. a wall with some targets and arrows, we can't evaluate how good a shot they are. The same holds when testing scientific claims. If a claim was based on a hypothesis generating after looking at the data, the claim might be correct or not, but we can't evaluate how much confidence we should put in the claim. Another practice that some researchers admit to using is to perform many slightly different tests on the same dataset and then to selectively report only those that support their prediction. This practice is called selective reporting. By only reporting tests that support predictions and hiding tests that do not support predictions, researchers can make it look like there is clear support for a theory when this conclusion does not follow from all tests that are performed. Just because a researcher has selectively reported results does not mean their conclusion is wrong. However, it means a claim is more likely to be wrong even when it's supported by a statistical test. Researchers often have great flexibility while analysing their data. They can use this freedom to freely explore the data they have collected as long as they transparently report what they have done. Researchers can deviate from a planned analysis. Sometimes this is even an improvement and as they might learn based on the data that their original analysis plan was suboptimal. With a good justification, the new analysis plan might bring researchers closer to the truth than the original analysis plan. Evaluating whether an updated analysis is an improvement or opportunistic requires careful thought. So now let's turn to the benefits of registered reports. Registered reports aim to change the reward system for earning publication. In the standard model, researchers design their study, collect and analyse their data, write a paper and send it to a journal for peer review. Authors decide whether and when where to send their papers and editors and reviewers decide on the value of the research based on the results. Publication bias produces published literature looking more beautiful than reality. In step one of a registered report, authors submit a stage one registered report to a journal as a pre-registration in which they provide the motivation for the research question, preliminary evidence and the proposed methodology. They write down this study as a pre-registration. With registered reports, the initial phase of peer review moves to before the results are known. In step two, the pre-registration undergoes a stage one peer review. The data has not yet been analysed at that point. The editors and reviewers evaluate the submission with two considerations in mind. Firstly, is the question important? And secondly, is the proposed methodology an effective investigation of that question? The journal can decide to reject the submission, ask for amendments or provide an in-principle acceptance, which we just shortened to IPA. Acceptance means that if researchers follow the plan, their study will be published, regardless of whether the results are statistically positive or negative. After the in-principle acceptance, researchers collect or analyse the data following the pre-registered plan and resubmit a stage two registered report. Deviations are possible and should be clearly documented and if the deviations from the plan are substantial, the journal editor should be notified to prevent a rejection of the stage two manuscript. At the last step, the researchers submit the final manuscript for peer review. This is called stage two review. Now the manuscript includes the data and the analysis conclusions and the conclusions. It's not possible that the data is rejected after a negative result is observed except under rare circumstances where quality checks indicate that methodological problems led to an uninformative study. The editor and reviewers only assess whether authors followed the planned methodology and interpreted the results responsibly. The results themselves are not a basis for deciding whether to publish the paper or not. Registered reports have the benefit of moving peer review forward in the research process such that it is still possible to incorporate feedback from peers in the study design, improving any weaknesses that peers identify before data collection rather than after the fact. For the global flourishing study, you will have access to the sample data a few months before the full data set. You can use this time to develop your preregistration and submit it to a journal that accepts registered reports. In this figure from Chambers and Zabella, we see the rise of the number of journals and the spread of registered reports to different disciplines over time. Today, more than 300 journals have adopted registered reports. The figure shows wide adoption from the social sciences through the biological and medical sciences and economics. Since 2020, some notable advances include adoption by large multidisciplinary journals such as PLOS One and this year, Nature has adopted the format. You can find a list of journals that accept registered reports and may be applicable to this study on the GFS website. You can also find a full list of the 300-plus journals offering registered reports on the COS website. Don't worry about trying to get down all these links. We will be sharing the slides when we send out the recording of this webinar. Registered reports should eliminate publication bias that favors positive results over negative results and she and her colleagues compared registered reports and standard articles. For each paper, they identified the first hypothesis tested and coded whether the results supported the hypothesis or not. Standard reports almost always reported positive results for the hypothesis, 96%. When the authors and journal pre-committed the hypothesis and reported the result, just 44% were supported. So these are the ones that have done registered reports. So making the decision to publish prior to knowing the results reduced publication bias and ensured that the published results reflected what occurred rather than what emerged through selective reporting or questionable research practices. In this study, the authors gathered a sample of published registered reports that tested novel research questions and then identified two matched standard model papers for each registered report. One published by the same lead author or authors and the other published in the same journal on a similar topic at about the same point, time point. 353 researchers participated in a structured peer review process. They were matched by expertise to a pair of papers, one registered report and one of the matched control papers. We see all judgments are in the positive direction, i.e. a higher score from registered reports. The black horizontal lines indicate 80% of thick and 95% of thin credible intervals. So the more positive evaluation is distinguishable from random variation for the first four aspects of studies. And they are methods and rigour, methods rigour, quality of methods, amount learned from the study, quality of the research question and alignment between the question and method. Visit the peer community in or what we've shortened as PCIRR website to learn more about their initiative. PCIRR is a nonprofit that creates communities of researchers who review and recommend unpublished preprints in their field. This is a free service. Authors of registered reports that are positively recommended by the reviewers have the option to publish their articles in the growing list of PCIRR friendly journals that have committed to accepting PCIRR recommendations without further peer review. You can email PCIRR in advance when you plan to submit a registered report and they will prepare for your submission by already selecting the reviewers and asking the reviewers to block time in advance to quickly return reviews. Okay, I'm going to stop sharing my screen and I'm going to pass this over to Mark, who is going to walk us through the registry. Over to you, Mark. Thank you, Alice. Make sure that I'm sharing the correct screen. You should be seeing our GFS registry. Am I good to go, Leslie? Fantastic. View to myself. Yes. All right, so welcome everyone. This is the Google Flourishing Study Registry. This registry is built on the OSF Registry's infrastructure in a way where you're able to submit your study plans and able to gain access to the secondary data.  If you are interested in a short little excerpt from the study, we have that at the very top. We also have some very helpful links such as being able to learn more about the study. You can go to the COS website, as well as the email address, as well as some documentation to help you submit your study design, your plans. We strongly recommend that you open up those different resources because they are going to be incredibly helpful and they will more than likely be used by us whenever you have kind of questions. They'll give you to the right answer, et cetera. So strongly recommend that you dig into that. Get familiar with it as you're coming up with your study designs. Now, how would you be able to submit your study design or be able to access or request access that data? To do that, first you need to create a OSF account and be able to log in, which I have already done, and go to the GFS Discover page. There is a way you can do that through OSF. I'm not going to go through that, but you can also just type in this link and it's also available in all of the other different materials. Now, to submit a request or proposal study design, et cetera, you will click Add New and you'll be asked these two questions. Do you have content that's already in an OSF project? I'll be happy to share your links. I'm not going to get into that for this session, but you do have the option to say no, completely brand new. I will add it as I go. But if you do have some of those materials in a project, you can click Yes and select it from there. And then the second question is what type of registration you want to create? For our purposes, this is very simple. The pre-registration for sample and wave 1 data and it's the only one that you can select. So super simple for that. Once you have all that set up, you will create a draft. And this is where you will start building out some of the information that is going to be imperative for, to be able to see if you're able to access that data. I'm not going to go through each individual item, but I'm going to touch on some of the key important aspects. First of all, it's going to be this registration metadata. Anything that is with a brand abstract is going to be required. And I strongly encourage that you take time on this page to make sure that everything is accurate and correct. Because once you submit it, most of the information that is available on this page cannot be changed. So once you think of a title, make sure it's a title that you and your researchers are comfortable with. Same thing with description. Do a high-level description of your study. Think almost like an abstract, but since you really don't need, you don't know the results, two or three sentences about what does your study entail. Also go through contributors. These are the people that are going to be affiliated with your registration or need access to it. Category, license, subjects, all this information is going to be imperative. And mainly because this helps other people discover your research. So once it is approved, once it is registered, this is how people are going to be able to locate your study. Each one of these things and possible recommendations of what to select is going to be and all those materials on that front discovery page. It's the reason I said, please look into them, explore them, get familiar with them, from a chat if you have two screens, have them open as you fill this out. Once you're done with the metadata, you will go through several different pieces of the workflow, these different sections. The main things you will be interacting with are text boxes where you can enter in your information. And these are expandable and collapsible so you can easily expand it to see everything that you need. Same thing with radio buttons. We also have checkboxes and also options to select different files. So if there is a file that you already have all this information in such as one of the questions is a manuscript, all you have to do is click this little plus button and pop up or show one up. You can either upload it and be able to enter it through that kind of away. Again, I'm not going to go through any of these. The only thing that I would also say is anything that you see in red means that there is missing information. So we strongly recommend that you go through it and see what have I not filled on it. If things that are completely filled in or optional, you would have a green lettering with a checkbox saying everything that is basic means is filled in. Now, this is just saying that there is some type of input. Does not mean that it's accurate. It does not mean that it is changing to make sure that the text and the spell checker is correct, all that stuff that you have to go on in. But it's just saying that there's something in that box. You will go through the rest of these. At the very end, you will have data request agreements. It's important that you read through these and to make sure that you discuss with your team and click I agree. Some of these are required. I think all of these are required actually. Yes, all of these are going to be required with your response and the moderation team is going to look for these to make sure that everything is filled out appropriately. Once you are done, you can review all the information. As you can see, most of the amount is blank. But it's another way for you to go through all the information that you currently have and make sure that nothing is out of place, not anything is incorrect. It gives you an opportunity to go through it and double check all the answers. A few other things to highlight is as you fill these out, the system does auto save every couple of seconds and it will also save every time you go to a new section. And once everything is filled out, you will have the option to register. Once you click register, a couple of things will happen. One is you will have the opportunity to say if you want your registration to be public, meaning that once it's accepted, anyone can see it or embargoed, which is a fancy term to say that it will be private for up to four years. Once that is done and you select that, you can select register again and an email will be sent out to all the different contributors that are associated with that project. If they have admin permissions, which you will set by contributors right through here, they will have the opportunity to review it and decide to say, yes, I approve it or no, I reject it because it needs additional edits. They need to reject it within 48 hours. After that, the system thinks that everything is good to go and it will automatically submit it to the moderation team where they will review your responses and to say, yes, we approve this and be able to give you access to that secondary data. Or they will say we did not approve it because we're missing this information or we don't understand this. So that is the quick little workflow. There is also another resource that I want to provide you guys, which is our help guides. Our help guides have a lot of information in them and a lot of step by steps and how you can do these different types of workflows and how to enter certain types of information. So I strongly recommend that you also be able to use this. If you have any questions, you're more than welcome to reach out to us and email us at contact at OSF.io. And so with that, I will stop sharing my screen and send it back over to, I think it's Teresa's turn. It is Teresa's turn, but I'm going to share my screen again and Teresa's slides. So just bear with me one moment. Just goes back into slide show. Okay, over to you, Teresa. All right, thank you. I'm going to be focusing on the global flourishing data set and some of the open data practices we're using for both the sample data and also the final data. So next slide, please. Yeah, just as a reminder, the purpose of the sample data set we're providing is to allow you to start to plan your analysis before the real one wave one data is released. So this sample data consists of just the wave one data from Sweden that we have made various transformations to such that it is informative, but it doesn't contain the real values. So it is very important to understand that this is not the real wave one data and is therefore unsuitable for analysis. And there are those, again, those two sample data sets available, one for researchers who submit a pre-registration for their study that contains data that has been perturbed from its original values and one available for the global flourishing website that is both perturbed and randomized. Next slide. So we want to encourage pre-registration and registered reports as much as possible. So we have for the final data release, we have two different release dates for the full data in each wave, depending on whether or not a pre-registration or registered report was submitted for a study. So for projects that have submitted a pre-registration, the full data will be available as soon as it's released. So we'll get the data, we'll get it ready, we'll put it on the website and it'll immediately be available to those researchers who have put together one of these pre-registration plans or registered reports. For anyone not submitting a pre-registration, the data will become freely available to anyone regardless of if they've done a pre-registration or whatever, one year after the data is made available for those with a pre-registration. So again, just to reiterate, if you do a pre-registration, you'll get it immediately. If you don't submit a pre-registration, it'll be freely available one year later. Next slide. So for all data releases, data will be shared in CSV format. So CSV is simple, machine readable, and broadly reusable data file format, and it doesn't require any special software to open or use. So since it's not tied to any particular software, you don't need to purchase any special anything to use it or worry about issues opening the file in the future due to software updates. So that's why we preferentially use these non-proprietary data file formats. That being said, we will also share the data either as an SPSS file, which is the format that we receive it in from Gallup, or an RDS file for convenience. So these are rich data formats that allow us to attach some of the metadata, such as variable and value labels, to the data directly. So this is available purely for convenience to prevent kind of issues between translating stuff from the codebook into the data. But the sample data, or for both the datasets, the sample and the real full data, there will be the CSV version with accompanying metadata. So the sample data that we have here is currently available in both CSV format and as an RDS file. So that's what's available now. Next slide. So rich data formats are not necessarily accessible to everyone and don't contain all the metadata relevant to the dataset. So we're also providing separate metadata files. So for the sample data release, we have put out a simple code book, which is available now. And it contains all of the questions, variable labels, value labels, some information on if the question was asked in the intake survey or as a part of the annual survey. And that information is available for not just the Sweden dataset, but for all of the countries. So there are some questions that were asked in countries that weren't Sweden. And some questions had answers that weren't relevant to Sweden. So primarily think questions about political parties that are relevant to some countries, but not others. All that information could be found in the code book, which is online now. For the full data release, we're intending on releasing an XML metadata file using the data documentation or initiative or DDI standard for metadata, which is designed to accommodate survey data. Next slide. So again, just to go over the the code book for that's available right now for the sample data that anyone can see and use to help create some of these analysis plans. It's available in a spreadsheet with one of the tabs describing information about the data. So information about what variables are available, some more descriptive variable labels, question text in English, etc. As well as a tab that is the code book for the code book describing what each of those columns actually describe. And so this will help you interpret that data in the CSV format and provides a little bit more context than what's available in those RDS files that we have also provided. So I think that wraps up my section. Thank you. Thank you very much, Theresa. That's great. So we have some opportunities if you'd like to participate in some research with us. So the Centre for Open Science is expanding the knowledge base on the effects of registered reports and pre-registration with a randomized control trial and a survey in the Global Flourishing Study. The study will measure effects such as the impact of registered reports on timelines from conception to publication, publication outcomes, in other words, which studies are ultimately published or rejected, and researchers' beliefs and experiences with registered reports and pre-registration. So this is the participant workflow. There are four arms so participants can agree to be randomly assigned a GFS data access pathway, which would be either pre-registration or registered reports, and be surveyed on their experience, or they can opt in to be surveyed on their experience with either mechanism after they've completed their GFS registered report or pre-registration submission. Anyone can enroll to be randomly assigned a pathway prior to uploading a submission to the GFS registry, and the main outcomes will be comparing the two randomized participant arms while the self-selected participants will help us better understand selection processes. Pre-registration and registered reports could be potentially transformative to how research is conducted, and so there are great examples of people we would love to encourage to enroll, and these groups are researchers who want early access to the GFS data set, but are undecided on whether to do a pre-registration or a registered report, researchers who want to try out a registered report but aren't quite sure how to start, and researchers who are willing to be part of a growing evidence collection on pre-commitment devices like registered reports and pre-registration. There is a lot more information on the COS website and there is an enrolment button there, and again you will be able to get that when we send these slides out. So how do you get some help? So you can read more about the materials presented here today by accessing our full suite of training resources for the Global Flourishing Study on the website, so I encourage you to do that. In terms of the pre-registration that Mark went through, we have a guide to pre-registration. We have a pre-registration template which looks exactly the same as the one that he demonstrated on the registry, but this is a downloadable Google Dock, so you can collaborate on that, get your pre-registration right and then just cut and paste it into the online version if that's a way that you would prefer to work. The code book as Teresa has just explained, and we also have a lot of FAQs on the website as well. I'm sorry, I just lost my space there. Okay. So you can also email me at globalflourishing.io with any questions you have, and I can point you in the right direction. Mark is very happy to have one-on-one calls with anyone who wants to walk through entering your pre-registration. This is great for you because if you have any in the moment questions, he can help you with that, but it's also great for us because we can then identify whether any issues or something that's unclear and we can go back and amend the workflow to make it easier in the future for all of you. Please join our email list to receive updates. Given that you've actually signed up for this webinar, you will get updates, but if you know other people who want to receive information as well, please join that email list. You can find the link on the website. The other key thing is please go and visit the research website. There are five tabs there, all filled with lots of information.


Welcome. It is time for an update. So where am I? This is technically my closet. So there's a long story. Basically, if you were wondering where the reviews have gone, because I haven't done any reviews for a long time, I had a table set up right next to my main computer where I record things, the lectures and all that good stuff. But that table was actually supposed to be an empty area where I can push my couch in there. It's very complicated because I want to make room in my main office so that I can play VR, which has been this beast here. I do love this here. It's kind of like an old school zapper. Fantastic. Leave this here. So if you have a Vive, this is your whole setup with this craziness, this tentacle thing. Let me put this back down here. But anyway, I still have been playing, but now there's something new that arrived, which is this beauty. In here, you have a very simple setup with no cables, and it's just this. Fantastic. So as I've gotten more into VR now because of this fantastic piece, let's put this here. I took the table out and because of that, no reviews. I thought super silly. I could have done the reviews on the other table, but I had this whole setup with overhead camera and everything, which I have now here. Everything is set up in here. And this was already my closet with all my boxes and stuff like that. So I kind of dressed it up a bit so it's not a super boring closet. But long story short, reviews are back. They're not going to be every week because they've got to take time to look at things, but I still have a long list of things I want to review. So they're going to come. I'm not sure if it's going to be Tuesday, review Tuesday as I did a long time ago, but maybe on Fridays. I'm still kind of torn if I'm going to do Thursday act analysis and Friday is kind of a rotating FNA review Q&A because a lot of people have signed up for my workshops. Thank you so much. And I do want to post these online and there are a lot of them plus my archive and it does take up Monday, Tuesday, Wednesday. So I'm still kind of shuffling around the schedule. So if you have been confused or impatient, I'm trying to keep the Thursday, Friday and the Monday to Wednesday critique thing going. So if you're okay with that, that's awesome. Let me know in the comments if you have any specific ideas or requests or concerns or questions. So I think for now, I want to do a Monday, Tuesday, Wednesday critique posting schedule Thursday, active analysis because I do watch a ton of stuff and have so much material. This is going to continue. And then Friday, I think, I think again, let me know because I don't want to also put too much out there, but also not too little. But I think Friday is going to be a rotating thing of FNAs and reviews and Q&A's and and just other things that want to post those spoilers, which I think will also help me because it gives me more time for the FNAs because now they're less about theory lectures, they're more hands on. So there's more actually animation examples and that takes more time. So I think it's going to benefit me as well. But anyway, I want to throw it out there since you are all the consumers of this. Let me know. Let me know if you have any concerns, questions, requests, suggestions, bribes. I do like chocolate, real sport hazelnut milk chocolate. But other than that, I think that is it. I'm very pumped about this, by the way. So this is so cool. It's so simple. I love it. Simple in terms of the setup, no cables, just turn it on. It's great. Someone asked if I'm going to do a review about it. No, because there are so many people that have done really good tech reviews and I'm not a tech reviewer. But if I do find anything that's animation related, maybe I can side load some animation VR stuff that I have for the Vive, I will definitely do anything that's animation related or type of filmmaking thing. The thing that that's kind of what the channel does. But there you go. That is it, I think, for the update. So more stuff coming. Reviews are coming back in this nerd haven. And I also wanted to close by thanking everybody. My subscriber account is going up. People are submitting questions. They have comments. It seems like people watching this and it helps them. So I'm not taking this for granted at all. I'm shocked that so many people are watching. So I wanted to say thank you. Thank you to everybody who is commenting and posting and viewing and sharing. It's absolutely fantastic. It's very encouraging. And there are more Q&A is coming. There are lots of questions and backlog that I want to answer. So Q&As are coming. But still, if you do have any questions, anything that you want me to add, again, comments are open. Let me know. That is it. I'm going to close it here. Well, that's it. Thank you.


greetings my dear subscribers today I thought to show you something utmost blasphemy and this will hit you right in the fields if you are a true friend of Mother Earth. I will play a clip right now and you can avert your gaze if you are not ready to intake this this heresy but I will play it here. So what we have before us is a truckload full of trash which is being emptied right into the Amazon River and the reason for me showing this is first and foremost because as the title suggests I can no longer endorse this barbarism with my silence so I want to you know say that this is wrong and I want you all also to agree that this is extremely wrong this is not worthy this is not how anyone should treat Mother Earth and also a secondary reason for me showing this this is from Peru and I am quite sick and tired of hearing how bad Europeans are for destroying Mother Earth apparently and Sweden is extreme as in all cases so what they do here is that they tax the people out in the countryside making it ever more expensive to own a car and to drive a car because they think the people in the in Stockholm the politician class in Stockholm they think that you know Sweden can save the environment with these measures punishing the people in the countryside but if we are to be real with ourselves here who are the people who are polluting Earth yeah it's not Swedish people it is not Europeans Europeans driving cars to a lower extent is not what will save Earth the people who are polluting tremendously the people who are treating Earth in this way yeah it's not Europeans this is in Peru so two things I would like to say is that first and foremost this is completely unworthy and secondly yes this is not Swedish people this is not European people who are doing this so you can show this next time someone tells how bad white people are white man bad is probably what these NPCs are saying also my last point here is that intervention I'm not by any means a an imperialist but when I see stuff like this it really makes me think that if I had the reigns of Sweden at least I would have no problem at all stationing soldiers to make sure that no one treats the environment in this sort of way it's one thing if our country wants to mistreat its population and I'm not for intervention in those sort of scenarios but when it's something that ultimately affects all of us because this doesn't stop in the Amazon river this will continue on I have no clue where all of this trash will end up well actually I do have a clue it will probably end up in the stomach of some sort of sea creature and destroy the wildlife along the river so anyway a bit of a black pill I don't want to just talk about negative things but I saw this and I just had to say something about it that being said I will make some more positive videos and more self-improvement videos moving forward because as of late for some reason there's been a lot of negative things a lot of bad news etc so yeah I will do that going forward and lastly I would like to aim a massive heartfelt thank you to everyone who signed up on Patreon and Subscribestar over the last while your support is excruciatingly appreciated thank you for watching XOXO boom


Good morning, still okay? Everyone still okay? Okay, so I'm Spencer. I'm a UX designer or a user experience designer. I work with TitaJC at Web Dev Studios, and what I do is design the websites that I hand off to the engineering team or the development team to where they do the coding for the website. So today, I'm just going to tackle a few simple concepts with regards to how you would design your websites. Just simple things that some would consider basic but are really important foundations that even professionals still use because it's a very important thing that affects all your design. So to start, I'm just going to try to make it simple because we have a wide range of ages here, but if you have any questions later or be it something more advanced or if you didn't understand anything that you want to simplify more, please let me know. But to start, does anybody have any idea what design is? Just how you understand what design is. Anybody? Gab, right? So most people equate art and design as a similar thing, but for the most part it is similar, but when it comes to art, art is more expression, whereas design is more, let's say, purpose driven in a sense that you are trying to achieve something or try to make things work better rather than just making things look nice or making things look pretty, although that is a big part of it. So in terms of, like I said, it's more than just making things look pretty, but it's also making things functional and easy to use. In our case, with web design, it's trying to make your website not only look attractive and catches the attention of your visitors, but also to make sure that they are able to use your website as long as you intended it to and then to not only make it functional but also easy for them to use and give them a hard time to look for the things they need to look for and the things they need to go to that you intended them to go to. So next, like I mentioned, I'm just going to go over a few basic things that are still very important foundations. To start, I'm just going to go over three basic things, which is color, space, and size. Let's start with color. So colors, this is in terms of what you'll be making later and something you can use later on as you advance in your design journey. But colors should have contrast. I'm going to explain more later because you also have to consider that not everyone has good eyesight or some people have vision problems such as color blindness or they can't see very well from afar. Also, there are exceptions. Although there are exceptions, you try not to use too much colors in your design. There are examples where in like Tita Jay's presentation where she used a lot of colors since this is intended for kids. But if you noticed earlier, there are still two or three main colors that are sending out and I'll explain more later. So in terms of contrast, what it means is like how your colors are different from each other. If you can see the chart here, there are color combinations that are marked good or poor. For example, in like with the color orange, who knows like what the color combination of orange is? Anybody? What color and what color makes orange? Yellow and red, very good. So as you see, orange is a combination of red and yellow. It's not very visible here, but there's a word poor here in red. And it's not very visible because the contrast is very low because it is still related to the color red. And that's why you had to make sure that the color combinations you use are different enough that you are able to read things or differentiate things that are in your design. And then when it comes to using too much colors, if you see here, this design is basically using all the colors in the rainbow. Although some might find it attractive, it's not a very good design in terms of you are not able to find the things that you need to find and it is very hard to read. So that's why my advice is, although there are exceptions, you try to stick to two or three color combinations so that aside from being not too overwhelming to people, it's also easier to remember. For example, what is the color of Facebook? Does anybody know? Exactly, because they're easier to remember because they only use two or three colors. How about Spotify? Exactly, so my advice is you try to lessen the colors you use. It's fine to use more colors, but you try to use two to three colors that are more of your main colors and make them stand out more. And then space. What do I mean by space? It's not after space or like rockets and spaceships. What I'm talking about here is the space between the elements of your website. So when it comes to space, don't be afraid to put space around your objects. Most people try to crowd things and not just with web design, but with most things, they try to put so many things in their layout. But you have to make sure you have enough space so you let your design breathe because space around objects help people focus and draw their eye towards what you're trying to make them look at. So this one is a very bad example of using space. As you can see, everything is very crowded. It's too many objects, too many colors, and you have a hard time looking at things and looking for anything you want to look for compared to the Google homepage. Everybody knows what Google is, right? So the main thing that Google does is for people to search on the Internet. So what they do is put the search bar right in the middle and put a lot of space around it so that when you go to their website, you immediately focus on the thing they want you to look at and what you are looking for. In a less extreme example, so this website right here, although there are so many things around it and there's a big picture in the background, most people will get drawn to the middle here with the text because they put enough space around it that you are still drawn to it, your focus, your eye is still drawn to the text right there and because the headline is big enough in both, that's the first thing you try to look at. And then the last thing is size. So the size of your elements in your website. So the first thing you have to think of is to make similar objects the same size. The human mind is trained to try to group or make, what's the term? Try to group things together that are of similar size and color so if you have a list or like a grouping of some sort, you try to make them the same size as much as possible. And of course, you try to make more important things bigger. So for example, which part of this layout did you read first? The big one, right? So of course, like I mentioned, make the more important things bigger. So immediately the first thing you see is the biggest text in the middle. And then the next one is the second largest and then so on and so forth. So when it comes to designing your websites, you make sure that the main thing that you want people to immediately see is the biggest thing on the website. But of course, you have to keep in mind the previous things I talked about, which is making sure there is enough space around it so that it's not too overwhelming. And at the same time, you have enough color contrast so that it is easier to read. So to review, the things we talked about are the web design foundations of color, space and size. As I mentioned previously, you try to use this together to make not only a better looking website, but a more effective design to make sure that it is usable and easy to use. Okay. Any questions? Questions? About questions? Okay. How about I ask the questions? What are the three things I discussed today? Anybody know? Prices? Very good. Okay. I think that's it for me. If you have any questions later that you are too shy to ask in public, please let me know. I'm always open to answering any questions you have. So thank you.


My name is Ronaldo Carvalho de Melo. I work for Red Hat for the last 14 years from Brazil. And I presented several times at DevConf, but always in Bernou, not like this now without seeing anybody, which is really strange, but let's try it. This is about a, so this is about the BPF type format, which is a format for encoding types like C types, the kernel types like kernel data structures, user space data structures, kernel ABI data structures, et cetera, et cetera. We came from the BPF subsystem, which is not really the main topic for this presentation, but it gave us a BTF, which is a very compact form of representing types, which ends up as a fraction of the DWARF, which is another type of information, but it as well has a fraction of what is contained in DWARF. All the tools besides the BPF ecosystem use it as well. For instance, you can use in the kernel to have a print K, let's say, or some S and print F that you pass a pointer and you specify what's the type for this pointer, and that will instead of printing just a integer or a string, it will print the whole type, like you do on tools like GDB or Crash and things like that. So, and I will show something I did, which uses this information to do the printing of raw data, arbitrary data, using the BTF type information that is available now in the kernel. So, where is it in the kernel? In the kernel, you have a new ceasefire called the cease kernel BTF VM Linux, and all the types for the kernel, all, I don't know how many, it's thousands of types. They are all there. You can get full information about it, all the name of the data structures, enumerations, everything. And more recently, we have it available as well for kernel modules with a feature called split BTF, which we'll come to. So, what is in there? All kernel types, both the kernel ABI, which is set in stone, so it's something that was defined at some time in the past, and then we can change it, or we can perhaps add some new field, but while keeping the existing ones with the same semantics and at the same offsets from the start of the data structure. And we have as well kernel internals, which are always in flux, like the internal kernel data structure that represents a task or a socket buffer or what represents a block device or things like that inside the kernel that they are not covered by the kernel ABI. Sometimes for companies like ours, for Red Hat, we have some extended kernel ABI where we guarantee that even internal data structures don't change like things that are in the upstream or community kernel ABI. So, let's see, with these, that there is a tool which I wrote long ago which can consume both BTF and Dwarf. So, you have this, the name is PA-Hole, which I will explain a little bit about it later. And, but if you just say PA-Hole, rwloc underscore T, what you are asking for these data structure, be it a enumeration, be it a union or a struct or a type there for whatever. And since you don't specify where to get this information, it will look first at the BTF information, which nowadays is present on most distributions. If you look at the system right now and it's up to date, then you're gonna see it on that location that I specified. So, it will get this information and will reconstruct the data structure on the screen in a way that is even compilable. And it will provide several extra information like its size, how many cache lines it uses, how many members, what's the number of bytes in the last cache line. This is interesting for developers, PA-Hole. So, it started for looking at strict holds. So, you get the kernel, the kernel has thousands of data structures and these data structures have lots of members. If you are not careful, you can end up with alignment spaces between the members in a data structure. That if you are careful enough and reorganize the data structure, you can make it smaller, it can consume less memory, less cache lines, and you can make the kernel faster for things like network socket buffers or for what represents a data coming to and from a file on a disk. But this name is strange. So, let's call it another name. So, we can use aliases in the shell command-interpreter and just say, no, when you call type def, it's the same thing as PA-Hole. And you say struct, it's the same thing as PA-Hole. I'm gonna say union or enum. And then you can do, instead of PA-Hole L, L lock T, you do it very naturally, like type def, L lock T, and then you get this type def that you ask for from the kernel that is running on your machine right now. If you do struct list head that represents one entry or the head of a linked list in the kernel, then you get this other data structure. Let's see, if you do enumerations, if you do enum and then this name, perf event type, you're gonna get the enumeration again in a way that you can even recompile or and build it on your source code. And this is used in BTF programs to when they are building bytecode from the restricted C. So, and this enumeration, keep it in mind. We're gonna use it later. And when I meant all kernel types, it's all kernel types. And then you can then use this expand types option of payhold type def. And then it will get that RWLock T, which it was like this, like this, and expand it all the way down. And then you'll see that a arc RWLock T is in fact a strict keyword WLock, which is in turn an union, which has an atomic T is in turn, just an integer integer that is accessible using some special operations. And then you'll go all the way down and you'll get the offsets from the start. This can be useful when you are decoding kernel Opses or that you want to know what is that some offset on a complex data structure full of sub-structures. But okay, let's continue. Split BTF, split BTF is for kernel models. So the kernel module BTF, which has the types that are exclusive to this specific kernel model, refers to the kernel BTF information so that it doesn't duplicate it. It's available since payhold version 1.19 and the kernel 5.11, the last one. So it's not yet enabling things like Fedora. You have Kconfig variables for that. This kernel specifically was built with Clang and it works as well. So when you go to that directory, the C's kernel BTF, instead of just the VM Linux, you have one per module, okay? And then what's in there? You have, you call payhold ACP, ACP IPad, specifying this ACPi underscore pad as the name of the file that you want to print all the types. It didn't work because you didn't specify what is the base BTF. So you have to do this BTF base ACPi pad and then it gets the first data structure that is specific to this kernel model, okay? If you do it like this, payhold and you specify this prefix here, then it does everything for you, it specifies a base as VM Linux and goes on. Okay, can I do more? Okay, we can do more. Using plain structful is powerful. You'll now, you want to see a kernel data structure just say structful and you'll get the kernel data structure for developers, for reconstructing type, no need for kernel headers. You can, instead of using kernel headers to build something that will ultimately be turned into a binary and get into the kernel, you just use this type information that's available on every machine. It matches the running kernel, some more. Then that's the part that I, some extra utilizations. There is a coworker at Red Hat called Joe Lawrence. He came to me and said, behold knows about types. We need to extract more diversoning info in shell scripts. It's related to work that we do in kernel live patching. Can you help? I said, sure, let's try to do some prety printing of raw data using type information to format STD in the standard input of behold and let's support arrays and it's available in this version of behold. Okay, so mod version info, you'll get this information from a kernel driver which is compiled with this specific feature. And then that's, this is the data structure, okay. And then let's prety print it. We have to extract this using be new tools, object copy, get this versions section and output it to this version file. The version file has this size and then you say print the first three entries on an array that starts at the offset zero of this versions file and get the information from the kernel module. The type is this and we get this. So, yeah, it seems satisfied what Joe Lawrence asked me. So let's go to something else. You now get ADI stuff like ELF64 header from the kernel. That's the definition of the type. And so if we get some any binary like bean bash and then you say, give me the first one and then it's the first one that's the header. And then if you look at the, at those numbers it will make sense. And then for BCP as well. And then case closed. Okay, no, let's add some more features. Dash, dash header. Instead of saying that's the one counter you say that the header for this thing is ELF64 HDR. And then it will stop. There's just one header, okay? So we can have as well header variables that few this in the header type that can be later referenced to the code ranges in the file, for instance. So the path data header, I maintain the path header, the path tools in the Linux kernel. So I was thinking, yeah, I may use this to, to decode the path data file. So you'll have the magic number, the size of the whole file. So the information we need to see to get where to start decoding types like the attributes or the events are here or they offset the size, et cetera. Okay. So we go to, to see the path header, the path event header, it's a variable size of record. You have a type which will specify how to decode this thing. You have a MISC, which are flags and they'll have the size. The variable size and record is specified here. The kernel produces this in the user space or any other program that uses the path event interface will use this information to know how to decode the information produced by the kernel. So in the path tool, when you specify here that's the path header is the same thing as an ABI. Perf can have this in a BTF format or in the war format, doesn't matter. The PAHole can use both. Then it uses variable size of records and has well-known member names like type and size, which is good. So if I say sick bytes, which is an option to that offset and size bytes, which is after this offset, how many bytes are related to this specific path event header type? And then I say, give me the first four, count four. And then I say that the size of operator that will specify what is the size of this variable size of record is the size member inside the path event header type. So it shows me the first four, but then since there is no information here, it's just an integer, the best thing you can do is to show just numbers. Then if you go and tell something else to use header variables, you can just reference like this header data offset and instead of hard coding the numbers. So it will use the dash dash header per file header, get the information there from the perf data file and you'll get the same thing. But then do you remember that enumeration path event type? Oh, take a look at this specific one, the perf record com. It's number three. If you come back here, we know that this one is three. Okay. If I say that there is a field in this perf event header that is the type for this thing. And then I say, and if I don't specify type equals something, it assumes that is type equals type, it's just type. It's a well-known and member name for this specific semantic. Then you'll specify that the enumeration for the type that's specified here is that perf event type, okay? So it will get that number for a and try to do a lookup in this enumeration. And if it finds it like it did with the number three here, things starts to get better. You get the perf record com instead of just three. And then this enumeration has something interesting. Something interesting. It mapped number three to perf record com. And then the types here shows that it's an union. So com has the same start as the header. And I can go from this enumeration, if I do lower case on it, to this type, okay? Okay, and then I know what to cast that specific chunk of data coming from the standard input, which is to this type, perf record com. And then I can get to this. I know that there is a PID and I'm formatting it as an excellent estimate because I just ask it here. And then I know that the com is a string and then I can do better. And I can do this for all the other types, all these types and get everything decoded. Okay, there are lots more, but we end up with something like this, which let me explain the time is going up. So you have PIO, you say being perf, where to get the data types. You say that the header is this, so this type that it gets from here. And you say that the records of the type perf file, 80 tier, and then you say in the header, get the range from these member that has offset and size, same thing for perf event header.  And I say that to decode those types, you have to use this enumeration plus this other enumeration, combine the two and then decode everything. Okay, so the goal here is to use it to document the file format while providing a full printing printer, replace the damper of raw events in perf report. New records that we add in the future will get automatically supported. The future is to experiment more with this, finish the perf data disector with features that are not specific to it. So you can use this to decode the gif file or a whatever, any other type, any other file type, integrated with the decoding that is present in perf for that maps integers in kernel ABI strings where they are not documented as enumeration. And try maybe add some other features that this features to all the tools, like ddb or crash and fix box on this presentation. This presentation is available here and together with other presentations about BPF. And there are other features that are already present like filtering by the enumeration number that maps back to the number. It's already quite capable. So that's it for the presentation. Now it's time for questions. I thank you. Thank you, Arnaldo. It seems like we don't have any questions in the Q&A section but if anyone want to ask anything please follow up on the Discord server, on the Discord track in there. And I think that will be everything. Or if you want to add anything, we have still four minutes left. So it's really up to you. Yeah, I mean, this BPF thing is really enabling lots of new features. All this type information was already available in DWARF but DWARF was too big. DWARF version five and four improved a lot in this regard. There are new features where compaction is possible. But by now, BPF is supported inside the kernel by the BPF verifier. So a really vibrant community around it popped up into existence. It's used, I mean, in lots of places in BPF Trace, I saw a talk yesterday by Aji Osha that worked with me, even MP A-hole, that where he showed examples where you can specify accessing tasks, strict fields and in the past is required that you use it kernel headers that should match exactly that kernel that you are using. This was a source of confusion sometimes and problems. But now, since the type information for the kernel is shipped together in the kernel image and when you boot it, it is available there and the kernel can use it from inside the kernel to validate the kernel. It's from inside the kernel to validate lots of new features that are being implemented in BPF, like BPF compile once, run everywhere. It's really exciting what you can do with this. I mean, it's fast to use it. You don't have to process lots of data. So I really think that people should look at it more and find ways to use it since it's available everywhere. Thank you very much for your talk and for the new tool to try. And I think that's it for this talk. Okay, thanks a lot. Yeah, thank you, Arnaldo.


I mean, when you create one of these modern web applications, basically you need static files with JavaScript a lot on the client side that will be running on the browser. Then you will have maybe some Node.js that will do some API for you. And your web application will only interact with this API. And mainly all the code is there. So then you can take all these files, you can put it on Amazon on a bucket. And even you can use a CDN, and your site is very fast. I mean, all the files are there. All the code is very fast to distribute among the clients. But basically you don't have Git push your site. You do some minification and stuff. You want to upload your site on production. You will maybe take all the files, overwrite everything, and put it there. So that can take like 10, maybe 15 minutes. If you have a site with 100 files or 1000, right? So we got fed up by this because we wanted to be able to, like, dozen of times per day to be able to change files, put in production, see the results immediately. So we created this small tool, S3front. And it's very fast. It helps you to do that. I will show you some examples. I hope it's OK now. The adapter is not Apple. That's why. So basically, OK, let me just... It's a command line tool. So to use it, you just install it with NPM. And then the configuration is parameters. Yeah, we'll remove this after. So you give the access key, the secret key, your bucket. You don't see it. Slash B, your bucket. OK, this is the Bangalore website, Bangalore.js.org website. And you just upload. And that's it. You see, it's very fast. So what we did here, we didn't do nothing because... So first, when you upload your website, it's not doing one file after another. You can do like 10 files in a batch and then 10 more. So it's getting faster. But still, it's not fast enough because when you have a big site with thousands of files, maybe, you don't want to wait that much. So what we do is that we have some small JSON file. You see this S3front.json, OK? Basically, in this file, we keep the MD5 hash of each file. So that next time you do it, you go in the directory. You'll be running your S3front. You will check into this file for the which bucket you're uploading. If it's there, uploaded, it will not upload it. That's why now, the way I did it, it was so fast. So you see for each file, we get the MD5. So it's a really tiny tool that can help you as the faster you can deploy, the more happy you get because at the end of the day, if you have to wait for this, it's like a pain. So yeah, basically, that's the tool. It's on GitHub slash minj slash S3front. You're welcome to use it if it's useful for you. And yeah, there is one more option. So it's not working all the time. But you can specify to invalidate the CloudFront distribution if you use the Amazon CDN. And so it's checking if the domain name is the same. So sometimes it's not so working, but it can be useful also. And yeah, that's it. Any question, guys? Like running, watching, kind of. Yeah, would be nice. Exactly. So OK, thanks, guys.


If you're a bit of a nerd, you've probably heard of the collax conjecture, is a bit of mathematics, is supposed to be really simple to understand, but really, really difficult to prove, number file and a few others have done some really good videos on it. I don't want to get into the maths of it, I just want to show how to maybe do that calculation in a spreadsheet because it turns out that because it's recursive, a recursive lambda function is really a good way of dealing with it. And so it's a good tutorial for how to maybe put in a loop of some description if you want to get this blaster thing to do some coding. So what is collax conjecture? Well I'm going to start with a number and then we ask a question. If it is even, so if that number is even, what I want to do is take it and divide it by two. And if it isn't even, well I want to times it by three and plus one, so I get sixteen which is even, so it's going to half to eight, it's going to half to four, two to one. And what you see is when you hit one it begins to loop and maybe we could do different numbers and you can see the conjecture kind of states that everything should hit one and do that loop one back to four, two, one, four, two, one and so on. So sometimes these go on for a very long time and you might not know exactly when it stops, so we could do this and drag it down but this one on your 27 goes on to I think 111, 111 iterations to get it down to one. And this has been checked up to huge numbers, I would not recommend doing that in a spreadsheet, oh come on this is just a tutorial for how to do the lambdas. So we want to be able to loop this around as many times as we like. Now first thing, this is a little bit of an aside, this is even function. I'm going to write down a sequence for a second, I'm just going to put it in 10 rows. I'm going to ask is even, let's close that, false and we'd expect true, false, true, false, right, that works. Now if I put a hash here to make a dynamic range error, this is a little bit of a, it took me a while to figure out what was going on here. These functions are coded up in a particular way that only accept a number, they don't accept an array. You can override it if you simply put plus in front of it and it works. It's really weird because if we actually wrote, let me just copy that, actually not copy, type it. If I wrote out sequence 10 and put it in there, it also, it works. It just, it doesn't accept a dynamic array. It's really, really weird that it does that, let me just put it back in. It doesn't accept it, but I can overwrite it if I put plus because then it thinks that it's a number and it works and it spills down normally. With that in mind, we'll have to put that in. You could also, there's more than one way of doing it. You can do a mod function and see if that is equal to zero to work it out. You do it that way. What we need to do is figure out a lambda function. These are ways of creating short user defined variables. Do a very quick recap of how that works. Let's say we've got x and y are our variables and then we say x plus y. Calc doesn't really do anything, but afterwards we can put a new bracket in and define our variables x and y. In order to four, this should produce six. There we go. Now, if I then copy my whole lambda function, control C there, go to formulas of my name manager. I can just call this maybe add. Now I'm going to paste it in there. Close that. Now I have a function called add. It will tell you what you need based on what you told the lambda function. I've called it x and y here. It's going to execute x plus y. I can add it in once I've added it to the name branch. For recursively calling these, they're a little bit tricky. I think this is probably not necessarily a feature. I think this is just a hack on top of what the lambda is supposed to be doing, but it does work. Let's start with the lambda. What we need, I'm going to take an input. That's going to be whatever number I'm going to do the collat's conjecture on. Then I want to set up basically a for loop. If you've done coding in Python JavaScript, you'll be familiar with loops we want to do something a certain number of times.  We want a way out of it. I'm going to put i for an index and then a limit. These are the three inputs I want. I want to deal with a limit and then i, which will be a certain number, which will increase until we hit the limit. What is the function? First of all, we need to think about how we're going to escape the function to stop the loop. I'm going to do if i is equal to the limit. I'm going to write timed out just to tell us that we've hit the limit. That's false. I want another escape condition, which is if the input is equal to 1. This conjecture says everything should hit 1, so we're going to return something. Reached 1 after space and i, I'm going to put in. If that is not true, so if we aren't timed out, if we haven't reached 1, I'm going to call my function. I'm going to call a collapse. At this point, we need to look at the very beginning because this is what we are doing. What does the collapse conjecture ask us to do to the input? That's where we get our if statement back again. If is even, I'm going to plus the input. If that is true, then it will be input divided by 2. If not, 3 times the input plus 1. Let's close that if statement. I move on to the next thing. This is what we're doing to the input. Every time that we call the function, we will do this to the input. We also need to change i. That's our next thing. We're going to do i plus 1. Whatever we start with, we are going to increment it by 1. We just push whatever the limit is. Close a ton of these. We get the calculation error because it's trying to call something that doesn't exist yet. I'm going to copy that.  This is what I wrote down earlier. I'm going to paste that in there. Hopefully, if I do, I'm going to put in number 5 here.  Is that 5 that I wanted? This is the index. I'm going to start this from 0. If it's 1, it hasn't done anything, so it's going to return 0. The limit, I'm going to say, run it up to 10 times. If it hits the limit, it's done it 10 times. It will stop and just tell me it's timed out. I've reached 1 after 5 attempts. If I put 2 here, I've reached 1 after 1 loop through it. I've reached 2 times, I've reached 1 after 3. If I do 7, I've timed out. Let's me increase my limit. There you go. It takes 16 attempts to reach 1 from 7. If I put 7 over here, you can see 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16. There you go. I've hit 1 there. Obviously, 27. This one takes a long time. I know this is 111. If I increase my limit to 200, I've reached 1 after 111. Iterations. I'm going to go back to my name, manage it and clarify that a little bit. I've reached 1 after and I iterations. I'm going to put and iterations. There you go. Maybe I've timed out after space and limit. In fact, after I keep it consistent. If I put my limit back down to 50, timed out after 50, put up to 1,000, I've reached 1 after 111 iterations. Now, if I do a sequence, 10 rows, and I want to change this D5 to a hash, this will tell me which one after however many iterations. This has worked. Maybe I can send this to 100. I've done it quite quickly. Let's try 1,000. How long does that take? Maybe a couple of seconds, but it's all been done recursively. Once you get to large numbers, maybe we start running into some maths errors, but you should not be using this to test the super high numbers. This is not the right software for it. This is just a tutorial on lambdas. Let's recap that. The thing that we need is we need to know what the input is, what we're going to change. You need to initiate some kind of index for a loop, a limit to stop it, and then your function must start with if, and you need to kind of put the escapes there, so if i is the limit timed out. If we've reached the end, well, we'll put the output condition, and if all that falls, call your function again. So you need to know what your function is going to be called in advance and write it in, and we need to put in what we do to the input number, what we do to the index, which is incremented, and then the limit where we stop it. That is brief introduction to lambda functions and a rather silly little case to be to test it with.