For some of your labs, including this week, you'll have to make sure that you take some pictures and include them with your lab submission. Now, one of the pictures you'll be taking this week is a screenshot and how you do that is gonna depend on your particular computer. Contact me if you have questions. The other one is a picture that's probably gonna be taking with, say, a cell phone camera, and it's something from outside in the natural world. So let me just go through this a little bit. First of all, when you take a picture, and like here, mine goes to the Google Photos, I wanna make sure that I've saved that and I know where it's saved to. So in this case, I made sure I saved it to my computer in pictures so that I can come back and find it.  So I click on Browse, and again, I remember where I put it, so I put it into pictures, and there's my picture. Open it up, and there's my outdoor nature picture that includes my cat. Now, don't worry if your picture does not completely fill the frame. It's there and I'll be able to look at it and I can zoom in if I need to to see your image. Ideally, this works, and then when you save your file here, and again, make sure you know where you're saving your file to, the picture is inside this file. Now, as it mentions here, some students have issues that when they click on that, it doesn't load their picture into the PDF. So let's go through, and again, this is the video about submitting image files. So once you watch this, you can click that off as well. Once you've completed the whole worksheet and saved it, you'll want to come back over to your blackboard assignment. Now, I'm in instructor preview mode, so it might look a little bit different here, but this is where you actually submit your worksheet. So you come in here and browse your local files, and in this case, I've got the worksheet saved to the desktop, and I've attached that as a file. But if I couldn't get my image in there, I can click browse local files a second time, go to my pictures, select the picture I wanted to submit, and it's now in there as a file. Now, if your camera's like mine, and you get these weird ones, it might not be really clear what picture this is supposed to go with which question. So you can always come in here and either change the title or mention specifically which question in the lab that picture is answering, and that'll make it easier for me to connect this picture with the right part of the worksheet. Once you've done that, all you have to do is click submit. Now again, because I'm working here in instructor mode, it's gonna tell me a previewed assignment isn't gonna be saved, but it should show you that it has submitted, and it would show both the worksheet and the image file to me when I go in to grade those files. So if you can't put your images directly into the PDF, go ahead and again, submit both files when you're submitting your assignment and I'll be able to grade that. If you have any other questions, please contact me and I'm more than willing to work through with individual students how to deal with these technical issues.


Hello, my beautiful internet friends, and welcome back to Taboo Tuesday. Guys, we have like an official board now. I feel super cool and like trendy and like I should be on Instagram or something, which I am, I am on Instagram, but the board makes me feel official. Anyways, Taboo Tuesday is where we talk about tough topics. I got it right that time, guys. I finally got my catchphrase correct. Generally, I tackle a topic that has something to do with, you know, like a Taboo subject about disability or imputation. And this week, I thought I would dive into something that is pertinent for the last couple of weeks people have been asking me about, and that is medications for depression and or anxiety. It's funny, after yesterday's video, it was basically unedited, and I was talking about some intense stuff. A lot of people suggested that I talk to my doctor about going on medication, and a lot of people have asked me, but I thought it would be a great time on Taboo Tuesday to tackle this topic. Let's dive in. Let's take a journey back in time to 19-year-old Joe. So I was raised in a conservative Christian family. I was really, really into the church, like personally. And when it came to mental health, a lot of what I was taught was that if you were having an issue, if you were struggling, anything was going on, it all came back to faith. Mental health wasn't really talked about because everything came back to spiritual health. And people who are on medication for anxiety or depression or other mental issues were kind of talked down about or frowned upon. It was like, oh, you know, they're kind of weaker people for taking medication to fix a problem when they could be going to God with it, which is such a backwards way of thinking about things. And I actually did a video in conjunction with Scott from Depression to Expression. About a year ago, I will link that up above that kind of dealt some more with that. Because of the mindset that I had, I never, never, ever wanted to consider any kind of medication, and I was kind of against it. I didn't really judge people who were on it, but I mean, maybe deep down, I kind of did a little bit, to be honest with you, back in the day.  I was in a very, very, very dark mental place. And I think I honestly struggled with depression all throughout high school, throughout college. I just did not myself admit it. I was like, I'm just tired. I'm just not praying enough. I just need to go to church more, like connect with God, you know, as I was internally really struggling. But then things got real. When I turned 20 and a lot of trauma happened in my life. Dogs were barking outside, please hold. They stopped, okay. So that's not my dog, by the way. My neighbor has this little white, fuzzy dog that I just like sipping. Anyways, 20-year-old Joe against medication struggling. I went to see my doctor after I had gone through some physical trauma and she asked if I wanted to go on antidepressants. And I was like, no, like, no, I'll be fine. I'll work through it. I'm okay. And that lasted for about a year. Slowly and surely just who got really, really not okay. Do you want to be in the video? You really want to be in the video, don't you? It got to the point where I would be like sitting at my desk downstairs, staring at the wall, blankly in front of me, tears rolling down my face, feeling absolutely nothing and absolutely everything at the same time, unable to move. And that was the moment I was like, I have to do something because I had been trying everything else at that point. I had been trying a lot of the faith things that I'd always learned and I'd tried like exercising and eating well and all the basic stuff. But I was like, you know what? I am not going to make it maybe if I don't change something. And so I went in to talk to a doctor and I was ashamed, embarrassed, really frightened. I didn't know how to talk to someone about it. I thought they might think that I was like, like something was wrong with me or I was broken or like weird or weak or anything like that. But they were amazing. I am really grateful that I had a really great doctor to talk to, just kind of discussed how I was doing and if there's anything that they could do to help. And so he suggested a medication called Wellbutrin. It's an antidepressant. I think it's kind of also a stimulant. So it does a number of different things. It addressed a lot of issues that I was having and I decided to give it a shot and making a decision to start taking medication. I really felt like I was failing. I really felt like I was less than other people and a lot of my friends who I talked to who were amazing friends, really, really fantastic, said things like, oh, you know, that's, I mean, like I wouldn't do it, but if that's something you need kind of thing and yeah, I felt a lot of shame, but I did it. I got on it and it was a weird adjusting period. And then about six weeks later, I started feeling a lot better. The best way I could describe it is instead of starting at like a negative six for the day, like if a zero is where most human beings start, I started out the day at like a negative six and negative seven and negative eight and I'd be struggling to make it up to maybe like a negative one or negative two. The medication that I was on in conjunction with counseling made it so that I felt like I was starting at like a negative one or a negative two. Like it didn't make me happy. It didn't fix things, but it seemed to even things out a little bit. And so for the past many years, actually I have been on antidepressants. In that time, I have gotten so much more comfortable thinking about talking about it. I no longer feel too much shame about it. Every once in a while, it like creeps up because I was taught most of my life that like you shouldn't do that or whatever, but that's flawed thinking. Here's how I think about antidepressants. I think that they're a great tool. I think that their tool is not for everybody, but it's definitely worked for me and they definitely work for a lot of people because here's the thing, I was unable to get to a better place when I was that dark, when I was that deep down. I was going to counseling at that point, but like I couldn't, couldn't function. I could not function. I could not move. I couldn't like anything. And so being on that medication brought me up to a point where my brain was functional enough that I could begin to work through some of the things that had me in that place that were affecting me so deeply. I remember having one conversation with my doctor where I was so worried. I was like, well, what, like, I know there's like clinical depression and then there's like situational depression, which I don't think is an actual thing. And I was like, if, if I'm just depressed because of things that have happened, I don't want to be on medication. Like I only want to be on medication if it's like chemical imbalance. Like if I actually like have a disease of depression was like how I was talking about at the time. And his explanation, I think was great. His explanation is that your body is chemistry, it's constantly changing. And the things that happen outside of us, things that happen to us, things that happen in our heads, absolutely affect our body's chemistry.  And how he explained it, don't quote me on this.  And guess what?  And so maybe you don't have the right balance right now or maybe there's something else going on. This is just a tool. That's all it is. It's just a tool. You don't have to stay on it forever. There's no shame in it. And it can help even things out until we get those parts of your brain working again, essentially. I love that explanation of it. I'm actually not sure if that's entirely medically accurate or not, but I really liked the way that it was presented because it does make sense. Our bodies are constantly changing. Chemistry is always shifting. Sometimes things just don't work quite right and I have been on medication ever since. We've tried changing something. Right now I am on antidepressants and I know that some people aren't fans of that and I totally respect that. But at the same time, I can't afford to get any lower than I am right now and it is a great tool as I continue to work on what I need to work on. For me, and this is literally just for me, it's important that I use medication in conjunction with other things. I don't want to solely be dependent on a medication thinking it'll fix things because in my experience, it doesn't do that. In my experience, there are other influencing factors. This is just my life. So for instance, right now I am dealing with a lot of depression because I've always dealt with depression, but it's a lot worse. I'm guessing because I lost my leg. I'm trying to adjust so that I face setback after setback and so I can't ignore the fact that there are external factors affecting what's going on internally. So I use medication as a tool to help me function, to help me be able to work on the things that I need to work on, to be able to take care of myself and to be able to stay on the planet. What really got me to the point of saying yes to medication was the fact that I was like, you know what, it's either I try this or I will probably end up dead. I know that sounds morbid, but it was like kind of what's the harm at that point because nothing can be treated if you don't exist. Nothing can be treated if you're not on the planet anymore. So I think it was important for me to try and thankfully I found something that really worked for me. Is that gonna be the case for everybody? No. I think everyone's specific situation is gonna be different and I would never advise anybody on whether or not to take medication. That's a purely personal decision between you and your doctor, but it has been an incredibly positive thing in my life. Like I've said a bunch in this video, it's just a tool. It helps us get to a better place. It helps us stick around and it's not like it fixes problems. It's not like it fixes things in our lives. They're not happy pills. Sometimes people talk about antidepressants like they make you happy and they definitely don't. They just bring you from the depths of darkness up a little bit to an area where you might actually be able to function. You might be able to go do things that help additionally you deal with that mental health issue. I think that there are a lot of misconceptions out there when it comes to medication for any kind of mental health issue. I think it's important to know that there's no shame in taking anything. There's no shame in talking to anybody about it. And also different things are going to work for different people. There isn't one size fits all. I think so often we preach it to people based on our experiences. So if someone's had like a bad experience with medication or has read an article, they're like, don't do it. Like don't ever touch it. It can ruin your life and it can actually really help some people's lives but for other people it can be detrimental. So experiment with what works for you. Talk to professionals, talk to whoever you need to talk to. Get help in whatever way you need to get help with. This is something that you're struggling with but that has been my experience with medication. It is a great tool.  Definitely have no intention of doing that but it has absolutely helped me to function as I continue to find ways to cope and to process everything that is going on in life and how I am feeling and how I get through this. With that being said, what are your thoughts on this issue? I know people have pretty strong opinions one way or another depending on how you're raised depending on what side of the fence you fall on. Respectfully I would love to hear everyone's thoughts and feelings on this issue. Also, side note, I really hate worrying people and I feel like the video from yesterday and maybe a couple of videos ago is concerning to watch. So I just want to apologize if I worried anybody. I am very engaged as much as I can be with the people around me. I do have help in place so just please know that I'm not just sitting in a room alone talking to a camera, talking to you guys. I am talking to my counselors, I am talking to my husband, I am talking to good friends. I do have people in place and coping skills that I am working on and using. So I'll be okay. Just having a hard time. I really don't want to scare anybody. I just want to be honest about where I am in hopes that it could help other people if that makes sense. So with that being said, a huge thank you to all of my patrons over on Patreon. I truly appreciate all you guys do for me. It means the world to me that you would choose to use your money and your time and your effort to support what I'm doing here. That's amazing. Today's patron of the day is Diane Layman. Diane, thank you so much for choosing to support me. Thank you for all you do and thank you for your support in more ways than one. If you like what you watched here, I would love if you would consider subscribing to this channel so I can see you here in the future and like this video. Thanks for watching guys. I love you. I'm thinking of you. I look forward to seeing you in the next video. Hang in there. Bye guys. And her from the sky all about high tide goes around you.


