What's going on guys got Kyle here with laden sports cards, and we are doing it personal for ASP and We have one twenty one twenty two mosaic choice basketball And we have three twenty twenty two tops gold label Good luck. Good luck. Let's see what we got I'll start with the gold label Do the mosaic last? Thank you, Tony. Appreciate your ordering man. All right. Good luck start off with an air and Ashby Trout Say a Suzuki rookie class one and Lou Bob. We got Bryce Harper This is number to 75 the doll Bruhan class one for the raised rookie Got Vladdie, Jr. And Jackie Robinson. Oh guards a braille. We've got blue to 99 That's gonna be Yachty nice Yacht father there. We got Bieber and Peter Lonzo Fredward we got Cal Raleigh Willie Mays my trout Got wander on the rookie that is class two McGuire and Brandon March rookie And here is your first gold frame See what we got in here on the front We have a Ted Williams base and on the back we have Paul Goldie number to 40. We got relic auto Ozzie Smith Nice one there for the Cardinals That's gonna be game used on the bat relic there Very nice Ozzie Golden greats frame jumbo autograph relic card Sweet one there for you. Ask real nice start Let's go with box number two. Good luck That's a sweet one Mo Rivera. We've got a Andre Jackson rookie Lou Bob. Yeah, the wizard one of the coolest Still frame photos doing backflips Frankie Lindor pocket Tateese We have the 150 blue Mike Schmidt and his class one Chipper and la dolo rookie in the entertaining tidbits Or just stats like it should be Shohei not comparing it any Oscar winning actor Swing and misery That's good. Yeah, another blue this one is to 99 it's gonna be Tateese class to See that Mo Rivera the Grom Kershaw It's a good picture pack right there Got Correa on the front and boba shed on the back both flows And our auto it's gonna be veteran auto Trey Mancini For the Orioles there the not numbered gold frame auto Love these gold frames. All right, and one more box of gold label for you. Good luck. Good luck Josh low rookie We have red to 35 rookie CJ Abrams or sorry 25 Nice one there class three on the Abrams former Padre Got Myers and Bryant have read to 75 this time. It's Garrett Cole Gavin sheets rookie Jake Myers rookie There's a numbered number box for sure to 75 this time. We got purple Nolan Ryan. That's crazy Bryson Stott. We got a Mike Trout class to Xander Louise Heel Yachty and a judge Fredward on the front Say a Suzuki rookie there. It's gonna be class three Lewis and John Carlo last gold frame auto here. Good luck. Good luck. Ashby on the front Gwin on the back And our gold frame is gonna be rookie Stewart Fairchild That is D-backs on the not numbered base gold frame auto. All right, and we got one more box for you This one is a mosaic choice 21 22 Good luck. Good luck. Let's see what we got. This will be the last box of the night guys If you want more personals, we will be breaking some tomorrow after group breaks about midnight So if you want to get one ordered it will be one of the first ones up tomorrow All right, good luck on this one. We have silver Luca and Time Lord Robert Williams I do like this first auto It is Stevie franchise Steve Francis auto for the magic there Not numbered on the franchise We've got Moe Bomba numbered to 88 We got rookie for the pelicans Herb Jones to 88 This is Andrew Wiggins 88 as well on the red yellow and we've got rookie Jonathan Kominga Green and red is not numbered and a rookie Greg Brown. All right, and that will do it for your four box personal mixer Thank you so much. We'll get it right out to you


