Okay, this is going to be a very, very boring recording, because it's not slides, it's, it's, it's just going to be me at the terminal. Okay, we better get rid of those. Big expert tip. Right, how to list all your containers out so you can get rid of them. You can see Alex ELS does that if you go minus C for columns, right, I can just list the name, name, and they just get names of my containers. I'm going to have all of the fancy ASCII boxes around them. You can say this them in CSV format. And I just get the list of them like that. That's useful, because now I can make a full loop of that. For C in, we're getting into programming now. For C in that list of containers. See, let's just delete it. Okay, that's just a little bit of scripting. Run through all my containers and delete them all. It's slightly quicker for me to write the full loop than it is for me to type Alex delete for each of them. We're back to here. All right, no containers. Okay, so I think Stephen showed you yesterday how you'd start off by, by going jit clone to get these, get these scripts here and you start off by going into .fig and creating yourself a file containers.json, which you just copy off the sample. A little tip, if you're struggling with DNS. I actually discovered this is quite useful to do for demos. If you make a linnode container, then linnode provide you with a, okay, admittedly, slightly, slightly different name on the DNS server already. So if I don't want to waste my calls, I have this thing registered as serveracademy.dhs2.org. But if I keep asking for certificates for serveracademy.dhs2.org, in the end, let's encrypt are going to say I'm making too many requests. And if I make too many requests for the dhs2.org domain, it'll mean that other people who are trying to do serious things will also be, will reach that limit. And then let's encrypt basically bans you for a week from making any more requests. Sometimes it's useful just to use the linnode-provided fully qualified domain name instead of using my own DNS. For demo purposes, this is fine. So basically you take this file and you only want to make three changes in it. You want to change the fully qualified main name, whatever it is, is your main name. Email address, this is just used for the SSL request. Time zone is important. You should set your time zone, partly because it's very disruptive to set it afterwards, right? After your dhs has been running for a while, then you change the time zone, all the logs get a bit confusing. The other thing is quite important to make sure that all your containers are set onto the same time zone. And that's why we put it in there. If you want to know what's a valid time zone to use, they don't always, I'm still running as root here. Time data control commands, you can, one of the things you can do, I think is list time zones. And I can pick where I am, Africa, Accra. These are the time zones that my system knows about. We pick one of those, put it in there, whichever one is suited to your environment. Once you have that config file set up properly, then you can run this and basically it's just going to run through your config file and make the containers. Now, the scripts that do this are, I don't know, a little bit ugly, I suppose. They're a bit fragile. I keep trying to make them more robust and then find other edge cases that cause them to prank again. Anybody who's familiar with Ansible will realize that basically what I've done here is recreate what Ansible does really well anyway. So one of the things I hope to do and shortly of the next couple of weeks is to remove this create container script. I won't remove it, it might still be called a create container script, but instead of working off this config file, we'll instead turn it into an Ansible inventory and create the containers that way. It doesn't make any difference in terms of what you end up being set up. It's just really the scripts to create the stuff in the first place. Having them all in an Ansible inventory does also provide you with some additional maintenance advantages as well. For the moment, this is how it goes. It's good to run this commander's suit because there's a few things it needs to do, like setting firewall rules and the like that it will fail otherwise. The actual setup, depending on your network where you are, if you're on a cloud server should be reasonably quick, takes I think about five minutes. So we can just talk over it while that's happening. It's going to create three base containers. It'll create your reverse proxy container with Apache 2 in it currently. It'll create a database container. I've changed this very, very recently so that it will create a container running Postgres 13. I've discovered that slightly slower setup time is a bit slower Postgres 13. Because it has to get the, it gets the Postgres packages from the official Postgres repository. And for some reason that one seems to be slower. So instead of five minutes, it might be six or seven minutes. We'll see. Now you can do all of this manually, right? In fact, you don't have to follow my scripts at all. The only advantage, I guess, of going through, I've put a lot of time and effort into configuring the machines, particularly with reasonable security in mind. And some of those steps, if you do it manually, you get lazy, you don't, or you don't remember or you make mistakes or whatever it might be. That's not the reason for automating the setup. People always ask for easy setup. So either setup.exe. The point about an easy setup isn't to make it easy for dummies, right? Setup for dummies, anybody can do it. You don't need to know anything.  That's not the reason for making it easy to do. The reason for making it easy, easy to do is so that you can repeatedly install containers that are set up exactly the way that you've specified them to be. So, and from a security perspective, it stops you from getting to do critical things. It's also useful for disaster recovery if you want to get your system back up and running really quickly. If you want to type all of the commands here by hand, it will take you a day to do it instead of five minutes to do it. So, yeah, this looks like it's nearly done. Okay, it's got to make the monitor. So hopefully Stephen ran through this with you yesterday and didn't hit too many issues.  Then from there, we can start creating Tomcat containers and running DHS. Before we do that, I guess we need to put the SSL on proxy. That's a step that causes lots of grief. I probably the number one problem I've had with people installing these things in the field.  You've got to be really careful and work methodically, right, to make sure that your system is not hiding behind some kind of firewall. Make sure everything is set up and your web server is available. Before you even attempt to do the SSL, right, make sure your domain is working. And that's what we're going to do now. Let's just have a quick look. Here's my containers, kind of brief word about IP addresses. You could change these, but I don't advise that you do because I might still have a few, a few hard coded indices that need to be fixed. Always run the proxy, zero to monitors running on zero 30, and this grass is running on zero 20. When I make my DHS two instances, I tend to make them the first one on 10, the next one on 11, the next one on 12, the next one on 13, etc. It doesn't really matter what IP addresses you choose for your Tomcat containers, but it's just, it's just a convention, I guess, if I keep them all 10, 11, 12, 13, etc. Then it's very easy for me to see what they are. So you can put your Tomcat containers on any IP address ring. These three you should as far as but to keep them as the ones that we have set here for the moment. Don't get too adventurous changing the IP addresses. Some things might break. Okay, I talked a little bit about, about firewall settings. Have a look in on each of these, on each of these. Let's go into postgres for example. We should see that my postgres should be running on five four three two. Another service running as well on four nine four nine. That's the moon in the node. And if I look at the firewall status firewall should be enabled. On which container and with fairly minimal rules so currently the default setting on my postgres container is you can't reach it at all. The only thing that can reach it is the monitor. Right, so we know it's listening on five four three two, but there's nothing, the firewall currently would block any access to it. So that's deliberate. When we create a new Tomcat container part of the process of creating Tomcat container you see will open up a firewall specifically for that container. Before we do Tomcat containers let's quickly set up the SSL. I need to remember the main name that I'm going to use. Right, at the moment my proxy should be running I should be able to access it but it won't have any SSL on it. Let's go here. And there it is right you're just seeing them. You're going to default page. That's a really important test to do before you try to set up your SSL make sure that you can actually access the proxy container, because part of the process of requesting the certificate involves let's encrypt trying to call back to make sure that you are indeed who you say you are. And if, if it can't reach you it's going to fail to issue the certificate. And if it fails more than five times something like that. Actually I have a page here. You can Google rate limits on let's encrypt it will get you to this page. It will tell you how many times you can try. After that it's going to ban you and you can be stuck for another week before you can get going again. So, yeah, a quick test. Right. Little warning to make sure you've done that test. Now I know that my container is actually reachable. Yes, the reason why it's reachable is because of this part of the script has done this behind your back. The firewall rule, this is running on the host, which says anything coming in on port 80 send it straight through to the proxy. Similarly, anything coming through 443 send it straight through to the proxy 443. That's the reason why, even though my proxy is running in internally there on 192 16802, I'm able to reach it from outside, because my firewall is forwarding the connection. Okay, I'm happy now that proxy is working. What you might find, particularly if you're setting this up on a, on a kind of physical network, maybe in your national data center or whatever it might be, you might find that you're getting blocked by an external firewall. So you want to verify all of those things first before you try to run the SSL setup. Okay, you can do this manually. I've always done it manually until on the weekend I made a little script to make it easy for you. But however you can have a look yourself see what script does, but basically it's just going to go. First of all, it's going to give me a big warning. Right, it's going to tell me all the things that I just told you, right. Don't don't proceed unless you can access it with your browser. If you've checked, we can access it with the browser. So let's go one. I don't know how much people are people's understandings of SSL will vary, but basically what happens here is that we generate the certificate signing request, the certificate signing request is sent off to let's encrypt, let's encrypt verifies the way it verifies to see whether it can access your server. After it's done that, it'll issue you the certificate and you get congratulations notice. And then we do a little bit of reconfiguration on Apache. It looks like I might have. Okay. That's interesting. I have a little error in there. I don't have anybody check this. Is it running. The other thing it should have done is it should have enabled my not available. It's, it's enabled this configuration here, which is the configuration that we need to run the HS to so if I go back to where I was. I reload this page again. It's time it should come back and we get a little lock in the corner there to say that we have a certificate valid certificate. It's issued to this main and it's valid from today for another three months. Okay, there's a whole lot of configuration of the SSL settings in the city which have gone on in the background we can check them well. We're talking I'll just check SSL labs is usually where I go to check. Where's the URL it's this one copy. The idea to test it and give you some ideas about things you might have got wrong. It takes a couple of minutes. Oh, you have too many assessments. 12 assessments in progress. That doesn't make sense. That's lying. Maybe it's because it's on a lindoed. Maybe lindoed lindoed. I've got too many assessments in progress. If I set it up as server Academy idea we can try it again later. I did check it over the weekend and SSL labs comes back and gives us an A plus for the certificate to tell me what you want to see. Okay, we're going to talk a little bit more about the Tom cat. They did probably in our session next week so I don't want to go into a lot of detail yet. Let's just jump straight to the next thing you want to do is to install. Service scripts. You can see I've run this before it's got a few things. And then we can start running it to specific. Create an instance create an instance. If I just do that and give me some options. Let's create an instance called HMIS it's common enough one can be specific about the IP address. Or I think it should as a default if I don't specify it might have more than one postgres container. But let's also specify the postgres container just to be sure. And that's what's it's going to do is going to make me a database. I'm going to talk about making a database of databases in the next session. And it's going to create me a Ubuntu based container again. It's going to put Tomcat on it. And the Ubuntu security settings on Tomcat are really very, very good. And one of the things that I've done with I tried to do with most of them I think I'm saying yesterday. I've gone through the CIS security checklists for things like Tomcat and there's so many things to set up in terms of file permissions and the like, which. Yeah, I don't know the Ubuntu installation does a much better job than certainly any of the dockers that I've seen. I could probably roll my own, but I like the I like the setup that Ubuntu has done on it. We've made a few extras, made a few extra settings I'll actually show you that in a bit but let's let's get a DHS up and running on it first.  Let's go with the latest and greatest. Public health warning by the way, if you're working with a production instance, don't run this 235.1 war file, it's got some issues with it. There is a new release, which is due out this week, which fixes a lot of things. So my advice to you is to stick around with 234 until this new release comes out. When I deploy a war file, I'm going to play a link. That's what the minus L is. My war file from there and deploy it to what do they call my instance, HMIS I think. That didn't look like it deployed. Is this what Gerald was talking about the other day? That doesn't look like it deployed it. I'm going to introduce a bug. I'll load the war file. It's meant to do this. It unzipped it. I didn't see any of that. I just got downloaded the war file. Not getting a, it's because of this. No, it's past all of that. It was this. It always happens when you're being recorded. Did Steven have a problem with this yesterday? No, Bob, yesterday I didn't have a problem. I think I used the pseudo and was able to deploy. Unless you modified something. Yeah, but yesterday it worked well using pseudo. I shouldn't have to. I don't think. Let's try it. I like this action straight away. What have I done? What have I done? It always works. What have I done? I think maybe it's deployed to a very, very simple script. I did a bit more help text on here. Wasn't there before? I wonder if that's causing you a problem. Because we get as far as here. In our instance, get as far as there. I wonder if it's this exit. It's trying to be clever. I think it's exit. This is being triggered, right? Yeah, maybe I probably made that mistake yesterday afternoon. When I got locked out. I was sitting here at home, didn't know what to do. Started making a few fixes and that obviously wasn't a fix. That broke it. Okay, there's our HMIS container. It says that it's running. I've got a very useful command. Looking at the logs minus F means to follow the log on HMIS. We should see it coming up. There's our DHS to starting. I'm going to advise you strongly that you use this DHS to log view command rather than trawling around looking for Catalina dot out because it's got a lot of this DHS. We just quit for the moment. The Tomcat on Ubuntu is using the journal, the system journal for logging, right? And the system journal gives you lots of one of the nice options. I mean minus F as you've seen is just to follow the log. That'd be like tail minus F Catalina dot out. You can also say just show me all the logs for today. And it'll show me today's log. You can also say show me the logs upside down. Sometimes you want to see what happened more recently first rather than what happened ages ago. It'll show you the log upside down so you can see the service started up and this is what happened before the service started up. We'll have that opportunity, I think, to talk about logging and logging command later. It's a very flexible way of looking at your logs. If you're looking for something that happened that's at 1045 today, you can isolate time periods. It's the kind of thing it's a little bit trickier to do with. You can say show me everything that's happened since 1045 until 1046. So you can look at a time period in your log. You need to say which DHS instance I want to look at. It'll show me just that one minute's worth of log from 1045 through to 1046, hopefully. That's the last thing that happened. So it seems like it started up. It seems like it's running. Let's see if we can find it. Where did I go to it here? So each instance, once you create an instance, it'll appear like that all day. There we go. With its own name after the URL. Now, obviously, in a production environment, you probably don't want to see the actual landing page every time, like this. Like this. That looked very amateur. There are two approaches people tend to do on it. One is they just customized page, particularly places which are running quite a lot of DHS to instances to make like a little menu here with a little bit of background or whatever you want. Different systems are. You can do that. You can customize this page or you can just decide which of your Tomcat instances you want to appear as the default. I've got a little line. You just need to comment out to do that. Let's just do that one last thing. I'm going to lead the installation alone. So. Quick health warning. I introduced a bug into DHS to long view yesterday afternoon when I was offline. I'm going to fix that in the next five minutes. But let's first of all, it's that extra exit in there that I didn't want to see. If I go into my property. And I go into. No. Somewhere down here. There we go. I've got a rewrite rule that's committed out. Sometimes it's something that people really want to do. Rewrite everything that comes to the roots. Make that instead go to my. To my S. I'll get rid of the landing page because every time I try to get to the landing page instead, it's going to send me there. Let's just reload it. Generally with Apache also with engine X. When you make these configuration settings, it's not usually necessary to restart the server. Just need to reload it. Let's go back here. If I load to URL again, it should just redirect me. Yeah. Okay, so the Apache landing page is gone. So as I people take one of two approaches. They're either going to do that or they're going to create a custom landing page for it. Well, we're at it. We can't. It's not going to allow me, is it? Yeah, that's a shame. I really wanted to show you that we got an A plus on that. I'd have to put it back to server academy. Okay. Let's. Lessies. That's. Basically the. Kind of installation and setup process. What we're going to go on to be talking about over the coming sessions and over the coming weeks is now what you do with it. Right. How you maintain it. One of the things to consider. What kind of extra things you might need to do. But to actually just get up and running. That's what's involved. I did. To show you a little bit of firewall rules. I'll just do that. If we look at our. Instance. Instance. This is our. Instance is running there now. You'll see that. We are allowing access to the Tomcat that's running all 8080. We're allowing it from the proxy. And we're also allowing it. In fact, from the host machine reason for allowing it from the host is just sometimes you want to do curls and W get some things from the host. It's just convenient. But otherwise. If I create two containers, they won't be able to access the 8080 on each of them. The only thing that can really access your 8080 is your proxy. Similarly, if we look in the database. I'll talk about a lot of databases. Next. You can see that we've got a firewall rule now, which will allow. Access. The database from that container. Has to be able to get through the firewall. So make a rule for it. But in addition to that. You know that. Generally the. Missions on postgres. Access controls are set in here. You see, we've got a little line in here, which says that the HMIS user. Is allowed to access the HMIS database. If he's coming from this particular IP address. And we've MD5, which is providing a username and password. As happens with our JDBC connector. So yeah, all these little things, you know, if you're doing them manually. It's quite hard, but if you're doing it automatically, you can set up fairly tight security rules between your containers. Okay. That's a second run through. Set up. And the reason why the second run run through is slightly different to yesterday is because I made a supposed fix yesterday, which I now need to fix again. And that I see Gerald has been complaining. That the LSD, the DHS to deploy war doesn't work. Sorry, Gerald. You've just found the same problem I've been having as well. I'll see you in the afternoon. I'll fix it again. I'll say the next couple of minutes. If there's any other questions on installation. Has anything been in slack while I was talking? No, we see the issue. Yes, Gerald. Yes, you were not going mad. You were absolutely right. Sorry about that. Just as a, as a general, but I don't have more to ask me this once before have long term. Once you've got everything installed. I need to share my screen again. Just going to do this for two minutes. Once you have everything installed. Yeah. It's a good idea. This is why I'm going to ask you to do in a short time. It's a good idea to regularly just do a. It's up to date. Because one of the things that I mean, like in this case that I'm going to make that a regular fixes to or improvements to. We'll include, in fact, the Unix man pages, which are coming. That script is sitting here. It's in there, right under the service script. In a couple of minutes after I fixed it, I will commit it to JIT hub. You just need to just run JIT pool again. And it's going to update your service scripts. And then you just need to run this again. That'll make sure that you always have the most current version of the service scripts. It won't overwrite settings that you've already made. Right. It will do. It will overwrite the service scripts with the latest versions. And I think I'm going to fix that in the next five or 10 minutes during the break.


