It's 11.15 and got a lot of stuff to cover. Everyone that's here is here for the Drupal 8 migrations overview. They're basically going to be covering how to migrate content into Drupal, what are the strategies to use, as well as how to go about doing it. My name is Fulman Joshry. I'm a developer at Colfert Labs. You can find me on drupal.org under the moniker SJP-79. You can also find me on the Drupal slide group under the same name. And I also have a bunch of content on GitHub that you can find under the same name as well. If you guys want to win a Google Home, just come see me afterward. I'll have some stickers and some other stuff. So I'll tell you exactly how you can go about doing that. All these, OK. So all the slides and everything are at that address. All the code is there. All the name of the product is there. This is a migration you did at Statscan for people who need it from there. We did a Drupal 7 Drupal 8 migration. So all the code that was there is really in the reference field. You should also check the Drupal slide group. There's a lot of good knowledge on there for reference. And the session video is going to be here. OK. So today's agenda is basically we're going to look at some migration basics. What exactly do you need to do to get started between migration? We're also going to be looking at the different types of migrations that you can perform. Then we're going to go into actually how you actually go about doing a migration. So that's going to be all the migration breakdown. Then we're going to do a live demo for Drupal 7 to Drupal 8 migration. And now, so let's get into it. We have a lot of things to cover. OK. So before you start doing a migration, you've got to figure out what do you want to move over. How are you going to get there? Where's your starting point? Where's your end point? There's no quick way to get there, unfortunately. There are some ways you can kind of get there, but there's no real quick way to get there. But you can actually build a plan that can get you there in a timely manner. And there's also no one way to get there. You have to get there through a combination of ways. So this is basically the migration over. Whenever you have a migration, you have a source, a destination. And things in the middle are basically null odds up into one place. So in this example, we're basically migrating to users. We have a user with all this information. They have a destination that's applied to, and really it looks more like a migrant map. Something that's making all this information together. So for example, you're moving from one house to another house. You need to know exactly where all the different components of that new house is. So you can move everything over to you as well. In Drupal 8, unlike Drupal 7, you often need to understand what exactly can you move. Because in Drupal 7, what you could do was only migrate content over. Oh, before I even start. How many of you actually had users migrate on Drupal 7? Have you guys had Drupal 8 migration? No? OK. Yeah, I should have asked that first. Anyways. So when your planning is up, you need to actually understand what can you actually migrate over. If you don't understand it, then basically you need to make a checklist of things that you actually want to move over. You want to move over all the same content types. Do you want to move over all the text on them? Do you want to move over all your kitchen appliances to any location? That sort of thing? So a lot of that stuff you can do. We don't actually have to recreate that on the other side. So if you didn't want to recreate all your content, then you should export all that as configuration from your previous Drupal 7 site. But this is the sort of, yeah. Anyways, let's go. OK. So then there's of course the types of migration. There's a lot of different ways to get to your destination. You need to actually have some sort of plan, some sort of way of doing it. So you can load everything up into a truck and hopefully get there. Maybe you'll stand in the way of all your Ricardo. So there's basically three major types. Actually there's a fourth one. I'll get into that. There's three major types. There's manual labor. You're basically copying and pasting content. You're basically going into your source, looking at what's there, going to your destination, creating what's there. So there's basically a lot of manual steps, a lot of copying and pasting. Then you have your Drupal to Drupal migrations, which are built into Drupal 8's migration model. Then you have custom Drupal migrations. Now, any time you're doing a migration, it's not only one thing or one of these types. It's a combination of these two types. So the manual migrations, these are very slow and cheap, because you're basically copying a case. But it does allow you a lot of control in regards to what you're actually doing. So because you can go into your source and see, oh, I got my content this way. Maybe I can turn this into a paragraph type or something. So I can maybe do something different on the other side. But of course, it's fine for moving a small set of data over, but it's not really great for moving a large chunk of data. Then of course, you have your Drupal to Drupal migrations. These are, this is the Drupal upgrade path that's already built into the migration module. And it's very easy or not, depending on what you're trying to do. Because if you're doing the Drupal to Drupal migration, it can only migrate over what Drupal 6 or Drupal 7 core can actually understand that they actually have. And it's just a group of models involved in that stuff. Well, guess what? They're not going to move over. So you're going to get a partial framework. You're going to have to go into each one of those files and try to figure out exactly what needs to be added and what doesn't. So it doesn't allow for a great deal of refactoring. But there is a middle ground. There is what's known as a partial Drupal to Drupal migration. I know this is a little bit of a problem. This is a question, man, that has conversion.  And what that does is it lets you move your framework of your site over without any of the content. So what that will let you do is basically you have your structure. Well, I want to just refactor a few things here and there. Then I'll start moving the content up. It gives you a lot more control. Of course, it's not like breaking a house in half, but yeah. Then you have your custom Drupal migration. It's completely customized. It's the way you want it. You migrate as what you need, when you need it. And it teaches you a great deal about how Drupal 8 works. Because you dive into the plugins. You dive into how entities work, how basically all the APIs work within Drupal as well. And it also teaches you why you should take Drupal 8. And also why you should appreciate Drupal 8. But you have to have a lot of time and patience for that. So now we're getting to the whole part of how we actually get our content to where it needs to go. You can use a manual way and just slingshot everything over. You hope everything lands where it needs to. Or we can try to understand how Drupal 8's migration stuff works. And the thing you need to learn right off the bat is migrations in Drupal 8 is general, which is far better than what was in Drupal 7. I can tell you that. It's all integration. And basically, if you are doing a migration, you can actually just do migration on the end of it. You don't have to write any piece you can. Which is really nice. And these are the modules you will need to actually just try there as well. You won't need the migratable thing, unless you're going to be doing the framework stuff. But it's there. Now the other thing in the migratable is that all the migrations are very structured. They need to be under the directory. They need to be under a certain folder. They need to be called something. So all of your migrations are going to be under the config install migration. They're going to be named by your plus sub migration. And then the name of the migration, it's going to not call my big plus sub migration. And then basically, Drupal is not going to recognize it. It's just going to be like, it's just next to the yellow box there that doesn't really belong to them. All your storage plugins, I'll get into the storage plugins a little bit, but they all go in there. Process plugins, destination plugins go in there. But this is basically, it's kind of hard to see. It needs to be bigger. It's kind of hard to see, but basically, at the top of the end, you're going to install that's where all the migrations go. And within your storage, you have basically all your source and destination plugins. So basically, the number you're bringing in is going to have a source plugin that's going to tell it, okay, this is the project I'm bringing over. I'm pausing it up. What format does it need to be in? So I'm going to do that for a second. You're going to have a process plugin that basically transforms that stuff into a useful stuff. Then you have your destination plugin. Most of the time, you don't have to implement the destination plugin. But if you need to, it's possible to do. Okay. So now we get into the actual migration YAML break. Because as you know, all migrations within Drupal 8 are YAML. This is the structure of it. At the top, you have an identifier that identifies what kind of migration this is. I know this is going to be a little bit boring because it's going to be going to a lot of code. So, well, yeah, configurations. Let's get through it, and then we'll get into the user. So, we're going to have the identifier. We're going to have a source, process, destination. These are the three types of plugins available for migrations. Then we have all the dependencies involved with each migration. Yes. So here's a sample YAML file. I didn't have enough room to say everything, so I can work it up to the side. But you get the idea. The blue section here at the top is basically the identifier. We're basically saying the ID, we're going to call it dn, dfcd, you know, article. Because this is an external content that we're bringing into Google.  And migration tags. So basically, if you want to tag and want to start together, this would be important in one group. If you move up, there's also migration group. You can also import based on group type, but in that case, it means that it shares a configuration that only a migration in that group will share. Dependency. Now, this is an important section. So basically, let's say you change the integration of your migration file and you want to be imported. If you don't have that and you uninstall the module, it will still retain that configuration. And when you try to import the re-enable module, it'll complain about that it already existed, can't really update it. It'll try to recreate it. But if you do that and you uninstall the module, it'll actually remove the configuration and then it'll be imported. Then push a label. Then of course, after that, the yellow part is the source plugin. I'm just gonna give you that. So then we have the source plugin. Now, this is the plugin that we're implementing in our cloud app module. Which is basically, migrating over a lot of articles from our D7 site into V8. Then we have what is called target. And this is our database connection that we're using to get our stuff. Then we have our process section where we have ICD or processing, where we're mapping, trying to do a title, where we're getting type, the default value of commitment. Which is wrong. Then we have a body value. We're assigning body value to body, body part back to this value. You can actually assign some property to a certain field, a certain value. Then we have an angle destination, which is very, actually, no. We're only defining the type of commitment which should be our goal. And we have a number of components that basically depend on the user migration. But, anyways. Okay, I think I got to all of these things. Yes. Yeah, this is just the same one again. Just in a better format that you can actually see. There's a bunch of processes happening. So, in this one, like the other one, there's a UID stuff happening, which is like upon one of the vibrations, you get that value. Yeah, and then we have destination dependencies. So, these are all the destination plugin examples that are given within Drupal Core. Except for, I think, entity reference to vision and entity group. Those are contrib modules. If you wanted to basically migrate into paragraph, you would use entity reference to vision paragraph. And if you migrate from O.G. into groups, basically you'll use that. Okay. So, these are all the different types of source plugins that you can use within migrate. You can embed data directly into your YAML file to import directly. You can also use a SQL source which we are going to be using for the demo. And you can use file base. So, you can have JSON file, CSVs, XMLs, et cetera. So, this is an example of basically a embedded data example. So, basically if you embed data into a YAML file, the plugin will be embedded data. You can pass in default language to enforce the current language to the English or whatever the default language of the site is. If this is going to be a translation to an existing migration, then you're going to say that this is translation is equal to true, which is just passing in a primary and judicial resource. Parts sequence, but basically this is a structure of a embedded data looks like the YAML. So, you have basically key care for everything. For the body, you basically use a pipe to signify that this is using more than one line. And let's just follow there. And of course everything is separate. Oh yeah, I should probably just use this. Everything is basically separate with a dash to indicate each individual role. For the SQL plugins, you have basically the plugin name, which is the plugin ID. You also have a source migration. The source migration is basically a BD connection. So, as you can see in the example, given this is your settings of HP file within your actual group of eight site, that you will have your default connection. Then after that you can define your source migration. You can actually call it anything you want. And just specify as your target, I use source migration. And it's just building a connection to the actual site. So, in this one, we're basically being a Postgres to MySQL migration because the source is a Postgres site. So, this is basically an example of a SQL source plugin. My highlight is that the file name and the class name you need to be saying, this is the object language practices that I make mistakes sometimes. And you need to specify the main space for your migrations. They all have to be Drupal module name, plugin, migrant source. I use a previous Drupal camp migration example for this. I just modified it for Drupal north, so that's why it's using Drupal camp migrations. And of course, whether you're trying any sort of plugin, you'll have this dot block, and you'll have to have this annotation. If you don't do that, it's not, you won't recognize what the Drupal is. Yes, it seems like this is a problem, but this is actually a problem. Yeah. And of course, you have your article milk, which extends people base, and you can have all the functionality involved with that. Then of course, you have your file base to source plugins. I'm not gonna cover them because they're not part of my great core, and I don't have enough time to do that. Okay, now let's get into the process plugin. Now, the process part of every yellow migration file is basically a key value carrier. But it also allows you to transform a lot of the stuff you map in as well. For example, these are all the process plugins that are in Drupal 8 to get you started. Most likely you won't need to implement any of these, implement your own custom one, but you can probably use these. But anyway, so this is basically an example of a key value carrier. You're basically mapping field title with the source field title, right? Or you're mapping field organization value to the organization name from the source. Or you're mapping the field URL with the URI property, the URL from the source. Or you can do something like this, which is basically you're passing in, you're saying the type is gonna be a default value, and then you're just explaining what the default value is. And same thing for the field URL. So basically you can assign some properties within fields, certain value, but you can also process what exactly those things are gonna be. Or you can do something like this, which is basically you're saying that this piece of content belongs to a user, but you've already migrated the user through another migration. So we can just pass in what the source UID is into that migration. It can tell us what the new UID is, and it can map it back to this content. So basically, if a critical user owned content on the source site, now they own the same piece of content on the destination site. This is an example that we need to talk about. And I'll leave it to them. Then we go into the destination plugins. The destination plugins are basically for entities that you create custom that aren't part of Drupal 8. And you need some sort of migration path to that. They basically have a mandatory plugin feed, which pretty much all destination plugins have. And they have an optional one where you can specify default bundle of type. This is an example of a destination plugin. And basically it's using the same name spacing except at the end it's using destination. It's implementing, it's using a bunch of, bunch of classes from different versions. And at the bottom it's using annotations to say that this is my custom node. You can't read that, but this is just basically how it's laid out. I'll show you that more in the demo. Okay, now we just dive into the code. And we're making good time. Okay, so here I moved off. Okay, so here we have a Drupal 7 site. And here we have a Drupal 8 site. We can't like, block off, thank you. Okay, so Drupal 7, Drupal 8. First thing is of course we need to ensure that, oh, I'll just show you how the Drupal 7 site is. This is a base Drupal 7 site. It's got any translation enabled. It's got English and French turned on. And we're basically using the default article energy type. I haven't really added anything to it. Oh, sorry, that's Drupal 8. So here's the Drupal 7 site. We have articles, we have, I do enable title modules, so that the title is translatable. And basically it's just using body tags and image. I use the develop generate module to generate a bunch of temporary data to basically use. So if you go under structure taxonomy and list all these, you get basically a set of taxonomy data that basically is in a certain format. It's subjectonomy terms underneath each one.  So I think I generate like 50 users just to have. And then we have content. I generate just two pieces of article content. You can add more. And basically what we're going to be doing is we're going to move users over first because they rely on their media to generate exactly who the owner of taxonomies are and who the owner of articles are. But we also need to move taxonomy over before article because there's a reference field on article. So basically it needs to know what terms it uses before it's actually there. So in order to do that, I'm just using a default Drupal 8 site as well. So basically all the same content types exist on Drupal 8. But I had to start doing migration. Oops, sorry, that's my alarm. That means I'm making a ton. Okay, let's see, it's not my fault. Yeah, okay. Here, it's hard to see, isn't it? Can you see that or should I make that bigger? Okay, so here I have a Drupal 8 module that basically does basically influence library by your class, by your tools. And all these are needed in order to basically have access to all those plugins. As well as access to all those source migration paths, as well as all the destination migration paths. You can also use migrate Drupal, which is the migrate Drupal upgrade path, but for today's example, we're not gonna do that. And then you have basically your layout. So as with any layout, you need a config install for all your migrations that you're gonna be doing. You're gonna have a source, plugin, migrate, source for all your source files. You can have a destination for all your destinations. So here's all the migrations that I wrote for this demo. One thing that I didn't cover in my slides is that you can create groups with shared configurations. So here's an example of a group I created a group called DNExternal, it's the same one I used from Montreal. So it basically says that all the migrations under this have this dependency, their source type external database and that they share a source key of legacy. Legacy is basically the database source that I've set up. I am, that's really hard to see. But anyways, I'm here defining my database connection as well as the legacy data detection to my D7 site. And so that's where that comes from. And so this group is basically going to be applied to all the migrations within here. So I set up my Texanian migration in this way where basically I set up my identifier, I set up my source as being Texanian term data which is right here, Texanian term data. There's my migrate source. It's basically being a SQL query to Texanian term data table on the D7 site. This cap grabbing all these fields. Then saying that I also, these are the actual fields that I'll be passing on as my source fields. And this is basically the key that I will be using. So you basically have to define your data source. And then you have to prepare a row. You're gonna basically say, okay, I kinda like cheated here a little bit because I didn't want to migrate all the categories over first, so I just said that if the VID is one, I just use tags because in Drupal 8, unlike Drupal 7, VIDs are now machine names for all the vocabulary. Then you, of course, you need your parent ID because some of the taxonomy are children of other taxonomy. So you need to capture all that information. And yeah, so I'm just setting that up as my source here. Yeah. Then of course I'm doing all my mappings. I'm setting TID equals to TID, VID equals to VID, name equals name, description value is equal to that. I'm setting the format to rich text. And I'm setting the weights. Then of course I'm doing the parent ID. Now parent ID requires two steps because there could be some taxonomy that don't have parents. So they have to be imported differently so that you don't want to sign and add ID to them. Whereas others, there could be taxonomy that do have parents. So in those cases, you want to basically tell migration that okay, I want to know what the TID of this taxonomy term is if it hasn't already been created yet. All right. So I would pass it in to the same migration to say that okay, here's a TID, have we imported this yet? And it will say yes, we have, here's the TID. Or it would say no, we have it. And it'll import it and then you'll get the TID. So that's kind of the recursion here. Then of course, we're basically, oh and yes. So parent ID doesn't actually map to anything on the destination site. It's just a variable that we've defined within our YAML file to hold the output of this process. Then on the destination site, we do have something called parent. We're basically gonna say parent is gonna be a default value of zero unless there's a source specified. Right, because so zero just means that this person doesn't have a parent and otherwise, we're gonna use this variable that we defined up here called parent ID and add that value there. And of course, we have our destination, take sign and turn and all the sources. Okay, so let me see if I actually did the, I'm using Dresch for pretty much everything. So Dresch is a really cool tool that lets you import items into Drupal. Basically have this form of Drupal. So I did term, take sign and turn migration first. I should have done user migration first. So let's go back and look at the code. Although, did I actually map it? No, I didn't. Okay, that works. So in order to run a migration, you can either use Dresch or you can use migration module menu within Drupal. Here, I declared my group as Drupal camp Montreal. And there's the unexpected error, that's interesting. What happened there? Subtune. Okay, interesting. Okay, I'm just gonna use Dresch for this example. Okay. So basically I'm gonna migrate in the textuality terms. I'm just making, here we can see that we have 10 textuality terms that need to be migrated over. There's 10 unprocessed, zero been imported. So Dresch MI, which is migrate import. Or you can actually write out migrate import. And then the name of the migration, d-i-e-x-t-d-z, taxonomy, oops, taxonomy, and term. Yes, you're right. Okay, and if you run that, you get this saying, oh, I processed 10, created 10, zero were updated, zero failed, zero ignored. And we can go over to our Drupal 8 site and go under structure, taxonomy, list terms. Here's all our terms with all their structure and everything. Pretty neat. And if you go on to our Drupal 7 site, go under structure, taxonomy to verify. We have all the same terms. The order is reversed because it brought in the first item's first and so forth. So there's a little bit sort order here. But all the, what do you call it, all the parents have the same kids and so forth. Okay, so let's do the user migration. The user migration is set up pretty much the same way. It's doing a lot of, let's see. Okay, yeah, so user migration is doing pretty much the same stuff. It's basically using the user import source plugin that I've defined using this target source migration. Yeah, and basically it's mapping all the fields, the part of me, and so forth, mapping back to the users. You know, it's also doing a fallback to site default for all the land codes, the truth, and falls for the land code. This is basically another parameter you can pass into a particular plugin if it defines it that you can be set back to the site default. Now I'm going to run the user migration, dreshmi, dmxt, db, user. Now this is going to work for this in a couple errors, which I couldn't resolve overnight, but there you go. So it created two, failed in two, because it's trying to import admin which already exists on the D8 site, and it was also trying to update admin which you couldn't do because of, yeah. So it failed twice, and basically created all the 50 items that are there. And we can see that if we go under people on the D8 site, here's all the admin and all the other users that are there. The reason that the create date is whatever is because the dual data used basically generates it for like old records, just fakes old data. Now of course, let's get into the article migration. Article migration is basically a node migration. It's basically called the UID from the user users. It's also going to, is this the article one? Well that's the translation of the articles, yeah. So this is the article migration. It's going to call UID, same thing. It's going to basically say that the language, line code is basically what it is in D8. It was language in Drupal 7. We're going to basically sign the language to line code. We're going to say that we want all the tags to then the tags field in Drupal 7. But because it could be a one too many value field, we're going to iterate over each one and process it individually. So we're going to pass it to the txoniterm migration and get back the TID. And at the end we're just going to map it back to entity node and we're also going to say that this migration depends on these two. Don't run this one, the last, those have already run. So let's run it. It's going to probably say, let's see. Oh yeah, node. There you go, it created two. So if we go into our site, here we have two records. Now if we switch over to friend side, it's just going to say welcome to Drupal because there's no French translations for those nodes. But if you look at the translation migration, the only things that the translation migration has been differently is that it's setting translations to truth within the source. It's also saying that get the node ID for this node from the source migration for this node. Basically, we've imported it already. We're going to grab the node that they created during that migration and assign it to the node in this one. We're also going to say that the language is going to be whatever the translation language is going to be. And at the end we're going to say that content translation source is going to be the default value of EN, which is the language coming from the source migration. And of course at the end there's the destination. We're going to say that this is basically adding a translation to a node that already exists. So that translations equals the truth there too. Okay, let's run that too. You guys see this? There you go. So it basically said I've created two translations for the content that's there. And if you go back to the site and switch over to French, we have the same content but in French. And you can see that it is a translation because we are in this node and we switch over to English. There's the English translation for the node. Okay, and if you go back, and let's say let's try adding another piece of content. Add content, call article. Hello, Drupal North. I can't spell right now. We can add a tag and save. And if you go back to our Drupal 8 migration status, you can see that since we added that one node, we have an additional article that's ready to be migrated over. And if you run migration now, it'll basically import just that one particular node that hasn't been done. But if you wanted to make changes to the existing stuff, you can also pass in a dash dash update and then we'll update the existing stuff too. So if we run this, we see that it created another one.  There's the hello, Drupal North 2017. Yeah, in D7 site. Oh, am I in D7 site? Okay. There you go. There's hello, Drupal North 2017. And if you switch over to our French translations, you'll see that there's no French translation, so you're only seeing the other two.  Sure, I know that. And we save it, that's weird. It didn't add it, that's weird, in English. I am using title field, that's weird. There you go. And if we do Drupal Trans, it shows that we import another one. And if we go back to our Drupal 8 site and refresh it, there you go. We have hello, Drupal North 2017, French. So there you go, Drupal Translations. Okay, let's start back in here and we are done, so any questions? Yes. Can we read this module extensively? If you, FID is inside the logic. Yes. What figure approach to that is it like a, I think it's a post-pro access for us that we have to work with, but. You can actually write a process plugin that I see read up, basically. You can write a process plugin to do that. There's also the UGID link module that's also being worked on. But what I've done in the past is I've just written a process plugin for the actual body that basically goes and parses to see if there's any file IDs and stuff like that. If it didn't, then it actually doesn't take the migration lookup for that file to see what the actual file ID is in Drupal 8 site and then just replaces that value. That's a post-pro sense. Yeah. You can do that on post-process too, but. Or you can actually do a separate migration to do that. I think that's probably the wiser way of going about it. To do it on post-process, yeah. Yes. Yeah, wait a minute, where is it going up here? Do you want it on? Do you update only one node? Yes. Yes and no. Yes, that basically use migrations to do that, but you can also run post-process operations other nodes related to it. So let's say you had a bunch of, what's content that relates to other content?  You can either have two migrations to do that or you can have like one and you can actually implement an event subscriber. Event subscribers are basically, if you're not familiar with each other, but in Drupal 7, there was like their prepare row, there was stuff to do after the migration runs. So all that stuff is now within something which is called event subscriber. It's a class you implement and basically after the migration happens, you get the formatted destination row back and you can use that to update existing nodes or existing content. To give you an example of that, I do have an example of that. So this is basically the open data migrations that we did for the government panel. In here we implement a migration subscriber. And in this, if you keep on going down, we have constructs, we have... So this is basically on migration post import. So after the import happens, execute this command. Right? So we're basically setting the home page to be something. We're also doing, on migration post rows save, we're saying there's some migration is this. We want to add votes to those migrations. So basically if you have a whole bunch of... We use the voting API and Drupal 7th side and we basically use flag on Drupal 8. And we want to basically import all the votes over and then we want to assign them to a particular node. So we import all the nodes and once the node is saved, we said, okay, are there any votes associated with that node, assign it to that node? So this gives you an example. All this code is on github.com.open-data.od. I'll go back to my slides and say you have all these links. But everything is pretty much there. Do you have any other questions or to answer your question or any questions? Okay, so make sure to come up here. If you want to win a Google home, I can give you some stickers. And also check out our booths. You can pick out one of these things. It's a snap bracelet. Now it's actually a wrist. It's really cool. And it's USB key too, so yeah, work with it. Okay, thank you.