So, this is the time in the schedule where you go to the sleeper sessions because we've just had lunch and we're all ready to get comfortable and take a nap, right? So, hopefully, I'll keep your attention as best as I can. All right, yeah, welcome to the session on Docker Power Team and Deployment. My name is David Newman. There's a link to my GitHub page which is actually just a link to these slides. So, if you want them, if you want to grab these slides later or whatever, I will also post these slides in the session on the conference website. Just briefly about myself. On Drupal, my username is Dave N. Yeah, I've been working with Drupal, I think, for about seven years. And I've been working at Civic Actions for around four years. Drupal developer, Sis Admin. Just want to also mention Civic Actions. I know we shouldn't do too much, you know, self-promoting of our companies. But I want to make a claim that I think Civic Actions has the highest average height for any Drupal company. If you take the averages over height, there's a lot of us over six feet. So, anyone is welcome to challenge that, but I think we might be among the tallest Drupal companies. So, something to consider. And, yeah, we're in the DevOps track here. I think DevOps, I started becoming interested in that subject about a year and a half ago. Really, Drupal plus DevOps really got into it more at DrupalCon Amsterdam, which is that. Really great sessions there as well. So, I just thought, can everybody hear me okay? Am I in the back? Everybody thumbs up? Thank you very much. So, yeah, DevOps track, welcome. There's a lot of good looking sessions in this, so please enjoy. And this session I'm going to be talking about Docker and how to use Docker for your development team, so your developer sandboxes. And I'm also going to try to describe how to use it in deployment as best as we can. And, yeah, I'll have the time for questions afterwards. So, sandboxes. This is a picture of my daughter's sandbox. She's two years old. And what makes up a sandbox for a developer? Not these tools, but basically when a developer starts on a project for your company, doing a Drupal project, they need the code, the Git repository. They need a snapshot of a database. And then, you know, the actual running services, be it Apache or Nginx or the database running itself, of course. And then there's also developer tools, SaaS, Compass, code sniffer, those kinds of things. So, there's a lot of different components. And actually, this is a growing set because we keep coming out with new and exciting things, right? Like, in Dree's keynote, he's talking about the front end. I'm not a front-end guy, so I'm really not up on that, but angular backbone. So, there's a whole slew of different things. And, yeah, so, typical team, you have to really think about how are developers using all these tools together.  Here's my daughter playing outside of her sandbox. Who here actually supports your team in their developer sandbox? Like, they have problems setting up, ramping up into the project. Yeah, so about a third of you. Yeah, I do that as well. And it's hard to do because you just never know how they're going to use it or how it might change. So, I think this image is interesting because she's, like, not playing with a sandbox. She's playing with water in a broom outside of the sandbox. So, you never know how messy it might become. And sandboxes are really messy. Who has kids? Sandboxes are messy. It gets everywhere. Anyway, so, that's sort of what I'm starting with is talking about sandboxes. Docker came along about a couple of years ago. It's a really active community. I did a tweet with the hashtag Docker and I got, like, 1400 retweets. No, not, sorry, 1400 impressions. But it's a very active community. There's a lot of people on Twitter and, of course, there's Docker conferences and everything. So, what is Docker? This is my description of it. It's probably broader than this, but it's an elegant new cross-platform development and deployment tool. If you go to the website, the website's really great too. Actually, check it out. Great documentation and good intro to Docker itself. But they talk about build, ship, run. And what they're describing there is basically a common experience for your development and deployment. That's, in my mind, that's an underlying goal of what Docker is, so that your development team is essentially using the same stack, the same tool as what's ending up on production. And the primary metaphor, the primary image for Docker is a shipping container, which I think is a great analogy. And I don't want to go too far into that, but... Actually, that'll come up later as I describe other things, but... So, in a sense, Docker is virtualization. It's very similar to a virtual machine, like VirtualBox. How many people use Vagrant? Wow, like everybody. So, yeah, it's a tool very much like Vagrant. This diagram shows... This makes it pretty clear for me anyway. The left side shows kind of how Vagrant will work with VirtualBox or whatever the virtualization tool is. The underlying infrastructure, the hardware, and the operating system, are similar on both of those. And then with a virtual machine set up, you also need the hypervisor. And then the guest OS, so if you're running, in this example, three different applications, each one of those applications need the entire guest operating system, including the kernel and all of the running things. Yeah, then the libraries and everything, your application would be on top of that. So, if you had just an example, if you had two Drupal projects on the go, you could have two virtual machines running with entire stacks like that. Docker, on the right side, is way more efficient. It actually reuses the running kernel. The running Linux kernel of the host is reused. I don't know if I'm explaining that well, but it's much more lightweight.  What that allows you to do is, because it's so lightweight, you can actually have a whole bunch of containers, potentially hundreds of containers on the same host. And if you are just running similar things, especially, it's more efficient to do sort of repeated images of a container. Docker, actually I should also ask, how many people are familiar with Docker at all? Okay, a lot of you. How many have used Docker? More than half. Okay, I'll try to go quicker through the Docker intro, because I think you probably already know a lot of these things. So, there's the Docker engine. Here's a list of some of the main components that I've encountered anyway in the Docker world. The Docker engine is what's actually running the Docker containers. Then there's the Docker command, the CLI, to build and run and so on. Boot to Docker is a vagrant image that runs Docker machine, basically. Docker compose, I think Docker compose, well for me it's a very central tool. I think it's a great way to really organize what you're doing. Well, Docker compose uses YAML configuration files, so Drupal 8 people would be familiar with that syntax. Docker machine is one of the newer tools. It's actually replaced the command line interface of boot to Docker. But it's expanded. At Docker machine, you can connect to your local vagrant boot to Docker theme, but you can also use Docker machine to connect to the cloud. It's a very powerful tool. I don't know if it's pronounced chytmatic or chytomatic, but that's a GUI tool for OSX, maybe Windows. I'm actually a Linux guy, so I never tried that yet. It's for Windows as well. And I've heard there's actually a way to run it inside Docker if you want to try it in Linux. I haven't tried it yet. And then Docker registry. So that's for sharing your Docker images. That's a pretty loose way to put it. But yeah, Docker registry, you can very much like Git in my mind. You can kind of push and pull images. You can commit them. And then Docker hub is like GitHub. Docker hub is a public free service of Docker registry with even more features on top of that. Yeah, more details on that link. I should also clarify the difference between a Docker image and a Docker container. An image is something like, in a way, it's like a snapshot of a container, and a container is a running image. And that sounds cyclical because it kind of sometimes is. But you can also create an image from a Docker file very much like a Vagrant file where it builds an image. So a container is basically a running instance. And what can you put in a container? Yeah, anything. This is a picture of shipping containers put together to make a nice cottage. There's a lot of shipping containers in the world and people are being creative about them. But with a Docker container can be as big and complex as a virtual machine as you would have in a Vagrant example. But it can actually be so simple and small as a single process. You can have it run just... A container can just do echo hello world and then it shuts down again. And then you can have a better example, maybe it would be a container running a database and a container running Apache. But then the question is how to connect those together. So here's another interesting image. I've actually learned a bit about the shipping world and containers as I was preparing this. It's an interesting space. But shipping containers can be stacked together to make a city. But how do you connect them together in Docker? There's ways on the command line to do that where you can link a container to another container so that inside the container it knows how to find the other one via ETC host mapping and so on. But in my mind, this is a Docker compose YAML file. In my mind, this is a pretty simple way of understanding those connections. And I don't know, this is a simplified example maybe. I took this from a real project. But there's three components to it. There's the database container, PHP container, and the web container. So this project is running PHP-FPM. And so the database doesn't really need to connect to anything but the PHP container needs to connect to the database. So I don't know if you can see this in the back. Sorry, I just wanted to put this up as an example. But what we're doing here is we're defining the database.  You can set some environment variables so that when the container starts up it has these values. And then you expose ports. And then the PHP container, similar thing, you say what image you want to use, what command you want to start running. That's another nice option. But then the links section of PHP there, it links to the database container so that PHP has access to that. And then similar with the web container, EngineX connects to PHP. Anyway, that in my mind is an amazing way to use Docker because you can put that in your Git repository. You have infrastructure as code. You basically define your stack however you need it to be. More on Docker. I grabbed this image from the Docker website itself. I don't really know what's going on here. I recognize the penguin. That must be Tux, right? But it looks a little funny. But I think it's trying to convey Docker is fun. And I agree with that. I actually really enjoy working with it and messing around with it. Sorry, I really like getting to know what people are doing, but who's running Linux on your workstation? Awesome. I think this is a European thing. Okay, at least half I think. I'm running Linux as well on my developer workstation. When I started playing around with Docker, I downloaded it and it's like, wow, everything is super fast. This is an amazing tool. Then I played around with FIG at the time, which became Docker Compose. I was setting up Drupal on it and I thought this is absolutely amazing because we can do infrastructure as code. We can do lightweight things. We can switch projects easily because if I switch to another directory and do Docker Compose up, then there we go, it's up and running. I was just loving it. And then we're good to go. I look on the Docker website, check the installation documents, and there's a whole list of operating systems there. Earlier I asked who supports their development team. Does anybody support their development team sandboxes using Docker? A few, okay. Yeah, so I do that. I help people on board at Civic Actions. I get on a project and I help them get their tools set up or whatever, especially new employees, get up to speed with what we're using. Yeah, a lot of people use Macs. OSX is very popular. I got them to install Docker. And basically it looks like a shipwreck. So this is my impression of a Macs user experience of Docker. So it can be quite horrible. This is an image of a container ship that grounded. It's called Rena or something. Yeah, so it grinds to a halt. There's containers falling in the water. It looks horrible. So on Mac it is incredibly slow. And at first I couldn't figure out why. So I'm trying to support these people and I'm looking at my machine and everything's amazing. Then I look at theirs and it's falling apart. I found out through Googling that the way we were using it, we were using the official default boot to Docker that you can get still on the Docker website. It uses a file synchronization called VboxFS for synchronizing your files. So the Git repository to Vagrant. And then within Vagrant it's doing another synchronization to the containers. So it was all about file IO. I was running a test suite on my computer that took two minutes and it was taking 20 minutes on a very powerful Mac. What do we do about that? Well, since we found out it was about IO that we discovered there was another Vagrant image available out there on GitHub and to the rescue. There's another boot to Docker that we're using. Actually, it's landed in the room. I don't know if he's at the conference. Anyway, this is awesome. We've been using this for all our OSX users and I'm pretty sure it works with Windows. We actually don't have any Windows users. Sorry. I'm pretty sure there's ways of doing Docker in Windows but I don't have to worry about it. But anyway, there is good news for you on OSX. Yeah, and what the big difference was here is that instead of using the default Vagrant file IO sharing thing, it uses NFS and we are getting much better performance on running tests and on actual Drupal performance. So that saved us a lot of grief. And yeah, once we kind of got over that hurdle we're actually now using Docker for basically all of our current projects, all of our new projects. There's some old ones that we're still working on that don't have it. But our primary thing is going on right now. So Linux and non-Linux we're using Docker for our developers. So introducing Bolin. You can pronounce it Bolin. Anyway, Bolin is a knot. I enjoy sailing. I don't sail as often as I want to but every sailor knows the Bolin knot and I thought it's a loose connection to the shipping container metaphor. I don't think any containers use Bolins. But anyway, it's a loose connection. But anyway, what is this project? Basically it's a collection of simple bash scripts that bring things together for Docker. A Docker setup for Drupal. It's very Drupal focused. I basically started about a year ago on this. I forget when I put it on GitHub but this is what we're primarily using at Civic Actions for our projects. Originally it was actually inspired from the Drupal CI test bot. Cheers to you volunteers who are building that and everybody working on that. That's a really cool infrastructure. So I was taking ideas from that code from the Drupal test bot and then kind of reworking it for project sandboxes for creating a Drupal-based website. There's eight contributors for Bolin on GitHub but mostly it's all me but there's been a few great little pull requests. We actually hired one of the contributors, so cheers. I think we're still herring, so check it out. What is Bolin trying to do? There's project goals for Bolin. Flexibility. We work with a variety of different hosting platforms depending on the projects. Sometimes projects come with their own production and everything like that. So flexibility was really important to be able to also maintain old websites. So not just flexibility about deployment but flexibility even... What do you do with Docker 6? Drupal 6 all the way up to Drupal 8. We didn't want it to be too rigid for that so that means different PHP versions and so on. Another goal, quick start. The ideal is a new developer or developer comes on the project. We want them to just clone the Git repository and run build and it should do everything for them. The first time, we'll have to get Docker installed on their machine but once that's up and running, hopefully one command and you're there. Then import the database. Two steps. Minimal requirements. Docker allows, just with the lightweight containers, you can bake anything you want in there. That's something that we want to do more of. There's a lot more to add than what Bolin has. The way Bolin works, it's actually not... I think this is kind of distinctive in this space. Actually, you bake it right into your project repository so it's not a command that you have in your system like, I don't know, like Vagrant or so many other commands that you do. It actually is just a set of bash scripts that you would install right into your Git repository so that everybody has the same tools. This might be too small, but I'll talk through it. There's one line command to install it into your repository which is on the top there. You don't really need to know what it says. You can just copy and paste it off of the Bolin GitHub repository. Readme has this. What does that do? It actually creates a secondary remote. Just to clarify, this is not something like your whole dev team would need to do. You need to do this once, so maybe your technical lead for the project or something would want to try this out. You run this command. It adds Bolin as a repository to your local Git repo. It checks out the code. Then you can always do a diff, check what's going on. Then it actually has a series of prompts and it says would you like to build the Docker containers? The default set from Bolin will, I think it has PHP 5.5.5 something. The default will work with Drupal 8. If you need to do an old one, you probably need to do this and then hit no and do manual tweaks to get an older PHP and then carry on. What's happening here is it finished installing it and then say yes to build the containers. It does that. It actually runs the Docker compose command. Then it spits out the container IP addresses. That's the Docker subnet on your computer. If it's the web container, it also makes that into a link. Then if it's a brand new project, you maybe want to initialize the database with site install so you can hit yes and it will do the drush si command on that new. Or more likely you're doing this to an existing project so you want to get a database snapshot and import that. What is Bolin providing? As I mentioned, infrastructure has code. Essentially that Docker compose YAML file where you define your stack and check out the Docker compose documentation for all the things you can do there. It's also providing bash scripts so you can run your test suites and do your imports and backups and things like that. It's also written with the mind that you can easily add more things to those commands. There's a simple run command where you run your test suites so you can add what you need for that project. The tools, automation, it's all baked into your Git repository. Once you have Bolin installed, well then you can push it if you like it and then forget about it or you can even remove the Git remote if you're done with it. But then what do your developers do? Your developer team, they do the Git clone of your Drupal project. Then there's a command called activate. This is bash code. Works in ZShell as well. Then you source this activate so that's dot space bin slash activate and that just adds something to your path so that you have new commands available such as the following ones. You run build and that will run the Docker compose to start up the containers. Once the containers are up and running then you use settings in it and that will actually add a little snippet to the end of settings.php in Drupal and it will check if the file exists for the Docker settings and if it does it will include those so then Drupal will know from that command it will add that check then Drupal will know where to find the database. Then there's a pull command which is totally project specific so you kind of have to put in your own things there but pull will pull in a database snapshot so you need of course your credentials to your project, SSH keys but we have pull set up to pull in that or you can also have a pull in any assets, file assets into your sites files folder. Basically you put in the pull script whatever the developer needs to download including of course the database snapshot the import command obviously imports the SQL snapshot into the database and you're done. Then drush you alive of course gives you login and when you run drush it's an important note it's actually running drush and it's doing a Docker command to run drush so it will do a Docker exec something but that drush will run drush inside of the running container so all of your drush commands like drush you alive will do that it will give you your login if you want to clear cache whatever so yeah command highlights I already went over a bunch of these by those prefix no, that's a current discussion because I want to make it available both ways I had a discussion with one of my coworkers about that that it might be more intuitive to have it like Bolen build and Bolen import but right now what that funny line is doing the dot space bin slash activate that's changing your path so that it includes the files in your project slash bin directory which is installed in the git repo so those are actually just bash commands and so maybe that makes sense for build or whatever then drush it's actually overriding your drush command so if you want to use your own drush installed on your computer then you just run deactivate or open a new bash session so I kind of want to make it work both ways but right now it's working in this activate mode which is working for us but it would be good to have it work either way depending on what the developer wants to do so yeah we already talked about build and import another command is check that's a fairly new one I added but that attempts to go through your system to make sure everything is running that you need for docker to work like it does a docker version and if it sees that it can't connect to the docker engine then it will fail and say fix this or whatever or you need to run vagrant or whatever it is so it's just a series of checks pretty handy for doing support it kind of made things easier for me basically but a collection of the common problems that I've seen people have that I've been supporting I put it into a bash script so that might help solve problems for other people I hope to build import backup just creates a snapshot of the database run I think I already talked about that but that's the intention of running your test suite whatever that might be as I was saying when you do activate these commands are then overriding your existing commands if you have them so your developer doesn't have to have drush installed but if they do then they activate but once they exit or deactivate or open a new bash session then they get their original drush again same with composer composer will run PHP composer in the container if you need to do composer install or composer whatever PHP CS for code sniffing that also runs inside the container so your whole dev team is running the same version of all these things oh cool I have a broken image on my version here but it's up there, that's cool so Drupal 8 another part of boleyn is something called the hoist command and that's another sailing metaphor I guess but you can hoist the main sail but the idea there is instead of installing just what the default boleyn provides to get you up and running you can also pull in other whatever it is so Drupal 8, all you have to do is hoist Drupal core dev and if you want to instead of working on a Drupal project for a client if you want to work on Drupal 8 core there you go if you've had like if everything's up and running already like you have a boleyn installed to do this it will bring up it will actually get clone Drupal 8 and move it to the dock root folder and go through that build step and give you the the IP address and then you can do drashulai again and whatever other examples vhat codeception so out of the box boleyn doesn't provide these but you're testing infrastructure you probably maybe you want to bring vhat into your code so everybody your whole dev team can have we're using vhat but codeception is also a great looking project but then everybody's got the same version of vhat because it's running inside a container so you just run that command it actually just changes things in this case it changes things in the composer json file and some I think it's like five lines of code to do that and creates some test directory and actually runs the test alright so that was developer sandboxes then when we get to our cei we want to run a full test suite we don't want to the developers aren't going to run the whole suite it takes a half an hour or more depends what you're doing on how many tests you have but yeah it basically are so who's using Jenkins so we yeah almost everyone more than the Linux users so Jenkins basically really advanced task runner this is I pulled this change the project name but I pulled this from one of our projects one of our Jenkins projects this is a build step just a few lines of bash so we change into the directory we activate we build add sleep because that solved an error and then we run the full test suite and this is very similar to the developers experience because they just activate build and they're up and running so oh and there's no import in this one because there's a bit of a tradeoff I actually have another Jenkins build that does the import so it depends how long your import takes but there's a tradeoff for accuracy and time we wanted to see test results a little sooner so I have another one that looks just like this but it doesn't do run it does import to get a fresh database snapshot okay going back to sandboxes some key challenges that we faced as I already mentioned was the file synchronization that's the third point but yeah the boot docker from blink reaction that one kind of solved that for us another problem that we've come across if you're developing sorry if you're supporting your developers on docker you might come across this but the docker API changes so if you upgrade docker to 1.8 and your developer was on 1.7 then their vagrant might be on 1.7 and then it doesn't work and shipping containers fall in the ocean and then file permissions going backwards up the list file permissions was a challenge early on where you test uploading a file and then it screws up whatever lots of file like PHP errors can access so and so file and that's actually solved in Bolin with a docker entry point excuse me the docker entry point is sort of the first thing that gets run when the container starts and what it does is it checks the VARWW directory which is the mount point of your project it checks the user ID of that which is your user and it sets Apache to run as that and it sets PHP to run as that user so within the container the file permissions problems that we had at the start so that kind of describes Bolin but I also want to point out this isn't the only way of doing Drupal on docker there's a list here I don't know if I'll mention all of them yeah maybe the vagrant boot to docker that we're using goes along with another tool called Drude I haven't gotten around to trying it yet but it does look really good there's an official from docker there's an official Drupal image I tried it briefly I haven't gotten too far with that one another one is Calibox I haven't tried that because I'm a Linux guy I think it works on Linux now they had a presentation in LA and their new version is docker based I can't really speak to what's going on there but it looks like a really slick project too I think it's sort of the opposite end of the scale of Bolin it has a lot of stuff it does a lot of things and Bolin is really trying to be lightweight and minimal I don't know why that's here actually because it's not really offering Drupal on docker and then yeah basically you can just try vanilla docker tools you can put together your own docker compose files in your own project and docker machine oh there's another project docker machine NFS and that will change the official boot to docker vagrant machine to use NFS I tried it but it didn't work on Linux so maybe it works on OSX anyway just to say that there's a lot in this space going on right now it's a fastly moving yeah it's a fastly moving space I think it's hard to keep up with but there's alternatives to look at back to Bolin I asked my co-workers what do you love about Bolin they had a bunch of encouraging responses but I think the most significant one is the third one I love that Bolin comes with the Dave N attached at the other end of the line which says a lot about what tools you use is what tools can you support and I don't do all of the docker support but I do most of it so yeah so when you're choosing what tools you want to try consider how you're going to maintain and support it alright another thing that I hope we have enough time to talk about is deployment so let's get this thing running on live so right now Bolin basically tries to stay out of the way of what's going on we're using a variety of hosting platforms we're on AWS and we have our own servers so there's a mixture so we need to be able to deploy and basically you can use docker for your developers and not use docker in production that's what we're doing but the ideal is that you have the same experience because we're using it for testing as well so same experience for Jenkins as it is for the developers the ideal is that you also do that in production but the current reality is I mean there's Pantheon Aquia AWS and many many ways of hosting live Drupal when we think about taking what the developers are working on and bringing it through the pipeline like a developer pushes their code then it goes through automated tests then it goes through a full test suite then there's another manual QA step user acceptance tests then you put it in production what we typically have there is basically a git commit or a git tag or whatever which is still a git commit that ends up on production so then on the prod you might do a git pull and you set your tag you have to run drush updb you have to update your drupal database and that works very well that's basically how we do it. Another way that the DevOps world is seeing production happen is actually following a docker image so you create your code and you and get and everything and put it through your CI but what you're doing instead is creating a docker image with your code in it and that image is going through your pipeline steps then when we get to the point where it's ready to deploy then you can actually just switch the running images around in your deployed because you can do your update database before it goes live we're not doing that yet but this is sorry in that concept of moving a docker image through your pipeline I think that's basically described as immutable infrastructure so it's not changing it's this thing that you know is not changing all the way to production so that's something that we're working on that we're working towards I think the drupal devops community is maybe working on that too and the way I mean I also think about what is the ideal deployment we had our civic actions retreat a couple weeks ago and one of the best times is making music together this is four of my coworkers talented bunch and there's a lot of musical talent but basically there's this jam session at the retreat and I don't know there's a dozen musical people and they're just seamlessly making music all even like a player or two get in and out so you switch out a guitar player and they're still making great music and that I think is a metaphor for seamless deployment on production that we want to aim for where you can switch out even just features or something that you're adding to your production to your production site further ideas about things that we're working on okay I actually want to have more time for questions so I'm just going to do this first point here I talked a lot about running the boot darker vagrant thing which runs on yeah which runs vagrant that actually for OSX users that actually there's a resource strain on your computer because you have to run two computers so an idea that we're working on is cloud development where we're using Docker machine or something to connect to a running Docker engine out there on a server for developers another idea we have is to have a local headless device like a super powered battery pie or something something like that where you just plug it into your network and it's the same kind of thing but then you're taking the processing away from your development computer not really an issue in Linux because you only need one OS yeah and some of these other ideas I'd love to talk more about the production deployment to production using Docker but I just want to wrap it up in my yeah just broad strokes perspective I think Git has really changed the way code management has allowed for new workflows I mean GitHub, the pull request thing is nothing like we've seen before Git existed I think Docker is still pretty new but it's really revolutionizing infrastructure and deployment yeah and I think it's an exciting place to be a part of Docker is an exciting community to watch so keep an eye on it some takeaways Docker Docker infrastructure can support your development team and your testing and production I think that can be proven Bolan might be a way for you to get up and running using Docker and Drupal but there's other options yeah and if while at the conference you want to try out Bolan look for me or try it out and let me know what broke but I'll be around and finally really I think Docker is fun I want to say thank you very much for your time but also before you applaud maybe is there any questions there's a microphone there feel free to if you want me to go back and cover something bit more or any questions but also review sorry there are a lot of people working on these sort of Docker local development tools we have a BOF setup for 345 at room 130 today and we're going to the Tera folks hopefully the FFW folks will be there so we're getting like kind of show and tell with each other if everyone else is interested in trying one or out you want to see people demoing it on the computer we're going to be there so hopefully you can be there too yeah that's great I was hoping there would be a BOF but I didn't find that one when I checked room 130 at 345 just don't comment about the Drupal project there is also the TeraOps project which is similar to Bowline and it's made by John Peck they are doing something like you especially for Drupal and Drupal 8 but it's not so much built for for CI and such but you can also add it into the list T-E-W-R DasOps it's on GitHub okay Tera, T-E-W-R A, DasOps all right a lot of to all right


