I'm really nervous right now. My PA community down, okay?  Zidane, welcome back to my channel. So for those of you who are new, thank you guys so much for joining me on this journey right now, stay well, subscribe and hit that notification bell. Everyone that has been rocking with me for the past year and a half, I appreciate each and every one of you. Thank you guys again for watching and welcome. So I'm really excited about this, you guys. I guess you could tell by like me just being all like super bubbly. But I'm super excited about this because you know, people are always like, I've heard a lot of PA's and like PA students and stuff say and even some like physicians.  And I'm like, okay, like, I don't know because I've never been to med school. So I wanted to kind of test it out for myself. That's why I was happy when Licturio offered to sponsor this video and let me try out their app. It has a bunch of questions for their QBank different, various different questions for USMLE, Comlex and MBBS. So I'm gonna do some of the USMLE questions to see how I do, see if PA school is like teaching me what I need to know or teaching me more than what I need to know, you know or, you know, teaching me on par as like a med student, I don't know. So we're gonna check this out. I'm gonna show it to you on the screen as I go through some of these questions very briefly for you and then I'll talk about the app. Okay, so I have my Licturio app here. So it has like a question of the day. I don't know, like I'm really nervous. My PA community down, okay. So by no means am I like the end all be all for a PA students and their knowledge, but let's see. Oh my gosh, this question is long. 55 year old man presents the emergency department with shortness of breath and weakness, pastoral clustering includes coronary artery disease, arterial hypertension, chronic heart failure. He reports that the symptoms started around two weeks ago and have been gradually worsening his temperatures, 36.5, which is 97.7, BP13501, puncture heart rate 90, respirations 21, O2 sat 94. On examination, a mild JVD is noted. Oscultation reveals bilateral crackles, hitting a Tema and lower extremities is noted. Okay, his plasma brain BMP level on rapid bedside assays 500, just X-ray and it indicates enlarged cardiac silhouette. Okay. His, he is diagnosed with acute on chronic left heart failure with pulmonary edema and receives immediate care with borosimides. Okay, so he's, they use Lasix to like get the water off. The physician proposes a treatment with a new, oh gosh, naparulosilin inhibitor, which of the following changes below are expected to happen if the patient is enrolled in the trial? I have no idea. Like, I have no idea. Oh my goodness. I don't even know what we're talking about right now. Okay, so we're gonna do increased water reabsorption by the renal. Okay, I'll probably say that, naparul, like so like that sounds like it's dealing with the kidneys. I may be wrong. If he's having left heart failure, he's gonna have edema. So collecting dots is what causes the water, is where like waters reabsorb. I don't know, guys. So I'm gonna just go with that. Like, I'm not even gonna draw this out. Let's see. I was wrong. Plus a fail. All right, so I'm gonna end that, end this test, cool.  A diagnosis of congenital pancreatic anomaly is made, which of the following statements best describes this anomaly. Most of the patients with this condition presents early in childhood with abnormal symptoms. I mean, well that obviously doesn't make any sense. She's like 45 degrees. She would have had those symptoms already. I said 45 degrees. She's 45 years old. Oh my goodness. It is a rare congenital anomaly of the pancreas. Patients with recurrent episodes of pancreatitis due to this condition do not require any intervention. Please. Magnetic resonance, colandio, pancreate, to graphy. That is such a tongue twister. Scanning of the abdomen is the most sensitive and non-invasive diagnostic technique for this condition. I mean, I think stack sign is lead poisoning. I'm gonna go with this. Ah, and I got that. Oh my goodness. Like, I don't know, am I sweaty? Let me see what stuff they have here, Mark. Okay, so we can flag the questions. We can see lab values. Oh, we can add notes. What is this about? I don't know. I don't know, I'll see that note later, but I'll look at it. So, and then we can do reverse. Okay, so I'm gonna do reverse. A two-year-old boy is brought to the emergency department by his mother for evaluation of severe abdominal pain that began one hour ago on examination. The patient is a fibril and has to be diffused rebound tenderness with acute left lower quadrant pain. A stool going, test is positive. Small bowel perforation is suspected. What is the embryologic structure that is the underlying cause of this patient's presentation? So like, I paid attention in pathophysiology, but like, it wasn't easy. So, this is like a patho question. I'm gonna go with this, no. I mean, they're trying to trick me with this virmia form appendix because there is rebound tenderness, left lower quadrant. But you know, like, if you do like, Roth's things for appendicitis, you'll get that, that tenderness. But I'm gonna add some Meckles diverticulum. Okay, so it's extends outside of the ilium. So I like this because it's giving you like all of the reasons why virmia form appendix is a finger like structure that buds off the cecum near the iliocecal valve.  So, there we go. All right, so I got one wrong already and then I had like the other two, right. A 22 year old woman presents to the gynecologist for evaluation of amenorrhea and dyspirinia. Okay, the patient states that she recently got married and has been worried about getting pregnant. The patient states that she's never had a period. And that sex has always been painful. On examination, the patient is Tanner stage five with no obvious developmental abnormalities. The vaginal exam is limited to secondary, limited secondary to patient discomfort. The vaginal canal is hypoplastic with no visualizations. Let me see, so what was my things? What can I do here? Can I, no, I can't. All right, so what is the most likely cause of this patient? It would be really cool if I can highlight some of this stuff, but I can't. Like the hypoplastic vagina and Tanner stage five, dyspirinia and amenorrhea. It's not hyperperlactinemia. That's, so it's, she's not like that stuff. And it's not PCOS.  Exposure, you didn't know. So it's Turner or malaria. I believe, like I'm pretty sure it's malaria. Turner syndrome is, I don't think it has those things. Malarion is the one that is like amenorrhea dyspirinia, but it's really the hypoplastic vaginal canal. I'm gonna go with that. Kill it, it's, and I'm excited about that. The malaria duct, also known as the, okay, whatever, is an embryologic structure found in both male and female embryos. The malaria duct forms the fallopian tubes, uterus and cervix. So this is cool, like I like that. It gives you everything here on the app.  And that is like what you want from any Cubank that you are studying from. You wanna make sure that they're telling you why your answer is correct and why the other answers are incorrect. Two-year-old male infant fails to pass meconium for the first 36 hours of life. He was born on term vaginally to a healthy 19-year-old woman from uncomplicated pregnancy at birth. His weight was 8.6 pounds. At the time of presentation, he weighed 8.4 pounds. His vital signs, RS follows, blood pressure, 70 over 50, heart rate 130, respiratory rate 33, temperatures 98.6 on physical exam. He is active and appears hungry. His abdomen is distended, no masses can be identified on palpation, okay? The valve cells are active on auscultation. The patient's anus is patent. On upper GI, study with oral contrast demonstrates normal anatomy, okay? So it's not like pyloric stenosis. Barium enema is then administered, which reveals a large amount of retained barium contrast with dilate signaling colon, the retention. What, which option describes the cause of this patient's symptoms? I honestly am a little unsure about this. I could show you the musculator for lower C1 colon. No. All right, so if there's retention of the barium contrast with a dilated C1 colon, I'm gonna just go with, I don't know. It's, I don't think it's that, I don't know. I'm gonna probably go with this. I probably got it wrong, but we'll see. I got it wrong now, I feel bad. Not okay, not okay. All right, last question. A 17 year old female presents to the OBGYN clinic for evaluation of primary and menorrhea. Like I need to make sure that I get all these OBGYN questions right, because this is definitely what I wanna go into it. And so it's gonna look bad for me if I get these wrong. She is well-developed with well-nourished female who looks her state at age. She has reached standard stage four, breast and pubic care development, external genitalia is normal in appearance. She has an older sister who underwent menorrhage at 12, a speculative exam reveals a short and vaginal canal with no cervix, no uterus is visualized during ultrasound, but both ovaries are noted. What is likely pathophysiology underlying this condition? Again, pathophysiology. So XO is Turner's, so that's not it. I love the ovaries to produce estrogen, no. Genotype XXY, that's Kline Felters. This is like Malerian again. So Malerian, it's one of these dots, but I think it's a paramism. Okay, come on. Ambiology and gastroenterology is the one that I missed. I just wanna check out this whole scan your book thing. So this app, this like Turner app has this thing where you can scan your book and you can get lectures. I mean, it's called lecture, so they do lectures, like live video lectures for you. So I wanna check this out. So I'm gonna do hypothyroidism and I scanned it and now I'm gonna hit okay and it's gonna upload it and I'm gonna see if I can get some video lectures on hypothyroidism, which is good because if you are a visual learner, then this is the app for you. Like you wanna actually see somebody talking to you about this. So let's see, everything is highlighted green, goiter, thyroid nodules, common substance related. Okay, what is that? So it's giving me like karyotypes and stuff. Is that even in, oh goiters. Oh look, so it has goiters there. Does it have anything about hypothyroidism though? Let's see what they have here. Here we'll take a look at the differences of goiter versus nodules by the time we're done with the section. That's like the same picture that was in the book that I scanned, but that is cool. So a really like cool way to just kind of learn, you know, six minutes. I could spend six minutes out of my day, look at that. I did a question you guys and it messed my thing up so I'm at 83% memorize now, whatever. Anyways, ultimately what this video says is that PA school has taught me something, okay? And I can answer some of these med school questions correctly, which is good. I feel good about myself and I feel great about PA school and the path that I've chosen to take. Some of those questions were really, really like in depth and detailed and kind of like tricky in how they were asking it, which is what they do with our pants as well, which is our certification exam for PA students, but you know, whatever. Like, I don't know if how it stacks up but like I learned something, we're doing our thing, y'all doing y'all thing, please let me know if you are a med student and you answered some of those questions with me, let me know how well you did on those questions and don't be lying, don't be saying, oh, Donna, I got them, oh, right, just because you're in med school, okay, we all friends, we're all friends here. You could be honest with me. All right, okay, so if you are interested in getting this app, I have an affiliate link in the description box below. So please use it, absolutely use it. If you're a pre-PA student and you kind of wanna check out what some of these questions may be looking like or a pre-med student, check out the link in the description box below as well. This is good, like I said, for PA students in that you can just have more exposure to questions and the material, so it's a good option for you in that sense, it is not specifically geared towards the pants, so that is a downside to it but you will still know the material and you will know it inside and out if you are actually going through these questions day in, day out and just kind of looking at all the lectures that they have available to you. So be sure to do that. Leave a question in the comment section below for me if you have any questions on this or anything else. Again, let me know how you did. I really wanna know if you guys did just as well as me or not. Thank you so much, Lectorio, for sponsoring this video and allowing me to just kind of look at these questions and see how well me, a PA student, stacks up against some of these USMLE type board questions. I feel good about myself, am I sweating? I'm sweating like a little bit, I don't know because I was so nervous. I did not wanna let us down, PA students. I think I did okay, but yeah, so thank you guys so much for watching. I really appreciate it and follow me on Instagram at AdanaPA and if you have not already done so, go ahead and like this video and subscribe. Thank you guys, I will talk to you guys next time.


