Redbox is a research data catalogue. It's basically a workflow system that allows people to describe their research data holdings and then make that metadata available to different consumers of that information such as RDA. Mint's the cousin of Redbox and Mint is a name authority system so it provides information about parties such as people, activities and services and it's basically a way of giving us an authoritative name lookup that what we saw in institutional repositories was non-identified data being fed around when you aggregated it was just a mess and we very much wanted to avoid that in Redbox and Mint and say look we will link things properly and we'll describe them in such a way that if someone else is describing the same thing that you can make that association properly. And we wanted a system that a developer could jump into and get documentation information and see if it was stable, a user could get it up and running quite easily and see how it was providing utility to them and that also linked into national and in the future international schemes so that we're going to a new stage now where the development of Redbox and Mint hopefully and fascinating is far more of a community based effort rather than a core project working through it. I've been working to establish a technical management committee over the code who will provide assistance to those people wanting some code back to the core and importantly next to that is a user, a Redbox user group who is basically implemented across libraries, research offices, universities who are saying here is what we need and here is how we need it to look so the development community can respond to that. These are non-trivial things to set up in at least an accusive level we are highly cognisant of the fact that our user community has provided a lot of information to us over and above especially for newcastle with their project expectations and so that's ultimately led I think to a better product but it has meant that we are keenly aware of how important our community is to our ongoing success. We're also mindful that smaller universities have often got a lot of pressure on them to meet national reporting and information demands and don't often have a lot of resources for this providing Redbox as a service to them again gives them to my mind an ability to report on data and join that national data commons without having to do a huge amount of software project work to do so we should be aware of what other countries are doing but not just see it as something that we defer off to the US or the UK that we actually have really good strong systems and we have good staff who are finding out really useful information and that information getting out internationally is really helpful rather than just sort of expecting to be guided by other groups.