Harrison Ford was born on July 13, 1942 at the Swedish Covenant Hospital in Chicago, Illinois. To Christopher and Dore T. Ford, Harrison battled with Shiners right from an early age. He attended the Main East High School in Park Ridge, Illinois, where he was a lackluster student. He was never an athletic star and never rose above a sea average. When he graduated from Main East High School in 1960, Harrison attended Ripon College in Winskinson, where he accidentally discovered an interesting actin. He then took a drama class to overcome his shyness. He said and I quote, I was terrified to get up in front of people, but I really enjoyed the storytelling part. Harrison wasn't the best student in college, so he dropped out of Ripon College and became fascinated with actin. He applied for a job in radio voiceovers, but couldn't get it. He signed a contract with Columbia Pictures' New Talent Program, where he played Bit Rose in films like Being a Bell Boy. Harrison struggled for years as an actor, playing Minor Rose in television series, and that was all he was, Minor. Harrison felt discouraged and quit the film industry to begin a career in professional cabinetry. He was able to support his wife and two sons with his cabinetry skills. However, four years later, Harrison decided to try once again to return to the actin and boom! His return marched the beginning of his success in the movie industry. He featured as Bob Falfer in 1973's American Graffiti, which brought him fame. Four years after that, Harrison hit Superstardom with the role of Han Solo in Star Wars Episode 4, A New Hope, in 1977. After another four years, Harrison was Indiana Jones in Raiders of the Lost Ark in 1981 at its sickles, which were all monster successes. Four years later, Harrison featured as John Book's In Witness in 1985, which earned him the Academy Award and Golden Globe nominations. He earned another Golden Globe nomination for his role as Dr. Richard Kimball in The Fugitive in 1993. Harrison enjoyed leading roles in numerous Hollywood films like Blade Runner, Witness, Working Girl, Patriot Games, The Fugitive, and 42, among many others. In 2015, Harrison reprised his famed Han Solo role in Star Wars Episode 7, The Force Awakens. Presently, Harrison is undoubtedly a well-established Hollywood superstar because he never gave up on his quest for success. Harrison's favorite quote was, "'We all have big changes in our lives that are more or less a second chance. Remember that no matter how long and dark, there will always be light at the end of every tunnel.'" Thomas Edison said, "'Many of life's failures are people who did not realize how close they were to success when they gave up. If you're going through tough times as you watch this video, I tell you, you can't tell how close you are to the success you've been fighting for." One of the days in February 2016, I wanted to sleep at night when an idea dropped in my mind. I had been in the business world for more than seven years without any success. Yet, I knew this idea would change my life forever. The following day, I was out trying to reach out to people who could partner with me on my new idea. One year later, I was already above most people who thought my life was a mess. Listen again. You can't tell how close you are to your success if you decide to give up now. You might lose the gold ahead of you. Albert Hubert said, "'A little more persistence, a little more effort, and what seemed hopeless failure may turn to glorious success. Try once more, and if you fail, try a little more.  Woody Hayes says, "'Paralyze resistance with persistence.'" Just as Harrison Ford went back to try acting again, after several failures, get back to work and start pursuing your dreams all over again. If you like this video, do subscribe to this channel, so you'll be notified when we publish our next videos. Also, like this video or share it with your friends on social media. Thank you. We love you.


