Okay, everyone looks like we're gonna start. Thank you for joining us. My name is Maria Veraccio. I first want to say that this is a sponsor session at the Summit, so Red Hat is part of the Opening for Foundation, and as such we get one sponsor session. So if you see a lot of the content is very Red Hat heavy, this is why, and this happens in this kind of sponsor sessions. And with me is Chris Jones. We're gonna do a demo today. And before the demo, I'm gonna try as fast as possible to tell you what is it gonna be about and why we're doing this. I'm gonna try to leave most of the part for the demo. So where, how do we get here? So as you know, Red Hat has a wide portfolio for hybrid cloud infrastructure, OpenStack being one of them and a key component of the on-prem platform. But OpenShift heavily based on Kubernetes is there as well. And our customers have been asking for a way of working with both of them together. You probably have heard the foundation talk about Loki, the Linux, OpenStack, Kubernetes infrastructure. Here you're gonna see that challenged a little bit. And I don't even want to come up with a new acronym, but you're gonna see Kubernetes both at the bottom and at the top of that stack. And I'm gonna tell you a little bit why. A while ago, years ago, we had customer requests to run the OpenStack control plane in a virtualized way. And so a lot of our customers use Red Hat virtualization. And we announced that this product was kind of going away. And when we did that, and it still hasn't, but when we did that customer said, okay, we need another way, because we really want to leverage the way that we manage the control plane of OpenStack in an easy deployable way. So we said, fantastic, we're gonna run that same control plane on OpenShift virtualization. And we released that in our release 16.2, it came as GA, it's gonna be available on 17.1, which is the release that we are announcing at this summit. But we said this is not enough. Just running the virtualized control plane of OpenStack, which is OpenStack services, which have been containerized for a long time on top of a platform used to run containers just seems like a little bit much. We can definitely continue to leverage and modernize the operation of this if we just run it straight and natively in Kubernetes. Obviously, this is not something new. This community knows how to run OpenStack services in Kubernetes for a long time. We haven't sort of jumped on that bangwagon because for us is hundreds of customers that translate into a lot of mission-critical workloads, billions of subscribers that we just can't rip and replace. So we needed a way for this to happen in place and to modernize those operations in sort of a kind, less disruptive manner. So this is what the director operator looks like today. This has already been in general availability. You can see several common unknown faces, right? So triple low is there, heat is there, and ansible. And then for the hardware provisioning side, we're leveraging multiple cube birds to run the VMs and metal cube to handle the infrastructure. So if you already have that, why go the extra mile, right? Like why continue to modernize this if that's serving a purpose for your customers? Well, this, indeed, this model has served us well for a long time. We had resiliency provided for a pacemaker. They two operations were managed in a certain way with triple low. And then we had a set of observability and monitoring features that were also available. So why did we want to modernize on Kubernetes? Again, we wanted that fine green OpenStack control plain services. We wanted to leverage the operator framework available in OpenShift. We wanted that replication of failover available at the control plane for those services. And then we also want to provide additional observability for the full stack. So a lot of that is coming up highly for other Red Hat sessions in this summit where we're also going to talk about observability and we're going to talk about how we do a lot of this. And then what about the data plane? So in there, we wanted to eliminate certain pain points, but still understand that our customers and their workloads require OpenStack APIs and they're still virtualized and there's still a ton of virtualization available and will be available for years to come. So the data plane is not going to change in terms of the way that we handle virtualized workloads or in the way that those run on rel and still have a five year life cycle of support. But we're going to go do away with a lot of other complexity that has been built in time with menstrual heat and puppet and sort of standardized and Ansible while still maintaining that long life. And obviously improve upgrades, which is a part of that I've dedicated a lot of my time here at Red Hat. So is this only for new greenfield deployments? Absolutely not. So this is sort of the key piece of this and this is sort of why we haven't done that in the past. We're not interested in bringing a brand new product or a new way of doing things only for new deployments. We have to bring existing deployments that are in production forward. So it's a low friction path of adopting the existing data planes. So we have our customers and that's our first priority. So we need to create a new control plane and then we'll repurpose the existing one. And then what happens with director going forward earlier this year, we announced that Red Hat will no longer continue to contribute to triple O as a management of the platform because we have indeed been working on this. If some of these slides are a little bit similar to what we talked about last year in Berlin is because we have continued to build on that story. Last year we told you we were going to work on it and this year we're going to show you what we did. So yeah, again, the starting with our next release 18, the management of OpenStack will exclusively in this form factor. So the control plane will run exclusively on OpenShift and then 17 will be the last release that we support director. And this is a little bit of high level of how things look like. And with that, again, supporting this meta operator, you're going to see a lot of this as part of the demo. So here's the big picture. And now Chris help us out and tell us how this looks like. Yeah, Thanks, Maria. All right. So what are we starting with here? We've got OpenShift is already installed at this point. It's running three masters, three workers, and we've got two pre deployed rail machines that have been using this compute nodes for this deployment. The operators that we need have been pre loaded into OpenShift and some container images have been pre cashed into my computer nodes, but nothing is running. So the stuff that we've got here, there's two little terminals down at the bottom. One on the left is monitoring for the existence of the control plane. Right now it can't find. And one on the right is monitoring the data plane, what we call the collection of compute nodes that you have. So those will change state as this is running on. And then in the middle there's a terminal that I'm going to be doing stuff in. I'm going to be using a tool called canine s. It's not part of OpenShift specifically or Kubernetes itself. It's a third party tool, but it's very useful for being able to quickly walk around through OpenShift or Kubernetes APIs, show lists of jobs, pods, pull up logs for things, edit some of the CID YAML files. And so that's a nice thing. So we'll get going here. And the first thing I'll do is show that we are indeed running OpenShift 4.12. And if I grab a list of operators that are currently available to us, we can see there that we've got a couple of OpenStack related operators. Those are the ones that we've been working on. And then there's a couple of networking related operators, which are standard things that we're pulling out of the normal kind of OpenShift registry to help us connect up networking in containers. OpenShift with networks on real hardware in rail machines. So the first thing we need to do is give OpenShift the CID YAML file that describes the control plane and tell it to deploy that, which it is now doing. And when I launch canine s, we start to see that there are a bunch of pods. Some of these, the ones with manager in the words, those relate to the operators, those are already there. But things in these lists that show up as blue or it's supposed to be red, they might look more sort of salmony color. Those are things that have been created or instantiated for the first time. And when we pull up the logs for each of these things, we see the first things that happen basically as database things. Same as it would be for deploying OpenStack any other way, the first thing you need to do is have a database and start putting things in it. A list of pods that we can see here, if you can see, there we go, so we can see rabbit is being started, like the control plane services are being brought up in a dependency tree kind of order. And it's going to go through and configure each of those appropriately as it builds its way up the stack. So one of the key things that we want to do here is have fewer layers between the operators, the human operators of this and what's actually happening under the hood. So you're able to use the normal Kubernetes OpenShift things to interact with this very directly. And this is the resource for the control plane. So this is the YAML file that I actually fed in to deploy it. And I want to show you what it's like to make changes in this. So in this case, I'm going to skip down to the section for Cinder. And you can see that really all we're showing, all we need to configure for each one is like here's a container image to use. Here are some networking things that you need to know. So like there, it's going to be on an internal API network. You can give it my IP address and a number of breadth because it's trying to eliminate the amount of stuff that you have to know about that we have to have pre-coded into things like AAA heat templates for those of you who are familiar with with AAA or directed from the past. So I'll pull up a list of pods again. And we're starting to see now here the actual services are booting. And as a general rule of thumb, like in this sort of deployment, when you see NOVA being mentioned, it means you're usually getting close to the end because NOVA depends on the most things. So that tends to be one of the last things to be started. So those are actually NOVA API cell conductor and metadata services being started, which means that where we are now about two minutes into this, the control plane is done. So that's kind of cool and nice and quick. So we can see the list of pods now is much longer. We can see the various control plane services already up and running familiar names like Cinder and Glantz that you would always expect, which means the next thing we need to do is kick off the data plane. So I need to pull out a small amount of metadata from that deployed control plane to be able to feed into the YAML file that I'll give it for the data plane, which is the next step here. So we give it a second CID YAML file that describes the data plane that we want and now it's off to the races deploying that. And when we go back in we'll see a very similar kind of interface. So even though this is all now happening on the compute nodes, we still get to view it through the control plane through the open shift underneath it. But this time, instead of pulling up logs and seeing things like alembic migrations, the logs are all just going to be ansible output. And this, again, it's fewer layers. You can get straight to the information you need. If there's a problem going on here, you can see right in the ansible log exactly where it's happened, which step, which role it's part of, which machine it affects. So while the data plane's running, I'm going to make a change to the control plane. For some operational reason I've decided I want to enable debug logging for Keystone. So previously this would have been a triple O heat template parameter you would have needed to specifically toggle individually. But because we want fewer layers here, we have a flag you can set here, a custom service config, and then any arbitrary text you put in there will be written into the configuration file, the iini file for that service, so in this case Keystone. So I've just added a default section, set it to debug equals true, and if I now pull up a list of the pods and then filter just for Keystone, we can see that there's a new one already running, that's the red one or some any kind of pink one, and as soon as that one is up and running, which it already is, the previous one will be terminated. So in a very short span of time we've been able to make a change to a service without having to do a full stack update. You can also do things at runtime, so this is not modifying any of the yaml files, but we're just telling OpenShift at runtime, hey I want to increase the number of replicas for that service, so in this case we're going from one to two, and again filtering for Keystone, we can see that the second one is already spinning up, and in basically the same amount of time it took for the previous operation, we'll have a second instance of Keystone running, and we do. So I'll just show the logs for that instance that it's picked up, that same debug logging configuration, and indeed it has, and so that we've been able to make several changes to a service, actually while the data plane was deploying, and OpenShift is managing all of the life cycle of that forest and allowing us to operate very precisely on just the things that we want to. Right, so this is going to be bouncing around more of the jobs and pods, they're all just doing Ansible at this point. There's a lot of Ansible that we had previously in TripleO director, for the last couple years the TripleO project has been working on consolidating that into a number of what they've called consolidated roles, so all of the different bits of Ansible from all over the place have been brought together in Unified, and we've been able to take advantage of a lot of that while doing this, so we're able to set things up very similarly, how we would have done before. And if I pull up the data plane resource, I can show the CID YAML that we use for that, so where for the control plane we were describing the services that we want, for the data plane, the compute nodes, what's really more important is describing the hosts themselves. So this is an entry for one of the two compute nodes that we're deploying here, we have to give it its IP address, an SSH key to be able to talk to it, some Ansible variables which in this case is dominated by the networking IP addresses we want it to have, and then an Ansible role at the bottom there, EDPM compute that we want it to be configured with, and so you repeat that for each of your different compute nodes, and then that will go through and do all of the bits that you've asked for. So let's come out of that, and if we go back into KNNS, I'll show up the list of jobs, we can see there's a series of data plane deployment jobs, the ones that have gone white, those have already completed, if we were to watch that list more and more would be filling in as different parts of the Ansible run, and really what this needs to do is take these bare rel nodes and turn them into things that actually have open stack running on them. So this is containers that are running on one of those control plane, sorry, compute nodes, we can see that some networking services are already starting up there, and that's really repeating the same process for each of the services that we have to have on that machine, like does it need packages installed on the host, does it need configuration files written or directories created to host things, we need system de-unit files to describe the services that need to run in those containers on the compute nodes, and then actually starting them. And so it's going to work its way through the kind of dependency stack in the same way as on the control plane until we get to the point where everything is running. You might have noticed in the configuration for the compute nodes that it had multiple IP addresses, this is something that we're bringing forwards from the director-based open stack that Red Hat has shipped for a long time, it's very important to us that all the different classes of network traffic are separated, and so you now have a situation where there's containers running inside OpenShift and bare metal rel nodes, how are you going to join up all of the different networks there, that's a very complicated virtual networking thing, but we've been able to figure stuff out there using things like Metal LB so that we can say this is a network only for internal API traffic, that's the open stack services talking to each other, and those are the only bits of traffic that will be on that network. Tenant networking can be isolated, storage is very often isolated there for people who run sort of CEP or their own external partner storage services. So we can see here that there's just more Ansible running, that's really all that's happening at this stage, a bunch of configuration for the compute nodes, and again it's working its way up through various things, if there's a problem here you can see it, it's creating, I'm not sure if you can all see that, but it's creating system D unit files for iSCSI-D at the moment if you wanted to use that, and really this just keeps going until we start seeing words like NOVA and Libvert. Now this is not quite as fast as the control plane was, but we're getting pretty close to the end at this point, which is really nice, because this is a much simpler kind of operation, we haven't had to create huge template files and wait for stack updates to run, and every time you want to change something you don't need to do another stack update. So we're getting pretty close to the end, it's hard to know what else to say about when you're doing something like this, because it's all just the same as before on the compute nodes, that's one of the key goals here is, because we're reusing a lot of the Ansible and we're keeping standalone rel nodes instead of making those OpenShift workers as well. The configuration that's being done, the services that are being, you know, started up here, the configuration files, the package dependencies, they're basically all identical to what they were before, and like Maria was saying, we want to be able to adopt existing compute nodes from a director-based deployment into one of these OpenShift-based deployments, and a key requirement for that is, you know, the underlying state of that machine needs to be very close between the two, you don't want to adopt a machine and immediately have to apply a huge Ansible playbook to it that will change absolutely everything on it and disrupt all of the things that are running. So the two should actually come out being essentially identical, like IP addresses will change and SSH keys will change, but, you know, the services that you have been configuring for a long time and been setting up in a way that is reliable and that you trust and that works for your customers continues to be the case, it's the same rel nodes, the same services, the same configuration, we're just managing it through a different interface and the control plane is the bit that's changed the most. So we can interact with a lot of these services from the OpenShift end of things using, like the logging I've shown you, Ansible logs, those are Ansible logs that are coming from the compute nodes. You won't be able to interact with the logs for the services themselves that easily at the moment, where we're looking at more ways to be able to improve the management experience as we go from here. And all right, we can see that we're starting some Libre containers. So we've got to be getting pretty close to the end at this point. This is now again on the compute node, we can see that Nova Libvert is up and running. I'll also mention the way we're deploying Nova is changing a little bit in the sense that previously we would always deploy just without cells. So by default you'd be all in cell 0 and you would have to make a conscious choice to start using cells. That's going to change in this world, we'll be deploying things into cell 1 by default if you don't ask for anything else which makes your your path from there to adopting additional cells a lot easier. They're all available to you straight away. All right, so Data Plane resource has been zoomed up and it's done. So we're now at 11 minutes in and we've deployed both a control plane and the compute nodes. So I mean we could stop there but this wouldn't be an open stack demo if we didn't actually boot a tiny VM on here. So I'll connect through into a container on OpenShift that's already got the OpenStack client installed and ready and then I've written a little script for myself here to to show off some some of the things that you would expect to see there. So like an endpoint list, all of the standard services are up and running. The compute services list shows that we can see the compute nodes, they're known to know where it's happy that they're up. Same thing for the the networking there, the controller gateway and manage metadata agent for OVN are up and running on the compute nodes and talking to the control plane. And now we have to do all of the normal kind of open stack commands. So we create flavors, we'll grab a Cirrus image, like the point is from this point on this should look exactly the same as any other open stack demo. The fact that the control planings running on OpenShift from here and out should be completely irrelevant and completely transparent. This is a tenant doing tenant things and they don't need to care where your control plane is. The same way they wouldn't have done whether your control plane was running on bare metal or in VMs, now those containers just happen to be hosted in OpenShift from from their perspective. Hey Chris, sorry to disrupt this, but while this VM is booting, so one of the things that we know is that our customers or the majority of our customers are running OpenStack and also OpenShift, whether that is side-by-side in their data centers or whether that is shift on stack or whether that is running sort of the director operator. So a lot of our customers are familiar with both, but there's going to be a ton as well that have not and that have been familiar with OpenStack and OpenStack operations and then this is new, kind of similar to our engineering team at Red Hat, that was sort of solely focused on OpenStack. So obviously for this, OpenShift or Kubernetes has been a new skill throughout the teams that are, have been running, you know, Nova, Neutron, whatever. So can you tell us a little bit about the ramp up? Like how has that been using this new tool and why have you learned? Yeah for sure, I mean I think it's the case for for most of our engineers who started working on this, that this was their first exposure to Kubernetes to OpenShift, even to using Go underneath for rating operators. The feedback that we've had from them has been very positive. They've really enjoyed getting to know a newer system which gives them more access, more control, more flexibility. It's easier for them to interact with and to test. And from my perspective as an engineering manager, I think it's very fair to say that there are more people in the world who have skills like Kubernetes or Go than have triple O skills. Triple O has served Red Hat extremely well for the last decade or so, but it is a very niche skill set that applies really only to one product. And now we're able to hire people who have more generally applicable skills. And I think that's probably going to translate for customers as well that you won't need to spend time training people on triple O. It'll be we need someone who knows about Kubernetes, which is a much easier to hire for skill. All right, so we're at a point now where the VM, I don't know if you noticed, actually booted and was running a little while ago, this is just going a step further than that rather than just leave the VM booted running. We've created a floating IP address network. We're setting up the security groups at the moment that will allow that group to be able to access outside world. We'll be able to ping it an SSH into it. In fact, that's the firewall role that's going in at the moment, allowing us to ping those machines. And then I think with that done, we should be at a stage where we can attach the floating IP address to the thing and we can ping it. So that's the quote unquote public IP address of that VM. I can SSH into it as many of you probably know Cirrus's password is gocubsgo which you don't get to see here but gocubsgo and then once we're inside the VM, we should be able to ping the outside world. And we can. So there it is. We've deployed the control plane services on OpenShift. We've deployed compute node services on some rail nodes. We've joined them all up with with the proper virtual networking between them and we can boot instances and connect to the outside world. Thank you. I think should we do some questions? Yeah, I think we have a few minutes for questions. So with OpenShift virtualization on being a thing based on Kuber, where do you see OpenStack versus the OpenShift virtualization? Where do you see the use cases for those things differentiated? Well, the first thing is that OpenShift virtualization gives you the ability of using Kuber to run the VM on top of OpenShift itself. So from it's all in the Kube world, it has the life cycle of Kubernetes or the life cycle of OpenShift and it's sort of tied within there. This is OpenStack. So this is infrastructure as a service. So it has sort of a wider set of use cases, the scale and the sort of tried and tested abilities of OpenStack. So as sort of Chris mentioned, there's a ton of OpenShift at the beginning when we were sort of putting out the control plane. But as the data plane comes in to show, it's still very much OpenStack. Whereas with OpenShift virtualization is still VM inside OpenShift. Hopefully that makes a difference. Yes, over there. How is it? Well, we're not using Helm. So right now in this demo, we're only showing basically the deployment piece of it. If anything is another deployment mode. It's a new installer type thing for OpenStack. What you haven't seen here is that with OpenShift, we also have the stack observability stack. That's going to be the same for both. It's going to be bringing up a ton of other services in terms of CI CD that we can then leverage for the rest of the group. And we just picked operators to wrap around the OpenStack services so that we can serve them that way. And we're using the operator OLM, the operator lifecycle management to also keep track of all those possible combinations. We also want to make sure that we're shipping something that the entire stack is supported. Say that. Yeah. Yes? Well, so, yes. We are going into this new world, right? Like the first thing that we're doing is changing the way that we deploy. And we have seen, I don't know if you have ever seen a deployment of OpenStack in an open infra or OpenStack summit for that matter. It's a first for us at Red Hat to do the full deployment because we could never fit it in a session that's 30 minutes, which we actually haven't used the entire 30 minutes for. So that's a first. Now the possibilities are endless. We're not using a new installer here. We're using a whole entire product that has a whole entire community on top. So we could start using a ton of things. So we have looked into data foundations. There's some limitations of what we can do in the control plane. The data plane is still very much open stack on rail. So that's still debatable. So how we implement things there's going to be multiple use cases, I think from a product management perspective is going to be wrangling customer needs and then engineering excitement into trying to do a shiny new thing and try to fit that into a roadmap that we can actually deliver things. But yeah, I think we're very excited of all the possibilities that are opening up. Yes. The the what's the dates playing for open shifts and yes, they're separate. Yes, correct. OpenSack services. Yes, it's sitting on OpenShift. Putting the data plane of OpenSack on top of on top of OpenShift that is a possibility. It wasn't the first use case that we were trying to solve here. Like we said, like I said before on the previous question we already have OpenShift virtualization to run VMs on top of OpenShift. Can we run Nova on top of the thing on top? Yeah, we yeah, we probably can. But it's just not it hasn't been our first priority because like I said our existing customers and bringing them data playing forward was sort of number one. And I think if you did want to have a single pool you would have to be able to scale down OpenShift workers to scale up OpenSack compute nodes. So it would be possible to move machines between the two but right now that they're managed completely separately and neither side knows about the other ones working on it. Yes. Were there any plans for Nova Scheduler against Cooper? On Nova Scheduler against Cooper? I think it worked trying to talk in sort of about the same thing hasn't been the extreme question whether Nova wants to support that. Yeah, it hasn't been our priority that's all I think that. Yes. So Chris can talk about it but I can tell you that just even from a developer experience just the amount of time it takes to deploy alone and make a change and that you don't have to do a stack update and wait the debuggability is different. As you can see there's a ton more answerable there so it's somewhat human readable if you want to talk about Yeah. So I mean from from the performance and scale side of things we're initially targeting basically the same as we have right now with Bare Metal Director. It's not like the OpenStack services you know their containers running on machines right now in director their containers running on machines. So there's the performance of those services is basically the same as it was before on like the like hardware. Leading back to one of the other questions we're hoping that we'll be able to leverage some of the things in OpenShift to allow us to scale better. So for example like I mentioned we're deploying Nova with cells by default. So that means that each pool of cells that you deploy gets its own like rabbit instance and OpenShifts primitives give us a lot more ability to open up that world. So for example you could have a different instance of the database per compute node service. So if you know that I don't know say your glance is going to be really really heavily used and that's going to need its own database or its own rabbit or something that's a lot easier to express in OpenShift's world than it was in director. And that's something that we're going to look at definitely from the performance and scale side of things but our initial target is kind of parity with where we were before. Which is very aggressive even to comma to parity because we're talking about essentially and no way of installing and just to be able to in this short amount of time get to get to a place where we can see things the same way that speaks to a lot of the reuse that we have done on a ton on a ton of the things and there's been some refactoring of it but it just speaks about how well these two products work together. Other questions? Maybe time for one more. Yeah I think we're at time but all right well thank you very much and I hope you'll enjoy the rest of the summit.