button. It's one minute pass and then it will just get things started. So hopefully everyone can see the slide deck I'm sharing. And as usual, let me find the notes here. The notes are here. I'm going to put this on a chat window. So this will take notes here. But right. So let's get things started. Pretty short list of agenda topics. Just wanted to, I mean, I think we've been working on this for a few months. I mean, when I say we, it's mostly been George. But I think we're getting there in terms of getting the core team page updated. I think it'll be good to get this thing sort of you know, make this go live. And I wanted to remind, I was thinking about doing a blog post about the core team anyways. I mean, we had a slight change in charter, which we haven't necessarily heavily publicized yet. So I think that would be a good thing. And then George and Ben, I don't think I introduced the two of you to the wider community through blog posts. I think there'll be a good opportunity to do all of that. So we'll go through that real quickly. And then I created a like a sample survey. I mean, somebody already took one, I assume it was Benny or somebody else who was we're taking a look at it. But I think we're somewhat close to that one as well. Good. I think there were about seven or eight questions. And I thought of one more over the weekend that we could potentially add. So we'll go through that real quick. And I think back in January, I talked about you know, looking for ways to recognize someone are more regular contributors. So I started with an issue and created an MR to create a like a sort of a badging program for top contributors. So just want to go give you a quick preview of that and working on a couple of things so that you'll probably see on the issue. Obviously, like trying to work with our marketing team to finalize the design for badging. And, you know, I thought it'd be nice to have some fun, like a merchandiser swags to go along with, you know, just a badge to recognize the contributors and we'll talk about any other business topics. I had one listed there in terms of like the May QWERTY meeting, but we can talk about other things as well. Anything else that we should add to the list of topics here? Or everyone okay? Cool. All right. So if that's the case, George, I guess I can just turn things over to you. You can just give us a quick rundown of, I mean, I think people can see the MR and see the work that's been going on for the past few months. But George, if you want to give us a quick update on what you've done so far, I can even stop sharing. And if you want to show us like the preview of what the page is going to look like, you can do that as well. Okay, I have to run the middle month first. But in overall, this will update the core team layout page and also the alumni page. We can see the magic west and add any feedback if you want. Actually uses the same layout as the company team page layout. So I think it will improve the both pages. And I think it's in good shape to merge this and improve smaller bits later. Yeah, just taking notes here. Yeah, I mean, I agree. I think we're at a stage where I mean, it doesn't need to be perfect. Like we're supposed to be iterating. I mean, I think we edited the text. And then also, I think we got some help to also improve the layout as well. Yes, yeah, I think what I'll do is I could probably ask David to merge this. I mean, I can do that as well. But it might make sense to just have David just merge this and just go from there. And then get this done in the next couple of days. But hi, Mr. Remy. I don't know if you have any feedback or concerns or that also sprints us in the description. Sorry for that. So we can see the result in the description of the magic west. The actual result. Yeah. Yeah, maybe we can, if we want to see it live before we merge, we can, I can push the branch to the canary canary problem and so that we have a review app. Yeah, should we do that? So you want to run this live or we want to add something here, Remy? Yeah, I will, I will put the branch just so that we can see it in a review app from the upstream. Okay. Yeah, but the screenshots are ready. I can run this locally if you want. I'm not checking. That's a good idea. I can share my screen if you want. Yeah, let me stop sharing so you can go for it. Let me see. Just waiting for the middleman to start, please. I think you should be seeing an empty tab right now, but just waiting for the middleman to take a while. Yeah, it's always, it's almost there. So this will also use the same YAML file for the team members and I've added, according to Yarex suggestion, another YAML file for the Courtney Malumni members just to not to be mixed with the in regards of performance, I think that's okay. So should we come back to this while we're rating or is it almost done? So it will take a minute or two.  Yeah, let's do that. So yeah, if you want to stop sharing for a few minutes. Okay. All right, cool. Thanks. It's always hard trying to do a live demo. I'm gonna figure out. Okay, there we go. Cool. So all right, we'll come back to that. And then the other topic that or issue that Vinny raised, I think was before the Courtney meeting last month was getting feedback from the first time contributors. And I think we worked on like a seven or eight questions. And let me open this created a sample survey that we can use. So this is sort of, you know, what people will see. So I think the first several questions are multiple choice like, you know, how long did it take to set up a GDK? You know, were you happy with the response time from any of the deep lab team members? After submitting an MR with the feedback, you know, useful? Were you able to help to get the help you needed? And then rest of the questions are more open ended. You know, what was the most difficult part? Suggestions for improvement?  And the other question that I thought of adding after number six probably is, you know, I wanted to get a feel for why they wanted to contribute to get lab in the first place. I'll make that open that ended as well. I thought about making the multiple choice, but I think the list will get really long. So I think we can just make it open ended. And then if we see a trend, we can turn that into multiple choice as well. But that's sort of you know, it's pretty quick and simple. I mean, I've used SurveyMonkey in the past and I mean, it's pretty nice. And even in terms of reporting, it charts our graphs for multiple choice type of questions and also allows you to export reports into a spreadsheet like a Google sheet. So it makes management pretty simple. So not sure if you, I mean, feel free to even take the survey if you want to. I think I'll be able to delete any of the responses that I get as part of the test. But that's sort of what the survey looks like. And I'm just going to see, you know, if you guys had any other questions or or thoughts or wait a second, I'm not even sharing right now. Sorry about that. But so, yeah, sorry. So I guess you didn't necessarily see the questions that are that are listed here and then what the format looks like. But any questions or thoughts on this? And I think I mentioned this last time, I send out an email to people who contribute for the first time to offer them our, you know, MOG with the hashtag that says my first MR merged. And it's been kind of fun seeing people kind of tweet that on the on the Twitter. So I'm pleasantly surprised a number of people who've done that. You know, when I ask them to do it over email. When I send that email out once a month, I could definitely add a link to the survey and just, you know, make it clear that it's voluntary, but, you know, look to get people's feedback on their experience when they contributed for the first time. And, you know, it will be anonymous. I want to keep it anonymous. So the responses will be honest. But just want to see if you guys have any thoughts or questions. I mean, definitely want to keep it pretty short. I don't want this to be like intrusive. The survey is like asking 20 questions like nobody will take them. So I definitely want to keep it under like, you know, eight or nine questions. But yeah, I think that that's super cool. Yeah, seven questions. Yeah, I mean, we'll see what the response rates are. I mean, typically the last couple of months, the first time contributor has been anywhere between like 30 to 50 people. So, you know, even if like the response rate is like 15, 20 percent, we might get some decent sense in the next couple of months. But yeah, I think it's pretty cool. One question that I think might be interesting would probably be were you satisfied with response time for your MR? Yeah, so I have that. Yeah, sorry. I scrolled through this one when I was sharing. But yeah, that was like number two. Were you happy with the response time from GitLab team members? Yeah. But yeah, I mean, like I said, feel free to like a click on the survey link. And if you want to actually test the survey by taking the survey, I mean, that's completely fine. I'll probably just, you know, what I think I already, I think I mentioned, I already got like, I'm guessing it was Vinny who already like respond, like, you know, he submitted the survey response. But I mean, feel free to do that. You're not going to hurt anything. I just admitted it. Cool. All right. Thanks. Cool. Okay. So, it sounds like people are pretty much in agreement.  I probably won't be reaching out to the first sign contributors from 11.8 until probably next week or so anyways. But if you have any questions in the meantime between now and like maybe under the weight, feel free to let me know. Cool. Okay. So, all right, George, are you ready or? Yes, we can. Okay, cool. All right. Let me go back and let me stop sharing now. So, I think you can see the screen now. Yep. So, this is the new core team layout, the page layout. So, it includes a header section where it's, and also some two paragraphs below. The core team members, I've used some partial data, if you remember, I asked you about this to just use only some partial data on your profiles and your and the winners. Yeah. Yeah, it looks nice. That's it more or less. I think it will improve the overall layout. And I also have the alumni, the core team alumni page, which includes the past members and also the section that mentions that past team members that are now employees, some of them. I've also used the same partial template for those two. So, cool. Yeah, I think it looks really nice. That's it. We're going to take another look and add any feedback or move this forward this to David and Merz. Yeah, that works for me.  And then, well, maybe we'll just, you know, ask David to merge it by the end of the week if there is no other feedback. But yeah, that might be a good thing to do. Like Remy was suggesting, just allow people to review it through the review app. All right. Yeah, I just have a question about the alumni page. I see that we are changing the path. I just want to make sure that the old path redirects to the new path. You mean the URL path? Yeah. I think it will live. I can try this. I think it will redirect. So it uses the same part again. I'm not sure about if this is supposed to rewrite the URL. The type slash community, it should go to slash core team slash alumni. Yeah, I think it should. So we should probably make a redirect from community slash alumni. So yeah. Yes, I think core team slash. Yeah, I think it's similar to how we do it for just the slash alumni page. Indeed. And the core team, I think redirects there. Yes. Core team redirects to slash community slash core team. It should work the same way. So if you can pinpoint where this, I think the redirect works. This will go to here eventually. Cool. Good. Okay, cool. Yeah, I just edited it out there. Make sure that redirect works. Okay. I can stop sharing an array if you want to go more. Yeah. Cool. Thanks. Cool. Looks good. Let me actually share this time. There we go. Hit the share button. Cool. All right. So it looks good. I think we're ready to move on both of those items. So the last major topic is recognizing top contributors. In terms of code contributions, obviously there are other ways to contribute to GitLab, but specifically for the people that have been making regular code contributions, I wanted to figure out a way to sort of recognize these people. So you see the relevant issue there, and then I'll think I'll just go to the preview page for the page that I'm working. I mean, it's still pretty rough. Working with the marketing team, as you'll see on the issue to get the banner going, and also develop some sort of a badge or icon for each of the categories. So, I mean, starting with 2018, I just wanted to recognize what I think are more regular contributors in terms of code. So you'll see, I mean, I don't mean just to be a ranking, but I wanted to have a grouping of people in like three tiers. I mean, David and I initially talked about goals, silver and bronze, like like you do in sports or Olympics, but then we realized that my confused people in terms of our like a product hearing. So we've been experimenting with different terminology, like the top category is mastered, and you have expert, and then you have like advanced. I was at a scale conference in LA over the weekend, and I was attended a session that was run by somebody responsible for opensource.com, and they have a lot more, like they probably have like 10 different tiers. So the other, I mean, terms they use are like a superstars or stars. So, well, we'll probably try to finalize the terminology, but this is sort of like a 30 or 40 people that I sort of wanted to recognize in terms of making contributions. I mean, obviously, near the top, like Vitality and George, you did an insane amount of have merged MRs.  And I think I mentioned like a number, like a number of MR, like in terms like number five is sort of is sort of a you know, a threshold for for for the advanced here, because thinking that I mean, this requires people to make at least at least have one like merge MRs like every other month, roughly speaking. So I thought that was sort of a reasonable place to start. So that's sort of, I mean, what I wanted to share with you and the other stats that you'll see here is the number of people that have made contributions last year was, you know, over 400. And the total number of MRs, merged MRs were, you know, 1464. So I mean, pretty high number of contributions. But this is one of the like things that I hopefully we can launch in the next couple of weeks. But it's been starting to do some background work over the last last couple of weeks. But just wanted to share that with all of you and get your take on it. George, it looks like you're about to say something, but yes, you're right. And does this include the contributions to only the GitLab C project? No, this is that's a good question. I should be pretty specific. So let me look at my dashboard. So include CEE, omnibus, GDK and runner. And I don't know why I'm blanking out. So give me a second here. Second. So ECE omnibus, runner, GDK, pages and shell. That's sort of the projects that I've been tracking. I should probably I could probably include more, but that's sort of so it goes beyond CEE. But if you look at the numbers, you know, obviously CEE is going to be much larger than some of the other projects that I mentioned. Yeah, I mean, the other like, I mean, speaking of projects, the other app that I've noticed recently that I would or I've been seeing more community contribution is actually GitR. And I think George, you you've had number of contributions there too. And then I mean, interesting thing is like GitR, I mean, they don't follow like our traditional milestones that we have at GitLab. So the slicing of data for GitR is a little bit more challenging, but I mean, I need to talk to Eric at some point, but I definitely noticed a jump or bump in that project over the last three or four weeks, which which is interesting. Cool. I mean, what do you guys think of these like a terminology or categories like master, expert in advance? Does that seem reasonable to you guys or do you think that's horrible? Like I, you know, yeah, yeah, if you didn't have the product category, gold, silver and bronze, I think that would have been a good thing to go with. But go ahead. Sorry. Yeah, I am reading the discussion in the issue. Yeah, I see that we have some some other suggestions from Marcel. Right. And I'm not a fan of master, expert in advance. I think we can probably have something. I don't know. I have, I'm not sure I see the difference between the three levels. We could at first sight, we could omit them all together or maybe just list the contributors and also maybe that's yeah. But I mean, so if the challenge is like we want to badge these like a group of people, right? I mean, rather than just having one. So I mean, I'm looking at the issue here. So I mean, obviously difference between superstar and star is like pretty clear. I think I don't know if you notice a difference with like an enthusiast, for example. Yeah. So when I saw that presentation from the open source.com person, I was drawn to superstar versus star. But Remy, I can see what you're saying like master versus expert, like it's not necessarily clear which level is higher. Right.  But yeah, I mean, that's a good feedback. Yeah, I would try to give a suggestion in the issue. Okay. Okay. Yeah, they'll be great. So yeah, I'm trying to like a close this pretty quickly because I mean, as you saw like a comment from, I mean, I guess it's not this specific issue. I opened a separate marketing issue with Yarek and and also loop to create the badging and the preferences to have our terminology nailed them pretty quickly. So I completely understand. In that case, I think going with superstar, star and enthusiast would be better than expert and master at the moment. Okay. I need to think about if, if I can come up with something better than that about I think if you need to merge it quickly, then that's better than master expert at once. Okay. Okay. Good, good feedback.  But that doesn't mean we need to, we can do a sloppy job just from the get go.  I think that's a bit much. But yeah, that's how they do it. But I mean, they've been very successful, right? They, I mean, the interesting thing about open source.com that I didn't realize was that this is just all honorary thing. You don't even get a t-shirt or any swag at the end of this. I mean, obviously, they are dealing with a lot bigger volume of people. But, but despite that, it's been very successful, which is pretty impressive. So it's, it's all about, you know, reputation in the community. Cool. Thanks for appreciate the feedback. So I guess there's a slight preference for, for this option versus, you know, what I have on the, on the web page, which is fine. Cool. Yeah, I mean, so hopefully this is, you know, obviously, we, you know, we've had a court team for, for a long time. But I mean, this is another way of sort of, you know, widening the reach of people that we recognize for good contributions they made, made to the community and get lab. Cool. And then, yeah, the threshold is sort of, I mean, somewhat, you know, arbitrary. But I mean, I thought these were like reasonable starting point. So that's sort of the threshold for different levels there. Cool. Anything else or ready to move on? Cool. Okay. On the last slide, I mean, the only item that I had, I had, I was kind of looking ahead for the next couple of months. And they realize our May court team meeting coincides with Contribute in New Orleans. And I think all four of us on the call today will be there. And then I think the only court team members that are not going to be able to make it are Jacopo and Vitaly. So, you know, if it's okay, everybody will could probably just cancel the call that, that month and then, you know, resume in June, if there are no objections. Yeah, offense. Was it? Yeah, that's fine. Just, just to note that I won't be there, actually. Oh, okay. Oh, that's too bad. Is this the first, like a summit or Contribute, you're missing, Remy, or? Yes. Yeah. Okay. That's too bad. Yeah, it turned out like I, it's like I was talking to a number of other GitLab team members, there are several of them who can't make it for various reasons, but I mean, it does happen. Cool. Okay. Any other topics or anything else that we want to discuss? We've got about 10 minutes left. I can give a quick update about slack access for court team members. Yes. So, I mean, the tickets with the infrastructure team, so they just need to implement what we have on the handbook update MR. So, it's been pushed out another, like, I mean, they work through these sprints and I mean, I understand they have a lot of things to do, but hopefully, I mean, you can see it on the issue that it's been pushed out again, but hopefully it'll be done by, like, a 23rd of this month, but that's sort of where things stand. And let me try to find the issue. Right. I think we agreed on a solution that treats pretty much everybody the same. It doesn't matter if it's a court team member or a good lab employee. If he doesn't need access to the information, then he isn't invited in the channel and can't join it. Right. So, I think that's a better solution versus just preventing the court team from accessing some channels. Right. So, yeah. And then you probably saw on the handbook update MR that I created for Slack access and CID has already, like, approved it. I mean, that's actually been, like, probably about a month ago. So, and then nobody else has chimed in, I don't believe. So, in terms of policy, I don't think there's any disagreement. So, I think we're good to go. I think it just needs to be implemented technically. But, and I'll finally found the issue. So, like, here's the issue on their infrastructure. You know, feel free to chime in and ask what if this will actually be implemented at this sprint time frame. If you want to do that. Yeah, I mean, I think we can even merge the handbook because in the end, the technical side is just making sure that everybody follows the handbook. It's not enabling something which just. Okay. Yeah. I mean, I guess we could do that. Actually, Takuya actually asked the same question and my, you know, reply to him was, well, I'm actually trying to wait until it's closer to implementation. But I guess there's no harm in merging the handbook. So, and I can definitely ask David to do that since we already have a thumbs up from CID. Give myself an action item. Anything else? Looks like we're good. George, thanks for all the work on the Quartz event alumni pages. And thank you for all the feedback. Cool. All right. All right. Have a good day in Europe. I'll talk to you guys again soon. Great. Cheers. Bye.


