Are you ready to do your screen share in a few seconds? Yes, of course. Right on your side. You're calling in from Poland, right? Yes, I do. And so your talk is about type safety. And in the descriptions, you said it goes beyond PEP 48 for the type hints. So it will be really interesting to see what you want to do beyond that path. So if you're ready, please start. OK, thank you. So what I would like to talk about, let's first define what I mean by type safety and also what I mean by full stack type safety. So the type safety that we want to achieve is catching all the errors, all the bugs that are caused by type mismatches as soon as possible. So ideally it would be during the code development, but never later than in CI. They shouldn't cause any bugs that happen later on the QA phase, because this is unnecessary time lost in our development cycle when they have to be found in QA and returned to developers. We want the automatization here. And also we want to catch typing errors that span the layers of stack because we might have errors that are local to some code base. But we also have data that is passed from a layer to a layer and we have contracts between these layers. And also we want some automatic way to find that we are somehow violating these contracts. What are our main problems here? First thing, the system of type annotations in Python is quite new. It is quite immature. Not everybody is using it. It is still in development. So it is not yet perfect, of course. The second thing is we have various paradigms of typing in various layers. And this is also a problem how we can propagate the information about the type from one layer to another. And also the problem is that when we test, we usually test layers in separation. It is much easier to write unit tests than integration test. And it is much cheaper to run unit tests than integration tests. So we mostly write unit tests, not focusing that much on the contracts between various components of our stack. The one thing I would like to do in the beginning is to somehow discuss the terminology because this terminology is used quite loosely in various publications. And sometimes people understand different things by these terms. So I would like to just ensure that we are on the same page so that we understand the idea of weak versus strong in these terms. The typing is weak if the value can be somehow misinterpreted unless we care about it ourselves. And it is strong if a type system is protecting us from misinterpretations. The basic example would be in C. Here we are setting two sign integers to different values. The first one we are putting to print f. But we are using incorrect formatting clause. And we get a value that is completely different and doesn't mean anything for our user. Here we are passing the value by a pointer. We then cast the pointer to a pointer to a different type. And it all nicely compiles. But we also get a value that doesn't make any sense for us because this value that is ordinary int gets interpreted as a short int, actually some bytes of this value. We may think that this is something that wouldn't happen in higher level languages. But I will show how this can happen. Very similar thing can happen in the SQL. So this is not completely relevant for us. Then we have static versus dynamic, which I believe all of the Pythonistas are familiar with. Of course, Python is a dynamic language because the types are determined during runtime, not during compile time. So if we have a Python function without any annotations, we basically don't know what are the types of these arguments. We can pass various very different types here. And they would all work. And even if we put something that doesn't work, we wouldn't know about this before we actually run this. So this is the thing about dynamic typing. And an example of static typing is in Golang, where we can actually always determine what type any variable has, either because here it is marked or because it is assigned to some value of a known time to a literal or to a result of some function. And we know the result of the function here. So static typing doesn't mean that everything is marked, but it means that everything we can determine just by looking at the code and then our compiler can determine it. We have also another distinction that is sometimes called weak strong. But I would like to say the strict versus loose. In strict typing, we have explicit type conversions. We have to cast the values explicitly. If we don't, we get exceptions or compilation errors that tell us that we have a type mismatch. In loose typing, there can be some implicit type conversion. And this thing is actually not a binary thing. This is a spectrum. And to show you, I can show you a language that is stricter than Python. This is Haskell. And in Haskell, trying to do something like this, trying to print an integer would cause error. Trying to pass a list as a sole argument to if. It is also an error. So these are things that we are familiar with from Python. And we can't bring it there because Haskell requires some more discipline for us. On the other hand, there are languages that are looser than Python. Famously, it's JavaScript. In JavaScript, almost every expression we create would be interpreted somehow by the interpreter. We can see, for example, that here, the number is cast to a string. Here, the object is cast to a number and so on. Somehow, this leads to strange things happening. For example, here, we get not a number, but we are not working with numbers. And here, we get the plus operator that doesn't have this commutative property because if we swap the operands, we get something different. So Python is somewhere in the middle of the spectrum where we, Pythonistas, believe, is a reasonable strictness of the language. But of course, the idea of reasonable is subjective. Then we have duck typing, something we are very proud of that we have this nice concept of duck typing. So in duck typing, protocols are implemented implicitly. We need to implement the required methods and the object becomes compatible with a protocol. We have this other way of typing where classes must inherit for another class or being marked as implementing the protocol. How do we call this? We could call this actually my idea platonic because Lata was this guy who had this concept of metaphysical ideas. And he wouldn't agree with this proverb that if it looks like a duck and quite like a duck, it's a duck. Lata would say that there exists an idea of a duck. And when we see a duck, we recognize it because our brains, our minds, somehow know already this idea of a duck. So it could be compared to classes. Or if we don't like this whimsical ideas, we could say it's structural typing and nominal typing. And these are the terms that are used in myPy documentation. So they would probably be somehow a part of this phytonic lingo, just a short regression because before, it was set interfaces, but it was crossed out and they said protocol. There is this idea that we, Pythonistas, tend to use a language that is a little different from programming in other languages. For example, we say race, where all the other languages say throw. We call a race list. When others say list, we say deck. If others say it's a blade and abuse of exceptions, we say stop iteration. And also, the thing that in most languages is called interfaces, we call it protocols. This is a little problem when we want to communicate with others, but we have to remember that this name protocol means the same that interface in Java or in Golang. There is this misconception also about duck typing being some special type of dynamic typing. It is not true. Static languages can be also duck typing. And we can see an example here from Golang. We have this interface, duck. We have a struct called malart. It implements these methods. And we can use an instance of malart as an argument for a function that requires a duck. Nowhere here, we say explicitly, a malart is a duck, but our compiler understands it. And there is also fifth criterion that we need to take into account. It's three versus six attributes, because we are working with the data structures, and we also need to take this into account, although it is not actually a paradigm of typing. It's how objects work internally. So if we look at our typical stack, we see that the layers of the stack exhibit a different way of typing. Python and JavaScript are not that different here. Of course, JavaScript is much looser than Python, which I showed before. But for SQL, it is completely different. We have loose typing. We have static. We have fixed attributes, because we have, of course, the tables that have fixed columns. We don't have any idea of interfaces. So if we communicate from Python to SQL, we get this inherent incompatibility. But this incompatibility was bridged long time ago with various ORMs. ORMs are actually a little un-Pytonic, because they use fixed attributes, something which was not a part of a classic Pytonic way of writing code. They don't use any interfaces. If you want to put something as a related object, you have, of course, to put the right class. You can just re-implement a model by implementing the same methods. But this bridges the gap between Python and between SQL. And it also fixes some problems we have with SQL. If we look at this operation, we can see why I declare SQL a weekly type language. Here we are taking an ID of a publisher and set it as an outer ID of some book. This operation is correct, but it doesn't make any sense. And the result of this operation is actually undefined, because we don't know what would happen. It depends if there happens to be an author in our database that has the same ID as our publisher. Then we would get a value that doesn't make any sense. If not, we would get an error. So this is something similar to what we get in C. Sometimes we get gibberish, and sometimes we get segmentation fault, but we can't really say in some situations what we would get. This is actually bridged by ORM, because this operation would always raise value error.  And this is one of the benefits of ORM. But this is something that we have for years now. And how about annotations? So let's enter mypy into our stack. So mypy is a strange thing, because it uses static analysis of a dynamic code. And it is somehow disturbing for many people. And some people say that it's un-Pytonic, although actually mypy can give us some benefits. So now let's look how Django and mypy can work together, how do they work together correctly, or are they lacking something? So now let us look at some example models. And here we have a book. This book is linked to a publisher and to the author. We allow the author to be null. We don't allow publisher to be null, because sometimes we cannot label a book with the author. And if we now look at some functions, some functions, these functions almost all have some problems. And if we run mypy on this code, it would actually catch some of these problems. It would catch that we are using incorrect type for our decimal field. OK. It would catch that we are using publisher man, but not that author man. OK. It would also catch the thing that I was mentioning before, when we are trying to put the value that is not pointed by this foreign key. It's also OK. However, these two things are also not OK, but they are not cut here. We are creating a book that has only a price. This would cause an error, because we are setting null values to null columns. And this actually could be fixed. And maybe it would be fixed in the Django steps in the future. But here we have the same problem. And this can't be fixed, because that's not how mypy works. Mypy is going line by line. And in order to know that this is wrong, we have to analyze the whole code as a whole. So it wouldn't work anyway. So what about mypy? It already recognizes the relationship between column types and Python types. It recognizes the nullability of fields. However, it can't handle some problems when we make incomplete objects. And it also requires a mypy plug-in. That's why it's not universal. This would only work with mypy, not with any tool that uses type annotations. So this is also a problem. OK, now let's look at the other side of our stack at the communication between back-end and front-end. I said that JavaScript is not very different from Python with regards to the typing paradigm. However, we also need to consider JSON. And JSON has almost no typing. It has only primitive types and no information about classes or something like this. So in order to introduce some more type safety, we need to add additional tools. So we would use OpenAPI3. And we would substitute JavaScript with TypeScript. TypeScript is something that a JavaScript developer can learn in several hours, because it's just JavaScript with type annotations, just like type annotations in Python can be also learned by a Python dev. And OpenAPI3 is a system of schemas that can be used for tests. And they can be also used for code generation. So now let's look at the other part of this. So we created here a simple React component. And this React component simply displays the data of a book. However, the fetching of the data is a little more complicated because it uses several API endpoints and combines this data. And it has to handle the situation where the author of the book is known and not call this endpoint without a reason. And if we now run this, we would see that it is working just like we wanted. It would call the backend, and it would display all this data. However, what if we have a developer that is careless? What if we have a developer that gets this information? You need to allow for known publishers. So this guy goes to Models and he does the simplest things on Earth. So he just allows it to be known. And if we don't introduce any type safety mechanism, then it would probably call some bugs that would happen in various places because not all of our code can handle the null value. However, here we would have to do one more thing. This would be done by this guy who does it or by CI. And this would be two things. First of all, it would be using this tool to generate a schema. It is called spectacular. There is also a schema generator in Django REST framework, but it is not as good as spectacular. And we would generate a schema game file. Then we would go to the frontend. This is all things that can be automated. And we would generate some more files. That would be typescript files. And we can see that all the types are generated here. And now, if we try to run our code, we would see that during the compilation time, during compilation from typescript to JavaScript, we already get an error because here typescript detects that the ID of a book publisher needs to be a number. But that book publisher can be undefined for null. So we get what we wanted. We get the situation where the CI detects our error. And the developer can now see that he broke the contract and he needs to handle this null value. So what are our takeaways from this demo? There are tools for code safety enforcement that we can use in a whole Python stack. And they are worth consideration. And the benefits, I believe, from them for any big project, outweighs the costs of introducing them. However, they are, of course, not perfect. We can't expect them to catch all the typing errors. And we probably, due to this inherently dynamic character of Python, we would probably never be able to do this. However, we can do a lot with them. What can we see in the future? I believe that one thing we need to expect or maybe work on is more patterns in type annotations that are available without plugins. So we can actually make type annotations that would work in every system, not only in my Python. And the other thing is tools that are based on code annotations, not on the scripters. This is how they work, like data classes. There are two projects like this. It's Strawberry GraphQL. We will have a sprint of Strawberry GraphQL on this conference and Data Class DB. And they also try to do the same thing that Django REST frame or Graphene or ORM, but in a different way. So thank you. I see that we don't have that much time left. So I believe I would have to answer any questions in the breakout room. Is it correct? Yeah, that's correct. Thank you very much for your talk. At the moment, you're still in the Brian track chat, but anybody who has a question for you can then move to talk full stack type safety, where you then can answer more complicated questions if anybody is not totally stumped by this by now. Thank you very much for taking the time to show us all this. Oops, that was not a proper loss. So we'll try this again.