Everybody forced here ripping a box of 2022 tops inception baseball hobby for Jonathan G. Here we go, buddy See a nice auto here, maybe a silver ink Gold ink It's not a thick pack. That's a redemption. Oh, that could be big. I Don't know the top my head who's redemption in this, but there's some decent names that I do remember Green parallels Steven Strasburg and Joey Votto. We had Matt Veerling rookie Cedric Mullins Redemption. Oh, that's actually pretty nice silver signings gold parallel Brandon Marsh Rookie gold auto Brandon Marsh, I believe The golden inception is to like 25 or less So that is a case hit on the auto Congrats, Jonathan Marsh had a Once he got to the Phillies he was really good That's a great good defender Hit well gold parallel you have to check the checklist to double check what I said it was I believe is it 25 or less? It could be more could be less of that, but that's good stuff right there, man We appreciate the order We will get this out to you It expires in a couple years appreciate it


I want you to understand this. Most people focus on what they earn and they don't focus on what they're losing. Let's go.  So, I'm gonna stick to sales this last hour.  But that same way, right there, Jacqueline showed me how much money I was leaving on the table. I got a sales grade, right? I've made bad grades, I was never good at anything but if I can make money, I get excited, right? So, you know what my wife did also? She said, Andy, you know how much money you're making a year right now? And I think at this time I was making, I don't know, 500 grand or something, maybe 600 grand, I'll make you good money, better than most, okay? You know what she did? She broke it down and she said, hey, how many cars are you selling, okay? And I was selling like maybe 50 cars a month or something like that. And she goes, hey, let's look at how many cars, like how many deals you're missing. She goes, I wanna know. And literally every day I realized I was working 25 days a month from the phone to the lot. Okay, I was missing at least one deal a day. Every day we identified. And she's like, what's your average commission per deal? I was like, well, it's easy, it's about a thousand bucks. I ran good gross in my company, that's what I did. And she goes, well, 25 times a thousand, that's 25,000 a month. And I'm sitting here and I'm like, well, I'm making this much money and I'm missing 25,000. Dude, I can get myself to $750,000. I can get herself to a million dollars a year if I can just fill this hole with these lost sales. Hey guys, what's going on? It's Andy. A lot of you leave comments telling me that you need help. Do me a favor. I'm gonna tell you the best way to get a hold of me. Shoot me a text message right now,<PHONE_NUMBER>.<PHONE_NUMBER>. I'll help you with whatever you need.  Let's get back to the video. I'm sure you drove by a lot of stores, a lot of them don't have inventory, wouldn't you agree? Yes, okay, well, I'm so glad you're here. You probably did a lot of research on the internet before you came in. You have a good idea of what you want. By the way, what's your name, CJ? CJ, it's awesome meeting you today. Are you here to see somebody or is it okay if I serve you? My man, am I starting out this conversation good with him?  No, no, no, he is. You know why? I'm in control and I'm in charge. And remember, a lot of you don't like this. You're like, wait a minute. You're the low performers in the room. You're the low performers. You don't understand the way this works. Remember, Coach Burton just said, I give the options. I give the choices. I know people that come in, they want a big lifted Dodge Ram diesel, but guess what? They can't afford a big lifted Dodge Ram diesel. They need to be driving a yellow Chevy five-speed Aveo with no air. That's what they need to be rolling on. But you guys are sitting there trying to force them in a big daddy truck and that's not what they need. Hey guys, I just wanna tell you the true one percenters you made it till the end of the video, do me a favor, share it with the friend that wants to go to another level. Make sure you like the video, comment below so I know who you are. Set your notifications and then subscribe to the channel. We got daily sales training videos dropping. I'll see you soon.