What's up everybody? Ricky Karuth here. Welcome back to my channel. So today I want to go through my four-question sales script. Okay, with everything crazy going on in the world right now, I want to give you this script so you can get out there and feel comfortable about approaching prospects and our intentions to actually help them. And this will help you build your business and take yourselves to a completely different level. I also want to link a video below. It's my actual earnings as a real estate agent. This is something I did about a year ago. However, it really breaks down my numbers, okay, and gives you a little bit of credibility for myself that I know exactly what I'm talking about, that I've been there, that I've done that. Everything that I'm teaching you in all my videos is through trial and error. It's things I wish I would have known when I started sales or even 10 years into sales. I've been through anything you can imagine. It's been an incredible journey and a complete roller coaster. Imagine this. Imagine getting into sales at 20 years old, making a million dollars a lot of time. You're 23, okay, and then getting kicked back down to the bottom, okay, losing everything, going back to roofing houses, sleeping in my car, going bankrupt, and getting a job on an oil rig. Okay, only to read a hundred books and get back in the business because I realized exactly what I did wrong from day one. What I did wrong from day one was I was focused on the deals. I was focused on the money, the closings, trying to get people to do deals. I was not focused on the actual person, okay, the human being, okay, who needed help through the process. I was not concerned with trying to create relationships short and long term. I wasn't concerned with trying to make a good impression so that we can get tons of referrals later. Okay, I wasn't concerned with any of this and this is literally why I lost everything and my biggest mistake as a young salesman. So as I got back in the business and I worked my way back up to the top, okay, I had to start focusing on relationships. I had to build my foundation on people, not deals and money, okay, and there within I built a strong, okay, a super strong database full of people who know me, like me, and trust me at the highest level and will be loyal for the rest of their life and send me all the referrals in the world that they can possibly send me. This is the kind of business that I have. This is the kind of business that you want and this is the kind of business that I want to teach you to build. So through trial and error, okay, of making over 100,000 cold calls, okay, I made over 100,000 cold calls in my career. I haven't made a cold call in the last four years, but up to that point I made 100,000 to build my business, to get it where I wanted it to be. And through all the trial and error of going through that process, I developed this four question cell script. And if you haven't seen it already, I'll link another video below. It's everything that I learned from making those 100,000 calls. It's an incredible video. You're going to get a lot of value out of that one as well. So I have two videos linked below. It's my actual earnings as a real estate agent and everything I learned from making 100,000 cold calls. Now let's get into this four question cell script, okay. Question number one is, how are you doing? Okay, this is the magic question. This is the most basic. This is so simple.  It's a question everybody knows. Okay, but nobody really knows how to use it and how important it is in the conversation. Okay, so here's how the conversation should start. Hey, Mr. Johnson, you know, you try to figure out who we're talking to. Make sure we're talking to the right person. Okay, Mr. Johnson. Hey, Mr. Johnson, it's Ricky Krooth down here at EXP Realty. How you doing today? Okay, there it is right there. Okay, every question that we ask, we're going to stop, allow them to respond. Okay, pause, give them a moment, let them respond and listen. You need to use the 80-20 rule when you're talking to prospects. Okay, when you're on a sales call. Okay, 80-20. You should talk 20% of the time and listen 80% of the time or let them talk 80% of the time. Most salespeople, a lot of salespeople, they talk 80% of the time of the conversation, right, and allow the prospect to only talk 20% of the time. Okay, this is an imbalance and a very bad one. Okay, and a lot of salespeople talk theirself out of the deal. Okay, you don't want to do that. You want to talk less and listen more. And let me break it down even further. Out of the 20% that you're talking, 80% of that should be of you asking questions. Okay, so most of the time that you're talking should be you asking questions, looking for a response. Not you rambling on. Not you telling all this and all that. Okay, we need to be asking questions and letting them respond and listening. Okay, and that's going to prompt our next question. So our second question of the four is going to be kind of outlive. Okay, it's going to kind of be spur of the moment. All right, what I like my go-to here is after I ask them how they're doing and then they tell me, I say, oh good, me too. I'm just enjoying the day. Isn't it gorgeous? Okay, so most of the time when you say how you doing, they're going to say good. If they say not good, we're going to say, oh man, I hate to hear that and we're going to go straight to the third question. Okay, but as far as the second question is concerned, my go-to is I'm enjoying the day. Isn't it gorgeous? Right, me too. I'm doing good too. I'm just enjoying the day. Isn't it gorgeous outside? So I'm talking about the weather. Okay, and everyone can relate to the weather. A lot of times I get into these conversations and this part of the call ends up lasting several minutes because we start talking about the weather. Okay, they want to know about the weather. They talk about the weather. They predict the weather, you know, so on and so forth, but it doesn't have to be about the weather. Let's make that clear. The second question does not have to be about the weather. Okay, a lot of people get stumped right here. They say, oh Ricky, the weather part of the call feels so unnatural. Okay, and I just can't seem to get myself to do it, but this question, the second question is one of the most important questions because why we're not diving right into a sales question. We're not diving right into the meat of the sales part of this call. Okay, we're giving them a second to kind of ease into it and it breaks the tension. Okay, a lot of people want to skip over this part because they feel like there's tension. They feel like, you know, the prospect doesn't want to be on the call and so they go right to the sales part because they feel like that small talk is really gonna, you know, make them even more annoyed that we're calling them, which is completely false. Right, if your prospect is feeling tense, if your prospect is feeling annoyed, this is the moment that we use a second question to break that tension. It's so important and you really need to try and be confident. It's not really what you say, it's how you say it and how confident you are and what your intentions really are. So this second question could be anything. It could be, are you getting ready for Christmas? You know, how was your New Year's? How was your Thanksgiving? Okay, it could be something to do with holidays. It could be something to do with something going on in the world. As the pandemic was happening, I was saying, hey, it's crazy out there. How are you guys doing through this? Okay, the way I like to structure the second question is I'm gonna say a statement, a very short statement followed by a very short question. Okay, man, it's been crazy out there. How are you guys doing through this? Okay, I'm enjoying the day. Isn't it gorgeous? A statement and then a question all extremely short. Boom, boom, boom, boom. Okay, short questions, pause, wait for reaction, listen. The second question is so important, okay, to stick it in there because it makes it a real conversation. A conversation is two people who are going back and forth. Ask a question, get a response, ask a question, get a response. That's a conversation back and forth. It doesn't need to be a one-sided conversation. We don't need to go straight into the sales part of the call because this is what's going to open them up and allow them to begin the trusting process of feeling comfortable. Our number one goal with sales calls, number one above everything, even above making the sale and everything else is to make them feel comfortable with us. If they don't feel comfortable with us, there's not going to be any more to the call. There's not going to be any more, you know, parts of the call, we're not going to get to the sale, we're not going to get to the questions, nothing. If they don't feel comfortable with us within those first couple seconds, okay, and then continue to feel comfortable with us through the conversation, we're done right there. The third question, okay, the third question is the magic question. Okay, this is the one that really brings it and it ties everything together. Here it is. What in the world can I do for you? Okay, it's not about what they can do for me. It's not about them doing a transaction so that I can make a commission. It's about what can I do for you? I don't even care if you want to do a sale or not. I don't even care if you want to take action or move forward. I just want to know what I can do for you. I don't care what I can't do for you. I don't care if you don't want to do a sale. I don't care if you don't want to do this or don't want to do that. I want to know what I can do to help you. Not what I can't do. So this is how I lead into the question of what in the world can I do for you? Okay, as soon as we're done with that second question, the answer to the second question, let's just say for example you say, yeah I'm doing good too. I'm enjoying the day. Isn't it gorgeous? You know, or I could say, yeah I'm doing good too. It's raining cats and dogs out there. You're staying dry or it's nasty out there. You're staying dry. Whatever the case may be, it's something that rolls off your tongue. You may tweak what that second question is through your call session. You may get through 20 calls and then switch that second question up and then the next 20 calls have much better results because you found something that was more comfortable or that was working better as far as how how you are you know presenting it, right? So think about that as you as you're going through your call sessions. You can tweak your call sessions and in your script as you go along. But let's say I go with you know I'm doing good too. I'm enjoying the day. Isn't it gorgeous outside? And they say yeah it is doing doing really good outside. What can I do for you? You say I got you. Well look I don't want to take up too much of your time today but then give the reason for your call in terms of what you're calling about. If it's real estate you're talking about hey a house around the corner just sold. Or I just listed a house around the corner, right? If you're selling cell phones or something like that you say oh we have this really good deal on cell phones today, okay? I didn't know if there's anything in the world I could do for you. Okay so let me repeat let me go right through it. As a real estate agent okay I'm gonna say I got you. Well look I don't want to take up too much of your time today but a house around the corner just sold from you and I didn't know if there's anything in the world I could do for you today. Bam again Paul's listen Paul's give them a chance to respond see what they say and listen listen to the response listen to the tone of their voice listen to speed of their voice. Okay you can read a lot into much higher than what they're saying if you really listen okay the speed the hesitation the tone everything matters. So this question what in the world can I do for you is the magic question. Okay this can be used across any platform. You can use this through digital you can use this through email you can use this you know through direct mail you can use this you know voice to voice. This is the magic question because we really want to put intentions behind our voice in our tone when we're asking this question because this is the one that's gonna hopefully help them realize that we are here for them not us. We're not asking them if they want to buy something we're not asking them if I want to sell something. Okay we're not trying to get them to do anything we just want to know what we could do to help and this is what's gonna take your business to another level. And the fourth question the fourth question of this four question script is okay would it be alright if I stayed in touch with you. Okay would it be alright if I stayed in touch with you. Okay this is the icing on the cake. Okay this is the whipped cream on top. Okay this is how we actually capitalize on every situation regardless if we do a deal or not because when we grab that contact information we can then begin the process of going further and deeper with that relationship through a personal brand and this is gonna be the glue that holds everything together. So this is how I'll lead into it when I ask them if there's anything that I can do for them anything in the world. Okay they may respond with I don't know what they're gonna respond with they may respond with yes we're gonna do this or no we're not looking to do anything. Okay either way it goes I want to find out if there's an agent that they would work with if they were to do something or if they are looking to do something. Okay and then I want to ask them you know hey look I'm sure at some point you're gonna do something. Okay in the future I would love the opportunity to just work with you when that day comes. Would it be alright if I just stayed in touch with you. Okay so you want to make this and really give this a personal feel that we just want to personally stay in touch with them. Okay a problem and a mistake I see with a lot of sales people is that when they're asking for the email address they're asking for contact information they're asking to stay in touch they're exuding that they're gonna be sending them a market report or that they want to send them some information or something of that nature and the consumer and the prospect is thinking already get way too much information I don't really want any more information I'm kind of information overload I get plenty emails I get plenty of stuff okay I don't need anymore so thank you but no thank you. However if you approach it like you just want to stay in touch with them okay you just want to stay in touch with them on that personal level then that's a completely different ball game okay and that's gonna give you a much much better opportunity to grab that contact information. Let's say we are selling cell phones okay is there anything in the world I can do for you they're like what well in terms of maybe buying a new phone or upgrading or anything of that nature no we're okay okay cool well look I'm sure at some point in the future you're gonna need a new cell phone I would love the opportunity to stay in touch with you for you know so I can work with you in that day comes would it be alright if I stayed in touch now let's say you are selling cell phones okay and you say hey you know we got a good deal on cell phones today I didn't know if there's anything in the world I can do for you and they're like like what you know what what can you do for me I don't know I don't know if you're looking to maybe upgrade your cell phone soon or looking to buy a new cell phone or what not and they're like no I'm good okay great I'm sure at some point in the future you know you will eventually want to upgrade or buy a new cell phone I would love the opportunity to work with you when that day comes would it be alright if I stayed in touch with you bam okay we're not we haven't asked for anything yet we haven't asked for any email addresses or personal contact information yet we're just asking for permission to stay in touch with them simply just stay in touch with them and of course if you made it this far in the conversation your tone is right in your intentions are right you're you're gonna be in a place where they feel semi comfortable with you even though this is the first call the first time you ever talking okay that's the power of this so once they commit to saying it's okay if you stay in touch with them that's when you say okay great what's a good email address is this your cell number and you make sure you have all their contact information right there in your database so that from that point further they can begin to receive a weekly email from you for the rest of their life I do mind every Wednesday since 2007 it's literally the reason why I'm able to sell 100 properties a year every year since 2014 without a cold call in the last four years the weekly email I built my database around the weekly email built my foundation okay of my business through the weekly email my personal brand okay and this is what has catapulted me above the competition for real estate agents I believe it weekly email is the perfect frequency if you're doing anything less I feel like it's not frequent enough I feel like it's not consistent enough I feel like they're you know it's it's it's losing it's it's luster okay if it's anything less than a week for other businesses maybe by week by monthly maybe monthly okay depending on what business you're in however a consistent email okay that they can expect at the same time every time same frequency okay is a must emails have the highest organic reach out of all platforms except for text messaging and text messaging is on its way up it's not there yet okay and several businesses have begun to use text messaging and mass texting in there in their business I use it myself but it's hasn't went mainstream yet if you need help with content for your weekly email I'm gonna link a third video below about how to structure email all four weeks of the month okay that's really gonna help you it's gonna simplify everything and kind of give you a direction to start in okay guys that's the four questions script let me go through them really quickly it's gonna be how you doing today I'm enjoying the days and a gorgeous what in the world can I do for you and would it be alright if I stayed in touch if you would shoot me a comment below let me know what you think click the like button on your way out to go see those other videos I posted below let me know what questions I can answer for you and what videos you want me to make next and we'll see you guys on the next video let's go