Howdy, guys. IndiePixel here. And in this video, I wanted to cover the basics of Python here inside of Houdini. All right, so just to accompany the Intro to Vex series on the IndiePixel YouTube channel, I wanted to make another series about Python because Python is very popular and is very powerful inside of Houdini. Much, much more powerful than I would say Vex because Vex basically operates solely on the geometry side of things where as Python, you could create whole pipelines with this. So let's start out by just learning the different places where we can actually put Python. So this kind of expects that you have a basic understanding of Houdini and Python in general. All right, so just to begin our level, we're going to walk through some of the better uses of Python inside of Houdini here. So let's go up to Windows and let's launch the Python shell. All right, so also take note that I am currently using Houdini 18. All right, so fresh and new. And you can see here that I've already gone ahead and created some code in here. All right, so what we can do with this is we can actually go and access this object level reference right here.  What that does is it gets us a reference to this obj object inside of Python. And with that we now have access to this space in here. Okay, cool. So with that, we can now then say obj dot create node. All right, and we want to pass in a geo node. All right, so we want to create a geo node and we want to give it a name of my geo so underscore geo. And look at that, we've actually created a geometry node. All right, so now let's go through and actually learn a little bit about all that code that we just wrote. So the who module is the kind of the root of all things Python inside of Houdini. All right, and you can go and find out more about the Houdini object model if we come over here and hit the little help button right here and wait for our help to load up. All right, we're going to scroll all the way down till we find the Python scripting option here. Awesome. So in here, we actually have tons of information about Python and how you start to write Python inside of Houdini here. And so the best place to start out is to go to this home introduction. All right, so the Houdini object model, this basically is the root of everything. So by accessing the who module, all right, so Python module, we have access to this who dot node. So if we come up here and we say who dot node and spell that correctly, there we go. There you go. All the way down to classes. So it's one of those kind of really root classes that takes care of all the different types of nodes here inside of Houdini. Awesome. So we come down here, you can see that we have information about all the methods or functions, I should say, that are available inside of the node class, which is inside of the who module. All right, so the who module and the node class. So what we're doing currently is we're going and looking for a node inside of the OBJ scene here. Okay, so if I come over here, and actually move this, make a little more room. So now what I can do is I can access this geometry node right here. All right, so we can say, let's actually hit up on the keyboard here, and let's actually store reference now. So I'm going to call this geo node is equal to the result of this OBJ dot create node. All right, so I'm going to hit enter again, and that creates another node right here. All right, very cool. So we can do since we now have a reference to that particular node, all right, because create node returns a node. And if we come over here and actually look for that. So we have the adding and removing. So we have this create node method here. All right, so it returns the who dot node. So with that information, we could say geo node dot create node. So remember now I have a reference to this my geo one right here. So you say, we're going to create a node inside of that. So I'm going to create a box inside of this guy. So I'm going to say box, and I'll give it a name of my box like so. All right, so if we jump inside of here, you can see now we have a my box node, and we have some geometry in here. All right, we can keep doing that for days. All right, so you can come over here. Let's say this time I want to create a sphere. All right, we'll call this my sphere like so. And there we go. We now have a sphere in our scene. Pretty cool stuff. All right, so that's pretty much the basics of just getting started with Python inside of Houdini. I should also note that you can actually go and load the Python shell from any of these panels over here. All right, so if you come over here, you can add a new tab. I usually add it down here. All right, so I'm going to go in here. And you can see now we have the Python shell. And the cool thing about this is I actually still have references to my variables or my objects that I created in that other Python shell. So I can say geonode.createNode like so. And you just make sure I spell the function correctly.  I'll call this my subnet. Like so. And look at that. So we saw references to our actual nodes that we got in this other Python shell. So you can work between those two. They're exactly the same. It's just this one's floating and this one's docked. All right, so with that, let's move on and talk about other places where we can go and put Python and how we can start to build up quite a nice set of foundational knowledge of how to use Python inside of Houdini. The next area that is of interest when you are starting to work with Python inside of Houdini is the session module. All right, so if we were to come up to Windows up here and we go to the Python source editor, what we can do is we can write to this who.session module. Now this who.session is basically a part of this particular hip file. All right, so it'll actually go. It's embedded into that hip file. All right, so which is why I should probably go and save this to my desktop. I'm just going to save it there for now. I'll just call this Python 01.hip. All right, so now this particular Python module is now embedded into my hip file. So what we could do is we can start to write some code that we can access from the shell. Okay, so let's say we want to kind of replicate what we're doing over here. All right, so maybe we'll take this a little bit farther. Let's get rid of all this stuff. So let's create a function. So we're going to say def. All right, for definition. And we're going to call this create some nodes like so. All right, there we go. So that's the start of our Python function right there. So what we need to do is get a reference to obj. All right, remember, that's this area right here. We want to get this object so we can add stuff to it. So I'm going to say obj as the variable name is equal to who dot node. And we're going to give it a node name that we want to look for. In this case, we want to look for obj. All right, so just like that, we now have a reference to our obj. And then I want to go and create a new geometry node so we can put stuff in there. All right, so we're going to say geo node for the variable name, because we're going to store this, we want to constantly have a reference to this particular node that we're creating. And we're going to say obj just like we did before dot create node. And we want to create a box node. And we want to call this my geo underscore geo. Now it's very important that you don't have spaces in this. If you do, then Houdini is going to throw an error for you, because it doesn't like having spaces in the node name labels always underscores. You'll notice that if you come in here and you create a geometry node, and you say my space box that automatically adds the underscore for you. All right, so just something to keep note. Also, if you ever want to find out the type of the node that you want to create, let's say for instance, I will go and create torus. All right, and we'll drop that down. You can always go and hit this little info button right here. And you'll notice that in these parentheses here, we have the torus type. All right, so that's what you would type into right here. That's that type of node. All right, so now we've got that all set up. All right, so let's actually see if this is working. Remember, this is our embedded module. We've created a function right here. So let's hit apply. We're going to not hit accept just yet. And now what I can do is I can come down to the Python show. And I can say who dot session. So we can come down here use their little IntelliSense. And we can say who dot session dot create some notes, notice how it's populated in that IntelliSense. So I'm going to hit enter. And you can see I get some errors over here. And that's because I created the wrong type of node. So you can see that at the very bottom of the error message, we get this invalid node type name. And that's because currently, I'm trying to add a node to OBJ. All right. And this is object level stuff. So we don't have a box node, we need to create a geo geo node or geometry node. There we go. Hit apply. And there we go. Let's test this out now. So we can just hit up on the keyboard to get to the last line. And enter and look at that. We just created a geo node. So let's delete that. All right, so now that we've got access to our geo node here, we can go and create our box node. So let's say box node is equal to geo node dot create node. So and let's add a box because now we're at the SOP level. So remember, we have different node types when we're at the OBJ level compared to when we're at the SOP level. All right. So now I have access to the box node type because I'm inside of a object level node. All right. So let's go and save my sphere. All right. Or I'm sorry, my box because what I was going to do next was create a sphere. So let's go and create a sphere node.  So I'm going to wire them together and settle the display flags. So let's go and create node. And let's create a sphere type, which is another type of SOP node. All right. We'll call this my sphere. There we go. All right. So let's hit apply and come down to our Python shell over here and just hit up once so we get to the last function call. There we go. So now we have our my geo node. And look at that. We have a sphere and a box. And what I want to do now is I actually want to wire the sphere into the box. All right. So to do that, we're going to utilize the set input. So let's say set input. Let's look for that. So here we go who.node.set input. All right. So let's take a look at that guy. So all we need to do is give it an input index. All right. Thankfully, both these nodes just have a single index. So that'll be really easy. And then we have item to become input. So basically what we need to do is we need to tell the my box that we want the my sphere node to be the input. And then we need to set the output index from our sphere node. All right. So let's watch this in action. All right. So I'm going to say let's make another line here. We're going to say box node.set input. All right. And that works because remember, the box node is a node. So it's a who.node type. All right. And the node type is box. You can always go and actually print this out. So let's come down to the Python shell. I just want to make sure you guys understand this. So I can say who.node. And actually I need to store this as a reference. So let's get the box node. And let's say that it's equal to who.node. And we need to get a reference from obj down to my geo down to my box. And then what we can do with that is we can say print box node.type. And look at that. So it's a SOP node type. And for SOP box. So that's the type. And it's a SOP node. All right. So I just want to make sure you guys saw that. So now that we know that it's a SOP node type or of node type, all right, we can set its input. And I'm going to say we want to set the zero input. So the first input there. And I want to set the input object as the sphere node. And the output from the sphere node is going to be zero. There we go. So let's hit apply. Very cool. Let's jump open out and delete this guy. And then come to our Python shell and hit up twice there or three times to get back to our function call. All right. And there we go. So now I have my geo. And look at that. Our sphere is now hooked into our box. Awesome. So what if we wanted to actually set the display flag for this my sphere? That's pretty easy to do. All we need to do is come over into our Python source editor here. And we're going to say sphere node. All right. And we're going to say display or set display flag. So and we just need to set it to one for on. All right. So let's hit apply. And let's go and delete everything here. And let's hit up once and hit enter. And it looks like I missed an S. So let's set that guy. There we go. Hit apply. And hit up one more time. Let's make sure we clear out our OVJ scene there. There we go. So now inside of here, you can see that my sphere is now set with the display flag, but the box has the render flag set. So we just need to fix that. We just need to say sphere node dot set render flag to one. Like so. All right. Cool. So let's go and run that one more time. Delete these guys. Hit enter. And look at that. We've now dynamically set up a node structure. Obviously, it's not very fancy or anything like that. But that should give you a basic idea of how to start to work with nodes and how to create nodes and manipulate them, stuff like that. So I want to show one more thing. Now we've got this definition or this function up here all set up. We can actually create a shelf tool for this. All right. So let's go do that. I'm going to hit accept over here. All right. I'm going to minimize this here and get rid of this geo node. All right. And then let's open up the shelf area here. I usually keep it closed because I don't honestly use the shelf very much. I do everything down here and code stuff like that. But it's really useful. Sometimes you actually have a custom shelf if you're working on a particular project, you know, at work or something like that. So I'm going to come up here and go to shelves or actually new shelf over here. And that's going to pop open the new shelf wizard here that we have. And I'm going to give this the name of Indy shelf. And we'll say Indy dash pixel for the label. Hit apply and accept. All right. So inside of here, we can also write a little bit of Python inside of a tool. So let's go and right click on the shelf, say new tool. And I'm going to give this new tool a name of node creator, something like that. So we're going to call this make nodes. Good t-shirt actually. All right. And inside of the script editor over here or in that tab, you can write Python. In this case, because I've already typed in a bunch of Python into my source editor over here, I just want to have this particular tool called this particular function. All right. So all we need to do is access the who dot session. Look at that. Create some notes. All right, we're going to hit apply. And accept. And when I hit my tool, I get everything all set up for me. Pretty awesome. And that really is just scratching the surface when it comes to Houdini and Python. There's so much you can do to automate all this stuff. But you know, you got to start somewhere. And in my opinion, that's a really good place to start. Just understanding where to put Python inside of the different areas inside of Houdini. And also just how to work with the notes, some of the more basic functions and classes. All right. So those are kind of the bare bones things. One last thing I want to do is just edit this tool. So I'm going to right click on my tool, go to edit tool, and go back to the options and change the icon because that is just something fun to do. It's awesome to customize your own tools. Yeah. So let's go get a logo here. And I'm going to go and get one of the IndiePixel logos. And look at that. Pretty cool stuff. All right. So I'm going to leave you guys there in this video. I'm going to continue this whole series. And each week or every other week, make a new Python video. We'll start making some tools. And I'll show you guys some more tricks and stuff of how to automate like rendering or exporting. Lots of cool stuff you can do. All right. So thanks so much, guys. Really appreciate it. Talk to you soon.


