Thank you. Hello. Thank you very much for being here. You are really brave. I was expecting an empty room. So I am happy that at least you are curious about this topic. The main reason why I'm giving this talk is because once I searched for a talk on this topic and I couldn't find anything, only blog posts and discussions around all the time. So I hope that you are still interested into this thing. And a bit of a disclaimer. This is a really controversial topic. So you might have your own opinion. I really encourage you to talk to me later on. I want to know what do you think about it because it is a problem that sadly is still not solved. And the other thing, there is a couple of references in the slides that are not true. So I encourage you to find which one are not true. Okay? That I give you some homework, though. So this is how it started. The other day, I wanted to, you know, for some reasons, wanted to get a list of all the files that I had by a backup SSD. And I said, okay, just it was not a large, really, backup. As you can see, there are only two millions of files. So I went there and I said, what do you use to do that for some large file system, right? You can use Glob, right? I guess that everyone here knows Glob. So you do something like this. You get your files. But the problem that I found is that it was a little bit slow, right? But then I said, what is the better approach? What is everyone else encouraging people to use? Pathlif, right? Who uses Pathlif here compared to Glob? Okay. I'm really happy that you're not using Glob. Nothing against it, but it's faster. So I thought, okay, you give it a try. I know it returns an iterator and I'm casting it to list. So of course, there are some overhead, but still it's way faster. So then I thought, is it fast enough? I remember this is only the motivation for the story. And then I thought, hmm, maybe I can use any other language because here can anyone program in more than Python? Maybe other languages? So I thought, which other language do I know that I can use that is popular to beat this? Here we have a clue of the language that I was using. Can you guess which language was it? You can shout if you want. Maybe if I zoom in with the picture a little bit. Of course it was C++ because you have the sky, all the tone of blue, so we all love C++. So I was using C++. So the good thing is that, as you know, you can extend the Python using the C API. Maybe who here has written, even if it's a hello world extension in Python, in T for example. Okay. So people at least are aware of it. You can extend it, right? So we will create a new project there for the extension. I hope that you can read well the thing you can. I want you to answer this to me. What is the tool we use to create a new empty project for C API extensions? Wait. Why nobody knows the tool? Come on. I mean, we have this tool since forever. No? Okay. Of course we use cargo, right? So I have like a proper version. So if you don't believe me, you have there that at least it's the Python package manager. So okay. So we do cargo new and some project, right? Something.  Everyone in following, right? So this is the base thing that you can get, of course, and then you can hear a base structure of thing, and then we can build things with cargo like you usually do with cargo build, and then you have your wheel generated, right? For some random project. Cool. Everyone is following. Perfect. So in C++, we have the file system directory, and this is something that was integrated in a couple of versions ago, and I was curious, like, could I do something that is better with this? So this is the implementation of the function, a globe written in C++. It's really simplistic. Maybe it's really not really optimal or anything like that. As you can see, there's just an option to say, like, it's recursive, it's not recursive, whatever, whatever, and then we have some lists and readers on that. So these are the times that we got, and with FastGlove, I got this. So, of course, what is the outcome of this that I managed to have? Who have thought, like, using a compile language is faster than Python? It's like ground breaking thing, right? I mean, 100% times faster than Glove. So, of course, I was ready for this, right? And going and ready being the number one post, whatever, changing the life of many Python developers. But the package has a couple of questions that we still need to answer. I guess that still you can not, if you see some issues with the wheel there that we have there. So which are these questions, right? What happened if people is not using Python 3.11? Can they use that package? Do they need to provide one per Python version? What about changes in the C API? Can they only reduce the scope to whatever is included in 3.11, for example? There were a couple of things included in the 3.11. The limited API from 3.11 onwards, with everything exploded, something changed internally, opaque type, slot IDs, internal microchanges, many things that we need to figure out. So, luckily for us maintainers, we have PEP 3.8.4. This is an historical PEP. If you go to the documentation, it really says this is just for historical purposes, but this is what evolved into that little page of the documentation that you have seen many times, for example. In a nutshell, you can define the limited API at the beginning of your code before the Python.h. You can specify the version of Python, you can just leave 3 as well. If you are using Windows, you link with one DLL and not the other one, then the tag of the wheel changed, and then you will have something like it's ABA 3, and you might have some performance issues depending on what you are using. So I wanted to include this PEP as well because the other day in the C Python panel, there were some discussions about incompatible changes. So I wanted to show you in case you didn't know, how things kind of work, right? I thought that this was an old discussion, and when I took this screenshot, I thought, okay, the 2020 was the last time someone discussed it or amended it. I noticed that a couple of months ago, there were also some discussions as well. So this thing, it's still evolving, so they're still figuring out, or maybe as you saw in the panel, things are changing on how to change things. So in a nutshell, this is including everything that is public API. If you were in the panel, you know that sometimes we have public API that should not be public API. And the policy says something like if you have incompatible changes, of course, it's only accepted if you have a large benefit-breakage ratio. You have a duplication process, but if not, then you need to follow some procedure of having two consecutive minor releases, continuous releases. There are some exceptions that happen time to time, and you don't need to care about soft deprecations, which is when you stop using something and put any warning there. Okay. And I wanted to put these slides, maybe, because there was a question about how do the people deprecate stuff? So in a nutshell, I don't want to bore you with this because it's only text. Discuss the change, add warnings, wait for Python releases, check for feedback, final removal, and then any question do ask the series calls. Okay. In case someone thought, oh, the pronunciation of this guy is really bad, I'm not saying ABI or API in a weird way, they're two different things. So in case you don't know, I'm sure you all know. ABI, application binary interface, you know, just for use, I mean, linking all the whole thing for the internals of the Python and API, it's what you're using from the API that Python provides to have your extensions. And this is more or less where they, in a nutshell, what they do. So ABI-related, AB3 on your tag and the other things are related to functions. Okay. I promise you that was a boring part, but it was really necessary because, you know, talking about policies and stuff is not really fun. So what's the catch? We're using the Python-limited API. The subset is limited, right? So you will encounter that the whole things that you have available for you, you cannot use them all. So that's really a problem because maybe you have a large project using, you know, some CBI and then it's a problem. Functions are as low as the macros. Most of the macros are not part of the limited API. So if you were using one of those, that's also a problem. There is no guarantee that when you have set up the limited API, your whole code conforms with this. We'll see something later on in an example. There's no guard about calling invalid functions, so functions are outside the limited API as well. And you might need some extra functionality that is not provided. So can I use maybe, I don't know, generate a wheel for each Python version? Some of you, I guess, at who knows CBI will? Okay. A few hands. It's a really amazing project. It's really simple, and I think it's a really magnificent that they can generate everything with it. But the problem with this that I have is that then you encounter projects like this. Maybe you don't visit the pages in PyPI, but this is the Numpy Release, for example. Nothing bad about it, but as you can see, many things around. So a little bit confusing. So why is that a problem? And now I want to tell you a little, little, sorry. So when we're releasing this project that we're working on, and if you are not aware of Qt, just imagine framework, do graphical interfaces, other applications in a nutshell, really old as well. But one of the problem is it has many, many, many, many different types of interfaces. So in the mobile version, in the audio classes, methods inside the classes, this is a huge thing, right? So of course, if you ask me how challenging it was to support this thing to Python, it took many, many years. So for technical preview, we had a wheel that was 400 megabyte. Okay. As you know, PyPI, the limit is 100 megabyte. And per project, it's 10 gigabytes. So imagine. We had support for the three main desktop platforms, and also some different architecture in some cases. So that means we're having like a minimum of four per Python version. So this doesn't sound so bad. Maybe it's still for you, but it's not really an optimal scenario. Because first of all, we needed to ask for an exception, right? So these are a couple of slides with a few technical details that I just want to share there. I will try to go fast, so don't worry about it. So first of all, the things that we did is that most of the macros that we were using were implementing as a functions. We needed the buffer protocol, which was added in 3.11. So we implemented our own, some flags for debugging and noting when modules are loading, and other functions there that you can see there are some special case. Because you want to have the source code of your project with a function that, of course, is valid when you are using limited API, when you're not using limited API, when you're using Python 3, and when you're using Python 2. Remember, this was many years ago. So just for your information, in case you're not familiarized with functions and macros, for example, the simplest one to get an item for a list, and this is the macro for it. So you see, we leave aside all the protection or checking the parameters, arguments, whatever. So I guess that maybe you would say, oh, yeah, but that's really convenient. So let's only use macros, but that's really, really bad, because then your code will explode with any change, right? So then we did other low-level things. I don't know if someone has the light of experience of working with PyType but yeah, we needed to change some slots inside, adapt some stuff there, so really boring things. And then we were just creating our own hip types, which is a lot of, like, you know, work, whatever, whatever, so this is the part of this technical, but anything. So we couldn't use the whole limited API for this, and the problematic was with this, because, as you know, many Linux distributions do not use setup UI for packaging the things, right? So we needed to use CMake and other things. So we ended up with a source code that is filled with PyLimited API if dev everywhere. So of course, the team was doing an amazing effort, and it's really thankful, at least for, this is one of our external developers that did a lot of the heavy lifting things, and if you're interested in this topic that might be a little bit boring, but necessary, you can find in there, in this URL. We also then experienced a little bit who he's as, maintain a package that has PyPyWheels. I'm sorry, it's difficult. Yeah, but that's another side. Many things that conflicts and things that don't work well when you try to have everything in the same place. So is this still an issue? One of the things that I do in my spare time is I'm one of the moderators of PyPy, so I handle if at some point you request for an increase, maybe you will see my face there, and then I started to notice a pattern. So people were showing me, oh, yeah, we have this following release, each release is two gigabytes, and sometimes we release something. Some other people, oh, yeah, whatever, whatever, so 900 megabytes, 400 megabytes, and so on and so on and so forth, and it's really a never-ending story. A lot of project out there, now with a whole boom of data science and machine learning, we have these huge wheels, so they are providing one wheel per Python version, so of course storage is not infinite, but it's still an issue, so yeah, many projects, I just put there all the things that I could find quickly. So that's our project. The whole magic that you can do for this to compile these kind of things is that for the whole infrastructure that we had before, the PyProject file, first of all, this is a simple one, and then you have a simple setup py, and on the top, I think on my file I had the limited API definition as well, but this is not enough to create an ABI tree wheel. So for that, it's a little thing to have. It's these little things here. So is someone still using only setup py here and not pyproject.toml? No? I'm glad to hear. It's a little bit wonky, so you still need to use this file, at least we defined it. Maybe you can specify here, limited API, that doesn't change the tag. So I'm sorry, but that's the problem. And then when you do that, of course, we go back to our beautiful tool and use. And then you can see there that then we have the ABI tree wheel, right? So, yeah. This is what the limited API guarantees you, of course, that you will have a package that will be compatible with many Python versions. So there in the example is 3.7. So that means that I can install for 3.7 onwards all the packages that I have there. So that's one of the caveat things. So is anyone here using already packages, ABI 3 packages for the things that they project there? I see one hand. Only one hand? Oh, my God. Okay. I hope that you can take this with you. So the problem with this thing is that you will say, okay, cool. So after I do that, it's everything validated there. What do you think? Can you say yes or no? So it is not validated. So you can still manually modify the levels of your wheel, put ABI 3 there, whatever, whatever. And it's still an invalid thing, but there are no internal mechanism that you can have to start this kind of thing. So, luckily for us, maintainers, there are a couple of packages around. There's a first one is this audit wheel that you can maybe you heard about it, just mainly to see if you're complaining with all these PEPA 600 and stuff. But there's also the ABI 3 audit that is this really cool tool that I found like doing some research here if someone is developing this thing here and no, please let's talk later. And you can see that it really reports some stuff there. You can see there that, for example, this is a binding generator of Pi Qt, which is another project, it's not Pi side, and they are not really ABI 3 compliant because they have a symbol that is not part of the limited API. So that's really a problem when I'm saying that it's not being done. So then you say, okay, that's too much work. Can I rely on a binding generator here? Who here uses a binding generator? Okay, a few hands. So if you're using Pi bind 11, for example, you heard about it, you don't have support in Pi by 11 for generating wheels with ABI 3. I think that CFFI has one, but anyway, internally we're using Shibokin that we do have. Well, it's simple, but we pass a flag and it works, but it's complicated in that, but you can still generate it. You need to make it work as well, but we promise you will be valid. First, you can, of course, use Pi by 3 and that also generate wheels that are compliant with ABI 3. So okay, everything is good, right? Everyone loves the stable API and limited API. I don't see the following person in the crowd, so I think that I will not be ashamed to show the comments. So then I read this one. And then I thought, it's really important that what we are using currently for providing are easy to lie for us. It's really painful for the people that is developing the internals of Python. So when I saw this post, of course, I could share a little bit of the sentiment here with Marc that, of course, changing things internally will break ABI compatibility forever. So I invite you to look for that. There is a lot of insight inside this post, a lot of people complaining and saying maybe you're saying, we can solve this in Python 4, but what happened with Python 4 and the many other things is really problematic, right? Because so far, most of the changes that you have seen before in the talks, they really require that you will start modifying some stuff and this can be really, really, really tricky. So, of course, it's kind of like a love and hate relationship for this. Does anyone have read this, by the way? Yeah, you know for sure. Okay, so yeah, because it's usually like at the moment, I was saying that it should be like this, right? I mean, the internal C-Python core developers like developing everything, ooh, running around and then improving and getting more membership, but it's usually like this because we are really, it's a burden on their side, but we need to somehow pick a side, right? So are we doomed with all these things that I am telling you now that, of course, you will not be motivated to use it? And I don't want to trick your mind, but maybe not, we are. And HPY, I just saw a talk before, might be the answer. If you don't know it or you didn't watch the talk, maybe you can watch the recording afterwards, but if you go at least to the website, you can see there that one of the goals there is to beat this. To have some kind of universal binaries that, of course, we will forget about it and live happily ever after. So, final remarks. Well, I used less time than I was expecting. Final remarks, as a maintainer at least so far, is that I would say that still, this is an open discussion. I saw the other comment that I saw and discussed Python.org, and they still were in 2022 saying something like, yeah, we should sit together, let's go to a spring, let's discuss the save API and everything and everything. And, yeah, I think that, still, if you are maintaining a project, I will say that please adapt the limited API. I think it is better for in that regard. You will find sometimes symbols after you generate your wills and your users start to use them, and you will find symbols or you will find this reference, whatever, because the limited API breaks between versions, so it is really interesting for you to see that and report and help back. And, yeah, so now the question that I am open to you, and if you want to ask me now a question or something or maybe we can discuss later, should we back this promise overall? So, yeah, thank you very much for your time, and that's it. Thank you, Christian. We will see a talk that also talks about the problems that we still have there. We have time for questions. There are two microphones here in the room and you can also ask your questions on Discord, so please come up to the microphone or if you don't want or you are a remote participant you can also ask on Discord. H-the-bum. No, but I still can hear. Okay, we can try. Does this one work? Yes. Great. Thank you for a great talk. I think this is the topic that deserves more attention than it gets. So, awesome. And the question, when you migrated to UniversalABI and you had to migrate to heap types, did you also consider migrating to module state or did you keep the global variables for your types around? We kept the global variables for some time, but there might be some changes in the future that we got, but yeah, we kept it. Thank you. You're welcome. And if you are too shy, don't worry, we can catch up later. And if you have any questions, please approach me and let's discuss about this uncomfortable and boring but necessary topic. Yes, this is the right place for a conference. Thank you very much. Please give another round of applause for Christian.