Legislative leaders and Governor Tim Walls have agreed on plans to provide about $23 million in immediate funding so repairs can continue on Minnesota's troubled vehicle registration system known as MINLARS and to compensate registrars around the state for losses they incurred trying to make it work. Republican Senate Majority Leader Paul Guzelka told reporters Monday the bills could be on the governor's desk and ready for him to sign tomorrow. At this point it feels like we're all on the same page that we've got to get it fixed that's in the best interest of Minnesota if it can't be fixed on the present path for on I think we're all in agreement that we should be willing to take an off ramp and go some other direction. Senate Transportation Chairman Scott Newman says the governor and House Democratic leaders also agreed on hiring independent experts who will report back by May 1st on whether to spend money out of the next two-year budget to continue trying to fix the bulky software or to try another approach. The state has already spent more than $100 million on MINLARS.


They are joined by Rebecca Bryant from the Department of Foreign Affairs and Trade in Canberra. Rebecca is co-chair of the Global Partnership for Financial Inclusion, which was officially launched by the G20 in September 2010. Rebecca, thanks for your time today. Hi, Gemma, it's good to be here. What is the Global Partnership for Financial Inclusion and why is Australia involved in it? So the Global Partnership for Financial Inclusion was created in 2010, as you've It's designed to address the fact that 2.5 billion people are still unable to access formal financial services. What this means is that poor people can't save, they can't get access to money to undertake entrepreneurial activity, they can't get insurance in the event that natural disasters ruin their crops. So it is a significant factor in ensuring that they stay poor. Leaders recognised this in 2009 and they asked a range of financial inclusion experts from around the world to come together to talk about ways that the G20 could address this issue. In 2010, the work of that group led to the creation of the Global Partnership for Financial Inclusion. Australia is involved because this is a significant issue for poor people and we care about that. We know from our own experience that the more people that can access formal banking services, the better off they are. And so we've been working with the Global Partnership for Financial Inclusion from its beginning to ensure we have access to better data about who is accessing financial services and who is not, that we can ensure that we have that small and medium sized businesses can access the finance they need to expand their businesses and grow and so that we can address key regulatory issues that prevent poor people from accessing the services they need. How does the GPFI work towards the G20's overall goal of promoting growth? Essentially, in order to ensure that we have a well functioning financial system, we have to ensure that as many people as possible around the world are able to participate in it. And if 2.5 billion people can't access formal banking services, it's a real problem. So it has to be a goal of the G20 to ensure greater participation and involvement in the global economy so that's the first reason. The other reason is that without these services, poor people have very limited chances of stepping out of their circumstances, of becoming more than they currently are. And so if we can help them access banking services that can enable them to establish businesses, to protect themselves against natural disaster, then we can help them contribute to their economy which in turn can contribute to a better functioning financial system. So it is a key issue. But are Australia's priorities for the GPFI in 2014? Essentially, we are wanting the GPFI to get back to its roots. When it was established it was called financial inclusion through innovation. So really, it acknowledged that the world is changing, that poor people can now access financial services in different ways to how they could before. Some people, particularly in Africa, are accessing services purely through mobile phones. So we want the GPFI to really come back to that starting point because we feel that in the last couple of years it's stepped away as it worked on some of the fundamentals. So we want to start looking more closely at the emerging technologies and ensure that poor people can access the services that they need to access through a range of technologies that are now available to them. Mobile phones is one, payment services through agents such as kiosks is another. So that's one thing we want to achieve. We also want to come back to look at how women are accessing services. When microfinance started up many years ago, women were very strongly involved in that. When women can access finance, they can grow their circumstances and they can step out of poverty. We know that from past experience and we'd like the GPFI to look more closely at how women can benefit from the G20's focus on this issue. We'd also like to strengthen the GPFI's core structure and ensure that it's ready and able to take on new challenges. And one of the new challenges is remittance payments. The cost of remittance payments is not coming down as we expected it to as competition in the market has increased. So poor people, when they go to make a payment, are paying large fees and we want to know why and we want to see if we can find a way to bring those costs down. Rebekah, thank you for your time today. Don't worry, thanks Jenna. And that was Rebekah Bryant, co-chair of the Global Partnership for Financial Inclusion.