Hey guys, welcome back to Six Sisters Stuff. Today, I'm walking you through the steps of how to deep clean your Instant Pot. So my name is Kristin and every Monday I share with you a new Instant Pot recipe. So along with the recipes, I like to share with you some tips and tricks and just things that will help make the Instant Pot a little bit easier for you. So today, I'm showing you how to deep clean your Instant Pot. I especially want to thank E-Claw for sponsoring this video. We're going to clean the outside of the pot, the inside, we're also going to clean this bad boy, all the little grooves, and then especially the lid. The lid is very important to clean correctly because if you do it wrong and you put it back together wrong, your Instant Pot won't work. Alright you guys, let's head on over and I'll show you just how I clean my Instant Pot. Now I have been using E-Claw for a while and E-Claw was so kind to send me some new ones because my other ones were, well let's say, well loved. So I just want to introduce you to some of the things that I use. So this is called the Kitchen Dynamo and it's perfect because it's like a little sponge. It cleans all your pots and pans and it does the hard work for you. This next one is a non-scratch scrubber. So it's perfect for the hard stuff but it doesn't scratch up all your pans. So it will be perfect for the stainless steel Instant Pot. Now this is their dishcloth that I like to use. It's perfect because it can get into those little crevices because it's made out of an amazing material and it's thin enough that it can just fit perfectly in spots that normal rags can't reach. The other thing I like to use are these kitchen towels. Now even though they are cute on the outside, they're actually really absorbent. So they can be used multiple times and wipe up many things because they can absorb so much water. Now if you're on a tight budget and you can't get all of those cloths, this is the general purpose cloth and it can do all of the things that the other cloths can do. So this one is by far my favorite because it's just a one and done cloth. So to show you just how well this works, I decided not to really clean my Instant Pot for about a good week and you can see there's buildup in there. The outside is pretty disgusting. Even though it's hard to see on camera, it really is pretty gross. I'm not going to lie. So I'm excited to show you how I deep clean my Instant Pot. So the first thing I like to do is clean the inside of the base of the Instant Pot. So I take my stainless steel pot out and I'm just cleaning the sides and all around the grooves. It gets pretty dirty. There is some food that can drip down or spill in there and so it's important to clean that out. Now I'm using the non-scratch scrubber because I don't want to scratch up the inside of the pot, but I want to get the dirty grime out of it. Alright, so next I'm going to clean my stainless steel pot. Yes, it is pretty dirty in there. Even though it's clean, it just needs kind of a deep cleaning every now and again. So I'm using the kitchen dynamo.   Now this will get rid of all the build up and the water marks and it just makes it shiny and new again. Then when you're done with the inside, don't forget to clean the outside too. There are water marks on there. There's lots of little fingerprints, obviously that's for me. I touch the pots a lot. So this will just wipe it down and make it sparkly and clean. Next I'm going to clean the little lip where your lid attaches to. Now I like to use just a washcloth to clean this. I've seen a lot of people use paint brushes or q-tips, but if you can find a good washcloth that is thin enough that will fit through the little cracks and areas, then for me that's perfect because my washcloths are in my kitchen. I like to use them and then clean them when I'm done. And sometimes you just don't realize how much dirt is in your instant pot. Sorry guys.  Just keep pushing the food through and at the very end you'll be able to just pile up all that nasty gunk on the lip. Now the first part of the lip that I cleaned that has a little bit more room. I like to push all of that to that main part because I can get it out a whole lot easier. Alright the ring is looking better. The inside of it is looking so much better. So I'm going to take that dynamo cloth that I used to clean my pot and I'm just going to scrub the outside of the instant pot. Now using a cloth like this it will make all the watermarks go away. You don't have to use any spray or cleaner. You just wipe it down and then you take the dish cloth that absorbs a lot of water and just kind of dry it off. And this will make it so there will be no streaks or watermarks. That's looking so much better. This instant pot is ready to film with. Now for the dreaded part. The lid. So first I'm going to take off the ceiling ring. Now every six months or so I like to change out my ceiling ring. One because it gets odor stuck inside that ceiling ring and because sometimes it gets stretched out and it doesn't seal as well. You can get these on Amazon but before you get a new one make sure that your old one is clean. So I'm just grabbing the dish cloth and I'm just taking my fingernail and kind of just rubbing the dish cloth in the crevices of the ring. This will clean it out really well and now just make sure it dries completely before putting the ring back into your lid. So now that the ring is out I'm just going to kind of clean underneath where the lid is and then also all the metal part of the top of the lid.  You don't want anything wet when you are done cleaning your instant pot. Alright now we're going to talk about the float valve. That's that little button that goes up and down to let you know if it's pressurizing. So go ahead and take that silicone little lid off of the float valve. Now my finger is underneath there because I don't want it to fall right out so I slowly pull it out. Now if this has food or buildup in it guess what your instant pot is not going to pressurize. So if ever your instant pot isn't pressurizing check your float valve make sure it's really really clean. When I deep clean my instant pot I make sure that this is cleaned and it's ready to go so then my instant pot will work correctly.  So then I'm just going to put it back exactly how it was before there are two little dots that will pop up. That means you know that it's incorrectly that is done correctly then go ahead and put your silicone cap back on top. And just while I'm cleaning this little thing pops right off and it's kind of dirty. So it's not important that it has to be cleaned but I like things sparkly and clean. So I'm going to just clean up make sure all the gunk is off and then clean around where that lid was sitting. Then when you're done go ahead and just pop that lid right back on. All right it is time to put the sealing ring back on. So when you put your sealing ring on make sure that it is firm and snug. So I like to start on one side and kind of just hold it there and slowly go around all the edges to make sure that it's fitting on. And then I'll run my fingers around the edge make sure that it's all on correctly because your instant pot won't seal if this ring is not on correctly. Now that first model that I showed you was the Luxe. This one is the Duo the silicone caps are a little bit different but the way that you clean it is the same. So I just like to take my handy dandy cloth and just wipe this down really really good. And just like the other one you're going to pop it back in make sure that those two little holes are showing and then you can put the silicone cap right on top and you should be good to go. So I know there are a lot of different ways you can clean your instant pot. This is just the way that I like to do it. So down below in the comments I would love to hear what you use to clean your instant pot. Now before I forget I have one more tip or trick for you. So after I clean my instant pot and after I use my instant pot I flip my lid upside down. I never put my lid on and seal it in order for it to store because it just makes it kind of stink. But if I flip it upside down and kind of let the air and let the ring air out a little bit then it won't be so stinky the next time. Now if you want to check out eCloth yourself I put a link in the description for you. It's one of the easiest ways to clean your instant pot. Alright you guys I'll see you on Monday. Bye!


