Hello, everybody. Welcome back. This is, like, the 14th time I've tried to record the beginning of this video, and you will probably see me fail multiple times in a blooper video that it might be coming up soon, or something. Anyway, in this video we're going to continue with the drawing functions that we learned in the last video, and we're going to try and make a little world, a kind of editor thing for the small little game engine that we've been building. This is going to be very, very primitive. In fact, there are going to be no controls other than just drawing boxes. Super duper tiny, super duper small, and super duper easy. That's all it does. It just draws your platforms for you and keeps track of where they will all be. So, I'm going to actually make this pretty freaking huge. In fact, it's going to be 1200x700, so I can at least fit it on my computer monitor. Actually, I can fit it on a little bit bigger than that, and I can probably go 1900. Anyway, that's just fine for us. I'm actually going to implement a clock this time, piegame.time.clock, and let's actually add frames per second. I'll just call it FPS rather than typing all that out, because I'm feeling lazy today. Let's import the colors so I don't have to grab any of that stuff from colors, import all that, and I don't need this white and red garbage window.fill white. That's just fine, and we don't need any of this garbage here either. Okay, once we actually add all that, we do want a few variables to keep track of what it is we should display on the screen. Let's actually maintain all of this by a list. It actually knows what have we drawn and what have we already drawn and what should we keep. So, I'm going to call that variable to draw, and right now, at the beginning of the program, it's just going to be an empty list. And we're going to want to have some variables that are keeping track of whether or not we are actually drawing right now. If we have the mouse button pressed down, then we're still drawing. If we have the mouse button released, then okay, we must have finished drawing.  And right now, that's going to be false, because obviously we're not drawing anything. Okay, so then we have our event loop. We're actually testing if we've quit the program or not yet. Otherwise, let's look for some events that determine whether we've actually pressed the button down or not. So, if the event.type is equal to mouse button down, I'm sure you guys know this from some other videos and earlier videos. I just kind of choked on my words there and made a zombie sound that was probably not very pleasant to hear, sorry. We'll keep track of the mouse coordinates. That's all that we're doing with this line of code, pygame.mouse. The function to retrieve those is getPOS, getPoss, getMyPossy, that sort of thing. If the event is actually being pressed down, if that's when we're actually still like, you know, the moment that we've pressed the button, mouse button down, okay. So, this one up here, I'm actually, I'm actually repeating my ideas, sorry. Mouse button down is when we're actually pressing the button, we want the mouse position all the time, whenever we move the mouse. So, this event should actually not be mouse button down, but instead mouse motion. I was getting ahead of myself there, I'm sorry. In the case though that this is the mouse button down, position is equal to mouse position. And you're saying WTF, John, why did you do that? Why are you keeping track of the variable that is already a variable? Well, position is going to stay the same while mouse position is going to change, because we've moved the mouse in some cases. So, we're just doing that so we can keep track of one instance. And that's when we actually start to draw. And the way we know that we're drawing is by saying, drawStartBox is going to be true. Cool. Now let's test for the other events, if the event.type should go to pygame.mouseButtonDown, but no, it should be mouse button up, and that sort of thing. That's when we can say, okay, the final position is now the mouse position that we're at, because we've stopped and all that. And we can say that the drawStartBox is now going to be false because we are all done drawing. You'll see this in motion. You'll see this actually make a bit more sense while we're programming and while the code is actually being run. So, this is when we add because we've finally finished drawing once we've released the mouse button. That's when we add something to repeatedly draw on the screen that we'll actually keep. That's when we can add, okay, a new object of the rect. And that's going to be to draw add new list elements, which is the rect pygame.rect at its current position, or at least at the position that we started with, and then final position zero minus position zero. Now, you might be wondering why we're actually subtracting and doing all this rather than just passing in final position as the other one. Well, keep in mind that the rect variable, or the rect object, is actually initialized with the arguments that determine its top left, that it's topped coordinate, and it's left coordinate, and the width and height. So, when we subtract the final position by the reverse position, that's how we find the width and height. Simple, simple stuff. And actually, let's just have it display some information about these plot about these objects and things that we've drawn. Sorry. Once we hit the enter key, and we can test that if event.type is equal to pygame.keydown. Now, let's do, let's test if the event.type is equal to pygame.keyreturn. And that's the constant for the enter key. And this way, we'll actually check, okay, for each plot, sorry, platform that we're drawing in our to draw variable or list, then we can go ahead and print out. I'll put this in array syntax, so it's a bit more evident. Platform.string.platform.split. Because remember, split is going, this string of this platform is going to return it to us as a tuple or as a tuple. However, you want to say it, people yell at me for saying tuple. And let's actually go from the first coordinate of that. I should be using regular expressions or something to actually match this, but just for easeability, I'm going to go ahead and keep using the split command, split function. So we actually just get what's inside the tuple. But it would probably be much better to use the, it would be much better to use regular expressions to process all that. I'll add a comma. Okay. And then we're done with the print statement. Cool. So now we're done testing for event handling. And now we want to actually want to get back to our while loop in this, this indentation. We'll fill the window with white, keep the background just fine in the same. If we are drawing, if the draw start box is true, we don't need to have that because that's the way the Python works if we just test for if. That's when we'll start to draw. Wrecked window. Let's draw it red. Pygame dot. Wrecked position. Mouse position zero. And mouse position one. Now we do this because, okay, we're drawing the wrecked from the start. And then up until where we were keeping moving the mouse. So we keep having that one be variable. That sort of thing. In fact, let's do mouse position minus position one because remember we want the width and the height. And do the same for the other variable. Okay. That's good. And now we can test, okay, what about the things that we've actually released and the things that we've actually kept? If we do that with a for loop, for item in to draw, we will go ahead and draw pygame.draw.wrecked. I'll scroll down here so you can see this a little bit better. Window, let's actually keep this black instead. And then we'll draw that item because we're adding that wrecked to the thing. Okay, that's pretty simple. Actually, let's add another button that will allow us to remove things from to draw. If event, this should be event.key, sorry. It's a good thing. If event.key is equal to pygame return. Otherwise, if event.key is equal to pygame.key backspace to draw. I think pop will work. I think. That might need an argument. Okay, otherwise it's just fine. So I've got a huge window here. It's all white. I'm moving it around. You still can't really see too much of a change. But now if I draw, okay, nothing's gonna happen. Never mind. I forgot to update the screen.  This is when we update. And we'll actually tick so we can stop my processor from freaking out. Now when we run the program. Sorry about that, guys. Now when we're in the program, we've got this big white mass. And if I draw, okay, a red block, I can keep moving. I'm still holding the mouse button down. Once I release it, it turns black because now we've got that platform there. And I can keep drawing other things like, okay, let's draw a block here. Let's draw a block here. Maybe one down here. Keep moving the screen here. Let's draw one that looks like it's coming from the top here. Right over here. We can make it look like we've got some stairs or something. Right now this is a lot of different blocks. And that's probably pretty bad. It's not gonna look all that good. Or at least we know that it's not very efficient. Like we know that, okay, this is made up. This is pretty choppy. Like it's made up of other things that are not really real blocks or whatever. And then I'll put something way down at the bottom that we can just jump to. Okay. So now we've got all that. If I hit the backspace button, that might hopefully, okay, good, that does remove itself. The pop function in Python will just remove the last item from a list and return it, I believe. But now we've got this big, big level, right? And if I hit enter, it releases all of the information about this block or all of the blocks that we've created. So what if we copy and paste that into our other code that we have? The one that we were actually, okay, making levels with. What if we had level one be filled with this stuff? Bam, copy and paste that right in here. And okay, hopefully the player will be at a good position when we run this code. Let's let's check it out. Let's try it. If I run the program, okay, no, invalid, invalid thing. Right, right, right. This is where we have to get into normalizing our objects or our platforms. Because what if the width is less than the X value or some absurd strange thing? We'll have to test for that in the upcoming tutorial. See this negative value? WTF is that? We can have a negative width. For now, I'll show you that, okay, we've got all this that we can use. And this very primitive world editor that we just created all of this code with. Okay, good. I closed it. I copied and paste all of these dimensions. And I'm sure you did the same on your end. Now, let's see if we can actually get these to work in our game engine and code that we initially wrote. I'll do that in the next tutorial. But for now, we've got this funky little world editor that we can use somewhat. It's not as it's not as pristine, it's not as elegant as we would like. But we'll keep modifying it as we go along. For now, thank you for watching. I hope you enjoy this. Hope you understood everything that we kind of did. And I'm sure you see the code in motion when it's actually running the program. Thanks again. Talk to you later.


