Okay, so yeah, welcome to Cloud Native Live, where we dive into the code behind Cloud Native. So I'm your host, Shahrir, our second middle, so you can call me middle Shahrir, and I'm a sense of ambassador. Okay, so every week we bring a new set of presenters to showcase how to work with Cloud Native technologies. They will build things, they will break things, and they will answer your questions. So in today's session, I am stoked to introduce Stephen and John, who will be representing our rapid code and prototyping with you for virtual environments. This is an official livestream of the CNCF and as such is subject to the CNCF code of conduct. So please do not add anything to the chat or question that would be in violation of the code of conduct. Basically, please be respectful of all of your fellow participants and presenters. So with that, I will hand it over to Stephen and John. Okay, so yeah, hey Stephen and John, so yeah, can you hear me? Yeah, so yeah, stoked to have you guys both. So how are you guys? Doing well, doing well. Yeah, awesome. So yeah, really awesome to have you guys all. So I think Stephen and John, I think Stephen, you can start with introducing yourself, and then John, you can join in and then we can start the session. Yeah, so thank you very much. So my name is Stephen Higgins. I'm along with John, I co-founded ZigZog and today we're going to be, we've been going at it for a bit now, and I think the tech is in a really interesting place. We're really looking forward to people trying it and working with it and giving us feedback, all feedback, appreciate it. And yeah, excited to be on here on this CNCF event and walking through and showing you some of the power of KubeFox. Great. So yeah, John? Yeah, everyone. Yeah, we've been making releases and kind of excited as to introduce new features. We're also featuring a Sura, which is a unique product and an integration that we've done with it, and more generically with any GraphQL endpoint just to make it very easy to use with KubeFox. So I'll be diving into some code and showing you how that all works. Okay, great. So yeah, let's start the session. Okay. Okay. So, hey everyone. Again, my name is Stephen Higgins. I'm here with John. We founded ZigZog some time ago. KubeFox is ZigZog's first product.  Then John is going to take the reins and go through the coding portion. And don't fret, the coding piece composes the bulk of today's livestream. Hopefully you've gone through the KubeFox Quickstart. If you have, you should have all that is necessary to go through the exercises today. If you haven't, no worries, go to the link above and it will walk you through the steps necessary to bring you to the point where you can work along with John as he goes through the coding portion. Just to note that I'll be walking through things very quickly. A, because I'm confident you don't want to listen to me blather on. And B, because I want you to know that I know you want me to get to the coding piece as quickly as possible. You can learn more about these KubeFox concepts at our GitHub site. Finally, keep in mind that live streams are recorded and made available on YouTube. So you can always walk through these steps at your leisure. So what's ZigZog all about? ZigZog's mantra is Kubernetes Simplified. I was chatting with a former colleague who is joining us part-time. He told me that in his day gig, he's dealing with data scientists who are not interested whatsoever in the infrastructure. They just want to run their scenarios without jumping through hoops to do so. It reminded me of something I learned long ago. People will suffer your technology to accomplish their business. That includes developers, particularly when infrastructure considerations hamper their efforts. Developers would like to focus on the application, not all the logistics around deployments, cluster configuration, et cetera. With KubeFox, teams don't need to worry about or manage deployments for individual components. KubeFox handles this for them. KubeFox, not teams or developers, evaluates the repo and determines what has changed, then containerizes and distills the deployment to only changed or new components. Developers always interact with KubeFox at an application level. Teams and developers can deploy multiple versions of the application, and those versions can coexist side by side with prior versions. Developers can make their own changes and test those changes against prior version of the app. They can do so without DevOps, without wearing things together, and without additional configuration. When apps are published, KubeFox distills deployments to only those components which have changed. Loads those changed containers into pods in the cluster and makes each version available as though those versions were running in independent sandboxes. There's actually a lot going on on this slide. This is an abridged explanation of dynamic routing and deployment distillation. Again, John will show you a practical application. What I've done here is deployed three versions of my app to the same cluster. You can see the deployments mapped on the right. For the first deployment, for the first deployment, I deployed version one of the app, which correlates the version one of each of the constituent components. For the second deployment, I changed the shared component, the API server. Now I have version two of the app, which of course includes version two of the API server. When I deployed version two, KubeFox deployed only the new version of the API server. For the third deployment, I changed the order UI and added a review component. When I deployed version three, KubeFox distilled the deployment to only the updated version of the order UI and the new review component. KubeFox makes each of these versions available via dynamic routing and virtual environments, VEs for short. VEs provide sandboxes for teams or even individual engineers, where new code can be deployed without affecting the efforts of colleagues. Each team can test their own version of the app. Because KubeFox routes dynamically at runtime, it can shape traffic to specific deployments. No configuration of routes is necessary. So there's no bureaucratic overhead or DevOps involvement in this pulling up of sandboxes. Requests are evaluated at origin and at each component to component transition and routed to the correct version of a component for that version of the app. Yellow highlighted data path shows the components that would be used for version three traffic. Because KubeFox distilled deployments to only unique components, provisioning is automatically kept to a minimum. If we have a 20 component application and three teams are modifying the same four components, we can run all four versions of the application on the same cluster with a total of 32 components deployed. The original version plus four additional components for each of the three teams. Imagine the implications. VEs can, for instance, facilitate the delivery of a version of an application in UAT to a particular customer without requiring separate resources. Hasura abstracts data sources from developers, builds APIs, and provides access through a GraphQL HTTP endpoint. That's a short sentence that belies the sophistication of the technology. Abstracting away the data sources and enabling developers to think about the data they need as opposed to all the wiring complexities normally associated with getting access to it is a powerful thing. There's an analog here of KubeFox's perspective on development. That being led developers focus on application development, simplify CI CD, remove DevOps barriers, and Hasura's perspective on database access, led developers focus on application business logic, simplify and unify access, abstract way connectivity infrastructure. Both products enable developers to work at an application focused level. Suppose that as part of team C's project, they would like to test with two different post-gres instances front-ended by Hasura. The first thing we're going to do is create new VEs, a dash one and a dash two. The dash one VE could comprise the original deployment with no component changes coupled with the original backend. And the dash two VE could comprise team C's changes coupled with an updated backend. What we'd like is for developers to interact seamlessly with either of the data sources and share common components across the cluster. In fact, I can test each of these simultaneously, each of these versions simultaneously, without DevOps, without wiring things together, without going through a process of namespacing common components, and without any other overhead. I make my changes, deploy my app, and KubeFox does the rest with virtual environments. John's going to show this to you in practice now. John, take it away. Hey, everyone. So if you want to bring up my screen, so I have a tendency to get excited and go fast. So if I'm skipping over something, or if you want more explanation of something, just reach out on the chat and happy to answer your questions. And I don't mind getting interrupted. So to get started, we're just going to do some setup. So we're just going to create a local cluster, local Kubernetes cluster to work on. I use kind constantly. It basically starts up with a Kubernetes cluster inside of a Docker container. So it's very easy to start and stop. And I just wipe out these clusters and reset them all the time. And it's very lightweight. So if you do a lot of element and use Kubernetes, I highly recommend checking it out. So when I headed in, it started up a cluster for us. The next thing I'm going to do is I'm going to set up KubeFox. So we have an operator that you can install with a help chart. And so I'll just go ahead and do that now. GitHub is hosting our chart repo. And these commands are available on the document page as well. So I'll go ahead and get this started. So again, this is setting up our operator. And it's also automatically setting up an instance of Vault that we use for our secret store. We're not going to dig too deep into secrets today. We will in a later cast, but just kind of heads up and let you guys know what's going on. The next thing we're going to do is make sure that we have Fox installed. Fox is our command line interface and it kind of helps deal with deployments and getting things set up.  Otherwise, on our GitHub pages, there's releases that you could download manually. So we'll go ahead and do this and you want to make sure you are on version 0.9. Great. So next thing I'm going to do is I'm going to make a directory and initialize it with our little tutorial today. So go ahead and do that. And then Fox has an init script built into it. And we're going to be looking at our GraphQL project today. So if you just pass that flag, what it will do is set up. I knew I was going to forget to do this. Sorry, I was supposed to do a flag so it pops out some more information. So right now, what it's doing underneath the covers is it's setting up a platform for us. It's kind of doing a initialization step and as well as outputting some files to the file system and setting up a get repo for us. So I'll go ahead and launch VS code here. So it's a little bit easier to kind of explore the code. Okay, let me make this a little bit bigger. So let me do this now before I forget it. So any of the Fox Flays you can set as environment variables as well. So I'm going to do that just so I'll put some extra information as I type commands. Okay, so what this initialized for us is kind of the standard setup of what a Qt Fox repository is going to look like. So in it we have a component, a single component, which is server. And in the root we have an app.yaml which is just kind of an explanation of or metadata about the app redeploying. So as Stephen was saying earlier, Qt Fox always works on an app level, which is just a set of components. And the easiest thing to do is just have one to one with a get hub repo, one app per get hub repo, but you could actually nest them depending on how you want to set it up. So I'd also like to kind of show you real quick what's running. So I normally use K9S, but I will try to use this to make it a little bit easier. So what's going on is the Helm chart created this Qt system, namespace, and you'll see here what we got running, but sorry, I went to the wrong one. Qt Fox system is the one we want. So you'll see what's running is just the operator and vault. Additionally, when we did the Fox and Net, it created a platform for us, which is Qt Fox demo. And here you'll see a couple of our services running. So Qt Fox is event driven and we use NATs as our event bus. And then the HDTV server is an adapter, which I'll go into more detail. And then the broker's kind of the meat of kind of takes care of most of the cool stuff that Qt Fox does, including the dynamic routing that we'll kind of dig into. So in addition to all this, we're also going to set up Hasura. Hasura is a really neat project. We're going to be using just their open source version. They have enterprise features and a bunch of hosted features as well. I'd highly recommend checking out. It makes doing development a lot easier. But in a nutshell, basically what Hasura is doing is inspecting a database. They start off with Postgres, but they support a whole bunch now. And generating a GraphQL API for you automatically. So there is a YAML file here called Hasura.YAML.  The first time you run this, it might break. It's just because the GraphQL engine gets mad because Postgres is running in a net script. But you'll see we have three instances here. So we have Hasura prod, and there's two containers in each one of these pods. So there's Hasura, which is the GraphQL engine, and then there's Postgres instance. And this Postgres instance actually is pre-loaded with our database that I'll dig into later. So we have prod, we have a dev instance, and then we have a john instance. And this john instance is mine. And these link up to the virtual environment. So you can think of prod as your traditional prod environments, kind of your stable release version. And then dev, you could kind of be your integration. It might be built, the CIC might be updating it from the main branch. And then john, like I said, is kind of my personal playground, my private sandbox to test things with. And we'll show kind of how these three different databases are able, we're able to switch between these databases using virtual environments. So what we'll go ahead and do though is apply this file. And it'll create those three pods for us. I'll go ahead and open up K9S. This is another tool that I use often. It uses VI bindings to help you drive an interface to Kubernetes. So like I said, it might crash the first time because Hasura is mad, but these pods should start up eventually. So this started our three pods for us. And again, there's a Hasura instance and Postgres instance in each one of those. So the way this all kind of works is, sorry, I'm just looking at my notes here. Make sure I don't go out of order. Yeah. Okay. So we're going to set up the three environments that kind of align with those three instances, the three databases that we just set up. So this is kind of our custom resources that we use to define virtual environments. And you'll see there's also environments. So environments are clustered scope. And they're kind of the, it's kind of a shareable container. So there can be a shared set of variables, for example, that are inherited by any of the virtual environments, which are namespace scope. And so each virtual environment must have an environment defined for it. So for example, here, you'll see under the data block, there's a DB var, and that will automatically be inherited by any virtual environment. But then you can see here, we could also override it for virtual environment. And so these variables are kind of what's allowing us to switch dynamically between the databases and routing, which we'll go into a little bit more. So there's kind of these two pieces that KubeFox needs in order to service a request. So it's a virtual environment, which is pulling in the environment variables, and then a deployment, which would go on app deployment. So with these two pieces of information, which we call the context of a request, it's able to route. So traditionally, what you do is you have dedicated hardware for each one of your environments and deploy a particular version of your software into those environments, which ends up with a lot of duplication. What KubeFox is doing is we're dynamically routing to allow us to share deployments. And so these two pieces of information are either resolved at request time or provided explicitly when you're doing development. And I'll show you what that looks like. And so our main application here, there's just a single component to just kind of try to keep things simple. And we have three routes defined here. And so you'll see, for example, this is kind of the main route we'll be playing around with. You'll see within the route definition, we're able to use variables from our environment. So these can be injected at request time and allows us to do this dynamic routing. So this subpath is going to be using this variable subpath to give us kind of unique paths into this component in the different environments. And we'll dig a little bit more into this code as we go forward. So the first thing we're going to do is we're going to set up these environments. So we'll go ahead and just do a kube code apply and get those environments in there. So we created all of our environments. Now we'll go ahead and do a deployment. So Fox has a command built in that will automatically build the component, push it out to a container registry and then push out the app deployment to Kubernetes and it'll start the pod. So go ahead and do that. And there's a nifty little weight command. I'm going to make sure I did this. That'll just wait for everything to be running for it. So we'll go ahead and do that. And you'll see the first thing it's going to do is build the component image here. So I had actually built this already. So it was cached for me, which is why that was so fast. Worked out well for the demo. So if we switch over now, you'll see that there is a pod running, which is the name of our app plus the name of the component. And then this is a hash of the changes. And so what Cube Fox did was it generated this app deployment for us. And so this app deployment is kind of the definition of the app and what needs to get run. Additionally, you'll see because of the way we wrote the code, it's able to find a bunch of dependencies that this component requires. So here you'll see our routes that we kind of took a quick look at. And it inspected and saw that we're using the subpath in our routes. So it's marking that in an environment, in order for this to be functional, you're going to have to have the subpath variable. Additionally, you'll see it has two dependencies on other components. And these are defined here at the top. So we're saying that these two adapters are going to be used by us later in our code, in which again, we'll dig into a little bit more. But just by doing this, it's letting Cube Fox know that these are dependencies that have to be present when you want to run your app. So we're deployed now. So we have something running and we have our virtual environment set up. So we're able to make a request now. Normally, you'd have a load balancer set up and things like that. But for this, we're just going to do a proxy into our HTTP server using Fox again. So this is just basically a shortcut for a kubectl proxy. That's just a little bit pre-wired for Cube Fox. So that's going to start up a local server for us on port 8080. And so now we could go over here and do a call request and see what's happened. So like I said, Cube Fox needs those two pieces of information, the deployment and the virtual environment. And so right now, all we've done is deployment. We haven't released anything. And so when you do a release, that's when it's telling Cube Fox to activate these routes for a particular environment and it'll automatically match routes for you. But since we haven't done that yet, we could explicitly specify the deployment and the virtual environment that we want to do. And you can use headers, you can use query parameters. And so we're using query parameters here. So we'll go ahead and run this command. And you'll see what happened is we actually got a 400. And the reason for that is Cube Fox is telling us that our event context is invalid. And it's using those dependencies that were defining the app deployment and looking at the context and saying, you know, I can't fulfill this request. And it's all that you're manually specifying the query parameters. So it knew it was kind of a development request. And then it'll give you this output that shows exactly what's going on. So, you know, it's saying these routes are looking for subpath, but it's not part of the environment. And it's also looking for these two adapters, which we haven't set up yet. So let's go ahead and fix this. So the first thing we'll do is, you know, uncomment this so that all the Dev environment have a subpath. Virtual environments have a subpath. The other thing we're going to do is we're going to set up these two HTTP adapters. So what an HTTP adapter is doing is it's kind of acting as a proxy. So everything in KubeFox is modeled as an event, which is our events are fairly simple structures. What an adapter is doing is it's able to translate a KubeFox event into some external protocols. So in this case, you know, HTTP. And because we're kind of taking these events and translating through the adapters, we're able to kind of do that dynamic switching without you having to change any of your code. So, you know, in your code, all you're saying is, you know, I need to use this adapter. And then depending on which environment you're using, it's going to be automatically switching the endpoint that it's using, based off of the environment variable that's going to be injected at request time. So let's go ahead and fix up and deploy the things that we're missing. So we'll do our HTTP adapters. And then we'll redo our environment so that they have the new variables. Okay, so now if we do that request again, we should get valid result. Great. And this is what we're looking for. So this is an HTML page, obviously very long one. So what we can do is we can move this over to a browser and kind of take a look at what's going on. So if we run this command, you know, it's better we're seeing the, you know, our web page. But if you look under the covers of what's going on, you know, within this web page, it's referencing a style sheet, and a fade icon. But you'll notice that our original request, we're passing the query parameters. So Qfox is understanding how to route it. But in these subsequent requests, it's not present because the browser is making those request directly. And so it's not able to find those without the route. So there's a couple of ways to kind of deal with this while you're doing development. You know, the first way as a developer is to kind of give Fox proxy some more information. So you can explicitly specify the virtual environment and the app deployment that you want to inject while you're using Fox proxy. And so when you do that, you no longer have to specify this information, it'll automatically be injected. And now things work, you know, as expected, our styles sheet and a fade icon are coming back. And it's not quite so ugly. The other thing and kind of the more recommended way to do that to view this is to just make a release. And so we'll do that now. So what we're going to tell Fox to do is release our app deployment, which was automatically named by the app name and the branch that you have checked out. And we're going to tell it to deploy it to the virtual environment dev. So that was a release. And I don't know if you noticed, but I reset the Fox proxy. So it's not specified in the context. And now that we've done this release, you'll see that the routing works as expected. So there's no magic going on here anymore. This would be, you know, like a live, a live release where the Q Fox is is is routing automatically. If we look, you know, at the John environment, the, you'll see that my sub path here is John. And if we go and try to use this now, we run in the same problem because again, we haven't done the release. We're not doing Fox proxy. So let's see blah, blah, blah. Talk about that. Great. So what I'm going to go ahead and do is I'm just going to make releases for all of our environments just so we could kind of start playing around with the database and show you how the dynamics switching and say to the database access is working with the BEs. So I'll go ahead and release to, I'm sorry, Sebastian, the banner at the bottom of the video hides. Oh, I see. Let me just move this over here. And you know what is it speaks my name so long. Let me just fix that. And I'll fix that problem. Is that better Sebastian? I'm going to assume yes. Sorry about that. Okay, so I released the, the Dev John environment. And we're also going to release a problem. One of the things it's recommended to do when you release into a stable environment is to publish a versioned copy of the app deployment. And the difference between what we've been doing now and a version one is versions are immutable versioned app deployments are immutable. And so Fox again can help us do this. So we'll go ahead and do another publish command. And this time we're going to tell it specify a version for the app deployment. And we're also going to have it create a get tag for us. So, oh, so Fox operates against kind of, it's using get up get for versioning. And since we have uncommitted changes, it's kind of yelling at us. So we'll just go ahead and commit these changes and run this command again. Right. So it's solid that the version of our component that we're trying to deploy is already existed. So it skipped the build and it went ahead and it made another app deployment. And in this case, it's called GraphQL v1. So if we go over and look, you'll see that we have two app deployments to find here. But they're both using the same version of the component. So if we go back and look at our pods, you'll see that there's only one version of the GraphQL server running the one version of our component running. But now if we go here, you can see that Dev is working, the John environment is working and prod is working. Oh, no, it's not because I haven't released yet. So we created a release a version app deployment. And now we're going to release that to prod. So we're going to do a release and we're going to specify that we want to release version one and to the prod environment. So now. So John, I'm sorry, maybe touch on the selection of a deployment with query parameters and what transpires with the release. Yeah, so what I was showing you earlier with these curl commands, you know, we can use query parameters to manually specify our context. Basically what the release is doing is it's is it's taking these routes. And when you release it, when you do a release, you're obviously having to specify the environment. So what the release is doing is it's taking these routes and kind of compiling them and injecting the variables from that particular environment. And then it will actively match any of those routes. So in this case, we're explicitly telling it so it doesn't really, you know, it's compiling those kind of dynamically at request time. Whereas a release, it's going in and compiling these and has this kind of, you know, master index of all the routes that it's iterating through and trying to match a request when it comes in. So, you know, in this case, we're talking about, you know, we have our subpaths for the three different environments. And so we're switching between the three of those. And so now we'll dive into the circle quick and kind of show you, you know, that in fact we are switching and not only between the virtual environments, but because we're switching virtual environments, we're changing our database. So if we go in and just get rid of the heroes, it'll bring up a server for us. And this is just kind of a bit of magic that I added into this component. And you can see it here. So this is just telling it to basically forward anything that's not static or heroes over to Hasura. And this is just our very simple forwarding logic that we're using with KubeFox. Since KubeFox is a venturing, you know, the request coming in that HTTP request coming in is modeled as an event. So it makes it very, very easy to just clone the HTTP event kind of, you know, fix up the path a little bit and then send it over to the Hasura adapter. And so you'll see that's exactly what's going on here. So we're asking the kit context to clone here and get it set up to send it to the Hasura adapter. And then we send it, we get a response, and we just forward that response back. So it's a really simple little proxy. And it just makes it makes it easy to kind of switch between the Hasura consoles. So this is kind of the main interface to Hasura. And we'll go really quick to kind of show what's going on here. So this is our data structure. The main table here is superhero. And so you'll see here, you know, we have our superhero name, we have the real name, and then we have a bunch of foreign keys to several different categories. And you can see what happened is that Hasura went in and it kind of inspected all these relationships. And it automatically created a GraphQL interface that reflects this. So what we can do is actually go ahead and just perform a GraphQL query. Maybe we're going to switch me over. They have a little explorer built in that you can perform the GraphQL query. So this was generated for us by Hasura when I click that button. And so you'll see there's a result. So we ran our GraphQL query and it went in to Postgres and it pulled out, you know, all the data requested. And it automatically kind of creates this association. So for example, you know, right now we're having the alignment ID, which is not very helpful to us. What we really want is you know, the actual name of the alignment. So you'll see it has autocomplete and it created that sub object for us in GraphQL. And if we do that, it'll pull back, you know, the word instead of the ID. So that's kind of, you know, very, very quick overview of Hasura. What we're going to do real quick is we're going to go into our superhero and it's not a well-known fact, but in fact, I am 3D a man. So we'll go ahead and update that. And now if we go back our heroes page in the job environment, you'll see that 3D's man name has been updated. But now if we switch back to Dev, it's back to Charles because we're going to update it in that database. So this is kind of just proof that we're switching back and forth between the databases dynamically with these requests. But again, there's only a single pod that's running for us, even though we have these three releases and these three virtual environments, it's a single pod that's dynamically being switched using the adapters. So that's kind of the high level, you know, kind of showing some magic of KubeFox. So what we're going to do now is we're going to update our code. So, you know, right now in our table, we're pulling in the name and the alignment and all that's great. But let's say we want to add the gender to the table. So we could come in our code here. And, you know, what I usually do is I, you know, I got to figure out how to get kind of the gender out of this. So if you go back into their query, you could use their auto kind of complete to kind of make this a little bit easier.  And it's just kind of how the database was created. This was just a database I found online. So normally, you know, this could be name value or something like that instead of having it duplicated. But if we run this, we'll see that we're getting back what we need. So the gender sub-object is what we're looking for. And gender is the column name. So, you know, if you look at the database, you'll see, you know, under gender, we have the three columns and they're just the table and the column are both named gender, which is why you're getting those, that redundancy. So if we switch over, so this is our code that is performing the GraphQL query and generating our HTML table for us. So you'll see what we're doing here is creating a GraphQL client dynamically with kit and the GraphQL adapter, which is the HTTP adapter that we put a set of dependency on. So if you look at this adapter, all it's really doing is specifying the URL. And this is the URL to the GraphQL endpoint of the Hasura pods that we deployed. So you'll see each Hasura pod had a service. This case, Hasura Dev, Hasura John. And so you'll see that by specifying the adapter in this way, we're able to inject the environment variable and have this adapter dynamically switch. So here we're saying, okay, Kit, I'm processing this particular request. I want you to give me the HTTP adapter that is specific for this request and it provides a client. So this is a super lightweight operation. There's not actually anything being created here. This is just allowing us to get a client that is for the correct virtual environment. And so this is basically just a very shallow copy of the Hasura Go GraphQL client library. And all we're doing underneath the covers is we're basically, instead of making an HTTP call directly, we're generating an event and then proxying it through the adapter to allow us to do that dynamic switching. And so this is our query that we currently have. And so what we need to add is gender. So, similarly to alignment, we'll kind of go through and add gender. And just to kind of make a little bit more sense, we're going to rename what is actually the gender column to value just to kind of make it a little bit simpler to read. So, basically, we're just extending our GraphQL query and go to match this query here so that it returns the gender as well as the names and alignment. So the next thing we need to do is add an HTML template. So you'll see here, we're using kind of a helper function from Kit, which is our SDK by the way. I should have mentioned that. And which is able to generate templates using built-in Go HTML templates. So if we pull our template, we'll see here is where we're producing the HTML table. And so if you're not familiar with Go templates, they're used heavily in Helm, which is how I kind of got my first look at them. And if you like templating, which some people do, some people don't, it's they have a pretty nice system set up. But anyways, we will go ahead and add the changes. So what we want now is gender. And we will also add the column for gender. I'm glad you got that, Sebastian. So that's a first person to notice it. Kit is a baby fox for anybody who's trying to has no idea what we're talking about. And Kit is also the end of SDK. Works out well. Anyways, so we'll go ahead and make these changes. And so again, we just added extended our query to pull back gender and extend our template to pull that into our table. So again, we'll go ahead and commit this. And what we're going to do now is, oops, I was supposed to do this first, sorry. So we're going to check out a feature branch. I was supposed to do before I did the commit, but it's okay, we'll figure it out. So we're going to switch over to this feature branch because we're adding gender to its new feature. And what we're going to do is a fox publish from this branch. And so again, this is going to go in and build that app deployment for us. And you'll notice there's a couple of things. First, it's actually going to build the component because we made changes to it. And then again, it's going to use, it automatically uses the branch that you're active on for the app deployment name. You could specify it explicitly, but it often works out well to just use the branch name or the tag name that you're on. So you'll see it created that new app deployment called GraphQL feature. And if we go over, you'll see that now we have two GraphQL servers running because there's two different versions of this. Right now, if we go to John, you'll see there is no gender table or gender column because we're still using the old version. So now what we'll do is we'll do a release. So these examples are all in the main Qfox repo under the examples folder. And then we're working on some documentation, Sebastian, to kind of walk you through and text what I'm going through right now. But if you look at our Qfox GitHub page, as exact Qfox, there's this examples folder that has this GraphQL code, as well as our Quickstart code, which has a couple components. And the Quickstart guide is a little bit more full or featured and kind of walks you through all this stuff. So all that's there, just clone our main repo. Or like I showed you in the beginning, you could use Fox to kind of initialize these locally. So Sebastian, do me a favor and just email us your address. And we're going to set up a complete thing on the Hisura stuff. And I can send it to you when that's ready. So what we're going to do now is release that new app deployment to the John Dev environment. So now if we go over and look back here, we'll refresh this page. And now magically we're using our new version. So the gender column showing up. But if we go back to prod, still the old version. And that is still the old version. And you'll also notice again that John is using my database where I updated the name here. So great, we have our new version. Everything looks like it's supposed to look. Gender is coming back the way we want it. And so now what we can do is go back and check out main. And normally you'd merge in your feature branch, although I forgot. So let's pretend that it just merged that in. And now we'll just do our Fox publish again. And what this is going to do is now it's going to update the Fox GraphQL main app deployment. And since Dev is already released to that, what we should see happen is that Dev is now using the new version. And so because it's released into a development version, you're able to update these app deployments underneath the covers and it's automatically updating kind of live as you make these changes. And the reason that's all possible is because we've explicitly marked these environments as being capable of that. So this release policy here is indicating that you're able to make these live updates. So changes to the virtual environments as well as changes to the app deployments are realized immediately. So I didn't test this, but let's give this a try. So for example, we can change our sub path for Dev to be something else. So let's just call it something. So if we go ahead and apply the environments again, it's going to update the path for Dev, the sub path for Dev. And what we should see happen is when we go in and refresh this, no longer found because we changed our sub path. So now if we hit it here, it comes back up. And so all that's happening automatically under the covers, because we've explicitly said that it's okay for this to happen in this environment. Now, if you look at the broad, broad environment, you'll see that it's stable release policy, and that's the default. And so that won't happen with in prod. When you make a release and into a stable virtual environment, it actually creates an immutable copy of the environment variables and secrets and the app deployment that you're releasing. And so any changes underneath the covers to those things will not affect the live deployment. So just kind of some little details here. So let's go ahead and undo that. So what we're going to do now is we're going to just make another release and publish our changes. Sorry, we're going to publish a new version of our code here with the gender changes. And so again, this is just creating a version of the app deployment, which is immutable and required to release it to Dev, or sorry to prod because it's a stable release policy. And now we'll release our version to and to prod. So now we should see that they're playing the music to get me off stage. So prod, Dev, and John are all now running this new version. So you'll see we're, if we go back here, you'll see we still have two pods running. And that's because the app deployment for version one is still running. So you could see our feature app deployment or main app deployment version one and version two. So if we deploy this version, which is no longer being used by anybody, and go back into our pods, you'll see it distilled everything. And now it realizes there's only needs to be one GraphQL server instance running. So I'm going to finish there. Well, I'll give you one sneak peek really, really quick. So we've been working on kind of integrating. Oh, sorry, never mind. I didn't set it up properly. We've been working on getting traces working. And so the primary stuff is there. Look for a release in the next couple of weeks. We're doing a whole bunch of really cool automatic tracing and linking with logs. So we'll probably show that in our X screencast as well. Okay, I'm done. Sorry, it took a lot longer than I was expecting. Yeah, no worries, I guess, right? So yeah, folks, you can ask your questions if there's any, we'll be able to answer.  And I'm just going to avoid going over it and make sure that we have time for questions. Sure. If we have any, if we don't, I can actually crank through it. I think you can go to the slide for folks to ask questions. If not, you can just go tonight, I guess, it's better. Yeah, so so first I want to thank John for going through that. So John is the guy responsible for this tech and he's done a lot of good work. So how do things change with Kube Fox? Changes are quite significant inner team coordination is tremendously eased teams and even individual engineers can rapidly prototype and test their changes. All of this without any bureaucracy or overhead developers deploy and test the app as if they had dedicated resources to do so. Simultaneously provisioning and is automatically controlled. John was showing you that at the end that distillation of the deployment to only those components that are unique. DevOps doesn't need to be burdened with day to day logistics around individual team efforts. So these type these things and the tools in Kube Fox are available to the teams themselves. We don't need to configure ingress. We don't need to configure namespaces. Kube Fox provides a service mesh. We don't need to duplicate and manage config maps and secrets. We can actually use Kube Fox or ease to customize things. For example, switch databases and layer in different credentials and John showed that some of that to you. The switching of the data stores particularly easy with something as nice as Hasura. We also don't need to configure deployments or telemetry. In some cases deployments aren't even necessary to accomplish some of the things that were described and I just want to be clear that Kube Fox runs on any cluster. Here's some contact information. So Sebastian, don't forget to send your information to me and I'll be happy to get you some information out on the stuff we're doing around Hasura and GraphQL. We want to round out that tutorial. I hope this speaks your interest and you decide to check out Kube Fox. We very much welcome you to do so. We very much welcome and invite your thoughts and feedback. Good, bad, indifferent. We really want to hear what you have to say and where you think we could improve what things like etc. The spirit behind zigzag is simplification. To that end, we think you'll find that Kube Fox is easy to work with and if it's not, again we want to know. The quick start is a great way to get going and gives you a sneak peek at the power of Kube Fox. We recently ported to Azure so you could run the quick start either on your local system on kind or run it in Azure. Sorry, I want to make sure we get to Sebastian's question because I'd like to answer it and thanks for all the chat messages, Sebastian. I really appreciate it. Istio was actually something I used in the past and it was kind of this love-hate relationship. There are features from Istio that we're implementing. One of the things that kind of came out of our last, Steven and I's last experience managing kind of a larger medical application on Kubernetes cluster is that we ended up kind of stringing together things like Istio and just forgot the name, a tool for CICD and then we had an API gateway. We had all these open source projects which are awesome open source projects that we ended up spending more time getting to work together and managing and upgrading. The genesis of Kube Fox was let's pick kind of one way of doing everything instead of building a kitchen sink for an API gateway or kitchen sink for Istio is for a service mesh. We're going to do things one way and we're just going to kind of build the whole software development life cycle into a single product and make it very, very, very simple. The short answer is yes. Kube Fox would be a replacement for something like Istio. One of the things that's really cool is we're actually doing edge routing even so you could be matching on hosts and things like that that you'd normally be doing with an API gateway. You're able to write that all in those routes. Which gives you a lot more visibility and also the, yeah, it was Argo. Thank you. We're using Argo, which is really cool. But anyways, that's the long and short answer. Hope that answered it for you. Okay, so yeah, we are about to end the session. We are out of time now. So yeah, thank you so much, Steven and John for your awesome session on IQ Fox. And yeah, see you again soon, right? Yeah, thank you. Thank you. Okay. Okay, so thanks everyone for joining the latest episode of Cloud Into Life. So we enjoyed the interaction and questions from the audience as special thanks to Steven. And thanks for joining us today and we hope to see you again.


