All right, did everybody make it to Jim Wyrick's great keynote this morning? All right, good, because your mind needs to be kind of limber for the adventure we're about to set off on. OK, so I titled my talk There and Back Again, or How I Set Out to Benchmark an Algorithm, and ended up fixing Ruby, because that's basically exactly what I did. And I would like to share the story of that adventure with you. OK, so first of all, my name is Joshua. I live and work from home in Ankara, Turkey, which is actually a very lovely place. And I work for a company that used to be called ELC, but we're actually in the process, right in the middle of the process of rebranding is Burnside Digital. So if you go home from RubyConf and want to find out more information, Burnside Digital is the place you want to go looking. All right, so like any good story, this one comes with a warning. This is an advanced presentation. While I do not expect you to be an expert on the inner workings of Ruby, I do hope that you have at least some familiarity with pointers, memory allocation, memory pages. If you're prone to motion sickness or become nauseous at the sight of hexadecimal memory addresses, this talk may not be for you. And if you want to take a moment now to check out one of the others, I would not be offended. I realized when I proposed this talk that it was a little ambitious, but I figured, what the heck? Maybe somebody else out there has as much fun doing this kind of stuff as I do. Okay, I do want to make sure that everybody gets a little something out of this talk, though, so I want to, before we jump into the actual adventure story, do a little bit of talking about contributing to open source, Ruby or any open source project, really. I'm going to be talking in the context of Ruby, but this applies pretty ubiquitously. So I've been hanging out on the Ruby Core mailing list for a while, and there's a question that pops up occasionally. You get some gung-ho programmer, discovers Ruby or gets really excited and wants to contribute. How can I contribute to Ruby, they say, right? Let me add those bugs. Well, one thing that I've found is the best way that you can contribute to Ruby or any open source project, for that matter, use it. Don't go looking for the bugs. Use Ruby, and the bugs will find you. And that's actually a sort of a more efficient way of going about contributing to a project because after all, we write software not to write software, we write software to run software. So the more you run it, the better it is going to be.  What next? Well, I want to introduce you to the four Rs of bug reporting. These are things that you should do if you want to be a good open source citizen. So you want to reproduce, report, reduce, and regress. Okay, let's look at those a little closer. So this is an often overlooked step in reporting bugs, but the first thing that you need to do if you think you found a bug is make sure you found a bug. A bug that happens once is not a bug that you can really go about fixing. So the first thing you want to do is run the code again and see if it crashes, or if whatever the bug happens to be reproduces. Can you make it occur every time? Now, not every bug is 100% reproducible. Once you get into things like threading and memory allocation, maybe it's only 60%, 50%. It should be more than zero, though. If you can't reproduce it, you're not gonna be able to fix it. In the process of reproducing it, there are a number of things that you need to be aware of. Ruby can be influenced by a number of different configuration files, an IRBRC, a GEMRC, various other RCs, the environment that you're running it in, the particular shell, shell configurations, environment variables, all of these things can have subtle effects on the way that Ruby is running. So make sure when you're trying to reproduce this that you pay attention, especially lately, a lot of people have been using RBM and RBN, and these also do a lot to the environment that may alter it in such a way that it affects whether or not the bug is going to occur. The best thing that you can do if you're trying to reproduce a bug is ask a friend. Get one of your buddies on chat or whatever and say, hey, I ran this code, I think there's a bug, can you run it? Do you see the bug? If two people see the bug, it's probably a bug. Okay, so once you're sure you have a bug, the next step, report it. Again, something that is quite frequently overlooked. You have newbie programmers come into something like Ruby or a library that's out there and they're using it and they say, oh, that looks like a bug, but I don't know, somebody else must have found it. I don't need to report it. No, if you find the bug, report the bug. Duplicate bug reports are not a problem, actually. Some people might complain about them, but honestly, duplicate bug reports are a good thing. They're a good thing for two reasons. One, if a particular bug is reported, and again, and again, then that means that people are obviously encountering this bug. This is an important bug. This is how open source projects prioritize their fixes. The bugs that get reported more often are fixed sooner. The other reason duplicate bug reports are good is because not everybody is going to hit the bug the same way, and one of the most challenging things about fixing any bug is narrowing down the specific set of criteria that are needed to trigger the bug. So if you have multiple bug reports, you can look for the commonalities between them to help zero in on what the actual bug is. Okay, so Ruby has a bug tracker, bugs.ruby-lang.org. When you're reporting it, make sure you include all of the steps. It's really good if you can actually just attach a little script and say, run this script, you'll see the bug. That's great. Make sure you make a note of what Ruby version you're using. It should go without saying not every Ruby version has the same set of bugs, so if you found a bug in, say, 193, it may already be fixed in 2.0. So make sure that you report the version. And if the bug that you're reporting happens to be a crash, make sure you attach the crash log.  There are equivalents on other operating systems, but just so that caveat is out there. So on OS 10, there's this app console.app. If you don't find your crash log in your terminal, you can go to console app, and there's this little section, it's kind of hard to read, but it says user diagnostic reports, and there you will see all the various programs that have crashed and their crash logs. And you should see one that says Ruby underscore, and then it'll give a date. So you just look for the one that corresponds to the date that the crash actually happened, and you get the full output of everything that happened there. Okay? Next step. Now those first two steps, those are kind of the bare minimum for reporting a bug, right? Make sure it can be reproduced, and then actually go and report it. Now if you want to be a really good open source citizen, the best thing you can do is to reduce the bug. So if you find a bug running a Rails app, right, and you go and you say, well here's a 100K line Rails app, and I was running it, and I did these 30 things, and then I found a bug. Okay, that's a bug, but it's not gonna be horribly easy to reproduce, right? So try as much as you can to eliminate the need to include any extraneous libraries. Try and zero down on just the code that's crashing. Simple scripts are the best thing that you can have, five or fewer lines. I know that sounds really, really small, but seriously, if you can get it down to five lines of Ruby or less, that's the ideal case. And aside from making it easier for whoever's going to try and fix this bug to understand, we'll see a little bit later that some of the tools that you're going to use to try and fix the bug depend on the bug being a small test case. And finally, if you're feeling really gung-ho and you really wanna be a really, really good open source citizen, try and regress it. So Ruby has multiple different versions, multiple different patch levels of those versions. You can try all of those and see does it occur on 187, does it occur on 193, does it occur on 2.0, what patch level of 19. If you're really ambitious, Git bisect is an amazing tool that you can actually just set to run automatically and find the exact commit that caused your bug. That's really helpful. It doesn't always work, but if it does. And finally, if you really are ambitious, you can also try different build settings, try different optimization levels, but that's kind of almost going a little too far at this point. Okay, I said four, there's actually five. If you wanna be a really good open source citizen, try and fix it. And so that brings us to our story. So a long time ago, about six months, maybe a little longer, in a faraway land called Turkey, I was working on a delegation library. Now, yes, I know this isn't technically what delegation is, we've all been lectured on the delegation pattern is not what you're doing in Ruby. All right. When I say delegation, what I mean is I have an object that I'm going to pass to the initializer to a second object, and I want methods on that first object to be called when I attempt to call them on the second object. There's a number of ways that you can achieve this in Ruby. So there's what I was calling pre-delegation, where as soon as I initialize the object, I'm going to take all of the methods on the second object and hoist them into the object that I'm creating using defined singleton method. Then there's what I was calling post-delegation, where I don't hoist the methods until the first time they're called. So I rely on method missing the first time you call a method, and then after that, I'm going to hoist the method into my object, and from then on, it'll be called as if it was a method on this object. Then there's on-demand, where it's basically just going through method missing every single time. Then there's this complicated beast that I was actually interested in a delegation library that would allow me to do quick calls to the delegate, but also swap out the delegate at run time. So I came up with this crazy scheme where I undef method when I decide that I want to reset the delegate and all the rest of that, right? So that was, and then the next step, benchmark it. How do I know which of these strategies to choose? Well, run through a couple of different scenarios. Find out what the run time looks like. That'll help me make an informed, evidence-based decision. So that's what I did. Now I ran through those kind of quickly. I put up a couple of blog posts on our company blog describing the backstrand a little bit more detail why you want to benchmark and how I came up with those various tests. But as I was running my delegation benchmark, when I got to one of the later benchmarks that was putting a lot of stress on the system, all of a sudden, bang, crash. Ruby crashed. I found a bug. Now I don't know about you guys. Maybe you get annoyed when you find a bug. I get excited. I think yes, all right. So, okay. So going through those four Rs, right? Before I reported it even, I was able to reproduce it. That was not a problem. Every time I ran that benchmark, it crashed. Before I reported it, I wanted to reduce it because this is actually, I know you can't read this. You're not supposed to. This is the entire benchmark that I was running, right? And that's a lot of code. So the first thing I did is those blocks at the bottom are all the different benchmarking runs that I was doing. It was only the last one that was finally causing the crash. So I said, okay, what if I take out all of the benchmark runs before that, right? Will that last benchmark run on its own still trigger the crash? And yep, it did. So then I said, okay, well it's crashing on the first of the methods that I'm benchmarking in that last benchmark method. So let's eliminate all of the other delegation strategies that I was trying. Just go with this pre-delegation one and see if just running that in that last benchmark causes a crash and yep, it certainly does. Okay, so at this point I don't need the benchmark library or I suspect that I didn't need the benchmark library anymore. I could just hoist the code out and run the method that was actually being benchmarked on its own, see if it's still crashed and yep, it did. Now, when I was doing this benchmark in this inner loop here, right, so I've got the 10,000 times do this initialization and then 10,000 times call method, right? I was actually calling three different methods in the benchmark that was triggering the crash and I wanted to know, do I actually need to call all three of those? What if I just call the first one? So the first method I called in the benchmark was the length method. So let's see, if I do this, is it still gonna crash? Nope, that didn't crash. And this is kind of the art of creating a reduced test case. You sort of vector towards the minimum amount of code that will trigger the crash and as you do, you'll probably end up eliminating the crash at some point. So then you got to backtrack and say, okay, what can I do differently, right? So the second method that I called of those three was reverse. And I said, what if I call just reverse, right? Do I actually need to call all three or is this one enough? And yep, that one did cause a crash. So the next thing I wanted to know is do I actually need to hoist all of the methods from my delegate onto the object that I'm created or is it enough for me to simply hoist the reverse method, the one that I'm calling, right? And so I eliminated that iteration through all of the methods and just did that single defined single method with reverse and yep, that's still crashed. So at that point, I was pretty much at the minimum amount of code that I could have that would still trigger the crash. The last thing to do is to play with the number of times of iteration and so you'll notice that I only needed to run the outside loop a thousand times. The inside loop, I still needed to run 10,000 times in order to trigger the crash. And so now I have my minimally reduced test case that this is the minimum amount of code that I need to trigger the crash. At this point, I went and I filed the bug and then I went to sleep because it was probably about 2 a.m. on a Friday night. But then I woke up on Saturday and I couldn't stop thinking about it. I said, I wanna fix this. All right, so before we set off on this adventure, we need to pack our bags. If you're going to debug Ruby, you need Ruby. So going at the source code, conveniently it's mirrored to GitHub, so it's actually really easy for you to get now. You don't have to worry with subversion checkout commands. And go ahead and build it. Over the years, building Ruby has become incredibly easy. In fact, I do believe you don't even need that first configure step anymore. You can just simply type make and it'll run configure for you before you actually make. If you want to play around with build settings, configure dash dash help has a lot of information about different build settings. We'll see some of them a little bit later. All right, so make sure that you've got the Ruby source code and you can build the Ruby source code. Then study the map. Again, I don't expect you all to know Ruby internals, but there are a couple of things that are useful to know if you're going to head off and start debugging Ruby. I do suggest that, I'm forgetting the name of the book, but the book that was discussed in the session yesterday, Ruby internals. Ruby under microscope, thank you, yes. That sounds like it would be an excellent resource if this is the kind of thing that you want to get into. But at a bare minimum, things that you should be familiar with. Inside of the Ruby source directory, you'll find this file include ruby ruby.h. This is the public C API, but it's also a lot of convenient methods that you can use when you're attempting to debug things. When you look at Ruby source, you're going to see a couple of values that are repeated over and over again. One is ID, and an ID is essentially just a symbol. Then value, which is essentially everything else. Ruby is dynamically typed and C is not. So Ruby sort of fakes out C by calling everything a value. Then there are a couple of methods, good methods to know. RB ID to name, this actually will take an ID and it will dump it out as a C string. It's important that you have a C string because we're going to be in a second using GDB. And GDB only knows about C strings. It can't print the Ruby string, but it can print the C string. So RB ID to name turns an ID into a C string so you can print it out in GDB. Likewise, RB string value Cster is essentially like two string, but it's going to, as the name implies, output a C string so that you can view that in GDB. And finally, as we're going to be looking at some back traces, VM call method is an important one to pay attention to because this is how methods get called in Ruby. Okay, and finally, make sure you bring your gardener because what's an adventure without your gardener. And in this case, that's mini Ruby. So if you build Ruby and pay attention to the build log, you'll notice the first thing that happens when you build Ruby is that you actually build mini Ruby. Mini Ruby is sort of a bootstrap, although it's not exactly what you would consider a traditional bootstrap. It's actually a very capable Ruby executable just without a lot of the extensions and standard library parts. So it's smaller. It still has the Lexar parser interpreter, VM runtime, all of the core library or core classes. So long as your bug is in one of those core library classes, you actually don't need to run Ruby to debug. You can run mini Ruby. And this is convenient because mini Ruby builds a heck of a lot quicker than Ruby does. And if you're going to be putting in print dev statements and all the rest of that, it's nice to be able to rebuild quickly. Okay, so we're ready. Let's set off. The first weapon that you need to get proficient with if you're going to be debugging anything in C-Land is GDB. And the way that this works is you simply give GDB the executable to run, which in this case is going to be mini Ruby. What will happen is GDB will start up and then it'll stop and it'll wait. And that's so that you can do any sort of break point setting that you need to do before you begin running the actual program environment variables. We'll see all of this in a second. Then the arguments that you would normally pass to mini Ruby, right? So if you're going to have a script that exhibits the bug, normally you would do mini Ruby and then pass the name of the script on the command line. Well, because we're inside of GDB, instead of passing it on the command line, you actually pass it as an argument to the run command in GDB and that'll pass it through as an argument to mini Ruby. And then in this case, because we had a crash, we wait for it to crash. So here's what that looks like. Okay, so we're starting up GDB on mini Ruby. It's going to give you some introductory information, copyright notices, you know, this is GDB as compiled by blah, blah, blah. None of that really matters. And then for a first go, let's just run our program. Now I have this tradition, I like to name my bug scripts bug.rb, so I don't have to remember the name, I just always do a run bug.rb. And so that's now going to tell us it's going to start the mini Ruby program executing with the argument bug.rb. It's loading all of our libraries, shared symbols, and there's our crash. So we crash in tiny free list, remove pointer.  All right, well, the backtrace command, or BT for short, will show us the stack trace at the location of the crash. And in this case, this is actually much longer. So like I said, I tried to fit as much as I could onto these slides without making it crazy, so the output is actually way longer if you do this on your own. But if we look backwards through our stack frames, a little bit back, back, back, eventually we'll see there is a VM call method. And if you've looked at the call signature for VM call method, you're going to see that, one of the arguments that it takes is recv, which is the target of the call. And so, gee, wouldn't it be nice if we could figure out what object we were actually calling a method on, right? This is just trying to figure out which direction we're going, right? What happened at the point of the crash? So we use our RB string value cster with the memory address of the receiver and crash. We got a crash inside of our crash. So this time, Ruby is telling us that we can't do object allocation during garbage collection. What? Well, go back to the back trace that we had before and you'll notice between the method that actually triggered the crash and the VM call method, at some point we were triggering a GC lazy sweep. All right, so this crash is actually happening inside of the GC routines. And if you study some of Ruby's internals, you'll know that once you're inside of the GC routines, there's not a lot that you can get away with, right? So you could get around this, you know, the RB string value cster method actually goes in and looks at the structures and figures out what the name is based on values stored in different structures and pointers and you could trace that down on your own, but you know, and I did, but it didn't really actually tell me anything. All right, so let's go back to the message that we got. In our terminal, the first time that we saw the crash, it said, incorrect check sum for freed object, object was probably modified after being freed, set a break point in malloc error break to debug. Now this is something that OS 10 does. Malloc error break is a method that doesn't do anything. It simply exists as a method for you to set a break point on if you're attempting to debug something that is error in malloc, right? So let's go back to GDB, start it up again. This time before we run the program, let's set the break point. Now you notice GDB does this weird thing, it tells us you're breaking on some method, I don't know what this is, right? That's because the libraries haven't been loaded yet. So it says, should I wait and see if this method shows up and you say, yeah, okay, go ahead. And then you run the program, right? And then it says, oh yeah, there's malloc error break. Okay, so the break point is set. And then we're gonna run, run, run, and crash in the exact same place. So setting that break point didn't exactly help anything. Hmm, okay, enough with GDB. Time to turn to some more advanced weaponry. So if you go into the OS 10 man page for malloc, you'll find that there are a whole collection of really interesting environment variables that you can set that modify the way that malloc works. One of those is called malloc stack logging no compact. All right, it's fun to say. What happens when you set malloc stack logging no compact is that every time there is an allocation or a free of memory, right? So every time memory is allocated or freed, the system is going to look at the stack at the point that free or allocation happened and record it to disk. And then there's a tool that you can use malloc history. You can go in and you can retrieve those stack traces, right? And this is the history for that memory address for the entire runtime of the program. Now first thing we're gonna need to do before we set off on GDB again, and actually probably could have done this a little bit sooner, is go back to that configure make step and make sure that we are making with our optimizations set to zero and our debugging symbols included so that we can actually see all of the memory addresses. Because if you go back and look at those back traces before you'll see a number of them it said inlined or value not available because of optimizations and stuff like that. So recompiling and optimization level zero will allow us to see all of the memory addresses that we need to see. Okay, so start up GDB again, before the program runs, set the environment variable. Malloc stack logging no compact equals true, right? And in GDB it's confusingly set environment instead of set end because whatever. Run and you'll notice as soon as we start running we start getting some logging messages.  And this is why it's so important to have a reduced test case because as soon as we get into these debugging tools they stress the system pretty significantly. Okay, so we let it run and pay attention to the process ID that it reports to us for what we're running because we're gonna need that when we go to use Malloc history and there's our crash again, same crash as always. Okay, so now when we look at the back trace we're gonna go and these methods appear because we're optimization level zero now, right? Before the Ruby X free and VMX free were all inlined so we didn't see them. So we can actually see the pointer that Ruby is attempting to free when this crashes. And so now we can take that pointer, we can take the process ID from the screen before, we can go Malloc history, process ID, memory address and bam, we get this whole, and I mean by the way this is like 20, 30 pages of this, I just showed the very end of it, right? Every time this memory address was either allocated or freed anywhere in the Ruby running process it records the stack, right? And it reports the stack with pipes. So you can see that this is the last time that it was allocated and freed. You can see the last time that it was allocated and freed it was a start main Ruby run node, all the rest of that, that, that. And actually if you look the free one actually matches the back trace that we got for our crash, because this is our crash, right? We're crashing as we're freeing this block. Now what you can do is you can go back, so at some point there was a problem with an allocation or a free, right? The bug that told us that somebody was touching our memory inappropriately, right? Probably after it was freed. So we can look through this log and we can look for things like, for example, you can make sure that every allocation and free is matched up, right? So there are different things that Ruby allocates and frees. There are procs and blocks and all the rest of that, right? So you can see here the last allocation was a proc new that allocated it and then a proc free that freed it, right? So this matches up, and actually if you go back through the history, it matches up the whole way back. Hmm, that didn't actually tell us much of anything. Kinda cool to look at, but we need something else. We need gmalloc. And you can read the man page for gmalloc, I suggest you do, it's actually kind of entertaining. But I think the first line summary is enough to give you an idea. Says guard malloc is an aggressive debugging malloc library. Let's see how it looks. Okay, so this is your memory. You've got pages and normally what malloc is gonna do is it's gonna give you a little bit of memory from a page and another page and then it's gonna go to the next page. So it's allocating your memory and when you free, it's gonna mark something as freed and then it's gonna allocate some more and then maybe you come along and you want another pointer and it's got its free list of pointers that have been freed so it recycles that memory and gives it back to you, right? This is how malloc normally works. This is how your system runs every day. gmalloc does something interesting. When gmalloc allocates memory, it allocates it on the edge of a page boundary and then it marks the next page as unusable. So what this does is for example, if you were working in C and you allocated enough space to have say an array of 10 inch and then you went and attempted to access the 11th member of the array, right? That's a bug. But normally C will not complain. It'll just give you whatever is at that memory address, right? C doesn't care. So what gmalloc does is to catch those kinds of bugs. It ensures that you cannot access the memory after the end of the memory that you've allocated, right? So the next allocation is gonna happen on the next page boundary and then the next page after that is going to be marked off. Do you see how quickly we're using up memory? Again, this is why it's so important to have a reduced test case. gmalloc really stresses the system. And on top of that, the other thing that gmalloc does that's particularly important for our case is that when you free memory, it doesn't return it to the system. It marks that page as unusable as well. So if you attempt to use memory after you freed it, you will crash. So the whole point of gmalloc and the man page explains this, right? Is your program should crash? It should crash immediately where the bug occurs, right? The reason that we are having such a hard time finding this bug is because somebody allocated memory, somebody freed memory, somebody touched the memory inappropriately, then somebody else allocated the memory, somebody else freed the memory and that's where the crash happened, right? The crash happened all the way over here, but the bug was somewhere in the past. So gmalloc should help us catch that. So here's what we do. We start up GDB again. We have to set our malloc stack logging no compact. We wanna know what happens on all these allocations. We set this dial D insert libraries environment variable, which on OS 10 tells the dynamic loader use this library, not the one you would normally use. We tell it to use libgmalloc and then we run.  And now when we crash, it's a completely different crash. This is something. This looks like it could be the location of our bug. We're setting a mark on this ME, which stands for method entry on CFP, which is the not current frame pointer. That's corrected me yesterday, but I forget. Anyway, so we can print out what is CFP ME and there's the memory address. Okay, so we have a memory address that's been inappropriately touched. We have a process ID, which we recorded before. So now we go in, we do malloc history, we give the process ID, we give the memory location and it tells us the last time that it was freed, right? So somebody freed this memory before they should have because somebody else is attempting to mark it. The GC mark phase is attempting to mark this memory is still in use, but it's already been freed. Who was it? Turns out it's that guy. Free method entry I. Now if you go and you look at the source for free method entry I, it turns out it's one line. Should have been three lines because it didn't check to see whether or not the method entry that it was freeing was already marked. So all you have to do is add that guard so that we don't free method entries that have already been marked by the GC and the bug goes away. And that's it. Got a little bit of time for questions, so thanks. Yes. How did I, well because I actually spent a good 48 hours straight looking at almost every method in the stack and trying to figure out who's marking the method entry and when are they marking it and when are they freeing it and tracing through all of the methods. So no, I mean, it's a fun adventure. If I told the whole story, we'd be here till nightfall. So yeah, I kind of shortcutted that but took a little bit of our, what's that? Did you get blinded to find out who? Yeah, the same person that fixed it is the one who broke it, so yeah. If we were statistic enough to want to reproduce this, did the blog post everything you mentioned before with the Ruby version and all that? Well, that blog post isn't up yet. I'll actually be posting my slides. Yeah, I forgot to mention. I'll post my slides so that, because I know the text is kind of small, so you can go through it at a more leisurely pace. Turns out as far as Ruby version, you can actually run the most recent 193 because it didn't get back ported to the most recent patch level. So it's only fixed in Ruby 2.0. Whoops. Any other questions? Well, thank you for entertaining my little adventure story and hope you enjoyed.


