Hello. So my name is Simo and here is Teemu as well. Hi. Yeah, we're going to be talking about data formats next. So now that we have handled like, we have the basics of what we're going to be using the tools. We have NumPy, we have Pandas and we have plotting tools. Now we usually want to like figure out how do we get some stuff into our system like some outside stuff data. And for that, you usually need to choose a correct data format. And yes, so if we switch to the my screen, we can look at the data format in a bit more detail. So what is a data format? So usually it can mean two things, two separate things. It can mean the data structure or how your data is organized. Like how the program sees your data, like how it's organized in memory, what kind of objects it is, like that kind of stuff. How it's organized in your code and in your code and in the memory of the computer. And then there's also the file format. So how the data is stored when it's stored into a disk. And these are like both data formats, but they're a bit different. So the other one is like what is the format when you are working on the data and what is the format when you're not working on the data, but it's waiting to be worked on. And if you look at a few examples, so let's consider this random data frame that I have here. So basically it contains some strings, it contains some time values. It contains some integers, and then it contains some floating point numbers. So this is like a typical, like you might have a data format that describes, well, it can describe basically whatever. And if we create this, we can see that, and you look at with this data set the info command, we can see that there is like a lot of entries, 100,000 entries here. So some of them are objects, some of them are date times, some of them are integers, and some of them are floating point values. So we have different kinds of objects inside this data frame. So what is the data format for this kind of a data frame? Well, the data format is tidy data. We talked about tidy data yesterday. So in tidy data we have a variable that can have its own data type, it's stored as a column, and then we have observations in the rows. So we have multiple of these columns with different data types. Let's consider another example. So in here, I create like a simple NumPy array. So let's create this. And we notice here that we have an ND array, so NumPy array with certain shape, certain strides. We were talking about strides yesterday. We noticed that it's a contiguous block of data. So it's one big block in the memory, and it has a data type of floating point numbers. So what is the data format for this data? It is basically a block in the memory, so multi-dimensional array. Of course, in like what was yesterday talked about for the computer, this is only one-dimensional like a block of memory. So it's one big block of memory. But using the shape and the strides parameters, it will interpret it as a multi-dimensional array if it needs it to be that kind of a... Yeah, if it needs that. Well, wouldn't it be nice, like we have two different data types here, or data structures. Wouldn't it be nice if both of these could be stored in a way that would... like stored to the disk in a way that would retain the same structure. So what I mean by that is that if we save this multi-dimensional array, or we save our tidy data frame, we would probably want to store it in a data format or file format that has the same kind of structure inside of it, so that we can keep the format as intact as possible. And this is very important when you are going towards big data. Like big data is all the rage, well, has been for the last 20 years. And in the more data you start to have, the more important it becomes to keep your data in the similar kind of format in memory as it is in the disk. Because that makes all of the accesses and like you don't need to do any conversions when you're reading the data or when you're writing the data. It makes all of the accesses and everything much faster and easier. So how do you choose a file format? Well, the most important thing is like you should know that there is no format that is good for every use case. So if you look at this excellent comic from XKCD, you notice that like how standards usually proliferate. So you have one standard and then somebody else thinks that okay, like my use case isn't supported by this standard and then they create another standard and now you have two standards and so forth. And this is the same thing for file formats. There is no one file format that rules them all. There is no file format that can like satisfy every use case and be efficient and fast and everything like that. So you usually need to choose a file format based on number of factors. Good, like at least to keep in your head might be that you might want to choose a file format that is easy to use for your use case, that is fast for your use case. You might want to choose a file format based on what other people are using. So usually there might be some frameworks, there might be some other people who might be using file format and you might want to choose based on that alone because then you can easily collaborate and you can use their tools to do your analysis. One good thing to keep in mind is that while you're working with the data is that do you need the code to be human readable while you're working on it. So for example here, when we're working with Jupiter, we get human readable view of the data when we use pandas for that. But the data is in memory, it's bytes in the memory, so we use code to get access to that data, but we don't need to understand how the data is stored basically. So the data is stored as bytes in binary format in the computer memory, but we can access it using pandas. And if you don't need to actually look at the file itself, you might not need to store it in a human readable format. Because well, if you want to use computers to do like analysis on the data, you probably want the data to be in a computer understandable format so that the computer can easily work on it. And the last question is that is this for archiving or is this just for now where you're working on it. If you want something for archiving, that might be a completely different data format than what you want to use when you're working on the data. Because the archive formats might not be efficient whereas some of the other formats might be more efficient if you like storing temporary data. Here I noticed that you use the word choose or like select a data format. And I was thinking, can you come up with like choose from a set of pre-existing data formats? Is there a scenario that you would actually have to kind of like come up with your own data format? Or have you or better phrased, have you encountered such a situation in your work or in your studies? Yeah, that's a really great question. So I'd say that I haven't ever encountered the situation where I've had, well, I have once written like a data format that was basically a bad data format. But it was basically like a change as to some an umpire array. But I haven't written the file format itself. I have written a convention maybe. So basically choose which kinds of like names to use, which kind of how to store the data. Like that is also like a file format. If you choose certain conventions, if you choose like, okay, the data will always be stored with the name data or something like that, you choose a convention. And many of the data formats that we are going to be talking, some of the data formats we are going to be talking about today. They also are basically conventions that are built upon certain certain like already existing technology. They're just like more well defined. So in many cases you might end up like choosing that okay, you choose to use certain names, you choose to have certain structure, but you might still use the same kind of like data set writers to write the data actually today. But yeah, I haven't encountered myself a situation where I have written like a writer, like a data writer from Scats in C or something like that. Because yeah, like usually it's not, you don't end up with anything good. But yeah, that's a really great question and I'm not completely certain what would be the correct answer. Yeah, exactly. Yeah, it's about your experience and I have a very similar experience that it's, I have never had to go like deep into making my own data format or implementing it. So it's basically a question, as it very often is that it's a question of like best practices and what is the community practices. And usually you have some kind of like a collection of standard solutions and then you choose the one that kind of fits your use case. Okay, but yeah. Yeah, let's look at the view of the data format. So here's a big list. You can like click on any of these to go to the specific entry. There's different factors that we've been using to like set certain like, which is a good use case for whatever situation. But let's look at few of them, like the most common ones. So if you want to grab the screen, we can look at pickles first. So there is already in the HackMD, I noticed there's a question that is basically the first question or first like major downside of a pickle. Which is that pickles aren't secure. But if you show the key features of pickles. Here. Yes, a bit below. My scrolling doesn't work very well. So the pickle format is basically like Python's own like this serialization library. So serialization means that you want to take some object and then you want to like just store it into the disk. So pickle is a format that Python uses so you can you put arbitrary Python objects into these files. This is very good if you want to like to debugging or something you want to just see what your object has inside of it. But it has major downsides. The biggest downside is that it's very unsecure because it's an arbitrary Python object. Like you could store whatever kind of an object there that when it's loaded it will like run arbitrary code on your machine. So you should never use it to share anything with anybody and you shouldn't load pickles from untrusted sources. But if you have like like let's say you have a code that crashes and you don't know you want to store like some sort of like state of variables. Certain variables before the code crashes and have like some sort of like debugging or what is the state of the system. Of course you could use a debugger which is preferable. But if you have like if you're not there or if you want to like just just store my object so that I can continue where I left off. You can use pickles and yeah let's let's try saving some random stuff in a pickle. So what I did when you were running your code I ran it as well. So this is the same code I run. So now I take this pickle code. Yes so with pickle you need to use this with you need to open the file pointer before you you write into it and then you basically dump the Python object there. And then you can do the same thing to read it. So here is the important here is the right operation and here is the then loading the written yes. So so pickles are yeah the one big downside of pickles if you'd like have a huge array that is in your memory and you store it as a pickle. It's basically the same size as the original array and. And it when you load it will use that huge amount of memory. So if you like to analysis on a big memory system and then transfer the results to your laptop and try to read it as a pickle. You might like run out of memory and do all kinds of stuff. So it's basically like like it's easy but not very. It's not encouraged for like long term use. But let's try it out. You can try it out yourself. So we have first exercise here of how to use pickle and let's have like a quick five minute exercise. This is these exercises are very like very small and very easy to do. So I'll take the screen for a second. So if you look at the exercise one create some arbitrary Python object. And then you can have a string or at least or whatever and then pickle it and read the pickled object back and check if that matches the original one. So let's have like five minutes on this. So like 12 33. Let's continue. Yep. We're back. Yes. So hopefully you managed to do it. If not, then well, there's lots of data forms to go through. So we don't we won't use too much time on the solution. But if you look at the solution, it's pretty simple. It's basically what was like what we were running previously. But let's now jump. Yeah. Yeah. Sorry, I will grab the screen. Yes. Yeah. So yes. So let's let's focus on on more like pickle is nice and all, but let's focus on actual data formats so that we can use that to more represent like our data. And in this case, let's focus on tidy data. So if we have this kind of data in pandas, where we have the columns, and then we have the variables in the columns, and then we have the observations in the rows, how do we store that data? Well, the most obvious format and most popular format is the comma separated value. Or CSV format or tab separated value or whatever separator you want to use, but basically text data that you have data in organized with some separator in columns. And it's it's very popular because it's human readable and you can easily share it with people, but it's usually not the best format for for storing big data because it can get really big. Like, if you think about how many bytes you need to store one number in in text versus how much, how many bytes you need to store a number in in as a floating boat value. It's a lot more when you had multiple decimals there, but it's very useful for especially sharing data with other people and if you really need to see the data yourself. And pandas has a really good interface for CSV files. So if you want to show how to write our example data set into CSV. Yes. So the data set was the variable we made here. Yes. So it's a it's a pandas data frame. Yes. It contains a lot of stuff. So what happens? So yes, something happened. Yeah, it might go to a different folder based on what was your working folder, the current working folder, but anyways, it will store like a CSV file that you can then open up. NumPy has an interface for CSV as well. So you can use this save txt to store NumPy arrays as a CSV. But like I wouldn't recommend it because of the problem with data precision in well CSV. So if you want to demo scroll a bit down to the and open the CSV. Ah, yes, this one. Yes, yes scroll open the warning box there. Well, we can. Yeah, let's try the NumPy. Okay. So the problem is that basically if you store numbers as text, like floating point values, if you have double 64 bit floating point values, they have a lot of lot of precision. So you need to add or have a lot of decimals to store like a number. And if you're using CSV, it's very easy to like shorten the stuff up. So this is why like I would never like use my own. Like I have written myself in my time like CSV writers. So basically like just write text as floating point values with like four decimal positions of precision. And that can work if you actually know what the errors are in your data and that kind of stuff. If you don't, if you don't have error like propagation, but especially if you're working with like numerical code and stuff like that. You usually want the intermediate products like stuff that you have while you're working on the data, you want that to be be exact. You want it to be like, so if you want to like show them this example. In this example, like if you copy that. This one. Yes. If you copy that. So in this example, we store like NumPy square root of two, we store it as like with a simple Python writer. So we just write it as a floating point value and then we load it back in from this like manually written CSV. We notice that it's not the same. It's not exactly the same number. So if you try writing this or running this, you notice that there's an error. There's like an, well, it's not a big error, but you might have this. Yeah, it's an error and it will propagate. So if you like do something with your data and then you store it as a CSV and then you read it back as and then you store it as a CSV, you might end up like propagating the error. And in some cases it doesn't matter, but in many cases you don't necessarily want to your code to do something you don't. I would think if I was like into physics or something and doing some quantum physics stuff, I would probably like to have no errors. Yes. And that's why like CSV is usually not the best format when you're like dealing with like some intermediate data. But CSV is a good format for sharing data. And if you just need something quick and dirty, it's a very good format for tidy data especially. But let's go. We're running out of time, so let's go a bit faster and go through few of the like more important formats that you can use instead of CSV for tidy data. One example of a format is this Federer format, which is a format that has been written for like it needs an extra package called PyArrow, but it's a format that can store like arrays temporarily very fast. It's very fast and very space efficient for storing like, I mean, not arrays, but tidy data. But it's not usually the best format to store the long term data. And there is, I would say better alternative, which is part of care. And this part of care format is a format made by Apache consortium and it's mainly used in big data. It can store arbitrary data, so in big data like warehouses, they store like arbitrary binary data in parquet. But because it's designed for this kind of like big data stuff, having using it that way requires a bit more technical knowledge. And I wouldn't maybe do it if you're not familiar with the format, but for tidy data it is really easy. So if you look at the example, bundas has a really good interface for parquet. So you basically just have this to parquet and from parquet format. So it's basically the same syntax as with the CSV in bundas. Bundas has many of these to something and read something for functions that you can use to write various different data formats. And this is a one good format for storing data while you're working on it. So if your data is in tidy format, it's very easy to do. It will require you to install the PyAgro package. I'm not certain if it's included in the Anaconda distribution nowadays, but yeah, it's readily available. And it's interoperable format for other languages as well. So it's very popular. Okay, now that we have looked at tidy data a bit, let's have a quick exercise of writing something into a CSV so that you can verify that this stuff actually works. So let's have like a five minute exercise, a quick exercise on how to write the CSV file. Of course you can use the parquet example as well if you have the PyAgro installed, but if not, then the CSV one is a good one to do. So let's return in 47 and go through some array data then. Bye for now. Hello. So hopefully you managed to do the CSV exercise. These exercises are really small and well, you can do them later on because well, like mentioned at the start of the talk, there's a lot of these data formats and there's one good one or one excellent one. So like we have to go through many of them so the exercises cannot reflect all of the available data formats, but you can run them later on if you find a data format that suits you the best. But now that we have talked about tidy data, let's talk a quick about array data. So in array data like you usually have like a big block of memory that you want to store as it is like you want to store it as a binary floating point numbers in like a full block somewhere and you want to like then recall it. You don't want to like have it stored as a CSV file or something because it will use a lot of space. So instead of storing it as a text file, you might want to use something like a NumPy array format for storing like your intermediate results. So it's included in NumPy so it's a binary format and it stores like the array and the corresponding metadata of what shape is there and that's kind of stuff. So you don't need to store that as some in your CSV file as how to interpret the data. So if you try the example, it's a very easy thing to use. You have NumPy save and NumPy load functions that you can use to write and read these arrays. Okay so the file name and the object that we want to. Yeah and it will store it much faster in much more small space than CSV file and it will keep the precision definitely. Okay now there's also in NumPy this save Z function that you can use to store multiple arrays into one NPC file. So it's like a GZIP like a compressed file that you can store multiple arrays into. So it's similar to like MATLAB's MAT file in that sense with the user interface if you're familiar with that. Okay so you don't get like hundreds or thousands of different files. Yes but I would still like not store maybe thousands of files there but if you have multiple arrays you can store stuff there so you can then access it later on. So you can then access the loaded in BZ last like a dictionary and get the array that you want to use. For really big arrays it's better to use something like HDF5 or net CDF that we'll be talking later on. Because you might want to want to access only a part of the array at a time you don't want to access the full thing. So when you're using NumPy, NumPy load you can do memory mapping or kind of stuff to access only part of the array. But usually it becomes complicated so those are more advanced tools or better tools for these kinds of use cases. NumPy Save and Save Z also work with spare sparse arrays or sparse matrices. If you have like a situation where you have a really big matrix that is full of zeros and only once every now and then you can store it as a sparse matrix and then use the NumPy Save and Save Z to store it and there's also like specialized save functions in SciPy for sparse matrices. So if that is your use case I would use those. But when your data becomes bigger, when the arrays become bigger like if you have physics code and stuff like that you usually want to use some format that is also interchangeable with other tools because the NumPy format is NumPy specific. So if somebody else wants to use your data then well they are forced to use NumPy now so that's no fun. And for that like the most popular data format to share is HDF5 or hierarchical data format version 5. So it stores like you can store arbitrary data sets inside of it in this kind of like folder type situation. So you can create like these groups inside there and data sets there and you can put like arbitrary data there. And it has a lot of like complex features because it's been designed for the like these HPC applications that might run like a huge number of huge. Well you can create like data sets of terabytes so in one file so you need to have like a format that can support it. But it's not very good. And you said that it's in general so the receiver of the data is not locked to using NumPy. Yes yes it's a general format you can store in various like various formats the data inside of it. And it's shareable by well you can share that format and anybody can read the format. It's not good for random reads though. So if you're doing something that depends on random access like you want to randomly go through something it's not very good for that. But it's good when you want to do stuff in big blocks of data. And there's a few Python packages that have good interfaces for that. Then we have NetCDF4 which is like HDF5 which is like you have HDF5 with some sort of like how could I say it. You have a structure defined and it's very often used in the physics context where you have like time space. Like if you have atmospheric data or something like that you have like a time dimension and then you have a spatial dimensions like 3D spatial dimensions like X, Y and Z coordinates. Like it has this well defined metadata thing happening inside of it. It's built upon HDF5 but it's like has its own like conventions that are hard coded to the format itself. And it's useful if you're working with like programs that can accept NetCDF4. But these are special formats but these could be mindful of those. There's a really great package called X array which has good interface for NetCDF4. But maybe we'll leave the exercise. We're running out of time. So maybe we'll leave the exercise tree of saving the NumPy array as a home exercise. This one you can do it later on and let's focus on. There's a really great discussion in the HackMD about JSON. So one of the more modern and important data formats nowadays is JSON. Because it's basically like well how could I say like CSV on steroids or something like that. So it's not it can represent all kinds of stuff in it. It's a human readable format and it's very popular in like web storing web requests and all kinds of like relational data. Like if you have if you have something that comes from like you have a customer database and then you have a product database and like databases and that kind of stuff where you have stuff that is related to its other. So what stuff the customer bought and what kind of like yeah who tweeted that who and what hashtags they were using and that kind of stuff like if you have a data that is very like has lots of connections to other data. You don't want to like create a tidy data format out of it because the matrix would become so big and most of it would be empty like most of the stuff wouldn't have connections. But if you have stuff that is very connected, JSON is very popular in that demo can probably answer more on this. Yeah it's JSON is kind of like and it's like omnipresent nowadays. So if you're working with data or data or similar stuff then you probably encounter JSON every few minutes in some in some format. So and like you said especially with with web development. It's very all the data is basically transferred in JSON format. So it's very, very, very good to know good to know and and get familiar. I would recommend. I also recommend like looking at like there's been lots of like a big info dump happening here like there's lots of different data formats. But I would keep mind open about like what what these formats are for because like even if you're dealing with let's say you're doing physics and you only deal with big arrays. So you don't need some way usually to like keep track of what simulations you have done what analysis you have done which parameters you have used to do these simulations and which arrays come from which simulations like the old fashioned ways to like create folders and folders have like underscore underscore parameter value underscore and that kind of stuff. I've done it myself and I'm not changing admitted but the better way would be to usually have like like something in a tidy tidy format or maybe in a JSON file or something that would contain like these metadata these kinds of like contain the data and the relations between like what data sets you have what parameters you have used and which array data then corresponds to this to these parameters. So you usually even if you're working with certain data format as like the that stores most of the data in reality like most of the data is usually what values where what code what you were using to create this data what what like it's it's some sort of metadata like what parameters where you're using what arguments where you're using and that kind of stuff you don't want to store as an umpire array right like that kind of stuff isn't suitable for that format. So so usually you need to mix and match all of these formats so you might have as a back end like let's say HD file files store these big arrays and then you would have like a JSON or something that would describe what's in the like what analysis you have done and which HDF5 arrays have it like have the data you need. Of course, some formats like parquet and HDF5 and net CDF they allow you to put metadata into the data itself like right next to the data itself, but in many cases like you need to mix and match all of these different data from so it's good to know about them. Yes, but I think with that like there's few other data formats mentioned that there's Excel, which I won't recommend, but you if you're doing something like social studies or economics or something you have a lot of data is provided in Excel, pandas has good interface for that. And then there's lots of like graph format. So if you have data that can be represented as a graph, you should check what the packages that analyze these graphs what they recommend using. There's many different formats based on the structure of your graphs. So yeah, you should look on that. But as a summary, there is no one format to rule them all. You should think about how your code sees the data and store the data in a way that is similar to how your code sees the data because then it makes everything a lot easier. And follow best practices and community practices. Yes. Like I was thinking an analogy of like you can you can send a vase to your friend in a letter like a letter envelope, but then you have to break the vase into small bits and and at the other side when your friend gets the vase from the letter envelope, they have to like glue it back together in order to like get the vase back and you could just use like a padded box or padded like packaging. For sending it and that would probably be a better format for sending it so. I get it. Yeah. But Richard, do we have a like, I think we are at the end of the day. Yeah, so let's go to the notes. There is feedback already there. So you can let us know what you thought. Yeah, and let's see any other questions to answer. There seems to have been a lot of issues this year with possible version conflicts or something like that, like something in the lesson requires newer versions than software people had installed. It's something we definitely need to look at for next time. Yes, we'll talk about versions tomorrow with the dependencies or what was it in Friday, but yeah, I think, well, a lot of this is related to that as well. Yeah, yeah, that's a good point. So Friday you'll see how to handle the versions and environments. Anyway, were there any more questions somewhere? What about this one? How can you make a simple file with modules to load parameters? Well, yeah, that's like, I think you're now in the in the ballpark where it is starting to become another format when you start implementing that, like, I've seen many like, especially in like machine learning world or deep learning world, there's many formats that try to like encapsulate like what environment we're using to create this. Model and also the model itself and like having the software included with the in it and it comes, can create, become complicated, but I think the question here is actually that like, how do you get the import statements? Yeah. Yeah. Okay, the machine learning is the question. Yeah. Yeah, in those like, there's plenty of formats for one common format is this ML flow that tries to like store it, but there's other ones as well. Maybe this is a good question to bring up in the panel discussion on Friday. Yeah. Yeah. All the things here, we can sort of put everything together and make some better things because some like modules to load and imports, we see that Friday. We see about different libraries tomorrow and so on. Yeah. Okay. Yeah, we need less copying and pasting. It also slows us down. Okay. Well, should we resume on? What's the next day? Thursday. At the same time of today. And we hope we see you there. Is there any preparation for tomorrow? I don't think there's anything extra really. So yeah. See you then. Yeah. Thanks. Thanks.