All right, so I gotta tell ya, it's been kind of a stressful day. I can just say remodeling your house where you're living in it is not a good idea. All right, so it was nice on a day like today to get this beautiful package. And how great is this decorated? You know I'm gonna have to save this. I don't know, I have no idea what this is. It's something from my dear friend Lisa Swank and it's wholly and completely unexpected. I don't know what's in it, but we're gonna open it here on camera, so let's find out. And my whole room is like a disaster, just, you know. Okay, so let's see if we can get this open. It's not causing hopefully too much damage. Wow, it is full and I see some goodness poking out. I'm gonna pull everything out. Okay, I just love that. And it is, I wanna cover up Lisa's address, but I'll show you. It's painted on both sides, so cool. All right, I don't know what all this stuff is. This is, goodness, is there a note in here somewhere? Well, there's an envelope, let's see. It says rack on it and I love this. So this here, I love that. I will say I'm prejudiced. That's one of my stencils. You can buy it at my Etsy store, the link's below. And she's got the other, one of my other stencils. That's great, Lisa, I love that. All right, let's see what this is. Maybe there's a note in here. There's a bunch of really cool things here. Lost my scissors, hold on. That's so nice. So I challenged the design team members to send out some random acts of kindness and she sent me some of what she sent everybody else. Isn't that nice? In this, at least the envelope part here. And I love what she did. Look at these fabulous painted and stamped papers. Can you guys see the gold images on there? There you go, right there. Those are some of my rubber stamps. Here's another one. See, there you go. These are great. One more. There we go. Love them. There's some other stuff down here. This is just what's in the envelope. There's a bunch of other stuff. Look at the animals, aren't they cute? And I love that, Lisa, that you did them on the thin paper. I love to use that for collaging. I also love this little tag that you made though. That is cute. Oh, some Shrinky Dink. Oh, so cool. So she made a tag, which I love. And here's, and then it looks like she sent me some Shrinky Dinks and they're not shrunk yet so I can shrink them. And she sent me the directions, yay. And then there's an envelope with, ooh, some finished charms. These are all done and shrunk already. Here's a paperclip, that is super cute. I have a particular notebook that's actually right here that I think he has to go on. Ooh, I almost lost that one. It's one of my little images, it's a little bunny. Here is my hand, that's cute. How she put Boo on there and turned him into a ghost. That's cute. And then here is one of my tag images with some stamps on it and she shrunk it. That's super cute, Lisa. I love those. Okay, and then she sent me a bunch of other stuff though too. This is for knitting, crocheting and hand weaving. Ruban de art, rayon taffeta, acetate, cut, fuse edge, some kind of ribbon. It's like 100 yards of like navy ribbon in the vintage box, so cool. There is this thing. It looks like a wheel. I'm not sure what it is. Okay, it looks like this.  But Lisa knows me very well, because oh my God, look at the bottom of that and how cool of a stamp pattern or jelly plate print is that gonna make. Right? Love that, Lisa, thank you. There is two of these. I don't know what are these? Oh, they're wine bags. And they have the target bullseye on them. So I'm gonna guess that's where they're from. And I, of course, probably won't use them as a wine bag, but it's made out of really cool burlap that has red and natural colored burlap. Plus these bamboo handles are kind of cool. She sent me two of those. I think those are gonna have to go up in the salvage bin, because those are neat. And then there's two bags of sewing notions. Vintage, some vintage notions. Look at these buttons. Those are cool. Covered, fabric-covered button kit. How many of us who sew remember those? Remember trying to get the fabric to cover them perfectly and being frustrated. Here's another one. It'd be cool to use these, though, to make some fabric-covered buttons to close journals or something. Some empty wooden spools. Always good to have. Oh, these are cool. So some vintage fancy plastic pink beads. Some vintage sequin. And I know these are truly vintage, not because of the age of the label, because of the price. Hello, do you guys see that? How much did that cost? That was the sale price, 31 cents. That cracks me up. And Sprouse REITs. Yeah, we used to have one of those. Fun fact, walking is just for my house when we first bought the house. We still had one of those stores, and then it closed shortly after we bought our house. I used to like to shop there. Some snaps and hook and eye on the vintage card still, which is very cool. Back in here. Then there's one more bag. Lisa, you sent me so much. I love it, but wow. Oh, this is so cool. Red rickrack. And then some really fun seam binding. But look at this beautiful vintage burgundy color. I love the color. Some white bias tape. White rickrack. Little of a rickrack than the other one. So some seam binding lace, like hem lace. We always use this when I was sewing to do the hems on the insides of skirts and things. Oh, that's pretty funny. Some vintage pattern pages out of a book. I wonder if this is out of, I don't know what magazine this is out of. Vintage, it looks like vintage sewing pattern pages out of some sort of poly crafts. It says Robert's Bell Air Variety, Napa California. But they're like vintage ads, like 1970s. Very cool. Those are cool. Some vintage coasters. How much do you love the little poodle? Like seriously. And then here are some vintage napkins. Look at that. That's so cute. Blue chip, oh my God, blue chip stamps. I remember blue chip stamps. And these are full books. Wow, full books of blue chip stamps. There's three of them. Three of these little books. And then there's three of these big books. And they're also, they're not full, but they have lots of blue chip stamps in them. I remember saving these up with my mom to try to get us a sewing machine for the family. Wow. Very cool, Lisa. I love all the stuff. Thank you so much. I love it when I get surprise packages in the mail. It's fabulous. And I love sharing as much as getting. And I do have a couple of small racks on my desk that I need to send out. I've just been waiting for some more bits and pieces to make and or get to put in them. So, but they will be going out shortly.  And I've filmed a few things since work started. At least one of them is gonna have to have a voice over. And I'm gonna have to film a couple other things to go with it. So bear with me. I will be back soon for live broadcasts and all of that other stuff. I hope you're all having a great day and a great experience with your art. Don't be afraid if you're part of my Facebook groups to, and you feel so inclined to go to the Random Active Kindness List or Happy Mail List that's in all of the Facebook groups I'm associated with.  It doesn't have to be a big envelope. It could be something as small as a little card like this with some fun tags and bits and pieces in it. Just send them something that'll make them smile. Believe me, it's well worth it. If you aren't a member of my Facebook groups, but you'd like to be, all the links are in the description below. So go check them out. There are questions we request that you answer. If you do request to join, that we would appreciate you answering. And it makes you getting into the group a little easier. So I do advise you to answer the questions. If you want to shop and my Etsy store to support my channel, maybe you want a set of my rubber stamps or one of my stencils. They're all over at Etsy. So go check it out. The link for that's in there in the description below too. My Happy Mail address, my email address, all that stuff's in the description. So check it out. I'm gonna link Lisa's YouTube channel. Check her out. She's a sweetheart, lover dearly. She does a lot of admin work for me on all the groups and she's a fabulous member of the design team. So we do very much appreciate her. That's it for right now. I love you all very much. Thanks for bearing with me. And like I said, hopefully we'll be back soon with a live broadcast, which means they're done with my bathroom. I can't wait. All right, that's it everybody. Don't forget the most important thing. Go out and have a great day. Do something nice for yourself because you deserve it and I'll see you later. Bye guys.


