My name is Mansi Navre, and I work at Intel as a Graphics Colonel developer. So before I start my talk today, how many of you have played with Graphics Colonel before? Awesome. And how many of you know what KMS means? Wow. That's really awesome. That's not how I was when I started working on this project, like a year ago. I had no idea what it meant by display port compliance or how it fit into the graphic stack and what it meant by atomic or KMS. I was just totally thrown under the bus for this project. But today, I have implemented a solution for display port compliance, and I have it upstreamed in the Graphics Colonel driver. So I'm going to talk about my journey through this project and how I took those baby steps to achieve this. So has this ever happened to anyone before that it's a Monday morning, you go to office, hook up your Linux machine to a display port monitor, and there's no display? Has anybody seen that? Always, right?  It's bad. It's really frustrating. So my goal was to fix all those problems with display port by making the Intel Graphics driver display port compliant and upstreaming the solution so that all of you can use it. So there's a famous saying, right? A journey of 1,000 miles begins with a single step. So being a total newbie into graphics development and open source development for that matter, I knew this was going to be a long journey for me. So I broke down this task into several subtasks and just started taking baby steps. So first question I had in my mind was, what is display port compliance, and why is it important for Intel? So let's look at an example. Let's say the first user has an Intel laptop connected to a monitor. The second user has an Intel desktop connected to a monitor, and both these connections are made over display port cable. So what do you expect? So if both these Intel devices are running the same graphics kernel driver, they have the same display port driver, then it should behave the same. It should give the same end user experience, right? So this is possible. This interoperability is possible if the display port driver actually is implemented according to the spec. VESA spec is a standard that defines this digital interface for display port connections. And there is a detailed test procedure which you can run to actually make sure that the driver complies with the spec. That is called as the display port compliance. And it's extremely important for our customers that we actually follow the spec and have a driver display port compliance so that they can get to that user experience for their customers. So let's see what happens when you connect a display port cable, right? So the device which is sending the data in DP world is called as DP source. The device on the other end could be a monitor or projector which is receiving the data is DP sync. What happens when you connect the DP cable between the source and the sync device? The first signal, the very first signal that the sync device sends is a hot plug detect signal. It's just an interrupt request signal going to the source device. So the source knows, hey, something new is connected. What does it do? It initiates these DPCD reads on the aux channel. So DPCD is display port configuration data register in the sync device. And it tries to read this information. Through this, it's going to read the receiver capability like the link information or edit data. And once it has this information, it kind of does this calibration routine to negotiate the receiver capabilities between the source and the sync device. Once it's done, it's ready to start sending out the data on the main link. So let's dive a little bit deeper and understand the most important concept about establishing this display port connection. That's link training. So when we say display port link, what exactly are we talking about? This actual physical link can have multiple lanes. It can support up to four lanes. And the channel quality, the physical layer capabilities, determine how many bits per second can you transmit on per lane. So that's called as the link rate. And then the calibration routine, which I just talked about, is the handshaking protocol that happens between source and the sync device to actually configure these link parameters. And that's called as the link training. Let's see what happens in the link training. So first, you connect the display port cable. You get the hard plug detect signal. That's when the source device will read the maximum lane count and the link rate supported by the sync device. And then it starts the link training because it has to still figure out what parameters are going to work for the actual cable. So the first phase there is clock recovery. In this phase, it will just start sending out the known training pattern sequence onto the main link. And on the receiver end, these symbols are used to extract the clock information and know if it can actually work at that specific link rate. So that's the clock recovery. Next is channel equalization. So this is the phase where the receiver end will try to understand the mapping, how the data is actually mapped onto several lanes. Once these two phases are successful, then we say that the link is ready. What that means is now the link is set to get the data at a specific lane count and specific link rate. And that's when the link training is successful. So this is very important part of establishing any connection. If link training fails, then basically you will not have a stable link. And that's when you see those black screens or flickering displays. How was I going to test this compliance? So I use this equipment called as DPR120. It's manufactured by Unigraf and it's certified by VESA to run these compliance tests. This device is hooked up to the device under test, which could be your laptop running the graphics driver. And the output DP cable is connected to the DP monitor. So this basically acts as a referencing device. And it can run the compliance test suite. So for each test, it's going to request a specific data or a video pattern on the device under test and throw those outputs to the DP monitor. And it basically sits there and taps those values on the OX channel. So it's basically just monitoring all the transaction onto the incoming display cable and on the outgoing display cable. And it tries to compare that data to the reference values. If it matches, then we say that the device is compliant. So that was my test setup for testing if our driver was actually display port compliant or not. But I really needed to figure out how it actually mapped to our graphics stack. And what were some of the areas in the graphics stack? I would need to modify fix for that matter to get this compliance thing going. So first is a hardware, the Intel integrated graphics device. That's the hardware that is rendering the display and acceleration. The component right on top of this is the Linux kernel. So this is where the Intel graphics driver sits, the i9-15 driver, which knows everything about our hardware. And it's going to configure the hardware according to the commands that it gets from the user space. On top of that is DRM, its direct rendering manager. It's also part of the Linux subsystem. And it's going to implement the part of the kernel that is common to different hardware specific drivers. And then it exposes the APIs to the user space so the user space can actually send information all the way down to the hardware to request a specific mode or a specific display that it wants to render on the screen. All these components have to interact with each other in a way that the whole stack actually complies with the DisplayPort spec. And so that when you connect the cable, you get that perfect frame. Next thing I wanted to learn was what is really kernel mode setting, the KMS. I guess most of you know, but I really stumbled on this concept. It took me a long time to understand what it really meant when people say, OK, you connect the DisplayPort cable, that's when the mode set happens. So what is kernel mode setting? So let's start with the data that is in the memory. The RGB pixel data is in the frame buffer. The first thing that happens is it scans these frame buffers and that happens by CRTC. It's the piece of hardware that will get this RGB pixel data and generate the bitstream according to the video timings. Then it sends this data to the encoder. So encoder will take this bitstream and generate the analog signals based on the type of connector that is connected. So it's the piece of hardware that will decide whether it needs to generate DVI signals or HDMI signals or DisplayPort signals. Then it goes through the connector. That's the actual physical connector to which you can connect a monitor. Or it can be an internal, in case of embedded displays, it can be an EDP panel.  So this process of setting up the clocks, scanning out the buffers, initializing the chip, initializing the pieces of hardware like the CRTC or the encoder, and finally lighting up the display is called as kernel mode setting. So why is it really atomic? What is atomic KMS? And I call it the two-step. This was another concept which took me a while to understand and join the dots and see how it really mapped to that kernel mode setting. So again, going back to what happens when you connect the DisplayPort cable between the source and the sync device. So that's when the user space will create a list of parameters or the list of properties that it wants to change on the hardware. And then it sends it out to the kernel through this iOctl call, the DRM iOctl mode atomic. It's a single iOctl call where the user space is going to send all this information to the kernel. Now kernel here is responsible for the two-step process. It's going to implement two operations here. The first step is the state. It's the atomic check phase where it forms the state of the device. It will form the state structures for these different DRM mode objects for the plane or CRTC or the connector. This is where it's actually going to validate the mode that is requested by the user space. So if user space is requesting a specific mode or 4K mode, this is where it's going to see whether it's capable to render that mode with the hardware limitations or not, or is it too big for the screen. Once this phase is successful, then it goes to the next phase, which is atomic commit. And this is where it will actually send all the data to the hardware. This is the one step where it writes everything to the hardware. And the expectation is that this step will always succeed because we have already checked or validated the mode against the hardware limitations in the previous step. So at this point, I had understood what it meant by display port compliance, got a little bit of idea about how the graphic stack works and what is atomic, what is kernel mode setting. So I thought, yes, I got the ball rolling. I was there. I thought I figured out everything, and it's all going to be piece of cake after this. But wait, did I? So I got very excited. I was like, OK, I'm going to see if it passes compliance. Then my job is done, if everything works. So I hooked up my laptop running the graphics driver to the DPR120, connected it to the display port monitor, and ran this compliance test suite. But guess what? Murphy's law is true. So the compliance tests failed. So that meant I had to do more investigation and more coding to figure out what was going wrong and fix it. So I did some more investigation, looked into the code, and found what was the problem. So let's look at what exactly the problem was. Going back to the areas which come into picture when you connect the display port cable. So there's a sync device, which is your monitor, to which you connect your display port cable. It sends the hot plug detect signal to the kernel. The user space then requests a specific mode to be displayed onto the monitor. Let's say it's requesting a 2K mode. Now the kernel here is going to go through this atomic kernel mode setting that we talked about. So it's going to go through the first step where it validates this mode. That's the check phase. And then it's going to go to the commit phase where it actually writes all the data to the hardware. So this is the step where it's going to implement link training. Because in the link training, you have to actually write the data to the hardware. You have to send the symbols on the hardware. So it cannot happen in the first step. It happens in the commit phase. And that's the first time you are actually saying that, OK, if I want a link to be trained at 5.4 gigabits per second to actually get the mode successful, then it's going to happen in this phase. But it can very well go wrong. And it can fail because we have never tested the physical capability of the cable before. And what if we get a link failure? And that's when we get a black screen. And there is no way that we can send this information back to the user space because the commit phase is never expected to fail. And that was a problem.  But then what?  And it's a dead end right there. And you have this really unhappy user staring at a black screen. So somebody had to fix this problem. So this is where I came into picture. And I was like, OK, I have the knowledge. I have the community to help me. So I'm going to go and fix this. So let's see what the solution was. Sorry, I got the next click first. But OK, so the first half of this diagram is kind of the problem. And the next half is the solution that was implemented. So what happens? The user space is requesting a specific mode. And the kernel is going to validate it, do the link training in the commit phase. And let's say the link training actually fails at the requested link rate. That is 5.4 gigabits per second. So what does the kernel do? Now at this point, we introduced a new property for the connector, which is the link status. So as soon as the kernel knows that link training has failed, it's going to change this link status connector property and set it to bad. And then it's going to send the hot plug U event back to the user space. So user space knows that something is wrong or something has changed in the hardware, and it has to do something about it. So that's when the user space is going to request another mode set. It's kind of going to retry the mode set. And this time, it's requesting the mode at lower resolution because the 2K mode did not work. So we invalidate the mode at that point. And the user space will request a lower resolution. When the kernel gets this request, it will again go through the check and commit when it gets to the point where it has to retrain the link. And at this point, because it retains the information of the link rate at which the previous link training failed, it's going to try and retrain the link at lower link rate. And this actually works for the physical cable, right? So the link training passes. We have the good link status. And finally, we have a successful mode. And we have a happy user, right? No more black screens. It is lower resolution, but it's better than a black screen. So that is how we fixed this issue.  You do not get random error messages in the D message and just black screen or flickering display. This is just some outline of the things that were added. So we introduced the new DRM property called as link status property. It's attached to the connector. Then there is a helper function to set the link status property, which is used by the i9-15 driver. And then there's a helper function to get this property so that user space can read the link status information. And all these helper functions are added in the DRM layer. So if you are working on this on a different hardware, then you can very well use these helper functions and make use of this new link status property. If you want more information, this code is available in the upstream i9-15 driver. So you can go look it up and play with it, maybe fix if there is something is broken. So why really do we need this asynchronous reporting through this property?  So atomic check guarantees the requested mode. So it's expected that atomic commit will never fail. But link training is an exception, because we have to do link training in the atomic commit. And that can fail because it totally depends on the actual physical cable. The link might actually fail after a successful mode set. So what that means is, OK, you've connected the cable. First time you get it all going, it's all happy. But something goes wrong in the cable later and it can fail. So you need a way for the kernel to send back that notification to the user space that something has changed with the hardware. Then atomic allows non-blocking commits. What that means is you can return the control to the user space without actually finishing the mode set. So then what if the link training fails during or after the mode set? There's no way that user space is going to know without having this link status property. So this was a solution that was implemented. And I thought, OK, I'm done implementing the solution. But the biggest problem now was getting it upstreamed. So that was kind of good and bad part. That was a fun part because there are developers all around the world looking at my code and giving me feedback at every stage of it. But it, of course, came with some of the upstreaming challenges. It took me a really long time to convince the community to tell them about this design and that, OK, it's going to fix the problem. It's actually going to pass the compliance. And this is what it is needed to fix the broken link training algorithm. So I came up with some of the rules that helped me a lot to get these patches upstream. And I'm sure that if you're new to open source development, these rules will help you too. So the first rule, right? I call them as Linux's rules. So first rule, no regressions, right? So that means no GPU hangs, no black screens. If you submit a patch, that should not break the code. And it should not result in a black screen or regressions. So that means the review cycles can get really aggressive. This is how a typical review cycle looks like, right? So up there, you're a developer working on your code. The first thing you do is submit patches. You submit the patches to the public mailing list. It's called it's Intel Graphics mailing list, but it's a public mailing list. There are developers from outside of Intel looking at this and giving you constant feedback. So you get lots of review comments and you submit new patch revisions. This keeps going on for a long time until you finally get a reviewed by. Yes, and that's the day when you go party, right? So you get a reviewed by and your patch gets merged into the DRM Intel tree. So that's an internal tree where it gets merged. And there's a lot more testing that happens there. And from there, it gets pulled into the DRM tree. That happens on a weekly basis, but it can go into DRM fixes if it's a fix for a known issue or it can go into a DRM next, which means that it's a feature for the next release. This is the tree where Linus is looking at, right? So Linus actually pulls the patches from this DRM tree on a weekly basis and announces its release candidates. These are these intermediate releases where you're collecting the fixes or patches for the next revision. So it goes through the cycle of release candidates for a long time until it's stable. And then finally it becomes part of the next Linux release. So it's a long process from when you submit the patch and when it hits the next Linux release. So it can take a really long time. And the solution that I talked about, it took me probably a year to get those patches upstream. Next rule, right? Never blame user space. It's always Kernel's fault. It's kind of sarcastic, but it's also true. Because Kernel is the component sitting closest to the hardware. So if hardware doesn't behave as expected, then the kernel developer is the one to blame.  And I was in this problem for a very long time. So because if your solution is implemented in the kernel and it actually also impacts the user space and requires some changes in the user space, then what do you merge first? You can't really merge the kernel patches until you have tested that user space works with that solution and that you're not breaking something in the user space. But you can't merge user space because the kernel patches have not yet landed. So this is a really complicated and it's very frustrating. So what did I do? So my solution of implementing the link status connector property did have impacts to the user space. Because I wanted the user space driver to change and make use of this property so that they can actually request this new mode set. And it can retrain the link. And finally, we can get a successful mode. So first I submitted my kernel patches. I got reviews from a lot of peers. And finally, I got a reviewed by. I got a lot of acts from Intel from people outside of Intel, which was good. So the design was approved. And it was a sigh of relief that, OK, it's not breaking anything because a lot of people tested it. And then I started following up with the user space community. I made sure that they made the changes, tested this new property with the user space, and that it was working as expected. And made sure that they submitted the patches. Then we waited for a long time to get reviews from the user space community, finally got the consensus from the user space side. And now the patches were ready to get merged in the kernel. So it took a really long time for implementing this solution because it was a huge ramp up. And then it took a very long time to actually get those patches upstreamed. So that was the end of my journey. And I literally felt like this. I felt accomplished on top of the world when my patches finally got merged after a year of following up with the maintainers and pinging them on IRC and bugging a lot of people to review my patches. But there were a lot of things I learned along the way. It was definitely a steep learning curve. If you start working on an open source project, especially the graphics kernel project, it takes a very long time to get expertise on certain part of the driver. And then when you submit patches for that part of the driver, you have to make sure it's not breaking something else in the driver.  You have to leverage the knowledge that they have about other parts of the driver and get feedback from them to improve your code. Submit patches. So don't be afraid of submitting patches and opening it up to the larger audience. I did that mistake. So I kept working on my code. It was all in my internal tree. And I had the compliance app running there. And I used to go to my manager and say, hey, it's all working. It's awesome. I'm done with this project. What can I work on next? And he's like, OK, is it upstream? Said, no, I haven't even submitted it to the mailing list. And that was really the beginning of the journey. The day when I submitted it to the mailing list, that was the beginning. Because after that, I think I worked probably 15 or 20 revisions of the patches. It got, yeah, people started nitpicking on smaller things, which is good because it has to comply with the other design of the driver. But that's your first step outside of your comfort zone. So don't be afraid of doing that. Feedback is always constructive. So don't take it as criticism. And I would say, don't take it personally. Because in open source development, you're submitting your patches, and it's getting reviewed by people you have never met before. You don't even know what company they work for. You can't go to their manager and say, hey, he's giving me this nasty feedback. I don't want to work with him. You can't do that.  It's going to break link training. It's very fragile. Don't touch that part of the driver, right? So yeah, it was frustrating. But then the more I kept looking at the review comments, the more I came to know that it's for my benefit. So just follow up with the review comments, ask questions, ask them, why do you think this is going to break the code? Or what do you expect? How can I change it? And take the feedback constructively. So yes, you will see the finish line, finally, right? Your patches will get merged. You just have to follow up and keep improving your code, keep pinging maintainers on IRC or developers on IRC. And don't give up. Your patches will get merged. Thank you. So these are just some of the links where you can find the code in the upstream I915 driver. There's lots of documentation on 01.org. If you have questions about KMS or about these properties or how the atomic infrastructure works, you can go look at the documentation. Or that's my email address. So shoot me an email or review my code. That would be the biggest help and contribution. So thank you. Sorry? Yeah, yeah, sure, of course. Sorry. Yeah, so this was kind of a new feature, right? So the thing I learned is when you're implementing a new feature in the open source community, writing a design document never works. So you know, because nobody has time to go look at the design document, I think that's the closed source way of looking at things. So if I want to implement a new feature, what I have done is, you know, just I'm thinking about it. I know that I have got kind of, you know, the design for my new feature, but I'll implement it in the code, even if it's rough, right? Even if it's rough, I'll implement it. Maybe I haven't tested it. And then I'll submit it as a patch, but I'll put RFC in there. So that's just request for comments. So that just, I think when you submit it as a patch, that's when your code is gonna, you know, that's when developers are gonna look at it.  It's interesting. Let me look at it. Let me review it. And you don't have to worry about whether it's gonna break the code because you've submitted it as RFC. So it's not gonna get merged and it's not gonna, you know, break something. So you just get people to look at your design, get their feedback, and that was the first step for me to just get people to look at it and, you know, just to understand that I was on the right track. It wouldn't. And that's the thing because, so the problem there is if you fail at a specific rate, you cannot go and try different rate just right there because you haven't set up your clocks or CRTCs for that rate. And that is the reason you have to do the entire mode set again because the setting up of clocks and CRTCs happens in the previous phase. So if you just fail and commit, you can't go and redo a link training without going through the previous step. And that's the reason you have to send it back to user space and say, hey, you know, something failed, now redo a mode set. That was the, yeah, that was inherent problem there. Okay, so when you're trying with the link rate in the previous iteration, so you have found the link rate that is, that's the minimum link rate that is required for that resolution, right? So that means if you try lower resolution and the same link rate, then it's probably, I mean, you know that it failed, so you have to go to the lower link rate. And you need lower resolution because otherwise you know that it's not gonna support it anyway. I think I'll take one. I think so, yeah. So right now, this is the only exception in atomic commit because all the other errors get caught in the previous stage where we are just trying to validate it. And there are a lot of failures that get caught there and we send the notification back to the user space. But if we find something else that, you know, you need to, you're doing something with the hardware for the first time in the commit and there's a possibility that it will fail, absolutely. You have to do this approach because you can't just go and fix it there because then you're breaking the entire display pipeline. Yeah, yeah. I think that's the only way to go about it, that create a property and then send that information back to the user space because there are helpers already that can get the property. So if we add a property for the connector or CRTC, then yeah, we will be able to implement it similar, right? You had a question. The link training, I read the DisplayPort spec. DisplayPort spec talks about what is supposed to happen. The first thing is hot plug detect and it's supposed to train the link at specific rate and it actually goes, walks you through the whole algorithm. And that's when I realized, hey, you know, a driver actually does not implement what's stated in the spec because we were not following the algorithm. We were not lowering the link rates and we were just trying it once and that's it, failed. You don't have to pay. You just subscribe and you get the spec. Yeah, it's open. 4.10, 4.10, yep. Yeah, it took a long time and I think when I started working on it was last year, January, and yeah, it was really old. The Atomic was not even implemented. So there were, you know, stages, like I first tried this with legacy user space drivers but then because the whole trend is moving towards Atomic, then I made this property to be an Atomic property so that it can be used by the Atomic user space drivers and then tested it with the Atomic driver and yeah, it's still not merged in user space yet. We have tested with the SNA driver, mode setting driver, and so you don't really have to have that change in the user space. It's not gonna break anything but if you want to improve or if you want to fix the black screens then you need the user space to make use of this property. So it has to use the calls for get property, get this property value and actually redo a mode set. It's in the mailing list. It's in the mailing list, you know, I'm every day. I am on IRC asking what's, you know, is it gonna be reviewed? So it has an act from the maintainer and we're just waiting for somebody to sit down and actually review, you know, line by line and give me a review by. Oh yes. Yeah, so EDP, the difference is, so the similarities, it's the same process. You get the hot plug detect signal and we read the DPCD registers. There's a different set of registers for EDP but for EDP we only link train once because it's an internal connector. There is no way that it's gonna break later or it's not part of the mode set. So we train only once and if something happens with the internal connector then it's gonna send out the short pulse and it's gonna retrain at that time. So we don't really, if you look at the spec it doesn't really ask you to retrain at lower link rates and go through the same algorithm for EDP. But EDP compliance, we haven't really implemented any tests for EDP compliance. We'll have to maybe follow up with Unigraph if they have EDP compliance. Test suite with the DPR 120. But I can check that for you and get back to you if you want. Video underruns won't be because of the link training but it's definitely that you are validating the state and configuring something in the atomic check and then you're probably under utilizing that pipe. So the CRTC that we talked about, we call it a pipe. It's gonna take the frame buffer and then send it to the encoder. So if you are configuring the pipe wrongly and then trying to send less data when the pipe is running too fast or trying to send the data which is slower and the pipe is running too fast then you're gonna see underruns. So it's probably something that is wrong in the configuration part in the atomic check phase. So that's something you would have to look into your driver and see whether you're configuring it correctly for the requested data rate and things like that. Any more questions? Okay, thank you.