Mirror, mirror in the mouth, who's the fairest of them all? I'm Dr. Jared Johnson and today's tip comes on mirrors and specifically I want to refer to the infant oral exam. During this exam we typically do a knee-to-knee exam and children are apt to bite things and if you have a glass mirror and a child bites at that it's a potential for breaking in their mouth. So I use plastic mirrors. So my favorite right now are made by Zerk. So they have two different types. One is an all-plastic mirror. This is autoclavable and then they also make a mirror head attachment that you can attach to an instrument like a Berman mirror handle which is a little more cost-effective and a very nice instrument. Pulp dent also makes some mirrors that are plastic. Those ones are not autoclavable. They are disposable but for kids these if they bite on these it's not going to break. It's very safe and they can be reprocessed over time. I find that this combination holds up a lot better. This one will wear out over time. So if you're doing infant oral exams you might want to look into this product made by Zerk and Berman or another mirror handle to attach to it.


Jeff, what were you seeing up there, 20 points in the first half?  Yeah, I wasn't in during that stretch, but yeah, that's just a part of understanding and having experience and playing with poise. Teams are going to make runs. How can we get back on track and stuff like that? And that's like awareness from us, but also awareness from the coaching staff. So, you know, in the playoffs and times where it gets like that, you know, timeout would be great, but we also got to be great at being able to get ourselves settled back down. For sure, I think that we're a more organized team this year. We have, you know, actions. You just, we are, you know, we think in the game, we're trying to be the smarter team every night. We take our time. We identify, you know, mismatches and we play the game the right way. I think this is one of the best years that we've done that since I've been at Celtic. Has it surprised me? No. Well, we've been preparing for the moments that matter most, so that's all we focused on. We're just taking it one day at a time. We're trying to come out each and every night be the best version of ourselves. We got to challenge the team, you know, guys in, guys out. We come out and find ways to win, but we also build in what a mindset towards the postseason. Reading the game, you know, realizing fast, but like playing slow, recognizing what they're in, what how to garden you, where the advantages are on the floor, and then taking your time. So, you know, not getting too sped up, not allowing teams to try to muck up the game. We're the more talented team. We got to be the smarter team as well. And when we do that, we're going to be tough to beat. Yeah, I think we could even be even better on defense. I think we gave up a lot of points tonight, even though like, I think, what did they have? A hundred? Did they have less than a hundred tonight? Yeah, we still could have, I think they should have had around 88. And that was just some mistakes that we made that, you know, in the playoffs and stuff like that, we don't want to make teams get on runs and we can guard a lot better than we did tonight. No, when it comes down to the playoffs or none of that stuff, it really matters. You know, I feel like, you know, it's going to be about matchups. It's going to be about playing hard. Obviously, home court matters, so that is key. But, you know, when you get into the thick of it, you've got to win basketball games, regardless of what your seat is. If anything, it puts more pressure on you. But I think we're experiencing, we've been in these situations before, and I think we're ready. I think we've been doing, I think we've been great at it all year. I think we've been identifying mismatches playing the game through each other. You know, everybody has sacrificed a little bit. And we all just, you know, kind of play the game the way it's supposed to be played. I think we've been pretty consistent in that all year long, you know, and I think that's going to be key, especially in those moments of adversity. When it gets tough, how much can we stick to that game plan? But I think we've done a good job all year long of just trusting each other and playing basketball. Yes, I think it's made me a more efficient basketball player just because you make the game easier for yourself. You know, I feel like I can score with the best of them on anybody. But when you are identifying and manipulating the game and getting the right matchups on you, playing slow, taking your time, you know, those are easier baskets and then they start doubling. You want to double, okay, I'm going to drag the double out and make the right plays and our team is going to get open looks. So just, you know, making the game, thinking the game, manipulating the game is all about what we've been emphasizing this year. Yeah, that's the key. I just think this year has been more simplifying everything for me, just, you know, getting to my spots and just playing the game, you know, making easy, smart basketball plays because it's going to come in time where the difficulty level is going to get raised and then I'm going to have to meet the call. But for now, like for the most part, you know, for our team, I think just benefiting off and making just the easy, simple play, nothing's wrong with that. Presented by your New England Ford dealers, built for America, built Ford proud.