If you're subscribed to the channel or a long time viewer, you know me. I love deckbuilders and card games as a whole. I enjoyed my time with Noah Prophet, I'm happy to say, but I do have some issues with it. What does Noah Prophet do right? The team is our first big winner. The game's got a really cool Mad Max aesthetic. The world display in Noah Prophet is a post-apocalyptic one. Civilization has climbed down its lofty ladder, and turned quite a bit more unpalatable than we would like it to be. Deserts, swamps, and mountainous landscapes make for equally dangerous pathways on your Prophet's path towards salvation, and it's not even 2050 yet. This game draws inspiration from Slade Aspire in several obvious ways, but it very much makes the familiar formula its own, throughout strong identity that it claims, and many unique mechanics which add dimensions you simply don't have in SDS. Like Slade Aspire, Noah Prophet makes use of randomly generated maps and events. Unlike SDS, the focus is not on one single character. Usibilities grow in power, the better their deck becomes, but on an entire caravan. For a close comparison in terms of caravan management, Banner Saga comes to mind, although in the most basic sense, with the need to keep a close look at a pair of resources, food, and hope, without which your situation turns from bad to worse without delay. After your first few runes, you amass a respectable amount of unlocks for each starting option you pick, both in terms of leader decks and convoy decks. These two different decks warrant to mention. For one unlike in Griftlands, where you had a battle and negotiation decks, you use both simultaneously. In the leader deck, you'll find all kinds of handy abilities that will differentiate, depending on which would-be prophet you play with. Your convoy deck is where you'll play some of the members of your caravan. Some, but not all. And this is one of Noah Prophet's elements that I like best. Just because you pick up a follower doesn't mean you're locked into using them. You can play around with the up to 24 follower limit for your caravan deck to try and set some synergy between them. Let's get back to the architect of games, how the miller's tree requisites for what makes a good card game. I say back because I've used him in my Griftlands video, which you can see somewhere on the screen in a card or some such. The cards need to enable synergy is the first of these three points. The second is they need to create interesting decisions in the long term. Entered but not least, the cards need to have a distinct identity. My biggest pee with Noah Prophet is it fails at allowing the player to better create synergy in their deck. While the starting convoy decks each have different teams in the beginning of a synergy, whether you'll be able to develop that synergy is anybody's guess. So much here is down to chance random events.  Or do you have high enough altruism to persuade certain foes that you have beaten and who's a surrender you have accepted to join you? Now if you don't have that high enough altruism rating, tough luck. The best way to do it then is with batteries. And marketplaces, which offer about a dozen different cards each, do allow you to develop synergy. Batteries for directed are the resources that you use in lieu of a more traditional currency such as gold. If you play smart, if you're lucky enough to have scavenged enough food and gotten enough sellable resources that will bring in that battery catch, then you can make a full use of the market. But if you have struggled with any of your resource management, the task of synergizing your deck as to your wishes becomes increasingly more difficult. This isn't a clear cut issue and the synergy you'll have fluctuates between different funds. Perhaps it's the sheer amount of caravan cards in the game that make this more challenging. A greater volume of cards an offer at the market might offset that, as could some additional choices during events. A greater control as it were given to the player and less reliant on RNG. This reminds me, you can get points in one of three spheres I suppose. Science, religion, altruism. Each one opens up new choices. Getting points in these is at once very logical and elusive. If you choose inquisitive options during random events you'll get science points. If you chose the universe and say mystical stuff to your followers you'll get religious juju. And if you're nice and not a murder hobo, you might just gain points for being an altruist. Where this falls apart a little bit is, for example, when you defeat an enemy except their surrender and are then unable to accept any of the enemy's followers in your own convoy, because your altruism points are not high enough. How the actual bandits know that that is so, I cannot explain. My only guess is that perhaps there's an international board of observers watching everyone in the deserts and swamps of this world in keeping track, posting the information on some sort of online forum. Or it is a problem I can only describe as mechanics being divorced from thematics. So for example, whenever you reach an outpost to rest and explore in between the dangerous wilds you're offered the choice to heal five times. Each time you heal either your character for five health or three of your wounded followers. Each time you heal also makes use of food. Why are you limited to this choice? Mechanically this is an example of time and resource management. You often be in the position to gamble between how far you're willing to risk your convoy followers and how far you're willing to risk your leader's neck. Thematically there is no reason that's established as to why you have to leave that safe space anytime at all before everyone in your convoy is healed up. None. And for the record this could have been done in a single throwaway flavor sentence as soon as you enter one of these safe zones. When I say safe zone here I do not mean your traditional safe point in the game. This is a roguelite. What I do mean however is that these are places where you have this tennis veneerous civilization somehow surviving and people attempting to build something. To return to the science points and so forth this doesn't work well as a system to encourage the making of interesting long-term decisions. The warding of these points is too arbitrary and even though some opening convoy decks can give you an opening quantity of scientist points that doesn't help with the overall arbitrary nature I described. Further it shoeholens you in down a certain path if you want to optimize any tree, any one among the three types of points. Which makes the game less interesting and really takes away from your freedom as it were. In terms of difficulty this is among the harder deck builders I've played but not in an unfair way as some complain. Most of the times I died I could pinpoint the moment I had made a mistake that caused me to run. It's challenging sure enough but the kind of challenging that makes you want to go back and give the game another try. If the tools we had to improve for a better calibrated toe this would see a lot of the complaints that the difficulties met with go away. Difficulty spikes, the occasional bloated titling mess. These are real issues and they are annoying without a doubt. Something else the game differentiates itself by is the positioning on the map. A grid of rows and columns with individual spots of your cards and units to occupy which as you've seen by now fluctuates wildly between different encounters. Units on the map can attack only if they are in the front of their row, either individual enemy followers or the enemy leader directly. That is with the exception of snipers who can stand behind other units and still attack. You've got your taunt followers, you've got straight to the face bunchy boys that just go all out as soon as you put them on the board and plenty of other very familiar types of minions. Some card types are actively hindered by smaller rows for example. In all of them force you to adapt strategies and take into account debris and the items occasionally spawned at the beginning of an encounter. The combat itself is exactly what every card game should strive towards, fun, addictive and engaging. Whether I succeeded into shaping a deck into something proper or into a miscellaneous body of followers whose abilities don't mush together well, I wanted to pit them against the progressively more difficult opponents my profits faced. So too for the exploration. The ability to double down on paths and explore every single node on every map, if you have the resources and the patience, is another way in which the game differentiates itself while reinforcing that team of desperate convoys struggling to survive and grow in a world set on stopping it at every point. Is nowhere profit a perfect game? Hardly. But it is a very good one. Tapping into the card game's equivalent to strategies, one more turn, syndrome, we're exploring just one more node, fighting just one more battle is such fun that you inevitably look at the time and realise it's 3 in the morning and you haven't even had dinner yet. Thank you for watching, if you enjoyed this video please like it, share, subscribe to the channel, ring that bell button for all the future notifications and leave a comment. Have you played nowhere profit? Are you planning on trying it out now that you've seen it? It is I should mention free with or rather available with the Xbox Game Pass for PC subscription which continues to be very much excellent. It's how I played it and I'm and I'm very happy to recommend the mall to you. It has over a hundred excellent games and I have only scratched the surface of all the ones I want to try out. I'll see you next time. Bye!