Hey friends today, we are gonna be dining at the world-famous Boston Lobster Feast This is an all-you-care-to-enjoy seafood buffet with main lobster included with the price and I am so excited It was voted Floater's Best Buffet in 2019 by Reader's Digest and I can't wait to try it. Anyhoo's, let's go do this This restaurant is only seven minutes away from Walt Disney World And there's three different locations around the Orlando area. They have one on International Drive one in celebration and then this one right here Recently I went to Cape May Cafe at Disney's Beach & Yacht Club and that's a seafood buffet And it was kind of pricey You had to pay additional to get lobster and also you had to pay additional to get crab legs I believe it was $42 for the buffet then it was $29 extra for crab legs and then $49 extra for lobster and someone said I should check out Boston Lobster Feast And I've seen the cars driving around and I'm like, you know, that doesn't sound like a bad idea If you're from the Orlando area, I'm sure you've probably seen the lobster cars driving around It's a good way that they advertise the restaurant. There's one right there. Isn't it so cute? I love it It's going right up. Look at that That is so awesome I wanted to come up and give you guys a closer look at the lobster car because it is so amazing. Look at this I really do love it And like I said, this is a way that they advertise because they just drive these cars all around Florida Down International Drive and you follow the lobster to get to the Boston Lobster Feast and it looks so cool I wish I owned one of them. Like how cool would that be? The restaurants about me section says that for over 30 years They've been serving all you care to enjoy Main lobsters here and they have award-winning clam chowder and not only just seafood. They have prime rib on the buffet They've got meatballs and pastas. They've got a little bit for everybody. So I'm excited We're gonna eat a lot of food and we're gonna try a lot of seafood I mean, you're going all in on the lobster. So I'm gonna have to have a lot of lobster I mean now I'm very influenced by that car. So, uh, I'm excited I love everything about this car the little lobster tail all the way in the back the little claws Like this is really really cool I don't think the inside has anything like really decorated. It'd be cool if they had a red dash No, it's just like a regular like inside of a Volkswagen Beetle. But wow I I love it. It's so cool. Can you imagine driving around all day and this be your job? Just drive a lobster car. I mean that sounds like such a great thing We're gonna head right on in now And it looks like the hours of operation are 4 p.m. to 10 p.m. Monday through Friday and then 2 p.m. The 10 p.m You can make advanced reservations, but I'm just gonna walk in and we'll go over the prices once I get in there and see how much it is Let me know in the comments if you guys have ever seen one of the lobster cars driving around Florida before Or if you've ever eaten at Boston lobster feast, I would love to hear your feedback So let me know in the comments. I'll make sure to check them out It looks like the price for the feast is $59.95 and then children for 11 or $25.95 And I'm excited. I like how they said the price for the feast featuring lobster crab prime ribs sushi and more And we're all going all in They also have an a la carte menu. So if you don't want to eat the buffet You can actually order like small like entrees, but I mean i'm here for the feast. I mean we're here for the lobster feast This restaurant itself is the newest out of the three locations and I love how everything is just so clean and like fresh in here I think it's been open just about a year, but it looks really really good in here I'm gonna give you what quick run through of the whole buffet line and there are so many options I didn't think it was gonna be this big but it is huge in here And then we're gonna put together a plate and try all of the food and see what's good and what's great Of course, we've got lobster and then we've got crab legs over there They look at some good. Oh lobster dave in the house Nice and then we've got uh oyster's Rockefeller. We've got some mussels. We've got some scallops and then some butter Looks like they got a nice selection of different fried food items fried chicken tenders fried clam strips fried mahi Fried calamari fried shrimp fried catfish a lot of good offerings. Look at this and a lot more too They've got cornbread casserole They've got the prime rib back there a nice little carving station. Look at that And then over here we got so much more. We've got rolls. We've got barbecue pulled pork We've got corn on the cob ribs. Oh my lord Look at this Shrimp scampi Rice mashed potatoes gravy London broil green beans It goes on and on and on and we still have this whole of the loop over there We've got cod. We've got crab cakes. We've got garlic crab clusters We got red crab and we've got some more dinner rolls here and then this looks like Oh lobster mac and cheese.  Holy moly They also have a pretty impressive bra bar here too and I'll show you that some sushi Look at this. We got smoked trout house smoked salmon. We got some salmon poke lobster claws Mussels peeling each shrimp back there Everything just looks amazing. Doesn't it like I'm so excited and then we've got a nice little fruit salad area oranges lemons cocktail sauce octopus salad Tomato cucumber salad and then here's all the different sushi's Look at it. We've got sushi there clams oysters and some Caesar salad right there So there's a lot to dig into I forgot to point out the soup So I'm going to show you the soup too and then there's desserts But we'll wait till the end to show you guys the desserts. You know, maybe we got to get our fill full of lobster first Looks like we got clam chowder lobster bisque seafood chowder and it actually looks really amazing Holy moly Oh wow, there's a lot a lot of lobster and shrimp in there All right, I'm grabbing a plate and we're going in we're gonna start building our first plate Oh boy, can I have a lobster lobster Dave? Oh, there we go. That's the one fancy Oh, I'm gonna get butter.  So we're going to put a little fried calamari on there There we go. I don't know if that's calamari or if that's the mahi because I feel like this might be calamari right here Yeah, we'll try. Anyway, we'll try it all Looks like they also have blue crab Shrimp skewers and salmon. Wow. I think I missed this whole section before so I'm gonna grab some shrimp skewers here Let's see. We'll grab this little bad boy right here.  You tie it right around Perfection. There we go. No, I'm ready. I'm ready for I'm ready for my lobster Also kudos to them for serving Pepsi products. They have mountain dew here I even had mountain dew in forever and then we've got old bay and then some hot sauce there And we're gonna dive right on in here. I am so excited. I can't wait to try it I can't wait to try the prime rib and like they have ribs up there. They have so much different food So if you don't like seafood, they have so many other offerings We're gonna need some room. So I'm gonna clear off some of these bad boys like the shrimp. Look at this shrimp. Holy moly It's really nicely seasoned. I don't know if you can see it there. There you go but Oh, yeah Now it's time to dive into the lobster and if you don't know how to crack open a lobster They do have people here that'll show you the best ways to get all the meat out and we're gonna have a little demonstration All right Pablo's gonna show us Okay, first we're gonna see if it's a male or a female the way we check we stretch out the tail just like this And we see this first thing over here So if it's hard, it's a male if it's soft, it's a female. Okay, good to know. So First we're gonna take out the claws. We're gonna pull them down like that and remove them So we're gonna open that later You're gonna put one hand on the head one on the tail do a little twist Separate the head from the tail.   Yeah, right for the claw. It's pretty simple. You're gonna pull the thumb back Remove the thumb to remove this part Just like that. All it takes is one crack and a snap.  Oh wow That is amazing all in here. I'll do the other one It's kind of aesthetically pleasing like can they get you right like the crack and Look at that. Oh wow juice is flying out there That is absolutely amazing Now you could eat 20 lobsters and enjoy nice. Thanks Pablo Pablo killed that like look at this. Holy moly. Look at all the lobster And he said now you can have 20 lobsters and enjoy. So I'm gonna I'm gonna do a little dunk here. I'm gonna dunk it I'm gonna dunk that lobster Cheers to lobster Hmm Wow That was so juicy. Holy moly I like took a big bite and I think I just soaked it too long in the butter and it just like it was like A waterfall of butter and juices just running down my throat I'm happy. I'm wearing my lobster bib I feel like I should get another lobster later on and try to crack it open. Pablo was like a master He was really really good. I have cracked lobsters before in the past, but I wouldn't say I'm a pro You know what I mean? So I would like to see how well I can do compared to him because he that was excellent That's gonna be a little bit later on though because I want to try all the other food first But first I gotta I gotta finish up the lobster I got here You know, I think they only let you have one lobster per trip You know what I mean? So you can't go up there and be like can I have five lobsters on the plate, please? Just one Time to head back up and grab ourselves another plate and this time I'm gonna grab a little bit more of a variety I want to try little bits of everything I want to try the meatballs and the sausage and peppers and the shrimp and the prime rib. I want to get it all I also like how I'm just walking around my bib on walking around the buffet with the bib on I'm just gonna wear it. I'm gonna wear it home Let's grab a little sausage and peppers.  Put them right there Then we've got some jambalaya.  I'm gonna need a lot of au jus with it So I just grabbed a little bit of everything a little bit of sausage a little bit of ribs one meatball one meatball My my meatball song for mech there Mmm It's good meatball The jambalaya i'm a little bit hesitant about I mean it doesn't look like any jambalaya I've had before So I'm kind of like we'll give it a go though. We're gonna try it I would have loved to see some gumbo so I can have some gumbo jambalaya mix, but it's not too sure about this I haven't seen any like peppers. I've seen some shrimp and some crawfish in there, but nothing really jambalay-ish Yeah, it tastes like yellow rice Yeah, just kind of tastes like yellow rice. Nothing really else to it Now I'm gonna try some ribs.  I'm going all in now The ribs are actually really really good. I wasn't expecting good ribs at a seafood restaurant And the barbecue sauce has a little kick to it.  Can you put it in the aju? Oh, yeah, look oh look at that That's the way Perfect, thank you. Oh boy.  Look at this. Holy moly I want to get the outside though. I love the outside because it's always got that good seasoning on there So I take that right there I'm gonna soak it in a little bit more in the aju I also grab some red skin mashed potatoes. So put a little bit on there as well There we go Make a perfect little bite right there You guys know I do love me a good prime rib, so we'll find out how good it is Okay That's pretty good. I'm gonna go in for another bite. Gotta get lots of aju though The prime rib is good, but those mashed potatoes are so good. I love it. I love red skin mashed potatoes I wonder if they actually make them in-house here. I got a little aju on top of that there And they also have gravy. Maybe we'll get some gravy Now that we knocked out like the meatballs and the prime rib and the sausage Which actually everything was really really good. I mean, it's not the best You know, it's a seafood restaurant the ribs though the ribs were very good But now that we knocked those out of the way it's back to some more seafood Let's grab some blue crab legs here perfect We're gonna try some oysters Rockefeller right here And then maybe I don't know about the southwest mussels there. I mean they look good, but the sink jock scallops I'm torn. I don't know which one to go with. Maybe this one. Here we go Oh, yeah Got some crab legs. Some crab legs from lobster Dave Thank you. Excellent. Oh, perfect. That's the way Hey Oh, oh look at that. Thank you. Oh, no, that's good.   A little catfish dinner All right, now we got some crab legs some oysters Rockefeller and then some fried catfish. Let's try the catfish first here Mmm the breading is where it's at I remember struggling with crab legs for the longest time Maybe I get that right out there I think this is gonna be another one of those days where I need to run to Epcot to get some good smelling Alone because I'm gonna smell like seafood real bad today, but I'm cracking open the crab legs here Oh, yeah, I remember I had such a hard time with crab legs and now I've learned kind of a great way to actually get them done We get a nice big peaceful And like I try to get it all out in one bite. You know what I mean? Try to get like the whole Lot. Oh, wow. Look at that completely empty. Look at that And then bada bing bada boom Perfect Oh, I forgot I can't be butter and I get any butter. Oh, well, we're just gonna eat it this way This is my first time trying oysters Rockefeller too. So I'm excited to see what it's like. Oh, wow Look at that Gotta get a little bit of everything there. This is me being really adventurous here Oh, it's not bad It's actually really good. Holy moly I'm like, wait a second here That is so good. Holy moly I always get super happy when I try something For the first time and I like it a lot. I don't know why I've never had oysters Rockefeller before I think it's just because of the timing, but I had opportunities before and now today's the day and I kind of like it a lot Now I think I want to try a little bit of the soup here So we're gonna get a little bit of the the lobster bisque Put that right in there just a little bit not a lot and then maybe a little bit of the clam chowder Right over here There we go Just a little bit just a touch excellent All right, now we're gonna try the lobster bisque first and I get a lot of good lobster in there Okay That's good now for the award-winning clam chowder That's good too. I like the lobster bisque a lot better at all.  So we can try the crab cake too Okay, not bad This lobster bisque though that is actually Super amazing that one I highly recommend uh the clam chowder. It's okay I feel like that should be the award-winning lobster bisque. Like that's the winner right there I'm starting to get a little bit full here though. Oh boy So I think we better revert back to the lobster business because that's what you're paying for You're paying for you know all you care to enjoy main lobster and uh, I definitely want to at least get one more lobster in me You know one more lobster. I wish we were playing the lobster game at the boardwalk. I don't know why I just thought of that It's so random All right, mr. Morrow has come back for more lobster Lobster me lobster Dave Oh, there we go. That's the way. Oh, this one's pretty All right, it's lobster time. Let's see what we got here Oh, it's hard. There you go And you gotta take the lip the claws off A lot of bang A lot of boom. Let's rip this bad boy off get that out Oh, yeah I definitely did not do as clean of a job as Pablo did but here she is Lobster tails all day Round three fight or a wins Look at that perfection I think I'm thrown in the towel. I think I'm lobstered out here There's a lot There's a lot of food But we still have to look at the desserts and then I was thinking right next door is a wizard gift shop because you know We're on 192 So I thought it'd be fun to actually go walk it off a little bit and go through some really cool gift shops on 192 Well, the desserts aren't looking that promising looks like we've got some hershey's ice cream cotton candy birthday cake lemon ice Then we've got some flan These look like some churros over here Chocolate chip cookie oatmeal raisin a lot of this stuff isn't marked. So I don't know really what it is But I wouldn't mind trying it I think we're gonna grab some churros though Yeah, grab a couple churros there And then this looks like a chocolate chip cake. I don't even know You see what it is but I'm gonna try it And then this might be like a lemon tart maybe Yeah, the dessert department is definitely lacking a little bit I mean nothing was really marked and they didn't have many options But the churros look good here with a little chocolate sauce on them Yeah And I'm not too sure what this is I don't know it looks pretty good though If I know You know, it's like a chocolate chip like brownie thing chocolate chip brownie thing Yeah, I don't know about that. I mean I will talk about everything I'm gonna give you guys my full like kind of review and my thoughts and comparing it to cape may cafe Once we get outside, but yeah the desserts definitely not too good Well that was awesome and honestly for the price you can't go wrong especially when it comes to the lobster You know what I mean? Lobster is such a very expensive food item and to be able to have all you care to enjoy today I ate three lobsters like I don't think I would have ever been able to say that You know I mean today I ate three lobsters doesn't that sound amazing?  And if you were to get something like that at cape may cafe it would cost you like $120 And you wouldn't be able to get all you can eat crab legs or all you can eat lobster And this being only like seven eight minutes away from Disney. I feel like it's a really good option to come to Um, but like I said like the desserts definitely need some improvement the rest of the buffet like I said It's like it's it's buffet food But lobster all the way now I think we're gonna head over to the wizard gift shop and do a little gift shopping on 192 Before we make our way over there gotta say goodbye to my favorite little lobster car Me icon. That's what that uh license plate is me icon That's so funny Lobster good food plain and simple. I just love it I really do I'm gonna want to take a photo with this every time I come near it And there's the wizard right there and there's the wizard. You're a wizard harry They also have indian cuisine if you guys are familiar with this area. This is like the main gate area They have tons and tons of gift shops here In fact, there's a gift shop attached to the boston lobster feast like it's right next door But it's not like the wizard one. I think this one just says Gift shop and then it has a dolphin on top there just has a random dolphin on top I still think it would be cool to check it out So we're gonna head over to the the random dolphin gift shop and then we're gonna hop over to the wizard Just let's just see what's in the dolphin gift shop Dolphin Disney clearance Disney clearance a lot of this stuff always has basically the same stuff But some of them are special. You can find little gyms. Oh, look at these Epcot World Showcase ears Like that's a little hidden gem there. That's actually Disney parks. I think that's really fancy actually And the child these mannequins are really well. I thought that was really somebody right there One thing you can always find in these little gift shops are alligator heads and Lights made out of beer bottles. I feel like it's a staple in any gift shop on 192 So I'm sure we're gonna find some of them here And would you look at that just like I told you Beer bottle lights and it's kind of funny because they're 2799 and they have Miller Light Landshar Corona And then they have Miller Highlife the champagne of beer and I feel like that one should be cheaper You know what I mean because these are all 2799, but Miller Highlife is really cheap So I feel like we should get a discount and then right across from the beer bottle lights alligator heads Alligator heads alligator eggs a little bit of everything under $19 for this bad boy right here They also have alligator back scratchers. Look at this Yes, just pretty good job I'm not finding many really cool disney items. Oh, that's kind of funny drunk one For universal studios drunk one. I would hope it says drunk two. Oh, no trouble one. That's funny But yeah, I'm not seeing many here I don't see uh any disney like shirts or anything and most of the stuff is stuff you find at like walmart and stuff I see some stitch shirts here But like I said, this stuff isn't like disney parks. It just says disney So you can get this stuff at like your local walmart or target You want the good stuff and not really seeing any here some harry potter stuff Yeah, the dolphin gift shop isn't really a winner. So maybe we'll make our way over to the wizard You're a wizard harry. I can't stop I do want to see how much these little plushes are because I figure At disney if you bought like a mickey mouse plus you're probably looking at like $20 maybe $25. So let's see how much they are here $17.99. That's not too bad. It's definitely cheaper But it makes you wonder is it worth driving all the way off disney property to save Four or five dollars for a stuffed animal Like I said the stuffed animals you can get for probably around $20 maybe 25 and they're selling them for like $17.99 here Now t-shirts. Yeah, that's a different story and stuff you want to take home Wait, I just realized I've been wearing my bib the whole entire time walking around that gift shop I'm just walking around on a Boston lobster bed. Oh my lord Oh, I feel like it's the Grand Floridian robe thing again Now that we left the random dolphin gift shop with my bib on We might as well just make our way over to the wizard the magic castle and there is a magic castle on the inside I just love seeing all these different gift shops on 192 I always drive by them now It's not really like the good like disney products are but they're just kind of there's something about them Just staring into those wizard eyes. You know what I mean? You can get lost almost captivated I think at this point I'm just going to keep the bib on I mean I probably reek of seafood and butter and now I'm walking around with a bib And I'm just kind of going through gift shops. It's a little bit windy out here But let's make our way into the magic castle. Oh, look at that Holy moly, it's like a vaulted ceiling in here This is actually so cool. Look at that And it's guarded by the mandalorian It's guarded by the mandalorian and beast and I love this ceiling Yeah, little Mickey balloons up there. Do you see the hidden Mickey? This is really really cool. This might be probably the best gift shop. I think I've ever seen on 192 Hands down. Look at the little dumbo's Well, this is a little sad, but they have uh sorcerers of the magic kingdom Card readers or card vendors and it's no longer there. So it's really sad that it's kind of just sitting here Look at that and they're selling them still for $12.99, but There'd be no point. This is disney parks exclusive actually. So that's why it's really fancy that it's here $16.99 to $12.99 But there'd be no point and oh, this is parks exclusive too. This is Walt Disney World. See how it says it on there so this one is $34.99. No, that don't seem right $34.99 Definitely too expensive for that or you can buy that giant aerial for $34.99 Do you remember what I told you was a staple over at the other gift shop? We'll never believe what's on this shelf over here We got a bunch of alligator heads and actually a really big alligator and then of course The beer bottle lamps right next to each other trying to select the other store. It's like every single store It's like it it has to have them Well, I guess with that we're just gonna call it a day here Let me know what you guys thought of boston lobster feast Let me know if you would like to dine there and if you think it's worth the price Like I still think like the other items at cape may cafe probably or like a little bit better But for the price, I mean if you love lobster, this is really hard to pass up and uh, yeah I hope you enjoyed the video.