Welcome back to Tennis Talk, my name is Cam Williams and it's time for the weekly ranking show where we go through all the ATP WTA changes for the week in the rankings and also the race to the finals, which is starting to take a little bit of shape now now We obviously had Indian Wolves over the last couple of weeks That's the only tournament that we've had over the last few weeks Let's go look at the past champions before we get to the rankings. Let me look at the two champions starting with the women We had Egas Fiontek. She defeated Maria Sakari 6-4-6-1 to lift her second trophy in a row at Masters 1000 level or WTA 1000 level and over on the men's side We had Taylor Fritz defeating Rafa Nadal in the final breaking the streak of Nadal 6-3-7-6 in that one to lift his first ATP 1000 trophy So it's a big week for the younger players this week and they all got boosts in the rankings Let's start with the changes to the WTA rankings this week because in the absence of Ash Barty We had some big changes through the top 10 Barty stays at number one She's well ahead of second place but Egas Fiontek She's gone up to a career-high ranking number two after winning Indian Wells with Sakari going up to number three Which is also a career-high ranking for her pushing down both Kredgikova and Sabalenka who failed to do well at Indian Wells and in Kredgikova's case She didn't even play Indian Wells but Dosa goes up to number six after making the semi-finals of Indian Wells and Consonate goes down to number seven after failing to do well at Indian Wells Pushkaver at eight, Mubaruta at nine and Jabbar rounds out the top 10 for this week Having a look at the race of the WTA finals and we have a change at the top Fiontek, she takes top spot over Barty after winning Indian Wells She's made up a lot of points over the last couple of weeks with winning Doha and Indian Wells back to back And with Barty not playing she goes down to number two and Sakari after making the final of Indian Wells She goes up to number three four spots higher than last week pushing down Consonate to number four Keys goes up one spot to number five with Daniel Collins going down two spots to number six But Dosa with having a good week at Indian Wells. She goes up two spots to seven Osterpengos drop down three spots to number eight Halup's gone up one spot to nine and Kredgikova drops down two spots to number ten after not playing at Indian Wells at all Let's go over look at the ATP race now because there are some big changes after Indian Wells Novak Djokovic he goes back up the top spot after Medvedev failed to make the quarter finals of Indian Wells So he drops down to number two a short-lived time at number one But he's playing Miami and Djokovic isn't in the next couple weeks So another chance for Medvedev to get back top spot Varev goes down to number four making way for Rafa after he made the final of Indian Wells So he gets a boost in the ranks since he restates at five Rublev comes up to number six pushing Baratini down to number seven and Taylor Fritz after having a great week at Indian Wells winning the trophy he's into the top ten for the first time He's gonna have 12 spots higher than last week making his top ten debut at number eight pushing down Kasparutta nine and Oji Alias seam rounds out the top ten with Yannick Sinner falling out of the top ten completely having a look at the race to The finals now and Rafa despite losing the final of Indian Wells He stays at number one with Medvedev at number two and Taylor Fritz after winning Indian Wells He's gone up 14 spots to number three in the race pushing Alias seam down to number four Rublev's at five City pass has gone down to number six two spots lower than last week Carlos Alcarez He's gone up five spots to number seven after the semi-finals of Indian Wells pushing Baratini down to number eight Shapo down to number nine and Batista Ragu goes down to number ten to round out the top ten for this week with Norian Schwarzman falling out of the top ten completely for the race to the finals There have it There are so many changes to both the top ten for the men and the women not to mention the race to the finals They're starting to take a bit of shape now that we've done a grand slam We've had a grand slam and also we've had a Masters 1000 series or a couple for the women If you're looking at Doha and Indian Wells after Miami It's gonna really take some shape before the clay court season But let me know down in the comments below who are you most shocked about being in the top ten for me personally Taylor Fritz Being in the top ten what a week he had and what a couple weeks he had beating Rafa in the final Man, I did not expect that and he's into the top ten well deserved at number eight Let me know down the comments below who are you most shocked about either being in the top ten or maybe not being in the top ten this week