to several stores with the intention of buying several necessities which we did buy in the end we did buy what we needed but along the way there came across some other purchases that I won't say weren't exactly planned because I did intend like there was no way I was gonna go to a store and I knew I was gonna find puzzles there but I knew I wasn't gonna walk out with you know nothing the most I figured was two maybe three at the most well that didn't happen on the drive back home I did have a slight case of buyers what do you call that buyers regret buyers remorse I think that's what it is and then I was thinking like oh man I bought too many but my husband said don't worry about it and I said okay fine here is my probably my biggest puzzle hole yet as you saw in the beginning there's quite a number of shopping bags it's heavy so yeah I picked up a bunch of puzzles at two separate stores we went to Hobby Lobby which I had said in my first video of my puzzle collection which is where I you can find a lot of puzzles there obviously puzzling is a hobby so you gonna find them there and they do have a very big selection but we'll get to Hobby Lobby in a second I went there first and then we hit up Walmart which is another good spot to get a lot of Disney puzzles or just puzzles in general not just Disney there was so much temptation I could have walked away from each store with more than what I actually bought but I talked about budgeting a lot but that didn't really happen on this shopping trip well no to be fair I picked up really good sales at Hobby Lobby which you know but we're gonna talk about Hobby Lobby first let's go through that haul first now I only got a total of three puzzles from Hobby Lobby and the reason why I only walked away from that store with three I could have very easily walked away with more was because I knew I was heading to Walmart afterwards so I had to leave myself open for the possibility of you're probably gonna get one puzzle there or two so I walked away from Hobby Lobby with three as I said I could have gotten a lot more because right now Hobby Lobby has all the holiday stuff out now all the holiday decorations and when I say holidays not only Halloween and fall but they got Thanksgiving and they have a ton of Christmas decorations and holiday anything and everything there and they had a huge and I mean like two really big displays of Christmas puzzles on these tables that were in the middle of the aisles and all around these tables there was that sign 50% off that blew my mind I was like oh my goodness there's so many puzzles on these tables there's so much to choose from what am I gonna do I'm looking and browsing through all of it and my daughter who's with me as well and my husband or you know we're all together they're like oh look at this one and I'm like I'm getting over stimulated what I did was in terms of the Christmas puzzles because at 50% off you got to take advantage of that so instead of buying one or two of like 1000 piece puzzles which they had they had 1000 they had 500 pieces there was tons of them different styles of course what caught my eye first was Thomas Kincaid you know I love me some Thomas Kincaid so I picked up one of the four jigsaw puzzle and one sets I love these puzzle sets it just gives you a nice variety and for great price especially this this was labeled at $29.99 original price at 50% off so this is the Thomas Kincaid winter Christmas collection this is a poor piece jigsaw puzzle set and this is by Chaco and we have four separate puzzle images here there's one called cobblestone sleigh ride we have village Christmas we have the night before Christmas and Christmas lighthouse so just letting you know right now be on the lookout come December or when the winter starts coming into full swing I'll be putting these videos out for this winter Christmas season which is amazingly just around the corner that's a little scary now that I think about it our next puzzle set that we got from Hobby Lobby now this again my this blew my mind I went down to the actual puzzle aisle where they have everything set up and I was surprised I did not really see many Disney puzzles there I think there was only like there was one that I already have that I had actually bought from there and then there was a Pixar one which I wasn't feeling at the moment so I looked around a bit more and all the different puzzles thinking maybe I can get something different and I found something that caught my eye and what was even better was that it had a reduced sticker price on it so originally this was 1799 and I got it for $4.49 which was a steal to me so this one is called Central Park Paradise this is a 1000 piece puzzle by Chaco and the design is beautiful on this now the reason mind you there was actually a lot of puzzles with these reduced price stickers I'll show you the other one that I got reduced but this one in particular caught my attention more than the others obviously this is a scene well this is an image from New York City which happens to be my hometown and I actually lived four blocks away from Central Park in the Museum of Natural History so it was like a five-minute walk so New York has a special place in my heart in general I usually gravitate towards puzzle or like puzzle images that kind of give evoke some emotion in me or I have some connection to or literally is just an image that makes me feel like I want to be in the image what makes you gravitate towards certain puzzles the next one I bought was another reduced puzzle and this one was reduced from 1599 all the way down to $3.99 and the reason why I picked this one this one is a DC Thomas Kincaid Studios for one Thomas Kincaid you know I'm gonna grab that and also it's called Superman Man of Steel now I'm not a humongous DC comic book fan I'm more of a Marvel but in with Superman I kind of have a very nostalgic thing with Superman I would always watch Christopher Reeves Superman back in the day with my sister when we were little girls and gave me the feels really it made me very nostalgic and again the price was amazing so I wasn't letting that pass so that was my hobby lobby law my hobby lobby law that was my hobby lobby haul that took me four times to say that's like a tongue twister I can't do that stuff so after we walked out of hobby lobby we went next door to Walmart and they had a very very healthy selection of Disney puzzles so that's where I went a little crazier than I had planned originally the first one that I grabbed was this beauty so this one is Snow White Dancing in the Sunlight and this is for Disney's Thomas Kincaid Studios it's a 750 piece puzzle this is by Chaco and this one comes with a puzzle poster which is gonna be very helpful in my last time lapse video you doing the beacons of magic that was a pain in the you know what because I didn't have any reference or anything to look at so that I can you know complete the puzzle a little quicker than I'd like but anyways I have it now this one is absolutely beautiful obviously we have Snow White with her prints we got the seven dwarfs hanging around everything looks cozy it's beautiful with flowers I wish I was like sitting on the stairs with grumpy looking all happy this is my first snow white puzzle so I'm excited to try this one out so we saw this one so this is Disney's Thomas Kincaid Studios this is a four jigsaw puzzles in one set this is by Chaco and each puzzle is 500 pieces we have Mickey Minnie and Pluto camping in the woods with the beautiful cottage in the background I wish I was there we have the little mermaid this one is different from my 750 piece set that I have we have 101 Dalmatians and then we have Donald Daisy and the boys at the beach I wish I was there too look you have all the friends in the background how exciting is that I can't wait to do these these are gorgeous then the next one we have is another puzzle box set this was my husband's fault as well he said I should get this one and then I was like okay this is Disney's five jigsaw puzzles in one set this is by Chaco and the difference here with this compared to the other one is that each of these puzzles have a different number of pieces we have a 300 piece set with Donald and Daisy we have a 300 piece with Donald Mickey and Minnie at the beach hula dancing and stuff that's not hula dancing that's wrong is that hula dancing no that's wrong oh my god we have a 500 piece Mickey and friends with some paint brushes I think and paint spewing all over the place we have a 500 piece Mickey and Minnie kissing each other which is super cute and then we have the 750 piece puzzle with very bright colors of Mickey and his friends that one looks fun with a bunch of instruments and last this is a big one so I thought I was done at that point but then we noticed there was a bunch of puzzles stacked up on the very very top shelf but my husband was on a mission for some reason that day I don't know why he felt the need that he had to show all these to me because he knew that I was gonna want to buy them all but then I spotted one he was like wait do you have this one and I was like no I don't have that but I know which one that is and then I got really excited because it was this one this one is called Disney Princess this is 2,000 pieces and it's by Chaco it's 38 by 26 inches which means that this is not going to fit on my puzzle table but I cannot wait to complete this one this one might be the first one that I actually glue on that mat and frame it because I don't know if I'm gonna want to do this one again to be perfectly honest this is gonna take me a long time and literally it's just we have all the princesses here we have Cinderella we have Snow White Jasmine Belle Mulan we have Ariel we have Tiana we have Rapunzel and we have Pocahontas and this is beautiful and this one also comes with a bonus puzzle poster which is gonna be a huge help to me because I need something to look at without having to look at a tiny picture on a box you can tell I'm still a bit sour with the beacons of magic puzzle so yeah I bought a lot that day way more than I expected so here is what I spent this weekend on puzzles you know what I don't regret it I'm happy I bought these puzzles the only issue now is I have to reorganize all my puzzles because this is a very big haul and I need to get busy have you bought any puzzles recently if so let me know in the comments what you bought and as I said before what makes you gravitate towards certain puzzles did you think I spend a lot of money I don't know I don't think I did I think I got a lot for what I paid what was the most you've ever spent on puzzles let me know so I don't feel too bad about what I did this weekend if you like this video be sure to check out my puzzle collection video and also I have a couple more hauls coming up that I did previously which I haven't posted yet but those will be up soon be sure to like this video if you love Disney puzzles if you want to see me put these puzzles together please make sure to subscribe so you can follow me along my jigsaw journey all right see you next time I have no idea where I'm gonna put these