Hey everybody, Lance Gwakie here. Today we're gonna talk about probably the most common variation of the row. I think this one is often butchered and easily butchered, so I don't really give it to that many people, unless you've trained with me for a little while or you've trained previously for a little while and you have shown competence in your movement skills. This is the bent over row, so I don't have a barbell, but you can, you know, it's the living room. You shouldn't have a barbell in your living room, right? But you can pretend I'm holding one.   So the complexities, the challenges that we run into with the bent over row is, I've got a lot of torque on my back from gravity just holding this bar and having my hips bent over like this. I need to really stabilize this stuff. And if I have even the slightest amount of back movement over a leg movement for security, I really overload that area.   So let's, I'm gonna give you a cursory overview of the RDL if you don't know what that stands for. It's Romanian deadlift. It's kind of like just a stiff legged deadlift. You need to make sure that you got that. So I've done a hundred videos on deadlifting. There's a couple about the RDL in there. Definitely look those up. Now we're here, feet are flat. And first thing I'm gonna do is I'm gonna kind of exhale and tuck my hips just to kind of feel a little bit more of my lower abdominals. I want to secure here so that I don't have to secure here, right? I wanna turn this on so that this can stay relaxed, okay? I'm not doing this thing. It's not a crunch. It's not a super rounded back. It's just a slight let's stack things together. So I have that and then I'm pushing my butt back until I feel a stretch in my hamstrings, which for me takes a while. So I'm pretty flexible here. So there we go, I got a little bit. Now, yes, I keep my little tuck. I find my abs, they're turning on a little bit more. I'm feeling my hamstrings a little bit more. And now from here, I'm gonna do my row. So here, theoretically we've got the bar this whole time. This is halfway down on the RDL. And then we do the same proper rowing motion that we've already learned cause we already did the three point rowing variation cause I told you to do that, right? You need to lead with the shoulder and then the elbow follows, okay? So this movement is pretty complicated, honestly. I mean, I like to simplify it this way, but to do it, it's not always as easy as the theory that we have here. So once you can kinda break it up like this, then you try to smooth it out. And I get a nice stretch at the bottom and then I get a nice retraction and squeeze at the top, okay? Just like that. And my legs are getting tired. So I'm shifting the weight onto my back. So let's find them again, there we go. And now my legs are extra tired. And it's just like this, okay? I would start with a really light weight. I would not consider like, if I'm gonna do this for the first time, I'm not gonna try to really push anything too hard. I'm gonna use this as a, let's explore this movement and see what happens kind of training session. So yeah, I got the hip tuck, I got the bend with the bar. I feel a stretch in my legs and I'm trying to make this a leg exercise. That's the goal here. So I push through my feet as I row and that helps me feel my hamstrings turn on instead of my upper back stuff. Hopefully that makes sense. Again, this one's easy to kind of butcher, easy to mess up. So ensure that you're getting the lower body muscles. Ensure that you can do the RDL first and then go into adding a rowing variation onto stuff. If you're having trouble, you know, honestly. So I had a lot of trouble with this pattern when I was going because I didn't wanna hurt my back and I wanted to keep it straight. And what I found was that I was arching my back too much and that's why my hamstrings are so flexible because that's just my pattern. That's what I like to do. Arch my back a lot, but all that does is it secures my back, but not my legs. Right, so I never feel this in the hamstrings unless I actually feel like I'm rounding over a lot more and that feels a lot better there. And that feels even better. Okay, so a little exhale, maybe a slight rounding away from where you've been holding your position could actually help you. And that's just kind of a little teaser to some videos we're gonna do later on. So this is the bent over barbell row.