Welcome to this tutorial on network visualization. This will be a hands-on demonstration of how to do network visualization of large omics datasets. If you want to understand why I do what I do, I highly recommend that you go watch my introduction to the core concepts of network visualization. Here we will first retrieve a large physical approach in interaction network, import some omics data and visualize them on the network using discrete column mapping. Next, we'll cut up the network using network clustering and finally improve the layout of the figure. For this, we'll be working with Cytoscape and a number of different apps, specifically StringApp to retrieve the network, ClusterMaker2 to perform the clustering and finally Wi-Fi's layout algorithms to improve the layout. If you're not familiar with how to install apps in Cytoscape, I highly recommend that you go watch my basic StringApp tutorial first. This time, we'll work with a large phosphoprotomics dataset. Each row in this spreadsheet represents a phosphorylation site with a uniproduct session number for the protein, a gene name, the modified residue number, multiple lockfold change values representing comparisons across several conditions and finally a cluster assignment that summarizes the behavior across all the conditions for each site. We select the uniproduct sessions for the hundreds of rows and paste them all into the search box in Cytoscape. This time, we again perform a StringProject query but adjust the search options to retrieve a physical interaction network rather than a full functional association network. However, despite wanting only physical interactions, you get a very large interaction network. For this reason, Cytoscape by default does not show the full graphics detail. You have to turn this on in the View menu. In the right-hand panel, like last time, we turn off the StringColors and turn off the miniature structures inside the glass balls. We go to the File menu and choose to import a table from File, thereby importing the spreadsheet with all its data into the Note table. In the import dialog, we again remember to adjust that we want to use the query term column for matching the names from the spreadsheet. Once the data are imported, we go to the Visual Styles panel, select the fill color and say that we want the fill color to depend on the cluster assignment. Since it's ABC, we choose DiscreteColorScheme and use the ColorGenerator to create a color palette from ColorBrewer Z1. Now you have the Note, Colored, Red, Green and Blue depending on the behavior in theomics data. However, it's still not a good visualization of the dataset because the network is, frankly, a hairball. The solution to this is to run clustering on the network. From the StringApp panel, you can run MCL Clustering, which is actually performed by the ClusterMaker 2 app. And once you do that, you get a new network where the big hairball has been cut up into dense clusters. You still see a little bit of overlap of nodes. For this, we use the Wi-Files layout algorithms to remove overlaps slightly adjusting the layout without altering it overall. This is a pretty good starting point for visualizing a bigomics dataset. Thanks for watching this tutorial. If you want to learn how to do more advanced visualization of theomics data in Cytoscape, take a look at this brief introduction to theomics visualizer app.