Hello, everybody. Big crowd. I can feel the excitement in the air. I'm Jonathan LeCour. I'm the vice president of product and development at Dreamhost. I'm here to tell you today about Dream compute, our open stack-based public cloud implementation. I'm really excited to show it to you today. I'm going to actually walk through and introduce it and then give you a little demo as well. Before I get too far along, I want to tell you a little bit about who we are as a business. Dreamhost was founded back in 1997 by four college students, as all good businesses should be, and started off as a shared hosting provider. And now we have over 365,000 customers, developers and entrepreneurs, on our infrastructure. They're using our shared, dedicated, and VPS managed hosting services. And they're building all sorts of great applications and content and hosting them on our platforms. So a few years back, we were really getting pretty excited about the prospect of what we could enable these developers and entrepreneurs to do with cloud services. So we threw ourselves full on into cloud services. So one of the things that we've done is become a major contributor to OpenStack. We're foundation members, gold members, with our CEO, Simon Anderson, is on the board of directors for the foundation. And we also contribute heavily from a technical perspective. We've got the project technical lead for OpenStack networking and core contributors on a lot of other projects, Cinder, Oslo, Solometer, all over the place. So we're really, really excited about the community. We're excited to be here. And we're excited to be talking about our OpenStack cloud. So we actually started launching cloud services last year with our object storage service, DreamObjects, which I'll talk about a little bit in a few. So now let's talk about Dream Compute. So what is it? Simply stated, it's an OpenStack public cloud from Dreamhost. We are using OpenStack Grizzly, the latest and greatest. And in fact, we are a little ahead of Grizzly on certain components driven by need and functionality. And we're using KVM as our hypervisor under the hood. And we actually have two interesting things I want to highlight about Dream Compute today. The first is Dream Blocks, our block storage service that's part of Dream Compute. And that's powered by CEP, which is an incredible project that I'd encourage you to find out a little bit more about. And virtual networking, which enables all sorts of wonderful, complex, rich network topologies, virtualized up in our cloud. And that's really powered a lot by MVP from NYSERA. So let's talk about Dream Blocks first. So CEP is actually the thing that powers it under the hood. And it's a massively scalable, elastic, unified storage platform. It's open source. It was actually created by one of Dream Host's co-founders, Sage Weil, about seven years ago. And it provides out-of-the-box block storage and object storage in one unified platform. And we've been in production with it for our object storage service Dream Objects now for about six months. And it's been an amazing experience for us. We have thousands of people storing data and leveraging Dream Objects for their applications. And so we're very confident that we know how to run a CEP cluster. And so we decided we wanted to build our block storage for our compute cloud on top of the same platform. And we've done that. There are a couple of advantages to doing block storage. Some of them are obvious, right? Being able to have portability of your VMs and being able to move those volumes around with your virtual machines. But also, it enables us some operational efficiency. We can actually do things like live migrate a virtual machine from one place to another without our customer really even seeing any issues. And that gives us a lot of flexibility and efficiencies. But in addition, there's some actual performance benefits to using CEP, in particular, to back our block storage. CEP has this great functionality for copy on write. So the traditional mechanism for launching a VM, you would pull an image out of glance. And that would be copied over the network to create your virtual machine. Well, by booting directly from a Ceph backed glance store with the image, we can boot directly from the image that's already there. And then as changes are introduced, there a copy is made and the writes happen at that point. So that's a really lightning fast boot kind of scenario. So those are the things we're excited about with Dream Blocks. But what I really want to talk about to you today and demonstrate is a little bit more about the networking, because it's a little bit more fun to show off. So as I said, we're virtualizing the whole network all the way down. And we're using the OpenStack Networking APIs to their fullest. We use Nasera MVP, as I mentioned, to virtualize the Layer 2. But we've also created our own Layer 3 Plus set of services in an open sourced among GitHub called Aconda. And the most critical function it provides is software routing, virtual routing. And it also provides firewalls, port forwarding. And it's fully configurable and customizable through both the API and through Horizon user interface. So you can do all the things that you would expect out of OpenStack Networking APIs. You can create routers, create networks, and create floating IPs, associate them with virtual machines, the whole line yards. And we've actually made some additional features available from our Aconda services as OpenStack Networking API extensions. And our intention is to contribute these back as much as possible and merge them with the standard APIs as they emerge for these new features. We also selected Horizon, the standard OpenStack dashboard, as a starting point for our interface, for our customers. And there are a couple of reasons we did that. First of all, there's a lot of flexibility that we can get out of that. The community is great. It's been fun to contribute and work with them. We plan on contributing a lot of the work we put into it back. But also, it's really nice to integrate with. We've been able to build out, on top of Keystone and Horizon, to provide our customers immediate access into the cloud with their existing credentials. So no additional thing to sign up for. We have 365,000 customers who can all of a sudden have access to all the power of OpenStack Cloud. And another reason is it's easy to customize. So we've actually dropped in additional control panels for these additional layer 3 services that use those OpenStack Networking extensions on the background for things like firewalling and port forwarding, do address groups and aliases, all that good stuff. So that's really great. So I will touch very briefly on this, because it will make most of us bored. But this is the general architecture for Dream Compute. Some of the more interesting things, we have a pod architecture. And each pod has about 512 cores, about 1.5 terabytes of RAM, and over 500 terabytes of raw storage. That storage is then leveraged by SEF with three copies of every individual piece of data, intelligently distributed, self-healing, all that goodness. And so we have about 170 terabytes of redundant storage in each pod. And pods actually have about 120 gig of network throughput connecting them together, because we're leveraging 10 gig everywhere. Spine and Leaf, network topology, and IPv6 from the ground up. Every instance you spin up in Dream Compute gets a V6 address. Very, very cool. So what am I going to show you today? Well, I'm going to show you a fairly straightforward network topology. I'm going to create two networks that are private virtual networks on two different subnets, 172.1620 and 172.1630. And then I'm going to create two virtual routers. I'm going to plug them in to those private networks and to the public internet network. And I'm going to spin up virtual machines and plug those into the routers. So then I have these kind of two isolated networks. Maybe I'm hosting two customers with similar applications or completely different applications, both in one cloud, completely isolated from a network perspective. So let's get going. First thing I'm going to do is create the networks. And I'm going to show you kind of a mixture of how you can do this both through the user interface and through the APIs. So first here, I'm actually showing on the top the user interface, obviously. You can just give a network a name, type in a subnet, and click Create. And you can see here I'm using the standard OpenStack networking client, Quantum, to read out the networks. And you can see it has three networks, the public network that's provided to every Dream Compute customer, and then two private networks with a V4 and a V6 subnet. So the next step now that I have my networks is to actually create some routers. And I'm going to do that through the Quantum command line client as well. And I'm just going to say, Quantum Router Create can give it a very easy to read and remembered name that I generated with the UID generator. And then I'm going to list out my routers and show them. You can see I've already plugged them in here, but if I wanted to do that, I would just type Quantum Router interface add. And I could connect a router to a particular subnet. So now everything's wired up, but it's not very interesting because I have no actual virtual machines. So we should probably do that next. I'm going to do that through Horizon. Go in, select my image, my flavor, give it a name. And I can actually drag and drop from my available networks, which I've just created, my private A and private B networks, and connect them to the NIC on that virtual machine as I spin it up. So pretend now I'm doing this six times. I only have five minutes left, so you're going to have to be patient. There they all are. All those instances are here. And through the magic of the internet, now we can attach floating IPs. I'll allocate a V4 address and connect it into a port on one of my virtual machines so that I can expose that particular virtual machine out to the internet. So here we go in the network topology diagram that's now built into the grizzly version of Horizon. Really cool feature. You can see I have the public network with two routers. I have two private networks with virtual machines. In this particular diagram, I hadn't yet connected them, but I will connect them. And now everything is accessible. So now what's cooking? What am I going to do next? Well, I'm actually going to use Chef. And I'm going to bootstrap one of these nodes and spin up WordPress, one of the most popular applications that our customers use. We have over a million WordPress instances on our standard hosting platforms. And now people can spin it up right there in the cloud. Very, very cool. And moments later, they'll have a publicly available instance available on nodes.dreamcomput.com.  And now the great thing about this, in this particular instance, I've put everything on a single node. But I have all these other virtual machines. I could very easily put my SQL that backs my WordPress on one of those virtual machines and not assign it a floating IP, such that it's completely isolated from the outside world. And the only thing that's exposed is my very secure WordPress install. Or I could put a proxy in front of it that protects it. Very, very cool. So quick summary. Dream Compute right now is in private preview. You can sign up at our website. We're really, really excited to share it with the world, but we're hardening it right now to make sure it's really rock solid for all of you. And we want you to really harness the power of OpenStack networking. That's something we really care about passionately. We want to give people the opportunity to really use those APIs and build out complex topologies. And also, we want you to use Dream Blocks, our block storage powered by Seth, and really get all the wonderful benefits there. So that's it. Yeah, all powered by Ubuntu as well, under the hood. Thank you. And if you have any questions, I'll be available right here afterwards. And I'm going to go back to the DreamHOST booth, and you can ask me any questions there as well. So thank you very much.