United States President Joe Biden has expressed surprise after finding out that classified documents were found at a think tank office he once used. He said he and his team are cooperating fully with a review into what happened. Biden told reporters at a joint news conference with the leaders of Mexico and Canada that it takes classified documents quite seriously.


Thanks guys. So how many of you guys in the room believe in what this dude is doing? Better be all of you, right?  Yeah? Okay cool. So the hardest thing for you guys and for me especially when I was first starting out, you guys are on the phone like 24-7, right? Non-stop. 18 hours a day. Hopefully, right Cody? 23 hours a day. You're on the phone. The hardest part about doing that is staying consistent, right?   Let's be real. The process is not fun unless you make it fun. The easiest way for me to make it fun when I was doing outbound dials on age leads or I know Cody did this when he was going door-to-door cold. Imagine doing that. Imagine knocking on an insurance agency and being like, hey, want some marketing? No? Okay, sorry. All right. So what I did was I monetized every portion of the process. When you guys get on a phone call with somebody, you should know how much that phone call is worth to you. That will keep you on the phone longer. That will push you towards the sale faster, okay? People just make aimless dials whether they're selling coaching, marketing, they're selling insurance, right? And they don't set a value. I knew how much every phone call was worth, every doorknock, every rebuttal that they gave me, every close, every no-show, right? You guys set appointments and they don't show up. That's worth something money-wise. That's getting deposited into your account. Not today, obviously, but somewhere down the road. So what I would challenge you guys to do is, based on your numbers, your conversion, how well you sell, your closing ratio, your week-to-week goals over there, right? Assign monetary values to every portion of your process. How many of you guys get referrals on what you're doing? It should be all of you, okay? How much is a referral worth? Let's push to ask for them. I knew that every referral I got was worth about three to $400. If you knew that, how many would get like 20 referrals per call, right? It just makes sense. And again, that money's not going to hit your account right away, but it's going to change your mindset to be able to push further at every single phone call that you make. You'll stay on the phone longer. You'll stay here later. You'll want to put in the time because every time you make a phone call, even if it's a dollar, how many phone calls are you making a day? 500,000, right? In a given week, a month, multiply it. The number's crazy. So back into your income, how much each activity is worth, and I promise you guys will slay it each and every day that you're in this office. That's all I got. Oh, good afternoon. I want to also use this time to ask Pete a couple of questions and think about this, right? This is a golden opportunity. Do not let this pass by. If you've got an idea, you've got a question, right? Don't be ashamed to ask. Right now is the time. If you're like, dude, I need to get better at X or Y. Now's the time to ask. Okay, so who wants to speak up and ask one question first? Okay, Colin, right behind you, gentlemen. How do you go about the value of your product? So my value comes from the end result. I'll give you an example, a real quick one from my breakout at SWOT.  Expires at the end, right? Most people think that's the cheapest product that you can sell. Let's say a $500,000 term product is 50 bucks a month. To me, it's the most expensive. 2% of term policies typically pay out. So if they pay 50 bucks a month for 30 years, right? That's like 18 grand. Well, the end result of that is they're probably not going to die and they're going to lose $18,000. So how much are they going to lose by not upselling themself to a fire ticket or upselling themself to an extended coaching program? Sell based on the end result, not the initial price or perceived value. Everything is expensive to somebody. If you told me this chair was like 400 bucks, that's arbitrary. Tell me what the chair is going to do for me and I'll pay a thousand. Doesn't matter, right? So pitch on the end result, not the perceived value of the product. Does that make sense? All right. Who's next? Knowing what we do here, what's the way that our team could sound different than other marketers or other trainers quickly so we can keep the tension? That's a great question. Sound different. So give me an example. Who's your competition? Well, I'll do it for like the marketing team. It'd be other lead vendors, other marketing organizations. How good, you know, we sound different than just a lead vendor because we do everything.  Right. I think the big thing is won the expertise. I haven't seen anything like Landon before, right? Nobody, right? So I would I would spend we were talking about this last night at dinner about like talk time on the phone and stuff like that. Our agents when we're building up the value of like our final expense product, which in all honesty is a commodity. Anybody can sling a final expense product, right? It doesn't matter. Spending our agent spend 26 minutes roughly building the value of what we do before we even deliver a quote or a product. So we don't talk about anything except what we've done to help x, y and z seniors in our case across the country, how many we've helped, what the product has done for them, how they call us begging and pleading for the product, etc. So I would spend more time instead of selling the actual product building up Landon building up Cody edification of what the product is doing for the client again at the end, right, is what people want to buy. They don't want to buy a Facebook lead. They want to buy an experience with you guys and they want to buy an end result. So if you guys can show them what you've done for them in that initial and I'm not saying like I don't want to mess up your scripts. But in that initial like 10 to 20 minutes on the phone, don't deliver anything. No quote, no, no product build up the value of what you guys are providing first, and then go after the close. That makes sense. That makes perfect sense. I work with a lot of agents on a daily basis, different capacity now. But for you, one thing I know an agent, and I know their mind, I know what they need, I know the importance of how they think. So what I do is I listen and I ask questions. One thing about insurance agents, they love to talk. Their salesman. And if you listen, you can take the information that they can do. And it will allow you to be able to use it will give you the information you need to get a deal. Right. So when someone comes in and meets with us, maybe it's about joining our team. I'll ask pointed questions. That gives me critical information about what they're going through, what they're doing and what they have and then I use that to create a solution for them. So I think asking questions, and understanding where they are in their journey, what type of lead have they worked, and then understanding, you know, those different pieces, and then tying it all together. So if I meet with someone, and I know they're coming from a specific career program, and they, and I know their lead program, I know everything about it, right? I don't talk about it. I listen to them. I already know what their problems are. And then I just, you just have to have the solution. And then I listen, I collect the information. And then I provide a solution. And then honestly, with agents, you got to be realistic and open with them. If you get someone, and they're like, Oh, I'm interested in trying out an order of your Facebook leads. That's quite honestly, like, you have to have that conversation that says, Listen, like, can I tell this to any agent? And that's, again, what Pete said, using affiliation people that you work with, like, we're a client, like, Leonard, Justin brought those business with you, you can start leveraging names through your conversations. Cody, Landon, Pete, Tyler, Justin, and that brings credibility to the result. But it's eight weeks. If an agent is willing to buy leads for at least eight weeks to cast a lead. And they call me and try to say a lead's not good. I literally don't need how many how many orders did you order in a row? Oh, too. Don't talk to me. It's eight weeks. And that's what we tell our agents. After eight weeks, if you try a source, and you're not happy, then you make a decision. But it's not just one source. It's multiple, right? And that's what Landon and I were talking about last night. There's this all encompassing world. And that's what you guys are starting to do. That is different than other people. You're not just the one trick honey. You do multiple things very well. And that's what I would that that's what I would. Boom, that's good. I get pitched all the time in my position at innovative once marketing groups like similar to what you guys do. And I'll say the one fatal flaw that most groups do is what Tyler said in the beginning is just not listening. A lot of times, before they even know what my pain points are, they're telling me how great they are at X. Well, maybe I don't need X. You never even figured that out by having the conversation with me first. So it's good to emphasize what you're great at, but make sure that you're tailoring your pitch based off of what you heard them say to you. Like, if they're telling you that their pain point is direct mail, and all you're going to do is focus on Facebook or telemarketing, you're not addressing their so their thing. I mean, and maybe you are in a way by spending it over to that, but at the same time, if I don't feel like I'm being heard, like, I'm like, Oh, this guy's just going to ramble on about how great they are again, definitely not going to buy from this guy. And then that's the end of the conversation. Because he never discovered where my pain was. And by asking those open ended questions in the beginning and embracing that conversation, one that's going to increase the amount of time that you're on the phone with the client, which, as we all know, the more time you're on the phone with the client that leads to higher conversion rates. So the more you know about them, the easier it will be to transition into talking about how great your products are and what you guys can do to help solve those problems. Well, all right, Facebook, the understanding the value of or like any lead, but like, digitally shelf life, not as long as a direct mail. Does not mean the quality isn't as strong. It just means you have to approach it differently. So when you're talking to someone, and they are used to direct mail, rather than just saying, Well, hey, why don't you try this? You need to understand how direct mail works a little bit longer shelf life, tougher to get a hold of, maybe you have to get you have to feed the streets to really pull everything out of a direct mail piece. So it's a harder concept and process. If you do digital marketing, it's easier, but you have to be more responsive and you have to be more active. So you have to get on it right away. You have to have a system in place. So when that leads being generated, you're on top of it immediately. So explaining to them how to act to understand like, if you meet someone, and they're mainly doing direct mail, don't just get the order explained to them. And you could even out. I'm sure you guys have thought through this, but even having like one thing that one vendor did before that was really cool, is they would actually send after you place an order, like a basically like a script and a process to how to work it correctly. Say, Hey, if you follow these rule points, you'll have success. So I think sometimes to asking the questions you collect the information, you're getting an agent that only works direct mail. You're going to have to explain how to appropriately work and set the expectation correctly. And then they'll have better results. Thank you guys appreciate that. Alright, now let's jump into Nick. What do you want to do for energy man? Also directors can go ahead and head to the 850 Sam meeting. Okay, we're going to do some energy. And then Tyler and the guys, I'll probably have Derek walk you guys over to to meet with my dad. Hey, if you enjoyed this, I got another It's right there. Click on it. See you in there. If you had to help an agent out there that's struggling, they're not where they want to be yet. And maybe they're new, but they're like, man, I'll make quit. I'm thinking about it. Like, I'm not making any money. What advice would you


