While rebranding fundamental Python syntax as "AI Engineering" is a bit of a marketing stretch, the focus on robust resource management is a necessary discipline for any serious developer. It’s a solid, no-nonsense reminder that clean engineering precedes complex modeling.
Inmersión profunda
Prerrequisito
- No hay datos disponibles.
Próximos pasos
- No hay datos disponibles.
Inmersión profunda
Solving Python Problems "Context Managers" | AI Engineering for 365 Days | (Day 7/365)Indexado:
Join the discord: https://discord.gg/yK3GQgkvKJ Instagram: https://www.instagram.com/vivuniverse... Twitch: https://www.twitch.tv/vivuniverse?sr=a Kick: https://kick.com/vivuniverse GitHub: https://github.com/VivUniverse #python #aiengineering #live #entertainment #educational #a
Heat.
Hey, Heat.
>> [music] >> Orange by testing my testing. Okay, perfect. Let me go to my main camera already live and hold on a damn minute.
What the hell is wrong with my webcam here? Let me go to configure videos.
There we go. Let's decrease the gain just a tad bit. I could decrease the exposure but there we go. I should have done this before I started streaming but there we go.
All right, we're live and as you guys can tell by talent news today I'm going to be working with more context managers. I mean more context manager under the section of advanced Python.
Red said last stream I did go ahead and work up to question 20. So this year I'm going to be going from questions 20 all the way to questions 25. It's basically I wanted to work with 25 questions before I really move off context managers. And now that I'm really getting a grasp as to what things works here. That's so let's move on to my JP screen. There we go. Okay. And now let me go ahead and say something like same live exclamation. And guys, yeah, this is a new chat.
There we go. Okay, perfect.
All right, guys. Let me just go ahead and wait for cloud to think. And yeah, the reason I do have a new chat is cuz it takes it requires less tokens. That's it. Let's go. Welcome back. Look at you actually showing up. You know how many people talk about learning AI engineering and never sit down. All that basic stuff. That's it. So, tell me, do you remember what Dr. D drill 20 was?
Um, can you give me the instructions again? Question mark. There we go. Might keep that a bit far. Okay, cuz I do remember a little bit of the instructions. We are going to be working with the operating systems module here, the OS module. That's a drill 20 temporary environment variable context manager. So, write a class called temp, which stands for environment that does this. Okay, before I really do that, let me go ahead and just grab my uh Visual Studio in another window. Yeah, I was working a bit on this off stream as well because I wanted to get some practice.
That's it. Let's go ahead and decrease all of that. Go with control A and delete it for the time being. And then I'm going to go ahead and let's say web plot in my other window just so I can have access to the prompt there or like the instructional questions. Let me just exit that. X that zoom in and there we go. Okay, now let me go ahead and read the prompt once on stream as well.
There we go. So, write a class called temp environment that does the following. We're going to be having a constructor of dunder in it that takes key and value as parameters. And then we have a dunder enters method that saves the original value using the OS environ.get.
Okay. And basically the OS modules of this is like a dictionary where we store values. Uh we have a key that represents a certain value. Yo hiding pixel appreciate you joining the stream. Okay.
So save the original value using os nir.
So environ none. If a key does not exist set the new value with os.environ at index of key equals to self do value. a value and then we return self and then in our dun exit if the key existed before restore it with os.en environment blah blah blah. If the key did not exist, delete it with the Dell keyword. Okay, actually Dell is not really a keyword sake, man.
That said, let's go ahead and work with it. So, firstly, I'm going to check if my blue light if my blue light filter is off cuz sometime if it's on, you guys are just going to be seeing a black screen. That said, let me go ahead and start off by importing my operating system, which is basically the OS module. And then we're going to go ahead and create a class called temp gaming streams. Don't feel pressured.
Actually, I'm not pressured, but I am waiting for like Memorial's Day, which is on the 25th cuz those days electronics are relatively cheaper. So, I'm going to actually get it then cuz I was like, why get it sooner and pay extra bucks if I can like wait a couple more days and get it for cheaper type stuff? That said, I might need to get an SSD as well cuz in case you guys did not know, my storage is almost full as well.
That said, I'm going to go with something like temp and b, okay, which is going to go ahead and have a constructor.
And guys, I am actually looking forward to the gaming streamers as well to be honest. is cu n s r u ct o r cuz I did actually create a video um for my uh gaming channel like the web arcade but I could not really uh render it through uh let's say Dainci cuz it was like pretty long in there like I reached my storage limit and I'm like oh god that said in my constructor I'm going to go ahead and initialize two things a key and a value pair so let's go with something like key and a value and then I'm going to go with self dot key equals to key and a self dot value is going to be equal to value. Next up, we're going to go ahead and let's say use a dunder method called the dunder enter method cuz we are working with context managers. This does require a parameter of self. And then let's read the next thing. So save the original value using operating system.
Okay. dot the e do the environ.get method. Okay, that stores none if nothing exists. So what I'm assuming is that I got to go with self dot o r i g i n a l value. Let's go with original underscore value is going to be equal to my operating system dot d e n v i r o n dot get. Okay, now I'm going to go ahead and store my key to it. So self.key keep.
>> Okay. And stores none if it doesn't exist. Stores none if it doesn't exist.
>> Okay.
>> Oh, I see. Okay. So, it automatically stores none if it doesn't exist. That said, set the new value with operating system. Okay. So, let's go with something like self dot new value equals to OS envir.
Okay. Dot. Let's say something like actually environment at index of self.key key. Oh, I'm trying to see what this means. I'm going to go with something like self do value.
Okay. What basically what this really means is that my original value here, it creates a dictionary and it uses this key value pairs to really uh define the stuff in my dictionary. And then we create a new value.
>> Okay. Okay. And then we're just going to go ahead and let's say return self. I want to return my instance.
There we go. Let's go with return self.
Okay. Next up, I'm going to go ahead and define a dungeon exists method that requires a bunch of parameters. The first parameter is of course going to be self cuz we're working with classes. The second parameter is going to be an exec type, which is the error that I get its name. And then I'm going to go with exec value. What error message did I get? And then lastly, a trace back what line did the other error occur in? Okay, now for my escape. Let me read the instructions again. If the key existed before self original is not none, restore it with self. Enviral equals to self.or original. I see. Okay. So, let's go with an if statement. If myself do original o r i g i n l underscore value is not none. Oh, I'm trying to see what this how this makes sense. So basically the way the uh let's say the way it actually makes sense is because my self dot um environment.get get with my key here. If there is no value to my key, it gives me none. And I check if my original value is not none and it does have a value representing it, then I'm going to go ahead and do something. I'm going to go ahead and set my operating system dot uh let's say my environment e n i r o n. I don't know why they did not add the n is so much complex to spell it like environ spell it. Okay.
Sub.var at index of subkey.
>> Okay.
>> So my key is going to be my original value.
>> There we go. Okay. I think that's pretty much it. If the key didn't exist before, delete it with Dell OS. Okay. So I got to delete it with deOS environment.
>> Okay. And then let's go with something like should I go with another if if myself do key equals to equals to none then uh delete R key.
>> Okay. So let's go with delete OS.vironment.
>> E N V I R O N. Hold on. E N V I R O N.
Wait, why can't I use the environment here?
>> Oh, wait. My bad. This is going to be delete, guys. Always avoid these typos.
>> Okay, there we go.
>> All right. And now we got to test it by printing a few things. So, we're going to go ahead and test it by going with something like print OS dot environment.
Hold on. Wait a minute. Okay. So, about the print. So, it's print os.
environment.get. Ah, okay. I have access to my OS.
>> Okay. So, we're going to go with something like os nb i r o n.
>> Okay. Get I'm going to set my key to something like my variable. Okay. And then we're going to go ahead and let's say add a block here and go with something like with our temp environments class. I'm going to add a key and value pair. My key is going to be my variable.
Well, since it's Python, I'm going to go with the underscore. And then we're going to go with something like hello for my value.
Okay, let's go with something like as e.
And then we're going to go ahead and print our operating system n i r o n environment.get.
I want to get the value representing my key which is going to be my_v.
>> Okay, perfect. I think that's >> Oh, hold on, guys. Let me explain to you guys what this actually means here. Let me just write this real quick.
Environment dot get my variable. Okay. So basically what this stuff really does is that um our before value, our updated value and our restore value because usual when we're working with like files and databases first which whatever value do we have that is our original value later we do some value manipulations and if we want that manipulator value we can have access to it. But if let's say some error occurred or we want to restore it back to the original number, we go with the third stuff here which is basically restoring. Okay, I forgot the convictions for it. But let's run and test it. Okay, we get an attribute error. Did I spell it wrong? Oh shoot, I spelled it wrong. Line 25.
Whoops. En there we go. Environ.
Okay, so it's none. Hello and hello.
Interesting. Uh, okay. Let's go with control arr. Copy that. Now, let me go ahead and grab cloud up here. Okay. And then let's paste it and say uh there I get a non hello and hello. Actually, let's go with something like hello and hello as my outputs. Okay. And then let's send it. One annoying thing is that I got literally hit the send icon rather than clicking enter for sending a message. That said, close but not clean.
You got none. Hello. Hello. That last one should be none. The variable is not being cleaned up. Let me show you exactly where you were wrong. If key equals to equals to none, sub.key will never be equal to none. It's my variable, a string. You check the wrong variable. meant to check if original if cell original value was there okay was there an original value or not also use is none not equals to equals to none that's the pythonic way for Python checks ah I see okay so situation is none okay so rather than adding this we're going to add something like if my self do. So let's go with self.or original value is none. Then we're going to go ahead and do that. Now if you want it's non hello none see. Okay. I'm starting to get I'm starting to get a good idea as to what context managers really does but I think that I need a lot more practice with this stuff.
>> Okay. Let me say I am actually um >> starting to understand context managers to be honest. You know what I think the real issue is all the libraries that I'm not used to. That said, let's go ahead and wait for it to think.
Guys, should I remove the adaptive thinking? I think it's good.
Okay, lock it in. Uh what he just said, I'm actually starting to understand.
One tiny polish note before your official notes you use if slash if works fine since conditions are mutually exclusive but the cleaner pythonic way is if it's that else delete ah okay not bad >> okay so if sub value is not none >> okay none if a key does not exist subor original value equals to OS a key does not exist for the time being. OS.viron sub.key equals to self do value set the temporary value return self and then if self.or original value is not none os.
environment self.key equals to self.or original value else delete. Okay. I see.
I see. I see. Now let's work with the drill 21. Let me say something like ready.
There we go. And then let's send it. All right guys, let's get the uh question 21. I think we're doing pretty good on time as well.
Okay, I guess let's wait for Clot think.
Is this just me or should or should I just remove adaptive thinking? It takes way too long out here. Okay, well I guess we got it.
Okay, now we're going to be working with the CIS module. You're kidding me, guys.
I don't really have much experience with these modules cuz I hardly use them. I mostly work with like five games SDL and Unreal Engine. Okay, drill 21. But first, new concepts for the rules. New concept before the drill. Two quick ones that you haven't seen yet. CIS dot s standard out. Standard output. When you call print, Python doesn't magically put the text on the screen. It writes it to an object called CIS. Standard out. And you swap it out with anything that behaves like a file. CIS. Standard out.
The default output stream. your terminal and then IO o okay string io a fake file that lives in memory behaves exactly like a real file but stores text as a string instead of writing to it instead of writing to disk import to okay then we have buffer equals to iostring io buffer write hello buffer Get value.
Hello. I have never worked with this.
The pattern combined import SIS and IO.
Buffer equals to IO string IO.
CIS.andited out buffer redirect all prints into the buffer. Print this won't show goes to the buffer terminal. What the hell? All right. All right. All right. Hold on. Hold on. Let me say something like All right. All right.
All right.
But before we work on this, let's assume I have never heard of the CIS module. I have.
And I have never heard of the IO module. I have not. All right, guys. Let me just fix my diaper real quick. There we go. So, I've never heard of the SIS module and the IO module.
Can we um therefore before working on this question, uh can I get the basics down? Question mark. Guys, there are a lot of new things here.
Okay. Yes, that's it. the right instincts asking for the foundation before building on it. That's not weakness. That's how engineers think.
The CIS module CIS gives you access to the Python interpreter itself, the engine running your code. So we import CIS.
Okay, think of it as a control panel for Python's internals. Here are the parts that matters right now. What what it is?
CIS do std out. I'm still I still think it's called standard output where print sends its output. Okay, so the out is definitely output to your terminal by default and then sis. Dunder standard output a permanent backup of the original standard output never changes.
SIS dot standard error where error messages go and then a sis dot argu command line arguments passed to your script sys.exist the only thing that I have worked with this.exist exist.
>> Okay. The key inside sprint is basically just the under the hood sys. Outputs.
Hello. So if you want to swap out sys.standard output, you control where print sends it sends its text. The IO module. IO gives you gives you filelike objects. Things that behave like files but aren't necessarily on disk. I see.
The one thing you need right now is IO.
IO. a fake file in memory that stores text. Buffer equals to io string io creates an empty inmemory file. I see it. So it's basically like creating files but uh using modules buffer.right hello write it to it. Buffer.right world write more buffer.get value hello world read everything back. Think of it like a sticky note that that pretends to be a file. You can write to it, read from it, but only lives in the RAM, which is the wallet memory. Nothing touches your disc. How they work together? Here's the pattern step by step. We import SIS. We import IO. Step one, create the fake file. Buffer equals to IO.string IO. We create a fake file.
Step two, swaps standard outputs for your fake file. CIS dotst standard output equals to buffer.
>> Step three, any print now goes into the buffer. Not Oh, I see. I see. I see. I see. Not into the terminal. Step four, we store the terminal. CIS. Standard output. SIS dot dunder standard output.
Oh god. Step five, read what escapes.
>> Okay.
I see. Uh, but I have a very vague understanding.
Maybe can I get a reference code with comments that I can write once and observe.
>> Okay, let's see. Let's see. Guys, it's so annoying. I got to always click the send icon. Bro, how can you stream every day and code like that consistently? You amaze me. Actually, I feel like after 21 days of consistently streaming, it does become a habit because it does take 21 days to build a habit. And guys, now it's basically like a part of my day.
So, it's like a I should say it's like a routine these days. That said, the IO module IO gives you file-like objects, things that can behave like files but aren't necessarily on disk. Import IO.
Okay, the one you need, right? What the hell? Oh, my bad, guys. There we go.
Okay. So, I'm going to just work on writing this program once so I can see the output cuz yeah, I have never worked with these modules before. That said, I'm going to just go ahead and zoom out there. I'm going to just use a reference as well. All right. So, firstly, let me start off by importing the CIS module and the IO module. This is actually a much cleaner way to um import those things. Part one, understanding the standard output. print doesn't magically appear on your screen. It secretly calls CIS. Standard output dot write under the hood. These two lines do the exact same thing. So, we're going to go with something like print hello from print.
Okay. And then we go with something like CIS. standard output which is going to be something like write then I'm going to go with something like hello >> from standard output but a forward/ new line okay and then forward/ new line is a new line character okay I do know that next up understanding the IO string create a fake file that lives in the memory here's something that I was curious about when you write buffer okay so it's just a variable I thought it with something like keyword, but keywords can be used as variables. Okay, I'm going to go with something like IO dot string io.
Okay, so this creates a fake file in the buffer. I might actually add a comment.
Creates a fake file um that lives in memory.
There we go, guys. Commenting is really important here. Next up, we're going to write something to that fake file. So, write into the fake file.
Write to the fake file. In the fake file, I'm going to go with something like buffer. Add buffer.
>> What up, guys? There we go. So, buffer.rite. Exactly the same as writing to a regular file. I'm going to go with something like first line.
Okay. And then I'm going to go with if forward/ new line. And then we're going to go with something like buffer.rite again. I'm going to go ahead and write something to my first file again that says second line.
Okay. And then read everything back out.
First line, second line. Oh wow. Okay.
So I'm going to go with something like print my buffer get value. All right guys, these syntaxes are relatively different. Okay. So this gets my first value and my second value or three swapping standard uh standard output.
Here's where the magic happens. So we're going to create a second buffer. Wow.
That is going to be equal to my IO module do the string IO. Okay. So we create a second fake file.
Okay. And then we're going to go with something like CIS. standard output that is going to be equal to buffer two and then I'm going to go with a print statement. Yo, hiding Dex Cap, appreciate you joining the stream. It's actually been a while since I've seen you on the stream. How you been? That's go with something like you can't see me.
Okay. And then we're going to go with another print that says something like army.
Okay. Okay. And then let's go with something like cis dotst standard output equals to cis dot the dungeon standard output.
Interesting.
Okay. Not standard. This is going to be sis. Guys, my muscle memory took over back there. Okay. Now we print. Okay.
Now we can print again and read what we captured. So let's go with something like print. I'm going to print something like terminal t e r m i n a l is a bath.
And then we're going to go ahead and print something like buffer 2 get value.
Okay. Control srl alt n.
Hello from print one. Hello from print two. Did it create?
Okay, here's one thing. Did it create me a file? If I were to go ahead and move on to there we go. Okay, we did not really create a file called buffers or anything. How did we write to the file?
Ctrl Alt N. Okay, so it says terminal is back. Oh, okay. Okay, okay, okay, I get it. So I said that you can see me. So the thing that I can see is only after I get my value and I print the value that I've gotten. I cannot read a value that is not being printed. Hey man, a complete flow state. Haha. Where are you from? Actually, I am like from abroad.
That's sad. How you doing, Bar?
Appreciate you joining the stream.
>> Okay, let's cross this real quick.
>> Oh wow. Okay, you know what? I think I'm ready for drill 21. I sort of got the basic gist of how this works.
>> Let's go ahead and paste this and say something like >> I see how it works.
>> May I have got it a gist of it?
>> Just a gist.
Okay, guys. I can't wait to actually get the complete grasp of this stuff. That's when it's actually going to be really fun to work with. Okay, cuz this is the tedious part, just learning it.
>> That's it. Is it just me or is it actually getting really hot?
>> What is context managers? This time I'm ready for that answer. Basically what uh context managers are is that uh sometimes let's say in databases when we want to actually save an original value then process it through let's say um a certain condition and if the condition returned true or if the condition was successful we can go ahead and retrieve the manipulated value but if the condition was not true then we go ahead and restore our original value and context managers are in charge of actually getting that stuff done.
>> That said, good just is enough to start.
And guys, let me know, was I talking fast out there? Cuz these days, even like for my YouTube videos and all that stuff, I am trying to talk a little slower cuz I realize it's really hard to um let's say understand me if I talk really fast. That said, you don't need to fully master CIS and IO right now.
You just need to understand the swap pattern well enough to use it in this drill. Let me confirm you've got these three moves locked in. The three moves.
Buffer dot buffer equals to io.string creates a fake file. I got that.
>> Excuse me guys. Virect. So sis dot standard output equals buffer.
>> We direct standard output into the buffer.
We store the real terminal. SIS dotstandard output equals SIS. the dungeon standard outputs. Restore the terminal.
That's literally drill 21. And those three moves wrapped inside a context manager. Enter equals to move one plus move two. Return the buffer. Exit equals to move three.
Okay, I see.
Can I get the instructions again for the question 21? And guys, ignore my typos right now. My keyboard is too small. Okay. How's it going to help you make AI? I actually have no idea, guys.
This is just a part of my road map right now. I'm assuming that it's taking you from the very basics, which starts at advanced Python all the way down to like different concepts. for example, git plus/github and then let's say machine learning lm models and all those things but I can't really straight jump into lm models and like openg and all that stuff I need to really understand the concepts first I did that mistake with my programming for 250day series just directly moving in and skipping over most basic parts that costed me at the end guys but at least I didn't get the game done that said drill 21 capture output context manager write a class called capture output that the dun that has a dungeon enter method which creates a fake file to the buffer using the IO module.
Okay. Redirects it to that buffer.
Redirects cis.standard output to that buffer. Returns the buffer dunge exit.
Restore cis.standard output back to cis. standard dungeon output.
Okay, you know what? I think I I think I understand what this does. Bro, watch videos, guys. I try avoiding watching videos because, okay, videos is really helpful when you want to get a gist of what you're working with, but then relying a lot on videos does get you inside a state called tutorial. Hell, you're so what should we call it? You're so into the videos that when you have a question, they can't really answer the question. Sure, you can move on to AIS, but then if AI start teach you, if AI start to teach you from the very beginning, they do teach you from the very basics. As long as you guys can prompt the AI correctly uh the way that you want them to teach you, I think that's really really helpful. That's it.
And guys, that comes with a caution that everyone does have um the ways that they like to study better. Some people uh learn better reading books, some people work better with YouTube tutorials, and some people work better with AIS, etc., etc. That's it. Need to give those cautions as well. Okay, I'm going to go with something like import sis.
>> And IO.
>> And guys, I feel like I'm talking way too much. I got to focus on what I'm doing here.
>> That said, let's go with cap cur capture output.
>> [music] >> Okay, so I'm going to create a capture output class that let's say has a dungeon enters this method that requires self as a parameter. And then we're going to go ahead and create an uh empty file for our buffer. Therefore, I'm going to go with something like self.buffer buffer >> is going to be equal to my IO dot >> string io. Okay, so what this does is that it creates an empty fake file in our memory that lives in our memory.
Next up, we're going to go ahead and redirect our buffer or we're going to redirect our CIS our CIS modules is standard um output. Yeah, I think it's standard output to our buffer. So, we're going to go with something like CIS dot uh std output equals to self.buffer.
And guys, if it looks like I understand what I'm doing here, I sort of don't.
Really depends. I sort of do understand just a tad bit. It's not It's not anything more than uh what you guys don't understand right now. I think we understand the same thing. Okay, it's very vague, but I'm starting to get a gist of it. And then let's go ahead and define a dungeon exit that requires self as a parameter, exception type as a parameter. What error did I get?
exception underscore value as a parameter. What is the error message that I received? Lastly, a trace back. What line did the error occur in?
And then we're going to go ahead and move on to the step three.
Restore cy.standard output back to cy standard dunder standard output. All right. All right. All right.
restores. Okay, how do you restore that stuff? Hold on, guys. I might need to develop the reference. Oh, wait. Never mind.
>> My bad. That was That was kind of dumb.
So, I'm going to go with CIS dot.
>> Standard output is going to be equal to or danger sis dot >> standard waitis dot.
Oh, >> our cis dot dungeon standard output.
There we go.
>> Okay. And then we're going to go ahead and return false because I want to see if I get an error. And then next up, we're going to go ahead and test it. So, we test it using a bit block. I'm going to go with something like with my classes name that is called capture. cap tur e capture output with uh my this class as I'm going to go with output.
Now here's the thing. What my output here uh actually is is that it's the return value of my dunder enters this method. That is my buffer which was my fake file that was created first uh which lived in my memory and that oh my testing my testing guys my PC crashed.
That's so annoying when my PC crashes.
That said, let's just go ahead and open my Visual Studio again. I mean my Visual Studio Code again. Oh god, guys, it's so annoying. I even opened my Da Vinci here. Let me just exit my Da Vinci Resolve and then let's just go ahead and open my chat and all the tabs. There we go. A good thing is everything opens all at once.
Okay, so we were about to complete this drill, right? Let me just go ahead and just grab my chat back up here. Let's get that. There we go. Oh god, guys.
It's so annoying whenever whenever this happens. I hate when the PC crashes.
That's it. I forgot where I was. I was I was going to test it, right? Okay. So, I'm going to test it by saying hello. Of course, my discard opens as well. And then all these bunch of ads that open.
There we go. Okay. Now, let's go ahead and write something to our file called something like hello. And then we're going to go with something like another print statement called something like world. And yeah, this is going to be in one line. Then we're going to go ahead and print it to say something like output dot get a value.
Okay. And then print I'm back.
There we go. Now if I hit control srl alt n. Okay. So we get a type error descriptor write for io.string object doesn't apply to a dunder string line 16 right here.
Okay.
Prints normally to the terminal. Hello new world. Hello new world.
Oh, okay. Maybe maybe I could go with self.buffer.
Write.
I want to write something. Let's say hello with a forward slash new line. And then let's go with self.buffer.right.
I want to write something else as well.
Let's go with something like world.
What up guys? There we go with a forward slash new line. And now if I control srl n right for IO it doesn't apply to dunder string object. What the hell?
Um have output get a value. You know what?
Maybe we remove this and then we indent that. Control S. Whoops.
Crl Al 10 type error write for IO string object doesn't apply. So line 17.
No, you know what? I think I did everything correct here.
I can see what could have gone wrong here.
I did right stuff. You know what? Let's go with controller control C. Okay.
Where is your road map? Actually, if you guys do want access to my road map, make sure to join the discord server and either mention me on the coding health chat or Python's chat. I will be personally DMing you guys the road map.
If you guys do want to get access to the discord server, you guys can type exclamation discord on chat or you guys can get access to the link to my discord server through my bio through the link in the description and well by typing exclamation discord on chat. That said, let me go ahead and wrap plot up here real quick. Okay. And let's say something like h I get an error. Okay. And then let's send it. Guys, I think that was like the first time that my message sent after I hit enter here. I see two issues. Bug one, you're missing a parenthesis. Oh, so this is a method. Oh, of course it is a method. Bug two, you're manually writing it to the file. You don't write anything to the file.
Okay, so technically nothing was wrong.
It was just my syntaxes that I messed up on. I did not need to manually write anything and everything else was just perfect. Hello world. I'm back.
Oh, okay.
I see. Okay. Even though I see how it works. Let me just paste it and say I see how it works.
However, it may be because I am inexperienced. Uh I do not see how how is this stuff um or how will how will this stuff uh be useful?
Huh? Guys, it may be because I'm inexperienced. I actually do know how is it going to be useful, but I'm just simply asking it. 21. Perfect. That question you asked. How is this useful?
That's an engineer's brains. Yada yada.
Real world use of capture output. Number one, testing. This is the number one use case. When you write automated tests, you need to verify that your code prints without spamming the terminal.
>> It usually does come actually.
>> [music] >> Does my function actually print the right thing with capture as output >> my function >> assert keyword I haven't used that output get value equals the expected output correct or n number two logging AI agent in outputs in future your aentic AI agents willprint status updates consistently you can capture all of it and save it to a file or database instead of losing it in the terminal Silent silencing noisy libraries. Some third party libraries spread garbage you don't want. Wrap them in capture output and throw it away. Oh, I see. You won't use this every day, but when you hit month eight, building agents, you will remember this rule. Trust the road map, guys. Just trust the road map blindly in that case.
Capture output context manager core idea temporarily hijacks where print sends its text redirecting it into fake memory file then restores the terminal automatically on exit class capture output defined under enter self.buffer equals to IO dot string io fake memory and file redirects all prints here return self.buffer Buffer hand buffer to as a value >> restore will terminal. Oh, okay. Okay.
Okay. Okay.
>> Okay. The key concepts uh sis.standard output the current destination for print swappable at any time. CIS.standard output equals to anything that behaves like a fish like a file. Oh god.
>> CIS. Standard outputs Python's permanent backup of the original file and never gets overridden. CIS dotst standard output equals SIS.standard equals to cydunder standard output always restores correctly. IO string a fake file that lives in memory excepts writes returns everything with get values as a method. Buffer equals to IO string IO buffer.right hello buffer.get Get value. Hello. Usage examples with capture output as output. Print hello world. Print output.get value. Print.
I'm back.
Real world use case. And guys, what the hell? My entire screen got radioactive all of a sudden.
Okay, let me just go to my configure.
Let me actually show you guys what I've been doing in my configure stuff. I've got a whole property here where I got to go ahead and literally decrease my game.
That's going to decrease my um gain in my webcam. I might increase it just a little cuz the sun is going to get lower.
Okay, then it's going to get dark as hell.
>> You know what? I'm going to hit okay there.
>> Let me just test.
>> Oh, wow. Okay, I can fix it this way.
I'll just keep it in my window. Thanks.
>> It's not It's not messing with me or anything. I'm just going to leave it up here.
>> Okay.
Next up, automated testing. Three deals left. Contact manager almost done. Let's get ready.
>> Okay. And then I'm going to ask, is it normal that after the three three deals I'm going to be like, is it normal that I don't fully understand what's most of it?
>> Cuz I have a brief idea as to what context manager does, but I'm not I haven't mastered it yet. That said, drill 22 new concepts. First, two quick operating system functions. Oh my gosh, there are more new things.
>> Oh, guys, I don't have water. Great.
>> I guess we're done out of dehydration today. That's it. Returns your current working uh directory the folder Python is currently operating from. The import OS osc returns your current working directory.
A directory the Python's folder.
>> Okay. OS. CHDIR path >> changes the current working directory to whatever path you you give it. OS. CHDIR user u desktop OS. CWD.
>> It's desktop. Oh, I see. Okay. Okay. So, basically the OS.get CWD basically gives me the path where my Python file is saved in. In case I want to change that Python files path, I go ahead and use the ch and then diir change directory. That makes sense. Once I change my directory and use the get cwd, it gets me my current file path. Okay, the pattern together originally equals to os.get cwd saves where we are.
os.change directory change it to some folder. move somewhere else. os.get cwd some folder and then os dot change directory back to the original directory which was my whatever value this is >> drill 22 temporary directory context manager.
>> Excuse me guys. So write a class called temp directory or temporary directory that has a dunder in its constructor which takes a path as a parameter.
Dunder enter saves the current directory using operating system.get cwd >> changes into self.path using os.change change directory >> return self which is my >> entire instance of my dungeon enters this method exit restores the original directory. Why did it just give me my program? No test. Okay, I'm so glad. I was like it gave me my program. Speaking of which, I'm going to go ahead and grab my claw in the auto window just so I can have a reference of my instructions.
>> [music] >> Okay. Now we're firstly going to go ahead and let's say import our operating system because we are going to be using OS and then we're going to go ahead and define define a class called something like temporary directory. So temp dur which is going to be having a constructor.
So I'm going to go ahead and define dungeon in it that requires self as a parameter and path as a parameter. And then we're going to go with self.path equals to my paths parameter.
Next up we're going to go with the dunder enters dunge method that requires self as a parameter. Now inside my inside my method what am I going to do?
saves the current directory using the operating systems is get CWD. I'm assuming CWD means current directory.
[music] >> Okay. So, I'm going to go with current directory or uh current is more like original.
[music] Original directory equals to my operating system.get CWD.
Okay, that is a method changes into self.path using changes into self.path using os.change directory. Therefore, we're going to go with something like changes into self.path.
>> Okay. So we're going to go with change directory which is going to be equal to osdir which is change directory and then it requires a variable or a parameter of my path that is going to be my um selfpath and then we go ahead and return our instance our south because there is literally nothing else to return. Next up, we're going to go ahead and define our exit that requires self as a parameter. CIS underscore type as a parameter, the name of my header.
My >> bad, guys. It requires an exception type, the name of my error, an exception value, the what error message is it that I got, and a trace back.
Which line did my eder occur in? And then we're gonna go ahead and let's say restore our original directory.
Therefore, I'm gonna go with something like uh >> I don't need that, right? It changes my directory in general.
>> I'm going to go with os.ch.
uh diir change directory is going to be equal to my self original directory.
Let's go with something like self dot original directory. Okay, perfect. And then let's just go ahead and test it.
Now to test it, we're going to go with something like rent my operating system CWD, which is basically uh uh get CWD, which is basically my current directory.
And then we're going to go ahead and use a bit block for our temporary directories class as uh let's say temporary, which is T.
I'm going to give it a file path. Oh god, I don't really have a file path here.
Okay, I guess let's go with something like CL slash uh users.
You know what? Let's open our actual file. I'm going to go to my documents.
Let's copy the file path. Uh is that how we copy the file copying?
Okay. How in the world do we copy our file path?
Copy address.
There we go.
Okay. So, we're going to go ahead and let's say copy our file path, which is C/ yada yada. And then we're going to go ahead and print something like um operating system dot get cwd.
Okay. And then we're going to go with something like print operating system dot get cwd. So basically what this does this is going to be our original file path. This is going to be our manipulated file path.
This is going to be our restored file path which restores to the original value.
All right, let's try running it. Going to go with control SR control 10. Syntax editer unic code line 20.
What the hell? Truncate escape in line 20.
Huh?
Wait a minute.
Oh, wait. Forward slash. My bad. My bad.
My bad. My bad. We We gave a backward slash there. There we go.
our initial file path where my program is stored in file path that I gave it which is my documents and then this is my actual user. I'm going to go ahead and grab my file back up here. I'm going to go to documents just to see if anything else is here.
Okay, we got our stuff here. Not bad.
Um, okay. Let me go ahead and copy that real quick. I'm going to go ahead and grab cloud here, paste it, and say done. First try as well, guys. We're we're having some improvement out here.
What the hell?
>> Drill 22. Perfect. First try. No bugs, no errors. Screen color. That is what growth looks like. Okay. I am starting to understand what context managers have bought. But I did not say that I mastered this stuff [music] >> key concepts yada yada and then this is opening >> operating from sleep/ users save override restore perfect workflow for context managers.
Okay. Okay. And then we're going to go with something like usage examples print operating system cwd with temp diir sd print operating system and then print os yada yada drill. Two drills left. Let me say something like yes. All right guys, since there are two more drills left, I got I guess I got to lock in.
>> And I can't really wait to actually have my gaming streams. Like what the hell?
I guess I'm going to wait for clutch to take. It's so hot today.
>> Dude, I do have the fan on.
>> That's it. Drill 23.
New concept files. File I/O basics. I/o is basically input/output.
Is it? I'm pretty sure it is. Python can open, write to, and read files using the open function. Open file name mode.
Let's go with write or read or append.
File equals to test.txt. Write open a file for writing. File.hello.
Write a line. File.right.
Write another line. File. Close. Must close a line. If you forget close, the file can get corrupted or locked. That's exactly why file handling is perfect use for this case.
That is exactly why file handling is a perfect use for context managers. be done through exit guarantees close always works. Dr. 23 uh manage file writer write a class called managed files that consist of a constructor called dunder in it takes file name and module as parameters enter opens the file using the open function >> stores it as self file return selfile exit closes the file with selffile close tested with yada yada yada Yeah.
>> Uh, you know this P and didn't go build it.
>> Guys, my throat is killing me right now.
I am not lying.
>> Uh, >> I should have gotten water with me.
>> Wait, [music] >> we're not we're not working with any ink codes here, right? Therefore, I'm just going to go with a basic class and read the instructions.
Okay. So, we're create we're going to create a file called managed files. M we're going to create a class called managed files.
>> Mh d files.
[music and singing] >> Okay. That consists of a constructor takes file name and module as end mode as a parameter. Let's go with constructor.
>> Okay. So I'm going to go ahead and define a dungeon in it constructor that requires self as a parameter file name as a parameter and mode as a parameter in it. I'm going to go with self dofile name equals to my file name and then self do mode equals to my mode and then we're going to go with something like define dungeon enter that requires self as a parameter. Now in my enter open the file using open store it as self do file return the self do file self do file equals to I'm going to open a file with my self do file name as my name and my mode as my mode self del mode. There we go.
Okay. And then we're going to go ahead and store it as that. And then we're going to return our self file.
>> And next up, we're going to go ahead and define our dunder exit as well. That requires self as a parameter and exception type as a parameter. the name of my error, an exception, a value as a parameter. What error message did I receive, and then a trace back as a parameter? What line did my error occur in?
Then I'm going to add a colon there.
Next up, close the file using the close function. So, let's go itself file close.
[singing] And then we're going to go ahead and return none.
>> My bad. I mean false.
>> Okay. And then let's go ahead and test it now. So for testing it, we're going to go ahead and use the with keyword. So I'm going to go with something like with managed file. And that requires a file name test.txt as a write file.
There we go. I'm going to open that as file. And now basically what file here actually is is that my file is the return object in my dunder enters this method which is my self file. Okay. So my self file is basically me creating a file. Next up we're going to go ahead and print my file read.
>> Well there is technically nothing to read.
I mean there is nothing to read. What the hell? Let's go with control alt n io unsupported operation not readable. I knew it. There's literally nothing to read in this file. Maybe I'm going to go with something like self dotfile.right.
Hello world.
Okay. And then let's go with something like a exclamation/ new line.
Oh wow. Oh, it's not readable. Did I Did a file open in my directory.
Okay. Test.txt did open saying hello world. There we go.
Let me go with controller control C.
First try as well. I mean first try as well. By the way guys, let's paste it and say something like done exclamation.
Watch there be a small error here.
>> Huh? Huh? I do get an IO and supported error, but it still opens my file because we use the width statement.
Thinking thinking close, but three things to fix. I knew it. Okay, don't try it here.
This just sets your file up. Dungeon enter only opens the file. The writing happens inside the width block. That's the whole point. Makes sense. Issue two.
Can't read a file opened in bright mode.
We got to change the file type, I guess.
>> Class manage files >> face case. Python standard for classes.
I see.
>> Snake case. Wow, I didn't know those different naming convention. What it should look like? FB. Right.
>> Interesting.
Okay, so that's a right mode. We cannot read if it's in right mode. So let's go with file.right you know world and then let's use pastal case as opposed to my snake case managed files. Okay, we go with something like hello world/ new line. And then we're going to go ahead and create another but statement for my managed file which is going to be pasteful case again. The file is going to be called test.txt which is going to be open in a read mode. I want to open it as a file. And then we're going to go ahead and print something like file read.
>> Sl 10 13. What the hell?
>> I think I got that right. I got it there.
>> You don't ever want to give me wings.
>> I still do get a hello world. Time lapse.
>> Why do I have something there?
Um, >> I guess let's go back to my context managers and let's see.
>> Um, >> okay, I think it may be correct. Hold on, guys. I'm just facteing everything real quick.
>> Managed files. Okay, we have it. Read.
Yeah, it is correct. Control S. Control 10. File not found. No such file exists.
Oh, there we go.
>> It's all about the attention, guys.
>> It's test, not text.
>> 13. Hello world. Where the hell did that 13 come in? [music] >> Um, >> okay. Wait, let's go with controller.
Control C. I I'm kind of curious as to asking >> where the actual. Okay, let me say something.
It works exclamation.
That said, where did the 13 come in my output?
>> I got a 13, [music] >> guys. Where the hell did that 13 come from?
Drill 23 complete. Why did you get 13?
Right. Returns the number of characters.
It would. I did not know that. Hello world is 13 characters. Python is just telling you how many you wrote. Hello world.
>> You don't need to print the right call.
>> Oh my gosh, guys. That's so stupid of me. Why the hell did I print it?
>> You shouldn't see the that thing now.
>> Okay, speaking of which drill 23 completed, >> this matters. One drill left.
Freddy, wait. After 23, doesn't Isn't Isn't it supposed to be 24 or are we straight moving on to 25?
>> Maybe, maybe not. Let's see. I mean, either way, it's fine. I got a nice idea as to what this does. I finally feel confident moving on to the next topic. I also understand generators. Now, the only thing that I think I skipped over really fast was decorators.
Last drill. 24 of 25. How is that last?
>> Quick refresher before we go. You've seen at context manager before, but let's sharpen it once since it's been a while. I was just speaking about decorators. Like guys, I think I think Claude can actually listen to me. Okay. Instead of writing a full class, you can use the context manager.
the context managers is decorator with a yield from context library import context manager and then go with that add context manager define my context entering yield exiting with my context print inside entering inside exiting drill 24 using a context manager write a function called html tag that takes tag as a parameter before Yielding prints the tag example di yielding prints the closing tag forward slashdiv or well backward/div with html yada yada and then yada yada last drill before context managers are done. Make it count. How is that last drill? Isn't there supposed to be 25? I mean either way it's fine. It's like just an extra drill.
going to open the instructions in the other window. And now let's go with something like from our context library.
I want to go ahead and import my context manager.
Okay. And then let's use our decorator of our context manager just so we can avoid writing our freaking dunder enter processing and then exit.
Okay, so we're going to go ahead and do something here.
So write a context manager function called HTML tag. When do you have your bedtime? I really don't have a bedtime.
I try to sleep uh early, but then I sleep usually at my either 12 a.m. 1:00 p.m. or 2 p.m. Sometimes even 3 or 4 p.m. It really depends. I got to fix my bedtime here.
>> Okay, let's go with HTML tag. Really depends. The reason I'm sleeping a little late is cuz I got I don't have college right now. But then once my college starts, then I'll have to sleep a little sooner like my let's say 11:00 a.m. by AM. Not bad, guys.
>> That's it. I'm going to go with HTML tag that requires a parameter of tag >> in my tag. Before we yield, I'm going to go ahead and do something.
>> I'm going to go ahead and prevent wrench.
>> Oops. April of ankle braces. Let's go with a di.
And then we're going to go ahead and yield.
For yield, print the tag. after yield prints the closing tag. Okay, so we're going to go ahead and yield our tag and then I'm going to go ahead and print ankle braces forward slashdivess.
>> Okay, perfect. And then test it something like with so I'm going to test it with a web block.
Excuse me, guys. I'm going to go with something like with HTML tag. I'm gonna go with something like my tag name that is called div.
>> Okay. And then we're gonna go ahead and print hello world.
>> And then I'm going to go ahead and add another with HTML here. Let's go with with HTML tag. My tag is going to be called something like H1.
And let me go with something like par.
Welcome. [music] Welcome everyone.
>> There we go. And then I'm just going to go ahead and hit control S control.
>> We get DIIV. Hello world. DIV.
I needed an H1 before we really went with this stuff. Therefore, >> maybe because I have my DIV program here.
EV H1 yada yada.
>> Oh, wait. My bad. My bad. My bad. My bad. My bad. This is going to be H1.
Oh.
Huh.
Hold on.
It always starts as a diiv. It does not start.
Oh, >> I see. This is going to be my tag.
>> That is going to be my F string.
>> There we go.
>> Okay. No wonder. I was like I was like, what is going on here? Like it it seems like it's it seems like something was fishy here.
>> There we go. Control Sliv.
Hello world. Div H1. Welcome H1.
Crl + C. I'm going to go ahead and copy that. Let's go ahead and get our plot up here real quick. I'm going to zoom out.
And then we're going to go ahead and paste this here and say something like done exclamation.
Okay. Once we're done, we're going to go ahead and send that out real quick.
Drill 24 complete. First try. Drill 24 official notes. Use add context manager to wrap content in HTML opening and closing tags automatically.
>> Okay, a usage example with HTML. We do this, that, all that stuff.
Okay, context managers completed. Let's go. Next up, async asynco and async/ wait.
How do we pronounce those?
Interesting, guys. Hold on. Okay, guys.
We're we're moving on to the new topic finally.
Quick pronunciation, guys. So it's aso >> and async >> async aso and await async and await are easy ones. You'll hear those everywhere >> in the dev world. Aineo trips people up most times. You'll sometimes hear people saying ACO2.
Okay, that's acceptable. But AC A. Okay, you know what? Let me just go ahead and get this inside the freaking Google Speaks.
>> Paste it.
>> Pronunciation.
>> Um Hold up, guys. Let me let me get it so you guys can listen to it, too. Then we have a seno. Okay, you know what? I guess let's just go to something like English to Japanese.
There we go. Let's hit tab. And then now I'm going to go ahead and paste this.
Uhhuh.
Guys, ain't that genius? Isn't this genius? Listen. Okay, hear this. Let me just go back up here.
And yeah, I did want to learn Japanese.
It's kind of it's kind of like a fun language here. It's like moi mushi, guys. Or it's moshi moshi. That's it.
Let me just go ahead and mute my gameplay music. And then I'm going to go and let's say go to my webcam real quick. What the hell? I'm going to decrease some of my gain. It's like way too sunny out here.
There we go. Okay, now let's let's go ahead and listen to this. Me open my desktop audio.
Essentio.
Okay, wait. We need to learn the English one.
>> Essentio.
>> Essentio. Right. What is the next one?
So, one is essential.
Essential.
And then what is this called?
>> Async.
>> Assentio. Async. And this is a weight, right?
Await.
>> Okay. So, essential async and await. Got it. Okay. Let me say something like ah I see. Got it. Exclamation. And then let's go out and send it. Okay. Let me just get my gameplay music back on now.
Great work today. You seriously did all this stuff and you come back. I am ready before my next stream. I want to get an idea as to what they do. So, we can start working on it from today.
>> Okay. And then let's set it cuz guys, the more stuff you do, the better you get.
>> Ensio.
There we go. Essential.
Okay. Essential. Async/await.
the big picture, the problem it solves.
Right now, all your code runs one line at a time. It waits for each thing to finish before moving on. This is called synchronous code. I see. This takes three total. This takes 3 seconds total.
Each step blocks everything. Okay. What if you could start all three at the same time and finish in 1 second instead of 3 seconds? That's what centio does.
The real world analogy. Think of a waiter at a restaurant. A bad waiter.
Synchronous takes order from table one, walks to kitchen, stands there waiting, brings food back, then goes to table two. Good waiter.
A centurion.
Guys, I'm butchering these names out here. That's it. takes order from table one, sends it to kitchen, takes order from table two, sends it, brings food to whoever is ready first. What the call looks like. So we import aso and then we go with async define greet async equals this function can pause await async asentio dot sleep 1 second wait equals to pause here do not go to the other thing. Hey, print hello >> and then essential. Greet starts the async engine. Why it matters for your goal? Your future AI agents will be doing three things. Calling five APIs at the same time, waiting for multiple LLM responses simultaneously, running multiple agents in parallel. I see. Without asentino, they'll do it without asent. They do all of that one at a time. Slow and useless with a centeneal. They run concurrently fast and powerful. That's all you need to know. Say the words when you're ready.
>> Okay, I am ready. But I have a brief >> understanding of the syntaxes.
>> I am not fluent.
at them. I'm not fluent with them >> at all.
>> Okay. And then let's set it real quick.
Yeah. Not really as fluent with your syntaxes here.
>> That's it. That's it. Perfect. Let's build the foundation first. We're going to go one concept at a time. No rules just yet. Just understanding concept one, async define. Putting a sync in front of define makes a function a >> co routine. A function that can pause.
Normal function run start to finish. No pausing. Define greet print hello. A quarantine can pause when it needs to wait. A sync define greet print hello. A quarantine doesn't run immediately when you call it. It just creates an object.
You need to actually run it. That's where await and async.1 comes in. Concept two, await. Await means pause this function here and go do other things until it's done. Import async to Neo. Async define greet.
Pause when >> pause when what?
Pause when it needs to wait. There we go. So, async define breed when you need to wait.
>> Bridge before await. Async in Neo. 1 second. Pause here for 1 second. Resume after the pause. You can only use await inside async def function never outside. Concept three. Async in Neo. This is the engine starter. It takes your code routine and actually runs it. Import async.
>> Async define greet print hello. Async.un greet. This actually executes it.
Without async.
Nothing happens. Concept four. Async.
The async version of time. The key difference. Import time asynch.
1 second blocks everything. Nothing else can run.
>> Oh, wait. Async. One >> pauses the function. Other things can run. Oh, time. Stops the entire program.
Asynchrono.
Only pauses the function. Everything else can run.
>> This is the whole point. Time. Sleep freezes your program. Async. Just freezes one task while others keep going. Concept five. Async.
This is where the magic happens. Run multiple core routines at the same time.
Import async.
Async define task one. Await async. One.
Print task one. Done. Async define task two. Await async. One. Print task two.
Done. Async define main await async inogather task one task two both run simultaneously async ino.1 main full picture in one block import async ino async define task wo name seco name seconds print await async sleeps pause let others run define main asynch Can you gather A B C async run main A starting B starting C starting A done C done B done oh >> quick cheat sheets syntax the async define await async run async sleep async gather type that out the final point run it and tell me what you observe okay let's let's let's get it I'm going to grab plot in the other window just I can use it as a reference.
>> And yeah, I'm not really going to go all that in deep um on this topic right now cuz this is the stuff for next stream.
However, I will be working just a tad bit.
There we go. All right. So, let's go with control A. I'm going to go ahead and import my async. So, as y cio.
>> Okay. And then we're going to go with AS Y N C >> AS Y and C. Okay. So I'm going to go with async define test which is going to go ahead and require a parameter of name and a parameter of seconds. S E C O N Ds.A.
>> Okay. And then we're going to go ahead and let's say print. I'm going to go ahead and print something like an F string calls a name starting >> and then we're going to go ahead and await async async and Neil dot sleep which is going to be my seconds sleep for this much seconds and then we're going to go ahead and print an string something like name is going to say something like done.
Okay, perfect. And then next up, let's go with something like async.
>> Define main.
>> My main function is going to go ahead and have an await as well of asynch.
>> I want to gather everything. Let's say um my tasks function. I want to go ahead and gather my task A which is 1 second.
That's going to be task.
And then I'm going to go with something like task B, which is going to be 2 seconds.
And then I'm going to go with something like task C, which is going to be 1 second.
Okay. And then let's go with something like async one.
I want to run my main function. Okay, let's hit control S control 10.
>> Wow.
Starting. Starting starting. Done. Wait, wait, wait, wait. I want to see it again.
So, it says what the hell there.
So it says starting starting starting A and C done and then B done. Oh, it gives me what's done first and then let's paste it.
Paste and say ah I see it gives me what's done first.
However, I am not that fluent with the syntaxes.
Therefore, I will be working more on it next stream.
Okay, this stream was just a refresher and all that. So, that's it. Let me go ahead and move on to my main camera. And what the hell is wrong with my webcam, guys? I wish I had like auto adjustment like which automatically configures my freaking video. That's it. Let's just go ahead and increase that. Nice.
And then I'm going to decay. All righty, guys. So, basically, that was pretty much it for the stream. I did. I was like done with my context manager this stream finally. And next stream I'm going to be working with async async and awaits. Therefore, if you guys did enjoy the stream, don't forget to like it.
Don't forget to smash that like button, subscribe with the notifications bell turned on, and also share because liking up to my algorithm sharing makes you smile. and subscribe with a picture on top. That said, I will start mon streaming on Twitch and g once again as soon as I get a better graph discord and I'm going to go ahead and subscribe on I mean start streaming on Instagram and Tik Tok as well. If I did meet the followers requirement. So, if you guys do enjoy my content and haven't followed me there, make sure to follow me there.
The link is going in the description.
The link is going to be in the bio. You guys can get access to my socials. Now, here's the tricky part. by typing exclamation and the socials's name because before I just had like exclamation socials that gave me all my socials, but I sort of changed it. For example, if I were to go uh let me actually open my stream down here real quick. I don't really have it open on my uh PC. I have it open on my phone. All right, guys. Let me show it to you guys real quick.
All right, guys. Give me a sec. I'm opening it real quick and then I'm just going to go ahead and do that. did all of that.
Okay, there, there, there. All right, perfect.
Now, let me go back to my game play screen.
I'm going to go ahead and grab this here.
Okay, so you guys can basically just go ahead and type something like exclamation Instagram.
Oh god, guys, I'm so slow at typing. And it's going to give you guys the Instagram. If you type something like exclamation discord, you get Discord.
Exclamation Twitch, you get Twitch.
Exclamation [music] kick, you get kick.
You guys get the gist of it. Going to go ahead and exit that for the time being.
That's it.
Also, make sure to join the Discord server. That's where I usually talk to you guys, chat with you guys, have a conversation with you guys. The link is going to be in the description. The link is going to be in the bio. You guys can get access to the Discord server by typing exclamation discord on chat. And if you guys do want access to the road map that I'm using for the series, make sure to join the discord server and then either mention me on the Python uh in the Python chat or the coding chat. I will be personally DMing you guys the road map. That said, I'll catch you guys in the live streamer video. I forgot to go to my main camera. That said, I'll catch you guys in my next live streamer video. Peace. Okay, now it's in the stream.
Videos Relacionados
Ubuntu Touch Q&A 190
UBports
241 views•2026-05-17
Learning k8s ep. 3 - The end of the VM
devcentral
102 views•2026-05-15
Iterators and Generators: Real Use Cases
jsmentor-uk
188 views•2026-05-17
TCS NQT Coding Questions Solution (One Shot) | TCS NQT Preparation 2027 | TCS Actual PYQ 2026
knacademy20
2K views•2026-05-17
The 4 Bit AI Training Trick
explaquiz
414 views•2026-05-19
Image to 3D World Workflow 👀
badxstudio
843 views•2026-05-16
Why Learn Algorithms in the AI Era
bitsandproofs
245 views•2026-05-17
NFA - Transition Diagram and Transition Table
nesoacademy
198 views•2026-05-19