Hi everybody, Joe for Jaspy's casebreaks.com doing the random number block randomizer that'll unlock 2021 National Treasures football first off the line pick your team number six. So we pulled these teams out of that pick your team six and we turned into a serial number break. All the instructions are right here. Zero gets any and all redemptions of course all that good stuff. Big thanks to this group for making it happen. Thanks to the people who bought their spots straight up and congrats again to the winners of those spots in the filler. There are the numbers there. Let's go. Let's roll it. Let's randomize it one and a six seven times each one, two, three, four, five, six and a one seventh and final time. Got Joshua down to Michael one and a six seven times for the numbers one, two, three, four, five, six and a one seventh and final time nine down to one. All right Joshua with nine Han with five Josh with six and four Han with eight Josh with seven Han with zero. So Han you'll get any and all redemptions for that group of teams in that tab down there Cincinnati Jets etc etc etc or Chicago, New York, Cincinnati Houston etc etc including one of one redemptions as the instructions say Michael you'll still get any live one of ones if any. Josh with two, Andrew with three once again Michael best with one. So let's sort by number and we'll see you in the next video for the break itself.


Highlander cat vs. Foldex cat. What are the differences between these two cat breeds? The Highlander is a mixed breed cat A-cross between the desert lengths and jungle curl breeds. Gentle, social, and intelligent. These felines inherited some of the best traits from their parents. This breed Nix makes for very people friendly cats and great family pets. You may find these cats in shelters and breed specific rescues, so remember to always adopt. Don't shop if you're looking to add one of these kitties to your home. The Highlander was originally developed by a breeder named Joe Childers back in 1993. The intention was to produce a domestic breed and they were able to breed a dog. The breed was originally developed by a breeder named Joe Childers back in 1993. The intention was to produce a domestic breed, but it was not available in the Highlander was originally developed by a breeder named Joe Childers back in 1993. The intention was to produce a domestic feline that combined a striking wild cat look with social and playful personality traits. Despite originally having the word links in their name, the mixed breed doesn't actually contain any wild cat genes in their makeup. The Highlander was officially acknowledged by the International Cat Association, TICA, in the year 2008. These days, you may find Highlanders in shelters or in the care of rescue groups. So make sure to consider adoption if you decide that this is the mixed breed for you. The history of the full dex begins in 1992 in Quebec, Canada when they first started popping up on the scene. The breed was a big draw when they began appearing in cat shows due to their super cute looks. A lot of the subsequent development of the full dex is credited to a breeder named Jean Barrette. The full dex was officially granted full championship status by the Canadian Cat Association in 2010. These days, you can find full dexes in shelters or in the care of rescue groups. So make sure to consider adoption if you decide that this is the breed for you. The Highlander is a mixed breed of cat that you'll see in a wide range of colors and patterns. It's common to see them with solid coat colors or with tabby or links point markings. When it comes to grooming, most Highlanders are fairly low maintenance, with their short hair requiring only a quick weekly brushing. This will help lessen the likelihood of hairballs and mats forming. Although it should be noted that some Highlanders are long haired felines in which case you'll need to aim for closer to daily brushing sessions. In terms of climate, the Highlander is generally an adaptable breed of cat, although you should always make sure that there's enough shade and fresh water available during the hotter months. The full dex is a breed of cat that you'll see in almost every cat color available and in patterns that include tabby and calico. When it comes to grooming, this will totally depend on whether your full dex is a long or short haired kitty. If you have a short haired full dex, brushing their coat once a week should suffice. But a long haired full dex will require more frequent brushing to help lessen the chances of hairballs and mats forming. Aim for every other day although the breed will happily take to daily brushing sessions. In terms of climate, the full dex is generally an adaptable breed of cat. Although you should always make sure that there's enough shade and fresh water available during the hotter months. Hello. This video is sponsored by Beemix Pets. Are you looking for high quality cat collars at an affordable cost? Check out, BeemixPets.com. Use coupon code KittenLife, to get 20% off. Highlander cats are athletic and energetic felines. You'll need to be able to provide a large enough living space for them to run around in, along with adding interactive toys to the environment. The Highlander is a very intelligent cat on many cases, they can be taught to play fetch and pull off tricks. Balancing out the Highlander's upbeat side, these cats are also very social and loving. They enjoy being around humans and interacting with them, and despite the big cat angle to their heritage, they're affectionate towards the people in their life. The cat also does well around children, acting as a new play friend. Unlike most other cat breeds, a Highlander also likes water, so don't be surprised to see them playing with water in the bathtub or from a running tap. When it comes to the full dex's personality, you'll struggle to come across a more loving and people-friendly cat breed. These are felines who absolutely love cuddle and snuggle sessions with the humans in their life. At times, you might become convinced you're actually hanging out with a teddy bear as you lounge together on the couch or the bed. It follows that the full dex is a cat who adores being petted, which also means they bring a soothing presence to the household. Along with being adorable, the full dex has a strong inquisitive streak, so make sure to provide smart interactive toys to keep the breed mentally stimulated, along with suitable cat furniture so they can explore and play at their own pace. These sweet felines are also exceptionally approachable, making them a great fit for big families or homes where there's a large amount of people always coming and going. As with all cats, it's important to keep up your Highlander's regular veterinary checkups to detect any health concerns early. Your vet can help you develop a care routine that will keep your cat healthy. Beyond scheduling yearly wellness visits with your vet, you'll want to add a scratching post to your Highlander's living environment. This can help promote healthy scratching and keep the cat's nails in good condition. The Highlander's ear should also be examined regularly for signs of dirt building up or possible infection. It's also advisable to talk with your vet about starting a regular teeth brushing regimen that will suit your Highlander. Your vet can advise you about specific brands and techniques. It's important to underline that the Highlander mixed breed needs a higher than usual amount of exercise, so make sure to add at least one cat tree or piece of interactive furniture to your home before adopting one. As with all cats, it's important to keep up your full dex's regular veterinary checkups to detect any health concerns early. Your vet can help you develop a care routine that will keep your cat healthy. Beyond scheduling yearly wellness visits with your vet, you'll want to add a scratching post to your full dex's living environment. This can help promote healthy scratching and keep the cat's nails in good condition. The full dex's ear should also be examined regularly for signs of dirt building up or possible infection. It's advisable to talk with your vet about starting a regular teeth brushing regimen that will suit your full dex. Your vet can advise you about specific brands and techniques. While the full dex has a sweet and laid-back personality, it's also important to make sure that there is enough space for the breed to play and exercise, so consider adding a cat tree to your home. The Highlander is a super friendly and outgoing feline who does very well with young children. Just be sure that early socialization takes place and boundaries are properly set on both sides, and supervise early interactions between kids and cats. When it comes to other household pets, the Highlander fares well with many domestic animals, including dogs. Always supervise early interactions between the new cat and existing pets. Ultimately, early socialization really pays off with this mixed breed. Make sure to reward your Highlander for good behavior when you bring them home to your family. The full dex is a friendly feline who does very well with young children. Just be sure that early socialization takes place and boundaries are properly set on both sides, and supervise early interactions between kids and cats. When it comes to other household pets, the full dex fares well with many domestic animals, including dogs. Always supervise early interactions between the new cat and existing pets. Ultimately, early socialization really pays off with this breed. Make sure to reward your full dex for good behavior when you bring them home to your family. If you enjoyed this video, kindly press the like button. Also don't forget to subscribe with notifications on, so that you don't miss out on videos like this. Thank you for watching.