Hi you guys, Lindsay here. Welcome back to my channel, Inside to Him. All right you guys, so we are going to be finishing sewing our dresses today. So exciting. We are on step number 25 under the category finishing, which is very appropriate term for what we're doing. So the good news is everything that we're going to do in this portion of the video, you have already done in one way or another. So essentially you already know how to finish your dress because you've done all these techniques already. But I'm going to take you through them step by step. The first one is going to be to do your hem. And I told you guys that the hems for A, C and D would be the easiest and B would be more advanced. So hopefully most of you went with a straight hem. It's the curve of B that makes it so difficult. And you can see in the instructions here just how much extra attention to detail and all of that goes into a curved hem. They can be done. It's a great technique to learn, but it is just a little bit more challenging and can be also frustrating and just a lot of hand sewing too. So we're only going to be covering the straight hem today. And just like we've done in the past, you are going to take your garment. I need to turn mine wrong sides out so that we can do a proper hem. So we're basically going to do the exact same technique that we did on the armholes. Remember, I'm the very beginning of this whole thing. And so let's get the center back facing up. You don't have to have a center back facing up. It's just easy for me to know where I begun if the center back is facing up. Then you need to grab your seam gauge. Looks like this. According to the instruction booklet, the hem is a 5 eighth inch hem. So that's what we are going to turn up on the bottom of our dress. And I do want to point out they don't always give you what the hem is in the instructions, but it is always on your pattern pieces. So at the bottom of the pattern pieces where the cut line for the hem is, it'll always say how deep the hem is. And I'll usually take that and write it on the instructions because by that time, I already have everything put away inside my envelope usually because I like to clean up as I go. So I'll write it on here just so that I have it in the instructions. It just makes more sense to have it here, but whatever. Okay, so in order to make a 5 eighth inch hem, you are going to bump your hem gauge up to one and a quarter inches. That's double what 5 eighths, 5 eighths times two is one and a quarter. And we are going to take our garment and we are going to mark that one and a quarter inch line all the way around. Okay, so we've made it all the way back around to our center back seam. So now we are going to go over to our iron and we are going to press the raw edge up to the marking that we just made creating a 5 eighths inch deep hem. While we are over at the iron, we're going to have this all pressed up like so. Then we are going to take the raw edge and we are going to fold it inside itself so that you have a little baby hem that looks like that. So we're going to take all of this to the iron and then I will meet you back over at the sewing machine to sew this hem closed. Alright, so everything is nice and pressed. Our hem looks lovely and I am going to do this with the wrong side up because I think that my stitching, the bobbin stitching looks really nice on the right side. If your machine is like usually the entry level ones, the bobbin stitching doesn't look great. If that's the case then do it right side up. You'll be planning a little bit of a guessing game to make sure that your needle is catching the fold, the inside fold of the hem, but it can be done. I just don't feel like I have to be that precious about it because my bobbin stitching looks pretty good I think. So I am just placing the edge of the hem, the outer edge against the edge of the presser foot and then I'm moving my needle in so that it just barely catches the inner fold. I like for hems to bump my stitching up to four millimeters. Personal preference, you don't have to do that if you don't want to. We are just going to start stitching. If I'm stitching in the round, meaning I'm coming all the way back around to where I started, I don't backstitch. I feel like the end stitches are going to catch the front stitches so I never backstitch and I'm sewing in the round. Okay, now we have a beautiful sewn hem. Cute, right? All right, I'm going to go press this just to lock in the stitches and then I'll meet you guys back at the cutting table to show you how to make the belt. All right, so it's a bit of a bittersweet moment as we are on the very last step of our sew along. I know it's exciting and I'm excited for all of you, especially those of you who have never sewn before.  Okay, so the belt is going to be constructed the exact same way as the drawstring. The drawstring from step 16, it is literally the exact same steps. We are going to find the end that has the notch on it and we are going to sew this at 5 eighths inch of a seam allowance. Let me grab some pins. Where are my pins? Oh, don't you hate when you put things away where they're supposed to go and then you don't know where they are when you go to look for them? Okay, so 5 eighths inch hem across here and then we'll press this guy open and flat and then we'll have one long strip. Then I will meet you guys at the ironing board because we are going to be pressing a fold into this before we stitch it closed, just like the drawstring. Okay, so if you remember from the drawstring, we pressed in a very, very light press. I'm going to turn the heat of my iron down and I'm going to turn the steam off because we don't want this to be like a permanent press, we just want it to be very light and we are going to press this right sides together all the way the length of the strip. All right, now that we've got this pressed very lightly, you can tell it's like kind of still rounded on the end. It's not a crisp fold there. We are going to need to put in our little reminders because we're not going to stitch this entire length. We actually need to leave a little gap. Is this all feeling like deja vu?  So you are going to go to your machine and you are going to sew at five-eighths inch of a seam allowance across this short edge and then all the way down the long edge until you get to your pin, then you'll backstitch, then you will start stitching again, backstitch here, sew the entire rest of the length and then when you get down to your short end pivot and sew your short end closed as well. All right, so now we have our belt sewn except for the little gap that we left in the middle. We need to trim up all of these seam allowances and remember whenever you get to the gap to make your little plateau by snipping just into the seam allowance like so. So we have our little plateau there where we've maintained the five-eighths inch seam allowance. All right, now we need to grab our bodkin, our lovely little friend that's going to help us turn this right side out. You just put it in the little hole we made, scooch it all the way down to the end. The belt is a lot longer than the, um, than the drawstring was. Okay, now you carefully wedge it through the end of the fabric, lock it in place, and then start carefully pulling the fabric over the end, being very gentle. Like so, release the end and then pull the remainder out and now we have our lovely little belt. Use your fingers to kind of wiggle the corners into place so that it's as square as you can get it like so. Ta-da! And then we will do the other side and then go over to our iron and press this seam on the edge. Press this all flat and when we get to the center section we will tuck in the seam allowances and press that closed as well. So I will meet you over there. Here is our lovely pressed belt. Now, one thing that's a little bit different than the drawstring is that we cannot just machine stitch that hole closed because you are going to see that when you wear it. We were able to conceal the opening within the casing of the bodice. So we need to do a little bit of hand stitching and admittedly I am not the best hand stitcher like at all. I just kind of get it closed and then call it a day. But I literally just took the bobbin out of my sewing machine to get the thread that I needed in order to stitch this guy closed.  Okay, so now we've got our lovely belt. I am going to put this on my dress form with the dress obviously and you guys we just sewed a dress together. How awesome is that? I can't wait to show you what it looks like. All right you guys, there she is. Very, very cute. Although I have to admit there are two and you know and I'm hesitant to even say this because I know once I say it you guys won't be able to unsee it but there are two dark spots of the fabric that are not so pleasantly placed across the chest area. So I'm going to have to work on maybe trying to camouflage that but inevitably that happens sometimes. I didn't notice it until now even though I've had it on this dress form a couple of times now but either way the belt is super cute. The drop waist I'm still a little on the fence about so we'll see if that ends up being permanent. I might either move the casing up to my waist or add a band to the bottom so that I can wear the elastic at my waist. We'll see. I'll wear it as designed one day. That's what you guys are going to see next week how I style this little guy, how I will wear it and you know what it looks like on an actual body. So that is going to wrap up our pen ultimate video for this sew-along. I would love to know how yours are coming along and if you have any questions about anything please leave them in the comment section below. See you guys soon. Bye!