Over the last decade, deep learning has taken the field of AI by storm. Using neural networks, we can now solve a host of problems. To name a few, one problem that we can solve is object detection. Feed the network an image, and it will be able to identify locations of important objects in that image. Another problem we can solve is language translation. Feed a neural network an English sentence, it will spit out the equivalent in French. Another problem that we can solve is audio classification. Feed the neural network a sound wave, and it will determine the object that produced that sound. So if it hears a... It spits out dog, and if it hears... It spits out cat. You can see these problems are quite different. They have completely different input and output variables. However, all of them have one thing in common. In all cases, the neural network will process the input sample, and it will spit out some result that gives us some additional information about the input. So take the case of object detection. We give an input image, and after processing it by the network, we now know what objects are present and where they are located in the image. That's additional information. In the language translation case, we give an input sentence in English, and after processing it by the neural network, we now know how to say the same sentence in another language, like French. That's additional information too. Now in the audio classification case, we feed an audio sample as input, and after processing it by the network, we now know what animal made that sound. The identity of that animal is, again, additional information. However, there are a category of networks that are a bit different. In the sense that they don't merely provide additional information about some input sample, but they also try to create or generate some sample image or audio or text themselves. And this class of neural networks is called generative models, appropriately named. In this video, we're going to go through a particular type of generative model called a variational autoencoder, or a VAE. The explanation will be twofold. I'll start with an easy-to-understand intuition on VAEs. Once we have a firm understanding of them, then we'll compare it to other types of generative models that have been hogging the spotlight recently, generative adversarial networks, GANs. Techie or not, you'll be walking out with newfound knowledge in generative modeling and variational autoencoders. I'm also going to throw in some technical jargon for you extra curious viewers. This is Code Emporium, so let's get started. Let's start out with a broad concept, generative modeling. Generative models are also just neural networks themselves. Normal neural network models usually take some sample as input. And this sample is like raw data. It could be like an image, text, or audio. Generative models, on the other hand, produce a sample as an output. Because of this flip, I think you can see how and why this is so interesting. With this technology, there is so much potential. For example, you can train a model to understand how dogs work by feeding it hundreds of dog images. Then during test time, we can just ask the model for an image, and it'll spit out a dog image. The cool thing is, every time that we ask our model to generate a dog, it'll generate a different dog every time. So you can create an unlimited gallery of your favorite animal. Doggos! Sweet. But what does this generative model black box look like? Let's take a look at this variational autoencoder as an example. As mentioned before, variational autoencoders are a type of generative model. They are based off another type of architecture called autoencoders. These autoencoders consist of two parts, an encoder and a decoder. The encoder takes an input sample and converts its information into some vector, basically a set of numbers. And we have a decoder which takes this vector and expands it out to reconstruct the input sample. Now, you may be thinking, why are we doing this? What is the point of trying to generate an output that is the same as the input? And the answer to that is, there is no point. While using autoencoders, we don't tend to care about the output itself, but rather the vector constructed in the middle. This vector is important because it is a representation of the input image or audio, and it's in a form that the computer understands. So another question. What is so great about this vector? On its own, I'd say the vector itself has limited use, but we can feed it to complex architectures to solve some really cool problems. Here's an example of a paper that uses autoencoders to infer location of an individual based on his or her tweet. This architecture that they use consists of three stacked autoencoders to represent the input text from the tweet. This is then piped to two output layers. One of them is used to determine the state in the United States where the tweet was made, and the other is to estimate the latitude and longitude positions of the user where the tweet was made. I'll link the paper below in case you're extra curious. This is just one of the many interesting examples of what you can actually do with these autoencoders. However, something we cannot do with autoencoders is generate data. Now, why is this the case? Let's go back to the autoencoder architecture. It consists of an encoder and a decoder. During training time, we feed the image's input and make the model learn the encoder and decoder parameters required to reconstruct the image again. During testing time, we only need the decoder part because this is the part that generates the image. To do this, we need to input some vector. However, we have no idea about the nature of this vector. If we just give it some random values, more likely than not, we will end up with an image that looks like garbage. So that's pointless. Now we need some method to determine this hidden vector. Here's some more intuition. The idea behind determining this vector is through sampling from a distribution. I'll explain these basic concepts of sampling and distribution, but I'll also translate that into more technical terms for those of you who are more advanced in probability theory. So distribution and sampling. Think of distribution as a pool, a pool of numbers, vectors. Consider the case where we want to build a generative model to generate different animals. To accomplish this, our generative model needs to learn to create a pool for cats, a pool for dogs, and another pool for giraffes, like so. When I say the dog pool, I don't actually mean a pool that consists of dog images, but instead it consists of some vector representation of these images, and they are only understood by the computer. So in a nutshell, think of distribution as a pool of vectors. Now onto sampling. Sampling is a verb in English. Sampling means just closing your eyes, reaching into a pool, and picking one vector. If you know where the pool is, then you can go to the pool and randomly pick the vector. So when we say I sampled from the distribution of dog images, it's equivalent to saying that we picked a random vector from the dog pool. Pretty simple. Now the problem with general autoencoders is that we as human beings don't really know where these pools are. Imagine this box represents all possible values for the vector, the hidden vector. The cat pool can be here, the dog pool can be here, and the giraffe pool can be somewhere here. Each of these pools is learned by the model during training time. So when we feed hundreds of images of animals, our model will find patterns linking similar dogs, cats, and giraffes, and come up with these pools. Now these pools, or more technically these distributions, are learned internally by the autoencoder. But there is no way for humans to know about these pools to make use of them for generating images. During test time, we are basically sampling from a random distribution. In other words, it's equivalent to blindfolding ourselves and picking a value from this huge box that only consists of valid vectors in very specific locations, and just garbage vectors everywhere else. Thus there's a very high chance that we'll pick a non-relevant garbage vector from which we get a non-relevant garbage output accordingly. So the big takeaway, we cannot generate dog images with an autoencoder because we don't know how to assign values to the vector during the generation phase. We clearly have a problem here. But what if we did know where to pick these vectors from? Then that would solve our problem, right? Variational autoencoders does just that. We first define a region we want to constrain this universe that is constrain the region from which we want to pick the vectors. And within this region, the goal of the variational autoencoder is to find the pools. The dog pool, the cat pool, and the giraffe pool. And this is done during the training phase. During the testing phase, all we need to do now to generate an image is randomly sample a vector from this known region and then pass this vector to the generator part of our variational autoencoder. This will generate an image. A neat property about this region is that it's continuous. So we can just alter some values in the vector to still get valid looking images. Say we train a variational autoencoder to print or generate handwritten digits from 0 through 9. The VAE will learn the pools such that they are within a defined region. Now these pools will represent the 10 digits from 0 to 9, so we'll have to learn 10 pools. The region now in which these pools are learned is continuous. So I can just randomly sample a vector from this continuous region and just change its values ever so slightly. The result of just changing this vector actually leads to very trippy and a psychedelic looking generated images when they're placed next to each other. This is the simple intuition behind variational autoencoders. If you understood this, then congrats. Now let's revise some differences between the general autoencoders and variational autoencoders just to make sure you have a clear understanding what each does. From a more technical perspective though. So first of all, why do each exist? The goal of general autoencoders is to learn a hidden representation of the input. While the goal of a variational autoencoder, although it also learns a hidden representation of the input, it also is used to generate new information. General autoencoders cannot generate new data. Here's another question. What are they optimizing? Autoencoders, the general autoencoders, learn to transform an input into some vector by minimizing reconstruction loss. Now during training, an autoencoder makes sure what is thrown into it is also spit out. In other words, it tries to minimize the difference from the original and the reconstructed images. Hence it seeks to minimize the reconstruction loss. Variational autoencoders, on the other hand, generate images by minimizing the sum of reconstruction loss and a latent loss. Now reconstruction loss is the same as what we define for autoencoders. With latent loss, we ensure that all the pools learned by the network are within the same region that is in the middle that I defined here. For a more technical context, we assume the pools follow a normal or Gaussian distribution. Hence during testing time, they are actually sampled from the mixture of these Gaussians. Now that we have a clear understanding of VAEs, let's see how this compares with a more famous generative model, generative adversarial networks. So first off, how do they learn to generate data? Variational autoencoders have two losses to optimize. The first is reconstruction loss. What goes into the network is also spit out, making sure that there is as little difference as possible. The second is latent loss, that is making sure the latent vector takes only a specific set of values. So we want to know which region to sample this vector from. Optimizing two losses, our variational autoencoder will learn to generate images. Now generative adversarial networks or GANs work a little differently. Like how the VAE has an encoder and decoder architecture, GANs also have two components, a generator and a discriminator. The generator is responsible for generating images, and the discriminator determines whether a given image is either real or fake. By fake, I mean whether it was actually created by the generator. Both generator and discriminators play a minimax game where one tries to outperform the other. The generator will try to generate an image that fools the discriminator, making it think that its image is real. And the discriminator tries to correctly distinguish between the real and fake images, catching the generator with its wits. If one of them messes up, then its architecture is slightly tweaked to improve performance. While looking at thousands of images during training, the generator and discriminator networks improve each other until the generator becomes proficient at generating animal images, and the discriminator becomes proficient at determining real images from fake images generated by the generator. Then during testing time, we can just use the generator to spit out the images that we need. Another aspect that we can compare GANs and VAEs is stability during training. Now, training in GANs involves finding something called a Nash equilibrium that is a point in the game between the generator and discriminator, where the game is set to terminate or that there is an end of game point. However, there is no concrete algorithm to actually determine this equilibrium end of game point yet. On the other hand, VAEs offer a closed form objective. And by closed form, I mean that there is a nice little formula that we can use to determine the end of training phase in variational autoencoders. Now, here's a third aspect from which we can compare GANs and VAEs. How good are the generated images? VAEs work very well in theory, but they tend to generate blurry images. You can mostly attribute this to the fact that VAEs are looking to optimize two factors during the training phase. The reconstruction loss, that is making sure that the output is as close to the input as possible, and the latent loss, that is making sure that the latent vector can only take a fixed range of values. These two factors often counter each other. There's a trade-off. So the middle ground usually leads to blurry image generation. GAN training, on the other hand, is more empirical and optimized by way of trial and error. They just work. You can write down the losses theoretically, but most of the intuition is based on the fact that we had the results before the actual theory. For simple spatial data, like images, GANs produce really high-quality results. I made a video on the evolution of GANs since its inception in 2014, so be sure to check that out after this one. And that's a brief comparison with GANs. There are certainly deeper concepts that I didn't cover, such as the need for the reparameterization trick in variational autoencoders, or explicitly deriving the two losses of a variational autoencoder, the reconstruction and latent loss. However, there are plenty of good blog posts out there outlining these concepts, and I've linked some of these resources below. I hope you got the base intuition of variational autoencoders so that you can now more easily understand any learning resource you pick up from here on. I may make a more mathy technical video on variational autoencoders later if most of you guys requested, but I'll leave it at this for now. Thank you guys so much for watching. Subscribe to Code Emporium and CS Dojo for more videos on machine learning, deep learning, and artificial intelligence. See you in the next one. Bye-bye!