Hello everybody, Andrea Maesky here. Let's talk about whitening. So either in-office whitening or Take-home whitening. So I'm going to talk to you guys about the different options that I have for my patients Because I do own a dental hygiene mobile clinic meaning I go to patients houses or I go to their office their you know wherever and clean and or Whiten their teeth and lately Everybody wants their teeth whitened and I contribute that to you've probably seen those ads on Instagram on Facebook of Take-home whitening kits now people love that idea But then a lot of them are starting to think hmm Maybe I should ask a dental professional to get it done instead just to make sure that it's safe because Usually when somebody's looking up a whitening product their first question is is it safe for the enamel? Because these days you can find anything on the internet, you know Do a search for anything it doesn't mean what's on the internet is true So a lot of people come to me and say, you know, how much do you charge for whitening because I hear you come To the house, which is awesome Or they might be getting married and then say, okay Me and my fiance me and my you know wedding party want our teeth whitened, but we're pretty busy You know and you come to us, which is amazing But how much is it? You know and what's the difference between the whitening that you do and the whitening that I can buy from like $40-50 from the store So I'm going to actually talk to you guys about a little bit about all of that because even as a dental professional Whitening hasn't been out for that long. I'm thinking maybe 12 years maybe 15 at the most But that's not a long time if you think about it That's when the whitening first started to become popular people wanted to do it They could see the before and the after and go wow, you know, who does not want white teeth? Honestly, you will not have anybody say to you that they want yellow teeth. It just doesn't happen, right? But I'm first going to talk to you guys about the ones that I use in my office currently So I am using something called a pull-out office. Okay, so I'm just going to show you guys that for a second So this is what I use. Okay, and I actually don't have any left. I need to order another package But this is kind of what it looks like on the inside. So it comes with It comes with The gum protector so the gum barrier I believe they call it because how this works for the in-office treatment is You would put cheek retractors in the patient's mouth You would apply the gum protector over the gums if you're not sure what that is just do any search on YouTube for in-office whitening and then you can kind of see how they do it and then you would You use the whitening syringes. Sorry guys. I just have to blow my nose. Sorry. Sorry. I Have allergies today. I'm not sick, but I had allergies. Okay Sorry guys, okay So then you would apply these The syringe with the whitening on the teeth So depending on the type of system you you you use It might take the patient one hour to whiten it might take half an hour It might take 20 minutes. This one takes half an hour. So that's why I Wanted to give this one a try plus That's actually the system that we had used in my old office where I used to work for like 12 years And I could see that it does work. The price is fair like this I Believe per patient like per office treatment is about $90. So that's actually fair Although don't quote me on that. I kind of want to double-check now But I believe that that's how much it is and then of course you would charge your patients anywhere from, you know $300 $400 $500 for the in-office treatment now. I did have a promo where I Would do whitening for a hundred and fifty dollars With a cleaning so if patients had their teeth cleaned with me They could get the whitening for only a hundred and fifty dollars in office. So that's what I did and you know what? With whitening it you shouldn't expect to make your money from that Like I don't want you to lose money like let's say this costs $90 per patient, you know, which I can't remember. I have to double-check But I think so I don't want you to only charge you fifty five dollars right to your patients so make money but don't expect to make an extra two hundred dollars after a cost because Patients won't want to pay that Maybe they will I don't know but that's kind of what I'm noticing But I do always say with a cleaning if they want Only the whitening and then I charge two hundred two hundred dollars Which you know, I could actually probably charge more but it's it's kind of me Getting you know patients knowing who I am They have a good experience and then hopefully want to come to me from now on type thing Right since I'm a new business. I do things a little bit differently But that's what I use in office now I find every single patient though that I've used it on it does cause Sensitivity if they haven't used a sense of time prior so I do tell my patients use a sense of time two weeks before I wet in the teeth and then for at least two weeks afterwards that will help to protect against the sensitivity But for those patients where I show up and they go, oh, I forgot to use the sense of time Well, I come to them so I'm not just going to leave right so I Do the whitening anyway, and they're always sensitive not painful sensitive, but they will say to me like um Yeah, I'm ready to stop now because it's sensitive. So with this stuff you would leave it on It's pretty much on for a total of half an hour Every eight minutes or so you're supposed to suction off The whitening off of the teeth and then add more so after about eight eight minutes or so three times So it stays on for about half an hour and always by the third time I have patients say to me Oh, you know, or you know, it's kind of hard for them to talk because they have their cheek retractor in so they're kind of like this But they're always like oh that's really really sensitive so you can tell right what they're saying So then I say do you want to leave it on for another? You know five minutes or do you want me to take it off and they say always take it off So when they're telling me that they want me to take it off that's sensitive So I'm actually looking for something else. Okay. I am because I don't want like my Patience teeth to be sensitive But as I said before if they use sense nine patients aren't sensitive. So you guys sense nine works It's amazing. You know if your patients are having difficulty with sensitivity Tell them to use sense nine and make sure that they use it twice a day But I also wanted to show you guys so I'm actually going to share my screen for the take-home option This stuff's amazing. So it's by the same company. They have either a polar day or a polar night for the polar night You leave it on for a bit longer. So I always buy The 22% because that's the highest strength of take-home that you can give I see here a 35% But I actually have never seen or have been able to order a 35% take home The in office is 35% but the take home I don't believe it. So I think that might be a mistake on the website or maybe I was just looking at the wrong thing I'm not sure but I Usually order the 22% which is the highest Because I figure you know patients want their teeth to be whiter and they want results sooner than later So I find this take home works amazing people are so so happy With the 22% I tell my patients to leave it on for about 30 minutes every single day Okay, I give them four syringes. So that's about two weeks worth Okay, depending on how much they use in their tray, but that's about two weeks worth now I do not make customized trays Here's me being honest.  Yeah, seriously. I hate taking them I hate pouring them up So if I ever hire a dental assistant one day who wants to take them for me and pour them up awesome but as of now I buy the The trays that are preformed from Maxel maxel so you do have to be a rep to order them, but oh my god Sorry guys, I came out of nowhere. I apologize Darn, I think I left my trays downstairs I should have known better but they are the best trays that I have found so far because they're a little bit thicker but not thick in a bad way because they're soft trace so They're cushioned in such a way where it kind of pulls your like Lips apart anyway, so the whitening solution doesn't get on the gums. I've tried trays from Amazon, but they're they're either too thin or they just slide out. Well, that's not very helpful Is it so that's what I do? So I give them about four syringes at home And I give them a tray from maxel to use I tell them to put it in for a half an hour every single day. Yes here It says 15 minutes, but honestly or well, it says from 15 minutes, but I just say to do it for half an hour every single day for two weeks It will look amazing if for some reason you you know Think your teeth look amazing after a week. Well awesome then stop using it and then save the other two syringes for in six months So and I just noticed so this is where that 35 percent comes in I Had ordered my pole a night from Patterson and they didn't offer the 35 percent But I'm gonna see if I can order the 35 percent somewhere else because I'm a Firm believer and you might as well have the strongest percentage use the sense that I obviously Unless your teeth are just so sensitive that you can't handle it But your teeth aren't gonna whiten as well, right? So I kind of want to look into this and I like how it comes in these like neat Kits too, right because like if you give this kit to a patient, they're like, oh, this is nice, you know so yeah, but I've been looking for and sorry. This is kind of a longer video, but You guys probably know me by now. I like to talk but what I've been looking into for the in-office is Wicked white so a lot of us who are Dental hygienists and we all kind of talk to each other, right? So we are awesome, you know, we all talk to each other We all help each other. I do have a course called Mobile Mobile RDH Academy, so I actually teach Dental hygienists how to start their own business if they're thinking about it and Included in that full course is a group also where we talk like every single day We just sort of talk about the pros the cons of kind of having your own business. We ask questions and you know Teeth whitening always comes up like well, what are you guys using at home? For patients. What are you using in office? How much are you charging and everybody seems to like? This company and apparently it was started by a retired Dental hygienist, so that's awesome. We all like to support each other, right? So but I'm looking into The in-office so not the take home because I do like the Polo night or the Polo day for the take home, but I'm looking and actually sorry I'm not logged in so they might not let me shock right now Because you do have to sign up and prove that you are a rep Sorry, I might just have to log in. Sorry guys here. I'm just gonna pause this for one moment Hey guys, sorry about that. Okay, so I was able to log in so I'm going to look at their in-home or sorry They're in home. They're in office options So they do have take home options and they have in-office options as well So like just as an idea for their take home the whitening kit that they do offer includes a whitening syringe in a pen, you know like products So all the patient has to do is Paint it on it includes trays too So they would paint it on and then put the trays over top to kind of keep the whitening, you know on The teeth I don't understand the whitening pens out there because yes You would paint it on but then as soon as you close your mouth the whitening is going to come off, right? So I like the idea of the trays although, you know Be careful. I haven't tried them but with trays you purchase be careful because some of them are horrible Like I have bought some from Amazon that just kind of slid right out, right? So I like the ones from Maxill, but I haven't tried these ones, but it also includes a Spray so what the spray does is it's used in place of What am I trying to say in place of Toothbrushing because they always say to brush the teeth first and then do the whitening after that So in this case, they include the spray to spray on the teeth and then you would Spin it out and that's supposed to clean the teeth, you know for the whitening So it just kind of prepares it and then with the whitening pen you would put on the Whitening solution and then the trays are used overtop. It includes a shade guide and includes something else by the looks of it, too Doesn't really tell me what this is and I I apologize I've never bought anything from here yet, so I don't really know too much about it But but as you guys can see they do offer the take-home kits, too They offer a lot of different things which is nice But I'm kind of looking at The in-office option although as you guys can see So there's a starter kit with no light now I kind of feel like I don't need a light But some of the whitening solutions though claim that you need a light for it to be activated So I might try though this this in-office kit without the light It looks like it includes a poster some cards 10 of the tooth Whitening pens so technically I guess that's good for 10 patients. So if you think about it if you're charging Let's just say for the sake of numbers a hundred dollars a patient times 10 You're making your money back totally, right? It includes five pretreatment trade sorry pretreatment sprays so that sprays of the Sorry the spray that I was talking about the micro brushes the daffodishes cheek retractors So a lot of things now. I actually don't feel like I need all this Because I'm a mobile hygienist, right? So I don't need a poster the cards though would be handy because it Explains the whitening. I'm assuming so Sorry guys I'm just gonna look into this further actually and I'll let you guys know what I decide to do But I see the cards are here and those are $80.  So I might actually look into that I might I'm gonna look into that and I might even email her and just ask her some questions Like what she feels is the best in-office kit for me type thing Interesting you guys And I kind of like the idea too of doing the in-office treatment and then giving patients a take-home kit as well Because I find like with it with the in-office ones Yes, the results are good, but I don't feel they're amazing in my opinion So maybe I'm just not using the right product But then if I give them a booster to take home then that's when they really notice a difference And I just noticed you guys that they have this Take-home option for only $40 and it includes a tray with a light and I like how it comes in a box like that Nice say so I think that patients would love that so it does have the pen it has the tray with the light and the The spray although again, I have the traits. I like the box that comes in man. That's tricky a Yeah, I'm gonna look into that more and I'll let you guys know kind of what I think okay So thank you guys for watching again. Sorry. That was kind of a longer video I don't even know how long I've been talking for but so those are Kind of what I've been doing With the in-office Whitening the take-home and I'm looking into other things too So if you guys have questions, let me know because I find Whether you're a dental professional or a patient everybody asks about whitening they ask about cost So let me know if you guys have any questions. Thank you guys for watching and I will see you in the next one