It's Diddy Canem, back today with another video. Huge shout out to you for tuning in. If you're not subscribed, go ahead and subscribe button. Give me a thumbs up and do not skip those ads. In this video, I'm gonna give you guys the last three days of Instacart orders that we got. Guess what? We went out there and got busy. I'm glad you guys are with me. Hey, make sure you stay tuned through the full thing and watch us get this green, you ready? Let's go. We have been out here for an hour and 20 minutes and we finally got our first order to get an order. Mariano's one item, eight units, 1.4 miles for 988. We just pulled up. We about to get this cake. Let's go. Here's Mariano's to get busy. I'm glad you guys are with me. I had to pick up this little car right here. So I don't know where I'm going. Oh, they haven't got enough. One, two, three, four, five. We need eight of these joints. They only got five right now. Thank you very much. There's a, here you can take those. Okay. I need that one too, let's do it more. I need this one too. Oh, you want it? Oh yeah. Appreciate it, you have a good one. You too. Let's go. Instacart order deliver. I'm in the VIP area. I'm an Instacart of milk. No? I don't know. Go to the front? Yeah. Excuse me. Excuse me. How you doing? Hi. Can you just bring it up here? Yes ma'am. Where would you like me to sit it? Alrighty, you have a good one. Guess what we about to go to get busy? Jewel. We can get on. We about to get busy. I was going to order 13 items, six miles for 35, 69. We ain't stopping until we shine. Let's go. We in this zone and we're here to get it on, baby. Get us a cart. This joint janky. I ain't even about to do it. I ain't even about to do it, baby. Over here. Let's get busy. So we have to get some Coca-Cola for some Diet Coke. We have to get some tissues, orange juice, eggs, and crystal light. We're trying to get right. Let's go. Tissue right here. We need some angel salt. Tissues. We don't want no issues. How you remember crying like she missed you? Got this tissue. Then we need crystal light grape and crystal light fruit putt. Got that. Then we got the two liter of Diet Coke. I didn't know joke when we wanted alls. Then we need two things of Jefferson color Tropicana orange juice. Some Pope, this is one. We need two of these joints. Oh, here we go. We got another one. We got lucky, baby. This is the last one. Large eggs. Put it all, check this out. Make sure everything's right. Let's go. Yes, ma'am. You need help taking it up or are you okay? Okay. You're welcome. Have a great day. Happy holidays. Just like that. We are here to drop off order number two. You know my folks stick like the flu. Y'all know my folks stick like the flu, baby. It says, do never bring the doorbell. So we'll drop like that. Drop like that. Step back. Photo yard, no, no. Let's go. Guess what, baby? We just got us one, another one. We just received another Instacart order. Two orders, 45 items. The stores are the container store and Mariano's. 6.9 miles for 85. 55 is a great time to be alive. Let's go. Here in Mariano's to get this dough. Y'all know what this is. Let's see if the cart. I know the cart a little janky, but it is what it is, baby. We got to hear if we get the video right quick. So I'm one of these, got this, got that, that mountain spring, they ain't playing no game. They about to do their thing, they about to wash good clothes. Guess what else we need? We need some. Bounce, bounce, bounce, bounce, bounce, bounce. Haha, what y'all doing about that, baby? I'm gonna grab these. And also grab this. 18 mega rolls. 18 mega rolls right here. Grab that, grab this, grab this, grab this. We need one of these, this joint be banging. We need two of these, wrong. This is pirate's booty.  Haha, two of these. I be drinking these joints, these joints be smacked, baby. I be drinking them lemon joints with those. Lemon, lemon, got to eat the lemon ones. And we need one of these. I ain't never had this Salsa water by Kroger. Have you guys had that coming below and let me know? And then we also need a blackberry citrus. Let me make sure that's it. That's everything, let's go get this green. It's some sips. Do that in front though. I'm gonna do it like I'm going up one. This house is amazing too, guys. I'm talking about it. Beautiful. Man, don't worry, just kidding. Come over here and get busy. And they got a, they got a G-wag as in all. Great. They going nuts. Ain't ballin' up at all. Don't get me, it's okay, doggy. Don't get me, doggy. So just right here, right there, well, right here, stop by the top. Here, here, well, let me get the drinks. Four, last but not least, the tie. You know how we ride, we're gonna slide. Hello, how you doing, sir? Good, how are you? I'm livin' a dream, I can't complain. I like that. All right, sir, you have a great day. That is everything. Thank you, I appreciate it. Yes, sir, you have a good one. We are here to throw up these containers, baby. I didn't know containers cost as much. I'm just gonna say, this is a hundred or something. I was like, only four of them. May I throw a bell? Let's go. Guess where we at? Back at Mariano's. We got two orders, 27 items, 5.6 miles for 48.93. We about to go ahead and get busy. Let's go. First up, watch for detergent. Then we need some dawn. Then we need some scotch tissue. Bounty. Hey, sometimes I'd be mad because we'd be getting that glad, that bag. Ice moment. I ain't gonna lie, I don't not like this ice moment, man. Ice moment is disgusting to me. I don't not like it at all. Diet Coke.  Last but not least, we need some ice, ice, baby. Mm, mm, mm, mm, mm, mm, mm, mm, mm, mm, mm, mm. Let's go. This one, dear, has some alcohol on it, but I'm busy, I don't know how we gave it to her already. We gotta do it, drop our stuff right here, and we're gonna get busy. We are here to drop off order number two, y'all know what it's time to do. Drop, drop, drop, drop, drop, drop, like it's hot when that doorbell. Step back, and with that photo, if you already know those. Let's go. And just like that, it is the end of the video. I hope you guys enjoyed the content. For those four orders, we received 18502. Y'all saw what we do, baby. We get busy, and I'm glad you guys are with me. I hope you guys enjoyed the video. Again, if you're not subscribed, go ahead and smash that subscribe button, give me a thumbs up, and do not skip those ads, and lock in tomorrow, because we'll get back to this bag. Why we get back to this bag? Because 2023 is still bag season, we okay, but we'll give them a reason. I'll see you guys on the next one. We grew up, we grew up, we flew on you, already knowing the DDK, and I'm on my way.