If your friends are a one-way system where they're constantly taking out and they're never investing in, it is not a friendship that you want. The people in your life that are your friends are only with you because of what they can get out of you.


I don't understand what the hold-up be like. Hey y'all, welcome back to my channel. Today's video is gonna be the start of a vlog. Not really sure what's gonna be in this, but today is Friday, January 5th, 10, 14 in the morning. As you guys can see, it's snowing. Usually in Arkansas kinda always snow around this time or either late January or early February. I know it always snow. Most times around my nephew's birthday, my nephew's birthday is January 9th. So I remember it, I always remember it, remember it snowing like on his actual birthday. So yeah, it's snowing. I gotta go get a money order for my rent. Yeah. It's Dubai today. They told me that I have to pay through money orders now. So that's what I'm gonna be going to get and the snow is really coming down. I'll show y'all once I get to, I'm gonna go to Walmart. I like to get money orders from Kroger, but I don't really wanna draw too much in the snow. So I'm gonna actually go to Walmart because it's a little bit closer. And yeah, if you're new here, hey girl, my name's Akira Jenae. Don't forget to subscribe and join the family before you leave. I'm hungry too. So I gotta come back and cook some breakfast. I wanted to go to some stores today like home goods or whatever, but I don't really wanna get out in the snow. As well as I have a online pickup for my hair. So I have online, I have online pickup and I gotta meet her at the mall, but I don't gotta do that until one o'clock. And it's supposed to be raining as well after it get done snowing. So we gonna see if I still gotta do that or not. I'm trying to let my car warm up or whatever. So I'm trying to let my car warm up. Right now before I go, I'm about to go ahead and wipe this snow off. The back window is good. Yeah, I'm gonna show y'all when we get to Walmart though. Cause it's cute. Obviously I don't wanna show where I live. And yeah, my mama said that the police officer at her job told her that he don't think it's gonna stick which I don't either because for the next few days, it don't even say snow on there. Like it just say rain today and that's really it. When the sun come out, it's gonna be gone but today the sun not out or nothing. So I'm about to go ahead and head to Wally World. I don't actually got y'all on my mouth. So I'm just gonna talk to y'all when I get there. But the only other thing I have to do today is go for a, I gotta meet this girl for her here. And then, like I said, I wanted to go to some stores but I don't know, we'll see how today go. And then tomorrow I have a double date to go on me and Bay and then one of his best friends and then his girl. So yeah, that's what we're gonna do. The snow was like really coming down, girl. So I'll talk to y'all when I get to Wally World. All right, so much nothing today. I'm gonna record when I get home. But girl, the Walmart that I went to ran out of money orders was standing there for at least 30 minutes. So go to the other Walmart, the one I hate. Come here. I got here, I looked at my watch at 11.28. I was here for a little bit longer than that but it's 11.56 right now. Like, if you know what you're gonna get, have your stuff ready. Like I literally got up there and the freaking, obviously I'm getting a money order, right? So I have my license ready and my card or cash ready. Get up there, put the license on there, tell her what I need, she do everything. I don't understand what the hold up be. Like if you know what you're going in there for, why are you like, I just don't get it. Like I just don't understand why people just don't be prepared for stuff. Like you're literally sitting here for 20 plus minutes and you get to the front and you don't even got your stuff together. Like being one lady searching for stuff on the phone. I'm like, why not have all of this ready? Like I just really don't understand. So it's 11.55, I'm about to go back home, pay my rent and then I gotta pick up this girl here. I'm gonna text her and see, well I don't even got her number, I have her email. So I'm gonna email her and see if she's still wanting to meet up at one. It's snowing, it's raining now but it's like slushy and ice and stuff. So I don't know, I kind of already slid a little bit. So I'm gonna see how it is when I get home and email her. I wish if you order here, like leave your number especially if it's like pickup because that is how I obviously communicate with you. Phone numbers is a lot easier than freaking emailing but I'm gonna email her and see what's going on.  I don't know where my snow scraper is at. Like I'm about to tell her that I'm gonna have to meet her tomorrow because this is just not working. Like my day is horrible and when my day is going bad that means I need to go ahead and just go home and stay at the house for Jesus. Let me go ahead and email her because I'm not about to go through this today. Like I literally cannot. This is just too freaking much. And then I've been out since like 9.30, 10 o'clock. Like, well I got a little bit after 9.30. I'm just, I just cannot. Y'all know in these vlogs when something ain't going good, when stuff keep happening during the, I can't even talk. When stuff keep happening, that just mean go home. And I tell y'all my feet are freezing. Feet just wet. Like, and I use, sometimes I wear socks under my uggs. What were my uggs? Girl, feet cold is all I get out. So I'm about to switch over to my rain boots. Because girl, my feet are freezing. Got some rain boots right here. All right, since we're not able to go to the stores that I wanted to go to today cause it was snowing and raining and I just don't feel like getting out again today. It is 3.20. I was going to sit down and like do my hair and my makeup all of that and like record a, like stand alone. She in clothing haul, but I really don't even feel like doing all of that right now, especially because I'll be doing my makeup tomorrow for when I go to, what, dinner tomorrow. So we're just going to do a really, really, hold up my, the brightness. I'm going to go ahead and do like a little sheen haul because I do want to put all of these clothes up in my closet and just keeping them to the side, waiting to do like a haul is just really annoying me right now. So we're going to do a little haul. I bought all of this up for my own money. That's why I'm like, don't really care to do a stand alone video. If this was sent to me, which I do got some stuff coming that's going to be sent to me. I usually do like a single, like sheen haul video, but since I bought all of this, I don't care. And I want to show you what I got. So I got clothing items and I also got household items. So I'm going to show the clothes first and then we're going to do the household items. As always, y'all know I do time stamps in my vlog. So if you don't want to see this, give it here or skip to what you want to see. But I got a 10 pack of sheen underwear. No, is this 10 or is this 12? I can't remember how much I, I think it's 12. One, two, three, four, five, six, seven, eight, nine, 10. Yeah, so I got 12 pair. These are just like the ones that's at pink Victoria's Secret. People usually call these like the tissue. I know somebody would call these like the tissue paper underwear. So like they're like the really thin ones. But I really like these because you can wear these under a lot of different clothing pieces. So you don't like, if you don't want to show your panty line, I really like these because they are super thin. Everything that I'm talking about will be linked down below in my LTK. The only thing that I don't really care for is this right here. Like the way it feels, it feels a little different from like regular standard underwear. Like hopefully after I watched these they don't really be like too big of a difference but it definitely like, it doesn't feel like normal underwear that you would like buy in the store somewhere. So that's kind of what I'm looking for. But other than that, I mean a pack of 12 and these were like, these are so cheap because you know, the Victoria's Secret, whatever, they do like seven for 35, which ain't no sale. So these were extremely cheaper than that and you get 12. So I like that. Super cute. And I'm ready to wash these and actually wear these. So that's why I'm like, I'm about to just go ahead and do a haul for y'all. Yeah, because you've been sleeping on me all day. So you're wearing down my battery on FaceTime. So I hung up on your button. They ran. Y'all gotta hear this. Hello. He was sleeping on me y'all. Didn't even know I was at Walmart. Y'all know that whole rant I told y'all about. Went to Walmart. The one on Bowman ran out of money orders. I was sitting there for 20, 25 minutes. Didn't have to go. I had to go to the one on Bowman and it was so long. The girl who left the other one went anyways.  Didn't get the money order. And it is, yes. So I've been at Walmart and you've been sleeping that whole time. Since 10, 30, 11 o'clock. Yeah. So I hung up on you because you was running down my battery and it's light outside. He just woke up talking about some easy things. It's 2.30 at night. You're on the charger because you ran down my battery because you was sleeping on FaceTime all morning with me. The next thing that I want to show y'all, obviously I'm not gonna be able to wear this right now because maybe it's cold outside. But it's short in the back and it's like, he didn't just got on the camera. It's short in the back and it's a skirt in the front. This is gonna be so stinking cute. And then you can, you can't like take it off but you can like undo it for whatever reason if you wanna do it. But obviously I'm gonna keep it like this. So I can't wait to match a fit with this. Probably when it's like going into spring, I feel like I could wear this with like some boots. So depending on where you, I mean, depending on the day here, I could wear this with some boots or whatever, but yeah. No, sir, we're not about to do that. So yeah, up, get down. Cause I wanna hear that toy. So these are super cute. I haven't tried none of this stuff on yet. So I hope all of this stuff fit. I got this in a size small, but they said it's stretchy and I can feel the stretch. And I mean, I don't really have thighs. My butt just pokes out. So I feel like I'll be okay. The comments was talking about the thigh area and I don't have like a lot of hips. So I think we're gonna be good on that. The next thing that I got, I got this in a size medium. I have bought this stuff with their Black Friday sale or Bella sale or whatever. They still got half of all this stuff on sale right now, even though it's the new year. This is a size medium. I thought this would be super cute. Trying to get more into more colors as well. It just say futurism and it's a long sleeve. So I could definitely wear this now. I think I would pair this with some sneakers. I feel like you can dress this up or dress this down, but it got a little bit of the back out. I think this will be so cute. I can't wait to try this on. Next thing I got is this super cute long dress. This is in a size small because they said it stretches a lot. I'll probably pop a picture up as well, but I have another dress that's like this. It was brown and white and it's the same type of thick fabric material. And I really like this. So I'm glad I picked this one up. I love when she in make dresses out of this thicker material because it really does keep you warm. I wore it, not last year. Two years ago when I was in, when me and Bay was in Dallas, we would, I wore it down there. So yeah, I'm super excited about this one. This one's so cute. Definitely gonna wear that for a date night. The other thing I got is this white dress that Bay wanted to make fun of talking about something like, I'm getting baptized still or my little baptized. Gail and I had on when I got baptized, but she's cute. This dress has been going, not viral, but I've been seeing a lot of people in it. It comes in all different kinds of colors, white, black, green, pink, yellow, everything. I got the white because I feel like it's easier, either white or black, but I wanted white specifically because it's easier just to throw different colors with this and make it look really nice. So I have some new green heels and green purts and I was thinking of adding green to this. So it's super cute. Obviously it looks better when you put it on because right now it kind of just looks like, what the f? But it's super cute, I promise. And they also had that on Amazon and other websites, but Amazon was charging $35. And I think I got that for like 10. So this next little set. Oh, actually, I may wear this tomorrow. This next little set I got in the size of medium. It's just a cute little like lounge and home set. I will not be showing this on camera because this is like really intimate.  So I'll probably pop a picture up of the girl actually wearing it and just let that be that. So I plan to wear this like, you know, obviously right at the shower, we're just chilling at home with me and my man. Next thing I wanted to show is this cute little top. I got it in the size of medium. I thought this would be really cute for the summer. This was on sale for maybe like $3 or $4. Girl, like all of this stuff is really cheap. So I wanted it because of the colors. Like I feel like I can really match a lot of stuff with this. Next thing I wanted to show is this cute little sweater. I got this in a size, Prince is literally on the ground on his back, waiting for me to rub them. Get down. I don't know. I got this in some size, either small or medium so it can be oversized. But I think this sweater is so cute. I'm definitely gonna wear this before winter leaves, but I kind of want to have curly hair in my head when I wear this. I just think it'd be a real, real cute vibe. So I'm thinking since this is a little oversized, I wanted those like mom jeans. Like I have a vision for this. So I really like this. I'm pretty sure it don't matter if it's too big. Like I kind of wanted the oversized look. So I'm pretty sure that I fit really nicely. This one I got in the size of medium.  I probably should got it in the size large because this is the one that you kind of top up. And obviously my boobs are not small. So I hope this one fits really well. I'll probably try this on tomorrow. The other item I wanted to show is this cute dress that's been going. I feel like this is going viral. I got it in the size small. I feel like a lot of people sell this like Amazon She-In, the clothing store that I have actually worked with called Mycus. They actually sell this dress but I found it on She-In for really cheap. Mycus they're charging like 30, 40 something dollars. And on She-In like none of my stuff was over $20. So I mean, it's affordable. This is real, this is like really soft and knitted. So I may try to hurry up and try to wear this before winter ends where I'm at. It's just a button down long sleep dress, long sleep collar knitted dress. Feels amazing. I can't wait to try this on. I got a small, but honestly looking at this, I definitely could have probably gotten an extra small because the stretch is insane. It's literally knitted. So, you know, you can stretch yarn basically. Other thing I got, this one, a lot of people use this for a swimsuit cover up. This kind of one viral as well last year, but it's that cute little backless see-through type of romper. The girlies, depending on what color you get, the black one, you will wear a black bra and black underwear under it. Or some people wear black spanks or something like that. So you can use it as a swimsuit cover up or just like a going out dress.  So I think that'd be really cute. Can't wait to try that on. They said it had some stretch to it, but then some people said it didn't have stretch to it like around the thighs, but obviously my thighs aren't the biggest thing on me. So I feel like I'll be okay. I got a size small. And looking through the reviews like, you know how girls be trying to fit into two sizes that's too small for them? Yeah, it was a lot of them in the reviews and it was in a small. So I'm pretty sure I could fit in a small. Last thing I got is a three pack of medium size leggings. It's cold. When I go to the gym, I don't wanna wear shorts. I wanna wear leggings. And this is a three pack, really affordable. One of my favorite fitness girlies on TikTok. She actually uses these and she recommended them. So I've been having them in my cart for over like four or five months, honestly. So since they went on an even bigger sale during the Black Friday and December sale and all of that, I decided to go ahead and get them. Their size medium, but they do have a lot of stretch. Obviously they look really tiny, but they have a ton of stretch. I wanted the show is this. I probably popped in some overlays and stuff, but this is just a little book stand. You can do it whichever way you want. It's literally all the same. So I wanted to display either a cookbook on here or another book to put on my shelf. So this was like less than $5. Super cute. And you just take it apart like that. So yeah, all that was cute. I thought it was gonna be like acrylic clear, but it's not, it's like a cloudy clear if that matters to you. So I got is this LED video light. I've been seeing this go every single time I scroll around on TikTok. Somebody is posting a freaking light. This was $4 or $5 on Sheehan. I'm like, I'm a content creator and I still ain't got one of these lights. Like girl, you should have one of these lights. So I think it's really nice. I already kind of tested it out. It got three different settings. And I mean, it's a fraction of the price for what you would pay on Amazon and on TikTok shops. So got one of those finally. Got some cute glasses. I have an idea for this. How cute are these? They feel a little weird like right here, but they're cute, they're giving. I definitely have an outfit in mind. I love the stars right here. I got a silver purse coming, I believe. So these are definitely a 10 out of 10. My only thing is y'all know I wear glasses. I cannot wear contacts. So when I put these on, this is gonna be strictly for picture purposes only because maybe I can't see. The next thing I got is a two pack of earrings. These are like $2 like together, not even a piece. And how sneak and cute are these? I cannot wait to wear these. I'm trying to get into my grown woman stud area era. I should say not area. And I think these are gonna do just that. Like, obviously I don't care about these ones right here, but these on the, ooh, girl. These on the bottom, giving, okay? Giving. This is a cute little bitty mini $1,000 savings challenge. This was on she and his will. This was probably like $2 or $3. So basically it shows you how much to put in here in each little envelope to save $1,000. So you'll put in 50, 75, 75, 75, 80, 80, 85, and so on, obviously. And then it's a little bitty envelope for each number. And I feel like I could fill this up fairly quickly to break it down like this. Once I do fill this up, I'm gonna start it over. I kinda wanna use this for either my birthday or Christmas. So once I do fill it up with $1,000, I'm gonna go back at it again and fill up 50, 75, 75 in the envelopes. And honestly, just trying to do it as much as I can. And I'll probably use this for, like to splurge on myself for my birthday or I'll just use it for Christmas presents. So I don't have to like spend any of the money around Christmas on my birthday. So I thought this was cute, little saving challenge. You can keep this, I mean, in your purse at home. I'll probably keep it at home so I don't be tempted to use this money if I do take it around with me or get lost or stolen. So I thought that was a cute little find on she and. The items that I have that are home decor pieces. Oh, girl. This that just failed, how cute is this cup? Like I thought this was hilarious, but so pretty cute. So I'll probably be using this in one of my like little like Sunday recess to pour my little juice or wine or something, super cute. And then the other thing that I got is this tissue holder. I will say, this is for like a, I will put like the mini box of tissues in here because these are the big boxes and I kind of had to fold it in here. So yeah, really cute, but not too functional with my one. So you have to do the little mini square ones, but super cute. The thing that I got is this cool wine holder. It literally holds it up. Obviously me trying to hold it like this isn't working, but you will just put it on the table and it just holds your wine up like that. So it's actually on my bar right now. And I think it's super stinking cute. And I also have this, this was like to be funny. I already show bait is, but it's a cute little date night little game. So like if you and your partner can think of something to do, it comes with different dice and you literally just roll whatever. So it's like what to eat, what to do after that in a sexy time. And this is only like $2 or $3 really cheap, but I thought it was funny cute. And obviously like if you're bored, then you can just roll it in, you know, figure out something to do. Two more items to show you guys. I got my house shoes from Sheet Inn. I've been wearing these for like two weeks now. They're definitely comfortable, but I will say size up. I got like my exact size and it's like my feet are like right at the edge. So definitely size up, really comfortable though. Super cute. I got the smelly face that's pink. And yeah, I love them. I wear them all the time. This is the last item that I have to show y'all. Super cute. This conda been going viral a little bit. For those of you who want to have a fireplace, but it isn't really practical. And if you have kids or something that's scared they'll tip it over. This is like a humidifier. And it's so cute. It's just, yeah, like super cute. You can give the illusion of an actual fire and then you can change the light to blue or like that. And you can put some essential oils in here as well. So diffuser and humidifier. So you can add some stuff in there. And I think it'd be really nice. But yeah, that's my last thing that I got on Sheet Inn. I think it's really nice. This was $20 though. I think this was the highest costing item that I did get. But so it's a little bit lighter is $6.59. I just fed print. She just ate. And I'm actually about to. I just took out all of my Christmas decor, Christmas everything, Christmas. I took down everything last night. Didn't record anything because I kind of just wanted to hear you up and get it done. Like just get over with it. And I took out, changed out my decorations from outside and you know, so all the Christmas stuff is down. So this is what it's looking like right now. Okay, so this is what we got. I gotta put this back in my storage, both my Christmas trees back in the storage. These bags, I feel y'all is asking me about it. I get these from Ikea. They're like $0.99 or a dollar. Really, really good to store stuff if you got a garage, storage unit, anything like that. Even in your house, if you just got like an extra closet, you can use these for clothes. I use it for outdoor storage but they be putting clothes in them on the Ikea website. Anyways, all of this stuff has to go into my storage unit. It's along with this welcome sign. Yeah, so I took everything down. It looks really plain in here now. So I'm really excited to finish decorating my home. So the tree is gone. It looks definitely plain over here and it definitely looks plain over there now that I moved my mirror over here. I have some exciting videos coming up that I plan to do. I am going to be ordering a lot of stuff from Amazon. I'm in my pajamas as well. Well, pajamas shirt and sweatpants because I got to take this stuff out in the cold. It is 36 degrees. Anyways, I already have some stuff in my Amazon cart. I think I'm going to start with my living room with changing out my, not really changing out my decor but like adding stuff in for my decor items. So I have like five things in my Amazon cart. I'm going to be buying those slightly throughout this month. I said I won't go buy them in January but my cart isn't that full and I use my Fetch app. I got a $25 gift card for Amazon when I get a thousand more points. So I'm going to have that by, you know, in the next week there and there. Anyways, we're going to be working on my living room in the next upcoming videos and I'm super excited. But I'm about to put my dinner on right now. I'm going to cook the same what I call my famous meal. Y'all see me cook that a ton. So I'm not really going to be doing too much talking. Just going to show y'all a little bit of it and then we're going to be rearranging my bookshelf. I didn't show y'all me putting stuff on there but I kind of want y'all a pen. I rearranged it a few different ways. Right now I'm going to keep it with how it looks right now but I may switch it out and stuff like that. So yeah, we're going to go ahead and get to cooking and then while my food is cooking I'm going to take Prince outside to go potty and for about an hour and 40 minutes I'm about to go take him to go outside and do his business. It is 30, it's 36 degrees. I'm keeping my little nightgown shirt on but I got my gloves on and we're about to put on a hat because I know my ear is going to be cold girl in my head. So yeah, I'm going to keep, excuse me I'm going to keep my hair down simply because it's warmer that way. And I think I want to wear my big green jacket. This one may not keep me warm enough. This is my big green sherpa jacket. And this is really warm. So, and I can tell the wind is going out there because I've seen the trees sway back and forth. And when I get there walking Prince I want to come back and we're going to put up my stuff. Come take your harness off, come here.    Prince the shine, he'll do that though. Come here, come here, take your harness off, come here. He looking for his toy, it is right there. Camera's about to die. The last thing that I'm about to do is clean up my, so I was sitting down chilling but I got on TikTok just now and literally jumped into her live. I recently just started following her on literally everything, this is TikTok Live. Y'all been tagging me in the, I'm y'all favorite content creator or like favorite content creator of 2023 of Lottie I've been tagging me in that. And she was in one of the like pictures somebody had did a four by four layout. And I can't, I don't remember her name. Like I said, I just started watching her like two, three days ago and I like been binging her stuff. But yeah, I really like her too. So when y'all be posting that, like I'm your favorite content creator stuff and adding more people, it helps me discover more people as well. And I really like her content. So I'm watching her live right now. But anyways, she just showed her guest bathroom and basically she got two dogs. Now y'all know I used to have two dogs whatever I got Prince now. So her like guest bathroom, whatever it's like for her dogs, mostly like she got dog treats and stuff in there. Anyways, it just made me want to get up and reorganize print stuff right here. So his stuff is just thrown in here. And I really would like this just to be overstocked for like my candles, cleaning stuff, guest room stuff, all of that. So I think I want to put all of his stuff up here in this cabinet. Because honestly, I really only use this in these drawers. This is just random stuff thrown in here. So I think I'm going to organize print stuff to be in maybe this one so that I can actually see what's in there and then put this random stuff up here since I'm not even using this. So that didn't take long. I got his stuff up in here. It's pet wipes, treats, vitamins, treats. And then it's like stuff back there. Little pet little jar that was sent to me. Little pet cleaning brush, two brush and stuff in there. And then I put all the other random stuff up there. We'll go through that later. And then under here, it's free for me to actually use for some other stuff. I kept his other little being down there. That's all it takes like clothes and like extra leash harness and stuff like that. So everything else was organized though. That took like five minutes. She's still on TikTok Live. So I'm still watching her. Today is Saturday, January 6th. And it's right now. But anyways, this is all I have to record at night. It's 2.24 in the freaking afternoon. I'm just not getting up. I told Bay that I literally wanted to be up early this morning and like get all of my stuff done that I wanted to do by freaking 12 in the evening. It's 2.24. So I just did my skincare, put this on. So my little puffiness will go down because we do have a double date tonight. We're going back to this restaurant that I've been wanting to go to for like over a year now. It's called Pasta Grillis and Conway, if y'all local. And they just have the best bread. But I hope the food is good this time because something my best friend always say is like, when you go back to a place where the second time is never as good as the first. And I hope it's not the case. Like that bread was the best bread I've ever tasted. So I hope tonight our food is really good. I think we can go eat at five o'clock. And I mean, it's already 2.25. He's about 10 minutes away right now. I went to his friend's house. So that gave me enough time to get up and do my little morning routine. I'm about to feed Prince, take him out. I'm about to go ahead and shower so that I'm just all the way fresh when I get back in with him. I wanted to get up and like edit the first half of this video because this video has to go up tomorrow which is Sunday and then like tonight we're gonna eat at five and then we're gonna go back to his friend's house.  So tomorrow I am gonna get up and go to church in the morning. Babe is actually spending the night with me. So maybe, I don't know, he'll probably go with me because the thing is he plays at a church. So like my church is like 10 minutes away and it starts at nine o'clock. We get a 10 o'clock on a dot every Sunday. And he is, I think, start at 11. It may start at, it's either 10 or 11. I wanna say 11. So then he'll be able to like go. He always, he wanted to go to my church as well. And this is like my uncle's church. Like I haven't officially just became a member there. This is just the church I've been going to for about a year now on and off. So yeah, he said he wanted to come to this one with me and we'll see, he'll probably go with me in the morning. But anyways, I got lunch. I wanted to do laundry and start editing at the beginning of this video. That didn't happen. So right now I already told y'all what I'm about to do. I'll talk back with y'all when I actually get myself together and probably getting ready to go to dinner tonight. I don't know what I'm wearing because it's 43 degrees here. It snowed yesterday as y'all saw. So it's really cold now. And I don't know what my toe is not done. I can paint my toes white real quick, but like, I don't know. I may do like a casual, dressy type of thing. So I don't know. I don't know what I wanna wear. But I do know I need to get up and start doing something. I just braided my hair last night because yeah, I'm ready to take this sewing out. I'm gonna be doing another entrepreneur vlog coming up. I know some of y'all, I did just post on Instagram. I don't know if I found it a story. And I see that y'all really like the reset video, stuff like that. And I'm like, what other videos do y'all wanna see? So a lot of y'all has swiped up and commented. I didn't share anything because it's just for me. But yeah, some of y'all were like, like business advice, some more apartment stuff, cooking, cleaning, all of that jazz. So I'm like, okay, cool. Like I'm on the right track. But I do, I haven't did an entrepreneur vlog in girl since last year. Like I don't even know what the last video was. So I am looking to do another one of those. I am about to be trying. Anyways, we'll talk about that in that vlog, but I do have another entrepreneur vlog coming up. Like I'm about to start recording it here soon, maybe this week. So I'm excited about that. So yeah, I think that's all that I wanted to update y'all on about what's going on today. When I come back, oh, I wanted to show y'all this. How do y'all like this little setup right here? Like I was moving this stuff around probably five to 10 times. I think this is the setup that I like. This base is actually from my little entryway table over there. So now I gotta find something else to put over there because I'm thinking I'm liking it over here. Y'all saw when I bought this during my vlogmas stuff last year, super cute. This is from She-In. This is from Burlington, that haul that I did. Put that picture right here. This is one of those humidifier fireplace thingies. So it literally just blows the smoke up. So it looks like, you know, I think I showed y'all that. And then down here, those are from Burlington as well. I just put that A right there because I don't have anything else to put there. They had got me there from Amazon wish list sometime last year. And then I literally have no where else to put that. So I just really put that there. But how are y'all liking this? Do we like this or do we not? Imagine the smoke blowing up back there. I'm liking it for right now. I don't know. We'll see. But it just looks so plain over here now that I don't got that mirror over here. I do have something on Amazon that I wanna get for this wall right here. This is pretty much set in stone. I'll probably try to find some type of centerpiece but over here it's pretty much done. I just gotta get something for that wall. And then this will literally be so beautiful. I did put this little picture up right here because it was up over there and I didn't have anywhere else to put it. So that's just there. I do wanna buy some curtains. I have curtains, but the ones I have isn't like floor to ceiling. It's literally gonna start right up there and then just go down to about right here. So I want it to be floor to ceiling like the curtains are in my actual bedroom. It just makes the room look so much larger than what it really is. So yeah, the white curtains that I have I'm gonna probably put in my guest room and then I'm gonna get new curtains for here and I need a curtain right. The other thing, we're gonna be mounting this TV here soon. I'm gonna do it myself. I'm gonna do that little no drill TV mount thingy. So have confidence I'll be able to do it. I can hide my cords right there. This came with my apartment so I don't gotta worry about the little ugly. Even though the white piece is technically hiding the cords, I still honestly don't like that look either. Like I know depending on like apartments and stuff like that all apartments don't come with it. Like you can't literally help it. It does obviously look 10 times better than just the black cords hanging down. But I still don't even want that little white piece right there. So I am so thankful that this came with my apartment. So I don't have to have anything right here. Like if I wanted to put something right there I definitely can do that. So yeah, we have some home decor stuff coming up. I have some stuff planned for y'all. I know that's what y'all really love and I know that's what y'all been. You know, subscribe to me and stuff like that. So I'm gonna stop talking because I've been talking for a long time and I'm about to get myself ready and take this little boy out. So it's already 305 in the afternoon. So it's already 306 in the afternoon and we're supposed to eat at five. It takes us about 30 minutes to even get to the freaking restaurants. So I'm about to just go ahead and start getting ready now. I literally just woke up about an hour ago, but like I said, it's gonna take a little bit of time. So I'll be getting ready for like from 3 p.m. to 4 p.m. and then we'll probably leave out in like close to like 4 30. So I mean, I might as well just start getting ready now because yeah, I'm gonna do my makeup and stuff like that because I mean, I haven't had a date night with bae since our anniversary last year. So last December. And so yeah, we're gonna do a little double day thing whatever and plus, you know, I did say I wanna start dressing up more and you know, just when I'm more like wearing my clothes and stuff more.  Why not? And plus I also said that I might go ahead and do my little try on haul tonight when I get well, forgot we went to the house. So I'll probably be a little tipsy or saying but I'm just gonna go ahead and do my makeup because why not? Okay, I got all this makeup and I ain't using nothing. I like to do a few little dots. Y'all saw me do my makeup in my Christmas vlog. So I'm not gonna put too many clips in right here but I just wanted to say I do wanna try to start going out more but it's hard because like I have like five friends and I would definitely love to have more like friends low quality that's like females and stuff. And I know there's a lot of females here but I don't know. Just, I don't know. Females are just weird. Like it just gives weird energy sometimes and I just don't want any parts in the weirdness. So I just want real being with friendships and yeah, it's just hard to come by these days. So I'm gonna have fun and go with my man. Just my best friend freaking left me. I'm about to just go ahead and do my makeup and then I'll probably come back and we'll probably find an outfit to wear together because my makeup, I literally do the same little one, two every single time. I'm not a makeup grubby at all by any means. So yeah, a lot of y'all always be wanting me to do my makeup and stuff girl. I don't do nothing special at all. And I need some chapstick or something because baby, lips is chapped. Oh, I need to go get in the shower first. I'm glad I just thought about that. Yeah, let me go take a shower first. My face, I'm not doing too much. Y'all know I like a really simple makeup look, natural look. So I'm gonna go in first with my NYX, do we finish? Setting, spray up to 16 hours. So I'm gonna set the face and it is four o'clock. We're not eating until six o'clock now. He just freaking told me. So I have time to do my hair a little bit better like I want to. So I'm gonna go ahead and curl it but I'm gonna use my new T3 curler that I got for Christmas from my cousin Dinah. Shout out to you all. So I'm gonna set my face really fast. Let's get into the hair. So I'm about to unbox this. Y'all already saw me doing an unboxing in my Christmas video but we're just gonna go ahead and unbox it. I thought this was like some safe gloves but this is just the manual I believe it tells you how to use everything I might actually. So texture, fine, medium, or coarse color treatment, chemical treatment. Ooh baby, this is advanced. Rest in Hope. She fancy. Okay. In the icons, we'll first tap each icon to make a selection. So texture, we're gonna do coarse, color treatment, light on if color treated. Light off is not chemical treatment. Oh, that is so exciting. This thing is really advanced. I like this. Okay, so I'm gonna use a little bit of oil, favorite oil to use. All right, my battery's running low so I'm gonna go ahead and do one piece for y'all on camera. My hair is already kind of wavy since I braided it. This is gonna do a small to medium section. And I like that this part right here isn't burning hot because my other one that has that little area right there, it gets piping hot. So you're literally still able to touch this one. She's just gliding to like, yes, you know, like gliding. I do have the curling iron that's supposed to be a dupe and Ulta, but actually having this and comparing it, this one definitely glides a lot better. Like this one is definitely top tier. This is the one, I think I still have the box. This is the Kristen ESS. This is supposed to be like a dupe for the T3, which barrel size and stuff. Yeah, it's cute. But just how my hair just literally glided into this and it just, it's better obviously. And obviously this one doesn't have all the buttons and sounds and stuff. So I had to, baby. Maybe pin up my curls since we're not going into later, but it's fine. Oh, look at that, yes. Quality, baby, quality. So I am done with, I'm knowing my hair and I must say the T3, she eats down. Like my hair is curled so good, eats down.  I don't know how long. So the money, she's worth every penny. I'm just gonna say that, like worth every penny in this little piece though. I turned it off so she can get it together. Yep, there we go. Still hot, see, period. And then this side, this is my real hair right here. So real cute, real cute. I used to hot comb, lay it down flat. I'm not gonna brush anything out this side. Kind of feel already, cause I forgot to put hairspray. This side I put some hairspray, but not too much because I do like loose curls. So I don't really care if they fall. That's perfectly fine with me. What's the other? It's say it's 45 degrees right now. So I told y'all really wasn't feeling wearing no heels or nothing. So I probably wear some, cause my toes not painted. I can paint my toes cause we still got time, but I don't know if I'm gonna wear open toe shoes. I really don't feel like wearing heels or nothing. So I'm gonna try to do casual dress. I want to, you can come in. Keys in the up. So I'm thinking all black jumpsuit. I have a long sleeve one and a short sleeve. Long sleeve is right here. It's 45, but I think I want to put on a jacket. So I guess I don't want to do long sleeve. If I did long sleeve. You can have this one. If I did long sleeve, I was going to do this little vest over it like that. But I kind of want like a pick. So I don't know. I think I'm going to do a jacket. Cause I don't like a vest with short sleeve. I like a vest with long sleeve, you know? Yeah. So I want to do a jacket. What am I wearing this to? I wore this somewhere. I know I wore it. What am I wearing this to? Christmas, Christmas. Yeah. So I won't be taking any pictures today. Photogram since I just posted this jacket like a couple of weeks ago. But for dinner, I'm going to wear it. What I'm liking. Heard it. Okay. I think I'm going to change out my earrings as well. The cheeks are going to freeze in the way. What? The cheeks are going to freeze in the way. I'm not going to be outside. We're going to eat and then we're going to the house. These ones. And then we have these ones. This feel. So I'm going to wear some sneakers that has like brown in it as well. I might have to re-curl this. Cause that's going to drive me insane. Cause this side is curled really well and I did hairspray on that one. So I'm going to have to redo this side. What are we thinking? What are we thinking that? Is that giving? What should we do? These are like little hoops right here. I'm crazy. There's literally a smaller knot stud right here that I could have put in. But I think I'm going to go ahead and go with the little mini hoop. I think I'm liking that one. It's cute. And I haven't had hoop earrings in a minute. And it's so funny cause like thinking back to like high school and stuff when we used to like make fun of girls or yeah, like make, well, I really make fun of people. Like, you know, when people was made fun of for wearing small earrings or like, I would make fun of small earrings not people wearing them if that makes sense. Like if I see earrings, I would like, I want some loopy baby earrings.  And it's just like, obviously yes, getting older and getting more, you know, getting grown basically changes your outlook on things. And you know, that's just not the style anymore to have those big old hoops. So, yeah. It's this long, like cardigan thing from Fashion Nova. It came like in a three piece set. It's 43 degrees outside. You know, black people, we got to step outside to see how cold it really is. So I stepped outside and obviously the sun went down now. So it was like definitely cold, cold. So that little bit of jacket I feel like I may be cold. But I mean, like we're not stepping, like we're not gonna be outside that long. Just stick it into the place and you know, but still. So I'm thinking of just wearing this because what the kicker is, it's so freaking long that like I don't want it touching the ground. But I am about to put on some tennis shoes with this to make it kind of, you know, jersey casual. And I think that'll be fine. Let me show you the actual gear. But you like it? So literally it goes all the way down. I'm super short. So it's literally the back is kind of on the ground. But I am gonna have on some shoes. So that'll give me a little bit of height. But I think I'm gonna do this one. I may switch to a, well, I am probably gonna switch to a gold necklace because this is silver and we're just not doing that. So, but yeah, I'm gonna go ahead wear this and I'm done.