Hello, good afternoon. My name is Lukas and I would like to present a short talk on how we test graphical user interface with OpenQA in Fedora, but this talk is not going to be an informative talk only. It should be an evangelizing talk and maybe it could inspire you to start using OpenQA if sometimes you might look for something that can help you testing stuff in GUI. OpenQA is an automated test tool. It's mainly developed by SUSE but we also use it in Fedora and my colleague Adam Williamson helps developing it too and OpenQA is fully integrated into Fedora. It's packaged for Fedora, so if you run Fedora you can just install it in 15 minutes using the RPM packages. However, this talk is not going to be about installing OpenQA or setting it up. I talked about it last year on Fedora Hatch and I'll probably talk about it again someday in the future doing a workshop, but this is just aimed on graphical user interface testing. OpenQA is good because it allows you to test various operating systems, so when I talk about Fedora you could replace Fedora by anything. It could be rail, it could be open SUSE, it could be Windows, it's up to you what you put inside the virtual machine because OpenQA runs a virtual machine and performs the tests on the content of that virtual machine. Good thing also is that you don't have to install anything into the tested operating system, so you can just take the basic operating system, you don't need to add anything to it, you run it in a virtual machine and you can work testing it. So it basically creates and runs a virtual machine. This can be based on an ISO file or a QCOW2 file and you can perform various actions inside that virtual machine and evaluate the outcome. The architecture is that there is an OpenQA application with a database that's sort of a scheduler. You communicate with it using the browser or a REST API and then it has a worker that performs all the jobs that it downloads from OS auto-inst. It has the tests, it runs VNC and it uses Squemu to operate the virtual machine. The controller does the visualization, job handling, live viewing results and it stores the results in the database and the worker tests, runs the tests and checks the needles and all the other things that are needed to work with the virtual machines. You can have the worker and controller can be on one computer, so you can run it on a laptop for example, but it also can be split and you can run a scheduler or the controller on one computer, on one machine and you can run workers on other machines, so you can have a bunch of workers and do a multiple tests at the same time. Of course, you can do it on one machine too if you have enough RAM. The test itself is a Pearl script, although it should be possible to write those tests in Python too. I have never tried because the test language, the test Pearl is pretty easy, so it's just the basic Pearl commands and some other commands from the OpenQA and the test defines what you do inside of that virtual machine. It mainly defines mouse and keyboard actions and it checks and evaluates the needles. We are going to talk about the needles a little bit later, so you will know what that is and it evaluates the expected, what you say you expect in the test script, so then you can compare it to what you get in the virtual machine. Of course, the test or the job can end with various statuses such as past, failed, soft failed, canceled and so on and so on. The tests are Pearl modules and they are placed in the test directory. That's probably not that important, but if you see the OpenQA instance, so there is a test directory with the test scripts and there is also a lib directory where the libraries with commands that you can use and the routines we are going to talk about now are documented in the test API documentation which is Open.QA API, test API, so you can check it there because I am not going to talk about it on a deep level. I will just show you what you can do and what routines you can use to test the graphical user interface actually. Each test has a header where you define what libraries or what files, what packages it will use. You probably know if you know Pearl, so you know the use strict and maybe use warnings. These are useful things to do because if you omitted, then Pearl will not tell you about your own mistakes, so troubleshooting a test script is rather complicated then. We say that we use the install test and we use the test API library and the utils library in this header. In Fedora, these are mostly, the header is mostly standardised and this is, I would say, a typical header for the majority of our graphical user interface tests. Then it should have a subroutine called run where all commands must go. You can also use other subroutines in the test scripts, but then these are only visible in the scope of that module and not outside of it, so you can prepare some routines of your own. You can use it then in the run subroutine, but outside of the module only the subroutine run will be visible. And then it ends with the test flags. The test flags specify what to do when your test finishes and by default all are off, so you can switch it on like this. For example, always rollback means that after the test finishes it will return back to a saved status, because you can save the virtual machine on some point, then you can perform various activities and after these activities are finished you come back to the original state, which is a great thing to do when you want to start from the same point all the time. For example, if you have a graphical application and you start using your mouse and clicking on widgets, so you are moving the state of that application and then for example, you could start the next test, you could start at a certain point. For example, you open the help window in one test because you want to test that the help window can be opened, so you open it and then you do another test that uses another widget, but the help window is still opened, so you can design it like yeah, you can do it like by design, I want to continue when the help window is opened, but then sometimes the test fails and the help window will not be opened and it breaks the consecutive tests also, so therefore it's good to start from a certain point and you can save it and then you can always roll back to it. Other possible flags are fatal, which means that if the test fails then everything fails or milestone, which means that now after the test it's the point where you want to save the status of the virtual machine and no rollback if you don't want rollback or ignore failure if failures should be ignored and then each Perl module must return a true return value, so right at the end you have to place one. This was when I started with OpenQA I didn't know that and I often would omit the one and then I was getting errors all the time and I couldn't run it and I didn't know why and then I realized there must be the one. Okay, so now you want to test a graphical user interface which basically is you want to see something, you want to see some widgets and you want to interact with those widgets using your mouse or using your keyboard. So OpenQA lets you do the following actions for the mouse control. You can set the mouse to a position, mouse set. This is good if you know to which position you want to set the mouse. Normally you would define the resolution of the screen in OpenQA, the resolution of the virtual machine and you maybe know that the position of the widget is on 500, 600, so you could move the mouse to that position directly. Most of the time this is not the case and I will show you how to fix it. You can hide the mouse cursor, move it out of the screen because sometimes you don't want that cursor to affect the process of the test. You can click on the mouse, you can double click on the mouse, you can triple click on the mouse. Each of those commands you can select the button to click if it's the left, the middle or the right button. How long it should be clicked, but I don't want to go that deep right now. And you could also do a mouse drag, which means you start on some point you hold the mouse button and you drag to another position. Mouse scrolls are currently not supported. I visited the OpenSUSE booth this morning and there were some nice guys doing OpenQA also and I had a nice chat with them and I asked about a problem that I have with a certain needle type and then Defolos told me. And yes, but this is not such a big problem, but if somebody wanted to create a patch it would be mouse scroll. So they also want mouse scrolls. We want mouse scrolls, but nobody has implemented it yet. And there is a workaround we are using in Fedora tests and it's a keyboard workaround. So key events that you can use is you can send a key which basically means press a key or press a combination of keys. Press and hold a key is a good point or good stuff when you want to interact with the mouse. So you can press and hold the key and press the mouse button and the release both of them. That might be good for some sophisticated applications. Release a key of course is when you're pressing and holding it so releasing a key releases the key. Send key until needle match basically is press the key repetitively until you find what you expect which I am using when I need to scroll the mouse. So I am sending like a down arrow or a tab or something and then the GUI scrolls. You can type a string in Fedora we have wrappers type safely and type very safely because you can specify in type string you can specify how fast it should type and so on and because we don't want to repeat it all the time. So type very safely types really slowly because when you just type a string sometimes we were getting errors like it typed so quickly that it missed a letter for example or it pressed the letter so quickly that it produced three consecutive letters like instead of password it produced PAAA as W-O-O-R-D-D-D-D-D so this is not what you want. So therefore we are typing very slowly with the type very safely command. Our type password is similar but it doesn't get logged in the log files so that nobody should know about it and enter a command is basically again type a string but this time it adds a enter press at the end of the command so you can have this one to run commands. And now we talk about needles that are a crucial part of the GUI testing because how the test machine should know about what you want to see and it's because you can compare a pre-created image with the content of the virtual machine. So you have a screenshot with an area defined that you expect to be found and then OpenQA compares it with the content of the virtual machine and if you get a match it's good if you don't it's not that good unless you want it. So you have various like assert screen means that you want to check that something is there maybe a widget is present or an icon is visible on the screen. Check screen is similar but it doesn't fail if if nothing is found and instead it gives you it gives you an undefined value so you can use some kind of diversions in your code like if you find this do that if you don't do something else. Assert screen and click is that if it's found it clicks on it. Assert screen and dclick is if it's found then just make a double click. Then for example what we also use is click on last match for example if you have a check screen maybe so then it finds a match and you don't have to write another assert so you just use click on last match and it will pick up that last match and click on it. So you can say if check screen something click on last match and if not do something else and sometimes also it's very important to wait until a screen changes or to wait until the screen stays still because sometimes open QA is pretty fast it's much faster than a user is so we had problems with KDE for example because KDE used sort of how do you say that? Yeah the words slipped my mind. Okay sort of animations yes that's the word and those animations took some time but open QA was so fast that it clicked somewhere even before the animation was ended and the test failed so you say wait until the screen stays still and then it can do animations as it will and the test waits for it and then finds the needle it should. There are some more you can record a soft failure you can record informations and you can save a screenshot however it didn't work for me to save a screenshot I don't know why I must figure it out but it should be there. You could also provide variables either in the test setting or when you start those tests you can say you can define a variable and then you can use the variable by get variable or set variable or check variable so for example you can say that in the test settings that you can say that the tag for example is gnome and then you can have one test script that could operate on gnome and KDE and it knows that the variable is set to gnome and it will only do the gnome part on that one particular run and if you replace the variable when you start the script then it will behave the opposite way and it will also only run the KDE parts so what is the needle how it looks like so basically this is a screen with a graphical application and this is the calculator the gnome calculator and I took the screenshot from a real test real life test so this is what we expect a user might see but because it's so complicated when we compare the entire screen so it's there are so many problems maybe like these little tiny dots you know we don't want to compare the entire screenshot but we want to just compare if there is the button with the number one so from this screenshot we define an area that the open qa should try to find which is the button one and now it only looks for this particular part theoretically this particular part could be found on any position of the screenshot so it doesn't have to be just here and if for example the graphical application is moved to the right part of the screen it will still match when we think about the needle so it consists of two files there is the PNG screenshot and adjacent description file a needle must have at least one area if it should be a clickable needle then it should just have one area and the click point lies in the middle of that area the needle also needs a tag because it looks for them according to the tag and you can have more needles with the same tag the bigger the area the more risk of mismatch and you can also set the needle fuzziness that can be adjusted from zero to 100 where with zero it would be probably everything is a match and with 100 percent is like a totally exact match is a match so by default it's set to 96 and we sometimes go to 90 this is the jason file it looks like this that's the tag to find the the needle and you know that there is the expose ipos at it's the coordinates where to start then width and height are the width and height of the area and the type is match that means it can find it must find a graphical match and the match fuzziness is 90 okay need for needles yeah this is basically that sometimes you need to make more needles to cover for one tag because fonts differ colors might differ and stuff might differ so for example for if you want to check the buttons on that calculator you would need 24 needles at least the example the test example how you would click on those buttons and you would solve the three times bracket three plus two bracket closed equals sequence you could you could solve with these commands so it's basically a certain click a certain click a certain click a certain click a certain click and then compare the result and that's it and then delete it with escape for example and you see that this would require eight needles to do just this so we have some more time so i would like to show you the real test this is a real calculator test uh that does various clicking and tries to do various various you know examples or equations it also shows the help it also shows the about window if you take a look on the code it's slightly more complicated but because we were trying to use a sub routine that does the calculation so that we don't have to repeat all the needles all the time and the last thing i would like to show you is the video i hope i can can how can i make it slow speed yes so half the speed and so now it logs into the workstation it starts the graphical application called calculator and it uh shows the about now it clicks and solves the equations so this is so designed that to solve those equations it must click on all of the buttons so we know that all of the buttons work and we also know that the help worked so this is a very short graphical test of GNOME calculator and this is everything i wanted to show you today it's so easy you can start right away i measured it the installation and setting up the open qa takes 15 minutes 30 minutes when you don't know okay do you have questions uh the the good thing is uh can i repeat the question how uh do we test GNOME with Wayland or KDE with Wayland uh the good point about open qa is that it doesn't care about Wayland at all uh so it only compares the the screens that the virtual machine is giving so if it runs Wayland or Zork it doesn't really uh it doesn't really matter yeah so uh you can test Wayland just fine yeah pretty you can test pretty much everything what can be run in a virtual machine uh pardon uh yeah uh you cannot do it i don't because it's not implemented so there is no way how you could uh how you could tell the the open qa now scroll the button yeah when i uh when i talked with the open suze guys they told me that probably there is a routine which communicates to vnc and sell and sends scrolls but uh yeah so you can't use it right now but maybe we find some time and way how to do it and uh yeah yes yeah uh if you want to uh you can contact me anytime and uh i could help you and show you how to do it uh yeah of course uh we have a repo uh where we store the the tests this os auto in this fedora it's on pegger and uh basically you see that uh there are the tests here so uh in this we have applications and each graphical application has a a dedicated directory where you put all the tests uh you want to run uh i think that it's useful to split the entire application into various tiny steps and start from the beginning again always rollback always rollback because then you know these tests passed this test has failed so let's just uh investigate more this one if this is just one entire script and something fails in the beginning then the rest doesn't get tested never yes of course no problem with that yes but because we don't want to okay uh do we have coordinates only to find the place to click right uh yes and no basically uh the engine operates on coordinates but uh i want yeah i would like to show this once more uh so i could expect that the digit number one would be on maybe 800 200 or something which maybe or maybe not the case so therefore there is the needle system that you say that you want to look for this particular area so a little bit gray with one on it and open qa compares it with what it has in the virtual machine and it will calculate the coordinates automatically and it will click in the middle of that area so it does uh it calculates the coordinates for you but if you want to specifically say it needs to be coordinate x and coordinate y then you use the mouse set and it moves the mouse to the exact coordinates okay enough uh yeah time's up so thank you very much for your attention and have a great defcon