What would your life look like today? What would your mind look like today? What would your body look like today? If you never gave up on that thing that you gave up on 10 years ago, your life would be vastly different. But the problem is you gave up on it. Today, we're going to be talking about how to harness the power of momentum in your life. And I think that momentum is one of the most underrated things. Like, I don't hear a whole lot of people talk about momentum in their life or talk about how success is so much momentum and so much of harnessing this feeling of momentum. And I think that it's a big piece of life. I think that's a big piece of success. And that's what we're going to dive into today. And, you know, one of the things that I see with a lot of people, I've coached thousands and thousands of people, is that most people get really excited to start something, and they're like, oh my gosh, I'm going to start this new business. And they get excited and they make like a business plan and they get some samples and they make an idea of what they're going to do and they start doing it and they don't get the results that they want to right away and start to fall off because of it. And then they're like, maybe that was just a sign that this is not the path that I'm supposed to go. Maybe this is just a sign that this is not right for me. And what happens is they give up before they start getting the momentum on their side. They give up before they get the momentum that starts to show them that they're on the right path. And the way that I like to think of it is like pushing a car.  It was an old Nissan Sentra. It was a complete POS and it would break down and I'd have to push it by myself sometimes. And sometimes somebody was nice enough on the side of the road to help me push my car. The struggles of being a college kid back in the day for me. That's what it was. It was a side note. It had no air conditioning and I lived in Florida and it was the worst thing to have no air conditioning in Florida, especially when it rained and then my body heat would heat up the inside of it and it would get all foggy on the inside and I had no way to defrost the windows. So I've I've had those days before I remember what those are like. And when you start pushing a car, if you've ever pushed a car like the physical pushing of a car from no movement at all to getting it to move a little bit is the hardest part of it where you're pushing it and you're like, I don't even know if I'm strong enough and it moves a little bit. It moves a little bit. It moves a little bit. The starting of a business or the starting of starting to lose weight and going on your journey is like coming from no momentum and starting to get it pushing. And I think most people give up before the movement actually starts. They're like, this is hard. This is hard. This is hard. I'm going to give up. This must mean I'm not supposed to.  It's hard. It's hard. I'm going to give up. But if you've ever pushed the car, it takes a little while for the wheels to start moving. It takes a lot for the wheels to start spinning. But what happens is once the car gets going, it gets so much easier. It's so much harder to go from 0 to 1 mile an hour than it is to go from like 1 to 2 and then from 2 to 3 becomes easier. And it takes a while to get it moving. But once it gets moving, it becomes so much easier to keep it moving.  And that's how a lot of people's success really happens is that there's a whole lot of struggle in the beginning. There's resistance. There's figuring it out. They're seeing what works. They're seeing what doesn't work and it's pushing and pushing.  It doesn't feel like it's moving. At that point in time, you don't give up. You got to keep pushing through and eventually whatever it is you're working on will start to harness. You'll be able to start to harness a little bit of momentum on your side and it becomes easier to get it going. It becomes easier to get going. It becomes easier to get it going. You know, when I look back at my business, the first few years was a struggle. Like it was years. It wasn't like months. It was years to figure out what works. What doesn't work?  It's so much easier now. There's so much more momentum on its side, but it took time to get it there. So that's how life is the same way as if you're just pushing a car. And so next time you decide to jump into doing something new, something that you haven't done before, something that's brand new to you realize it's like pushing that car. It's going to take time to get that thing moving. But once you get that moving, the important thing is to not stop because a lot of times what will happen as well is we do get the momentum on our side and then we self sabotage and we stop.  And then you got to do it over again. And then it's you got to do it over again. You got to do it over again. Once you feel that momentum, you have to keep going. And another example I always give is like, if we're at the top of a hill and I have a 15 pound bowling ball and I let it down and you stop it five feet after it's after it starts, it's very easy to stop five feet after it starts because it hasn't gotten all the momentum. But if you're at the bottom of that hill and you try to stop it with your hands, you're going to break a hand because it's got so much momentum on its side and that's what we're trying to get into our life. And so if you look at the things that I hear a lot of people complaining about in life, like working out or fitness or losing weight, maybe you haven't been on a fitness journey for a long time. Maybe you've never been on a fitness journey and you're now just waking up to, yeah, I don't like the way my body looks. I don't like the way I feel. I don't like the soreness that I have. I don't like, you know, the lack of energy. You're going to have to harness some momentum in the first few weeks.  And it's not going to be fun and it's going to be like trying to push a car that's starting from zero. It's going to be hard. You're going to have to drag yourself like getting the car moving, but it'll take a lot of will and showing up and will and showing up and just going, I'm not going to give up. I'm not going to give up. But then what's really interesting is after about a month or so, going from nothing to something, the first month is the hardest. After a month, it starts to feel more normal and it starts to feel more normal and it's not as hard to get yourself to the gym.  You don't need all the sugar stuff. You don't need all the salty stuff. Healthier stuff starts to taste better than it did a month ago and you start to have a little bit of momentum on your side. It starts to feel a little bit more natural. Now at that point, you now have momentum on your side. Things are moving in the right direction. The worst thing that you can do is self sabotage and stop because that car eventually is going to come to a stop and then you're going to have to go through the exact same process again. So you have to become very aware to number one and when you're in the very beginning of stages of anything is reminding yourself that you're trying to get the momentum on your side. You're trying to get the car moving and once it gets moving, you have to remind yourself not to let your foot off the gas to continue to keep going to continue to keep pushing to continue to push harder so that the momentum becomes easier and easier for you. And then what happens is after a while, those of you guys that have have a very consistent routine of working out six months, a year, two years, three years, it becomes unnatural to not go to the gym. Like going to the gym, your body actually starts to crave the working out. Your body actually starts to crave the healthier food because it fuels yourself better. Your body actually starts to crave the things that you want. But in the beginning, you don't crave it. But when your body starts to crave it, that is the momentum on your side moving you in the right direction and that's what we're all trying to get to.  It feels unnatural not to work out, but it's not natural to feel that way. It's just you've been able to get momentum on your side. I remember when I was really, really into working out.  But about seven years ago, I remember I was like, I'm going to work out four times a week no matter what. And I started doing, I started falling in love with it. And I was like, you know what? I'm going to go up one more day. I'm going to do five days a week because I love it so much. And body started getting used to these endorphins and getting used to the feeling. I was like, you know what? I could probably do six days a week. I got to six days a week and I was like, I'm going to do six days a week and one rest day. And then my six days a week turn into six days a week. And I went, well, what if I just do like an active rest day and I still go to the gym, but I just don't lift as heavy. And so four days a week went to five went to six went to seven simply because it just felt more natural to go. And I didn't like the way that I felt when I wasn't at the gym because I just had so much momentum on my side. And the only thing that took the momentum away is I tore, you know, old injuries in my life catching up from basketball and football and baseball as younger. I ended up having pain in my hips and shoulders and found out that there were some old sports injuries that kind of as I got older they kind of crept up a little bit. But that was the slowing down of my momentum for me. And then after I was able to heal those injuries it took a lot to get me back into the gym and have it start to feel natural again. This can also be stuff like waking up early.  I want to have a morning routine but waking up is hard at first. Like if you're like, you know what? I'm going to wake up at 5 a.m. Waking up at 5 a.m. The first morning is like what? It's so dark outside. It's cold. I feel like I just want to chug coffee right now or go back to bed. And it's just like the first time you do it is just like pushing that car.  I don't like this. And then you get to the end of the day and you're like, now I'm really tired at the end of the day. And you know, middle of the day I'm really tired and your body starting to get adjusted to it. It takes time to develop that morning waking up early routine that you want. And then you do it a little bit more.  And then you're like your body starts to adjust itself and your body starts to go, yeah, we're going to go to bed earlier.  Now it's shutting off at 10. Now it's shutting off at 9. Your body will start to catch up and now you have the momentum on your side. Now you have the momentum to keep you going. And then what happens? If you've been doing a morning routine for long enough, you start to wake up before your alarm goes off because it just becomes so much easier. Starting a business is the exact same way. When you're in the beginning stages of a business, it's hard. It's figuring stuff out. It's pushing. It's there's a lot of stuff that doesn't work and you're finding out what doesn't work and it feels like maybe I'm on the wrong path. Maybe this is what I'm supposed to do. Maybe I'm supposed to do something different. Maybe I'm in the wrong market. Maybe I'm not passionate about this and you start thinking of all the reasons why this isn't the right thing. But what happens is and the most important thing for all of these things most important things for all of these things is to have the destination in mind. Like a successful business, for instance, you know, get very clear on what that means for you. Is it you want to make $40,000 a year or $100,000 a year? Do you want to make a million dollars a year? Like what does what does that destination look like that you're working towards? And you've got to keep that in your mind. If waking up early is what you want. What does that destination look like? My destination looks like waking up at 5 o'clock in the morning every single morning, spending an hour to myself that could be working out, working out journaling. It could be reading. It could be whatever it is that you want to do, meditating, all of that. And you develop it. You look at what the destination that you want is. Same thing where if you're trying to work to get the body that you want, what's important is that you have the destination in mind. And as you're doing it, there's going to the route that you thought you were going to go to get to that destination is going to change over and over and over and over again.  Oh, dead end. Oh, dead end. Oh, dead end. But it doesn't matter that you hit dead ends because you're now realizing what the place that you don't want to go and the place that you don't want to be. And you start to realize what doesn't work and through finding out what doesn't work, you start to figure out what works. So starting a new business is the exact same way. It's like, all right, I'm going to start doing Facebook ads to sell my product. Well, you're going to find a lot of Facebook ads that do not work for you and it's going to feel like wasted money. But through feeling like you're wasting money, you're also figuring out what doesn't work, which means you'll never do it again because it doesn't work. Why would you keep doing the same thing that doesn't work? And you start to take other paths and other routes and eventually you find something that clicks. And when it clicks, that's the thing that brings in the money for you. And so it's about realizing exactly what it is that you want because every single thing takes time and there's always a bit of a struggle in the beginning, the same way that it's a struggle to push the car. Nothing new is easy at the beginning that I've ever seen, whether it's waking up early, whether it's working out, whether it's building a business. It's not really that easy, but it becomes so much easier as you do it over and over and over again. But the important thing is to look at the destination, have the destination mind and say, I don't care what it takes. I'm going to get there eventually. No matter how many dead ends I find, I'm going to get there eventually and you've start to find out what works and that finding out of what works is a little bit of the wheel starting to finally move because when you're first pushing the car ain't moving, but then it starts to move a little bit and you're like, oh man, I'm starting to see a little bit of a light at the end of the tunnel. It starts to move a little bit. So if you're sitting there and you're listening to me and your life has been stagnant for a while, it's going to take some time. It's going to take some effort. It's going to take some intention and it's going to take a whole hell of a lot of work to get you out of stagnation into starting to get momentum on your side. But the super, super important thing is to make sure that you realize when you get that momentum on your side, how can you not stop? How can you just keep going? Because once you have action, you've heard me say it over and over again. Action creates more action. Inaction creates more inaction. So how can you start to get that moving and be very aware of what I like to call the eye-deservates? The eye-deservates are when you start. It's when you get the momentum on your side and then you get a case of the eye-deservates and then you self-sabotage. And so a good example of losing weight, for instance, right? You might be like, you know what? I'm on a weight loss journey. I want to lose 30 pounds. And you lose your first five, 10 pounds. I say you lose 10 pounds, right? And you're like, man, I'm doing good. I'm doing good. You're eating healthy. You're showing up to the gym. You're doing what needs to be done. Then what happens after those 10 pounds on the journey to 30, you get a case of the eye-deservates and you stop doing the things that were bringing you success. You ever done this before? You stopped doing those things. So you're like, I've lost 10 pounds. You know what? I deserve to have some ice cream tonight. I've been working hard. I deserve it. I deserve to have a glass of extra glass of wine tonight. I deserve to have, I was supposed to have a pizza, but I've been working, I've lost 10 pounds. I deserve to have some pizza instead of that salad that I was planning. And you get, I deserve it. I deserve it. I deserve it. I deserve it. And I deserve it is one of the most common forms of self-sabotage.  You realize all those 10 pounds that you worked so hard to get off, they've all come back. And you have stopped the momentum. You have self-sabotage.  I was supposed to work out today, but I'll, you know, I'll go tomorrow. I'll go tomorrow. No big deal. You know, I've been working hard. I've been, I've lost 10 pounds. I deserve to take a day off because I've been working hard. I'm a little bit sore, right? And you get a case of the eye-deservates and it says many, many, many, many, many self-sabotages. And then they all add up and you're like, six months later, I'm back to the same weight that I was before. And that's the case of the eye-deservates that people will get. People get it with weight loss. They get it with like a, they have a great week of sales.  I had such good sales week last week. I mean, I made more than they've ever made than that last week. Yeah, I'm gonna kind of take it easy this week because I deserve it.  So you've got to be very self-aware of the eye-deservates and how that leads to self-sabotage because that is the power of momentum being slowed down by your self-sabotage. And so you've got to be very aware of that.   Think about that and bring that close to your mind. What would your life look like if you just decided back then to never give up? What would your life look like today? What would your mind look like today? What would your body look like today if you never gave up on that thing that you gave up on 10 years ago? Your life would be vastly different but the problem is you gave up on it. Now, let me take you to present moment. What if this thing that you want to do, you just decided that you're never going to give up on it? You're not going to get a case of the eye-deservates and you're not going to stop until you're at the destination that you want. That is the mindset that you have to have to harness the power of momentum. And when you do that, you'll look back and you'll realize your life is in a completely different place years from now. Hey, thanks so much for watching this video. If you want to learn even more about Master Your Mind, click right here and watch this video as well. If you were already the person that could create the success that you want, you would have already had that success. So what we're getting down to is that it's you that needs to change.