I am senior web engineer from TenApp and today I would like to talk about automated testing of WordPress projects. Before I start, I would like to say that it's quite a big topic for one conference, so I will skip some details to not say too much and give you too much information. So if you find something you want to know more, come after my talk and I will explain you better. So I think everybody here knows that any change made to large and complex code base requires testing to ensure that we not introduce any new bugs in our system. So in all testing manually, each time we change something, it requires significant amount of time and energy. And not always can guarantee that we find all bugs. So that's why we need to automate our testing so we can easily check everything each time we change something. Today we have three types of testing used in web development. The first type is acceptance testing. Second type is functional testing, also known as integration testing. And the third type is most known unit testing. If we talk a bit more about unit testing, this testing level is intended to test all the smallest units of our application, like functions and classes. And the purpose of this testing level is to figure out if all our units works as we expect. Talking about WordPress, we need to test on this level all functions and class methods which we have in our application. And especially we need to pay attention and try to execute this test in isolations and write tests for one behavior. Second type of testing is functional testing. On this level, we combine our smallest unit into modules and test how these modules work together. The purpose of this level is to figure out if our modules' plugins have compatibility issues between each other and if they work correctly or not. Once again, in the WordPress reality, we check if modules work together, if plugins work correctly, if we have any compatibility issue between themes and plugins, etc. The final level is acceptance testing. This testing level is intended to test the system as a whole. And we need to check if our system is compliant with business requirements. So it means that we need to check our site without understanding what plugins we use, how it's built, all what we need to check is how it works in the user's browser to make sure that the user can come to our site and do what he needs to do and be happy. Okay, what we have today and how we can create our tests. Today we have a lot of different frameworks for testing, but the most known is PHP Unit. It's a good framework and oriented for unit testing, but unfortunately, it's a bit hard and maybe almost impossible to write acceptance tests and functional tests just with PHP Unit. So a new framework has been developed over PHP Unit, which is called Codeception. It's PHP Unit-based framework. It extends it beyond just unit testing and gives us quite flexible tools to write functional and acceptance tests. As you can see, it has a lot of different modules which you can use in your tests. All of them gives you different abilities to check, for example, database, file system, REST API, XML RPC calls, etc. But unfortunately, it doesn't have WordPress module which will help you to write your tests for WordPress projects. That's why we decided to create a WordPress plugin which will integrate Codeception into WordPress. We called it WP's Codeception. It's a WordPress plugin which integrates Codeception into WordPress and allows you to use WP CLI commands to create and run tests. Excuse me. Okay. So as I said, it uses WP CLI commands and let's check the basic commands which we have. To create testing environments in our projects, we need to run WP Codeception Bootstrap command. It will create in your project global config and by default, it will create three suits, each suit for each testing level. So you will have unit suit, functional suit and acceptance suit in your folder. To create tests, you can use one of these four commands. I don't want to go into details and explain the difference between them. You can check it in the documentation. It's like the difference. So let's go to the next command. It's Codeception run. It will run all tests which you have in your projects. You can specify which suit you want to run and what test you want to run. You can also define different environments and run your tests in different environments. That's all about theory. Let's take a look at the demo. It will explain you how you can use codeception. So here we have just simply basic WordPress installation with WooCommerce and MyStyle theme from WooCommerce. Let's assume we have a site which we built for our customer. And customer wants us to check each time when we develop a new feature that everything works. And users can go to his site and purchase products. Let me open a sample. So here is just really basic site with default products. So what are we going to do? We need to run terminal. Okay, I will make it a little bit bigger. Okay, let's assume we have a folder called MyPlugin. And let's assume we do everything here. So to create a new testing environment here, we just need to call WAP, codeception, bootstrap. It will create all required configuration files. And if you open it here, it will create a folder with tests. And here we have acceptance suit, functional suit and unit suit. So let's create one suit for, sorry, one test for acceptance suit. To do it, we need to run W codeception, generate, test, acceptance, MyTest. It creates a new file in acceptance folder which we can open and start writing tests here. Each public function which it doesn't start from underscore will be considered as a test and will be executed. So before we start writing the first test, let's create a scenario for our test. Let's try to automate checking if users can purchase products in our e-commerce shop. To do it, we need to go to the shop. Let's do something like first step, go to the shop. The second step, select premium quality product. Here we will change the quantity and let's grab a price to check total in the future. So third step is grab the price and change quantity, add to cart and go to cart. After going to the cart, we will check the total price on the fourth step and proceed to checkout. So on the checkout step, we need to fill in billing form, proceed to PayPal. On PayPal, we need to check if we can pay with PayPal account and login and pay. And finally, we need to check if we purchase a product. So it will look like this. We click login and click pay now. After that, we will be redirected to thank you page. We will click here link. And we will check if we see order received, which we assume that we purchase something. So as you can see, this is not quite huge scenario, but it will take a lot of time if we will do it each time manually. So before we start, we need to adjust our configuration for acceptance suite. As you can see here, we will use web driver module, which will allow us to send commands to our browser and manipulate it. But by default, we will use phantom.js browser, which is good, but I will change it on Firefox. So let's set windows size, maximize. So let's start. Actually, I forgot to say that each test methods receives acceptance tester objects, which has a lot of helper functions, which will help us to test our site. So if you take a look here, you can see that we have a lot of different methods. Like I am on a page, I am going to do something I can see, I can't see, I feel filled, I select option, I can see link, I can wait for eject response, etc. It has huge amount of different helpers. So how we will do it? Okay. From the beginning, we need to go to the home page. So I say I am on page, on the home page. And I want to select, not select, but click on shop link in the navigation menu. So I say I click and pass as first parameter, I pass selector. In our case, it will be just shop text. But as a second parameter, I will tell context of this selection. And context will be just our navigation menu. If we go here, we can see that navigation has ID navigation. So I just pass ID selector here. And conception will determine that we need to click shop in navigation. So after clicking on shop, we will see this page. And let's assume I want to click on premium quality product. So I want to say I see premium quality in the products list. So I say context is products list. After clicking on it, I want to see the title of the product. Okay, sorry. We need to click on it to go to the product. Actually, we will use the same here. So now we need to check if you see premium quality title. I see premium quality title in the product title header one. So now we need to grab our price. So we have it here. So we need to say, okay, price. I grab text from price amount. And now I need to convert it to float variable. So I need to remove dollar sign. And so to do it, I need to convert it to float wall value. And break replace everything what is not numeric dot. So now we have price. Now we need to change quantity. Let's use something like random from 1 to 10. To change quantity, we will use I fill methods. The first parameter is selector for this field. So we can say something like quantity input text, quantity input text and pass quantity. After that, we want to say I click on add to cart button. And I see something like has been added to your cart. In the context of WooCommerce message. And finally, we need to click on view cart button to go to the cart. Click cart button, uppercase. That's all. Now we need to check the total price. So we have our cart. And we want to check that total is equal to our quality and the price. Sorry, our quantity. So we need to say I see dollar sign number, format, quantity and price to digits in the order total row. And after that, if everything is okay, we need to proceed to checkout. So here we need to fill in all required fields. So when we call I fill field methods, we can pass as the first parameter field label. So I can say I fill field first name and say Eugene. I fill field second name as Manuilov. What else? I need to provide email address. And I need to provide phone number. Then I need to select country. Select option. Country, let me be Ukraine. Now I need to fill field and set town and city. Now state country and postcode zip. State country. Let me be something like this. And finally we need to click proceed to checkout. It should be something like click proceed to PayPal. Okay, here we can try to run our test and see how it goes. So if we open here, we can say, okay, codeception, run acceptance and show me steps. Sorry. Again, we started our codeception. It should launch Firefox now. Okay, so we made a mistake in selector because it's not second name, it's last name. Okay, if something wrong goes with your test, codeception will create a screenshot of that page. And you can see what happens when test fails. So we can see that I entered wrong selector. It's last name, actually. One more time. Yeah, proceed to PayPal button. Okay, let's try one more time. Okay, this time something wrong with postcode. Postcode zip. Okay, zip should be uppercase. And the final one. Okay, as you can see our test run successfully. But now we need to go to the PayPal and to pay for it. So the problem with PayPal is that it uses Ajax requests and to simplify our tests, I will wait a few seconds to make sure that all Ajax requests have been processed. So I just say I want to wait five seconds. And I need, after that, I expect to see this page. But I also need to make sure that I want to pay with my PayPal account. So I need to click on this link and wait a bit to make sure that PayPal switched to PayPal account. After that, I need to enter email and PayPal password. So I say I fill field email with my sandbox account. Fill field PayPal password is something like this. And I need to check option which says this is a private computer. After that, I need to wait a few seconds and click on pay now button. After that, we will have thank you page with click here link. And finally, we should be redirected to other received page. And we want to make sure we have this header on the page. Okay, let's run it. As you can see, each time we have a different amount of t-shirts which we want to buy and we have address. I forgot about address, sorry. Guys, if I remember correctly, it was something like billing address one. Let me correct this. I forgot to click on login button. I hope this is the last one. But you can see that if we spend one time, ten minutes to write a test, it will run each time you change something. It will take 15 seconds and you will be sure that everything works fine for you. Okay, actually the last one is probably something wrong with selector. But in general, you can see that we passed all checks from the beginning till the end and we checked that all the process works correctly. This is the only one scenario where we can use our conception. We have a lot of different cases when it could be used. And for example, if you have large project and you use, for example, staging server, you can run all tests on staging server each time a new version appears. And you can run it in CLI without any needs to install Firefox, etc. Also what we have is a module for browser stack. I'm not sure if everybody knows about it, but browser stack provides us ability to use automated testing using its service. So what we have, we can run our tests using browser stack on quite range of devices. For example, we can run all our tests on mobile devices. We can select, okay, I want to run it on iOS. I want to have iPhone 5S and I want to have there, for example, Chrome browser. And it will run. For example, you want to run your tests in Windows and XP and have Internet Explorer 6 or something like this. So let me show a quick example of it. So actually, let's do not close it. You just do something like this. We will create a separate test for it. We will go call it test browser stack. So to use browser stack, we need to change our configuration. I don't want to spend too much time on it. Let's just do a quick overview of what we have here. As you can see, I have defined another environment for staging server, which uses browser stack module and configures it to use Windows 7 version and Internet Explorer 10. And the URL will be Paris Worldcam.org. So what we will check. Let's see what else can we check here. So let's check if our start responsive and if menu for mobile phone will be different than for desktop site. So, for example, if we grab this button, I can say I am on home page. And I see this text in the primary navigation context. And I don't see this button. I don't see menu toggle. Sorry, not menu toggle. I don't see this text. So I don't see this text in the same context. So now I want to change the size of our windows, for example, to the mobile size. I say I resize windows to this dimension. And now I want to see mobile version and don't see desktop version. So I say I don't see it and see the second one. So it's really simple, just as an example, because I don't have too much time. And we will run it on browser stack. So to do it, we need to say conception, run acceptance, show me steps and use environment staging. Now we go to the browser stack and run our test. So we started browser stacks, started new instance. Launch windows 7. Actually, it works faster, just interconnections slow for some reason here. Okay, time out. Unfortunately, I can't show you it right now because internet connection is slow and we can't demonstrate it. But in general, we can just run any operating system and any browser we want and check in different browsers the same site and to make sure that everything works in different browsers if we need to support something old and crappy. That's probably all for me today. It's just an introduction into automated testing and I tried to show you what you can do and how it could be easily when you create small tests and it will save you a lot of time each day. Okay, back to my presentation. And thanks for listening. Thanks, Eugene. I have a question for you. How about dynamic content like Ajax? For example, instead of using PayPal, I use Stripe and when I click on the process to check out, I have the Stripe pop-up. Yeah, you can use different methods like, for example, if you take a look here. We can say I wait for JavaScript. So you can check if jQuery has active connection, active Ajax connection, then it fails or wait while we finish all connections like this. So it could be done. Actually, for JavaScript, for text. Yeah, we just can wait for JavaScript to be executed. Thank you. A question? Thank you for your presentation. It's very interesting. I have two questions. The first one is your project free? Yeah, it's free. We actually don't have a code exception project. We have WP code exception plugin. It's free. It's on GitHub and you can grab and use it. Okay. The second question, is your project working only with WordPress with any other web application? Code exception works with any PHP application. It has a lot of different modules for different modern PHP frameworks like Symphony, Laravel, et cetera. Native application. Yeah, even native PHP application will work fine with code exception. WP code exception is just a plugin for WordPress to help WordPress developers use code exception in other projects. Okay. Thank you very much. You're welcome. Thank you for the presentation. I'm more of a project manager, so I have a more global question. What kind of workload would you say this adds up to a project as compared to the usual development? How long do you think the test would be? Sorry, taking to create or write? It depends. It depends on what you want to test and how complex is it because if it's just simple front-end, it won't be too hard to write a test for it. If you want to test something in the admin side, it will be more harder and might take a little bit more time. But I would say maybe 10 minutes, maybe 15 minutes. But in future, it will save you a lot more. Sure. I think the other part is who do you think should be in charge of this? Is it better to have the developer who did this section write his own test and run them, or is it better to have a new pair of eyes and someone outside of that who does the test? Once again, it depends on the project, type of project. If enter resources which this project has. Because in general, I think it's more proper if developers write their own tests when they develop something. It's my opinion, I think. Thank you. Thank you. In your code, do you have some tests to test speeds or several latency or response in generating pages? No, I think test speed and performance is a bit different testing level. It's like system testing or something like this. And it is more related to DevOps guys, RAISers and PHP guys. So you can try to generate a page for two seconds or five seconds. It depends. It's not including your... Actually, maybe I misunderstand your question. Do you mean you want to test the performance or what? Just testing page generating. For example, in your projects you have your page generating in few seconds. For example, after upgraded WordPress in newer version, pages are generating in ten seconds. Do you... Yeah, you can extend your tests to check how quickly you go from one page to another page and compare probably to some value which you expect is fine for you. Thank you for the presentation. I want to know if there is any code-hint extension for other code editor. Sorry. I see that you use IDA. Yeah. For instance, for brackets, is there any extension for code-hint? For code completion? I think all modern IDE has code completion and can understand what you have based on your... For example, if you take a look here, I have WAP code-ception folder. It's a plugin which we use. And I installed it and activated it in my WordPress admin panel. And my IDE understands what files and classes and functions exist there and just use it for completion. So if you use something like PHPStorm or anything else that has code completion, it will also understand it and will help you when you write your tests. Thank you. Hi. Thanks for the presentation. It's very good. I have a question. I understand you have a script for testing a module and then you have script for testing the device, the interface. But how many scripts do you need to test one module? Because you've done just one script. So what is the average number of scripts that your developers have to design to have a full test of the script making sure that you can buy a t-shirt but you can say, well, I'm wrong and I go back? Yeah. Once again, it all depends on the project, on your resources, on your deadline, on how many developers you have and how deeply you want to test your projects. Probably something could be sacrificed to make the project faster. And probably, for example, for acceptance tests, you can just test the main features if you want to develop the project sooner. So it all depends on situation and projects and what plans we have and what resources we have. But in general, it will be enough if you test the main features which you need. Another question from Bishai. Hello, Philippe. I have a question on how can we improve the recording of a test scenario? Would it be possible, for instance, to use the Chrome developer tools and the network tab, you know, you can just check a checkbox and preserve log. And you can get... The result is that H-A-R, which is basically a recording of what you just do at the traffic level under Chrome. Would it be possible to get this log to import a script? Like in... Well, for use case, you can do this in Gatling, which is a stress tool. And I don't know if you know it. Yeah, it's a good question. And to be honest, I haven't faced such requirements and I'm not sure at the moment if it's possible to do or not. But thank you for your question. I'm sorry. So we can congrats again.