Let's talk about a little checklist of things that you need to think about that you're going to need as a mobile dental hygienist now I say need but of course this is different for everybody and I will go through a couple items where I'm going to say Well, this would be nice to have but do you really need it? No, unless it's maybe for you something that you do really need, you know It's not just a want but it could be a need but this will help to get you started So you're going to need a portable compressor unit This is what has the air the water the suction now if you plan to only go to nursing homes as an example I don't think this is something that you need at all because seniors don't like the air They don't like the water when I go to nursing homes I don't bring it at all and it was an $8,000 portable compressor unit But when I go into clients homes offices when I see clients in my own home I absolutely set it up because as I mentioned it has the air the water the suction if I'm using my piezo unit Which is a separate attachment. I need the suction to be able to suction up the water So is it a need is it a want it really depends on what type of mobile dental Hygienist you want to be same with the next one. Do you need a portable patient chair? I absolutely have one. I I just purchased a zero gravity chair from Amazon If you go to my Amazon store link You will actually see the one that I purchased in there The main thing you want to consider is that it's good for at least 300 pounds Not all zero gravity chairs are of good quality So you may have to pay $200 for a really good quality one. That's what I did But I don't have to worry about my patient falling through. Okay And it's still a lot cheaper than if you were to get an actual dental equipment type chair You know, like the really heavy ones that aren't portable. Those are $30,000 So you're really saving a ton of money But again, if you're going into nursing homes typically you would be seeing clients in their own bed because they're not mobile Or in their wheelchair. So do you need a portable patient chair? Maybe maybe not again It depends on what type of mobile dental hygienist you're going to be you're going to need sterilization equipment unless You're sterilizing your instruments in a dental office If you know a dentist you're working there anyway And you just plan to take your instruments there every Thursday because you only work as a mobile dental hygienist once a week Then you don't need sterilization equipment because you're using somebody else's but usually that's not the case So you're going to need things like pouches You're going to of course need a sterilizer But you're going to need pouches or are you going to wrap up cassettes? You're going to need biological indicators all of those things that come with having your own sterilization lab So something to think about You're going to need Dental instruments because I'm just assuming you don't have any your basic exam kit your you know Scalers curets all of that if you have a piezo or cabotron tips for that You're going to need your dental instruments. What about infection control supplies? So masks bibs Gloves Barriers you're going to need those I do have a list here because I didn't want to forget anything Patient education materials so if you plan to educate the clients which I do all the time I purchased an intraoral camera that hooks up to my laptop so I can take pictures inside the mouth I also have larger tooth models that I can show them say their their periodontal disease on a tooth model I can show them what the teeth look like for kids, you know I have different types of tooth models for that. I have tooth models for implants Amalgams composites all of these I did purchase from Amazon So definitely have a look at my Amazon store again. Is this something you need? Maybe not maybe you just plan to look up pictures on the internet and then just quickly show what an implant looks like on your phone That's a way around it too But this is something that has really helped me in my practice is getting those patient education models people love them And it just makes me look like more of an expert in my opinion, but it really depends on if you want them Um a payment processing system. Sorry. I'm kind of skipping ahead. So sorry Let's keep that one on hold for a second But you're going to need a portable LED dental light if you have a light on your loops if you have loops Then that's perfect or you can get a light that is is like a headband for around the head And it shines a light that way. It's not expensive. I paid $26 for mine again Amazon store check out my Amazon store You will find some great things that are inexpensive because you're going to need to see when you're walking into a nursing home or Anybody's home. You don't know what the lighting situation is honestly, even if they turn on all the lights I still feel like I can't really see inside the mouth perfectly Especially if you're looking at that last tooth the upper left-hand side. It's great to have a portable light of some kind You are going to need an appointment Scheduling software, but all in all a dental hygiene software again. Do you need this? I don't know you might just want to do everything on paper or digitally on a computer That's up to you But it was worth the investment for me to get to a dental hygiene software for mine I use dome track. They're amazing. If you want a referral code, I do have one for you So definitely email me. They're fantastic at the time when I purchased mine. It was $3,000 one-time fee, which is amazing It's basic It doesn't have all of the bells and whistles like a dental office software does but they're like Thousands upon thousands of dollars a month. I just wanted one a one-time fee Keep it simple and it does the work that I need it to do it books appointments, you know schedules appointments I can put my schedule in there takes payment. I can process claims electronically. I can look up a patient's file right away That's what I needed for and three thousand dollars a one-time fee amazing There's also a yearly support fee which again makes sense to purchase that if you ever need help, but it's not expensive I think it's about a thousand dollars a month, but don't quote me because it does depend on what you need But you guys I mean, sorry, I think I said a thousand dollars a month. I meant a thousand dollars a year But I mean that's so inexpensive compared to the other dental hygiene softwares out there Okay, so then you need a payment processing system. How are you going to collect payments? Is it going to be by credit card email money transfer depending on where you're living? Do they accept email money transfer? Is it cash only? The square processing payments is the most popular look them up I just use an email money transfer option if patients want to pay by credit card I just simply send them an invoice. So it's a little bit different for me I have a software already set up Through my tutoring if you didn't know I tutor dental hygiene and dental assisting students pass the board exam So I use the stripe payment processing, but that's online So in the one time or two times a year that patients want to pay by credit card for me I just send them an online link, but square is the most popular look into that one for sure I do direct billing for all of my patients. So they only pay me what the insurance doesn't cover So it might be twenty six dollars. It could be more. It could be less But usually they have no problem sending an email money transfer Medical history forms. I use Google Forms I talk about this more in my course the mobile RDH Academy Definitely check it out if you're looking to start your mobile dental hygiene practice where I go step by step But I use Google Forms to make all of my medical history and consent forms So that way I can just email it to them. Super simple. They just fill it out and it's all online I just have to open up the app. I can see it anytime You can open it up online your laptop tablet phone. It doesn't matter. I like things to be easy Pardon me you guys. Um, and then you need things. Okay, so we talked about masks bibs gloves Also, think about things like polishing paste a polisher. I have a cordless polisher, which I love you need things like toothbrushes You need things like floss Salka brushes oral hygiene aids so toothpaste if you want to give those to clients So all of these things something to think about a first aid kit. I purchased mine from Amazon. I kept it simple But then there's a separate emergency kit. We do need that emergency kit I just purchased mine from hand said online and H-A-N-S-E-D Something like that. I don't know look that up emergency kit and then you will find some gear towards dental hygienists I talked about loops already those magnifying safety glasses. I love mine There's a light attached to it too if I ever need it I left a note on marketing materials. So do you plan to get business cards? Are you going to print brochures for nursing homes? are you going to print flyers and Take them to patients homes like mailboxes. I guess there's no mailboxes slipped them under the doors I don't know think about kind of marketing materials and what you want to do Comfort items for patients. So I I I wrote this down. So do you want to maybe offer a warm towel? That's a bit hard to do mobile But if you're just seeing clients in your own home You could say use a crock pot and that can be like a towel warmer. Are you going to offer neck pillows? Headphones, you know, think about how you want to make their experience a little bit different and maybe a little bit better Insurance and legal documents.  So this is different for everybody It depends on your province. It depends on where you live, but make sure they are compliant How do you know? Simply ask your dental hygiene association what the rules are on being HIPAA compliant, especially for technology and last but Not least I have to mention this but Make sure you're an active dental hygienist You have to be licensed as a dental hygienist to be a mobile dental hygienist You have to have an active license You have to be a part at least in Canada the CDHA network for dental hygienist because this allows you to submit claims electronically check your specific province kind of what you need And what like specialty license you might need if any on being a mobile dental hygienist because you're working for yourself There's more responsibility when you're not working for a dentist, but you're working for yourself So I hope this checklist helped you guys again I did mention at the beginning of the video if you want a step-by-step and more help Definitely consider joining the mobile RDH Academy. Look at my website dental l.com or I can leave the link for you Of course down below. I've been a mobile dental hygienist since 2018 I love what I do. I know it's very overwhelming. I'm here to help you The course gives you everything you need step-by-step Including full support by me because you're going to have a million questions and I'm here to help Thank you guys for watching Please click like if you do like this video that does help me in my channel It does help to support me to to allow me to do Complementary free videos like this and not charge you so I do hope this really helped My name is Andrea Trowski if I didn't mention that already and if you don't know me. Thank you for watching once again I do appreciate it. I hope this helped and you guys all have a great day