Yeah. I ain't rich.  Drop something home. She's scared. She's scared. You what? You what? She's scared. What she saying? Why are you scared? Rich, let's see what she can do.  Come on. Yo, yo, it's your phone call. Yo, time to talk to me, yo, time to talk to me. Yo, how to get on the bed? Yo, yo, gotta talk to me, yo, time to talk to me.


Hello and welcome to the session. My name is Mansi and I am going to help you with the following question. The question says if A equals to the set 3, 6, 9, 12, 15, 18, 21, B equals to the set 4, 8, 12, 16, 20, C equals to the set 2, 4, 6, 8, 10, 12, 14, 16 and D equals to the set 5, 10, 15, 20. Then find the third part that is A minus T. Let us see the solution to this one. We see that A minus T is the set 3, 6, 9, 12, 18, 21. This is our answer to this question. I hope you understood the question and enjoyed the session. Have a good day.


Today, we're gonna be putting together the RepBox 2 from RepCord. My name's Jim, and this is The Edge of Tech. So like I said, today we're gonna be putting together this RepBox 2 that came straight from Pooch at the RepCord booth at Earth. And we had a lot of fun at Earth. There's a really good interview with Pooch coming up. It's gonna be released right before this video, so stay tuned for that. Also, full disclosure, I did buy this RepBox myself, but Pooch threw in some extras that you'll see later in the video, including those really sweet side panels that I've been showing on the live streams. So stay tuned. We're gonna get straight into it. We're also gonna follow the RepCord Dozuki instructions, and I'll put those in the description below. We're gonna make video clips for that website as we go with this video. So let's do it. All right, the first thing you wanna do is called Stage Zero. You wanna lay out everything you have and make sure it's all here. They really do good about identifying all the pieces and making sure that you have them all. There's bags of parts, there's panels, there's seals, if you got a seal kit, there's the printed parts or handles. If you did not get the printed parts or order the printer parts, make sure you print them ahead of time. You just wanna make sure you have everything ready to go before we start. There are a couple tools needed. You'll need a scissors, a Phillips head screwdriver, a hobby knife or a razor. You'll also need some Windex or some Cleaner and a needle nose pliers. So step two, after we have identified everything, is to dry fit your box. And we need to figure out exactly how you wanna lay out your box. If you want the holes in the front, if you want the holes in the back of the box, this is the time to figure that out before you get it all together and realize you don't want it like that. This one right here is your rear panel and this is number one. So this is gonna be the back of the box. So these are your bottom and your top panels, these are your side panels and we're gonna be using one of these as well and this is for the front. So what I'm gonna do now is dry fit the box like it says in step two. Here's what I like to do. I'm gonna lay a panel down like this. Then I'm gonna take the bigger panel here which is the back of the rep box and I'm gonna set it right there.  In my case, I want the bottom to be in the front and the top to be in the rear. So I'm gonna take one of the panels here and this is the bottom of the rep box. You can tell that by this cut out here in the bottom of the panel. And like I said, I want the bottom to be in the front of the rep box. So I'm gonna take this and slide it into the slots like that. So if I turn it this way, you could see the holes are up front. I'm gonna do it the opposite way on the top. I would rather have holes in the back. So what I'm gonna do is take my panel, slide it in and as you can see now, right here, holes are gonna be in the back on the top and they'll be in the front on the bottom. Then what we need to do is take our last piece here and that goes in diagonally right there in the front. We need to take the last panel, the side panel here and we need to get all of the holes matched up and pop them all in. And that can be easier said to done but it's pretty simple if you do it this way. Maybe there's better ways. I know Pooch and the Gang do a ton of these so there's probably better ways to do this. But for me, by myself, this was the best way I found to put this together. Now what we have is a staged rep box. In the top of the back here, I have holes and in the bottom of the front, I have the exit holes there. And this completes step two. So for step number three, we're gonna do the exit and base panel. We're gonna grab one of the rear exit panels. It is one of the ones with the hexagonal holes in it here and we're gonna take three of our screws, one, two, three and put them in there. So this is what you got. Then what we'll do is we'll take parts bag H that has the seal and we will open the seal up and you wanna stretch it out a couple times like that. So you'll take your seal and the little plastic punches are still in them. So those will need to be punched and if you went through the beginning part of this, it asks you to do that first. We'll take this and we'll put the holes right through like that. And that'll get the seal on there.  So you don't want it to be hanging way up here. So when you're done, it'll look like this from this side. You'll see the three screws, the seal here and from the back just like that.  So in my case, I wanted the holes to be in the front of the box. So what we're gonna do is we're gonna take our base panel here and we're gonna flip this over and we're gonna push our screws in through those screw holes and that will sandwich that seal right between the two panels. We're sandwiching the plastic here between the panel we just prepared and our base panel, so the bottom. And in some cases, these hexagonal holes will have nothing under them. If you decided you wanted this the opposite way where your holes are back here, these hexagons will be empty underneath these but that's okay, we're gonna use those later. All right, so the next step would be step number four would be adding the square nuts to the mega brackets. So if we take all the brackets and position them like this, there's six of them and we need 12 of these square nuts, okay? The first thing we're gonna do is take the square nuts and push them into these top holes. So we'll go through one. You can do this with a needle nose pliers, you can do that with your finger, you can, I like to use a flathead and just push them down a little. So what we're gonna do is go through and push the top nut into each one of these and we're just gonna take it, push it into here and then what you'll be able to do on the backside is see in this hole here, you'll be able to see all the way through it if your nut is all the way down. Once we get that done, we're gonna go to the hole directly under this. So this is where we pushed it in. We're gonna go to the hole directly under that which will be this top one here and we're just gonna take another nut and push it into that top one. That leaves us with a square nut in this slot. You flipped it up, square nut in this slot. So on four of them, what we need to do is push the front nut in here too. So we have one here, one there. Then if we spin it, one here. We're gonna do that on all of them. Like I said, on four of them, only on four of them we're gonna do this top one because that'll be our corners. So we got all of them in and I either did them all right or all wrong and we're gonna find out shortly. So four of them as you can see have the nuts pressed into the front. Those are gonna be the corners. All of them are at the top here and if we flip this around, there's nothing on that side and there's all across there. So I believe we got all these in the right orientation and we're gonna move on to the next step. Now step five, the exit and base panel bracket install. And it's at this point, I realized that a couple steps ago, I put this on backwards. So the finished side with the hexagons and our seal here should be on the unfinished side of our base panel. So if you flip it over and look at it from this side, you'll see it's finished here. You have your holes. In my case, you have your holes and your screws right here. So make sure when you're pressing this panel on in the earlier steps that you get it, push it in through the unfinished side. Then what we're gonna do is take another panel. Same thing. And we are gonna put it right there. So we're gonna throw our three screws in here just like we did on the other panel that had the seal on it. So we will push our screws in, maybe. So we will take and push our screws in. So now what we have is the panel on here with the three screws. We have this one that we put on earlier that has that seal here. We're gonna flip that over. Next, we take the pieces we did in the last step and we're gonna use them and install them on this board. So the two that do not have the center bracket are gonna go here and here.  So you want to take a screwdriver from the other side and you want them all facing in.  So now you got all six of these on. Remember, the ones with the nuts are in the corners here. Then we need to take the last one of these with the hexagonal holes in it. And what we need to do with that is we need to put it down underneath the plastic film, that seal we created earlier. How we're gonna do that is we're gonna push three screws up through it. Now I've done this a couple times because I screwed it up a couple times. So I just wanted to make sure we're getting this right. So I'm refilming this. So if the holes look like there's been something in them already, there was. So what we do is we take the hexagonal piece, we put the three screws in it here. We push our plastic down over in the screw holes. Then we take the last piece here with the round holes. In my case, the round holes match the round holes here. In your case, if you had this backwards, so the holes were on this side, you wouldn't see anything here. So when this is correct, you'll be able to flex it downwards about 45 degrees. If it's not correct, you won't be able to do that. You'll have to take these over and swap them like I did. So then what you wanna do is take your lock nuts, throw them on the ends of these screws and get them started. Now I've done this a couple times and because I messed up, I scratched up right there a little bit. In your case, you won't have to do that. Now I know there's a printable tool that helps with these processes. In this case, I'm just using a 730 seconds socket and an Allen wrench. Actually, it's an Allen driver on the other side to tighten these in. But so we got these three started. Now let's tighten those up. So now we have that attached here and you can see it's about flush if we go this way. But if we flip it over, this is gonna be the inside of the box here. And if we flip that over, you'll notice that I can actually bring this up to about 45 degrees now. If you look down through that hole, you'll see the hexagonal hole on the outside and the circular hole on the inside right down there. And that is perfect. And that concludes step five. With step six, they just want us to verify that you can pull this up to about 45 degrees and that makes sure that everything is on properly. Okay, so the next thing we wanna do is put our back panel on. The back panel is the bigger panel like this and it has the slots in the bottom. And we're gonna put the finished side in. To do that, we need to turn this up and like this and we're gonna match it up to the brackets we had on the back. Now, something to keep in mind, if I can show you from this angle, something to keep in mind that when you do this, it is gonna be lower than that floor panel.  We're gonna take three screws, go right into these brackets that we already put on carefully, we're gonna do that with all three and we'll be right back. So the back panel is on and as you can see, there's a lip on the bottom and that is by design. If you look on the inside, this is what we have. This is your back panel here and it's the finished side. This is gonna be the inside, the bottom of the box. So the next part of this is we need to make five more of our little brackets here. And this is where you need to make a decision. If you are gonna mount this to a wall, you need to put these brackets on different. If you're gonna not mount this to the wall ever, then we'll do it a different way. So what I mean by that is if you're gonna mount it to the wall, you want these brackets to be in this orientation, okay? So you want to put your nut, you wanna put a nut in this top one and you wanna put a nut in this top one. If you want to mount them to the wall, that flips and it mirrors. So if you wanna mount it to a wall, these need to go this way with the wedge down because this is gonna act like a hook for the wall mount. This is purely aesthetic and if you want to ever mount this to a wall or you think you might, you might wanna just do it this way. So this will go in here like this and then the wall mount will slide under and get screwed in here. So something to think about is that if you do wanna mount it to a wall or you think you might want to, then mount it like this. If you're never gonna mount it to a wall, turn it around and mount it like that. So I got all the square nuts inside my brackets and I'm gonna go ahead and mount one of these to show you how I'm doing it. So I take one of the screws and I put it through and there's five of them to do. So it's gonna go in like that. What I wanna do is make sure that the square nut is in like it should be. I'm gonna give this a few spins to make sure and we're good. So I'm gonna tighten this in here and when we're all finished, they're all gonna sit just like that. And that way when the wall mount comes, it's actually gonna wedge in here and that's how you're gonna hang it right on the wall. I'm gonna mount all five of mine like that and we'll be back. So I have all five of them on and ready to go now. As you can see, I put them like this so I can mount them on the wall later and we're moving on to the next step. Step nine, we have the lid assembly. So what we're gonna need is the rep box two lid here and we're gonna need the frame pieces here and we're also going to need the acrylic right here, the plastic. So we wanna be very careful with this. We don't wanna over tighten anything while we're doing this because you can crack this and that would not be cool. There is a link, you can email support and they will give you a discount piece if you do crack it. The first thing we need to do before we do anything is we need to actually take the backing off here. After you get the plastic pulled, what you wanna do is flip the cover over and install 11 of those screws in the screw holes here. Now you wanna ignore the very outermost screw holes. Those are gonna be for the hinge and we haven't got there yet. Once you get that done, you can flip over carefully. There we go. Flip over the lid and we'll be working from this side. Next, what we wanna do is start putting these frame pieces on the back and when we do that, we need to put our glass in first.  Now, one thing to note when you do this, there we go, that there's the bigger hole here and that's gonna be for our handle. So push this all in, make sure it's all good in there. Then we're gonna take our larger piece here and we are gonna put that finished side up. So that piece will go on like this. Okay, so that's the bigger, thicker piece and that's down by your handle.  You can see them here and those go towards the bottom of the door here. So this will go on, it'll get pushed in and it'll look just like that. The last piece will press on and now you have the back frame of the door and we're sandwiching that acrylic between and from now, what you need to do is grab some lock nuts and we'll go ahead and put lock nuts on all of these and tighten them down. Don't over tighten these. You do not want to crack that glass or any other parts but grab 11 lock nuts and we'll get these tightened in. Now we got all 11 of our lock nuts tight. So this is the bottom where it says rep box two and the top is gonna have our hinge because this is gonna open up like this. The next step is to install our hinge. So what we need is that other top panel here and this is going to matter based on the orientation you want your exit holes. In my case, I want the exit holes in the back. So I'm gonna use these holes here. If you want your exit holes in the front, you would spin this around and your exit holes would be closest to this glass or to the frame we just built. Like I said, in my case, I want my exit holes in the back of the top of this box and so what I'm gonna do is put two screws right into here and we're only gonna do two right now. So push up from the bottom, push up from the bottom and lay that right there and take your hinge and you want the, this is your hinge, take your hinge and you have this seam where the hinge is actually at and we're gonna put that face down and we're gonna put it right on top of two of those screws that we just put in. Now what we need to do is take this right here and this is our top hinge clamp and we're gonna take that top hinge clamp and set it right over the two screws that we just put in with the hinge underneath it and we're gonna grab a couple of nyloc nuts and tighten that down. This is a very important part if this top hinge clamp is not put in, it will cause issues later. So grab your two nylocs and screw them on so they are started and then tighten them down. Now what we need to do is connect our hinge to our door and to do that we need to make sure a couple of things happen. Number one, we need to make sure we're centered on here as much as we can to allow the door to close properly. Number two, these screws that we're gonna use have to go down through the door so the head has to be inside here and what we're gonna do is we're gonna take four of them and we're gonna push them through where they need to be and all the layers here actually are nice because it helps them hold them in place. So you're gonna take four and it is a little bit hard to get them started and push through, just take your time and they'll go. But remember, these have to be pushed down through the inside so I got them all pushed in. Now, the hinge needs to be centered on here as much as possible and in order to do that we need to look at how everything lines up in this crevice and make sure that it's not crooked this way or forward or back. So make sure you're straight in here and make sure you're lined up, otherwise this might not close properly when we go to close it. But once we got our four screws in, one, two, three, four we need to flip this over and start some nylox on the bottom. Once you're sure everything lines up really nicely and we're centered on each side, go ahead and tighten those down and make sure you're completely tight and it's as close as possible to that board. Make sure everything's pushed together really well. All right, step number 12, what we need to do is install our handle. If you have a seal kit like I do, you need to break this handle free. So there's some tabs in here that we need to break off. So there's three on this side and three on that side and that's gonna allow the center to turn. Now once you break these free, this handle will turn. If you do not have the seal kit, you don't have to do that part. Now what we need to do is take the piece here and grab a couple of our little square nuts and they're gonna go in right in the sides here. So there's gonna be one and two and they just push in each side. Install our lock into the door. So we're gonna press it through the front and we wanna make sure that when we do this that we install it so the lock is locked while the key is horizontal. So I have that up, I got the nut that needs to go on it. We're gonna spin that down and lock that in. Now we don't want to over tighten because we don't wanna break that acrylic. Then what we need to do is make sure that we're in the locked position which would be straight up and down and put our screw back in the end of our lock. So I'm gonna hold that, you can kinda see and it'll hold itself in place once you get a little tighter. There we go. So now what we have is our lock installed and you can see it on both sides here. So the key is here, the lock is here and when we turned that key, it'll unlock itself. Just like that. Step 14, we're gonna start installing the side panels. In my case, I have some custom panels that these guys sent me and they are awesome. So what I'm gonna do is I'm gonna take that and flip that over. Then I'm gonna take my base MDF panel and stick it right on top just like this. Then we have a couple more of these little red brackets left if you remember these. What we need to do is push a square nut down through the center of it so you can use the center hole. From there, we reach underneath and push a screw in from the back and this one needs to go through, in my case, the outer plate and I'm gonna flip this around. So if you see this, this is the top corner of the bracket up here. Then we're gonna take this and it needs to go on that screw and it needs to screw in in that orientation right there. So in this case, I'm gonna spin it on there and just make sure it starts okay, that my hole is lined up and it appears that it is. So we can actually spin it on until we get to the bottom. Actually, it tightens pretty good like that and I believe it's gonna be in this orientation. So now we need to install the base and the rear on here and I'm gonna give you this view and then I'm gonna switch out in a second. But what I have is the top of the box here and the bottom of the box here. There's three holes across and two and then two and this one is important as well. So we're gonna take our base. There we go. And we're gonna set it right into those holes. Now you'll need to turn this one about 45 degrees to get it into the hole that it needs to sit in right up here. So push that down, make sure everything is in and then on the inside, what we need to do is take our bigger piece here, push this down and make sure that is in there as well. So if I turn this towards you, there we go. So now this is the bottom and we just put in this piece here. Now that has to be in before we put the other side on so you wanna make sure you get that in there and seated properly. Now we take the other side that we had and we put the same bracket on and we're gonna lay that right on the top and hopefully we're gonna match up all of our holes and they all should just pop right into place as long as they're all lined up and we're gonna push that one in. So take some time, line up all of your joints here and they should just slot right in as long as they're all in the right place. So I don't have this one right, let's see, there we go. That one and this does take a little bit of time to go around and kinda get it on but it will go on with some patience and some trying. So we got the top lid on and what we need to do is just install the bottom two screws and I got this corner done and I'm gonna work on this corner next but I just wanted to show you this because we do just need to put these two in at this time and we just need to go just until it's snug. We do not need to over tighten these. If you over tighten them, that's bad for the 3D printed parts. You can break the MDF panel and we don't want that. So just screw it down till it's snug. It's nice and tight on there and now these two are tight. We need to flip this over and do the same thing on the other side but be careful, remember, the other side's not attached yet. Step number 16, we're gonna install the top panel and the door assembly. So this is the top of the machine here and we are gonna spread out just a little bit. We're gonna spread out those two top panels. Then what we're gonna do is take our top door assembly here and we are going to get them pushed in and placed into the cutouts. So there's that side. You may have to open the door. There we go. There's this side and then when it's ready, it should all clump back together just like this. So when it's all pushed together, the top is on. Remember we talked about the top ones I wanted to come out the back here? On the front, on the bottom it goes out the bottom. So then what we wanna do is take our screws again and we have one, two, three, four, five screw holes right here and we're gonna go ahead and we're gonna take those screws and get them tightened down but do not over tighten. We don't wanna crack anything. Next, we're gonna put the bottom bracing in and you're gonna take the long piece like this and it's gonna go in just like that and these slots need to face inside.  So just get these in, make sure they're not completely tight so it can still flex a little bit here and then we'll tighten them down in a minute. We wanna take our bottom brackets, put them into the slots down here and then slide them up until they clip in to the top one. So take them into the bottom, slide it up, match it up with the top one as long as it's all matched up and everything is in, now you can tighten these three. These three are now tight, everything's in and the bottom brackets are good to go. Next thing we wanna do is install our door stop. So there is a screw hole right here. We're gonna push a screw through that. We've got our screw through here. Now what we wanna do is install our door stop like this so these are facing down.  Grab the included little tool here, put that over the nyloc nut and use your allen wrench to tighten this down. Now you just want it to be snug just where there's enough friction, just a little bit of friction on there but not super tight because this thing needs to move. How that works is this will come up, you'll pull your door stop out and it'll stop right in the little slot, right in the little slot inside of the door panel just like that. Next thing we wanna do is put our plugs and exit fittings in. I've zoomed in on the top of the box and you can see the other screw that I messed up right here is not pushed down in. I actually have to cut this off and start over. That is, it's very important that you make sure that these all twist in by hand or very light force because if they get stuck and go in sideways on one of these nuts, they don't come off very easily. I'm not gonna use the top for anything yet so I'm just gonna go ahead, so I'm just gonna plug these all in. So how that works is you just push them in and then push them down.  So I'm gonna do all of these and then we'll go to the inside. Now I wanna put my nozzle fittings in here and then the rest of the plugs. So you can't see back here, it's kinda hard to see but each one of them has this hexagonal hole right here and this is the nut of the nozzle.  I'll do one more here and then I'm gonna figure out where they all need to go. Now, until I really get filament in the box and figure out exactly where I want them then I won't know but I'm just doing this for the video so I stuck my nut in the back, grab the nozzle, turn it up and tighten it and that's it. As you can see, I installed them all, I just did all six because I'm not sure what I wanna do yet and I put plugs in all the other holes that I didn't use. It's super easy to do this part, it only takes a few minutes and we're on to the next step. Now if you don't have the seal kit, we can move on and we're completely finished, we just need to do the rollers on the inside. If you do have the seal kit, we're gonna do that next. So the first thing you need to do is take this and we're gonna insert some nylox into these two holes and that is a lot easier said than done but we're gonna make it work. You just have to get them in there in the right orientation. So I got them installed there. Now what we need to do is install this into the box and how that goes is just like this. So it'll sit in there just like that. Now there's two screw holes right here already ready to go for us. So we're gonna take a couple of the screws that came with the kit. I'm going to push it through and connect with those nylox. So as you can see now I have the two screws sitting here. They're through this and into the nylox in the back of that. Now we just take our allen wrench here and we'll tighten those down so they're nice and tight. Now it's nice and tight and secured. The next thing we need to do is install the side pieces for our, the side pieces for our seal kit. So there's a little slot right up in here in the side and the top rests right along there. So the top just goes right around there like this and the bottom rests right into a groove right here. Now we have both sides in and it should look just like this. Okay for the top seal we're gonna grab our top seal and it is literally gonna sit right in here over the top of these existing nyloc nuts. For the top seal you're gonna push a screw down through the center. You're gonna go in and find the center hole which is right there and it's all gonna lock in around those red brackets and there's two holes in it that will go over the existing lock nuts. Then what you wanna do is while you're holding it, I know it's hard with my hands in the way here. Oh look it stays. So you wanna take your allen wrench in the top and just thread a lock washer on the bottom. You can grab the little key that comes with it and this thing is pretty awesome. You hold it with your allen wrench, you can tighten it in so it's nice and tight. So this top one is good to go and we're ready to put our seals on. So we're gonna take our gasket and peel back the covering that's on it and we're gonna start in one corner here and press it in. Make sure it's tight and make sure it sticks and we're just gonna come across and pressing it as we go and when you get to the very end, you may have to trim a little bit out. So it looks like I will have to trim a little bit out but that's okay. So I'll take my scissors, I'll come up, pull it back just a little bit, trim it and we're good. So the top is now in. We're gonna do the same thing for the bottom gasket now. We are gonna go right to the bottom here. We're gonna stick it, come across and just stick it all the way down until you get to the very end. Again, you might need to take a scissors and trim this a little bit and we're good. So this completes the bottom and the top seal. So we need to do the sides. I went ahead and did this side the same way. I started at the top, brought it down and trimmed it. I have the last piece now and I'm just gonna push it into the top corner here and then push it right down on that new bracket that we put in. Now we have a full seal kit. There's seals here, here, here and down. So if we shut our door, you can feel it. Oh yeah, you can feel it in there. Now, because I have the seal kit, it comes with this lock and that'll lock it tight and it really is squishing down against the seals we just put in. And it does a pretty good job. Now we're moving on to the roller assembly. This is all the stuff we need for the rollers. So we have all the cutouts here and here and we have the bags of parts here. So what we're gonna do is pull all these parts apart and start the assembly. So I have everything laid out here. These are our screws and our spacers and our bearings and all of the cutouts are ready. We're gonna prepare the two end ones at this time. So what we need to do is get the four shorter ones. We're gonna push two through like that. Take two spacers, put them on. Take two bearings, put them on. Take another panel, put that on. Then we're gonna take our nylock and tighten these down. These just have to be tightened so the nylocks are tight and not over tightened because you don't wanna crush any of this MDF that's cut here. Take that key that came with the kit along with the allen wrench. We put the key over the nylock like that. We put the key over the nylock. We grab this side of the allen wrench and you can either twist the key or you can twist the allen wrench, either one works. So that gives you one end. We need to do one more of these to make two ends and then we need to do the center ones. We need to make the center rollers. So we take the longer screw to make a center roller and we push it through. Take a longer screw on both sides here. So now we have that. Then we take two spacers and we put those on. Then we end up with that. Then now we need some bearings. So take a bearing and drop it on. Then we need another panel. So I'm gonna take this panel and I'm gonna push it on. Make sure you're going in the hole like that. Another set of spacers, we push them on. Take your bearing, push that on. Then we take another panel and we push that on. So now we essentially have two sets in there. All we have to do is tighten the two nylocks down and we have the center channels here. When you're done assembling, what you'll have is two single end ones and five center ones that are doubles. Now it's time to put them in the box. So now all we have left to do is put our wheels in the box. So I'm gonna take my single and put it on the end. Take the other single and put it on the far end here. And then because I don't know where, what filaments I'm gonna throw in here yet, I'm just gonna toss these in at different areas. They're real easy to slide around, which is awesome. So now that all of our wheel assemblies are in, we are completely done building the rep box too. All right, we did it. We finally completed the rep box too from Repcord. This thing is pretty awesome. The build is great. I tell you what, the build takes a while, but if you're patient and you read the instructions, you will get it done. It really takes reading the instructions because if you don't, stuff goes wrong. For example, when you put the little square nuts into the red printed pieces that hold everything together, screw a screw down through them and make sure they're straight before you assemble it. The reason I say that is if it goes in crooked like this one did, this one's sticking up pretty good because I can't get it back out. It is stuck. I'm gonna end up probably having to cut it off and then going from there. But in interest of finishing the video, I wanted to show you that because this is a mistake I made. A couple other things I really like. I love the panels. The panels are awesome. They look so good on the rep box. I did get the seal kit so I have the key here and that is really cool because when you turn it and lock it is really tight. It came with the seals as you saw on the inside there. We have everything installed on the inside with the rollers and overall build quality is very good. Overall, I think you're gonna love it. If you have a use for a box like this, I would definitely suggest this. I gotta find a place to put it in the new space and figure out how to use it with the cabinet I built. But we're gonna do that. I really appreciate Pooch.  We have the wall mount kit, which I did not show today and all the good stuff. So thank you so much, Pooch. I really appreciate that. I hope you guys learned something and as always, keep printing. Hey everybody, if you liked the video, give me that thumbs up. Please click that subscribe button right down here and the little bell right over here if you wanna be notified the next time we put out videos or go live or anything on this channel. You guys rock and I really appreciate it.