How are you guys doing? So we are back with another product review and this time it is by the Myel Organics Hawaiian Ginger Line. I have their Hawaiian Ginger and Moisturizing Leave-In Conditioner. This is in a 12 ounce. Now I purchased this a while back when they were having that banging sale. You got to know for a while there I was sharing a lot of these sales on my community page, okay? And next I have their Hawaiian Ginger Moisturizing Hairbutter. So let's just go right ahead and get into the consistencies. I'm hoping this pump will work because you know how sometimes the pumps on these products don't be working. Yeah, let me see if I can, let me see, let me see when I talk a lot, see? There we go.  I know I'm going to put this on the back of my hair because I don't want to waste it. This is the Leave-In Conditioner. Very smooth though. Very smooth. Yeah it smells like that, like a hint of a baby perm but that's okay, it was very creamy. I'm going to pump some of it on the front of my hand so you can see it, okay? Nice, and I'll put the rest on the back here. And then next up we have the Myel, like I said, the Hairbutter. Let's open this up and smell it. Oh, this is thick. Look how thick that is, look. Smells good. Oh yes, I live for a thick styler. This is how thick it is. Look at that. Very creamy. Now I'm just brightening some of you guys to help y'all out some because I'm looking high yellow girl. All right you guys, I'm applying the Leave-In Conditioner to this large section. All right you guys, so I went ahead and already added the Leave-In Conditioner. Now this is the Hairbutter. You know what, I feel like, yeah I know I'm going to be honest, I feel like these products are so similar and I get it. A lot of these companies, they use the same base ingredients and then change up maybe two or three and that said they sell them as a collection and so forth. In my opinion, I feel like the Leave-In Conditioner and the Hairbutter are way too similar to the point to where I would not purchase both of them again. I would either purchase the Leave-In Conditioner or the Hairbutter. At this point I think I will probably purchase the Styler again as opposed to the Leave-In Conditioner, excuse me. So I'm going to go ahead and continue to twist my hair. I'm trying a little. Juicy twist looks great. I left these in for about two days and came back on. Look at the shrinkage. I got a little bit of shrinkage and it's going to lie. That right there is Sweet Almond Oil because I did not use any oil to set my hair. My hair was fairly moisturized because I did moisturize it, excuse me, the day before. So I'm just going to go ahead and take my time to unravel. Now if you'll notice at the end, some of my twists I did do a hanging band to not, but I got lazy and I didn't finish the rest of it. That is okay because I'm going to be doing a textured updo. Let me tell y'all something. I rarely wear my hair down and out. It's a lot of hair. I just prefer it up out of my face or sometimes I just wear my hair in twist. So anyway, I'm going to go ahead, like I said, and continue to take down these twists. The definition is to see what or how well these products do on my hair once it was really stretched out. Like I stated, I did get quite a bit of shrinkage because I left my hair in twist for a couple of days. But I'm loving the definition. This is the other side. So you guys, I'm just going to separate in a few sections because as I stated, I am going to do a updo, a textured updo is what I call it, okay? Definition. Yeah. And this is 4C at the back. Mostly 4B, well, combination of 4B and 4C in the front.  Let me tell y'all something.  It's probably been a couple of weeks, if not at least two months since I've worn my hair in a full, all the way down twist out. So this is my signature look, I'd say, at least the front part of my hair. I always do something in the back differently in girl because look, it's a lot of mysteries and stuff going on back there. So the back is typically always different, but this is what I do in the front. A large pompadour. I also use the three inch thick bobby pins. I cannot use those small bobby pins, girl. They will be stuck in there at loss for years. So just taking my time. The video is sped up, but I do take my time. I like to twist the ends to make it easier to secure with the bobby pins, and then I just take a gather large sections of my hair, pull it up and use a bobby pins to secure it. So yeah, y'all, that is basically what I'm going to be doing for this hairstyle. Y'all, I'm just about done here. And if you did not notice, I didn't use any type of edge control or jet look. I'm already struggling trying to put all this hair up. I am not about to struggle laying down my edges. I rarely lay down my edges.  And it's been this way for 10 years now. But everything in moderation, you guys, everything in moderation. This is what my hair looks like. I like it. It has a full, elegant look to it. I could put a scarf on it and maintain it for a good two to three days. We'll watch the takeoff as Matt is down. But that is it, you guys. Thank you so much for watching. Take care. Bye.