President Mohamed Abu-Hari has frowned at the reported inhumane and discriminatory treatments on Nigerians and other Africans denied the right of passage out of Ukraine. In a statement, Gaba Sheo said all citizens should be treated with dignity irrespective of the color of their passports or their skin. According to him, there has been a long history dating back to decades of Nigerians and other Africans studying in Ukraine, particularly medicine. The majority of Nigerian students in the country are university enrolled students. He added that all who flee the conflict situation have the same right to safe passage under UN convention.


Okay, one thing you don't want to be is in a house without snacks with a girl. That's hungry guys I'm still kind of scared because there's barely any goldfish left. I didn't you had any other day She's always blaming me for everything guys Thank you guys so much for all the gifts in the room Oh, what is it? What's going on over here? What's up guys? There's her. I don't know. I guess we just start filming start filming Guys what is good? This is everything you don't see all the behind the scenes. Yeah, our night routine Hey guys literally as you can see we just finish filming our Christmas video Highly highly highly highly highly highly highly highly highly highly highly. Oh, I was gonna rat to that But yeah everyone after we did our morning routine everyone's like we need a freaking night routine guys This is literally everything that you don't see afterward on filming everything that goes into the nighttime part of our life Usually after we're done filming we usually don't have this big of a mess But sometimes we do so it's the part of our night number two weeks We kind of clean up and we get ready for the next day, so I do have to get out of this outfit Yeah, she's looking sexy so if you do not know this is for Christmas I know we're posting this a little after Christmas But this video was for Christmas and she put on a freaking naughty outfit and pranked me guys Right now I'm gonna go change and then me and Bo are gonna come out here We're gonna clean up this room We're gonna show you guys a little before and after so she's she's about to get really really un-sexied Yeah, she's about to get a little little night time Mariah. It's the natural beauty guys. So this is the before All right. All right, and this is and After Night and day all right Oh for real when we've started that's how long it took to clean up We have a little toys out But you know you got to leave some toys out for him to play with by this time It's four o'clock usually by now. We're cooking dinner, you know, it's hung we're hungry after a long day of filming You got to make some food and usually we cook our dinners, but we're actually out of dinners We have to wait until tomorrow to get a new wave. We got to show you where we're gonna go guys Can you guys guess where we're going? Can you guys guess? I think you can I think you can But we're gonna smack on some food That is the next step of our night routine to a lot too many We have a really busy night because we're trying to prepare because Billy's from Florida soon tomorrow tomorrow Oh my god Yeah, make sure you check in I know but literally I'm gonna be out of playing 24 hours from now or 25 hours from now I'm gonna be flying to Florida. We're gonna be leaving each other. We're leaving guys. I'm leaving her I don't want to be with my anymore. I want to go to Florida by myself. No, I was kidding But she wants to be with her family for Christmas was totally understandable. We'll see you guys We make it to our destination. Let's go guys if you haven't guessed it yet. Yes, we went to Panda Express You guys already know this is our daily dose of Panda We always go here usually we come back with the banger Dinners usually are cooking at this time like our own meals from Hello Fresh. Yes, but I will say it has been so hectic guys We've been filming two videos every single day. It has been crazy and yesterday We had two family Christmas parties over the weekend, so we couldn't even film so now we're filming on Monday It's like you guys will see this like after Christmas. Oh, yeah We're filming this during Christmas. So anyways besides the fact that we're not cooking Yes, we went to Panda and we have to bust out the camera and film before the light goes away because it's getting dark out guys This is a night routine. So things are gonna be getting a little darker So we do have to go on to party city We got to get a few things and then we got to go to Target and then get our oil change So we have a lot of errands to run and then we'll be back home and we'll show you guys our other night routine That's the best part. What else we do? That's the best part because that's the time that we actually get to just relax and chill Yeah, she she scrapes off the you know ten layers of makeup that she wears, you know all that So we actually just made it back home It actually went really smooth I've never got my role changed by someone else. I've always done it myself and we were in and out in like For hours But the reason I'm only wrapping papers because we would film tick tocks be like before we actually get done with the night after our YouTube videos But tonight we are just going to be skipping the tick-tock part and going to our full-blown night Get that hack to bad routine What we do and next is I after dinner I usually go to the bathroom. I take off my makeup I don't brush my teeth yet because I do like after we're done take a make-up I usually just lay on the couch. We watch like our TV show Outer bangs all that but thank God because that's my favorite part I could finally hug this girl without her getting makeup on my shirt Sorry, I know I'm pulling your head a little bit, but she always is getting makeup on my shirt I always have to look out for that so at night time I love it cuz I can just cuddle up next to her and I have to worry about All day and I'm ready for just a get-off question of the day comment down below Well your nightly routine consists of I want to hear what your night routine consists of yes What do you do at the night and you know how much and how many steps do you go through in order to complete it? So right go go do your makeup, babe Yeah, but I need to tell something Yeah, I need to tell something go go Joe When I'm done. All right, so while Mariah's taking out for makeup I'm usually on my computer editing thumbnail for the next day and Uploading files that the video that we filmed today. So whatever video you film today I upload them start editing the thumbnail getting it all done So you know the morning we could have another video ready for our Malva squad and Yeah, so we're gonna go over to Mariah over here.  Was that last video I did that? I did that in our last video that we filmed today I'm sorry This is not okay. I'm not gonna allow this to happen. I don't know That's our night routine. That is not our night Mariah taking L's is always the night routine guys That's the main like part of the night squad.  This is my time with the Marvel Squad. We don't want team Bill here right now.  You're not appreciative of me.  So not phony. You are phony.   I'm gonna be productive while you do this I'm gonna be doing this and being productive Yeah, that's my cue. All right guys, so here's gonna be a little montage of me taking off my makeup I don't really have like a super cool skincare routine All I really do is just take off my makeup and after I take off my makeup. I use this I don't want to get roasted the comments. So I don't know if I'm saying you're right I usually set a fill but I've been told this is better So I've been trying it out and I mean it's been working pretty well, but yeah I don't really have a skin care routine I usually just take on makeup and do this and I brush my teeth you guys it's gonna come along with me and watch Me do it and I use these as my facial wipes to take off my makeup All right guys So my face is cleansed like how is that they're breaking out bad from these masks and because I've been super super stressed So if anybody has any recommendations for like stress relievers, which is anything like when you're going through a hard time Like what do you use that'd be awesome because I usually don't break out as bad as I bet I know many of you guys are probably like, oh my god, your skin looks great But for me, I just I feel like I've been like here all my chin here If any of you guys have any suggestions just you know comments on below help a girl out because you know I'm just been stressed and I've been going through it. So yeah, this is my skincare routine This is what I do every night I just you know wash off my face which I think that's a good start of not having acne now is time for me to change in my Pyjamas, I'm back guys. All right me just going but it's gonna be both of us changing because we're both gonna get our PJs I'm not about to fall asleep in some skinny jeans. That's uncomfortable. All right, so this is probably the most relieving part of the night Because you got it you can take off your bra, right? Yeah, I'm taking off everything. Just let everything take socks off You're sleeping socks. You're not weird, but you're just different Three two one Guys it is never too late in the season to keep repping Christmas like come on And if you guys have not seen our Christmas video yet, she's rocking my robe that I got I have shorts underneath. I want to be comfy. It's super warm. Yeah, you look cute. Thank you This fits you so good. That's the next step of the night routine literally now We can finally get everything done comfortable.  We have twin pimples. We both have one right here guys. It's life Whatever You always got to wear them but hey look at this apartments kind of clean we got our fit on It has from a hundred K that's when we hit a hundred K last year on YouTube One a mill to one mill and a fan sent us that a fan says isn't look it now It's on our couch. We told you guys like if you guys do anything make anything buy anything We're gonna use it in our apartment like we literally love showing it off So guys, I don't know if you know, but like night routines are not as complex as morning routine You're getting pumped up you're getting ready for the day working out and all that stuff night time.  What else are we doing? We're snacking So the next and almost final part guys if you do not do this yourself I know all of you do is snack. We got to grab snacks before we chill out on the couch and wash Netflix or I'm exhausted Two videos a day we've been doing this since last Thursday. I see you guys are seeing this out on Monday or Tuesday I don't know what you guys are gonna be seeing this but it's gonna be after But we've been filming two videos a day just to be able to get them up every day It gets draining. Well two videos a day is draining cuz like you have to put your full momentum in both videos We also do tick-tock so that's a lot, but it's so fun. Don't think that we hate it We love it. We would film 10 videos a day Oh, yeah, we had to guys like literally we would not trade this for the world The good part is we went like and had some Christmas parties over the weekend with family Yeah, and we of course stole some Desserts from the party so and we could be snacking on those. We got a lot of other things Mariah actually got me some tweezers. I might snack on those too. You have a tweezers for Chris Oh Babe you did get candy. Do I know why cuz I'm your candy No, it's not good enough sweet enough for that. What oh my gosh Oh my gosh, right if you can guess what's behind my back. I'll go to the downstairs. I'll get you candy right now Oh water What kind of water bottle a water bottle it's a spray water bottle But there's a candy machine downstairs I will go down and get you some if you want to do. Okay.  One thing you don't want to be is in a house without snacks with a girl That's hungry. That's all I could say guys. I'm still kind of scared because there's barely any goldfish left and look at her face I'm sorry I didn't you know you had me the other day. She's always blaming me for everything I'm with you 24 hours a day where and when could I've eaten them? Okay, you got some yeah, there's some stuff in there left guys guys I am so brutally exhausted This is the fun part about our night routine is because this is like when you just want to like chill and do nothing I think it's so funny the difference between watching a morning routine night routine because you could see how Energetic and ready to go you are it's like going to school and then after school for some reason just Learning and being there like just kills you and brings all of your stamina out But hey, that's what's to be expected you guys wanted it and you guys got it I hope you enjoyed our night routine. It is very it's still like very eventful But it's way less on our morning routine Yeah, we definitely just Plan after we film we just you know chill eat dinner and it says we do our date nights Why laughing cuz cuz you can just tell your tired you're like Give me a break guys it has been such a long couple of weeks, but I would be I want to say I'm so grateful for each and every one of you. Yeah, don't get us wrong I know our stamina can be way up here right now, and we usually are way up here Trust me get ready for our next videos guys because they obviously are not gonna be night routines Oh, yeah, no, no, we just sit here Yeah, we're just gonna chill here watch our snowfall on the TV because there's no snowfall I actually did snow a little bit today Yeah, I did but hey guys we love you I just wanted to get the point across that we're dead right now, and this is what you guys wanted So yes also guys if you guys want to be a part of our million give away subscriber giveaway guys We are doing it ten people are gonna be winning a hundred dollars And we're gonna be getting some a whole collection of our merch our merch like art not like the whole thing But like the sweatpants socks the outfit sweatpants socks my sweatshirts literally everything's the same even a mask guys You can win all you have to do is be subscribed turn on notifications Yes, and comment down below when you're done make sure to watch all of our videos always we would like them just be Showing love and that's how we're gonna pick the people guys. We're giving away a Thousand dollars and a whole collection of our merch I'm so excited to make sure you guys are commenting down below your guys's cash up as well Yes, that is how we are going to be picking those hundred dollars and get ready because in a couple days You'll hear a thing and you might be the one that receives a hundred dollars from us It's gonna be lit. It's gonna be awesome all we have to do now Mara is watch TV and go to sleep Go sleep go sleep guys and we do also I don't know why I'm saying a so much But we lock snap in our room at night too because his litter box in there and everything in his food And he usually comes sleep with us, so it's the best thing ever It's so cute because in the morning you'll wake up and he'll randomly be like snuggled up next to you. I know I love it All right, I will squad so we will see you guys in the next video, but until then peace. Love you guys