Hey, welcome back to the channel. So in this video, I wanna share an email that I wrote that leveraged current events and trending topics to do just under 3K in sales. So I'm gonna share exactly what this email is, how to write these for yourself, and how I plan to use these moving forward. Also, if you stick around to the end, I have a gift for you, a free gift that I'll mention at the end of the video. So make sure that you watch this video to the end so that you see this money-making email type as well as the free gift that I'm gonna share at the end of the video. Now, if you're new here, my name is Sean, and on this channel I talk about how to create internet income from writing online. So if you want more content around that, make sure you hit the like and subscribe button so you don't miss any of my future videos. So I wrote this on March 21st, which was a day or two after the UFC London event. And I'm a big UFC fan, and on this event, on this UFC London car, there was a fighter, he's pretty new. This is a second fight in the UFC, and his name is Patty the Baddie Pimblit.  People are just chattering about this guy. And so he's getting a ton of attention, and I just thought to myself, how can I take this fighter who's getting a ton of attention, a ton of headlines, and tie it back to my business somehow? Take this current event that's getting a lot of attention in the media and social media, and tie it back to my business and use it to generate sales. And so that's what this email is. I guess you could call it the current events email. I don't have a better name for it right now, but I wanna break down how I wrote this and how I got this to work, and do just under $3,000 in sales in a single day. So the subject line, these are often repurposed from my email to my Facebook groups. If you wanna join my Facebook group for free, go to emailrainmaker.com and you can see this there. And so the subject line was how to be mediocre and still get paid the big bucks. One of my favorite things to do on Saturday is watch the UFC fights when they're on. I love watching people get punched in the face, and I've watched almost every major card since 2009. So one could say I'm a die-hard fan. This weekend was UFC London, and one of the main fighters in the card was a guy named Patty the Baddie Pimblit. And boy, if you haven't heard of this guy, type his name into Google and check him out. Tall, lanky, ginger-looking dude from Liverpool with a bull haircut, and people are calling him the next Conor McGregor. But from what I've seen so far, he's just a mediocre fighter. He leaves his chin out and gets cracked a lot, but the star power is definitely there and he's proved it. After just one fight in the UFC, he landed a seven-figure sponsorship deal with Barstool Sports, and he's the first professional athlete Barstool Sports has ever sponsored, which is freaking wild. This is all while there are much more skilled veterans in the UFC with 10-plus fights who get paid only a small percentage of what Patty does. So how does a mediocre fighter like Patty get paid the big bucks? How does he command million-dollar paychecks even when he's still unproven? It comes down to his ability to get attention. And so now we're getting into tying it back to my business, right? What does this have to do with email? And so we're getting to that now. Whether he's on the mic in the octagon doing an interview or just farting around on the streets, he always seems to know the right words to say to get people to pay attention. And so it is with email too, right? Now we're making the connection. The people who know how to get attention will get clients with the deepest pockets, write emails that generate the biggest paydays and grow their audience and list faster than anyone else. We'll be talking a lot more about getting attention in my email side hustle group, which opens for re-enrollment on Wednesday. But in the meantime, if you wanna get started writing attention, grabbing emails and social posts so you can command bigger paychecks, hop over to the link in my comments to check out the Cashwindfall campaigns. I tell you what to say, what to say and how to say it to make the most amount of money from your writing. And I think you'll especially enjoy the Make Every Day of Payday bonus daily email training in there.  We've got a picture of Paddy the Batty right here. So this did very well. I think it was $2,744 in sales in a single day and it was a really good email. So the reason it worked was I picked out something that was in the public eye that was getting attention and I found a way to tie it back to my business. I also used the standard VBO framework for writing my daily emails. If you don't know what I'm talking about, watch my last video. I break down this three-part framework for writing my daily emails that sell and I just applied it to something that was in the public eye. So the way that you can start to do this is maybe you're on Twitter or social media, Instagram, whatever it is, when you see something getting attention, find a way to take that and tie it back to your business, right? You need to find a way to tie it back to your business somehow. In this example, I use this mediocre fighter who's making big money now and getting these big sponsorship deals because he knows how to get attention and I tied that back to email. So I can't write this all the time. I should probably be doing this a lot more because they work like crazy, taking current events and things that are on people's mind and tying it back to my business and my offerings. I could do this a lot more than I have been doing. So the way I plan to write more of these emails down the road is just keep a closer eye in current events and trending topics and find ones that I can tie back and when I can do that, taking that and writing an email about that. Another positive thing about these emails is it gets people to know you a little better when they read this. When someone reads this email from me, they can read this and be like, oh, Sean likes UFC and I have a lot of UFC fans on my list apparently because a ton of people responded back and they were talking about Patty the baddie. Even some people were like, how can you say he's mediocre? He's got two finishes in the UFC. That's my opinion so far just from watching other fighters but I didn't know I had so many people on my list that were UFC fans. And so this email, it generates sales but it also builds a stronger bond and relationship with the people on my list because they feel like they know me better, they can relate better and now the people who didn't maybe know that I wasn't to the UFC, now they know that. So if you wanna start benefiting from these emails and writing these for yourself or for a client, I would find these industries or these trending topics that fit you and things that you're interested in and tie it back somehow to your business. So that does not mean that you have to copy what I'm doing with UFC fighters and just doing this if you don't watch UFC already, maybe if you do, you can do that but finding things that you enjoy and that interest you and are trending topics in your area and tying that back to your business somehow. So I'll be a lot more conscious about this in the future just taking notes of these trending topics and things that are circulating the media and writing more emails about that because they get a ton of response and they get a lot of attention. Now, I promised you a free gift if you stuck around to the end of the video. If you go to emailrainmaker.com and you join my free email marketing Rainmakers Facebook group, I'm releasing a free ebook to people in the group and you're gonna be the first to see it if you're in the group. So it's a book that I'm probably gonna charge for at some point, it's called the Email Rainmaker Playbook and it's how to get paid writing emails for clients and if you just wanna write for yourself, how to get paid to write emails for your own business as well. So if you wanna get that ebook for free, make sure you're in my Facebook group where I'm gonna announce it probably in the next one to two weeks. And again, the link is emailrainmaker.com. You can join my group for free and you're gonna see the announcement post as soon as the ebook is live. You'll also be in my email list so you can see more of these emails and study and learn from them yourself. So one more time emailrainmaker.com, join the group, put your email address in and you're gonna get the free ebook as soon as it's live. So I hope this video was valuable to you. Hopefully you got a new email idea that you can use for your business or for clients. If you enjoyed this and got value out of it, give it a like, let me know in the comments if you have any questions and I'll see you in the next video. Take it easy.