Hello, my name is Ray Drummond and I'm the current fitness program coordinator for the Visbot and Fitness Facility here at Clay Casern. I've always been an advocate for fitness. It can be used as a beneficial factor in your life, especially if you're having a lot of hard times in life. Fitness is the go-to pill. How does me as a trainer integrate readiness into family members and military soldiers? So the way I contribute to that is in order to make soldiers readiness is challenging themselves through physical workouts. Having military dependents be able to deal with stress through fitness and we offer those opportunities to them here by providing them worthwhile fitness classes through functional fitness, through yoga, through spin, gives me goose pimples, see? I get it every time I talk about it. My purpose in life is not just to collect a paycheck. My purpose in life is to inspire people to better themselves. My name is Ray Drummond and I am US Army Europe.


While no construction has officially started yet, plans for the new Gene Dillon Elementary School and Bemidji are moving quickly. Josh Peterson has more on what the school will look like and what challenges still remain. In 2014, the Bemidji School District voted to approve a tax increase to build Gene Dillon Elementary School. Fast forward to 2016 and the start of the construction has never been closer. On December 8th, the bidding process began and it's up to Krause Anderson to go over 150 plus bids to build the new school and bring their recommendations to the school board. Some of the bid packages were very competitively priced and in some cases such as structural steel were very close bids. Over the past few years, issues of communication between the city of Bemidji, Beltrami County and the school district have put the project in jeopardy. During a Bemidji City work session last November, it was decided that the city would extend utilities to Adams Avenue and the school would then run a line to connect to city services. The city negotiated a deal with the school district to not annex the school's property until the school officially connects to city services, helping the school save some money during its construction. Currently, the site of Gene Dillon Elementary School is a vacant snow-covered field, but in just a matter of two years, the all-fourth and fifth grade school will have features such as terrazzo flooring and high-tech classrooms. While stressed relations between the school district and the city of Bemidji remain, the county is looking ahead to what they need to do to ensure that its roadways are ready and safe for everyone. There will need to be some traffic improvements and we're looking at potentially the Beside a Road intersection, which is also the entrance to the new school. The county recently ran a traffic study and is currently working on recommendations that will impact Beside a Road, Division Street and Adams Avenue, but with construction happening this spring, the county has had to move quickly. It's a little quicker than normal, but I guess it's not too far out of line. I guess we already had a head start. In Bemidji, Josh Peterson, Lakeland News. The county will hold its next meeting to discuss the school and the road reconstruction projects for the new school on January 3rd. If you've enjoyed this segment of Lakeland News, please consider making a tax-deductible contribution to Lakeland Public Television.