That's real life is what's going on in those sessions. That's like this show right here. This is real life. You're not going to get other coaches and stuff to do this kind of stuff, man. Probably thinking, but you know, number one, when you're trying to pinpoint the best time to make calls, it's really a waste of time, okay? Because I've never tried to pre-qualify if someone is eating lunch or at dinner or having a bad day or you know, exercising or I don't know, I don't know, there's a lot of different things, right?  Percentage of them, it's going to be a great time or percentage are going to be mad, a percentage or whatever. Those percentages in my mind are going to be pretty similar regardless of what time of day you call. Now, maybe you have a little better pickup rate, you know, at this certain special time somehow, some way. I don't have time to worry about that, right? I'm trying to run my business here, okay? So there's that part of it where it's like, no need to pre-qualify. Let's just do it, okay? So then when we take the fact that when we make our calls, doesn't matter out of the equation, now let's enter into when's the best time for us to make calls? Because now it's not about them, now it's about us, when's the best time for us to make calls? So when I think about when is the best time for me to make calls, I'm thinking earlier in the morning when my mind is sharp, right? I want to be on top of my game.  You don't even realize it, but you're not as on top of your game as you are, say, 9 to 12.  Well, do you want to mop floors?  You want to go flip burgers at somewhere? Do you want to serve tables? Do you want to roof houses? Work on an oil rig, you know? Do you want to do that instead of making calls? Or would you rather make calls instead of doing that? Yeah, live call, yeah, with other agents and stuff. Those are some good call sessions, man. Those are some good call sessions, man. Them things are fire, man. That's real life is what that is. That's real life is what's going on in those sessions. That's like this show right here. This is real life. You're not going to get other coaches and stuff to do this kind of stuff, man. You're not going to get other people to do this kind of stuff and do live calls. No, you look at other people's live calls and it's a recorded video that they posted. What does that mean? They could have done anything they wanted with that video. They could have edited it however they wanted to. They could have been their mom on the other end. There's no telling what they got going on over there. I'm not saying that's what they're doing, but I'm just saying why not go live live, you know? Go live live. If you guys go back, back to my videos, you'll see like I'm all about doing lunches with clients. Like back in the day, that was my thing. I'll buy you lunch. Like I used to advertise, you want lunch? I'll buy you lunch. Let's go have lunch.  I just want to have lunch just to hang out with you for a second and get to know you. And that goes a long way. I won over a lot of clients like that and built my database. I mean, a lot of my database and repeats and referrals come from those lunches. And also gift cards. I would give gift cards out. I would say, hey, reply to my email for your chance to win this $100 gift card to a restaurant, to this real nice new restaurant or whatever. And you know, 300 people would email back. You know, I'd pick one winner. Then I would reply to every other one of them and say thank you so much for responding back. Is there anything I could do to help you? Would you like, I'm sorry you didn't win, but I'd love to take you to lunch and stuff like that. And you're really engaged. You know, that's part of the thing too. Like I see people doing the giveaway things and they'll get all this data from the giveaway things and then they'll just plug that data into their database and start getting them on their follow-up machine. But they don't engage with those people at all. The giveaway programs, like they're the giveaway things that you do with the gift cards and the this and the that. I don't know what you guys are giving away. But whatever it is, when you get that data, call that list and say, hey, thank you for entering into that contest that I did. I'm sorry you didn't win, but you know here, I'm Ricky, nice to meet you. And is there anything I could do to help you? I don't know if you noticed on the registration form, but I'm in real estate. And you know, is there anything I could do to help you there? Do you have an agent you work with? Whatever the case may be and engage, engage, man. For your chance to win a $50 gift card, dinner on me. You could do that every month. You could do restaurant of the month and reply back for a gift card. Every month you could do that. And then the second week is the listing of the month. This is your favorite deal right now of the month. This is the one you really love, right? Here's the story behind it. This is why I think it's such a good deal. Here's the comps and here's the that and here's the this and boom, this is why I think it's so great. Again, a story, right? And then the next week can be stats of the month, whereas you've got your analytical people that wanna see those stats, you know? That's that section of your database. The market is what the market is, right? Because if you sell, you can't replace it with something else, fine. Let me get your contact information. I'll stay in touch when this whole thing turns around and we'll do some business, right? Okay, number two friend for the day. Oh, you gotta do something, because you're in trouble, right? You gotta do something. Well, let's go. Let me help you real quick. Boom, there's a closing. Let's go to number three. Not ready, not gonna do anything. Everyone do anything. Cool, let me stay in touch with you. Cool, boom, in the database. Most of it's gonna be future business, but if you start focusing on the relationships, the deal, the now business is gonna start dropping, dropping, dropping, dropping. I'm now convinced through experiencing this market that inflation comes down to more of a supply and demand thing, right? Cause I always wondered like, how does inflation, like why does inflation happen? You know what I'm saying?  Like things just naturally go up. No, no, no, no. They can't make enough milk. They can't make enough, you know, wood. They can't make enough products. They can't make enough cars. Boats? Dude, they're taking, they're selling used boats right now for the price of a brand new boat right now, right? That's how out of whack supply and demand is right now. And where all this inflation is coming from, I think it's gonna continue to be like this for a while. So I think we need to sit tight, strap it up and get ready to rumble. We need to get used to this market. Let me tell you something. You get used to this market, you can crush any market. When this market turns around, it's gonna be a cakewalk. Like it's just not about money. It's about being better than I was yesterday. You know, it's just like continuing to push. Like, can I be better than I was yesterday? So like, when I look at, even if it was about money, okay, even if it was about money, okay, there's a thing called a billion dollars out there and a billion dollars ain't nothing to some people, right? Elon Musk, he could give you 10 billion right now and it would not change his lifestyle one bit. You know what I mean? So money's unlimited, okay? So when you think about seven deals, let's just say that's like 50 to $100,000.  You ain't got nothing. That ain't nothing, that's nothing, right? And that takes care of this window of time right now, right? Just this window of time right now. What are we gonna do tomorrow in that window of time? What are we gonna do the next day in that window of time? What are we gonna do in the next window of time? I'm looking at, I'm always looking at three to five years to 10 years out. When you help people that have no way of helping, of you getting anything out of it, it's one thing when you say, oh, relationships over transactions, I'm gonna help people, that's a business thing. I'm gonna help people who can actually get into my database and I can potentially make money off them. That's great to go through that stage of this, but if you wanna take it to the next level, get out there and start helping people no matter what. Clients that left you and chose a different agent, I've had this happen. Clients that left me chose a different agent and then called me for advice during the deal. I give them advice, right? I give them advice. The more you give the universe, the more the universe will give you.