According to what we is provide in our family, deposit and signature serving service. Let's share a few it with another one as we have given partnerships, the means to crappy services such as мне. Not allowing others to accept it.,  Monate ierz 推                                                                                ៤ĤĂṉą boy Ṣlaimeda Ṣozhöl medyaada jaman tenda  Vayvani mČ Mexican Ṣinna pyaar tuši mayn punct Ṭi kart Ṭi kart Ṣaģadi Ṭשami Ṭi kart Ṭi kart Ṭi kart ṭ perspective Ṭi qya Ṭi qya Ṭi qya ౣ 먄 ్hthal beyondifikations, సార్చ౅ా. � cre me tawanawaad karam, స�옢ి గుకార్ aller. ఆం్ estavam! భూగా ! T Philosophy is a very nosotros. You have literally taken you responsibilities. T og విన వాన ఠారం్engine d っా విస్న ు validity is very p laptop గుకి. जिन्नाचर सदे सा चल दे रेंगे पंजाभी माबोली पंजाभी माबोली दी सेवा कर दे रहांगे साटी अथजोड के बेंती है इन्ना को प्यार बक्ष दे रेंगो फुल्लावाली रजाई वरगा


Paraphrasing is basically repeating or re-wording what somebody has said to you back to them, the way you understood it. This very simply shows to the person who you're talking to that you've listened to and understood what they've said and how you can actually say this back is okay so I think I'm hearing and then say it in your own words or I think what you're trying to say is and then finish that with is that accurate? This really really clarifies to the person you're listening to that you have listened because if you're paraphrasing what they've said in your own words the way you've understood it then clearly you've heard what they've said and you've internalized it. This also allows them to correct you if you've misunderstood what they said and it's a very very simple way to get clarity in a conversation so paraphrasing is the first thing you can do when you're doing verbal active listening.