All right. Well, thank you very much, everyone. Today I'm here to talk about our Markdown driven development. So essentially, I think many of us in the open science and open data communities already know a lot of the value of working in a code notebook, like our Markdown or Jupiter, and a lot of the values that that can bring in terms of literate programming, where we're both code and narrative elements of an analysis and creating a wide variety of different interesting analytical up. However, the thing I'm particularly passionate about about our Markdown is its ability to be a prototyping engine for more sustainable analytical tools. I didn't intend that any time that you've created an analysis in our Markdown, you've actually gone while on your way to creating a really mature analytical product that's custom fit for your domain specific workflow. And what I want to talk about today is steps of how to turn this latent and implicit tool into an explicit one. And this works is by the time you've completed a single analysis. If you think about it, you've already done many of the really, really hard parts of building a package. For example, on the design side, you've understood user requirements, crafted a same workflow, and by virtue of your own analysis, have a complete and really compelling example. On the development front, you've created the right tools to help you along the way, and figured out how to make them play nicely together, and you have working and hopefully well tested code. So what I want to talk about is five main steps to what I call our Markdown driven development for how to take the your open data analysis and turn it into a product that supports more reusability and accessibility. As I go through this process, that this can have many different outcomes, including a single file, a project or package, and there's no superiority or better or worse on this spectrum. It simply matters how you expect your users to take advantage of your work in the future. But first, let's start at the beginning. The first step to refactoring a code notebook is simply to remove the elements that probably should have never been there in the first place. You can do things like hard coded variables, plain text passwords, local file paths, and unused pieces of code. For hard coded variables, one trick I like to use in our Markdown is converting variables into parameters. So for example, if I'm generating a report month over month, I might at some point have to filter my data set for a specific date range. It might be very fragile because I might forget to change it or change it inconsistently throughout my document. Instead, I can use parameters to turn my whole analysis and my whole our Markdown script into one mega function, where I am highlighting all of the variables that I might want to change at the beginning to promote consistency. This is also a great way to protect my credentials because with parameters I can also insert dummy values and and only supply the real values at runtime. So I never have to store passwords or other API keys or secret material in plain text. We want to remove local file paths, because this ensures that our project will work on no one's computer but our own, and probably not even our own, should we ever rearrange or reorganize our file. One gold standard is using relative file paths, reference, describing the location of your files, only within the working directory. Using R in particular, you can get one step better by using the here package, which makes file pads that are especially resilient across different operating systems and platforms. The final thing we want to remove as hard as it can be is sometimes we have to kill our darlings. No matter how fun some of the different rabbit holes we may have gone down in our analysis were. We have code in our scripts that we didn't actually use and doesn't actually add to that final analysis you're delivering. It's probably time to remove those and clean things up. So, once we only have what we want in our markdown, our next step is thinking about where we want it to be by rearranging chunks. Creative and literate programming is great at capturing our thought processes, but thought processes are rarely linear, and as a result, neither is the code that we wrote. And some characteristics I use to make this transition are letting infrastructure and heavy lifting computing chunks come up to the top of my document. And letting database data wrangling check code that makes plots and tables and helps communicate. Think down to the bottom. This has multiple benefits. And it helps us clearly define our dependencies, because things like reading in data and external files and loading in libraries are naturally at the top of our scripts. This code is also since it's doing the most of the work, the most likely to break, and it can be nice to front load our errors. So if we fail, we fail early. By letting some of the more communication pieces seem to the bottom, we're more likely to notice repetitive code that we're using for processing different types of plots and tables and analytical views, which can help us reduce duplication in the next step. And finally, this also helps us to consolidate more of the narrative pieces of our code. So for working with less technical collaborators, it's still easy for them to get in and help figure out exactly where they need to edit to edit your manuscript. Now, one exciting thing about doing this rearranging isn't also a great way to start thinking about adding more than interface aspect to your single file. For example, two tricks you can use within the RStudio IDE are naming your code chunks and commenting within a code chunk with four little dashes after each comment. This creates the nice table of contents that you can see at the bottom of the screen to help users easily jump between pieces of your report and find the right places in the script that they need to jump to automatically. This serves as kind of like a great additional incentive for the code commenting that we all know that we should probably be doing anyway. So as I mentioned before, one benefit of that rearranging is we can start to better get to know our own code and get to find patterns within it. And the next thing we can do with those patterns is reduce a lot of the duplicate code that we may have in our code notebook by defining functions. So on the left hand side of this example, you might see in some exploratory data analysis, I might have just started making scatter plots to understand the relationship between different variables. However, this has a couple of problems. If I want to say change the point size, I'd have to go in and change multiple pieces of code. Also, it's not very literate, and that my intent in what I'm doing isn't totally clear. On the right hand side instead, I define a single scatter plot function and call it three times. Now I could only change my code one place if I needed to for my own use. It'd be easier for a collaborator to borrow that function to use for a different purpose if they wanted to. And even better, in the exploratory data analysis section, you can really read in and for my intent very clearly that I'm trying to make those three scatter plots. Again, returning to the concept of how we build more of a user interface for our tool. We can then think about commenting and documenting our functions, even within the single or markdown script, in the same way you would foreign our package. So as you can see in this example, we can use the our oxygen package to create a code documenting skeleton, similar to what you'd use inside of a package to define each expected input and output of our functions. Since this is the type of documentation that our users are very, very used to looking at this can go a long way into helping them learn and engage with pieces of your code. So at this point, we've gotten to relatively clean code, and we can start also thinking about code style and navigability, and they're great tools for this in our, including the linter and styler packages, which can help you check your code against a configurable style guide, and either call out violations of that style guide, as you see on the right hand side, or in the case of the styler package, actually even go ahead and fix those code style issues on your path. And besides code style, there's also writing style to think about. And for that, we can use this spelling package to help catch typos in the narrative pieces of our of our report, just to keep things as absolutely clean and polished as possible. So at this stage of our markdown driven development, where we've still only worked in one single file, and we have a very sustainable, well, well engineered file. And it's so for some use cases, this may actually be the perfect place to stop. If you're in a low resource environment, without a portable without a like formal version control system or repository single files can be the most easy to share between operators to understand the differences between versions by simply running a decline in the terminal, and easy to automate with or refresh with a single click of a button. However, they can sometimes be lengthy and somewhat intimidating for new users to inherit and enable some anti patterns because they don't give us all the flexibility we need. So if we're looking for something a little more extensible, we may want to consider breaking apart our file into a more robust analytical project. So the key here is to define a standardized file structure and think about how we can break out different components of our markdown document into different folders in that project. For example, the functions I talked about defining for could go in a scripts or function folder. The data that data that we're using for analysis could go in a raw data folder, and any subsequent data artifacts that are being created from some of those computation chunks can be saved in an output folder. The analysis as a whole can live in an analysis folder, and it's cetera with other types of documentation or external files you might collect along the way. Just as a slightly more technical view of this, we can return to the exploratory data analysis example that I talked about before. So instead of using different chunks to define my function and then call it, I can actually save that function definition in a separate R script, and simply reference that and ask R to go execute that code for me by using the source function. As shown at the top that I can sign. One place I particularly like to use this trick myself is when working with data, instead of directly having databases being queried or API is being called from my or markdown document. We can have a script that reads data from a database and saves it to a raw data folder. We have another script that reads in that data, and doesn't some of our like wrangling model fitting analysis pieces, and saves those intermediate data artifacts, and we only read those into the our markdown. This is very beneficial, because I, it eliminates the direct link and the direct dependency between some of those data stores that we don't necessarily have control over, and our final or markdown report. For example, if I find a typo in my or markdown, I can refresh and rerun that document without having to worry about if my database or my API is currently online and accessible. Again, at the project stage, there are a lot more optimizations that we can put into play. We talked about this concept of having an interface and defining that standard file structure in an organizational setting can have really huge benefits, because different collaborators as they move between different projects can easily have an intuitive sense of where to navigate in a project to find certain types of material, again like data sets or function definitions. And there are many, and there are many great R packages to help you do this, such as use this project template and starters. And similarly for dependency management, it's a great time to think about adding in the RM package. The benefits that we've achieved by taking this extra step are making our project a lot more flexible and more extensible to different use cases, and easier to steal and borrow small components of like a single function for other use. However, at the same time, in this approach, we've still captured a lot of the initial context of our analysis that we're really still focusing on the one specific instance of a problem that we were thinking about. However, this can sometimes muddy the line between analysis and general purpose code, and make it hard to fully extend or generalize our work. And we haven't fully taken advantage of our all of ours developer tools. With all of these concerns, we can think about taking the final step of turning our project into a package. And the magic of our packages is it's really simple is saving files in the right place. So, for example, our scripts folder, those functions could move into an R function folder. And when the R markdown itself can serve multiple purposes, both as a template embedded in the package that helps interactively walk users through the code, as well as the vignette that as at a high level excites users about learning your package by giving them a really interesting and enticing example. Similarly, even the data that we used along the way, if it's a properly protected anonymize could go into the package as example data. And all that's missing is documentation, which if you recall we actually already wrote a few steps go, and unit tests, which we probably should have actually talked about far earlier in the process. If we want to actually trust any of our analysis, even when it's in a single file. So many great R packages to help you do these last few steps. Use this can help make sure you get all those project assets in the right folders. DevTools can help automatically document the documentation in your man folder from the R oxygen test that provides a very friendly user interface for writing tests. And with package down, you can even go one step further and create a very user friendly and navigable website to help other people learn how to use your analytical product. Now we've really completed the spectrum of different types of outputs packages of course are the sort of like formal mechanism for distributing code and tools at scale. And it's something other coding users are really comfortable learning how to learn. So those are some great advantages. However, we've now looks abstracted very far away from your specific analysis to a very general class of problems, which sometimes can be great, but sometimes may actually be a bridge too far. If you're you think future users will be more focused on reproducing your work than extending it. So today, you may have different goals, but regardless of what that is, following the steps of our markdown driven development can help you get a lot closer to making a sustainable and empathetic data product, both for yourself, and for anyone who wants to use it in the future and benefit from all of your labor. So, thank you very much for your time today. I'm happy to take questions on slack. And I'd also mentioned I have to blog post up on this topic. If you're interested in learning more. And finally, thank you so much to the organizers of CSP comp. This has been a phenomenal experience and a great conference despite all of the challenges going virtual. Thank you very much. Thank you.