Hi you guys, Lindsay here. Welcome back to my channel Inside the Hymn. I am so excited to show you one of my newest makes, the McCalls 7789 jumpsuit with cutout and wide leg pants. If you watched my first impression review of this collection, you'll remember I liked this pattern, but I thought that the fabric choice on the model didn't favor the pants very well. So when I went to make my own version, I paid close attention to the drape of the fabric so the pants would hang perfectly, but I also had to find something slightly stable so the bodice would hold up. I ended up using a linen from Gray Line Linen's in New York City. I loved the tone on tone stripe and thought that the bright red would make the perfect summer jumpsuit. The fabric is available online so check the description box for the link. As I started seeing other people's versions of this jumpsuit online, I quickly realized that the tie front bodice wasn't going to work for me. The underboob situation would just be too uncomfortable for me, so I decided to make the version with the center front seam. But I loved the look of the tie so I actually drafted a separate pattern piece that ties around the center front. I have worn this jumpsuit literally every week since I've made it. I always feel so chic and cool when I wear it. Due to the nature of the linen, it continues to shrink when I watch it, which is okay since the pants were a little long as drafted. The crotch length is a little short for me, so I think I've lengthened that by about an inch on my next version. Overall, I think this pattern is a winner and I can't wait to make other versions by swapping out the upper bodice pieces, redrafting the existing bodice pieces, or even just making the skirt version. But until then, that's going to do it for me today. I will see you all very soon. Bye!