We are in the Frankie's Pre-Range Meat Kitchen. Both myself and my business partner Adam have been losing our minds over the past few weeks. Him in the kitchen, me more so in the kitchen as well as online. Thankfully we have 90% of the orders fulfilled and we will be filling the remaining orders that have been placed in the last week or two this Monday and Tuesday. So everyone is going to have their order, but what happened with FedEx this week? Don't open a meat company in the summer, that's a prank tip. We literally packed about 130 boxes on Monday of this week and our FedEx pickup did not show up. So we had- Showed up, they said no packages, 130 packages filling up an entire room, the driver said no packages. Yeah, so basically from our perspective they didn't show up, but what they told Dispatch was they showed up and there were no packages. So we had quite a bit of money worth of products, with quite a bit of money worth of dry ice. Adam had to put all the boxes in the freezer, order more dry ice the next day, open up every single box and repack it. So this is just one of those things when we're opening up a new business. We don't really have a reputation built up with a lot of vendors, the shipping companies, all of that stuff and it just makes everything more difficult every step along the way. But we're pretty much in the clear now, but some people might have had initial issues with their order and we want to make sure that everyone is happy with the product they received. At this point in time, every single product we are sourcing, we are super happy with the quality. The first, what, like two or three hundred orders didn't ship with dry ice, right? Exactly. Now we're using dry ice, everything should be showing up rock hard. We were receiving fresh product and shipping it to you fresh, which is ideal we think, but most people want to receive frozen products. So we've switched over to frozen, so it's a big change. All of the other meat companies ship their meat frozen like rock solid with dry ice. So we're meeting those expectations right now. We didn't do those, as I said, for the first few hundred orders. So if you weren't happy with how your order showed up or the quality of the product, please reach out to us, infoatfrankeastfreerangeme.com. We've already refunded the majority of the orders for anyone that was unhappy. And by all means guys, if you were unhappy with anything about the order, the quality of the liver, the quality of the fat, how anything tasted, please just reach out to us via email. Let us know what we can do to remedy the situation and make sure these things don't happen in the future. Keep in mind, the product now is better quality, we're better at shipping it. Everything's coming in now that we have established ourselves. So quality should be going up as we move forward. Now that we're shipping with dry ice and we fixed all the issues that we've had with previous orders, everything moving forward is going to be 100% as we intend the product to be. About two weeks ago we sent out most of the Pemmican rent, most of it over during the heat wave, made out of towel. So a lot of the Pemmican that was sent out, unfortunately melted in the bag, Adam's been in the kitchen, killing himself for how many hundreds of hours, making about a thousand pounds of Pemmican for you guys. We put it in bags, it was all good up to like 90, 95 degrees, but when we shipped it out, some of these trucks and trailers, they must have gone up to like 115, 120 degrees. The Pemmican literally melted completely in the bags. And a lot of people ended up getting Pemmican soup. So we refunded a lot of the Pemmican orders. And as a future precaution, we are packing the Pemmicans individually. Think of like Reese's Cups, like those peanut butter candy treats. Like chocolate truffles. Yeah, so every single Pemmican is going to be packed in a tray from now on and covered. So regardless of the temperature, even if it melts, it will retain its shape. But I think that was just something that happened because of that week. Because we tested out the Pemmican shipping before. We shipped to California. It's just that it was a bad month and a really bad week. Of course. So if you guys did get melted Pemmican and you were unhappy with it, please reach out to us. As I said, we've refunded the majority of the Pemmican orders already. And moving forward, these errors will not happen again. As much as we've been playing catch up these past few months now, moving forward at this point in time, we're kind of up and running. And we're going to start doing the other things that we've said we're trying to do. I know a lot of you guys have been asking about fish, raw dairy, pasture raised eggs, like cod liver and glass jars, maybe even some oil supplements. We're trying to make all of that stuff happen. But right now, it really depends on the order volume and the amount of support we get from you guys. So recently, we've been able to add a Wagyu beef box, which we'll show you guys today. We're now grading our steaks so you can pay a little bit extra for more marbled steaks. We've also added lamb fat and in addition to that lamb hearts. So if there is anything in the origami category that you guys have asked me about, we are trying to get that stuff on first and kind of keep to like land animal meat for the most part, you know, because fish, raw dairy, eggs, it's not something we can really do in the short term with how we're currently set up, but it's definitely going to happen sometime next year. We're already working on it. We're getting things in place. Those items take a little bit more operationally and logistically to get out rather than meat products. For every single one of these other products that you guys want us to get, you know, for the raw dairy, we have to literally lease a farm, have our own animals, do full raw dairy production. Same thing with the eggs. We have to lease our own farm, buy custom feed for the chickens. Every single thing that we want to do is something that no one else is doing. And that's Frankie's spirit. Yeah, when you're doing things that no one else is doing, everything along the way is difficult because when you go to a farmer or ask someone to do something for you, they've never done it before. And they either don't want to do it because it doesn't fit into their regular protocol or it's not really worth their while for the size of our company right now, but things are moving really quick. And I mean, I'm really excited about the food quality that we're sending people. Yeah, you have to remember, commodity items are cheap, but they're not special and specialty items are expensive at a great price. So that's what we're up against. None of you guys are going to find Wagyu beef online for the same price. And we're even going to be offering the highly marbled steaks as well. 100 percent grass fed. Almost all Wagyu is grain finished, not in the best conditions, but we're offering a grass fed product and same with the steaks we have. You know, we have very highly marbled ribs by steaks that we're about to show you guys. You see that message to Michaela from that Canadian farmer, Michaela was like, oh, I love wagyu beef. Oh, it was something to do with Michaela Peterson. I didn't want to say something about that. Wagyu is awesome. Wagyu is Tuesday 8 by Wagyu is so good.  Well, we fortunately have Wagyu that is grass fed. So you guys don't have to worry about our Wagyu cows being mountaineer or torture. Yeah, just because it's wagyu could be I mean, it's just even a ton of grain. It's not necessary.  But nutritionally speaking, doesn't mean anything. So what happened on Instagram? Oh, what was it on Twitter with Michaela Peterson or Instagram? Well, yeah, Twitter and then it but on Instagram, she tweeted it. Slowdown Farmstead called her out.  Right. Slowdown Farmstead goes, really? Because that stuff is raised on dirt paddocks eating sludge for its whole life. He's their neighbor. No nutrition. She has a neighbor who raises wagyu, right? Slowdown Farmstead grass fed butter that looks like it's radioactive. It has so much beta carotene in it. Her neighbor raises wagyu. The animals are eating sludge. She would never touch that stuff. Right. Michaela is like, oh, my God, I love this. So this grass fed farmer called out Michaela because that grass fed farmer knows how those wagyu were being raised. Exactly. She sees her neighbor mistreating these wagyu, traditional grain finishing. That's a huge call out to me. I mean, I can't believe I don't want to care, though, because it's not coming from her. So he actually ordered me from CrowdCal and what was it? You as well. Oh, my God, yeah. So tell them the crowdcast story and we have that email to back there. CrowdCal sent us three steaks. One hundred forty five dollars. We got twenty five dollars off for our first Frankie's Pure Injury. One of the steaks was smashed and they they gave us a discount on the state twenty five percent off, which is eleven dollars for one pack. So the pack was really expensive. And they said that's twenty five percent rebate on your smashed steaks. That was very nice to CrowdCal. We basically paid one hundred and fifty dollars for three pounds of meat from from CrowdCal and U.S. wellness isn't isn't much cheaper either. And they do have what do they have? They have Pemkin, but their Pemkin isn't legitimate Pemkin. We were checking out their Pemkin. It comes in a tube. It has too much fat. The ratio seems to be off. It seems to be like a grease ball, but theirs isn't dried out. So it's not it's not it doesn't stay at room temperature. They send it frozen. As much as I like to sit here and talk crap about other food companies, this is the reason we started Frankies for your interview. We saw what everyone else was doing. You know, the prices were unacceptable. The food quality was unacceptable. And we want to be different from everyone else. So let's show you guys why we're different. We'll take a look at the ribeye and the wagyu box. That's beautiful. So these are one hundred percent grass fed. One hundred percent grass fed. We're now grading these. We cut every steak by hand. And we're selecting the top 30 percent. We're setting those aside as extra marbles. So these are going to be sold separately, not in the ribeye box. But the marbling on the steaks in the ribeye box is still pretty good for grass fed especially. So if you want to get these, we're going to probably sell a one point two five pound steak for somewhere around twenty dollars. So you're not going to get a steak better than that hundred percent grass fed for this price anyway. That's enough steak to feed yourself today, just one of them. The wagyu isn't just about the marbling. These steaks are also more tender. So I tried these out. The marbling is pretty good. The breed is very, you know, prone to have high marbling. So the marbling is good on these. You guys take a look. This is the wagyu beef short rib that's in the wagyu box. This stuff will just melt in your mouth. So what is it? It's a combination of the level of marbling, as well as the breed of the cow that makes it more tender. It's the texture and flavor as well. These are definitely fatty, considering they're a hundred percent grass fed. This is some wagyu chuck roll, very high level of marbling. And we cut the steak stick. These are this is almost a pound and a half steak. So keep in mind if you guys are interested in buying the wagyu, you're not just getting a high fat. It's a different flavor. It's more tender, overall, much higher quality meat. And this is just the off cut box. We will be offering the stuff that's more typical of wagyu, right? Like the A6 stuff. We're going to get in some higher grades. The wagyu grades can go up to nine for marbling score. We're going to get in some six, seven, eight, nines and offer that separately. In addition to the really well marbled rib eye steaks as well as the wagyu, we have also added lamb fat and lamb heart. Lamb fat is by far the most consistently high quality fat. It always tastes good as lamb are on pasture 100 percent of their lives. So guys, definitely check out Frankie's free range meat dot com. If you have any questions, any ideas about future products. And as I've said in the past, we have some product ideas that will blow your mind, guys, especially in the non perishable department. So, you know, with your continued support, we are going to try to keep coming out with more products. We're doing the paté soon, right? Paté is coming at you. Nutritionally optimized paté that tastes delicious. That's coming up next week. We're going to make a paté.  Omega three from brain, vitamin A from liver. It's going to be really great, guys. Definitely more to come. Are we going to do the chicken liver paté too? Chicken liver, beef liver, maybe pork liver. Yeah, so we'll do a bunch of different patés. We'll see what you guys like. But thank you guys for joining me today. As I've said, Frankie's free range meat dot com. We have discount codes five percent on two hundred dollars, 10 percent on three hundred dollars and 15 percent on five hundred dollars.  We have a discount that no one else offers. Usually they'll do like what? Flash sales like 10 percent off everything. But we have that all the time. So we basically cheapest product and then also this kind of softball. Basically, we haven't made any money. Frankie's still driving two thousand one ship out of the car, but that's all right. I'm in it for the long haul. So thanks again for joining us, guys, and enjoy the rest of your week.