I learned a lot of technical and practical skills to do my work. I also felt immensely supportive to be connected to so many people doing this work on the planet.


Γεια day, and welcome back! It's Vicky here and today I'm featuring the foiling plates from the Christmas Fold Basics Collection by Yana Smakula. This is an amazing collection that I've been using throughout the week and I think that Yana really nailed it. I'm going to use today, this set, this is the Christmas sentiments that give you plates with sentiments in lovely fonts. και δημιουργούνται όλοι οι νέες. Αν βλέπεις ένα καλύτερο κομμάτι εδώ, θα δεις ότι έχεις όλες τις νέες και έναν kind της λόγας next to each other. Λοιπόν, μπορείς να δημιουργήσεις εύκολα νέες like 2021 για το next year και γνωρίζεις ότι they are perfectly aligned. Και αυτή είναι η στιγμή με έναν άλλο παράδειγμα. Αυτό είναι ένα κόμμα από, προσπαθώ να το χρησιμοποιήσω από my magnet. Τώρα, αυτή έχει 3 λίγες λίγες underneath και λόγες με άλλες παράδειγμα. Λοιπόν, για παράδειγμα μπορείς να έχεις από όλους μας και μπορείς να δεις ότι είναι kind της λόγας εκεί για να γνωρίζεις ότι they are perfectly spaced and aligned. Θα βρεις αυτό πολύ καλύτερο να έχω αυτά τα παράδειγματα λόγας ένας και άλλος γιατί είναι πολύ καλύτερα και ξέρω ότι οι παράδειγματα μου είναι καλύτερα. Τώρα, αυτό είναι το κρίσμα σφόλιατο κομμάτι. Αυτό είναι ο καλύτερος κομμάτις. Είναι πολύ αλήθεια. Θα δείξει ένα λίγο πόντια και λίγες και όλες που χρειαστεί να χρησιμοποιήσεις ένα λίγο κρίσμα και όπως αυτό το κρίσμα, το κόμμα underneath φύγει inside και θα δείξεις ένα κρίσμα που χρησιμοποιεί έναν λαυλικό κόμμα σφόλιατος. Τώρα, θα χρησιμοποιήσω τα δύο από εδώ και υπάρχει ένα σχέδιο στήμα που δίνει το ίδιο σχέδιο αλλά με λαυλές, ώστε να χρησιμοποιήσεις αυτό μέχρι το χρόνο. Αυτό είναι σπιστικά για το κρίσμα. Τώρα θα χρησιμοποιήσω τα δύο από αυτά τα δύο στήματα και να χρησιμοποιήσω ένα κομμάτι από δύο κρίσμα. Όχι γιατί εγώ αρέσει οι δυνατότητες κόμμα και δύο κρίσμα. One of them is going to be with reds, golds and greens. Έτσι εδώ θα χρησιμοποιήσω το κόμμα εγώ. Θα χρησιμοποιήσω ένα από τις σαντυμινούς, προσπαθώ να επικάθει τι θα χρησιμοποιήσω. Είναι, τώρα, ένα κομμάτι μέχρι το κρίσμα. Έτσι αυτό θα χρησιμοποιήσει έναν καλύτερο κρίσμα με το σαντυμινό μέχρι. Και εγώ always like to use a little bit of wash tape to keep everything together, ώστε να χρησιμοποιήσω έναν κομμάτι, ώστε να χρησιμοποιήσω έναν καλύτερο κρίσμα. Τώρα, από τη στιγμή μου χρησιμοποιήσω αυτό το κρίσμα και αυτό είναι πραγματικά το same size as the plate. Λοιπόν, θα χρησιμοποιήσω αυτό και δω ένα λένι για όλα εδώ μέχρι το κρίσμα. Πω πώς εγώ πω ότι το κρίσμα θα χρησιμοποιήσει και θα βρήκε όλα εδώ μέχρι. Λοιπόν, θα θα χρησιμοποιήσω ένα κρίσμα. Αυτό δεν θα δω τώρα, αυτό είναι απ' ένα κομμάτι μέχρι όπου πρέπει να κάνω το κρίσμα. So here I'm going to place next to that line of circle my plate I'm going to anchor it with a washy tape and then I can add some foil underneath so I kind of created a hinge this way I know exactly where I need that foil and I need to repeat that process three times all around the circle to make sure that I have a complete wreath the red cardstock I'm working on is slightly smaller than the standard card so it's going to leave a little border at the end now I'm going to create everything else that I need foil for my card I have a little piece of green cardstock and I'm going to pick a few of the leaves again I'm going to use my gold foil I'm going to place on top everything I need from the little leaves and notice that you don't only get the detail for foiling but you also get the ties to cut them out again I will use my washy tape to make sure that nothing is going to move and now I'm ready to do the foiling so you can see here I have my sentiment my leaves this is a little poinsettia from the same set and I do have an extra sentiment here with gold foil which I'm not going to use at the end now I'm going to place the plates on top press that baton and I'm waiting for that light to stop blinking then I know that everything is nice and warm I'm going to run it through my die cutting machine a couple of times in slow motion this is going to ensure that I will end up having a lovely foiled detail and I'm going to peel it off so you can see the results so here is the sentiment that I didn't end up using but I can always use it on another christmas card here is my poinsettia I'm going to peel off the main sentiment and look how gorgeous this looks I absolutely love this one and here are the leaves in the meantime my red cardstock is in the machine so it's getting ready to add that foliage around the circle and now let's take a look at the results I did end up making a new poinsettia I thought I wanted more than one but I'm not going to use it and here is the lovely wreath I repeated the same process two more times and here is the complete wreath super shiny and I think it looks stunning now if you have any over foiling you can use a santa razor and this is going to fix any problems like that now from my stash I found the circle die that fits perfectly around that sentiment with the ring I'm also going to use the magic dies for the leaves I'm going to cut out the poinsettia and with the magic of video editing I have all the pieces ready here so it's time to put my card together I have a four neck order by five and a half white card base I'm going to stick on top my red banner using glue at the back for the circle I want to have some dimension so I'm going to use some foam tape there and you can leave it as it is I think this card looks beautiful however I'm going to embarrass it a little bit more with all the leaves and the poinsettia that I have for the poinsettia I'm going with a little foam tape at the back and then I'm going to tuck underneath the leaves just to create a little Christmas cluster there of all the cards that I make throughout the year my favorite is to create cards for Christmas and if you ask me foiling is a perfect match for Christmas cards they give that extra shine and sparkle that you need plus there is something special about foiled cards they make the card look really professional so here are some close-up photos on the first card for today that golden wreath are out the sentiment I think is just stunning and I did finish off the poinsettia by adding a white gem on top For my next card I'm going to use the Glimmer Gift Border which I think is super cute you can use it in so many different color combos I'm going for a non-traditional color scheme for this card and I'm working on light blue cardstock and I will be working with this lovely teal foil that matches the color of my cardstock just like I did for the previous card I'm going to repeat the same design and create a little circle with the sentiment inside this time my sentiment says season's greetings again using the same teal foil and look how lovely it looks now I have another set of plates and this is also designed by Yana this is called Christmas Organic Foliats it gives you lots and lots of leaves and other stuff that you can create little clusters and in comparison to the other one that I used for the first card you can see that they are bigger so you can choose whatever you want now I'm going to use the bigger of the leaves from here I'm going to use the plate as well as the matching tie and first I'm going to do some inking so here I'm using this tres oxide ink in a slightly darker color than my card base you can start of course with a white card base and just combine lighter colors but I decided that this was the easiest way so as you can see I'm adding ink of a darker blue only at the edges this way the center is going to look as if it is glowing now look how dull the foiling becomes don't worry at all about that the distress oxide ink sits on top of foiling it doesn't discolor it at all all you have to do is to just use a clean cloth or a paper towel and you can have the shine back now I want to darken up the edges even more and by adding that black shoot only at the very edge it's going to make it look as if the center is glowing even more I am really happy with the background and probably out of the two cards for today this is my favorite I absolutely love this background let me know in the comments below which one is your favorite too and of course don't forget to go back with your cloth and remove any excess ink that stays on top of foiling using the same foam roll I did create those two leaves as well as a little poinsettia on white cardstock and I did use the matching dies to cut all those shapes I also used the dies of the leaves to cut out two leaves out of velum I'm going to use those to add a little bit more bulk and make that embellishment fuller so again I'm inking up the edges just to have everything match with the background again I have foam tape at the back of my circle this is going to go at the center of my panel for both these cards I'm using the exact same design now you can have leaves all around and embellish the embellish the sentiment like that however since I'm staying with the same design I'm going to do just what I did with the first card so you can see that the same design can have completely different looks I'm going to create a little cluster there with the leaves and at the center I'm going to use the poinsettia this time in white to finish of my card I'm going to add a little blue gem at the center of my poinsettia I think it matches nicely with the rest of the blues for a monochromatic card with lots of shine now all I have to do is to stick this panel on top of a standard card that's four and a quarter by five and a half and here are some close-up photos on the last card for today don't forget just like always you will find links to everything I used down below in the description area thank you all so much for spending some time with me today I hope that you had fun that you got inspired and I'll see you all next time