What is happening Magnus Sats? The black bagging is back and ready to react. And this one is true. Real life Peter Griffin goes to New York City. So let's get this on. This should be pretty funny. And let's see who sent this to me. CellTube sent this to me. Thank very much. Let's get the laughs on. It's like going to Disney World but being geek. You go to New York Comic-Con to find out about video games, TV shows, all that kind of stuff. That's what's cool about New York Comic-Con. It's a one stop shop for everything. I do have to check out Comic-Con these days. Here it is.  You're out of my way. Here you go. Every manual and game for $40. Just put on Peter Griffin.  The dress really just came naturally to me. Like almost like an instant. Oh my god. I'm fine. Peter Griffin. Here you go. Oh yeah. So I slapped the other stuff that I had. I happened to have green pants from the back. You see that girl in the referee shirt? I went down shirt because everybody has one. I had round glasses because I do Santa clothes for my company and I slapped it together and it's like great Peter Griffin.  I was like oh my god I won. And from then on it's just been caught like wildfire. I don't know where to look. I'm freaking Matilda to show up. Where are all my He-Man figures? And that's where Bryant might be at. Oh god. Disappointed doctor. Hard and... You said exactly like... Thank you. I appreciate that. I assume that Comic Con a lot of titties is out. You know one in every 12 Americans is unaware that the bird is a word. I for one believe in America where everyone knows that the bird is a word. Bird bird bird. Bird bird. Bird bird bird. Real like Peter Griffin here at New York Comic Con. Top story turn after these messages. What do you want me to do? I'm like what's up Mac? And I would just pick up the voices. And before I realized that I could do like every booty tune. I could do every Muppet. And it just started growing and growing. You don't realize what an impact These voices have. Like if you think of the claw from Inspector Gadget. You don't know who plays the claw. But you know that voice. Right. Nice to meet you, babe. How are you? How are you? How are you? How are you? How are you? How are you? How are you? How are you? How are you? How are you? How are you? How are you? How are you? How are you?  It makes me feel like a million bucks. It's the reaction I get out of what I do. That gives me the joy of what I do. I got another video playing in the background. in the background I could have swore that that was okay there we go had Tariq machine playing in the background while I'm watching this that's pretty good man you know I mean that's kind of how it was for me growing up I would just do certain voices while watching Cartoon like you know what I actually do that pretty good and then you just fall into it you know yeah I got to get the comic con a lot of y'all recently been telling me that I look like Luke Cage that I would make a perfect Luke Cage that's interesting yeah when y'all talk about superheroes I get cyborg and Luke Cage the most and who knows maybe I'll have to do some research on Luke Cage maybe I will go to Comic Con as Luke Cage if not I will be my regular magnificent self Tarun Magnus with subscribers reaching the total of 70,000 strong so I gotta find out where Comic Con is and when it is and when it's coming I guess if they just shot this I guess it was already in New York since he was there in 2014 so let's see what city is coming to closest to me in 2015 and I will see y'all at Comic Con. 1 million subscribers!