Previously we've gone over a so-called naive line drawing algorithm, which, while workable, doesn't have the best performance. Brazenham's line algorithm, named for its inventor Jack Brazenham, is the most commonly used method for drawing lines, as it requires using only addition and subtraction per pixel instead of slower division and multiplication operations. Like with our naive line algorithm, in Brazenham's we treat line drawing as two separate cases. In the first case, when our slope is between 1 and negative 1, we draw each pixel such that x increases by 1 while y increases by the slope. In the second case, when our slope is greater than 1 or less than negative 1, we do the reverse, drawing each pixel such that y increases by 1 while x is incremented by the inverse of the slope. The difference from our previous method is that in Brazenham's we aren't using the equation of our line except once to find the slope. Instead of plugging in x values to get y values or vice versa, we simply increment by the slope, or the inverse of the slope, for each pixel. So here, for example, we have our line starting dead center on the leftmost pixel and sloping up to the right with the slope less than 1. For each subsequent pixel center x coordinate, we can find the line's corresponding y coordinate by simply accumulating the line slope. So for a slope of 0.4, the y coordinate for the second pixel is 0.4 units higher, the third pixel is 0.8 units higher, the fourth pixel is 1.2 units higher, and so forth. Be clear that these are coordinates relative from the center of the first pixel. The next question is how to use these relative y coordinates of the line to get pixel y coordinates. The most straightforward solution is to round to the nearest integer, giving us relative pixel y coordinates which we can add to the starting pixel's y coordinate. Rounding 0.4 gets us 0, 0.8 gets us 1, 1.2 also gets us 1, etc. We add these relative values to the y pixel coordinate of the first pixel, yielding our y pixel coordinates for the rest of the line. The problem here, though, is that rounding, like multiplication and division is a relatively costly operation which we'd rather avoid. So the Brazenhem algorithm instead proceeds by observing that the y pixel coordinates here get incremented by 1 every time the accumulated slope reaches a threshold of 0.5. So when the accumulated slope first passes 0.5, we go up a pixel. When it hits 1.5, we go up another pixel, and when we hit 2.5, we go up yet another pixel, and so forth. So rather than rounding, we can simply increment our y pixel coordinate each time the accumulated slope reaches these 0.5 thresholds. Looking at this in code, the basic structure is the same as our naive line algorithm, with vertical lines treated exactly the same as their own special case. We also again treat lines with a run greater than rise as one case and lines with run greater than rise as another. Zooming in on the run greater than rise case, where the slope m is between 1 and negative 1, things are very similar, except we no longer calculate the line intercept value b. Instead, we have an offset that starts at 0 and a threshold to check against that starts at 0.5. Again, the idea is that we iterate from the smallest x value to the largest x value, computing the proper y value coordinate for each x, and drawing a pixel at those coordinates. So depending upon whether x1 or x2 is smaller, we designate one of the endpoints as our starting x and y values. We then use a 4in loop to loop from the smaller starting x up to the larger end x, drawing a pixel at the current x and y, incrementing the offset by delta, which is our slope, and if the offset is now greater than the threshold, we increment y by 1 pixel and increment the threshold. Notice that our offset and threshold are always positive even when our slope is negative, but the variable adjusts is negative 1 if our slope is negative, because in that case we want the y coordinate to move down as we go along, not go up. So restating this all, we are accumulating the offset by delta and then incrementing the y coordinate and the threshold every time the offset passes the threshold. The case where rise is greater than run is virtually identical, but for swapping the x's and y's, except in the call the set pixel, and also but for the initial delta of run over rise instead of rise over run. So far, so good. We have a working Brazenheim algorithm that works using just simple addition and comparisons without any multiplication or division, aside from the one time we compute the slope. However, we could get even better performance on most hardware by foregoing the use of any float values and instead just using integers. This is perfectly doable once we observe that the particular values of the offsets and thresholds only matter in proportion to each other. We can multiply them both by anything we want, as long as we scale them equally. So first off, we want to double everything so that our threshold values go from 0.5, 1.5, 2.5, 3.5 and so forth to 1, 3, 5, 7 and so forth. This requires not only doubling our starting threshold value from 0.5 to 1, but also doubling the value by which we increment the threshold. So the threshold starts out at 1 and each time we increment it, we increment it by 2, not 1. Now our threshold values are integers, but what about the delta? Well, when the delta is rise divided by run, we can get an integer by multiplying by run, and when the delta is run divided by rise, we can get an integer by multiplying by rise. So in sum, we multiply everything by 2 and also either the rise or the run, depending upon the slope. Remember that when the slope is between 1 and negative 1, our delta is normally rise over run, our starting threshold is 0.5, and the threshold increment is 1. If we multiply them each by the absolute value of the run, and also by 2, we get a delta of absolute rise times 2, a starting threshold of absolute run, and a threshold increment of absolute run times 2. For the case of a slope that's not between 1 and negative 1, our delta is normally run over rise, our starting threshold is again 0.5, and the threshold increment is again just 1.  And this is how we effectively get rid of the use of floats in our algorithm, at least in the loop portion, which is the part that really matters for performance. If you want to see this code work in practice, you'll find the method called brazenhamlineopt in our draw module, opt here short for optimized. Before moving on, I should note that details of the brazenhamline algorithm often differ in various implementations. The core idea, though, in all cases, is to use an accumulated offset tested against the threshold, but it's not always described in those terms, and some implementations handle the offset and threshold differently. In particular, it's very common to keep the threshold constant, and instead adjust down the accumulated offset. So, instead of a threshold that goes from 0.5 to 1.5 to 2.5 and so forth, the threshold can be kept at 0.5, instead decrementing the offset when it passes the threshold. Here, for example, you see that when the threshold is met and the pixel coordinate adjusted by 1, the offset at the same time gets decremented by 1, going into negative territory, here denoted as the blue lines. Because the offset passes the threshold at the same pixels this way, it all works out the same. The question then is, does adjusting just one variable in the comparison instead of 2 make the loop perform better? I'm not sure, but I imagine it depends upon the hardware. In either case, I just find this variant initially more difficult to visualize and explain, which is why I presented the other variant first. Here we see the result of the same original large image shrunken down to a quarter size, but using different algorithms. On the left, we used nearest neighbor interpolation, but on the right, we used bilinear interpolation. The bilinear technique avoids the pixelation of nearest neighbor and so is preferred in almost all circumstances. The one exception is with pixel art. Here we see the same small pixel image doubled in size, using again nearest neighbor on the left and bilinear on the right. Whereas bilinear interpolation effectively blurs the image, nearest neighbor preserved the hard-edged, pixel-y look of the smaller original. To understand why this happens, let's look at how these two interpolation techniques work. First off, consider the simple case of scaling a one-dimensional image using nearest neighbor interpolation. We have a row of 5 pixels, which we want to resize to a row of 8 pixels. For our purposes here, we can think of pixels as little squares, even if that isn't totally accurate in other contexts. Anyway, the essence of what we want to do here is translate from one coordinate system to another. The 5 pixel image is a coordinate system that runs from 0.0 at the left edge of its leftmost pixel to 5.0 at the right edge of its rightmost pixel. Likewise, the 8 pixel image is a coordinate system that runs from 0.0 at the left edge to 8.0 on the right edge. The question is how the coordinates in our 5 pixel source image line up with coordinates in our 8 pixel destination image. Clearly, 0.0 in the source corresponds to 0.0 at the destination, and 5.0 in the source corresponds to 8.0 in the destination. But what about everything in between? Well, that's a simple math problem of scaling.  In this case, halfway between 0.0 and 5.0 is 2.5, and halfway between 0.0 and 8.0 is 4.0, so 2.5 in our source corresponds to 4.0 in our destination. Given a particular point on one axis, we can find the corresponding point on the other axis by first figuring the proportion of the point along the first axis by dividing by the length of that axis, then multiplying the result by the length of the other axis. For our purposes, we want to go from destination coordinates to source coordinates, so our formula is source-cord equals destination-cord divided by destination-length multiplied by the source-length. So given a destination-coordinate 5.5, we find the corresponding source-coordinate by dividing by 8 and then multiplying by 5, yielding 3.4375. Now, in a nearest neighbor interpolation, the idea is that for every pixel center in the destination, we find the corresponding point in the source and simply copy the pixel value there. So, because 5.5 corresponds to 3.4375, which falls in the bounds of the purple pixel, that destination pixel will have the same purple color. If we do the same for the destination pixel at coordinate 1.5, we divide by 8, multiply by 5, and get 0.9375, which in the source is in bounds of the first pixel, so the second destination pixel will have that same blue color. We use this method for every pixel here, and this is what we get. Note that in nearest neighbor interpolation, every pixel value in the destination comes for batom from the nearest corresponding pixel in the source. Now, applied in two dimensions, we simply interpolate along two axes. Note that whether our y-axis goes up or down is arbitrary as long as we're consistent between the source and destination. Anyway, here we find the source-coordinate corresponding to the destination pixel center at 1.5, 0.5, and get 0.6, 0.33, which lies in the bounds of the red pixel, so the destination pixel will have that same red color. Again, exact same principle just applied twice for two dimensions. Lastly though, consider the case of the pixel center at 2.5, 0.5. The corresponding point in the source lies perfectly on a boundary between two pixels, raising the question which color to copy. Whether we consider points on boundaries to fall one way or the other is arbitrary, but we should be consistent. In this case, we decide that points on vertical boundaries count as inside the pixel to the right, so we copy the purple value. So that's nearest neighbor. Linear interpolation starts from the same place. We want to find each source coordinate corresponding to each pixel center coordinate in the destination. The difference in linear interpolation is that we don't take the color value of the overlapping pixel verbatim, but rather factor in the color of the second nearest pixel. So here, when a pixel center in the destination corresponds to a point 7.8 inside this blue pixel of the source, we don't just take the blue color verbatim, but factor in the orange of the second nearest pixel. By the way, this is a selection of pixels from a larger image you see here, not a complete image, as the 7.8 implies the blue pixel is the eighth pixel from the left in the source image. The question now is how to blend the two colors. We want the blending to be proportional to how close the coordinate is to the other pixel. Coordinate line directly on the border between two pixels should take equally from both, while a coordinate line on the exact center of a pixel should take nothing from the other pixel. Were our coordinate here 8.0, it would lie directly on the border between the blue and orange pixels, and so should result in an equal mix of the two. But were our coordinate here 7.5, the center of the blue pixel, we would just take the blue color verbatim. Another way to put it is that at coordinate 7.5, we take 100% of the blue and 0% of the orange. At coordinate 8.0, we take 50% of the blue and 50% of the orange. At coordinate 8.5, we take 0% of the blue and 100% of the orange. So for a coordinate 7.8, which lies 30% of the distance from the blue pixel center to the orange pixel center, we take 70% of the blue and 30% of the orange. Expressing this as a formula, we first find the distance from the coordinate to the pixel center to its left. The hiccup is that we can't simply subtract, say, 7.5 from 7.8 because we don't have the figure 7.5, we just have the coordinate value. To find the coordinate of the center of the pixel to the left, we subtract 0.5, take the floor, i.e. we round down, and add back 0.5. The distance is then our coordinate minus this pixel center. This distance is effectively the percentage of where the coordinate lies along the distance between the two surrounding pixel centers. Here, 7.8 minus 7.5 gets us a distance of 0.3, which correctly denotes that our coordinate is 30% of the way between the left pixel center and the right pixel center. As a small optimization, we can avoid adding back the 0.5. We subtract 0.5 and use that as an adjusted chord, from which we subtract the floor of that same adjusted chord. This way, we effectively move both our start and end point by 0.5, so we get the same distance between them. For another example, say our coordinate is instead 8.2. Again, the problem is to find the distance between the coordinate and the first pixel center to its left. That pixel center is here again 7.5, and 8.2 minus 7.5 gets us 0.7. 8.2 is 70% of the way from the blue pixel center to the orange pixel center, so we want a color value that takes 30% from the blue and 70% from the orange. To figure this, we first note that the ratio we want to take from the right pixel is the same as our distance, 0.7, and the ratio we want to take from the left pixel is the inverse, 1 minus 0.7, which is 0.3. With these ratios, we can blend the two pixel colors by calculating each color channel separately. For the red channel value, for example, we multiply the left pixel red value by the left ratio, and multiply the right pixel red value by the right ratio, and then add those two products together to get our blended red value. Do this for red, green, and blue, and we get our interpolated color value. So let's say here that our red pixel has a red channel value of 30, and the orange pixel has a red channel value of 150. Left red multiplied by left ratio is 30 times 0.3, yielding 9. Right red multiplied by right ratio is 150 multiplied by 0.7, yielding 105. Add 9 and 105 together gets us our red value, 114. I understand that this formula effectively finds the value that lies 70% along the distance between our left red value 30 and our right red value 150. While the more intuitive method is to subtract 30 for 150 to get 120, then take 70% of that to get 84, and then add the back 30 to get 114, that method requires first identifying which color value is lesser to decide which to subtract from the other, and so requires a branch when implemented in code. This less intuitive formula here requires no branching. On the other hand, it does require two multiplications instead of just one. Which formula ends up being more efficient? That probably, again, depends upon the hardware. Linear interpolation applied in two dimensions we call bilinear interpolation. Again, like in nearest neighbor, the first thing to do is find our coordinate in both dimensions. So say that our destination pixel center maps to source coordinate 8.2, 4.9. What we want to do then is factor in all four nearest pixels, the blue, purple, and red, as well as the orange. We can do this by first interpolating between the top pair and separately the bottom pair of pixels to get another pair of color values, then interpolate that pair to get our final color. Alternatively, we could first interpolate the two left pixels and separately the two right pixels, then interpolate their results together. The choice is arbitrary. We get the same result in the end. In our method, we'll pair them off first top and bottom. So to interpolate the blue and orange pixels together and then separately the purple and red pixels together, we need the distance from coordinate 8.2 to the center of the left pixels, which will again be 0.7. So using this ratio, we can get two new color values, which we can then in turn interpolate together. But this time using the ratios between the top and bottom, which we get by subtracting 4.5 from 4.9, yielding 0.4. So the top color contributes 60%, while the bottom color contributes 40%. It may seem odd that we can interpolate the pixels and pairs instead of all together at once, but we can see it all checks out if we ask how much each of the four pixels should contribute to the end result. The left pair should contribute 30% while the right contributes 70%, and the top pair should contribute 60% while the bottom contributes 40%. Multiplying these values for each pixel tells us how much each contributes. The blue contributes 18%, the orange 42%, the purple 12%, and the red 28%, all adding up to 100% as it should. And note that in line with intuition, the orange contributes the most, the purple the least, and the red more than the blue because the coordinate is closer to the red pixel than it is to the blue. Looking at a bit of the code, we can use our coordinate to get the distances and from the distances ratios. We then use the ratios to first compute the red component interpolated between the two top pixels, then the red component interpolated between the two bottom pixels, and last we get our final red value by interpolating between these composited top and bottom red values. And we simply then do the same for the green channel and the blue channel, and we get our color value. Lastly, with bilinear interpolation, there is the question of how to deal with the edge case, the literal edge case of coordinates lying on the edge of the image. How can we interpolate between pixels that don't exist? Well, the simplest and most common solution is to treat the edges for the purposes of interpolation as surrounded by duplicates of the outermost pixels. So here now we could do a full-way interpolation on this coordinate. To be clear, the four-way interpolation results in the same color as the two-way interpolation would here between just the red and orange pixel, but this way we can use the same code for all coordinates without branching for special cases, which, depending upon hardware, may be the more efficient approach. An alternative solution to duplicating the edge pixels is to wrap the image around, which is a good solution when our image is being tiled, like in a wallpaper. And lastly, in the case when we composite our image over a solid background color, we'll get the cleanest-looking edges if we interpolate with that background color as the border around our image. So here if we're going to display this resampled image on a solid black background, it makes sense to interpolate using a border of black pixels. For an actual implementation of image resampling with nearest neighbor and bilinear interpolation, we won't belabor the actual code here, but you'll find their implementations in our draw module.