I love Scarface. But when I heard you on that Scarface track. Street lights are glowin' every day Another struggle, my movement's slowin' and silenced I still was waitin' like Jadaw for to eat this whole. This is cover my face My mama got mad at first She knows she made it Boss talk one on one, one on one Here we gon' talk New wave, same water. Same water. Yeah, what made you come up with that slogan? What is that even? It's the blend. Okay. It's a separation these days with old and young and you don't even get one without the other. Okay. So it's just a blend. It's like, even though they got a new way of doing things, it's the same water they did, you know, same blend, you know? You know, I love one thing about you Houston niggas, man. I can't lie, y'all. I can't say I be on these Dallas dudes a lot of time. I just was talking to somebody about this. Like I be trying to figure out like who's next, who you're helping, who you're getting on the feature with. The young people coming up, you know, it seemed like y'all figure it out up there for real. Like y'all seem like y'all were, it may not even be that way, but it seems like, like when I talked to young, easy. It was another time we had did this thing and there were like J-Docs from the perform. So I remember going over there and DJ Pat, it was his show, you know what I'm saying? So we went out there and I remember feeling like I was so tired of DJs trying to play and like cut my time and having to go up there, get my money back and do stuff like that. When I went with DJ Pat, he was like, nah, bro, you gonna get your whole time with me. So me being nervous, like, man, I gonna end up cutting my time ago, make sure I do my whole set. J-Doc wasn't even in the building. So boom, J-Doc comes in there.  They say, $150. I said, all right, cool, boom, paid that, spit my flow, the one I shot at J-Doc in, the next thing you know, we doing Minnesota Society. That's like a song that's over 600,000 views on YouTube with me and J-Doc. And working with him is just like, it's on a whole other level, man. I feel like he's one of Houston's best. They uplift you, so I'm terrible. Like the other people coming behind you, you guys don't hesitate to be an imprint, whether they paying or whatever, or they got to hustle or whatever, y'all always be there for them. And I commend you guys for that. Yeah, I think I got that from the projects. Really? Yeah, I think if we don't got nothing down pack, we got the wheat thing, you know what I mean? Like it's always been wheat. You know, it's never been me, you know? I don't even believe that you could judge a parrot the right way without looking at the kids. So I definitely don't believe that you can judge the little homies the right way without looking at the old... The old Gs, yeah. And a lot of the old Gs not doing their job.  A lot of them say, man, I don't got no G. Yeah, I hear that a lot. I heard that too. And they get offended when you speak up on, and that's just unheard of in my era, but I can see where it comes from. But I want to know, because the blueprint of what y'all have done there, because everybody always said, just like what he was saying, it took the togetherness down there in Houston, but I want to see that spread amongst everybody. Because when we talk about Dallas, I've heard the youngsters say, I don't know these old Gs, they stay in their lane, we stay in our lane, but why can't everybody come together? Yeah, I don't understand either. It's tough. It's the same way in Houston, though. Oh, it is the same way? It just looks... It don't look that way, though. It's so much like that. It's the same way. And I think everybody else look at everybody else's and they like, ooh, and ah, buy it, but it'd be the same thing. They say the same thing about Atlanta. They say Atlanta is so together. And then we talk to the Rez and all of them and talk to all the people down there. And they say that it's still separation. They say the same thing. So much competition with each other, man. I don't understand. Wow. First time seeing yourself on BET. How was that? It was interesting, man. It was... Man, I can't eat a lot. I don't even remember too much. What was the first time, one on six apart? Yeah, yeah, yeah. I think it was... Was it... The first time we was on BET, one on six, I think. Yeah, yeah, like what? On the out of basement. It was Tigger. In the basement, yeah. Okay. What did you think when you seen yourself? I shoulda did more.  Brought it harder? Not harder. More. More. Yeah, because you know... Which song was it? Because I don't want to have it wrong. Not that you dropped the beat in the basement. Oh, you talking about just you being in there. Oh, you was in there, you were on it like that. That was the first time? Yeah, the first time.  I didn't... Who was in there with you? Me, Sinelle. Kylie on... I think I remember that now. Kylie on PJ, Chris Ward. I think that's it.  Yeah. So you can always think that no matter what then. Right, right. I'm real hard on myself. So when you went back and watched it, what was your... Do you think I couldn't be harder? I didn't even go back and watch it. I'm so petty.  I ain't watching this. I ain't watching this. You just knew you coulda done better. I just knew if I woulda been 100% me when I went in that room, it woulda been yummy. Epic. Did you... Is it just cause I ain't gonna lie, when I hear you on the track, I expect you to be bringing the hardest out of everybody. I don't care. And it's sad because I love Scarface. But when I heard you on that Scarface track... Street lights are glowing every day. Another struggle with my moving, slowing and solace. I still was waiting like, Jadon for to eat this whole. This cover my face. My mama got mad at first. She knows she made it. Like, that's the way we be feeling for you, bro. Yeah, man, I'm... I'm being real. I'm over-appreciative, cause you know faces like... Yeah, and I'm telling you, even that's why I said his name, because it would be... You wouldn't think that a nigga would be anticipating the way, cause you... I think you came last on that version. Yeah, dude. What you know about the late nights, no lights and no fools, no diapers for the babies, the whole house felt like boo boo. And when you came, a nigga was waiting on it. It made it like I got... We got to hear what Jadon was gonna say. And you didn't let us down either. You know what I'm talking about? How was that? You gotta break that down for me. I didn't just say that. Man, I didn't even hear a face on it before I got on it. You know what I mean? Yeah. I just heard Slim kill it. Hard knocks, wanna get rich, find a spot to pump that hole.  So that was enough for me. You knew you had to bring it? Well, you know how I do is tell my story, so I ain't really lyrical or... I know that, but... So you know I just... You know when you giving... You just said, I didn't give it my best shot when I was in the basement. You know when you get on that track. I was nervous in that basement. I get it. You know what I mean? I got nervous in that basement. Because that was the first time you're doing something like that. Yeah, man, I'm thinking about it. I watched this shit, man. And if I fumble, how it bears, then that would be. So I guess I was just... I went, you know, I was a little nervous on the fumbling floor. Wow. I did not want to fumble. Mm-mm-mm. So you've been back on BT after that, right? Because you went to one of the shows. Or a show and stuff like that. But you've never done anything like that again, live on BT? No, but they don't have too much in them no more.  They need to bring out that bag. Because that was fun. I remember that. I think trying to figure out where to bring some of that bag. I was hoping so. But then, if he starts something new, it's almost like you'd want him to not bring that back, but do something totally different. Because you don't want to make it feel like he's trying to copy them. It ain't too much you can do if you got any kind of competition against BT. I think you're gonna be hard to win against BT. Mm-mm. Yeah, that's true. They say that about podcasts. That's right. Yeah, we on boss talk one on one. One on one.