Item number SCP-1151 Object Class Safe Special Containment Procedures SCP-1151 is currently contained in storage unit ██ located in Site ██. SCP-1151 is to be kept in a 10 centimeter by 10 centimeter sealed container and kept under guard by one security officer at all times. Any personnel handling SCP-1151 in any way must wear protective gloves while doing so. Only one specimen of SCP-1151-1 may be kept in containment at any time. Subjects in the final stages of SCP-1151-1 are to be fed via IV tube as dictated in nutritional chart 1151-1. Any personnel become compromised by SCP-1151 outside of authorized testing. The affected hand is to be immediately washed and decontaminated. Any testing involving SCP-1151 must be authorized by at least two members of level 3 personnel. Description SCP-1151 is a black marker pen of the ██ brand. SCP-1151's anomalous properties first become apparent when it is used to draw the image of a smiley face onto the palm of a human subject, who will hereafter be referred to simply as SCP-1151-1. The initial effects of SCP-1151 take roughly a week to initially manifest, and this time period has been known to vary depending on the age and the physical condition of SCP-1151-1. During this period before initial manifestation, washing off or otherwise removing the smiley face will negate SCP-1151's effects. Subjects experiencing the effects of SCP-1151 will noticeably raise their affected hand during their daily routines. Initially, they will only do this when conversing with others, but as SCP-1151-1 progresses, they will raise their affected hand higher than the rest of their body constantly. Later symptoms of these initial stages include unfocused pupils, loose hanging of the head, and slight slurring of speech. The initial period of compromisation only lasts at most three days. After this point, SCP-1151's further mental effects will become apparent. SCP-1151-1 will begin to believe that the face drawn on their palm is their actual face and will behave as such.  After a period ranging from two to six days have passed, the final stage of SCP-1151 conversation will begin. SCP-1151-1 will begin to believe their head is a dangerous growth on their body, commonly referring to it as a tumor or a cancer, and will attempt to remove it using whatever tools are available to them. If they cannot find a method of efficiently decapitating themselves, they will attempt to use cruder methods such as repeatedly slamming their head upon walls or floors. 75% of affected individuals have been known to survive their self-decapitation, despite the resultant lack of a brain and a mental and physical function associated with it. After self-decapitation, a surviving SCP-1151-1 will wander aimlessly, showing a general awareness of their surroundings by moving around obstructions. Many instances of SCP-1151-1 do not appear to be concerned regarding the massive amount of blood loss relating to their self-decapitation, and will survive for a time period ranging from one to six hours.