Hello, my name is Peter Hall. I am a PhD student at New York University, and in this video abstract for my joint work with Daniel Aepan, Chloe Cachet, Benjamin Fuller, and Feng Hao Lu, on our work Non-Maluable Digital Lockers and Robust Physi extractors in the Plain Model. Now, we're going to break down that title term by term, first starting with point obfuscation and then as an extension digital lockers. Point obfuscation is essentially obfuscation of the underlying point program that you see on your screen, which is kind of instantiated with some point x, and then should output one if and only if the testing point x prime is exactly equal to x. In this work, we're considering and constructing VBB obfuscation, and specifically we're trying to do this in the Plain Model. We also want non-malleability, which as we discussed in the full talk is actually pretty subtle to define, but abstractly means that given an obfuscation of a point x is hard to get an obfuscation of a point x prime that is some way related to that point x. Additionally, we're interested in digital lockers, also known as multi-bit point function obfuscations, which essentially, instead of outputting one or zero, output this multi-bit string or output perp. There's been much effort in recent years on Plain Model non-malleable point obfuscation. This line of work was initiated by Komar Gadski and Yoga. However, none of these works are actually sufficient for constructing entirely non-malleable digital lockers, point function obfuscations again with multi-bit output. However, we do use assumptions that are rooted in Bartosek-Mann-Zandri's crypto 2019 paper, which they introduce and justify there. Digital lockers can be constructed from composable point obfuscations that are useful in many settings. In this work, we're considering one application of them, specifically robust fuzzy extractors. Fuzzy extractors are initialized with an enrollment string from a kind of noisy source, and they should return some stable random value when queried on other values that are close to this original enrollment. The robustness guarantee, in addition, shows that from being given a fuzzy extractor, one cannot tamper that fuzzy extractor to a new one that outputs a different random string instead of the original one that was produced at enrollment. Prior works have constructed robust fuzzy extractors in a variety of ways, as you can see from this table here, but there's actually been no plain model constructions that can handle input sources with very low entropy, in this case less than half their length. Our contributions are as follows. We define a new object called non-malleable point function obfuscations with associated data. Intuitively, they try to leverage the non-malleability of the point obfuscation to attest to the correctness of a CRS-like string, which we call the associated data. We construct this above, and then we additionally achieve composability with some other obfuscation primitives, in particular, regular point function obfuscation. We show how the associated data is sufficient to use alongside an appropriate non-interactive zero-knowledge system to construct non-malleable digital lockers. And finally, we use syndrome decoding with all of the above to achieve more powerful robust fuzzy extractors in the plain model, specifically that are able to remain secure over low entropy inputs. This kind of represents a little diagram of the roadmap, and you're welcome to come to the full talk if you want to see how we do this along the way. Finally, just to once again bring it back around to robust fuzzy extractors, one application of these non-malleable point function obfuscations with associated data is we use them to achieve two constructions of plain model robust fuzzy extractors that remain secure when enrolled from sources with entropy less than half their length. Thank you, and I hope to see you in the full talk.