Do you struggle to make sure your code is always correct before checking IT in? What about your team members code? That one person who never wants to run the winter tar to delimit on the conflicts and spirits get changes you need, get recommit hooks.
Or we're lucky to have steph anie mullen on the show today who has done a bunch of riding and teaching of gettysburg. This is talk about to me, about four hundred and eighty two, recorded october twenty fourth, two thousand and twenty four. Are you ready for your host?
You're listening to Michael Kennedy on talk python to me, life for important organ. And this segment was made with python.
What can you talk python omy a weekly pocket on pizon. This is your host, Michael Kennedy. Follow me on master on where I am at m Kennedy and follow the podcast using at talk python. Both accounts over at Foster on dot org and keep up with the show and listening over nine years of episodes at talk python D F M.
If you want to be part of our life episode des, you can find the live streams over on youtube, subscribed to our youtube channel over at talk athon that film, slash youtube and get notified about upcoming shows this episode is is brought by century. Don't let those errors go and notice. Use century like we do here to talk python.
Sign up at talk python dot FM slash century and this episode brought you buy blue host, do you need a website? Best get blue host their A I building or press site in minutes and there built in tools optimize your growth. Don't wait, visit talk by thon 到 of m slash blue host they gets started, everyone before we jump in to the interview with steph anne or until you require that, I just released a blog for a python.
Now we have had tons of R S S. Over there because that's what powers podcasts you can submit, the episodes you can subscribe to an R S S feed for a new course announcements over a talk by the training. I've had a personal blog for a long time over at in Kennedy I code but no official talk python blog.
And so i'm going to be posting really cool things on there. I already got a couple of articles posted, but I have plans for some interesting series and any time there is some more interested announcements or exciting news I want to share with talk python, it's gonna over on the top python log. So if you're interested, I would really, really appreciate if you go to talk by them that m click on blog, right, the navigation on the bottom and just subscribed to our S V.
That way we can stay in touch with that. Let's talk preki ox. Stephanie. Welcome to talk ethon omy. It's awesome every year.
Thanks for having .
yeah really looking ford to talking about mix. Know these are things that i'm sure a lot of people i've certainly heard of. But to be honest, it's not much i've done very much with.
And I bet a lot of people that they're listening like idea that be a good idea, just like continued delegation and writing test. Now let's get back to you. You know something like that.
So I think there's a lot for people to take on take away here and i'll talk about what are recommit hugs, when to use them, how to build them and I hope bunch other things that you're up to. Uh, so should be a lot of what i'm looking forward. Me too. yeah. Now before we get to that about your story, how do you get in a program in python and recommend hooks .
and all these things? So everyone, I am still and I am a software iner work. And I would say, I I guess I got into programme in python, I was programing in r and I was doing more data analysis, are still building some things, and I needed to build a web up. And one of my teammates had suggested that rather than battling with shiny and are that learn iphone, so I took a few weeks and just forced myself to do that. And I built something with fast, and that was how I got to.
That's really also. So yeah, you were doing work in finance, but in as something like that with the details.
Yes, he was. He was mainly reporting and doing analysis on how client campaigns were going. But what really got me started with programing was more, I had gotten involved with a hackston team, and we had built an alerting system.
So was just monitoring when something weird went on the campaigns, and I really enjoyed building more more than so than the analysis. And so I had to find a way to and I enjoy like a little bit data and and more on the coding sites. I had to find something that would let .
me combine yeah well, that's not really fun. I definitely, I want the same wavell inks as you with that is this is fun, but that the building is is really where things get interesting in and you know, look back to you go. We built the saying that that's a pretty awesome .
feeling yeah know IT IT was a time of fine and we ended up getting, I think, third place on the hacker on but yeah, that that was really that moment where I was like, I got to taste something else and I was like, this is, this is what I want to be doing.
So that's fantastic. Was that at your company? Or was that something .
that the previous previous really I was the attack company and so yeah, that was actually all built in our the learn ning system.
And then, oh no, yeah. Okay, yeah.
And then and then as we work tomorrow on its certain things ended up moving into python. What easier to work to automate things. And I have like some laptop right are somewhere we.
Yeah, exactly. It's that sort of the problems of a python over a lot of these things that at first blush seem somewhat equivalent, right, is that it's it's a real programing language that can go on to do all the stuff. You don't try to automate some weird thing that's not really meant to be that way.
right? I know if I mean, could not write or if I if I had to, I wouldn't I don't think really .
what was going to ask now which side of the first fit more time on are .
on sometimes touch, maybe six plus years at this point. So I yeah than the errors. That's not the only thing .
I can manage to yeah no more equal flies, just eras. Okay, got also. Well, that's super fund. Let's talk about pregnant s right? I've had Anthony satel on the show to talk about his precombustion ject a long time ago, and i'm sure that project we'll get a bit of a shot out from new york as well. But you know, congress, you put together a really nice series of articles and resources teaching people met how to debug them, how to build them, how to choose them. So I think you have the stuff are going to talk about a link, of course, in a really nice resource for folks.
So thank you for sure.
Yeah, yeah, you bet. So let's talk about no pie, doc, doc, string validation. This is, this was your entry way into what this whole world of precombustion is.
right? yes. So and I think yet, july twenty twenty two, I was at my first eo IT on, and I decided to do the springs for the first time. I ended up working with the psychic learn team, and they want to make sure that all of their doctors were conforming to the umpire c standard.
They had a file in place, a test file that you could run, and just validate that whatever changes you made were now being validated as far as dog strings. And I remember at one point, like I had, I think, done twelve or O P R. In in that sprint.
I was very productive. And there was one early on, I think, in the second or so where IT just wasn't working, and I couldn't figure out why I was telling me IT wasn't valid. IT was saying that IT wasn't ending in a period.
And I had called over the one of the maintainers and we've all stared at IT to look like a period. And I ended up just deleting the doctoring and starting over, and I turned out that IT was a trAiling space at the end. And so I had asked the maintainer like, how do you not have this happened to you? And the response was, you shouldn't stall IT.
And by then I had, I was already ahead. So I was like, I made a note to myself, I need to research this when I get home. And when I did, I like, how did I not know about this before? And I set IT up on things.
And then I went to, look, does non I doc hava? This seems like actually what you would want if, as you're writing code, you want to make sure that it's going to check the doctor there. You don't want to have to run some thing later on and remember to run IT.
So I looked and there was no recommit hook for non I up, and I had made something, something that initially we had just used internally within my team. And then later on, I kind of wanted to use IT for a personal project. And so I said about seeing how we could actually open source IT.
And I had contacted the npia c team, and they were very, very interested in. And because there was a reason, there was no hookers, because no one you had to do, right? And at that point, I had the horrible realization that what I had written would never work outside, because IT was relying on things being installed.
So and then I felt pretty bad about promising that to them. So I managed to come up with an entirely new solution in the weekend and figured out how to use the abstract in tax so to work through. And so I built an entirely new version of IT, and that is what is currently available and untied up. And that actually LED to them inviting me to be court development but not .
to congratulate, you know? Yes, I know it's the full spectrum.
Having heard about him and just seeing the connection between two things that weren't previously connected.
yeah yeah. Well, I think you're comment about the recommit hope not previously existing for this project also is it's pretty thing, right? It's kind like I hinted that I mean, a lot of people hear about this kind of stuff, but that doesn't mean they'll putting into practice, right? 是。 And so how do we you know, let's let's find a way over to recommit hooks in general.
So how do we encourage people or ensure that people follow coding rules, right? We've got tools like black I tools like rough. Now those will work awesome if you give a consistent config file or config settings.
Not so much with black, but rough. Anyway, they'll make those changes and and do a lot of the kinds stuff that we're talking about here. But that requires like people to have IT installed, people to run IT and people to buy into the whole concept of the project in the first place, right?
I we're all using .
these tools and we're all gona run them and we're going na remember to run them until one personal. I don't like these tools. I'm not doing IT and then they are settings fight with your settings. They're spacing fight with your spacing and whatever.
right? Yeah I think what has really helped um in my experience when you incorporate think even like going and approaching open source projects that didn't have a set up. Just asking if they are interested in you.
You really see the value when you you think if you've ever reviewed something or gotten review comments about you should start inly line here. I don't like this space here. And then you think about how much time you list at that stage, and then you still have zero consistency because you did IT one way someone else has is another way.
And even even further than that is just the time you waste in your code. Oh, I should put this on a new line and reformation files when you could be writing things and thinking about how should I design this algorithm, right? And so I think a big part of making sure that once you find these tools that you're going to use and actually make sure they are using is making IT easy to use. Like you said, yeah, you can just run black or rough, but you have to remember to run black or rough and that is the key problem. And but so great about recommit or even extensions in your idea is that these things become automatic and that's what you need to get towards for these things actually .
stick yeah to make them automatic and and not part of IT. You know to some degree, continuous integration can do those kinds things. But a lot of times it's too late at that point. It's already checked, it's already committed. And then you've got the back and forth of now it's a diff, but it's only a diff because they sped IT differently when they hit save in their I D, and when you hit save in yours and all that. So precombustion IT hooks run prior to actually leave in your computer.
right? So it's actually prior to even commit. You do get commit and you may say you pass your message. And if it's successfully, Normally you see the hash that gets generated. If you have prepared hooks enabled, then if that those checks don't pass, then that commit never gets created in the first place. So you still have the files staged, but nothing has yeah, I was going to explain to be a little bit about how they work.
You're here. yes. yeah. Well, let's start with just like what even are are these premade hooks?
yes. So premade hooks, and I think the naming is is quite overloaded and that leads do a lot of confusion. So at the lowest level, a get repository in general supports a hooks system.
So there's a variety of different types of actions that get will trigger a script on your behalf. And one of those such actions is recommit. So as I described before, as you run, get, commit, this gets trigger.
Another thing might be pushing, you can have get wired to run some script when you push. Now that is, gets version of recommit and hook, singular hook, because you can only have a single file run. Single executives can run.
right? If you go to your it's in the gift folder, there is a hoax sub voter and it's got little samples for all the different life cycle things, right?
yeah. And they provide that to be executed. You can be language that you have available on, on the machine. And so get provides some examples. I do think there are a few stages that don't have examples, but basically, you take the name of the stage that you're going to use and that's the name of the file and that has to be and executable and get run IT at the sign of an okay.
So I could be a python executable or IT could be a go executable or whatever, but it's one right?
It's just one yeah because he has to be named and like in the case of prevention, IT has to be called recommit IT. Nothing else.
This portion of talk python omy is brought to by century code breaks. It's a fact of life with century. You can fix IT faster. As i've told you all before, we use century on many of our apps and apps here at top paths. I recently used century to help me track down one of the weird bugs i've run into in a long time.
Here's what happened when signed enough for our mAiling list, IT would crash under a non common execution path, like situations where someone was already subscribed or intern an invalid email dress or something like this. The bizarre part was that are logging of that unusual condition itself was crashing. How is IT possible for her log to crash? It's basically a glorified print statement.
And well, century to the rescue. I'm looking at the crash report right now, and I see way more information. He need to expect fine in any log statement. And because its production, the buggers are out of the question. I see the traceback, of course, but also the browser version.
Client O S, server O S server O S version, whether it's production or Q A, the email and name of the person signing up, that's the person who actually experience the crash dictionary of data on the call stack. And so much more. What was the problem? I initialized the logger with the string info for the level, rather than the enumeration dot info, which was an energy based on so the login state would crash, saying that I could not use less than or equal to be between strings and ends.
Crazy town, but with century, I captured IT fixed IT, and I even helped the user who experienced that crash. Don't fly blind fixed code faster with century. Create your century account now at talk athon out of m slash century.
And if you sign up with the code talk pizon, all capital, no spaces is good for two, three months of centuries. Business plan, which will give you up to twenty times as many monthly events as well as other features. So if you want to run more, you basically have to potentially write a program which then itself figures out all the things to do and then delegates to run in them. Like if you want to run rough with a fix formatting issues and you want to run the checker fixture for nupee dog strings and all those things you'd have to write for .
orchestrating program for that, right? Like a dash ript, like a giant bash script t where you have to decide, do you fail early? How do you like? And check, do I run this one and then this one? And then even worse, you're actually, in that case, you're probably running everything, you know, you bring everything sequentially.
And if you don't do IT carefully, then you know maybe maybe wanted failure. Ly, maybe you don't. That becomes very, very chAllenging to you can figure and also to share because the thing about that file is that is not included in version. So that would be something that you would maybe have to store somewhere else and then do a symbolic name. Then that becomes a already a time .
to manage. I was like a 点, i know you can do IT now that heart balls, Allen, but you know .
ChatGPT what I dh s how to do that quite .
of IT so is burned into the rain. Oh, so one of the things that you recommend, so we don't have to build this orchestration piece is actually predict commit, which is a high project, right?
Yes, and it's not the only one. So again, that's where like the naming becomes chAllenging. But president is built in python, but IT IT can run hooks in a variety of languages. IT interfaces with gut hook system for you.
So IT creates that executive and planes are there, but that executive is then pointing back to preach IT so that you can just define the simple yet file like you can see part of IT on the screen right now. And I comes very easy as essentially you're just configuring what you want to run. You're not actually code in the logic of the checks and how they are to each other.
right? So let's assume that all the recommit hooks that you want to run somehow exist out there in the world, right? You don't have to create them for the moment. So what you can do with recommitted is you can set up a set a time, no a game or file, always get those Chris ross A E mobile A P commit config e file, which then has a bunch of listings of here's a get report story. And if you install IT as a python package, here's a bunch of things that you can run on IT, like check tomo.
check eel and so on, right? Well, IT doesn't actually have to be a python package, right? So in that repo, and we may be jumping ahead, but there a special file in that repo, IT will tell precis how IT actually needs and thought .
so could be anything. Oh, that's anything. So the the thing that integrates with the preamble project, IT has to opt in, in a sense, and that IT has to have configuration file launch fires set of something like that.
yes. So so right now we're looking at press IT config. There's recommit hooks and that one is kind of register ing IT with recommit system.
So IT tells recommit how to install IT once you get the hold of IT. And I also list out these hooks that we see here under I D, but that will be defined over there. So that pretty, that knows what what is check tomo? What is checkout? O .
okay, yeah, that's really cool. And you can have more than one of these repos stories in in their right.
So yes. So the report section is a list of repo list of a sections, and then each o that has other conflict like the individual hooks that you want to run from that.
right? right? So the first example you have this, and this is your article.
I guess I give us proper announcement, but how to set up recommit oxes you I perceive this is kind of you're get started article for this whole series. I don't know everything at that way. yes.
The first one, I I had gotten a lot of questions on how to do this. And I think it's always interesting, especially when you think about, you know, speaking at conferences, I feel like and which I do a lot and I feel like a lot of what gets more hits.
And that sense is like the advance, maybe more creating IT, but there is so much about arguing people just getting started and figuring out, how do I even use this in the first place as this saves you so much time. So I really, this was where I got started. For that reason, I think a lot of people were able to benefit .
from this article. Yeah, that seems like IT. I know it's fun and to talk about the super advance and deep dive things, but most people, they just need to get start.
They just need some foundation, right? And I think I think that's actually where almost of the benefit come from, even though that is really fantasy. Some cool did dive talk the people are going into.
So this a next one is pretty interesting that were adding here in this example. And that's the of recommit from straight from astro rates. So this is just get to become slash astro T H, which is the company behind rough movie. And this is the rough recommit. But what's interesting about this is whole one that he has nothing to do with the press IT project, but too that this one also takes special arguments that you can pass to IT.
yeah. So I mean, I think the rough recommit wanted just a smaller version so that IT works faster with recommit because precent IT IT will have to install this at some point, they will have a cash. So if you don't change like the version in this case, they will be able use that.
But that first time, you do have a bit of a delay, and that's not something you want IT is something you have to be very careful of when you want to be using this. And then the argument thing is nice because you have a few options when you can figure to these tools depending on what the tool supports. In this case, rough supports, as I think we mention delivery earlier configuration file.
So for example, you could have stuff in your pie project tomo. But the key here is that maybe you're using rough in your I D, and maybe you don't want to do the same kind of changes that you want to do and recommend. Maybe you maybe maybe you wanted to ask you if it's gone to change something, where is in the free commit stage? You definitely wanted to be fixed, right? So you can use the arg here to provide stuff that you only want to happen when it's running in the context of .
recommit yeah and rough has a exit none zero on fix, which means if IT goes through and you say to fix IT, IT will fix IT, but then it'll air out and say that wasn't a smooth transition or whatever, which is cool because that will then fail to commit itself. Give you the modified files and say, basically have a look, see if you see if you like IT. Now right before I actually just ships IT up.
That's so important because sometimes you realize there was some rule that you hadn't reviewed before. It's not quite doing what I want and let me tweet my set up. So it's nice to have that bit where you can ify what was actually changed.
just what you want yeah I guess it's a little bit dangerous. Just say change IT and then committed.
I ve had people so I did A A workshop on pregnant, both on setting IT up and then making the your own hooks at your python this year. And I did have some a few people actually, one very insistent, asking me what I wasn't there a hook or why don't they support just fixing IT and then automatically adding IT and committing ted on your behalf? And to me, as first networks and security, that just sounds very scary at doing that. I want to see what has been changed and whether not every with .
not yeah what is that just going to push IT as well? Come on. Yes, I think that .
was that was part of the suggestion. Like I certain they don't that running .
like yeah IT does skip out on some of the benefits of the multistage aspects of get, I suppose, but IT is efficient. You just get IT done all once.
That's pretty ool.
No, not I know. Super bad. So this example that we're talking about here where we've got a preciate hook that were grabbing and that IT takes these arguments, I think this is this is an interesting point discussions.
So the example you have, your articles, you said what we're going to tell rough is dash ash fix dashed us exit on their own fix and show fixes, which is all good. But rough can be pretty complex in its configuration, right? You can say disabled fly gate, turn this one on.
These are warnings. These are errors. And there's a whole, you know, here's how many line uh, columns I want and all of this stuff, right? So you can either do this argument thing or if it's supported, you could also potentially have, say.
a rough tomo, right? yes. So I tend to want to minimize the amount of of configuration files I have. So in my case, I think below I talk about having a in the pipe at time. So you just add a rough section in there and then you can figure things. And this is stuff that you'd want to use both in your editor as well as the great because you want them to agree. And nothing worse than one telling in the line that's good head or .
put put a space after the comma in parameters and then take away the face and put the space .
and take away the finding. You agree.
No, no, you done. So I suppose that's a massive onus of having either the tool of rough settings in your project or just a rough of tomo. How do you go about that didn't matter because then no matter how you are using rough via prepare or free your project, it'll be the same thing, right?
exactly. Yeah, okay. yeah. That's that's pretty awesome. Now I guess maybe we got a bit of ahead of ourselves. If I want to somehow install a recommit OK or recommit to that, when I then give you one of these tomo files, it'll go subsequently grab into the things how do you .
get started with that? Um I think I need refreshing.
Yeah, sorry. So if if I have just a plane, get up repository and I want to have recommit managed the hooks for that real story, like what do I do OK? So the first .
thing is you have to actually install, prefer IT. And that's not the commanders on the screen. This is more of a pip and stop to make sure you have the library pipe on library in place.
And then you need to have this this configuration file, at least at least one hook in there so that you have a valid file, and then you can run recommit and saw. And I admitted IT here. But what talk about in a different article, when you run this command, recommit actually tells you that I created the get hooks prepare file.
And if you open that up, and I have an example on on the other article, it's very simple. It's just calling premit the tool itself. So in all cases, you need to have IT installed um in your environment and a single time you run prem IT install, which then does the wiring on the side. And this is something that everyone in your project has to run on any machine they are using because it's part of the repository itself that file needs to exist there and that can only happen if you run .
this command yeah so there's a dot recommit dot configured, not emo file, that that's what you put in to get up at the root of your project or you know something like this, but you actually can figure get itself. You've got ta run as prevent space install and IT basically wires up .
the hooks to make that happen right on your half. And then you don't have to worry about hiring that up. And then ah it's transparent. You all you have to do is tweet you are convicted and then the .
changes have nice I don't know of the naming how much to believe the amy, can I do things other than press IT and do not .
like proportion, don't support every single one, but they are quite you that they do support. For example, I once configured an open source project with a tree push. Um because IT was A A slower check and that's something you don't want definitely want running on each commit.
But IT might be something where you wanna sure when you push the file that you address? Ss, something that might be a little bit longer and that is really not any different than configuring with the precured in fig yamal. There's just a separate item that goes and that this is which stage to run by default break on IT. So you don't see IT, but if you needed to change that.
you can yes, I figured that was case, but I never tried. And given that it's name to recommit, it's a named after one of the hooks, right? But of course.
I think that's name probably the most useful .
one I would yeah .
you think about I think I think a very popular example would perhaps be the commit message. So there is a lot of tools that work on you, making sure your committed are following a certain standard. I think one of them is called committed.
And so that runs on on o. Is this committee about this? I have heard of this.
I don't think their example uses, but I think they do have a prequel hook, and I believe that works.
Yeah yeah interest okay, this thing a release management tool for team. So that makes sense that you want to kind to be little bit careful about what you committed messages are, maybe want to grab certain commit messages. And I don't cheer change lawyers and like that.
right? Yeah, I think that's been quite a bit of talk about this one. I comment, as i've been.
think it's a attraction. Five, this portion of talk piton me is brought by blue host. Got ideas, but no idea how to build website. Get blue host with their A I design tool, you can quickly generate a high quality, fast loading or preset instantly once you need all the look, just hit inner and your site goes live.
It's really that simple and IT doesn't matter whether you are hobbyist entrepreneur or just starting your side hustle, blue host has you covered with built in marketing and e commerce tools to help you grow and scale your website for the long hall. Since you listen to my show, you probably know path on, but sometimes it's Better to focus on what you're creating rather than a custom but site and add another month till you launch your idea. When you look great to blue host cloud, you get a hundred percent of time and twenty four seven support to ensure your site stays online through heavy traffic.
Blue host really makes building your dream website easier than ever. So what's stop in you? You've already got the vision.
Make IT real visit talk python D F M splash blue host right now and get started today. And thank you to blow host for supporting the show. Are what other take away? Should we talk about this first one? I think we maybe pretty much covered IT. Let's see.
I guess, you know, we mention before, but if if people want to see sort of examples of recommit hooks fAiling or succeeding or fAiling because they change something in which is not exactly a failure, but stopping and starting over, you have a nice example of what that's like there. So one thing that I guess might be useful is sometimes maybe you don't want na run the precy hooks. Maybe you need to check in some, then in a certain way to fix the servers down, right? We have to check this in.
I can't fix for whatever hookers upset about right now. IT needs to go in right away. Let me commit IT, right?
You can. I mean, I think there are probably several years cases with this. Maybe you're going to be squashing things later. And if you don't maybe you know what the A P I you're doing. What you're doing is going to look like um IT could be in the kindness bact we talked about earlier, perhaps roughs doing something you don't agree with but you need to like check with the rest of your team to make sure that everyone's an agreement.
Let's remove this rule, right? So it's I this definitely don't encourage always doing this that defeats the purpose, right? But there is kind of a break glass solution here where you will see you first run, get commit and something fails.
And it's not something that you either want to fix at the moment or really can fix. And you can just passion pass in dash verify and none of the checks run at that. So it's like as if the checks were ever there in the first place.
Right, right, right. Okay, that's pretty interesting. Um like you say, hopefully people don't run that all the .
time at that point. Just remove the experiments .
so you so yeah like you even do, right? I suppose there's interest interplay between recommit hooks and continuous integration, right? Like in a since they are often checking some of the same things.
what do you think? So I I think it's probably an example like not not quite a one dirac. I probably the the circle for precombustion entirely contained within the circle for C I C D. The differences.
There are certain things where you can get immediate feedback, quick feedback locally, and that should be something that you can put recommit, things like linking, formatting and then C, I, C, D make the running your test story. That's definitely not something you want to be doing in to commit. Imagine you have a test story that takes three minutes to run, even maybe three minutes in their bad.
But every commit, waiting three minutes is definitely not something you want to do, but still a checked that you should definitely be running. So in cid, I would run everything, do the thing, do the for that, your final, that's your last player of defense. And you need to be checking everything. And this just allows developers to get that feedback sooner.
right? So what you're actually checking in and you finally approve is much closer to what C, I, C, D in the first place, right? Yes, yeah, OK.
It's also much faster feedback. So I if the thing has to run all the way through the linking, the testing, the type you might be waiting ten and fifteen minutes or all the things to run when you could ahead, you know, under a minute, hopefully where under a minute feedback instantly that your file isn't formatively .
IT should be near instantaneous, mean exactly instant, maybe asking too much, but some of the astral stuff is it's kind of ridiculous.
Yeah, I think you have to be very careful because this all these checks and think you had up on the screen maybe earlier like the the recommit hooks, the general ones provided by the recommit uh organization yeah, there's tons of things in there, but you do have to be careful because if you're like, oh, this could be good and could be this could be good. Each check is adding time.
Assuming, like I say, assuming they are all running on Price and files, you're adding time to how long. So you do have to be mindful low what you actually need. And if you go to the point where you can end up making the whole process too long, people are going to stop and death. Yeah, yeah, exactly.
Soon that becomes a point where people go. I'm not thing, 对, kind of sort of and now you can just say, no, you have to use IT, but then you just have unhappy teammate.
I mean, if there's something that you know maybe only runs on a few files every once in a while and if you do are having problems with be, then you can also consider moving that C I C D. And I am definite a big fan of rough, as you said, like just switching black fate all that on to rough. You do save a significant amount of time and these checks and is huge benefit.
Yes, it's prejudiced ous. Now this is not a gip recommit thing. This is a recommit the project to thing, but you can you if you're using this preprogrammed talking about, you can say recommit space run and do kind of a test without actually doing a comment.
right? So there's a bit of you on this. If you just do recommit run, it's going to run all of your hooks. But on the state changes because it's thinking essentially, you're doing like a dry run if you, let's say, are adding a new hook and you want to make sure all of your files are compatible with a new hook and you might want to do something like pretty run, dash, dash all files to look through entire repository regardless of whether you have changes in place.
So if you say recommit run IT only works on your basically your changed files, not the stuff is already there and accepted correct.
And another thing is, in the case I mentioned, where you add a new hook, you might just want to run that hook. So you can say we commit run, and then the hook I D, and then you would just run that hook. And then you can define either certain files or .
stage that. Pretty slow when you're building your own premade hook, right?
So yeah, pending on how you build that, you can either use that or they have also a try rebo.
Well, let's see, maybe we jump over and talk a bit through your hook creation guide, a step by step guide to developing your own. I thought this was really a, like I said, a good article. And maybe one of the first things we talk about this, what makes a good to hook in the first place, right? You said that they can't be too long or people go crazy, turn them off or skip them or whatever.
but what else? So I think another big thing is if you're able to fix something, then you should fix IT. In the case of like formatting and you're saying no, this should have a trAiling comma, then that's easy enough.
You can add the trAiling comma. You don't make more work. User, if you can do that, then you should be very specific saying this file. And if you have a line number saying exactly where IT is because you know just saying there's something wrong in this file and someone has to hunt.
IT is also not a good user experience. No, be frustrating and quick. yeah.
So be really descriptive about IT and then also maybe choose not to make IT a premature k right? Not necessarily. Everything needs to run .
on every commit. yeah. I think the the speed thing is, is a huge factor. And in general, I think one one big thing that is key to note here is that it's even though, let's say you change files, that I say you change a python file, markdown file and an image file, if you are making a hook that only runs on certain type of file, if you are careful and specify that, then it's not necessarily a bad thing to include that in there because they will only get triggered on the certain types of files. And so like an example I have is the active tripper or I created um but I was building my website and access tripper .
is super interesting. I'm starting to think maybe I want this as well.
Yeah I was just very paranoid one point about just working with images and you so they come with whats up here. So exchange able image file form data exit, as it's commonly called, is made a data that is in the image that you might not realize this there. And so in this article I talk about a picture of me presenting that I was given from a conference.
And this was something that was the, I think, in the google drive. So you have access to all the many data that I was available. So I never met the photographer.
And yet I know the photographer s name, the camera they use, what type of computer they have, how I edited all kinds of information. And the end, the dangerous part is the exact location of where this was now conference, not a big deal. But you have to think about maybe you're blogging about something. You didn't your house, you're now you have a photo up on your website where anyone can potentially see IT that has the GPS ordinate where the .
so I I was very palled .
about this and and I don't want the idea of like I am going to add a new image. Let me go through my checklist of what I need to do, because I know at some point i'm going to make something, get IT. And so this is a perfect use case for the president, because you want something that is gone to stop you until you note you can do this, right? And in this case, I can also remove the meddle a because I am being super conservative and saying, no medica, which has a nice side benefit of shrinking files, which is good for serving them.
Yeah, well, what what value is IT to have all that meditator there for most the time? Most people are.
They think, I think IT pends travel blog and you want to know, like, here's that location and then you have one off post where you inro's ce yourself and boos.
you know, yeah.
there's so many ways and I think even just thinking, oh, i'm always going to mean doing this, there's always going to be something that later on happens. So you have to be very careful, just up front, that everything is going to go through this track.
And can you exit thing? Can IT be selective about the meddle? A IT is something .
I do want to do in the future.
Just remove the location if you yeah say but .
the thing is there is like looking through all of that, it's hard to tell if there might be something in one subset of images you take that might be sensitive. You could even think of certain situations where you might not want I want to know what kind of device you we're using. Maybe they are like, oh, that devices vulnerable to something. And I know they have IT, right?
The worst of these is, I think the multiple times, pretty sure is the samsung. But one, one of the android companies posted a picture promoting the new phone. You know, the exact information had the pictures being from an iphone or something.
I was around .
the picture implying this picture controller, something that was like, no, whoever is on the marketing team just happens to have the other kind of phone and go right and is a huge scandal. I mean, for those companies, talk about how there how much Better their cameras.
what I what I see us also the thing, right, because you never know who's you look at the meddle a so and it's interesting because certain things will certain platforms will remove IT. So I mentioned like google drive, everything is preserved um but the thing is, is you have to know ahead of time. So you'd have to say i'm planning to put this image here. Let me upload a dummy, I don't care, and check if the media is so there.
Yeah exactly. yeah. I think big mast on might remove IT. There are some certain platforms that will take away that method. Ata, I think facebook .
and I mean, huge security concerns. I imagine more and more places are, but I just wanted to have an abundance of caught and not risk anything happened.
Oh yeah. And you put in on the internet as well, which there IT goes straight from your computer through some sort of static website process and then it's download, right? There's very there's no nothing in between those two steps exactly, at least not in terms image processing.
Yeah ah cool. Um yeah this is nice. I'm thinking about um b and try not what file types does that work on? Does that work on? Just J, P, S.
do one key image, anything that's classified as an image on prem IT the way recommit runs and IT has to work with am using pillow. So if pillow can read.
then it's like to work but just skip over there. Yeah ah so really quick what we're talking about stuff fun on your website. Are your website super nice? Uh, did you build this yourself?
Like how is the thing I did? I did myself. Um I took a couple months in the begin of the year and I had IT before a single page where I was just like some boxes and then I like this needs to be um so it's built with next to us ah and so react and type script and then I use tail and C S S.
And yeah, I was kind of just I mean, a lot of these things are for me because sometimes, you know, I like seeing all one place where my where i'm speaking next or like so about where I ve spoke in like a map and up and I went through. So kind of my process would be my ipad. I would sketch out what I kind of envisioned a page looking at, and then I would to take and reactor, but this doesn't fully work, or like tweak things and interact on a few times and bit by bit, the pages formed.
The latest thing I added was this timeline functionality. And at euro python this year, I had this idea for a time line, and I can got really, really into IT was funny. The pipon conference, I was doing tons of react. But you scrolls down the tiny that there's actually too much.
Yeah.
I saw that .
I ve photographic of your upcoming .
events. Yeah so I was like, very inspired. I did this in a few days. But as nice as you know, going from the sketch to the react components, it's become very nice which IT takes IT takes a IT to get there.
But IT was nice because I I did have to learn type script for some changes in my team we were who didn't be starting moving to type up. So um this was great to work on something that no fit in my head as far as what needed to be done. And IT was very, very helpful. But yes, so very proud of this. There's still .
more tones, more to do. I have massive and I didn't even see this features is great brod one on the audience says biologic for IT.
Very good. Thank you.
And also the things I see you put the pocket appearance on here as well. That's cool. So that's happening today.
Watch a lifestream now, you not watch IT now that is prime mister. But the recording you won't there course. But what the reason I said is you maybe wanna a shout to see me your upcoming event?
Yeah, why not? So i'm going to be in experiences, go next week talking about my data worth project, and i'll also be doing a book signing there for my hands under analysis with panda's book second edition. And then after that, i'm off to france to give a workshop on pandas and then also talk about getting started in open source contributions.
And then couple weeks after that, I will be at the final conference of the year in australia, and I will be talking about data of once again. And I am hoping to run my third development sprint on data worth while. I'm there.
Let's cool. Ah we'll talk about da more for a second. It's a some interesting stuff, but this is quite the quite the agenda.
You got a good trips. Nice to you see different different cultures like IT definitely does land different. You know, the topics and just reactions.
some people are the topic excited, some of much just straight .
face you like I enjoy. I think IT really comes into play as far as giving workshops. I was in portugal last week and I did the did analysis, and I think that was like one of the best ones i've ever had.
I was very, very highly interactive. And IT was A A really fun time for me play. Everyone else thought so as well.
Yeah, that's that's fantastic. How did you get .
into a public speaking? yes. So I wrote the hands on their analyses with panda's book twenty twenty.
And at that time, if you had told me goes. Some public speaking. I'm like, please no you go .
to france in australia in a cents so like, no no.
no yeah and then and then well, during candela make time um a conference reached out to me about doing a workshop on pandas because I had the book and doing in virtually and to me that felt like a good stepping down to get over that fear of public speaking in the fact that they would be virtual. I wouldn't really have to look anyone and I was still absolutely terrified when I came to actually delivering that talk.
And when you think about IT, IT wasn't a talk, right? So I was my first thing was a for our workshop. And now i'm at the point where a virtual thing is much less desirable because it's so hard when you can see people, you can see, are things landing, are they confuse? Are they with me? Are they even still there? They know.
so. And then after I did, I made IT to the end, and I was like, okay, that's definitely something I want to work on and do IT again. So I did, I came up with a second workshop on visualization, and then I think I two or three more virtual sessions.
And then I became that some conference were not a person, and I was OK. I think I should try this. And again, I was still a long and maybe a six hour.
So it's like, crazy, right? And then, yeah, did that in person and I was like, okay, I survived, they know. And then I kind of to spell like something.
If I kept to doing that, I would get over IT or at least get to the point where, no, I could do IT without being terrified for a month of hello time, right? And I am at that point now. IT is like, enjoy doing IT. I enjoy. I'm very passionate about knowd sharing and into teaching people and getting that interaction that all people are really like getting value out of this and .
then that is is it's super rewarding. So but ah it's quite impressive. So just I got the since you kind of got so pretty and so that have been here for that long. And so maybe you know you thought maybe we could talk a bit about your book is well.
yes, that .
is exists and .
people should .
um yes.
So this is the second edition. Ah he scrolled down. There's also the covers for the korean and chinese editions.
H awesome.
And I do not read either of this.
but I do have faith to put your name on them.
You know what I ve been told by people that read both of those languages that the name is not quite translated correctly. But you know, i'll forget about that. It's cool to have the copies.
yeah. So this book powers I see pandas um working through basics of data analysis. We also talk about da visualization and then there is a little bit towards end about actually applying the stuff use cases and also a little bit of machine learning cool.
So i'll put a link in the people can check IT out if they would, would, would like to. I feel like this. A few things we didn't make very far in our creation guide. So let's talk about the the recipe. What are the four, four steps, at least Stephanie, recipe for p hook?
Yeah, this is definitely my recipe that I mean, I I think I ve made two that are published ones and then obviously few other for training and explanation purposes. And this is something that works well for me and I think makes sense as far as thinking about the pieces. So the first thing, the hardest thing, is actually to figure out what are you checking and how do you actually code that up? And if you wanted do this in python on this is just.
okay, code geologic yeah well, and if IT has a dash dash fix, maybe that's even harder than just trying to understand, right? break.
This would be where you start the basic level probably first, you know find figure out, can you find the issue and show people IT is and then you can look into fixing IT. But you have to be very careful, especially if you're touching thing.
So I get pretty strait forward. But the magic python is not just the language in the static of the center library, but the five hundred thousand external packages, right? There's probably a turn of external packages that understand code, check different things. And you could you can use those in your hook implementation, right? Just like a standards on package.
You can have dependences and self, this the third step. But I do like to make IT as a package just because you know that that's gonna work and grab the dependency as long as you follow what you already know and recommit, you will tell recommit in the fourth step and that prevent books file how IT should be in songs. So when you say this is, this is python and I will know, okay, so I should be using, for example, pip to install. And if you have, for example, by a project title and you to specify how I should be built in.
all of that just happens as IT Normally. What is just that prevent us that is kind of figure in that out? And I guess um we're really talk too much about IT but when you press IT install IT looks at the this hoxie a file and then IT IT creates the the environment and load all the packages the first time kind then IT just runs over over after that um yeah unless .
you change something in your pit config file, then they won't need to rebuild the environment for this. If you keep the same version, then it's kind of like you said, I installed this version of the package. You don't say you need up at the package and it's kind of like a rich environment OK already have .
that there's no need to. So your recipe is one design, the chic function to turn IT into A C I, which there's some interesting stuff in that one as well.
And I think that's kind of where the dash ash x comment comes in the day, right? So yeah, and your logic, that check function, you should be able to say this was successful. This was not successful as and stop the commit or don't. And then the C, L, I provides a very easy way to plug in into that me be you want to say dash, dash fix or or a dashed as you leave this type of file. And whatever kind of modification you want to do, you can expose that in A C, L, I. And that's also a quicker way to get started versus trying to take, read the find the pie project that time will read IT in parts out the things that all stuff that can come later once you figure out exactly how you want your tool to be configured yeah.
especially water. Two arguments that might not be necessary to two over the top with all the configuration. And then you make IT installed, basically like to make IT a package and then create the precent hooks, the steps.
So I think, right, the function is pretty for, are you whatever you wanted to do, you just write a function that does that? You do have an example in here about, uh, checking for valid file names and snake case file names. So things like IT can't be just one letter and IT has to be snapped and so on, right? But then to turn that into C, L, I, there's a lot of options in python these days.
right?
You I you can type. But if you want something built, yeah you want to built in our paris is pretty straight.
right? yeah. And I think also, I mean, if you look at the preamble hooks of the preamble work, a lot of maybe all of them just using because for most hooks, all you'll need to say is I have an argument passer and and accepts file names. And that point you have this boiler place that you can just copy and you don't even need to worry about multiple. Yes, I don't .
have to be to advance with like sub commands and all yeah ah and then make IT installed able. This is you recommend a high project that tomo which for package c that seems pretty pretty much the defective stand, right?
Yeah and then what's nice is ah you you're using current things, you are relying on set up the pie and also in there, there's a way to expose an entry point and that's twenty four.
Yeah yeah, yeah that's really nice. I I love entry points. I think it's I think they're massively underused in pid on you know, people talk about how do I create a script that I can give you to somebody so they can run something and so often involves like where's IT, where is the associated files, where is IT python and whether this depends all of that stuff. You if you just create a pack age and IT has an entry point, you can pep acs install later, you v tool install IT and now you just have all these commands and people don't have to mess with all the python stuff even if, you know, do IT you don't want to do that all the time.
right? Yeah it's just you can all that from anywhere .
at that point yeah exactly exactly. So in this example you give you put a um a validate dash file name command point to know what module and I know cause that back with our part so IT outcome of circle yes so it's it's almost like you had created you .
some command line utility like bash wise or something and just have available and it's pokes into your I also want to call up on twenty one nine twenty one could be talked about dependencies, right? So anything you put in there automatically will get grab ed and press IT and souls. So in this case, there's nothing case of the exit tripper.
I M like we need to a right. So right? This is how you can configure, how to commit will grab .
everything. So yeah, this is a requires python version. Does press IT help you get python in anyway?
Or is IT just assume that whatever languages relaying to .
o in order for you to use this recommit hook on your machine, you to have to, for example, python m three, ten, eleven, twelve, something like that .
installed gio saw some hot in sting. It's computer. You have to figure that out first.
That's no. Go, go. Alright, let's see. Uh, yeah. Then last thing to do is you say create the precent hooks 的 E M A file。 And is this the thing that goes into your repose when precombustion es IT IT knows what to do?
Yes, for example, in the active stripper repo, there's this file exists. So someone uses active stripper, they point do that repository. And then when preak IT goes and grabs, IT looks for this file, right? And then the key things here, for one being language. So language. Recommit, how does IT try to install that in this case says, oh, this is python.
So then in those, okay, the I D at the top, that's the name that you reference in the prey conflict when you want to, like, we saw tomo check yo in the beginning, those correspond to entries in the recommit hooks yo of the that repository that they were being reference from. So prit first find a file I can install IT can see which hope do you want about if I am in this case? And then how do I call this and that entry? And this is pointing to the entry point that we made.
But I can be anything that you could call rough and then add, you know, twenty different command line flags, if you want. And that can be, you are hook. And that was that would be fine as well. And what's very interesting here is it's optional, but it's the types one at the bottom. So I talked before about exit tripper only uniting on images, but they be wasted to look at tunnel and mark to and right if it's not going to do anything .
with find any exact .
information the time yeah so so this controlled at a for example, this look will only run on python files and this logic, uh, blanking on the name of the tool that precombustion ses to figure. But this is handled elsewhere. So there's like certain names .
that you can use, right, some sort of category map in over two these file extensions. Or are these bombs at the begin? Whatever means that is this thing exactly?
There is very dangerous thing with this. And that types is an end. So if you say if you wanted to do like this should not on python and markdown, you can use this because they will look for files that are both python and markdown and access.
Yeah.
there is a separate types or a little.
It's like an O, R, M, sort of instead of a special statement kind of you got a yeah things always get like import the or Operator like OK yeah cool. Okay, that's actually doubt that is very good to know because IT looks like a list of options.
IT is yeah but they combine so you might have something like, IT is a file and it's by, that might be one thing I see.
right? okay. yeah. I cool. So if I wanted to have more than one hook, I could put IT into one. I have more .
than one here as possibly you and I could copy that block pace the new one and then just change whatever fuel you want. And then that's now the second of that. You expose.
right, working backwards. I suppose you just expose a different entry point potentially. And then just what like maybe you have .
a validate file name and maybe you have another one that's like a validate long file name. There's something really like now they have to be and then it's just a short cut for something else. So IT doesn't t have .
to be a different thing. Yeah you just put an argument in .
there as a default because so we talked about arms earlier, and that was the user could wait. Anything you put in here is the central, like a always with this, so you could bake in certain things that have to happen?
Yeah, awesome. I love IT. Okay, let's pretty much all the time, but let's talk about one final thing now this one, your data month project. Get a quick shot to that before we before we wrap things.
that body thing before this project, uh, started related to the panda's workshop I had mentioned. Um I want to have a visual to really drive home in the point that we needed to visualize our data because pandas very much data wrangling and after talking to people two hours about data angling sticks and late, some people just feel like I okay, we're done mean, you know we're done um and that's definitely not the case and I was thinking about and you you had an screen before but the data doesn't so so there was research in two thousand and seventy in by autodesk where they took the idea of and cortex which is sorry, just a little bit about that um which is this a set of four yeah for the assets they share the same sum artistic so the mean and x and y the senate tivo x and y and the pearson correlation confidence and they look very different and right if .
you think if easily you think what I know, the average and maybe how spread out things are. So I can kind of get a sense of what the data probably means, but in reality, weird things could pleated, blow up those ideas.
right? yeah. And so in two and seventeen they had developed this algorithm sing simulated any links if you scrolled down once more um where they take the dinosaur at the top and they use similar so let me describe .
this really quite for as people listening. So there's a map lot lib and graph of some data points and IT has a certain standard deviation, certain mean it's at a but if you actually look at IT, IT looks like A T rex, right? Something like this, yes, that this enough ript.
That's a very disruption, yeah. So what the researchers have done is they use this simulated and milling algorithm to push the points around. So starting from the dinosaur and just moving the points ever so slightly in such a way where the summary statistics are unchanged, at least the two days more places where there currently shown and tried to make other shapes. So some of other shapes they have are, boy, a circle lines slender or vertically or a star.
And all of these can performed from that dinosaur, some to varying degrees of success, but they're visually recognizable, which is the point that is a pretty important here, right? So you cannot, as we said, rely on the summer sisters because you don't know is stars that the dinosaur is at a line that could be anything, and they also had animation that they they included. So basically, you could start from the dinosaur and then turn IT to a circle.
And that's even more impactful because you realize at that point, that is not just the dinosaur in the circle that has something in common, but it's the infinite number of points, arrangements that you can make between them that actually share that. And so I wanted to explore if I could extend that to working for arbitrary data sets and also different shapes. So I found the research code and spent quite a IT at, and you just trying to get IT to work for, for their example.
And that took quite a bit of time. And then I had this idea of being that I was for a panda s workshop to take a panda a and turn IT. Initially, I want to turn IT into the dinosaurs. Still have not found a good way to do that yet. But I also haven't been trying at all this year on that, to be honest, but I figured out how to.
And I, by adding a lot of other things that didn't exist and intial aggression, things like calculating bounds of the data and different metrics, that I figured out a way to get IT at work regardless so I can give IT panda data set or soccer able. And IT can perform these transformations and move the points around. So on the screen we have the first time I shared this publicly, what I hadn't working on that happened to be easter. So I made a bunny holding an easter egg with the word's happy easter off the side, and IT turns into two vertical lines, all while preserving the sun.
This is, this is something .
I think makes a very, very good teaching tool, and like a interruptus statistics course to encourage people that they need to visualize. There is an interesting study, I think called the hypothesis is liability. And they talked about taking students in a statistic analysis course, and they spend them into two.
And one set of students were just given the data set. And so here, explore s see what you find. And then the other set were given a set of hypotheses to test. And IT turns out that the data is shaped like a gorilla. And the students who were told here test these are hypothesis, were five times less likely to even realize that I was shaping, agreed.
because they never. Yes.
this is such a huge thing to like, get people learning this early. And the more shocking these visuals are, the Better.
Yeah and I think these are super shocking, right? Having t rexes and bony and you go, you know, that bunny is the equivalent and there's a continuous transformation from bunny to love of dogs with one outside doctor, right? That kind of stuff of surprised you, I think.
And and one thing I see, especially when the the dinos came out, but even when I posted some of my first examples, as you see people comment right away, oh, that there's something so cool that the dinosaur is possible to do that with. It's not not just the dinosaur, just the panda is really like anything. And so the way this also works is that people can use their own data set or they can add something new.
And that's what i've had that's what what i've done this year in the two previous development for that, I had people just be in I did one in euro python and one in pon taiwan earlier this year and hopefully in australia. But I had people and for example, target shape of what, the example, the pan that would turn into. We have a club like the cards to which was quite long, and the spade and I had already had the heart. The heart is actually a trigger tric equation, which in my mind, at first there is actually A A page I found on, I think, well, from alpha, which was, like, I want to say, like ten or fifteen different equations, trigger matter equations for different types of hearts, and you can pick the exact type of heart you want IT.
The social media art, the eh.
what is longer? Yeah, yeah, yeah. But these are all .
now math problems .
when you think about that side of IT. So this could then be used maybe in a course where they want to focus on, but also some more coating. So there's lots of different use cases like just giving IT the data and that's very much more just pure statistics.
But no, I think and I ve heard from a few teachers that um from what I presented that they sounds like this would be something that they would like to use. So hopefully does happen. If not, it's a fun thing to put in my solids and I didn't enjoy .
getting IT to work. Yeah, I didn't pope any good videos for the youtube video, but there is some really nice animations of actually seen a go from one to the other that you got. And this is a you're doing a talk back on australia and then you're doing a sprint on this as well, right? Coming up november twenty seven, about a months now. So call people can check that out if they have to be a pic on australia. and.
Well, I also be talking about IT in from to school next week. I there won't be a sprint, but I will be talking about that. So people OK.
it's sure it's still good. All right. Well, thank you. Thank you so much for being here. Let's wrap things up. But I guess you know he was A A final call action for people may premade hooks or other stuff you're doing .
yeah you can find everything that we mentioned here in the projects on my website. I being much more pretty much more effort into putting stuff on there this year and now that I rebuilt IT. So definitely check there and sign up for my years letter all and social. There's no links down here, but you can find them will be .
the links on the on the episode page. So we put them there, right? Well, things, they should be here.
Great to talk to you. Things come on and share. Thanks for you.
Me, yeah, 拜拜。 This has been another explode of talk python to me. Thank you to our sponsors. Be sure to check out with offering. IT really helps support the show, take some stress out of your life, get notified immediately about errors and performance issues in your web or mobile applications with century, just visit, talk python dot F M slashed century and get started for free and be sure to use the promotion de tok paton, all one word this episode brought you by blue host do you need a website?
Best get blue host their A I were press site in minutes and there built in tools optimized your growth don't wait, visit my thon out of m slash blue host they gets started unlove up your python. We have one of the largest catalogue of python video courses over a tok python. Our content ranges from true w beginners to deeply advanced topics like memory and asking.
And best of all, there's not a subscription in sight. Check IT out for yourself at training that tuck by thon out of them. Be sure to subscribe to the show, open your favorite podcast APP, and search for python.
We should be ready. The top. You can also find the itunes feed that slash itunes, the google play feed that slash play, and the direct R S feet that slash R S on top.
Paton out of him world live streaming most of our recordings these days. If you want to be part of the show and have your comments featured on the air, be sure to subscribe to our youtube channel at the film slash youtube. This is your host, Michael Kennedy.
Thanks so much for listening. I really appreciate IT. Now get out there and right some python code.