So hi, I'm Andrew and today I'm going to be talking about the core OS boot process And I call this a journey through time and space because we're going to be walking through both from the Start of when you boot to up to a running system, but also we're going to be walking through where in the disk image We actually like pull various bits of the boot process from so A little bit about me I Used to work for a core OS the company and as they're worked on mostly container Linux Ignition and the Fedora core OS config transpiler and Then we got acquired by Red Hat and now I work in addition to maintaining container Linux also on the Fedora core OS equivalents that's Fedora core OS also still ignition and FCCT which is the Fedora core OS config transpiler And recently I've been working a lot on setting up how we do our boot loading and so that's what I'm going to talk about today So in this talk we're going to walk through the boot process and as an example We're going to walk through the boot process where we configure a the slash bar to be on a separate partition And we'll set up a system D mount unit to mount that on every boot and On Fedora core OS the first boot is where we do all of our configuration. So booting and configuration are inherently tied together So a quick note. This does not apply to rel core OS The boot process for Fedora core OS and rel core OS are very similar, but they are not the same So do not take this talk as applying a hundred percent to rel core OS I'm going to start off by going over a little background about Fedora core OS if you were at Benjamin and Jonathan's talk yesterday. That'll be entirely review Talk a little bit about ignition OS tree and then before getting into how Fedora core OS boots I'll talk some about What a like normal Linux boot process looks like for comparison Then when we actually get into how Fedora core OS boots, I'll talk about how grub gets loaded What's actually in that grub config and then the meat of the talk is about what goes on into the in-at-Rama fest because that's where we Do all of our configuration and then finally like What goes on in the real route and what's different on the first boot versus subsequent boots? And then what we still have yet to implement for the boot process and where we need help there So for our core OS, this is like super high level basics it came out of Container Linux and atomic host and it's only for running containers. Don't try to use it as a desktop OS. It's not designed for that It's it follows the like immutable infrastructure idea where You set it up on first boot you do all of your provisioning and then if you want to You should instead reprovision with that change. So all of your configuration is Set up once and then you don't touch it It has automatic updates that are atomic So because you're running everything in containers, you shouldn't really care as much what's on the host So we should be able to update that without breaking your workload It uses OS tree for Handling these atomic updates and it uses ignition for the configuration and we'll talk a little bit more about both of those and then finally it's set up so that your install is just a DD2 disk and then Injection of a config into your boot partition And the advantage of this is it makes your bare metal case exactly like your cloud cases So on clouds you'll get instead of injecting your configuration into boot You'll grab it from like your ec2 metadata endpoint but in both cases you're starting with the same image and The boot process is the same your configuration is the same And so there's nothing special about bare metal in that case So this is a diagram of a Fedora 4 less disk This is the same on clouds and bare metal. It's eight gigs in size And don't worry if this is a little overwhelming. We'll return to this and walk through everything in it But you basically have it's a GPT disk You have your MBR and if you have a GPT disk all your MBR says is There is one partition and it's GPT Then you have your actual GPT partition table And on this disk we have four partitions. We have boot your boot slash EFI or the EFI system partition BIOS boot which is just used to hold grub for when you're doing booting on BIOS and Then root where all of your actual content is and then finally at the end of the disk There's a GPT backup header and unlike MBR GPT has a backup so in case your Initial GPT header gets corrupted or deleted or something you can recover your partition table and It's worth calling out that Normally on a UEFI booting system. You'll have things like your kernel and And at ramfs and grub config in your EFI system partition That is not the case on Fedora CoreOS. The only things in our EFI system partition are your EFI executables and a small shim grub config So let's talk about OS tree for a second It's tagline is kind of like get for your operating system. So the idea is you have Kinet objects that you can deploy It lets you do atomic rollback and unlike container Linux where we had a AV partitioning scheme OS tree uses hard links. So in a given deployment you all of your files are hard linked into the repo So you get sharing between deployments And that means you don't need twice as much space for having two very similar deployments And each of those deployments are basically just like a get commit checkout so If you look at like what's actually in an OS tree disk This is like if you were to just pop the disk out of your computer and mount it We have a directory for boot and that's actually not used by OS tree. It's just a convenient mount point to have And then everything is under slash OS tree There's a repo directory and you can think of that kind of likes your get directory Where it has all of the actual objects and then you have Deploy and that's where you check out those commits to OS tree supports actually installing multiple OSes at the same time on Fedora for us There's just one so this like OS name would be just Fedora for OS and Then in there you have you know multiple deployments in that case in this case It's hash one and hash two those are like full shaws, but those don't fit on a slide very well, so And in each of those that's where you'll find your normal like slash user slash Etsy that it looks like a normal like oh Linux root and then Because when you do like an update you don't want to delete all of var like you want to like carry state between updates Within an OS the var is shared and as you'll see in the next slide that That will get mounted to their correct place on boot So this is what a running OS tree systems important mouth points look like you can see that your root is mounted to that deployment and That you'll notice that user is also has a special mount and that's so that we can mount user read only This is to prevent people from making changes to the system because it's a beautiful OS You can see that bar is mounted to the OS is var directory and There's a couple other mounts here the boot and boot BFI are just normal mount points like you'd expect on other systems And then there's also this mount point sys root and that's kind of an escape hatch back to the Route of the actual block device. So when you do something like doing a new deployment, you actually need to access that repo and so you do it through the sys root and Finally, we want all of our state in var and so all of your directories like home or opt or Serve where you like find state normally are all sim links into corresponding directories in bar And so this means everything that changes on your OS goes in bar So let's talk about ignition now Ignition is how we do all of our machine configuration It configures machines using a JSON config It's a declarative configuration So instead of saying like I want to do like partition it then create a file system then create files on it You say I want this partition to exist. I want this file system on it and I want these files to exist on that File system and it's designed to run in the inner ramifest so the inner ramifest is very early in the boot process before you've mounted anything and So because nothing is mounted we can do things like repartition the disk you're using that you normally wouldn't be able to do on a running system And it'll handle things that are traditionally handled by like an installer so things like partitioning creating file systems But as well as also like things that would normally be handed by configuration software like cloud in it So things like creating users creating files setting up system to units that kind of thing And because we have this unified disk image and because it runs in the inner ramifest that means that all of your configuration on clouds and on bare metal can be the same and Depending on what you're setting up. You might even be able to use the exact same config The configs themselves are not easy to hand write their JSON file and Like things like inline files get based 64 encoded And so we have a tool called the fedora core west config transpiler that takes a human readable format that has sugar for calm in actions and transpiles that into your JSON configuration file It runs in four stages and we'll get into more of this later But you have the disk stage that handles your typical like Installer type tasks of partitioning creating file systems. It has a mount stage for setting up Mount points that the file stage uses to do all of your configuration and then an unmount stage to tear down what it did in the mount stage and Finally actually lied earlier. There's actually two configuration files One is what we call the base config and that is all of your like OS vendor configuration so on fedora core west there's a default user called core and that's actually not shipped in the OS image But instead in the base config and so the base config says that this user should be created or should exist rather and Then the user config is actually that you specify is merged into that config So this is an example of a fedora core west config Yes The so it's only happens on first boot so there is nothing to roll back to beyond that This is a Example fedora core west config in this case when fcct runs on it. It'll actually just generate an equivalent json config There's nothing magic happening It specifies that on device dev slash vda There should be a partition with Partition number five labeled bar The start and size zero are special keywords basically saying find the largest available block of space and use it It says there should be a File system labeled bar that exists on that partition And it should be formatted as XFS and when ignition files runs, we should mount that at slash four And then finally there's a system d unit that will get put in the real route That says that should be mounted This is the ignition config. It's the same thing just as json So now I'm going to talk super briefly about how normal Linux booting works So in the simplest case you have no in a ramathas Your firmware loads your bootloader like grub grub will load your kernel and there's a kernel command line argument called root That just says what device should be mounted as your route And Linux will mount that there and then exact sbin slash in it as your pit one And typically that's like system d now But there's a problem with that of like what if I'm using blocks or what if I'm using raid and I can't just mount a device as Route so that's where the in a ramathas comes in and the idea there is you basically take a file system tree and bundle it with your kernel and Instead of directly mounting your root argument you the kernel will Unpack that and mount that as root and then that will set up whatever it needs to do to get your actual root file system available Mounted that typically sys route and then switch route into that and that switch route operation You can think of us basically just a charoot and exec And it's not a fork and exec. That's your actual just exec. So the new Slash sbin slash in it replaces the original so Nor core OS Is a little bit more complicated because we do all of our configuration also in the ramathas So that's everything in bold here is in the in a ramathas So you still have you know your firmware loading your bootloader your bootloader loading your kernel in it ramathas But now we need to do a lot more so first Ignitions only runs on first boot so we need to figure out if this is first boot or not and if it is we need to Partition and format disks with ignition Then we need to find root mount that have OS tree set up all of its mounts and Mount any other file systems like in our example. We're not also setting up a mount for var And on OS tree systems Var is unpopulated by default. It's just empty and before we running the all of our configuration We want to make sure that we're configuring things on top of what the base system looks like so we need to populate bar Then we can do all of our configuration with ignition like creating users files Files system D units and then we need to tear everything back down So where we just have the root mounted because we don't want the first boot to be different You can imagine if a boot only worked because we left something mounted that ignition mounted Then when we go to reboot we're gonna run into an issue where it worked the first time didn't work the second So we want to avoid that And then we do our normal switch room and Then you're running in the real route. You can start all of your system D services normally So let's talk about how we load grub on BIOS if you know there's nothing special about this It's a standard BIOS boot loading The BIOS will load the first Sector of your disk and start executing that so that's this grub bootstrap and you only have 446 bytes to work with there So all it does is just load the rest of the grub code which is in the BIOS boot partition over there And that loads grub and then grub is configured to load Your grub config from slash boot and so that's that grub config in red and I'll show you that a little bit later Also in slash boot we have obviously our actual Colonel and it ramifesses But we're also using the bootloader specification. So instead of The grub config defining all of the entries in your menu Those are all defined by bootloader snippets, which are all of these entry dot-conk files And so they typically look like this. It's a pretty simple format You have a title that should be displayed paths to your net ramifest and kernel and then all of your kernel options and By using this we can actually get rid of the need to ship like grub make config and Regenerate the grub config every boot that enables us to have a static grub config. We don't need to change and The grub and it's meant to be a bootloader independent specification. So grub has an implementation of it and all it does is look in slash boot slash loader slash entries and Create menu entries for all the things to find there. So if we look at the kernel options we Use There's a standard root option that says like what our final root should be and then there's this dollar sign ignition first boot So that's actually a grub variable that will get expanded and I'll show how that works in a sec There's a platform ID So this is taken from a key new image and this just tells ignition like hey You're running on Kimu like you should fetch your config using the Kimu method and then there's this OS tree parameter That's that path is actually a sim link that points to where the actual OS tree deployment is So this is our grub config The first two lines just find the boot partition and set that to both the boot and root variables The root variable is used in the next section there where it says If the file exists slash ignition Dot first boot that is relative to the root variable. So that's on a running system That would be slash boot slash ignition dot first boot And that's just a file that says this is the first boot and at the very end of our boot process will delete it So it will only happen on first boot And if that file exists we set that variable that was included in our kernel command line to say This is the first boot also. We need to turn on networking which is this rd.need net and IP equals to the HCP And then finally this last line the BLS config says go and read all of those config files and generate the menu entries and That one uses this boot variable that we also defined earlier So on UEFI things are a little bit simpler UEFI knows how to find the EFI system partition And if you don't have any like EFI configuration set up It will fall back to loading this boot x64.efi and that is our secure boot shim So that is signed so secure boot can load it and then that will in turn load the grub executable Which will read this grub config file and that grub config is just a shim That loads the same one that the BIOS loads So we share the same grub config between UEFI and BIOS The grub prefix variable is a special variable that says like this is where I expect to find like my config and when you switch to normal mode that gets implicitly loaded so BIOS and UEFI are basically the same path so now that we've got the kernel loaded and Loaded the init ram fs Now we get into the need of things and this is everything the init ram fs needs to do The things in red are things that happen every boot and Everything else is things that happen just on the first boot So we need a way of deciding if it's the first boot and conveniently we have a kernel command line parameter that grub passed us Which tells us if it's the first boot or not We need to do anything we need to do pair to run Ignition disks to do all our partitioning and file system creation. We need to run it We need to mount the root device and set up all the mounts We also need to mount var on a normal boot that would happen in the real root But since we need to populate we need to mount it in the init ram fs on first boot Then we need to mount any file systems we defined in our ignition config We need to populate var do of all of our configuration and then tear everything back down and switch route So if you look at the man page from system D for boot up There's a bunch of system D targets and mount points There's some basic initialization that happens and once that's completed you've reached basic dot target Then there's a target for saying I have found the device that you said was root There's a mount unit to mount it to such this route There's a target for saying Okay, so I've mounted it and now it's ready as a normal Linux file system So this will happen After what we've done the OS tree prepare route and fixed all of the mount points to look like a normal Linux file system These two in gray are not used by Fedora core OS. So you can basically ignore them There's This in it our DFS dot target is for any other file systems that you might need to mount So if you were on a system that had like a separate user and needed that to be mounted before you switch route To that's where that would come in And then in an or Ddup target says I've done all of my in it ran a fast configuration. I'm ready to do the switch route so this is what that looks like and Everything on the right is the stuff that only happens on first boot and so we have a system D generator and system D generators run before you start any units and they can do things like create units create dependencies between units and Things like that. So we use that to pull in all of these units on the right if that kernel command line option is set So and if you kind of break this down into groups of units The core OS GPT setup and that chunk up there is all stuff to prepare to run ignition discs this section here with the In it our D route device is all of the stuff to set up your root of this and Then the stuff over there is the stuff to populate Bar and configure it and then finally once you've done all of that we're ready to switch route and we'll get back to the slide do So What needs to happen for ignition discs? Well, we need a disc that has a valid GPT Partitional layout and we actually don't have that by default now. I'll get into that in just a sec We need to find our base config And we need to find our user config So if you're on a cloud the user config actually won't exist because you're getting it from a cloud metadata service But if you've installed installed the bare metal you need to go grab that off of your boot partition and Then finally since ignition can do things like fetch file over network we need networking up so the GPT is invalid by default because It has a disk UI UID which is a unique identifier and since you're debuting the same image everywhere It's not going to be unique. So we need to scramble that And the backup header Should be at the end of the disc and since you just debied an 8 gigabyte image. It's not at the end of the disc It's 8 good 8 gigabytes in and so we can fix both of those with an s2 disk man So that's all this unit does The ignition setup just copies some files around so it uses that platform ID that you saw in the Kernel command line arguments earlier to determine what platform you're on and grab the correct base config for that and Then it also will mount boot Grab a user config if it exists and then copy it to that path And that's where ignition it will read these from and then finally for networking We just use brackets legacy networking. We want to move away from that and use Network manager that'll enable us to not need these rd.neednet and IP command line parameters because we can pull in network manager just as another unit in our graph But we can just use network dot target. So when we switch to network manager, we won't actually have to change those dependencies So now we're ready to run ignition disks And this is the section of our config that ignition disk cares about so it'll go through and Do our partitioning and then create the file system The other thing it will do is it'll actually fetch both the configs the base config and the user config Merge them together and cache them to disk so that all of the future ignition stages don't need to go through that process So this is where we are in our boot process. We've done all of our setup to run ignition disks and We also the root device has been available this whole time. So that's also ready. So now we can do our mounting we can set up all the mounts for OS tree and Then start populating bar. So sysroot.mount is a normal mount unit. It just counts the device This is generated from a another system degenerator that reads that root kernel command line parameter And generates the mount unit to do that OS tree prepare root dot service. This is what OS tree does to Fix all of those mounts so that when you look at Slash sysroot, you don't see like boot and OS tree But instead you see all of your like user at sea all the things from your actual deployment and then Coral s mount var is what actually just mounts var in and again on a normal boot You wouldn't need to do that second happen in the real root, but we need to populate it. So we need it mounted now Ignition mount all this does is look through your file system section and say oh I need to mount this file system to slash var relative to the sysroot and so you can see before we our var was mounted as part of our root partition at a different path and now we have it mounted as our Partition and file system that we just created so now var is mounted all of our mount points are set up and we can populate var and Because OS tree has a blank var by default if you have like packages in your base OS that need to put files there We need a way of doing that and so our PM OS tree, which is the tool that actually creates the OS tree commits for us We'll look at all the packages. It's using and if they have files in var It'll generate system d temp files entries to recreate those So it'll generate a bunch of configuration for system d temp files And then we can run system d temp files and put all of those files back in var And so after we've done this our system is in a state similar to it if you have just installed an operating system But have done no configuration yet So now we're ready to do our configuration with ignition files You'll get a graph. We're almost done all we need to do is do our configuration and then we're ready to switch route So ignition files internally is split into two parts There's user creation and group creation and then everything else so like files directories and system d units and If you're thinking that oh, we don't have to worry like this is our Configuration here all we have is a system d unit. There's no users to create If you remember that base config has the core user so that'll actually happen first We'll create that core user and then we'll add this system d unit. And so now that we've done that All of our prerequisites for ignition complete dot target have been met So that's done and in order all the prerequisites for in order d dot target are done. We're ready to switch route and when you go to switch route that happens by isolating to a new target so And when you do that it's going to stop in an or d dot target And if you've been wondering this entire time, why are those two units in red? That's because They have a special thing called exec stop. So system d units allow you to Specify actions that should be taken when a unit stops. And so this is how we do our tear down so when the ignition mount unit gets stopped we run the ignition unmount stage and when Coros bar mount stops we run its unmount and Again, this is to ensure that the first boot isn't special. We're not carrying things that ignition did In terms of setting up mounts into the real route so that we don't run into a situation where it worked the first time And then we reboot and then we fail so switch route happens pretty much like normal switch route would it Basically just trutes into the CIS route and then execs has been in it in there and in our case that's system d again and the nice thing about doing all of our configuration beforehand is if we wanted if we want to configure things in the real roots Boot process we did that before we started it So we're not trying to configure our boot process during our boot process, which is problematic so Now we switched route system be a started up It's a normal system d start up and eventually we reach this boot complete dot target and that just says hey we successfully booted and Now we can go and delete this boot ignition First boot file and so that next time we boot when grub looks for that file It won't find it We won't add the kernel command line argument to say this is the first boot We won't turn on networking in the anagram FS and our boot can Proceed normally, so now we're done So Final part is like what do we still need to do? Life pixie is One case so container Linux supports running out of RAM so you can just pixie boot container Linux and Have your entire root be ephemeral and typically when people do this They have all of their data in like bar and have that on persistent storage and not that in and Just run ignition on every boot in that case because they're starting from a fresh route every time so you can do that We want to be able to do that for four less as well. We haven't had time to implement it yet We don't have automatic rollback yet. So on container Linux if you fail to If you're like kernel fails to load or something like that It'll automatically fall back to the previous Installation and that instead We don't have that implemented yet. It's something we want to do And that has to a lot of that is in the grub configs where we need to Keep track of have we tried booting this did it work? And so we can use that to determine like which entry should we boot The other thing we want to do is Detect if you're using ignition to change kernel command line arguments Because if you're changing kernel command line arguments, you probably want them to be applied on your first boot So after we've done all of our configuration We want to detect that and if that is the case reboot so we can pick those up and then go through the boot process normally With this like single image Where we're not doing like a typical install that means moving where root is is problematic So if you wanted to do like root on raid or encrypted root We don't have a place to pull all of that information from after we've created the new Device especially if you're replacing root. So we need a way of detecting like hey, are we going to? Be moving root if so we should take all of the contents of root load them into RAM so that After we've blown away the old route we can still put all those contents back and finally this Boot process isn't quite worked out on power PC and system 390x with their boot loaders yet So we need support for that You guys have any questions How did the ignition configs get fetched so I'm going to jump way back If you look these are our kernel command line options there's this ignition dot platform id and Ignition has a list of different platforms. So like Kimu AWS Google Cloud all of those and they all have a entry in there and Ignition will that parameter gets passed to ignition and ignition will then Look up how to look that up. So on like AWS It'll hit the easy to metadata endpoint on Google cloud. It'll hit that endpoint On Kimu. We use a kind of hacky method where we actually pass it in with via the firmware config But it depends on which platform you're on What protocols does it support? So? It supports whatever you need on that cloud So on most in most cases. It's just HTTP Ignition also supports chain loading configs. So in your config you can say I want to actually Like fetch another config and merge that into mine and for that we support most common protocols I think we support HTTP and HTTPS TFTP Think one other but I don't remember the top of my head Sorry to repeat the question Doesn't use matchbox so matchbox Will serve its configs over HTTP and there's actually something I didn't cover is There's an optional kernel command line argument where you can Specify a URL that ignition should use instead of its normal config So I think it's ignition dot config dot URL if you specify that kernel command line argument and give it a URL It'll instead of doing its normal fetching fetch the config from there When things go wrong, how bad you triaged it what are the techniques you use? When things go wrong, how have we triaged it? so ignition and Fidore CoroS in general follows the philosophy of if you fail you should fail hard So part of ignition's whole philosophy is you should either get the system you specified or nothing at all Like the worst case is that you get a system that comes up that is like partially provisioned And so Unfortunately, this means that if you fail you're going to be dumped into an inner ramifest shell and this does make debugging harder We try to make it obvious like when that has failed like how to get logs But if you're like on a cloud platform that becomes harder because your console access is typically not great One of the things we do want to do is support like forwarding ignition logs to various like Cloud endpoints or things like that, but that's still in the works any other question Yes Like So the question is We talked about in the future being able to move the root of Fess Does that also include being able to further split up the root of Fess into? like more mount points To some degree we already support that so things under the like OS tree Section like that your everything that's not under bar do need to stay together But we already within bar you can actually divide up bar however you want like that can be arbitrarily complex already any other yes Yes, so the question is I mentioned that this does not fully apply to Relcore OS. What are the differences there? in a go to another slide, so Relcore OS is using an older version of ignition Which does not have this ignition mount and unmount Section and because of that and because we need to populate bar on first boot What rel core less can do with bar is less flexible and so a lot of this is the same so like Pretty much everything up until this point here the in at our D root of Fess dot target is Pretty much the same. It's this stuff here where we deal with mounting bar populating it that part is different Any other question sure? So The question is is fedora for us the upstream of rel core less Mostly So things do move from fedora core less into rel core less But there's also some things that move backwards the other way. It's not a strict upstream and downstream relationship Yes Right there was this flavor So the question is in the fedora core less config there's a variant label that says SCOS What is that about? so We try to make our configs descriptive about what they are. So there's both a variant and a version Because writing ignition configs is hard. We wanted to make Our transpiler easy for other people to extend for their own OS's But at the same time we don't want a bunch of configs floating around that aren't descriptive about like what OS they're targeting So that variant there is saying this config is for fedora core OS So that other people who want to use ignition want to write their own similar tool There's a standard way of saying like I this config is conforming to this version and targeting this OS Don't try to use it on other OS's The question was a lot of the boot process here doesn't relate to containers Where does that come in? So yeah, so if I go to our List of everything That needs to happen. That's way down at the bottom and start normal services So there's nothing special about how we launch containers on fedora core OS But if you wanted to set like where this would come in places if you wanted to set up a system D unit to like say run pod man run or Start docker or that kind of thing you do all of these set up for that to get it ready to run that in this boot process A question is there's nothing in here that prevents us from doing a different kind of boot Maybe Yeah, so the the boot process here is not prescriptive about what kind of things you could set up So fedora core OS is not designed to like run on a desktop for example but if There's nothing in our boot process specifically that prevents people from trying just don't We're trying to keep the boot process generic and not like limit the scope of what people can do with it Any other questions? All right. Thank you