Happy Sunday! It's the series finale between the Brewers and the Rez. Let's tie up the series and go on to the next one. Win for Tiggie! Go Brewers!


What is good, Marvel Squad? And welcome back to our channel. It is early in the morning and we're starting off the video with a challenge. If you guys don't know, we have special guests here. Oh, we need a show who's here. If you guys guessed it right, which I'm sure you did, we are here with the one and only Jules and Son. Yes, I actually came down to Florida, I'm so excited. It's crazy seeing you here and like us not in Boston. Like it's just, it's so different. I like it though. We escaped the smell. Palm trees. They just got a snowstorm too, didn't you? Yeah. A couple days ago, so. Julia got her hug in a palm trees in. She's all good to go. No snow here. We don't need a shovel. No need to worry about that. All we need to worry about is getting heat stroke, so. Oh my God, I'm sweating. I'm sweating. I don't know how Bill is wearing a hoodie right now. I'm already sweating. It's 68 degrees. For us, it's 68 chili. For you, I know you came from 20, so. That's nice and warm. That's nice and cozy for Julia. Guys, as you can see by the title today, we are going to be spending 24 hours on our brand new golf cart. We can finally do this video. At least try to. Because we literally just got this last week. So we're going to put it to the test and see which one of us out of the four could either last 24 hours or if three people get off. Last couple, last couple to leave. Should we do couple first couple? One couple gets off. Oh, I don't know. I'm not going to let you guys know like not to brag or anything, but me and Sot are kind of CEOs of these showers. We're known for these things. But Julia, we're doing all that. Hold on, hold on, hold on, hold on, hold on. Okay, we're going to do couple first couple. No, listen, listen, listen, listen, listen. Me and Julia both have something in common and that is a small bladder. Oh, your bladder. Did you go to the bathroom? She'll pee in a cup though. My girl will pee in a cup.  I am on that cart too. I will. That might make it. I'm sorry, I'm sorry. Does anyone need to go to the bathroom before we start this? You know what? Actually, let me just, let me just try. Yeah. I'm sorry. All right, bathroom breaks are all done. No more unless you, I guess, go in a cup. But everyone, right now we're going to get on this golf cart and the moment you step on, you cannot step off. If you step off, your couple loses. Whoever stepped off, are you ready? Are you ready? You better have it on my deck, babe, I swear. You know, I mean, I win half of our channel. Come on, yeah. We don't need it. We don't need to talk about winning. We could just win. That's how it's going to go. We are actually stopping somewhere first. And I'm- Oh, we're hungry. Whoa! Hi, Elise, give us some ice cream. Yeah, starting now. Cool. It's already been- I really should have thought about bringing a jacket. Not even five minutes and Mariah's already freezing. I really, I really should have thought about bringing a jacket. But me and Saad are covered up. It's applied pretty quick. Me and Saad found a different path last night. Oh. If you guys saw last video, I said that me and the special person is going to go somewhere in the golf cart. How would she get the system? We did. Oh wait, she's the special person? Of course I am. Going on the golf cart. If you guys can guess what this special place is, let me know. Guys, wish us luck. We're trying to get past this intersection. What do we have to do? We have to go to a light. You guys, a light has a crosswalk and we can hit the button. No, babe, you gotta go, you gotta turn around. Let's go to the light over there. No, it'll be good. Oh, what? Guys, I'm a little nervous.  You know, Florida drivers, I'm not trying to roast Florida drivers, but they're not the greatest. We're good, we're good. I'm doing such a good throw. That would have been so cute if I could. That was scary, guys. If I did a drive-by, I'd drive that far. That was scary. Don't even under us to make this scary. That was scary. Don't want to fall off. Yeah, you don't. Bill. Oh my God. I keep this seatbelt on. If we keep these seatbelts on, we're going to tip the seatbelts. Same thing first. Oh yeah. Oh, the white ones? And red dead ones. Those come to our house all the time. Those are always in our front of our house. Water burnt. Water burnt. We got to press the button. This is scary, look at it. There's literally a thousand cars around us. So many cars. We just have to wait for that sign to say go, and we're good. No, we're doing too much for you two. We are doing too much, guys. Give this video a thumbs up so we don't die, because we're risking our lives for this challenge. We're trying to be as safe as possible, but I can't promise you that. We have our seatbelt, we're buckled up.  No. No, what? All right, good, good. I'm telling you right now, nobody's looking at us like we're weird. No, like literally nobody's even looking at us. People are, girl, they're looking at us. Look at all of them. Look at all of them. They're all judging us. They're all like, what are they doing? They're filming a video too, huh? All right, we're about to go. Uh-oh. Don't go until it says, don't tell. Don't go until it says. No, go! Oh, it says go. Ah! Cross one more road. That was money right there. Okay, honestly Florida came and clutched with whatever these are. What? Like they're not going. It's like a, what, a walking powder? Like a... Oh. What do you call them? It's a bike path. It's a bike path. That was scary guys. That was fun. It gives your adrenaline going. Do things that make your adrenaline go. Okay, we're gonna say the one tip off this curve and we're done for. Oh, we are done for. That's what I'm saying.  No! No!  Hey, we gotta turn signals on here. We're, we're street legal right now. Ooh! It feels so weird. I feel so open. I feel like I'm... I feel like I'm in a cheat. The whole world can see me. Look at me. Judge me. Girl, you're on social media. Yeah. Right, if you guys guessed right, we are at Starbucks.  It's already starting. It's already happening. Let us just report live from back here. Here. You guys report live. All right. We're pulling up behind us. Switches up. All right guys, we're about to take our order. I don't know, this just feels so weird and cool being on a golf cart, going into a drive-through like this. Like, I don't know. Check that off the bucket list. That's a bucket list. That is an experience. So this is actually really fun. I will say I do regret not getting a jacket and should I just order our food and then take off so they can't? It'll make them lose the challenge. Yo, we are right next to you. A Sabi's wrapping. We are right here. Wait, I didn't hear anything. All right, whoa. You didn't hear anything. He was being mean. He was being mean. I'm not allowing it. Cause I love my friends. Oh, here we go. Up, here we go. What do you want?  Let us know berries. And... Dude, I've never been this close. The vet is even like, I can't even get this close. This is cool, guys. Watch, I'm not even taking our order. I would cry. The people here are homies. Can I get a tomato and mozzarella penini? Got it. A spinach feta wrap? And then... Grounded pink drink, light ice and berries. And then... I've done a grounded pink drink with white ice and no berries. Grounded pink drink with light ice, no berries. Hi, okay. Can I get a minty pink drink with no berries, light ice? And then, can I get... Dad, that's out of golf cart right now. Ordering Starbucks. Can I get a minty green drink with ice? You got it. Look at that. And one more butter croissant. And that's all. Thank you. Woo, we did it, guys. We made it. That was so dope. We made it. Now we just gotta pick it up. Now we gotta pick it up. Hopefully we don't spill over ourselves. I think we're gonna go into a parking spot and eat, cause... Oh, we are gonna have to. Are you kidding me? I'm starving. I need some grub. I'm getting hangry. I'm just dilating it for big bumps. You guys already know how I get when I'm hungry. It's not a good scene. It's not a good site. So I need food. And just turn off the camera right now before anything else comes out. We made it through the drive-thru. We got our food. Step A. Now we're on Step B. Step B is parking and eating. Cause I'm sorry. I can't wait to get home. I am ready to grub the end. All the in between. All the in between. We're all ready. Look at that. We're literally in a parking spot. Look at this. Good park job, babe. What are you doing? It's so loud. I'm letting someone buckling me. Oh shoot. All right. We're gonna do a little mukbang guys. Just eat and talk. Mariah, we've passed my digestive pills. Yes. I can't compare. He came prepared. Yes, I'm extra. I need digestive pills. I have stomach problems. There's a question for you guys. Do I have stomach issues? Yes, I do. I have very bad stomach issues. Sorry, I'm gonna pass them back up. It's all right. I'm her little chauffeur. Oh my God. Oh, I do. So I don't know if you guys ever get tomato, mozzarella, peninis, but I do not like the tomatoes in these. So I take them out. She literally doesn't like one of the main foods in the tomato, mozzarella, and peninis. She's just- So isn't it just mozzarella and bread? Yeah, literally. And spinach. No. It's like a spinach sauce. But like this thing, of course. We're gonna eat what I think. I mean, we gotta eat what we gotta eat. Wait. If you guys wanna go run in to Starbucks, they have forks in there. You can go grab. Yeah, you can get that. You just get off the car right now. Yeah. I think we would talk about that easy. I don't know. I don't know. Like, I've seen your YouTube challenges there. Yup. Not that impressive. We don't know. All right, guys. We're departing. I am absolutely freezing. I feel so good right now. Oh my God. Could you have a long sleep? I had food. We forgot to pull this up. They're gonna help the wind. They're blowing on me. Are there cars around us? No, you're good. Let's do it real quick. All right, guys. Hang on. Oh! We're gonna help the wind. Let's see. I think I will. Let's see. I'm already warmer. We are literally not moving. She's like, I'm already warmer. I feel like it's gonna help a little. Okay, no, it helped a lot more, but it definitely, I can still feel it. No, it definitely helped. No, it helped a lot. I could feel it, like, less on my face right now. Yeah, and it's not like blowing my hair everywhere. I don't even see any of my hair up here. You know, we have to cross the road again. Oh my gosh. Here we go. We're literally in the same boat as we were. Round two. But guys, we survived the drive-thru. That was fun. I have to say, I feel like it was easier getting through on the golf cart than in a car. I do, I agree. That was so crazy, but I really feel like it was. No, that's not saying we don't have to wait in traffic. Oh my gosh, guys. I wanna know something I just realized. That thing could have actually probably helped the wind of the camera sound. Oh, wow. Wow, guys. See, we thought smart. All right, guys. So we've been just chilling on the golf cart. It's been a little boring. We honestly have not all talked in probably, like, a half hour. We literally just been sitting here just, like, trying to figure out, I know. The weather's nice, but we don't have any stereo or anything in here yet. So we can't even listen to music unless it's on our phone. I will say, I do got a pee, so I gotta. It's salt turned around so fast. I mean, I didn't get the advance of going to the bedroom.  So finish your pink drink. Or do you want me to finish it? I don't know if I can do it. You can just. No, you gotta do it. Pee in a cup, and then we'll dump it out, right in the grass. Here, you can do it in this here.  It'll be coming out just as fast as it's going in. No, guys, then there's gonna be pee stain. Ew. We'll probably go right around in a little bit, but we're just chilling for now. Just, you know, no movement. It's like when you're in a car for a while, it's just like a lot of movement, you know, so. I mean, we can at least stand back. Whoa, oh, can you even bend it? There was no stand. Wait, hey, go inside and get ice before that. Go inside and get ice, bro. Guys, it wasn't that serious. Are you good? It was literally a tap. I'm sad. Listen, I know we're YouTubers, but you guys just have to exaggerate. No, no, no, for real, I feel like you should go inside and get some ice. We can at least stretch back here and stuff. You can use this thing and stretch mine. You know what I mean? Yeah, we're cooped up right here. What can you do up there? We're cooped up. We can, oh, we have a whole standing platform. I can stretch your knee. Yeah, I show them, babe. Do a squat, do a squat. Do another one. Oh, hey. No, get out of here. Oh my sea, camera goes on. The dirty business comes out. All right, guys, so we have a really crappy idea, but I am sick of driving.  Wish us luck.  No, I just got a, hey. Whoa, what do you say? She don't know if I trust you driving. I got this. She got it, I'm just joking. So you two just go to the side. Let's see how this works, okay? I'll just wiggle through. I'll hold the paper. I'm just taking my drink with me. Wait, right, put that up there. Oh, wait. Oh, this is up the car. Oh, wait, I could probably just go, wait, look, go like this, look. Just go like this, like that. Okay, I'll go around this side.  You're gonna have to get this really good. This man. Don't spill that, do not spill that. Good thing we didn't get this. Don't, please, please, don't. I got it. She got it, she's a baddie. All right, are we staying back here? Good thing we didn't, oh. We're staying, all right. All right, guys, you and the girls, we're all mad.  This is the girls' love. This is good in the driver's seat. Okay, where's the seatbelt up here? She's gonna leave, here wanted to get a golf cart. Oh, I am, it's gonna be bad. Now you've got your tassel, that's already a golf cart as it is. Dude, I'm starting fun games in there. All right, guys, I might have to catch the camera, but I feel like it'd be funny to get a first view. Here we go, only question is how do I reverse?  Oh, God. Oh, God. There we go, everyone buckled up? Yeah. Aw. Why are you like scared? It goes backwards. What am I really gonna do? Damn. We're like a school bus. Yeah, maybe hold the camera so it doesn't fall forward. Yeah, then they might go. We're about to go. I'm moving. Julia's good, Julia's good. Now let's see what this bad boy can do. Oh, she picks up speed, nice. Drive's nice. It does. So, look at the rope, please. Whatever else is up. I got it. So she's having a time of her life, right? Have you driven a golf cart before? Okay, so I've heard. My parents, yeah. I've heard from Saad, this is from Saad not me, that Julia cannot multitask, really good. Oh, God. Why would you out me like that? Okay, yes, Julia is a decent driver when she drives straight. But when she turns, you got a break. You have to lean to the opposite side that we're turning because this car got on three wheels. There was one wheel out the ground. We don't know what wheel. I don't know what wheel, but I felt like a boom. She takes turns like NASCAR. Yeah. And girl, this is pretty lightweight compared to that. This is very. Village up here. Yeah, we did. It's slattered all over. Her paint trick is all over the dashboard. Julia, when we get back, can you just go inside really quick and get a paper towel? Hey, I have a cheat because I got napkins in the Starbucks bag. The Starbucks are fine. All right, guys, it's been a couple hours. Me and Julia were discussing. We're back again. Yeah. And we're out for another three times. I'm out of coffee. So, boys, we have something to tell you. We kind of were contemplating something because we're kind of just. You're working up with both of us? No, I'm just kidding. You guys were starting your own channel. No. I mean, it would be good. It would be good. Yeah, I hope what? So we're kind of over sitting in this golf court. We decided like we're only here for a couple of days. So we kind of want to go out and do stuff. Kind of over. Where are you going to be? We can do stuff in this golf course. We're doing stuff in this. We just went to Starbucks. We go to Target. No, we can't get out. We want to walk. We want to be able to walk. That's it. That's it. We're acting like we can't win this together. I know we could, but like. Right. We're going to do it all. Wait, who's giving up there? I'm confused. Rock, paper, scissors. For you guys. Okay. You guys can rock, paper, scissors. So we're going to rock, paper, scissors. Yeah, you guys can rock, paper, scissors it out. And then whoever wins, wins. If you're fine with that, I'm fine with that.  That's what I'm saying. I don't want to be here. I'm over it. This is the most standing I've got. Listen, I never get troops. I never get vacations. So it was a good time, but yeah. I want to explore before it gets dark. Golf, car, and ride seem fun until you're in them for five hours. Yeah. So we got to do this official then. Just one and done. One and done guys. One and done. You don't do best out of three. You better win. Okay, okay, okay. We got Bill, Bill, Spone, Ring, and me. Are you ready? Rock, paper, scissors, shoot. Was that tie? Yeah. That means we stay on, right? No. Rock, paper, scissors, shoot. Who's trying to save? No, he's really trying, no. Hey, your girl's off though. Dude, pop off of all of them. Dude, either way we said rock, paper, scissors will settle this. Guys, we officially are done with the challenge. It's over. And I didn't think after the girl started talking that we had it. My back is cracking. I didn't want to say anything, but don't know what I thought you guys were gonna do. I thought you guys were gonna both jump off at the same time, so nobody won. So nobody won. They would have been pissed at us. They would have been pissed at us, but we went through this whole challenge and nobody won. At least we got away. Hey, Marvel Squad took the lead today. We did. We did too. Come on. I'll take Paul. He usually did. No, I didn't even saw it. Saw that. Saw it could have won it. He literally, he put scissors, he should have put paper. I'm sorry. Marvel Squad, I hope you guys enjoyed this video. Make sure to give it a thumbs up.  We made it to Starbucks. We went around neighborhoods. We did so much, like off camera. I'm a good driver. Yeah, she is. Honestly, I'm a better driver than Bill. I'm not even gonna comment on that because that is not facts at all. I'm safer. But guys, I hope you enjoyed this video. Make sure to subscribe. Also, this is Jules and Saw. If you're new to our channel and if you don't know them, make sure to go follow them on YouTube at Jules and Saw on YouTube. They do the same stuff as us. You'll probably see a video with us in their channel as well in this trip. But we thank you guys so much for being a part of this.  I'm so sorry. I feel so bad. But I thought we were.  They're scared of us. All right, guys. We will see you guys in the next vlog. But until then, peace. Love you guys.


This video will show you how to manage your profile on Sakai, where the MOOC M4D course is being hosted. When you log into Sakai, you'll be taken to the My Workspace area. You can navigate this area using the menu items on the left. Click on Profile to manage your profile details. You can edit your contact information, upload photos, manage your connections and messages with other users, search for other users, manage your privacy settings, and set other preferences, such as notifications. Click on Membership in the left menu to manage your membership in various courses. You can see right now I'm a member of the MOOC M4D Autumn 2013 course. You can click on the More button to view full course details. You can also click on the Schedule and Announcement items in the left menu to view the schedule and announcements for all of the courses that you're enrolled in. This area is another place where you can manage notifications, as well as the time zone and language that you prefer. The Account tab will display the account details, which you can modify by clicking on the Modify Details button. As always, you can log out of your Sakai account by clicking the Logout button in the top right of your screen.