Good morning from the Frankfurt Office of CMC Markets to your daily news update. Oil prices went down sharply yesterday and there was a bunch of negative news. Actually, the market also came to the conclusion that fundamentals still matter and that it's not all about Saudi Arabian rumors. China's July diesel and gasoline exports they soared by 181% and 145% respectively so they try to exploit that there is some overproduction in mineral oil production like diesel and gasoline and so they sell it on the world market and they are directly competing with the United States that had twindling gasoline inventories as well but not because of an increase in demand but because of they are exporting large amounts of gasoline so China and the United States are actually competing on the world markets for diesel and gasoline. Actually, it is also a fact that thrillers added 10 oil rigs in the week to the 19th of August that was the 8th straight week of increases in active oil rigs in the United States. It was plus 76 oil rigs in those 8 weeks and that is the largest increase compared to plus 101 that was in mid 2014 right before oil prices went into a nosedive so the thrillers in the United States the fracking companies are partying like two years ago.


So hi everybody Well, this was meant to be config 1 to 100 hi Justin waving to me from the back It's meant to be config one site to 100 sites But it's kind of one to infinity if you will because once you get past one you're running with everything, right? Unfortunately, I probably should have gone for a longer session in 20 minutes because it's kind of hard to squeeze all this in So I'm gonna go at a reasonable pace and if you have questions at the end I'm around and you can pick pick me out on Twitter or something and I'm happy to answer some I also come from somewhere where they speak very fast So if I start speaking too fast, then you want me slow down, please just like wave at me and I will So my name is Ashley Hazel. I'm head of digital technology from Hogarth Roblox That's my slack and sorry my stack or flow my Drupal.org names pretty easy to find just minute And we jump straight in and we talked about what is config and why do we want to use it and in Simple terms, we're just capturing site settings into code The great thing about this of course is it makes your settings versionable Portable and of course shareable which is where we're going to get to this in a minute In the end, it's just a bunch of YAML files YAML files that roughly represent our database dump, but Being separated out into files into YAML files. We can break them up and package them up in different ways Cool, so they are versionable shareable, portable, dividable, reusable and really able so generally config is great and it allows us to really Expand on the way that we're moving our content around our sorry our settings around But where do we start with our one site? It seems kind of confusing when you start getting into documentation and the way we generate all this is simple Sex of course mean sex One simple trash command and we're off and we're running One simple trash command, there we go and then to complete the cycle Drops it in and we're flying we've got our config export and our config import everything truly. This is it This is you up and running with config But the next question becomes Where does it all go? Right now by default it's going to go into your files directory Under sites default files config underscore a random hash Which is great? It gets us up and running, but it's not where we want our config to be because our config generally can contain some Sense of information, maybe it's an API keys or something in there Maybe you don't want them to be there, but they can be there So we add to our settings PHP this line at the bottom of config directories Conflict sync directory and we tell it where we want to put it and generally we want to put it outside of our Dock proof in order to keep that prediction and most importantly actually and maybe not most importantly But most usefully most of us are probably excluding our default files. They're actually from kits We don't want all of that in there So by removing config and putting it in a more central location. It becomes easier for us to manage it Cool So if we take a step back and look at this in a more conceptual way This is basically what config is right? We have two things we have our active configuration that exists in our database And we have our file system configuration with all of our yaml But there are things that we want to be specific to our environments We don't want to have everything in there and there's two ways to go about creating these sort of local overrides This I think is how most people perceive local overrides you have your settings PHP you put some overrides in there And then when you do your import it's going to somehow be overridden, but this isn't actually the way that it works The way it works is more like this that You have runtime overrides Runtime overrides being that when you do your config import you're getting what's in your yaml files And what you have in your settings directory is only Use that runtime so when you look in your yaml you're doing you export or something You're still going to get the old settings. You're not going to get what you've got in your settings file and of course we can use local settings files and Dev setting file or environmental based setting files to do those overrides as we go But there are some things that you can and can't do with this method You can't create you or completely remove any config that already exists because you're only altering config That is already in your existing yaml files Well, you can only overwrite stuff that already exists. I sort of said that one already Because of that there there's also some strange limitations you can't override some theme settings for some reason and Really weirdly you don't see your changes reflects in the UI So whatever you have in your config yaml is what you're going to see in your UI Which can become really confusing particularly if you're trying to debug things using examples an API key or something if you've got your Sandbox API key in there and you're seeing your production one. It's it's very confusing So maybe not the most sustainable way to work with overwriting things So how do we handle that you know what I jumped ahead with myself. I apologize We'll come back to a better way to handle local overrides in a moment first off There is obviously a place of where config isn't config and what I'm talking about here is the overlap between content and config I'm not sure there's a word for that something like content fake Tenturation, I don't know Principal thing that I'm referring to here obviously is webforms They're great. They're almost certainly part of our settings, you know, we want to essentially manage our Contact forms or some special form that we've done a bunch of work to modify and have some overrides on But they're also definitely not config We sell Drupal one of the big selling points to Drupal is that we have this great form builder And then our clients go and they set up their forms or they alter their forms And we gonna do deployment and we delete everything that they've done before So of course There's a module for that In fact when we start looking there is a bunch of modules for this Config ignore is the one that comes out the box straight away allows us to ignore whole swaths of Configuration on a module by module basis as well. If you guys were in the config management 2.0 presentation yesterday, you know, this is becoming somewhat redundant But at the moment, this is definitely the way that you do it very quickly from config ignore We find that we have webform config ignore, which is even better It just does some of the niceties around handling webforms You get to ignore them, but at the same time include them. It's it's a really nice motion I had are going to get a little bit But looking at both of them straight away We see that using something called config filter and when we discover config filter We realize that maybe there's a bit more in the way of modules that can help us with config and very quickly We find ourselves coming to config splits, which we'll come back to in just a moment finding that there is more in the way of Modules than we thought there might be you go and have a quick search you search for config and boom you're just overloaded with Hundreds of modules the fact those 1200 modules come up in search I don't think all of them are actually related to config obviously, but just in the first public pages you know you get a bit of a migraine and going through some of this you find modules that are either redundant or They're similar to one of the other modules and you get a bit lost in where you're going So definitely a bit of a model minefield on the go here and generally you can ignore most of these There are some interesting concepts, but you have things like Can I see them on the screen here? Maybe not there There's a couple of modules here that allow you to create pool requests So when you've got your editors or your client making changes on your production site You can create a pool request to get those conflicts back into your Systems and then on the other hand you've got things like config ignore Which is or reconfigure it only which is there to stop your clients from being able to do that So these really depending your workflow, but for the most part you don't need them of course You can't look at this without coming across features So I have one slide on features and It's a really simple slide Don't use it, right? Yes a reaction Why not yeah, I'm going to say why not? So features was great right Could become a bit of a headache granted, but still great But it's it's really redundant with config management Features is taking your settings and putting them in code Config management is taking your settings and putting it in code What features does and actually it is great for development because what features does is it gives you a little bit of a UI to find out Which config you want Dumps in a module and as an extra YAML file it says you can't use my module unless you turn on features It's kind of pointless By all means use it to get yourself up and running and to learn how to create modules with config But delete the YAML and use it as a module that's all it really is And actually this is back to my point in the beginning that config is Dividable and packageable you don't have to treat it as your site config You can then stick in a module or distribution or a number of other ways of taxing out so Flying at this obviously quick recap of where we are so far We've had a look again started. You need one drush command in your way We've had a look at the file system and fact you want to move it We spoke about the drush commands and we looked at some local overrides Which maybe wasn't the best option? Where config and content meet which is principally webforms, but there are some other examples and the fact there's a bit of a module minefield so Next we need to up our game a little bit right and look at more sustainable Overrides because the overrides in the settings file was great for certain things for sure. They're not what we want generally So that brings us all the way back to config splits Conflict split does well exactly what it says on the tin it allows you to divide up your config into different packages and The defacto example here that I think everybody does is they divide this up based on their environment, right? so if we oh I have more slides. I apologize the split sense subsets The subsets can be cracked criteria based and it's actually a really good point The obvious example being there those environments But most importantly it has the full power of config management unlike our settings file where we were limited by What we could override and the fact that we can only override things with config split we are able to We're able to have full control over what we do and we don't want and most importantly for site voters We see the changes in the UI Sorry, I'm tapping a bit faster and I'm confusing myself So we can create new content. We can delete content with a config. We don't have to just override what we What we already have we can override literally everything and we see the settings in the UI So no more red on this page here, which tells us that conflict split is Definitely a better option than the settings file So going back out to our conceptual Overview the map has changed slightly right? We have our original import export with our active and our YAML file configuration But this time we're passing through config filter and we're splitting out our config into different packages and then re-importing them Just the ones that we want After a little example here of what might have been in the the dev The dev import and for those that don't know which I imagine most you do these zeros obviously aren't To disable those modules. That's not a typo of dev. The zeros are weight So you can set the weight of how your modules are included But it's a big thing with split that you're able to control what you have on and what you don't have on in your different environments cool so Who says that we need to name our splits? local dev and production or life If we change the names because the names really are just arbitrary to something more like agency client brand Suddenly we see that we can actually really begin to flex this system to do an awful lot more And again, if you're in the presentation yesterday You'll see that this is not how they intend this to be used and they're changing the config management system so this is Your wealth to change the way that we do this, but certainly with split the way it's designed today. You can just split up your Configuration into packages that make sense to you and you can import them in a way that makes sense to you If you're following this pattern, I would probably recommend that you use a profile Which in the end is just another module, right? So we can subdivide and module our content for things like your agency type config, but certainly where it comes to Generating an import for a particular brand or a particular client There's no reason why you can't use your splits to control that particularly in a multi-site environment But there's a problem, right? You have the site EU ID which prevents you from sharing configuration from one site to another So if you're trying to do that Agency brands client server divide you're going to run it to the case that you you are sharing config and it doesn't work The number one solution that is As I just said you can use a profile or you can fit some of your config into a module or you can cheat and you can Change it to change the site you you I need to be the same which depending on what you're doing Can help but the thing is it's not a problem this right? It's a safety net the EU ID is there to stop you accidentally wiping out a site that you didn't mean to So I would say do this with caution It definitely works and if you're in a multi site, it's maybe something you want to do But yeah, it's there for a reason. It's not a problem. It's an actual safety net. So be careful if you want to do that Cool So a really quick example Now actually I thought I was gonna run a time much faster when I run through this. So this is a really quick example So I'll put that a little bit Looking at standard multi-site. We have our shared code base, right? and then normally we have our shared default configuration using this settings file to put it outside of the file system and Then we have our Brands X and we have our brand Y or Brandy. That's how I say And each of them contain their database and their assets But they can also contain their own config as well using config split so we can Do our install use our shared code base get our shared default config and then import the split that we require just to adjust those Sites ever so slightly You know things that you might want to include here are the obvious things like your site name To the modules that you have enabled To maybe some more complex things around Well actually I guess modules about as complex as it gets really right It's it's actually a relatively straightforward and simple system when you get into Using it this way So cool that Is basically that that's all it is very quickly we have the contributions day and There is also Review for you to leave But that's us done and remarkably we have a couple of minutes to spare Sorry if I did speak too fast, so I ran through that too quickly, but Any questions? You want to come down to the microphone? Would that be a way to split configuration and like feature like Portions Yes, so I'm not sure that picked up properly. It is their way to split configurations feature like options And the answer is yes I mean you can use features to help you get going with that, but literally this is just splitting configuration into modules And once you get used to the configuration Explore and what the files are called what they do it is very simple to create those modules and to Separate out your conflict something we do a great deal actually is we break things down Sorry, we break things down using paragraphs to create components, which I'm sure everybody's doing these days But we package that up into a module as you would with a feature I have another question you say before that you suggest to don't put the config file into git No, no, sorry one of the reasons you would want to move it from the files directory and Possibly but above the doc group is because you definitely want to have your config files in git. Okay. Yeah So when one simple question but you find it frustrating that In the end you change so little configuration So basically maybe you even just the only configuration it changed was you changed it the site name then suddenly you do config export and you've got Hundreds of files there that you know the only difference between that and what is in core and in the contrib stuff is Now it has a UID and one of the files has a new site name Wouldn't it be more also interesting to have slightly better tools that don't export needlessly so many changes Yes, I'm not really needed. Yeah No, I see what you mean your your original export even if you just install the site and just do export you get thousands files with Absolutely relatively no bearing on you, right? And it seems frustrating initially and certainly it's something that our team has discovered Or come across is if you've got a large multi site with say 60 or a hundred sites in it You have a hundred directories with theoretically thousands of files in them for no good reason, right? But actually I think it makes a lot of sense to have those files is a bit frustrating me the first start but once you begin to subdivide them and Put your config into your modules or using splits to split them out across the grounds you're working with those Exports become much smaller and that original bulk export you probably put it into a profile or something. So you're only really dealing with it once Sure, they're about to kick us out can we do just one more question Hi Yes, the UI will show you what's going to be an important exporter so will it rush commands they give you a warning before you do it Thank you