audience so no problem we're gonna be talking in English and if you don't understand anything on the slides please let me know no problem but just focus on me. So on the later one we had amazing applications we got a lot of applications being very interesting for example AMMs that could let you transact with different tokens but these were very very very expensive right we also had oracles that allow us to introduce that out of chain into on chain right but it was also very expensive moving data on chain is expensive we also have gaming where you can have NFTs very cute NFTs you can have your sword for your game your gun and so on you can maybe move it to another game but still the game was was led was directed by a single entity that had the control over the game so the game logistics the game logic was not on chain it was not auto-regulated yes because this is very expensive right also we had boating apps but also again writing in storage writing to the blockchain is very expensive so boating was also really expensive on layer one so this is very interesting application that we have in the layer one but that introduces problems when we are talking out cost so we know the states the current state of things is either we have a huge machine that is processing everything we know this for example banks a corn API's companies startups and so on very huge machines that can process a lot of transactions very quickly and now we're looking at the blue part where we are trying to create a centralized system which is when a lot of persons can verify the integrity of the system right this is what we're trying to do the problem is that this is very slow and this is very expensive and the computation repeats itself various times at different points so it's not optimal for scalability of course this was a choice when we decided to create theorem we wanted this centralization we wanted security it was a choice to sacrifice at that moment scalability well now we know better and we can do better stuff so the question is can we hit can we get the centralization security and also scaling yes we can do with zero knowledge roles and we are here today to talk about star net so we're talking about platform a layer 2 that is secure by a theorem that allows you to create smart contracts general smart contracts it's too incomplete the cost of execution is much lower and you can create amazing things that are not possible even imaginable in the layer one so we can get much more for each piece of gas so this is a quote from Eleven says on our founder at bangles in the 29 of July he's talking about the objective of a star net which is creating a solution for scaling that is focus focus only on scaling theorem and this is called Cairo so the star work experts on both the eternal machine and also creating a start systems and there was a conscious choice not to use the EVM to scale we created a new virtual machine called Cairo this is this was a conscious choice because we believe this is the way to achieve the biggest scale and this is Karen is going to it's going to come from smart contracts within in Cairo and in Cairo is a virtual machine but also language we have so what is Cairo Kevin's a true incomplete language programming language that allows you to create portable programs in this case in Spanish program as the most endless you can execute your Cairo program and then you can prove a smart contract on the layer one only few that this a transaction was correct this allows to have much more much cheaper transactions cost and because proof when the smart contract on the layer one proof validates that this proof is correct it's much cheaper than running the transaction itself so these allow us to create more to get much more scalable solutions using the layer two in this case with Cairo and Starnet so this is our solution the pseudo-logs robots specifically talking about Cairo and Starnet you can get extremely extremely cheap computation thanks to Cairo and we can create and this is key we can create interesting applications that are only be that could only be made using the layer two it's impossible practically impossible to do on the layer one this is an interesting data that we got during the last week a star net plus start star cakes blocks stagnant so a star war the company has different solutions one of them is a star cakes and the other one is started with that we're talking about right now and both together had more transactions since July than Bitcoin lining another layer to this something that is not very well known or as you can see coming from July the blue line is the star cakes plus start net down is Bitcoin in orange and under that are other layer two solutions so as you can see stark is an external it's going to be in very very use and we have been live in May need since June yes June 2020 so we are not new at this we know how to do it the star solutions is very good and as you can see it's very very is being very used and very interestingly also is that 70% of that comes from NFTs it's very interesting for example with immutable weights or are interesting so now thank you very much for coming now we know that stun has a lot of potential you can create needs whenever you want you can deploy it currently and actually today we'll be creating a voting application that we're going to be trying on start it you can use it Cairo is a different language we know it but it's also a language that everybody can use it's not hard at all so my name is a mars behel I'm a developer advocate star war and thank you very much for coming today they go today is for you to get the resources to start to start studying Cairo if you want to go into star net and also make a small example of a voting application so now we talk a little bit about what is being done in layer one that is very costly and we can improve what now let's talk about what can we do with all this power that cheap computation can provide us for example we have a solution called CKX is a company that is offering hyperconcentrating this of course is impossible in the layer one imagine having micro positions and trading with them I don't know it would be impossible because of the cost in the layer one makes no sense we talk before about voting voting is very expensive too so there are also solutions for example a snapshot x that allows us to vote much more cheaply yes so there are a lot of locations that are being already developed inside starting that I'm using all this power another one for example is the government of when all Buenos Aires create an application that allow you to have an identity on the blockchain as a user as a citizen they show you they chose star net because it's very secure it's highly secure and also it's very scalable and very quick so these are only some examples but the ecosystem is growing by the day for example we have tools amazing tooling for example coming from hard hat open cepali and trailing soon alchemy those are well known companies but we also are maybe more interesting we have different applications on the top as you can see they are being created originally on the layer two so this is very interesting because it's my opinion is not for the company overall but it is interesting when a company comes from line one and then puts its applications layer two it's right they are using the the lower fees and that kind of stuff however I believe that the real power is being used but those that are creating natively on Kyro in the layer two yes so a little for example when you have windows in your computer windows 98 for example and you had this nice and cute games and then comes for example windows XP it's more powerful you can do much more stuff and these games can be can be passed into XP okay so these old games can be passed into the new software and they won't well it's okay they maybe could leverage some of the power of the new operating system but the real power comes from that that is being built on top of XP that could not be done in the previous operating system right that's what we're talking about here something that is completely different and out of the league of the layer one we can create something very very interesting that is impossible to create for example we were talking about the games that they didn't have the logic on chain is now possible so imagine that you can do operations and summations multiplications divisions whatever you can do that because the gas is much much cheaper so a company I don't remember I know the name what is the name of the project that was creating this on chain reality topology so topology created and a game on chain and it's auto regulated okay so you need a central entity to decide if you are allowed to play it or not so it will stay forever as long as a theorem exists this is something that is again impossible layer one and for me those the power is going to come from that part so now the question is and what can you create that is completely different from what has been creating the layer one using all these new power all these new potential that you can find in the layer two that is so completely different never done before in mind you can do for example machine learning on chain you can train models on chain you can create any kind of mathematical operations on chain it's completely different and what we need is people I start building these applications that are eye-opening so for the beginning you would need to start installing Cairo start net I of course I don't expect it to do it right now but you can follow these QR codes for some instructions on how to install Cairo and start net so you can get going it's not difficult at all and say while you scale it we also have a report that is called started edu where you can find a lot of educational material they will show you the link with in a couple moments and inside started edu you can find a lot of tutorials on different stuff for example you can know how to how the Cairo syntax look we're going to look at it in a moment you can for example create a token an ERC 20 you can create your NFT ERC 721 tutorials for even more interesting how you can create your own bridge from layer one and layer two a trustless bridge and for example how can you create your own wallets so you can if you can scan these QR code you will find all that material inside and you can get going by yourself without without any problem those tutorials are amazing and they have on board a lot of people into the ecosystem also we have a newsletter that is very nice and you will have a lot of educational material there too and also some interesting projects happening on the on the ecosystem is also there you can subscribe is a soft stack newsletter and finally what we're going to be doing today is a voting application they will allow a person to either vote for one or zero one for yes for example 0 for no and deploy it on the test nets if you have any question on thing now you can tell me this is the repo that we're gonna be using so if you want to have the repo you want to clone it you want to copy the code or just look at it feel free to scan these QR codes any questions comments will we start with the code in part oh okay how many of you know how to code in Solidity you raise your hand how many of you have ever coded in Cairo coming from Solidity into Cairo is very simple really really simple and it's way that you're already working with Solidity perfect you want to go to testnet and see already and interact with with this contract feel free also to scan these QR codes the testnets already working with these voting contracts I pre-ployed a couple minutes ago so in this in this table is a starboard team we have some swag in here you want to come also and I don't know guys do you want to add something else before we start calling okay do you need another QR codes and we have already there the one with the contract where we we're going to use is this one remember please so let's go to the codes so this is our voting contract again the goal is to create a contract that allow certain predefined addresses for example me as the admin of the of the of the both I can tell okay this address can both this or address can both this address can both because we don't want everybody to be able to vote only certain participants of a project I don't know and they will be able to vote yes or no yes with one no with zero and yes that will be all so for this let's review the structure and how Cairo looks this here we are importing our packages very similar to how it looks in Python as you can see it then with defined structs as you would for example in rust first we're creating a boat counting structs where you will be able to store the votes with yes or no so for example we have ten votes with yes zero votes with no something like that the counting of the boat secondly we have border info where we store information about the border in this case I only very simply allowed I simply added an allowed member that it will have a one if it's allowed to vote or zero if not if if this person has already bought it will have a few now coming to the storage storage variables a allow you to know if you know so little ready these are very similar to you they allow you to map from one and from one expression to the other in this case for example the first one now let's go to the third one here I am able to map an address to a to a is registered Bible that in this case is a felt so Cairo is type is a type language now you might ask yourself what is a felt felt is where is the need Cairo everything is a felt inside Cairo conversing to felt and basically for our purpose right now if you want we can get a little bit deeper in a moment both for now in order to to get to make the most of the time a felt is like a big interior number a huge interior number okay so in this case as you can see that dress has no that address type as in solidity it's a felt okay so we're mapping another is that is a felt to a felt called is registered that we have a one or zero or whatever we haven't defined it yet and on the other ones we are mapping a order information and interestingly in the first one we are mapping nothing yes nothing to a structure the boat counting so this allows to read or write into the memory that's as simple as that I can read this or I can write into the memory using these ones so using the storage verbal voting status and if we read it and if I I will go right now to the deploy contracts so it is the deploy contract I'm using right now boy anger which is a blog explorer for star net if I go to the read part of the contract I can see what both in status is doing using a getter function that we will see in a moment we can see the status of the voting right now because nobody has both jets we have zero both with yes zero both with no that is the storage we are reading right now this storage variable where I get our function that we will get to that in a moment and also we have the boring info and it's the same I won't go into this but basically we're storing information into the in this into a storage for the of the of the blockchain now let's go to the constructor looks very similar you know when you initialize your your contract when you deploy it you have to define certain inputs as in solidity exactly the same name so this constructor will ask for three different input variables as you can see now we can we can view how the function looks into Cairo it's very simple very similar also to Python and what is important here is this part these are the imputes the explicit imputes to this function in this case the inputs for the constructor that we have to provide it when we deploy this contract so I'm asking for an admin address the person that is going to be able to manage these contracts with a felt again then the number of addresses that will be able to vote and finally the this is a pointer so it's important to know that Cairo is a loadable language so here we can manage the memory we have to manage it so the rest of addresses is basically a vector with the different addresses that are able to vote I can add five six seven eight whatever and this pointer felt points to the start of that vector but you won't even notice that this the logic behind it is that this is pointing to the start of this array of different addresses but you won't you won't notice this as you will see then we're basically using a contract because we have open sapling on top also of starnet so you are able to use a very secure contracts thanks to open sapling and here we're using the ownable contract from open sapling before I imported them here so I imported the ownable contract and the possible contract libraries from open sapling ownable basically defines who the owner is of something and possible it allows you to post a contract in case of an emergency say that for example my application is being hacked so I can post it as simple as that but also we have ERC 721 logics and ERC 20 so you can use it with open sapling that's very very useful very very useful any question until now we have seen the constructor we can see in the storage variables, structs, how to import, how are you finding Cairo, is it difficult or is it nice? any questions? how do you sorry what was the question yes for example you have in this case we will be using addresses that are in an hexadecimal format right it will simply be converted to a field behind it will be we will actually deploy right now our contract using hexadecimal values and you won't have to convert it to a field but you also could convert it to a field and also deploy with that no problem right now we can think of it like begin to yours and we can get deeper into that any other question right now we have seen constructors, storage variables, structs, well perfect okay so we have our constructor and with this we can deploy our contract also this as you can see the structure of the contract is very similar to Solidity we're trying to follow the guidelines of smart contracts in Solidity you have getters you have the constructor and the format is very similar also you go to this contract is very well commented so you can know what is happening okay so the question is if we have inheritance in Cairo yes I think you guys can yeah sure so there's no inheritance in Cairo you don't inherit your contract what you do is you import your contract so if you're looking at the top of the contract up there here is importing a template developed by Opensapplin so it's importing the full contract which is called onable so it means that imports all the functions that are inside of this contract and inside of this contract you know it creates it creates a few variables that can be initialized and one of them is called the initializer which is supposed to be called during this constructor what makes sense so it's not explicitly it's not automatically initialized because because it's not like the contract is not onable it imports some function and it has no way to know that this is the specific context of the constructors you need to initialize it explicitly regarding the question on felt earlier I'm not sure what confuses you but when you're looking at variables in Solidity you know at the bottom of it at the end of the day it's a number and Cairo is a fairly new language it will get better in the next few months but right now it treats everything as a number so if you want to perform actions when you need strings you basically need to assume that you receive them as numbers you convert them you do your operations and you do all these kind of stuff make sense sort of yeah so the felt is as you mentioned earlier I think I heard you say it's a field element so Cairo is like the felt you can think of it as a big it's basically a number over a big field that is a prime that does indeed a field integer of mathematics and arithmetics that makes sense so it's really like you can treat it as modular operations the only time where it gets weird is for divisions division sucks I don't like them there is no problem with that so for example we were talking about the ownable contract this is the one that we're importing so we have it here locally and we're importing from it this is the ownable which comes in a name space so we're importing these functions yes no problem there's there no inheritance in Cairo perfect so going back to a contract so we import these functions ownable and possible from functions inside the ownable name space and inside the possible name space you can see yeah and there's a question the soliti no no you cannot import it right now in soliti with this contract I mean showing from open sibling are written in Cairo are native in Cairo I think there are plans to have more contracts from open sibling yes open zeppelin is working to create the standard implementation so any kind of contract you have on solidity you're used to have that is done by open zeppelin we're walking towards having that that being said I mean it takes time to develop contracts that are secure and everything so if you want to develop them you should it's worth it it's fun and you know you may develop stuff that gets used by other people which is great actually open zeppelin the contracts in Cairo by open zeppelin they have a lot of contributions from people outside the community so I will be right also if somebody manages to write a Cairo contract that is the equivalent to the stacking contract in synthetics which is used by everyone I'll buy you a beer more than a view it will eventually happen it's very few is one of you okay so we got our constructor and then we can get to the part here raising the initializer function inside the ownable namespace and then we go to the getters is very simple functions by definition in Cairo are private not like soliti so here if we want to have getters functions to read information we have to explicitly tell that they are getters so and something that I forgot to mention before but this is the way like very smart to how do you do it in Python how do you define that this has a particular set of properties this function that that is coming this case with view we're defining getter functions functions where you can read from so right now we're creating this admin function that as you can see is exactly the same format as it comes in open sibling for example in ARC 20 or is ERC 721 simply reading who the owner of the contract is so for example if I go again back to the contract deploy contract here I can read who the admin is as you can see this is a felt but if I convert it to hex this is the owner of the contract that is myself is this same direction so talking about wallets it's a good opportunity right now you can use right now argm x which is this one and also bravles that is this other one very recommended you can use the standard faucets you can simply put in Google standard faucets and you will be able to send yourself some fake it's so you can start making some interesting things using girly or more interestingly you can also breach your own it's from the girl desned in in the layer one into the layer to start it for example here we use in program I can I can ask for some fake it send to my metamask for example and then using the breach I can connect my metamask which is currently my let me wallet in layer one and connect for example are you next here as my wallet in layer two and I can reach these fake it's from girly layer one to layer two so this is also very interesting is the same thing as asking for it in the faucets so coming back to the contracts we have another gear function here it's also a very typical open sibling style function where you when we are posting we're asking where we think is this contract is currently post very simple and then more interestingly here we have a view function to know the voting status is the one that I showed you before it will let us know how many people voted yes how many people voted no as it was that again you can see in this function that's we had an explicit argument and by now you are already asking yourself what is this what is this inside these keys these are implicit arguments this is something that is different from other languages you might not seen that before but basically this repeat themselves all the time she's called pointer person pointer and rich check pointer we're interacting with the memory here so we are talking that these are pointers actually to a felt and to a structure called has built it no problem no we we don't need to get that that is something that we're repeating in each function it doesn't matter the real use is here so we're asking here for an explicit argument that is the boat counting sorry sorry we're asking for nothing here it's empty the imputes and the output is this a status a variable called status that is the boat counting structure that we saw before again carry style is a type language this helps for security any question until now for this function for example yes yes this is again you can read it we can read from the gates voting status this is the one that I was showing before and currently both are yes or no this practically in the structure we have and defined here this one both yes both no it's exactly the same here okay so yes you can call of course these functions from another contract that's you can call them and we'll go to the external functions that also allowed you to write perfect okay yes that is what I was telling for that is the implicit arguments these arguments that are passed without you explicitly telling these functions that you have passed them so they for example when we are reading from the from the storage you have to provide these functions that the story is the pencil pointer and the Cisco pointer you have to provide them and they go into the read function so inside here are the implicit function implicit arguments you don't see it because they're implicit but yes exactly these implicit functions if I take them off they will have an error in our it's it's not hard to to to get used to them and also you can see each function that I am adding here has them repeated so no problem with that okay also we have another view function where we are getting the status of a voter and yes if you were simply reading into the voter info a storage variable that we have before using the argument reads so now going deeper into this you can read and write from this storage function in this case we are reading and as you remember this search function ask us for a user address that was precisely a felt so if we provide it a felt then it will return us let's see once the seed return yes if we provide it an address it will return us a voter info structure okay so here I'm reading from it and then we're returning it simply as that status equals status because the name of the variable here is steps and to see an example of how to write this exactly the same the same storage variable that we saw before voter info we were able to read from it if we are imputing with the address and we know we now know that it returns unstructured okay so now we can write using the argument right we can write on it so we're writing on the storage of our contract and right now this is basically an address we will go deeper in a moment over it but this is an address and we're telling the telling it for this address please map this structure okay very similar to how you look at it in solidity yes method sender is I think I have it here get color address with this you are getting the address of the of the contract that is calling this this contract so for example in this case this is the most important function is the boat function so what it does is simply is getting the address of the color is storing it and then we're reviewing the information of this person to see if this person has already bought or not because we can only allow them if they have bought it and yes in a moment we will go into that MSG sender oh could you repeat the question a little bit louder please a variable like an address there's no notion of MSG.value in stocknet because there's no native currency everything's in ERC20 so there's no value attached to call there's no and there's no payable function that answer your question okay so so yes mm-hmm so let's go quickly into the most important function the two most important functions the register voters and this will help me to talk a little bit more about recursion that we use in Cairo so again as you can see we have the implicit arguments as always and then we are asking for two explicit arguments the register address length this is the length of an array and the second value is the array itself so first argument is the length of this array and the second argument is the array by itself then what we're doing here is and again you can see all this contract in the report I showed you before it's in the starting DDU in case you're you want to follow it closer in your houses and then what we're doing here is simply and this is a crazy a classic function of Cairo that is using recursion so right now we don't have force in Cairo you have to use recursion and this is a classic function for it what we're reviewing here is that it is the end of the recursion so if we have already passed to every each of these different members of the array that is if the length is zero then we can return and the recursion is finished then here we're creating a small a small a struct the voter info you remember we defined the structure called voter info here we are creating this botante info where we have this new voter info so I'm here that allow is equal one it could be zero for example so this function what it's doing is that each of the address that I'm providing it will register them as voters and we tell we tell us that they are allowed to vote okay and then continuing a little bit with the recursion what we're doing here is writing into storage into the storage variable register voter this one we're mapping as you remember before we're mapping an address to a number so this is an address what we have here is this is the way very similar as you would do it in Python for example and our languages you have the way and you can index to it using the square brackets okay so I am indexing indeed inside this array for this could be a number like one or two or five depends on the number of address that we are adding and then will we say that the value for that address is one we are simply mapping here and then we comes over the recursion part here we are reading again the same function and providing the length but this is a lower length as you can see if we have for example five different voters that now we are providing it with four okay and we are sending it with the register address and then it will repeat it will repeat on three passes through each of the different addresses and it is starting for from the last one up to the first ones and all this looks a little bit crazy using a caution but it's no problem you can get used to it and I think that this will improve in the near future right yes that's a good question the question is that what happens if you get into an infinite recursion you okay so there's there is the there's an answer for today and an answer for tomorrow but basically there's a form of gas metering in stark net just like in Ethereum and if you reach a maximum number of steps the sequencer would reject your transaction today you're not you don't pay for this kind of transactions they're just rejected tomorrow you will be it will be like a fake transaction on Ethereum you will pay fees for the execution that led nowhere any other questions for a moment okay so simply we have a recursion function here again it's not that hard and it will improve we're talking that Cairo is a low-level language and we have to be very honest and conscious about that and finally let's go to the last function that is the voting function this will allow us to call a function as as you can see here it's an external function external function simply means that we can write on the storage using it okay not only read but we can hear right into the storage again we have our implicit arguments we have an explicit argument called both and here don't mind this part is simply telling the memory that we will be using the compiler will be using local variables we don't need to go through that we're called the possible function from open sapling contracts specifically the function called assert not post it checks that if if this contract is post or not if it post this person cannot vote as in what that then it get the caller address this was a phone and a question from before with this function we can get the address of this caller we store in it inside a caller function then we can read the information of this caller of this address using the read argument from this storage variable starting in the info and then we are simply reviewing is this person can vote or not if they have allowed zero then they cannot vote then we're creating a new border border info a struck that it says that this person has already votes because we don't want them to vote again we are writing on the storage here everything here we already know that and finally we are updating the status of the votes with the vote of this person if this person voted yes or zero in this case then it will update that with zero the count with zero and if they voted yes in this case one for example then it will be updated the count will be updated with a song that we have here and finally we are updating the final status of our of our date the story of our voting and storing it into the storage as you can see this function is key and if we go to the deployed contract we go to the right contract and then I can vote in this case this is the function I don't remember whether I say that I think so I will go to my bravos while it in here I was in my audience before and let's see if he allows me to vote so I will vote with that one and I will be able to sign this transaction because this address is registered to both I did when I deployed it and right now wait this is the transaction hash and we have to wait for it to process this and we will have our votes now how can you deploy these contracts you can deploy it using the command line tools by its target or also and my preferred ways to use protostar protostar is a tool created in the image of foundry is it has the best practices from foundry and also some from hardhat sorry from profile so it's very interesting it helps us to test but also to deploy so if I go right now to my command line this is how deploying this contract looks like so basically an intelligent protostar deploy this contract that is already compiled by this moment and what I want you to notice here is the part of the imputes we talked before about the constructor accepting for three different imputes first one is the owner the admin of this voting second is the number of persons of registered addresses that can vote and finally the actual addresses so this is how they look this one as you can see is a hexa a hexa value and this is the address that is the owner of this contract then only one person or one address can vote this one and we can simply deploy it running like this protostar is very good it's very usable it has amazing testing functionalities but you can also deploy your contracts and that is simply the content that we deploy here and as we as we can see we're already voted if I go to read contracts we should get a voting status where we had a vote with yes with number one it updated and zero still no I could not vote again because theoretically I should not be able to vote again let's see what happens it should be issued it shouldn't pass for now but let's wait for it so that would be the main part of the workshop you we have three minutes to more questions yes the implicit right now here I don't have any but they can change depending on what you're building can you think from the scenario when every time they're used basically it's a it's a bit of a deep question the workshop is about to finish if you want let's meet outside and we'll give you a more definitive answer yes I think you have another message here well I look for it any other question in the meantime I have a question for the audience before we wrap the the workshop up can we get just get a quick show of hand who learned something during the workshop cool who thought this was too difficult who thought this was too easy okay fine so it's great this means this was spot-on those of you still are hungry don't hesitate ask us question come on our discord go on our resources look at what we do as also as Omar mentioned like most of these things the paradigm you're used to that you're used to how you write smart contracts how you deal with scholars and stuff like that this syntax is a bit different the tooling is a bit different but you can and will master Cairo it's just a matter of just like trying and this will give this tool will give you extreme power in your blockchain applications so if you're looking to go more to do more and go beyond what you can do with the EVM I invite you like do take a look it really is powerful and will let you build super cool stuff and again this is the QR to the educational resources you want to go look at them we will have boots on Thursday and Friday you can ask any question come with us and finally regarding the question the error messages this is how they look so if this assertion true or false fails then it will print this mistake water info well thank you thank you very much well it depends on the on the wallet let's see for example this case a certain lounge so what your question is what does an error message look like from the browser perspective essentially you'll get a failed transaction like you do on Ethereum and the trace like the way it shows up is kind of ugly to be honest it's still very rough around the edges there's a lot of info that is not necessarily relevant to you but the message the error message will appear somewhere and you'll be able to know where the error is from in general this thing works and this feels scale this thing scales Ethereum right now it's a bit rough around the edges meaning that it's not all pretty there's a lot of info or not enough but it works and it's cool this is how the error looks like as you can see that's the message that we saw before in the error yes for info your address is not allowed to vote all right and we will have a boot please feel free to ask any questions and thank you very much for coming


Hello and welcome today we're going to be looking at a command called NeoFetch. It should be in your repositories if you're on a Debian based system you can use apt or apt get by sudo apt install NeoFetch like so. I already have it installed so I don't need to do that, use whatever package manager you use. And once you have it installed all you have to do is type in NeoFetch.  So just a bunch of information about your system which you can get through other processes but this one looks kind of nice. And you might want to add this to like maybe your login screen when you SSH in or when you start your shell when you log in your machine it might be nice to have this information nice to displayed. You can get a lot of information through other commands like a name dash a will give you your processor type and your distribution and your kernel version and date and stuff like that. But this is a nice little header here and there are options if you wanted to change colors and stuff to different, you know, you don't want the words red you want them a different color you can do that issuing different commands with it. I just thought I'd bring this to your attention I heard about a while ago put in my notes to talk to you guys about and I know it's a short video but I just thought I'd bring this to your attention. I hope that you find it useful and it might be nice like I said especially when you're logging the servers I like each of my servers to have a different welcome screen and it might be nice to have something like this so that you know which machine you're logging into. That's it. I know it's a short one. Thank you for watching and I hope that you have a great day.