Okay. Welcome everybody. I'm Kyle Mastry. This is time to go as well. Yeah, we're here to talk to you about EBPF and XDP and how it will revolutionize the telco 5G space. And so this is our thesis that we have, and we're not going to read through this. We'll let you read through this at your leisure here as well. But ultimately, we're going to try to answer this question at the bottom throughout this presentation. And Tom, we're pretty relevant for this, right? Wouldn't you say in terms of us being able to answer this? Yeah, we've both been sort of up to our eyeballs in and around this area for a while. I worked on the first nationwide open source 5G deployment over the last year and a half. And you've spent a lot of time on EBPF in the last couple of years too. That's right. Yeah. I mean, we've both worked in open source networking projects all the way back from open daylight. From way back when? We switch every all kinds of fun stuff, right? And that's one of the interesting angles here too is the open source meets traditionally proprietary tech, even though there are 3GPP standards. You know, it's kind of the analogy here is very much like SDN was, you know, 10 years ago, whatever that was, where disaggregation of the data and control planes had certain promises that went with it. That's right. 10 or so years later now, we realize what we've got. And so we're trying to overlay that model onto what's going on in 5G. Yeah. By the way, sorry. You can say that's a good segue to jump right into our stuff here. And so as you're going to explain this slide to us, but I, you know, when I look at this as someone, I think, well, can you explain how this 4G is different than 5G? So there's a lot of parts on here. The good news is that 4G and 5G are very similar. 5G is an add-on effectively to 4G with things like, you know, MIMO and more MIMO antenna and certain other things. But one of the more interesting things is in the disaggregation of the components. And we'll get into that in a minute. But like you can see the components here, you know, organizations like ORAN have been working hard to try to open up the interfaces between these different components to truly make them open so they could be implemented by different vendors or implemented as different software components outside of a single device box, for example. So I think if we look at it from this angle, this is kind of another way to interpret that previous slide, but maybe looking at it almost from where would you deploy those components, that perspective. Yeah. And I think this is also, you know, this is showing some of the different options. Again, a lot of you have probably heard about how a lot of these functions are moving to the cloud, even, you know, 5G. We've seen, you know, you've heard about a lot of the deployments that are out there today, which are really on-premise at a telco that's deployed 4G. What's happening today is, as you can see in the picture, some of those functions are actually being worked on to be moved into the cloud, which is interesting, but also brings different challenges. That's right. That's deploying a single box again. Yeah, for sure. For sure. And I think if we start to think about it in terms of, you know, how we got to those previous pictures where you mentioned the word disaggregated a lot. Right? So, you know, how did we get here? And where did we start to get to this disaggregated multi-vendor world? Yeah. And again, this is very much like SDN, right?  That's right. So there's others. But the point is, the stuff that was stored in that proprietary box and integrated together, I mean, there's all of those functions you saw in the previous slides are all integrated in that single box on the left. What we're doing today in the disaggregated mode is, and in open source mode as well, is putting that stuff on commodity servers using commodity NICs, running essentially commodity top or X switches even in that deployment. But what you see the difference here is more, right? There's four things on the right. Well, there's more than four things on the right. There's four racks worth of things on the right versus one thing on the left. And the question comes down to one of complexity, managing that complexity, as well as the costs, you know, which is directly proportional to that. So that's something we'll get into why EBPF actually is going to help this equation. Bring the complexity down. I think so. That's that's our thesis. Remember, I think we can do it. I think we'll figure it out. I think we'll get there. And we'll get there. Right. But, you know, but when we start to look at this as well, right, here's another way of maybe breaking this down. In terms of the different layers and where things might land right and where they're going to exist when you get to that deployment. Yeah, this is this is actually trying to show how that picture a couple slides ago was is now been exploded and what the options are to implement those things. And you can see there are multiple vendor options at each one of these layers, depending on, you know, not just implementing the kind of the straight up ran architecture, the 5G ran architecture, the 5G core architectures that you'll see in the 3GPP docs and whatnot. But even the hybrid cloud deployments that were on the last slide and that's the stuff I worked on. That's really interesting. But what you'll find in those deployments is that the complexity is is is enormous. It's manageable, but it's, it's not free.  So there's a, you know, as you can see, there's a lot of vendor options, but that needs to be managed that used to be kind of managed by a single vendor or single integrator anyway with a few vendors. And now, you know, like the deployment I worked on had two dozen vendors at the party, you know, and that was that's part of managing the complexity. Oh yeah, for sure. And speaking of complexity, I think this slide as well, you know, we've talked, you know, on our podcast, the net dot lol a few times about open source, you know, both in terms of foundations and individual projects and the explosive growth of open source. And I think this slide, just in the context of 5G and open source networking kind of shows that explosion. I mean, look at all these projects, you know, projects are supposed to work together. Yeah, exactly right above right so you can see my point about additional complexity. So this is just the software complexity. There's actually no hardware here. Which is interesting and that to me is like, like you see the little O-Ran box at the top. That is maybe where we can do some software like the RF radio hardware. That's kind of one of the last bastions of the proprietary NIS in this picture. One thing though I wanted to point out too on this slide is that there are a lot of projects and you and I have worked on some pretty massive projects in open source at LF and other places and Yep, there's I don't know a dozen of those projects on here and those projects were hard enough to manage on their own. Now you've got to make them all party together and that that's definitely a challenge in here as well. Yeah, and like you said, we've even before this, we've taken just a few of these individual components and tried to get them to work and yet that proved challenging. You know, but I think, you know, if we're thinking about it from a positive perspective, maybe the various communities and you know folks like ourselves, having had that experience in the past, maybe it gives us a little bit of an edge for some of this, right? And it's about, you know, managing managing the whole thing and I mean if you look, for example, one of the things that I've learned through my experience with these different projects is that the project is I consider the project a super set, right, what you would want to deploy. And like if you look down at the cloud infrastructure box down there with the different networking options that are there. Nobody says you have to implement all of those things to make one of these deployments work. In fact, what we're going to show you is, is you almost don't need any of those with BPF. That's right. And in fact, that's what we're going to talk about if we zoom in using my fancy pointer here on this cloud infrastructure. And we start to look at some of those infrastructure projects specifically on the networking side. I mean, some of these have been around for a while. I mean Docker obviously has but even open v-switch. I mean, open v-switch is over 10 years old now as well. Yeah, OVN, OVS, yeah. OVN, FDIO, all of these things are there, right? And they've obviously served a purpose. They've been successful as well. But, you know, maybe, can we look at something like maybe BPF and XDP to slot in here and can it help address some of these problems? Yeah, let's take a look at that. Let's take a look, right? So I thought I'd give a quick overview and for anyone new on the talk to what EBPF and XDP is.  It's kind of amazing when you think about it. It lets you extend that operating systems kernel and loading some code down there in this sandbox environment to be able to enhance it as well. And even extending the NIC itself too, the NICS functionality. Oh yeah, you can do it at all. And I'll show you in a future slide where you can load the XDP programs, but it's kind of up and down the stat for sure, right? Yep. And I think the obvious reasons why this was kind of conceived and done was because of what maybe some people perceived as a slower rate of innovation in the kernel. The lower, the closer to the hardware you get, the longer the lead time is to roll things out.  I mean, even just think about yourself.  I'm not going to do it now. At least twice today. At least twice today. Exactly, right? One of the other promises of this too is that is either reducing the overall cost of those servers in that picture I showed. That's right. 5G deployment by offloading the CPUs and letting the NICS do things, which NICS have cheaper, typically cheaper processing components on ARM CPUs and we're not today GPUs, but or it frees the CPUs up to do more. And that's really important in like these 5G deployments where I got to remind people that not all of those edge nodes are in a big. That's right. Facility. Sometimes they're in a fiberglass hut on the side of a road. So power and cooling in space really matter. And you can do some really interesting things with XDP, for example, about very precise control over which CPU is executing which, right? Because, you know, you might have a CPU, your XDP programs running right off of the NIC. You might want to save that CPU for the next couple of packets, but you can forward. You can redirect to a different CPU and continue to process that packet if it's something you need to do that's going to take a little while longer, for example. So there's some interesting things you can do in terms of that power space and cooling. Yeah, definitely. So let's take a look at what that is. Yeah, we can just jump through really quickly, you know, EBPF really has 3 main use cases, right? So obviously networking we've been talking a lot about, whether it's high performance networking or load balancing. You know, security as well. How can you implement security at the operating system layer with EBPF and then observability and tracing, which I think as we'll talk about in the future is pretty critical for these 5G deployments, I think. And it's one of the areas that we've talked about where I think it's going to be pretty important. And where it really is insidiously important, I would say is if you go back to those slides I showed, you know, the software stack that we talked about, you know, used to be controlled by a single vendor who had insight and introspection built in. That's great. Those things are a bunch of components that either come from upstream open source projects or from a vendor and integration and observability is non-linear. Exactly. Exactly. And so, you know, when we, when we think about EBPF, and by the way, this is, I've reinterpreted this slide, but it's linked below from a great blog post by our friends at Cloudflare as well. You know, who was recently as 2019. I've already made the claim that EBPF is going to eat the world and they're a great resource for EBPF. So I encourage everyone to go to their blog and they've got some great stuff on there. But if you, if you look at this, one thing that I wanted to talk about was, you know, you really can load EBPF programs everywhere. And so what I'll do is I'll start on the bottom, right? And we're going to talk about XDP in the next slide as well, but you can attach XDP programs, which are EBPF programs to the network device driver itself. You can load XT BPF programs and at the IP tables layer. You know, at the TCP and UDP socket layer, I mean, you can do some really interesting things there with TCP BPF, some socket dispatch programs and the exporter. You can also do, you can load things at SO attached BPF, which is at the socket layer. One of the really interesting ones, which we're not going to talk about in this particular talk, but which I've done a lot of exploration with is the sock map stuff. And that's, that's super amazing because sock map, EBPF sock map allows you to take two sockets, for example, and glue them together in the kernel, and then the kernel will just transparently proxy data across them. So there's some amazing. That's super cool because that's again an operational efficiency that you don't really need to mess around with it just set up. You do, you do the set things up in user space in terms of creating the sockets and then you just glue them together and, and away you go. So that there's some really amazing things you can do there. Yeah. And when we talk about XDP though, in particular, you know, XDP stands for express data path right and it's really a way to do high performance to build a high performance and programmable data path inside of Linux right it doesn't require any special hardware. It does require some driver modifications, but the majority of the drivers that you're going to see will have those modifications at this point. Exactly. You know, it doesn't require kernel bypass either. In fact, it's almost the antithesis of that right because what you can do with XDP is you can process that packet right off the Nick and make a decision, modify the packet redirect it or. And even after modifying it, you can just let it pass up into the Linux stack so you can still take advantage of all the other things the Linux stack is doing, like for example, the TCP IP stack, or things like this. So there's, you know, it really plays in concert with Linux rather than being opposed to the Linux kernel. It's kind of step aside from it like the the other the other approaches were, you know, avoid the kernel. This is work with the kernel. Right. Exactly work with the kernel take advantage of what the kernel can do, but allow you to build an extend on top of it. So now if we take a look at maybe what the current state of EBP fxtp programs and telco networking are. I thought it'd be interesting to look at some use cases right so here's an obvious use case. You can do with with EBP fxtp programs which is DDoS mitigation. Again, if you look at cloud flares blog, they actually talk a lot about how they use xdp for DDoS mitigation. And Tom, you know, as a 5g expert, I think you can probably attest to that this is an important thing as well. Well, that's where, you know, a lot of the, you know, the sort of broadband access has been replaced, you know, with mobile access. And this is a thing that is done in those networks. And you know, here's the other thing is that the mobile backhaul in my example of the fiberglass hut on the side of the road, the mobile backhaul is not always, you know, a high speed fiber network. Sometimes it's a iffy microwave connection, you know, and exactly the network in those cases. You know, to your point about power and cooling as well, the earlier you can drop that packet without using as much CPU time in terms of this DDoS mitigation, the better, right. And so I think it fits in or other resources to, yeah. Yeah, for sure. You know, load balancing also important because from not mistaken, you know, Kubernetes is into the 5g world and Well, Kubernetes is intrinsically, you know, requires a load balancer. That's right. And and so it's a it's an intrinsic part of containerized ran deployments. Obviously not with, you know, open stack based deployments with the ends, but still, you know, even those deployments that I've seen have load balancers for the obvious reasons. Oh, yeah, for sure. And you can do some really interesting load balancing. Well, in fact, we'll towards the end of the presentation, we'll go into detail about one of our favorites that everyone should know about using XDP. You know, high performance forwarding as well. I mean, clearly that's important. You can do that with XDP and with eBPF programs as well. And that's going to help your 5g deployment too. You know, flow sampling and monitoring. I think this is pretty critical. I mean, you've got this 5g deployment. And like you said earlier, maybe previously you had a single vendor that was giving you some of that. But now with this disaggregation, you need to build some of this. And you could build, you could build some of it to augment what you buy or you, you know, and, and again back to power cooling. Yeah, ease of operation, you know, less is more. And, you know, loading BPF programs that can just do the sampling on the neck and export the telemetry is when, you know, without everything else needing to be there. Exactly. Exactly.  So let's, let's take a look and compare, you know, what an OVN architecture looks like versus what you might do with an eBPF. Yeah, this is the typical architecture that you would deploy OVN in. And back to the 5g example.   And now we go to these 5g deployments where, you know, like I mentioned there, there are either congested backhaul links that are always congested by design. But losing, losing messages in this architecture is tricky. It's very tricky. Let's call it tricky. Exactly. And then scalability, you know, because the nodes have to continually talk to the controller and the, and so on. And, you know, that's another scalability issue that, that, you know, we'll see in the, in the next slide. Yeah, yeah, let's, let's talk about this. I mean, this is kind of what we envision, you know, you might want to build something similar using XDP and eBPF programs. And I think the main difference, some of the main differences are you can use an industry standard KV store and message bus for this kind of whatever you want to build your controller for this. The other point is you've got these agents, which are stateless on the host as well, and they're using these XDP maps to program the fast path as well. And so you've to some extent you've decoupled things now a bit more, right? You've got the fast path running off of these math maps and you've got these agents which are responsible for populating the maps as well. So it's a pretty clean architectural approach. Yeah. And there's two keys in there, right? I mean, what have we learned through our whole careers and networking, right, working on the internet? What, what are the keys to scale is aggregation and statelessness. That's right. That's right. And that's what we're getting here. That's right. It's pretty good. Yeah. So, so let's see. So let's, you know, we're going to wind things down here in a little bit here. So let's talk about some key components for successfully deploying these EBPF and XDP programs. I think number one, I mean, as of everything, hire the right team, but there's keys to remember here, right? I mean, XDP is, you know, it's, it's, it's going to be, you got to have C programmers, right? I mean, a lot of this is all written in kernel code. I mean, yes, eventually there might be rust, but for now at C, you need some SREs. That's a really good point. You've got to empower that team. Yeah. And that's a really good point, Kyle, too, because if you look at the modern crop of coders, they may not necessarily know C. It's challenging, right? For sure. So I think that's one step, right? I mean, you got to ensure you have monitoring and observability for the whole solution. Pretty critical on anything, but even more so for this, because the other thing to remember, you know, your packets with XDP, you're not going to be able to look at them with things like, you know, TCP dump and things like that, because they're not going to go through the Linux. And not go to the Chrome. So build that upfront, you know, understand how upgrades will work with your programs, what happens when you detach XDP programs and attach new ones. This is actually gets back to the complexity point I showed at the beginning. Oh, yeah. Upgrades are very challenging in a disaggregated model where you have components from 12 different vendors that all need to work in harmony. Together. And follow. That was the end the other picture with the different open source projects. There's also that, you know, harmonization of scheduling. So when releases come out, they're all synchronized so that, you know, we can do upgrades in a uniform way and so on. That used to be handled by a single vendor. And now it's, now it's not right now it's not and it leads into this right state is your enemy as well. The more you can keep things stateless. The easier all of that's going to be and and that and and I think there's ways to do that and we'll show an example here of another program right so so charting the future of this what does the future look as we kind of wrap things up here a little bit right so how do we how do we see this going right. Well, I think we, we see this as ebp fnxdp allowing further disaggregation of things right decoupling more network functions into ebp fnxdp programs right and disaggregating those network functions even more running them closer to the hardware right scaling things thinking differently. In terms of, you know, how things work right and we kind of wanted to leave to leave you with this right here's a great example so anyone who's looked at Facebook. Catron as well. This is a great example of what we're talking about so Facebook designed this load balancer using xdp and ebp f and as you can see. And again, this is taken from one of their blog posts the link is on the bottom of the slide. It's really great because what they've been able to do is they have a control playing inside user space and xdp program that works in concert with the local kernel as well. And because it works in contact, you know, in concert with the local networking stack, you can run the application on the same note as the back end which is pretty slick as well. You can do direct server return again taking advantage of the Linux networking stack. It's a pretty neat way to do it. But you know what's cool here too is that this is, you know, harkens back to the control and data plane separation from SDN. You don't have to run them separately everybody thinks about running these things separately on a nick. The beauty of this is that you can actually start running all this on the CPU and migrate it out as you need to, or want to, you know, if you've got a small site, small site deployment or whatever that that's right only can run on on a, you know, on a small, very small machine that doesn't doesn't have nicks that are capable of this or not you could still run this on the CPU and it works. It works. Exactly. And so, you know, we'll wrap up with this again. You know, this was our thesis. And I think that we've, I think that we've answered this. I think that XDP and EPPF can be a part of the future of 5G networks. And I think it can help to simplify things. Yeah, I think we've shown, you know, you can clearly see the reduction in the complexity or reduction in the concerns or reduction, you know, from state, a lack of state. And also operational flexibility, like I was just saying, you know, you have a choice as an operator to where to run this, how to run it. And you can evolve into it. It's not a, you know, let's flip over the whole network into, you know, using this or that. And that is actually, you know, gets into some of the other options that are out there today. You know, they require you to change from NVGRE to VXLAN and things like that.  It's definitely great. And so, you know, with that, I would just like to say thank you and, you know, definitely feel free to reach out to myself and Tom on Twitter if you want to continue the discussion. Yeah, thank you for listening. And I just want to invite everybody to listen to our podcast. And I think we have time for questions after the talk. That's right. So stay tuned for those and come with your questions. Thanks for listening.