Hey, I'm gonna answer a couple of your questions that you guys have been asking Daniel's gonna ask them to me And then I'm gonna respond so I appreciate all the questions. We love comments questions So make sure that you're always adding a comment or a question Something pops up Wendy asks on live in Medicare calls. The toughest cold calling is to people T through T65 yeah, six months out from their start date. What's your opinion on this good? That's good because I would say that was always my favorite time to cold call Even though it's the toughest when people are turning 65. There's three to six months out They may not be thinking about it yet. They're still getting a lot of mail, but I use that as a way to There's a couple of benefits that I that I use number one You know, I want to start calling them melon and doorknock and I'm that far out so that I'm top of mind I'm in the home. I'm building a relationship with them But use some urgency when you're calling them when you're trying to set appointment when you're trying to lock up the Cell say hey a lot of times medic or supplement companies will take rate increases throughout the year The cool thing and the reason why individuals go with us is they know they're guaranteed the lowest rate And they know that they're locking in that rate and tell them hey instead of rock locking in your rate for 12 months You're actually when you purchase your medical supplement six months before which is what a lot of people try to do because it's intelligent You're able to get an 18 month rate lock instead of a 12 and so use urgency and use that rate lock as a way to do that Nice D. Fisher comments. Hi Cody about a month ago. I ordered 20 leads issue is I noticed was difficult to Get in touch with the leads the one person I did contact bought 1200 AP nice. Do you suggest door knocking? Yeah, what's up D? Thanks for the question. I would say always doorknock I mean exhaust every lead as much as you can the biggest thing with leads is and this is any leads I don't care whether you're gonna for us or anybody else Some will answer some won't it's gonna you're gonna have a little variance with every order Awesome job with the big cell do whatever you can to Get in from as many of them as you can because that's always the goal But don't call them once don't call them twice don't even call them four times Call them a bunch door knock them text them be unique email them whatever and so exhaust those Because every order is different we get orders to where they only make you know Maybe only 10% closing ratio or we get we get orders all the time where hey I closed 40 50% of my leads and so there's some variance But the reason agents succeed with leads they exhaust them and they order them consistently Gina Rodriguez actually commented and gene on the cold calling how to create free final expense leads She said whenever I asked the clients age. I always say years young instead of years old She says it always breaks the ice and us ladies love it. I like that. I could see why Ladies would love that in general. Yeah, just stuff like that little small things I mean some people may think that's cheesy and somebody that may not be in your personality to say it I've said it and I think obviously it is for you Especially Gina. I would say Be unique, right? I mean you want to stand out You don't want to be like every other insurance agent that's trying to help them And so yeah, the little things you can do to stand out and to be unique and be personable add that little personal touch Always do it. Everybody's everybody's got their own thing, right? Same video comment Marcus, Nisi says Marcus Where did you get all the numbers that you call we get that question? Yeah, we used list shack and Cells data pro a couple good options. I would say sells data pro is generally more Accurate you and you can get a little bit more you can get like 200,000 lead credits data credits or whatever you want to call them you can Actually download a list of 200 up to 200,000 people. It's like 49 bucks. So that's I mean it's like it's free really, right? I mean and then Daniel Casimau Says on how I sold 8,000 Final expense AP in one week that video Cody I sold my first two appointments that didn't porch me But now I am out of money and was given numbers to call. Can you give me some advice doing blind door knocking? Wow, yeah, yeah when you're door knocking awesome job Daniel The biggest thing is when you're door knocking appreciate you watching the video appreciate you commenting when you're watching when you're door knocking Some people think the goal is to set a future appointment Re-gather them as a lead gain interest whatever it is. It's all the above but the purpose of door knocking Be enthusiastic smile get your pitch down.  I've got some new update information that I need to go over with you Can I come in for a quick second always ask? You don't ask you won't receive the biggest thing the door knocking is get in the door right then Tell yourself that the only way you're ever gonna make a sell on that specific lead is if you get in their home Right now that urgency and that programming your mind to close on the first call To close on the first knock to close on the first appointment will pay dividends throughout your career I promise Thank you to everybody that commented on you too awesome job Thanks for all the comments keep them coming We'll continue to do videos like this probably every week or two addressing the cool comments that we find the cool kids That leave the cool comments that we're able to address and answer and help so thanks for the comments Thanks for following along we have we appreciate all the comments and we love you guys