Open notes, open anything you can write in here, it doesn't matter, except for your phone. Okay, the certain atom has a three-fold degenerate ground state and non-degenerate electronic level. Excited level of 3,500 wave numbers and a three-fold degenerate level of 4,700 wave numbers. This is the last example we did on Wednesday, but we did it fast. So let's just do it again briefly, remind ourselves how this works. We want to use the form of the Boltzmann distribution law that we derive to figure out what the population of these different energy levels are. That population will depend on the degeneracy of the energy level. Here the degeneracy is 3. Here it's 1. Here it's 3. All right, we can factor this information into our answer. This is the version of the partition function that we want because it's the version that contains explicitly the degeneracy. This is the degeneracy of energy levels. All right, here's an energy level. Here's an energy level and here's an energy level. The degeneracy of this level is 3, 1, and 3. Okay, so this summation means that we have to sum over these three energy levels. There will be three terms in our summation. If there were five energy levels, there would be how many terms? Five is the correct answer. All right, three, that's the degeneracy exponential. What's that energy? It's zero, okay, and the first excited states at 3,500 wave numbers. The second excited states at 4,700 wave numbers. We need to work out what this is in units of joules. All right, we have our handy conversion factors. 8065.5 wave numbers for EV, 1.602 times 7, my second joules for EV, boom, there's the temperature that we care about, 1,900 Celsius, a Kelvin, or rather, and so this 2.649 is what? All right, it's the exponent here. There should be a minus sign in front of it and that's the exponent on this E. Okay, and so when I evaluate that E to the minus 2.649, I get 0.07069. Okay, and obviously this guy is just going to be three because that's zero. All right, so this exponential is just one. And so 3 plus that plus that is 3.156 and the first question, we always want to ask from recalculating a partition function is does, is the order of magnitude of this number of thought right or is it way up, all right?  All right, does it make sense? We always want to ask that question. What is the partition function? It's the number of thermally accessible states at the target temperature that we're talking about. Okay, and so if we want to figure out if this answer could possibly be right, we need to calculate what the thermal energy is in units of wave numbers. All right, let's calculate what the thermal energy is. What is the thermal energy? It's K times T. K is 1.381 in the semi-screen joules for Kelvin, 1900 Kelvin. 1900 degrees Kelvin, and so that product is 2.62 times 10 to the minus 20 joules as always any and certain joules is counterintuitive. It's always 10 to the minus 19, 20, 24 joules are not a unit that it's easy at least for me to grasp. So I always want to convert to EV or wave numbers, all right? In this case, we're just converting to wave numbers as we've done before, 1,321 wave numbers is what that turns out to be equal to. 1,321 wave numbers. Okay, so here's my energy level diagram. Here's my ground state, triply degenerate. Here's my first excited state. Here's my second excited state. Here is that 1,321 wave numbers. That's the amount of thermal energy that's present in the system, okay? And so of course these, so now we have to ask the question, what do we expect the partition function to be in this system at this temperature? Well, these ground states are definitely going to be thermally accessible, right? The ground states are always going to be thermally accessible when they're at zero energy, right? They would be accessible at 1 degrees Kelvin, all right? So we know that the partition function is going to be at least three. And then we can ask, are these excited states going to be populated as well? Well, you can see we don't have enough thermal energy to significantly populate these excited states and so we expect there to be a little bit of population of those states because what does that Boltzmann function look like? It's a decaying exponential, okay? So there's going to be some populate. This thermal energy doesn't cut off in a hard line here the way I've drawn. It sort of smears now. Yes. Yes. Did everyone hear that? Does that mean for this particular example the maximum that Q could be is seven? Yes is the answer. Okay. So we expect a little occupation of 3,500 and 4,700 states even though we're not close to them there's a tail on this thermal energy that we have to remember about, right? I'll draw it as a pink box but we know there isn't a hard cut off on that thermal energy. It extends exponentially at a higher energy. Okay, so qualitatively this number makes sense because here's three states that we know are going to be thermally accessible and then there will be some fraction of these four states here that are also thermally accessible. So 3.156 qualitatively that's what we expect here. If we had gotten four that should be a red flag. That sounds too high, all right? We shouldn't really have that much occupation of these excited states. And that level of intuition is only going to come from doing a bunch of problems, right? Now if you've done a bunch of problems it'll be clear to you that no, there's no way that 4 is the right answer and it's not the right answer. 2 can't be right, all right? We know there has to be a partition function of at least 3, okay? So look at the answer and ask yourself, we know the answer has to be between 3 and 7, all right? And 3 in a fraction is about what we expect. Let's do another one. These are the electronic states of carbon that turns out. Here are the energies, here are the degeneracies of those states. Now what we want to do is calculate the fractional population of every single one of these levels at 6,000 degrees Kelvin which is the temperature of the sun. We've got carbon atoms in the sun, what electronic states are they in? So we start with this equation that we derived on Monday, Wednesday. Okay, there's our partition function. What we want to evaluate is the fractional population, right? The number of atoms in the state divided by the total number of atoms in each one of those 4 states, okay? And so if I divide by n, that n just moves down here so this equation doesn't have an n in it anymore, all right? And this guy here, that's just our partition function q. Okay, in this case we will have 4 terms, yes, 1 for each, one of these 4 energy levels. The first one is going to go away with this level. The second one with this level right here, the third one here, this is really necessary. Okay, how do we calculate them, all right? Here are the 4 terms. The first number here is the degeneracy of each state, non-degenerate, triply degenerate, 5-fold, 5-fold, all right? 1, 3, 5, 5, then we've got the exponential. That contains a different energy for each state. That's the energy of the state, okay? So for this guy, the energy of that first state is at 16.4 wave numbers, pretty low, unbelievably low, all right? There it is. And here I'm just doing a unit conversion to get to joules again, all right? So I'm evaluating that term right there, all right? And of course there will be a minus sign in front of this 3.93124 when I put it in that exponent there. Put a minus sign on it, okay? And so it ends up being 2.99, this guy ends up being 4.95, this guy ends up being 0.43. I add them all together to get the partition function. I get 9.37 as the answer for the partition function, okay? So 9.37 of the 14 total states, there's 14 total states, 5, 5, 3, and 1, all right? Are thermally accessible at 6,000 degrees Kelvin? It's too small, right? 6,000 degrees is an enormous temperature, isn't it? So as always, does this make sense? The only way to know for sure is to calculate that thermal energy again, all right? 6,000 degrees Kelvin times K gives me this number in joules which once again is completely useless to me because I have no intuition about joules. It's always 10 to the minus 20 something, all right? But when I convert it to wave numbers rather, I get 4172 wave numbers, all right? That's a number that I do have a little bit of intuition about. All I've drawn here are the electronic states of carbon, right, from that table that I just showed you, right? Here's the ground state. It's non-degenerate. Here's the first excited state. It's only at 16.4 wave numbers, really, really close. First excited states at 43 wave numbers, then there's a discontinuity here, notice, on this energy axis, right? Because that's 5,000, that's the highest excited state. 10,103.7 wave numbers, okay? Where's the thermal energy on this diagram? Goes all the way up to 4,173, right? That's 6,000 degrees Kelvin. That's the thermal energy and it tails to higher energies, of course, okay? So what did we calculate for the partition function? 9.37. Does that make sense? 1, 2, 3, 4, 5, 6, 7, 8, 9. Does it make sense that all of those are thermally accessible? Yeah. 0.37, right? Hard to tell. All right, what that 0.37 is telling us is that there's some occupation of this guy, even though he's way the heck out there. Right, there's some occupation. It's a little surprising. That's a big energy gap, about 5,000 wave numbers, 6,000, okay? But we can use our intuition to tell us that this 9.37 is right about what we would expect, right, also close. Yes, 9.37 does make sense, okay? That's not what we were asked, by the way. We weren't asked to calculate the partition function. We were asked to calculate the relative populations of each one of those levels, okay? So we want to evaluate this. This is the number of atoms in the ground state divided by the total number of atoms. That's the relative population right there, okay? And so we take the first term. Here's our expression for the partition function. We take the first term, put that in the numerator, right? Divide by the partition function, that is the fractional population of the ground state. Now we take the second term, put that in the numerator for the N1 state, right? The first excited state, 2.99 divided by the partition function, that's the fractional occupation of that state that was at 14 wave numbers and so on, 4.95, 0.43, boom, boom, boom, boom, add them up and you should get 1. That's a check on whether you did this calculation correctly. Right, because obviously total population, right, once you've got it for all of the atoms and all of the states, it should equal 1, right? So 0.999 means there's a little rounding here, okay? Now we've used the Boltzmann equation before in N1, maybe in organic chemistry, but we've never, correct me if I'm wrong, been able to account for degeneracy in this way, right? This is the first time that you've ever been able to accurately calculate the population of energy levels like this. This is a super important thing to be able to do, okay? Very straightforward, very powerful. Now, it will be obvious to you, I hope. Here's a molecule, here's a molecule, here's a low temperature, there's not enough energy here to occupy very many of these excited vibrational energy levels that I've drawn here, right, we're almost all on the ground state, right? And at a higher temperature, we might occupy a bunch of different states in the same molecule. And if I calculated the number of molecules that have this configuration right here while there would be 4 and if I calculated how many have this configuration right here, there would be 24. So, qualitatively, we understand that energy is going to be correlated with W and with the partition function somehow. So let's see if we can figure out what the relationship is between the energy and the partition function, all right? We're going to keep coming back to this partition function in staff net. It's the central object, all right? So, this is the average energy, we're going to call it the average internal energy because it's exclusive of the translational energy. In other words, an atom might have some energy because it's zooming around. It's got some kinetic energy. This is the internal energy. This is the total energy to get the average energy. I divide by the total number of atoms or molecules, right? All right, so that makes sense. Total energy divided by the number of objects that have energy is the average energy per object, all right? This is my expression. What is this? This is the sum of the energy for every, this is the number of atoms or molecules that have a particular energy and that's the energy and so if I multiply those two things together and I sum over all the different energy levels, I should get the total energy and that's just it, okay? Now, we have an expression for n already from both of these distribution blocks. So, if I plug this expression in for that n right there, I think you can see immediately that this big n and that big n right there, they're going to cancel. Boom, okay? And so now, when I do that substitution, here's the equation that I get for the average energy, all I did is make a substitution here for that n, boom, okay? And now q is characteristic of this whole distribution of states and molecules at a particular temperature. So, I don't need to include it in this summation. It can go out front. It's a constant for every one of these states. It's not going to change. Okay? So, this is what my expression looks like. All I did is move 1 over q out front. Now, our definition for q is this. Look at something that I won't call interesting, but note something, if I take the derivative of q with respect to beta, right, the derivative of q with respect to beta, this is q, if I take the derivative with respect to beta, what are the rules for that? Remember, the rest of this guy's going to move out front, there it is, okay? And if I put a minus sign here, that minus sign is going to get extinguished, okay? So, does everybody agree that this is equal to this right here? All right, the reason that's interesting is because this right here is that, right? Dq d beta, minus dq d beta, minus the derivative of the partition function with respect to beta, it seems like a very abstract thing to be evaluating in the first place, all right? But my goodness, that gives us the average energy, all right? So, this is an equation in your book, I don't know. I should have laid it out, I don't remember which one. All right, but the average energy is just equal to minus 1 over q, dq d beta, there's that minus sign. That's what that minus sign is right there. And if I want to know what the energy is for n molecules, I put big n here. Often we want to know the energy per mole. Most of the time we want to calculate energy per mole, so that number is Avogadro's number for goodness sakes. Okay, you ready? Let's do an example. Here's a molecule, n, o. Two electronic states, 1 and 121.1 wave numbers, 1 and 0 at the ground state, both doubly degenerate. The analog is doubly degenerate, and it's 2, and 2, and 2, and 2, and 2, and 2, and 2. Calculate and plot the electronic partition function of NL from 0 to 1,000 k. Evaluate the term populations and the electronic contribution to the molar internal energy at 300 degrees Celsius. Which problem for next? Okay, 1,000 k, let's calibrate ourselves so we have some intuition about where we're going with this problem, where is that compared to 121 wave numbers, boo. 121 wave numbers is down here, 1,000 k turns out to be 695 wave numbers. Okay? So what are you going to predict? The partition function is going to be at that temperature. Yes? Yes, everyone here that insightful answer, 4 is the highest it can be. It can achieve 4 only at infinite temperature. So it's going to asymptotically approach 4 as the temperature increases, but it's never going to get there, right? Okay, let's see what we come up with. Here's the partition function, so hold that thought. Two levels this time, right? Both doubly degenerate, boo. There's the energy. We're not going to continue to write this unit conversion on the screen. The wave numbers to joules, I trust that you can do that now. And you can do it any way you want. You don't have to use my inversion factors. There's a million ways to do it. Oh, there it is again. All right, here's my plot of Q as a function of temperature all the way up to 1,000 degrees. Check it out. Does it look like it's approaching 4 asymptotically? It sort of does, right? What is it here? Maybe 3.7, 3.65, right? Intuition-wise, that's where we sort of expected it to be maybe a bit higher than that, because my goodness, we've got way more thermal energy than 121 wave numbers, don't we, right? So you might be a little surprised that it's not closer to 4, but what you'll find as you do more problems is, right, your intuition has to be calibrated a little bit, right? It's going to be more than 3.5, but less than 4, it's sort of in the right range of 1,000 degrees. Now, we want to calculate these term populations. The ground state is n0 divided by n. In the numerator, we have the first term of our part, here's our partition, here's our whole partition function, right, the ground state is the first term over the whole partition function, boom, 0.64. 64% of the molecules are in the ground state, even though, okay, well, we're talking about 300 degrees Kelvin here. Where's 300 degrees Kelvin on this darn? 300 degrees Kelvin is more than 121, but no more than 1,000, okay? Just to calibrate you, let me go back to where I was. Okay, so 0.64, 64% of the molecules are in the ground state, even though there's more thermal energy necessary than is necessary to populate that excited state, right? Most of the molecules are still in the ground state. That's interesting. And the excited state has, would have to have, of course, the other 36%, because there's only two states, right? And those two numbers better add up to 1, okay? I think this is a little counterintuitive because that number seems high when you've got almost a factor of two more thermal energy than you need to populate that excited state. You still have most of the molecules in the ground state. Okay, I think we're going to stop right there. We're not going to do the rest of this one. We'll do it on Monday. And you guys have a good weekend.