Hi everyone, Joe for JaspysCaseBreaks.com. Another fun break here. Love this stuff. Underwraps Autograph Base Falls. Version 2.0 by Fanatics. This is not a, this is not a yearly release by the way. I think 1.0 was maybe a couple years ago? Maybe more? Anyway, another round right here of Autograph Base Falls. This is break number 24.  The other cool thing about this, there's no randomizers because one spot will get any and all multi-signed autographs. More than one player on it goes to just that spot right there. Now, one spot gets you nine, so let's multiply this by nine. There's one, there's two, three, four, five, six, seven, eight, and ninth and final time. There it is. 171 on each list. Now let's gather all of your names, put them into this blank list here, and then let's gather everybody, the player names right here. Alright, and let's roll it. Randomize both names and players four and a five, nine times. One, two, three, four, five, six, seven, eight, and ninth and final time. After nine, we got Jeremy, a couple of Jeremy's down to Dan. Let's put this in a different list here. There we go. Four and a five, nine times for the players in the multi-spot. One, two, three, four, five, six, seven, eight, and ninth and final time. Steven Matz all the way down to Andy Pettit. Alright, so I'm just going to show you the list as is. This is just for the recording. Oh, and there's Jeremy Port with the any and all multi-signed autograph spot, autograph baseball spot. Now let's alphabetize by your first names. Alright, so Dan, there are all your players right here, more players here, and more players including your last spot mojo players right there. Thank you, Dan. Good luck, Jeremy. There's your group and the rest. John, you're your group of players. Steven Kaye and Tristan. Maybe Tristan has the rest. Yeah. There you go. We're going to pause the video when we come back. We're going to see if there's any trades. Then we'll have the break. Stick around, BRB. Okay, welcome back, everybody. No deals were done, so the list remains the same as what you saw on the previous screen. Good luck. Get your thinking caps on. Although I don't make the clues too hard, but we've got an active baseball player. Alright, a 34 year old infielder born in Visalia, California. Lifetime 297 batting average, 1,576 hits, 107 home runs, 581 runs batted in. Played for three teams my entire career, although the first team I didn't realize he actually spent some time with them. Three-time all-star, two-time all MLB first team, a four-time gold glover, a three-time Wilson defensive player of the year award winner, two times silver slugger, two-time batting champion, and a fielding Bible award winner who am I? What other stats can I give you here? I think that's over the stats. Righty, he went to LSU and was drafted in 2009 by the Cubs and made his debut with the Cubs before he was traded to the Rockies. Then from the Rockies, went to the Yankees. That's right, Vint and James got it. Yep, DJ Lamehu, going to Dan Golan, got the DJ Lamehu spot, batting champion in 2016 with the Rockies and then again in 2020 with the Yankees. Real solid player. There it is. Is it that way? It's not that way. That way, that's the D&J right there. There is the baseball MLB hologram sticker, no fanatic sticker, but you'll get the fanatics card in there as well. Very nice. Dan with DJ. This is cool. It's pretty cool. It's the first time I'm seeing this. I'm a retired baseball player, 85 years old now, born in Little Rock, Arkansas, a righty, made his MLB debut on my birthday back in 1955. Played for one team my entire career, ended up with a 267 lifetime average, 2,848 hits, 268 home runs, a little over 1,350 runs batted in, 18-time All-Star, two-time World Series champion, AL MVP, a World Series MVP, 16-time gold lover, Roberto Clemente award winner, and first battle hallfamer, very obvious first battle hallfamer, 91.98% of the vote. One of the greatest. Third baseman. That Vince got it. There's no doubt about it. Vincent's got it. It's Brooks Robinson, which is going to go to Tristan. And look at this, gold glove award. And look at the gold stitching on there. That's awesome. Yep, the human vacuum cleaner. That's awesome. And then you've got the fanatics and the MLB hologram sticker right there. That's really cool. I haven't seen this. The gold stitching on there. That's awesome. This is the boss man. The boss man's favorite player, Nick Jaspy's pops, Mike Jaspy, big Brooks Robinson guy. That's going to go to Tristan and Brooks Robinson. Nice. Gold stitching, really cool. Third and final box of the break. All right, and experience basketball. You're lagging behind by about a few minutes. Make sure, maybe more. Make sure you click the live part of the broadcast. Why did they not send my message? All right, guess what? The next one is our first multi-signed baseball. Our first one in a while. Jeremy Port, you got it. And we're sticking with the Orioles theme. It's another Brooks Robinson autograph along with, who is that? Guess the auto. There's the MLB hologram sticker. There's the fanatic sticker right there. And we know what Brooks Robinson's autograph looks like. Who's that auto? You know who this player is for sure. Yeah, Davey Johnson. It's Brooks Robinson and Davey Johnson right there. Nice. Now you got a Hall of Fame inscription from Brooks Robinson and then you've got a, I think, 66 chance from Davey Johnson. Nice multi-signed autograph. That all goes to one spot. That's for Jeremy Port. There you go, ladies and gentlemen. Another three boxes in the store. Let's do some more. Jaspy'scasebreaks.com. Bye-bye.