All right, so plenty of things are happening here. Ah, hello. Oh god. Oh, that's good. I deserve that one. Shall I tell you why? The Pendletons are here, right? Start with them. I cheated them. Rob them of thousands.  Don't hold back. I'll tell you everything. The Pendleton's inheritance was worth hundreds of thousands, at least. Told them it was junk. Well that is going to make the one Pendleton who is on my side very happy. Retribution. Retribution. I think not. Well, I feel like this is really great retribution. The combination of your safe. The safe? Yes, of course. The combination is what? Take anything you find. I think I felt my heart skip. All right, I am not going to shock you again. Am I? He's an odd dealer.  Okay, this was funny. Whoa! Just one more time? Oh well. Bye-bye. Whoops. I guess I kind of overdid it. Let's see then. Wonderful, wonderful time. For all the guards and all the men of the Empire.  So what do I need to do now, I wonder? Let's see. Powers, bone charms, objectives, objectives. Return to Slugjaw with the safe combination. Oh, all right. Whoa, whoa, whoa, whoa, whoa. That was really kind of...  But from now on, I just... LOL. This was just too much fun. I could not... Not do it, you know? I can't help myself. I really cannot. I see the opportunity to stab a creep. I stab a creep. Even if he really hasn't done anything to deserve it. Well hey, that's the playthrough. That's the idea.  Didn't I come to this way? Am I completely... Completely insane? Oh, will you now? Damn! That was good. I'm scum. I mean, look at that hair.  Madame's office. VIP exit. Fine, now I'm obviously taking the VIP... How did I even miss this? I'm screwing up so badly today. He's just ridiculous. Hello, Madame.   I probably should have. But I feel mercy... at some times. I know we're running low on beds, but I must have a room for the child. She's more important than you can guess, using the VIP entrance. That's why I decided to keep the master's key in my possession. This girl must be cared for, even if she's a brat. And I want her kept in a room to herself. Because they don't know who the girl is.  Yeah, I knew that already. Sweet dreams, sweet chicks. Ah, the bone charm.  I feel like I'm missing something. Let us take a long good look at everything in here. And not be completely surprised if we happen to see something awful. Like maybe the outsiders.  Oh my! Talking about the outsider. I often forget that Granny Ragsas wherever you least expect her. Which is a cool little thing, of course. Yes, I have. I will. Let's see, the outsider. For most, the outsider is nothing but a child's tale meant to instill fear that beyond the family, the community. When I was young, my mother and I were on the run. Moving from one village or sea town to the next. Oh, I actually read this. A few episodes ago. Yeah, that's right. Really, Granny Ragsas. Okay, tell me a story. The history of the great city of Dunwoa. You want the tale of Empress Jezemann Caldwin. Regal, fair-minded. She brought prosperity to the city. Hope to all. Then, violently murdered these six months ago. Quite a tale you weave, old woman. Nothing's in the same since her death. Poor child. Her spirit lives on. Trapped. Misused. Really? Well... Not quite everyone. So maybe you'll tell it to someone else later.  Oh, I see. It sounds like you know the demand that the Empress cares about. Above all, others doesn't actually have any part in her murder. Oh, I see.  Showing. Let's see if there's any enemies around. Come on. Trekking through the city. Not as fun as it could be. But hey, it's good enough for me. Can I pick your pockets? Yep. Seems like I can. Sorry, gruff old boy, but I'm immoral. Let's jump along. Maybe sing a song and get that information. I do believe my part of the deal has been completed. You're too kind. No. Adorable. Very, very cool. Let's take these spring raisers and let's go save my little girl. Which maybe I should have done while I was in the bloody golden cat, but I wasn't sure whether I would have to do something to the Pendletons. Whoops. If I would have to do something to the Pendletons after I delivered my part of the bargain to the Tug. Yes, yes, I know, you are surprised. Now let's see. Granny Rags, anything else? Creepy. Let's pretend that I did not notice that. Exciting, exciting, exciting. I do believe I have one more one more bone charm to get. That sound. That super creepy sound. Very interesting. I'm sure I'm missing something here. I wonder what it is. Never mind. Let's move along. Move along. This, now I can. Oh my. This looks lovely. Lots of coins. And of course a bone charm. No wonder the outside is so influential in Dunwall. There's literally bone charms and bone runes and well runes.  The boldest measures are the safest.  Yeah. Again with the music. Interesting. Hello. Don't you know I am your father. Dun, dun, dun. Of course it's me. Hello Emily. Grown up sly. It happens, like for example child care, excellent. Hi Emily. I can't wait to play with you. And I don't mean that in any dirty way. She's just the central character in Dishonored 2. And she looks like the most fun I could possibly have by good job. That is so sad. Now everything I want is to get my little Emily safe and sound. I'm sure. I can tell. I don't believe I'm pretty close to finishing. Have I missed anything? No I think not. Really this has been run away. We got a prowler. How could I screw that up? No you don't.  I'm just going home and you should thank me for that. So this is totally the wrong way. Pretend I did not go that way. Hey Turk. Thank you. This has been refreshing let's just say. Hello boy. Don't worry. Thank you. Yes that's something I've always wanted to tell someone. I'm not here for you. And so on and so forth. Because having all that in there is kind of the norm. Let's remove dark vision and let's just leave. Yeah. You're very nonchalant about that. She's awesome. I'll let her be a pawn no longer. That's so sad. So I can imagine. All right. We're done. Yeah that's what I did. It kind of is like totally sociopathic. Well I found not a single circle of painting which maybe I really should have done something looked for. My bad. But still. Not that awful. Samuel is so worried. Uh oh. Poor girl. And then she has this aristocratic streak about her and she may be pretending that it didn't get to her but perhaps it really didn't. Who knows. Oh that sounds lovely. A fantastic place for a child. Bye Emily. I miss you already. She's my favorite character in the whole game. This doesn't seem What I mean to say is doesn't it kind of seem like a very nice thing has happened to the third Pendleton. Wouldn't someone suspect him? Perhaps it's better to kill him too. You know, just to be safe. Plus I like to go in trees. I have discovered that it's a good white lead life. Stabby stabby.   But we did it because we believe that you're the one that can make the difference. Yes. He just ha I'm not even sure I want to talk about this. He literally just sent me away. I know he's looking for me but apparently not as hard as you were looking for me. Any of you know nothing weird? Never mind. We're back here in tact and it'll enable us to make our next move. I can't believe what you've done so far. Escaping from Coldridge. Taking down the high overseer. Recovering Emerald. You make this old military man proud. I'm charmed. I can see that you're trying to make me feel like you are playing on some father-son bonding here but I don't know how to appreciate it. Where is this old chum? Oi. Piero. And all I have to do in return is pay you, right? Charming. Charming, man. Upgrades. Let's see, what can I buy? Not much. I don't have all that many coins. Still, spring-raiser capacity not bad. Bolt capacity, not useful. Bullet capacity, I've got 20. I don't really think that I'm going to need any more. Hey, pistol magazine and pistol reload, both useful. Pistol accuracy even more so. Excellent. Merchant of disorder. Oh. Acquire 15 equipment upgrades. Lovely, lovely, lovely. Grenade capacity, I hardly ever use grenades. Spring-raiser capacity. I'll take this one. Because why the heck not? Good job. Yes, I'm very self-congratulatory. I realise that. Anyway, thank you guys for watching. This has been fun. And I will see you next time.


Hey guys it's Nate aka The Foot Account and welcome back to the channel. You know what time it is. Time for some packs. We got more upgrade SBCs this week. We didn't get the ones that I thought we were going to get. I thought we were going to get the upgrade SBCs by league, the same ones that we had been getting every single week when the respective league team that season would come out. I thought they were going to release all those in one time. But they went a different route. They wanted to give us a chance to pack some of the other team of season cards as well. This ultimately is better for EA because we have a lesser chance of packing an Ultimate Tots card than we would if they just gave us those regular league upgrades. So I'm not complaining about these packs though. They're still pretty good. And what I want to compare today is we're going to do a little video comparing the two types of packs, the 82 plus single card upgrade SBC and the 80 plus player pick. So I have 15 of each of these. We have 15 of the 80 plus rare players packs and I obviously can't go show you because the store is blocked right now since I have unassigned items. But I also have 15 of the 82 plus guaranteed packs. So we're going to rip these packs here really fast. We're going to go for the 80 plus packs first. And I just want to kind of do this for you guys because as you are working on these packs throughout the week, if you're doing some of these upgrade SBCs, we got to find which ones are the most OP and are the best. So we're going to rip through these 15 player picks starting off the bat with a pretty solid one in the 84 rated play by Anderson. So we're going to rip through these and kind of compare the results and see what we get. Goodness gracious. This is starting off pretty good. Two 84 Rateds from the Prem. We're going to zip through these. I don't have like anything in the club right now. So there shouldn't be too many duplicates. All my golds have been. Yes! A blue! Let's go! 85 rated Rui Silva. I mean it's not a card that I'm going to use but that's a perfect untradable Tots card for the guaranteed odds at Tots SBC that could be coming out today. Boom! That's a blue boys. Four packs in and we get a blue. Obviously it's not an ultimate Tots blue. But it's a blue. We will absolutely take it. Another 84 rated Payette. Dude these 80, the 80 plus player picks are freaking rigged. Look at all those 84s. Ridiculous. Oh! Scov! Let's go! That man's a beast. That's my second blue with like six of these. Oh my goodness. Three star, three star, high, low work rates. This card is incredible. I've seen a lot of people talk about this card. He doesn't have the jumping but everything else looks insane.  Two blues and like what six of these packs? Rui, Silva and Scov. All right, pack seven. Let's continue the luck boys. I think the contest might be over already. I think the contest literally might be over. We've gotten two blues out of eight of these packs so far. Two blues out of eight packs out of the 80 plus one of three 80 plus rare player picks. Boo Scets as well. 89 rated. Let's go. Although I do think, you know this is, I have a tradable version in my club so we're going to have to switch him out as a duplicate but that's an 89 rated Boo Scets. That is a G.G. Cranbridge as well. These, the 80 plus picks. These packs are insane man. Tiago Silva, an 88 rated. Wow! You're like, yo why are you getting excited about an 88 rated Tiago Silva? It's one of three 80 plus overall players in the game. There are so many 80 plus players like 81's, 80's that are in the game and I'm getting 88 rated Tiago Silva's. Look at these polls dudes. Look at this page. 80, I don't even have an 81 rated here. 82, I have two, three 82's and 88 and 84, 89 Boo Scets and two Tots cards out of these and a third Tots card and they can let's go. What is going on? These cards got the five star week for the four star skills, high, high work rates.  So that's interesting but we'll take it. A third Tots card for the club. What can we get in this last and final pack? Raketitch! Dude, these packs are insane. The competition is over. This competition is over. This is ridiculous man.  Look at the pack polls that we just got from all this 88 rated Tiago Silva. 89 rated Boo Scets, three Tots cards and some 84's as well and Raketitch. Get them all in the club. Let's go see if the 82 plus cards can top this. So this is just going to be one player that is 82 plus rated. We want to see some walkouts because if you think about it from those last packs basically what we saw was we have three team of seasons which would have been walkouts. Oh, David Alaba. That's pretty solid. We would have had three team of the seasons that were walkouts. We would have had Boo Scets as well. That's four. We would have had Raketitch and we would have had Tiago Silva. So we got six walkouts basically from those 80 plus player picks. We need to get a similar amount of walkouts from these to even start to think about that these packs are going to be worth it compared to those. But man, I cannot believe the pack luck on those 80 plus packs, man. The 80 plus player picks, I think those are the move, honestly. We haven't got to walk out yet out of any of these SBC's. It is a board player though and our third 82 plus. It's going to be a Brazilian center back Marquinhos 85 rated. So I've gotten two boards so far and they've both been 85 rated. So that's good. That's pretty good. Let's keep going with these. 82 plus, let me know you guys down in the description which ones have worked best for you because I've heard some people say that the 82's have been the best for them. Some people have said that the 80's have been the 80 plus picks have been the best for them. So I'm curious to see what you guys had to think about that. But for me, it's obvious to tell that, oh, we get a walkout right here. Can it be a blue? It is a blue. Let's go boys. Please be an ultimate thoughts. Italian? Striker? Oh, Donnaruma. Donnaruma will take it though. That's an 89 rated tots card man. What is going on with my pack luck this evening? We packed four blues. I need to update the tots counter. We packed four blues. 62 blues boys. Donnaruma is in the club as an untradable tots card.  Alright, so the 82 plus packs want to make a name for themselves. This fight isn't over yet. Pretty nice card. But that is our first walkout out of these 82 plus packs. Let's see if they keep giving out. Let's see if they keep giving out. This one's not a walkout. It is a board though. We're going to get in this one. Who's this going to be? Strutman. 83 rated. Alright, another 83 rated for the club. I was really hoping that blue was going to be one of the ultimate tots cards. Donnaruma is not an ultimate tots. He's in the lower league, but that would have been sick. I just want to see that walkout symbol again ever since we've been catching it.  Portugal center mid from Benfica, Pizzy 83 rated card, pretty solid as well. But of course, as I said before, let me know down below or tweet me pictures on Twitter if you've gotten some good cards from this SBC. We're going to keep ripping through the packs. We have seven to go. This one's not a walkout, unfortunately, but it is a board. It is a board. Belgium right wing Thorgan Hazard. Now it's going to be Thorgan Hazard. Man. I think the 80 plus picks are the move boys. And based on my pack luck in those first few, I'm going to be hammering those all week. That's for sure. Maybe we'll throw in a few of these 82 plus because they are a little bit cheaper to complete. You only need five rares. We get Glick there. You only need five rares for this SBC, but I'm really thinking that the player pick is just juiced from what I've seen on Twitter, from what I've seen, obviously from my own polls. It seems to me like the 80 plus is the rigged one, but we do get a walkout on this 82 plus. It is a blue. Let's go. Belgium. Cam. Who's this? Oh, it's a dupe. That is a duplicate vanikin boys. That is a duplicate vanikin tots card. So I'm really starting to wonder if it's really, really common to pack these tots cards out of these upgrades, the lower level tots. I'm torn in what to do with here boys. I could go do an SBC, but I don't have that many high rated golds in the club. I'm actually, I'm just going to get rid of this one. It's not that many coins. I have 13 million. It's okay.  I know somebody is not going to like that. It's okay. I just don't want to take the time to go craft at the moment. We're going to keep ripping through these packs though. I'm sure I'll pack him again from the looks of it. I'm going to continue to pack some of these cards as I'll, I'll be doing upgrades throughout the rest of the week, probably tonight on stream on Tuesday, Tuesday evening on stream. You'll see me doing these because yeah, these, these packs, these packs seem to be pretty rigged. We have a few more left. Let's see if we can get another walk out out of these last couple packs. We have gotten two blues. So if we get one more blue, we wouldn't match the same number of blues that we got from the, from the 80 plus player pick SBC. So we have three packs to go. Let's see if we can hit another blue or a walk out or both in these last couple packs. Not in this one is a board player though. Who's it going to be? It's a Spanish striker, Bilbao, it's going to be out of re's, some as at the club, but man, I'm pumped to get scov. I'm pumped to get a Don Aruma. Those cards will be fun to try out. I'll probably use them and probably eventually throw them into, to an SBC as well. No walk out here. We do get a board though. We do get a board. Who's it going to be? Don't be Struutman. It's going to be DeVridge. 84 were rated. So still out of these 82 plus packs, if you can't decide which ones to do, for me, it's got to be the 80 plus player picks. They do cost a little bit more, but they only cost like seven to eight K per SBC. You can, you can bid on those cards. Honestly, get on your bids for the rare golds to get those cards for a little bit cheaper. Quadrado. Nice. He's kind of a rare card to pack. You don't see him get packed that often. But you can do this SBC for like seven to eight thousand coins by bidding on all of the rare golds that you need. And, and yeah, you should be able to do, to do those pretty easy. But man, what a freaking pack opening in terms of the, the cards that we got from those 80 plus packs.  Even some of the ones that we got, we can get Donnaruma, a couple of 84s, Alaba and Marquinhos. Vanakin, we got him twice. The Raketich, the Tiago Silva and the Sergio Busquets. The Scob, I'm really pumped to try out Scob as well. But I'm going to be hitting these packs for the rest of the week based on what I got from those. One last simple note. If you guys are looking to trade, if you're not looking to trade, if you guys are looking to buy some players for your week and lead teams, definitely, definitely get on those cards before, before we can leave rewards. That's my, that's my knowledge. I'm going to pass on to you guys. Get on those cards before we can leave rewards. I think a lot of stuff's going to go up after we can leave just because there's going to be a lot of coins on this market again because of all the rewards that are going to be coming out this week. So good luck on the packs if you're smashing them. Hopefully my luck inspires you to open some of those packs. And of course, let me know how you do. I think the clear winner here is the 80 plus upgraded pick because A, it only costs you five more rares. And B, you get a pick between three different players. So instead of just getting one option from the pack, you get three. And it seems like that having those three options is, it gives you a pretty high probability of actually getting a pretty juiced pack from what we saw. So I put about 250,000 coins into making those packs tonight. And definitely I made my money's worth from those in terms of the high rated cards that we pulled. And of course, the team this season cards as well. So thank you for watching the video, boys. If you enjoyed it, smash the thumbs up. Comment down below if you have any questions and subscribe to the channel. If you're new, it's been Nate the Foot Accountant. Catch you guys later. Peace out.


sses for the evidence that you've given today and I'll just break for a couple of minutes to move us into private session allow the gallery to clear thank you


Welcome to this public meeting of the consumer product safety commission. Today, we're considering CPSC draft 2023 to 2026 strategic plan. It's an important document. It lays out our vision for the agency over the next 4 years and sets the tenor of our work. Obviously, this is putting out a draft that will then see comment from the public, which is also extremely important. So, I appreciate the work staff has put together and the focus my colleagues have put on it over the last summer weeks. Today, I anticipate we'll make some amendments to the plan, but as I said, this will not be the last step after today's meeting. We'll put the draft plan out for public comment. And I'm hopeful that members of the public will view the plan and review closely and comment on areas where they think needs strengthening and improvement that input will be carefully considered. We have several staff members present at this meeting to answer questions. If my colleagues have any with us are Jason, the executive director James Baker, chief financial officer. Also, in attendance are Austin slick general counsel and Pam Pamela stone, a special assistant to the general counsel who's standing in for the secretary of murder mills. This point each case for sure will have time 5 minutes for questions comments and after the questions and comments are complete. We're going to return to any amendments. That I would have said how glad I am that we're here. I don't have any questions or additional comments at this point in time. So, I'm going to defer to my colleagues. I turn to commissioner, do you have questions or comments? I do. First of all, chair, I would just like to recognize that what a great job you've been doing with all of this, this, this particular document for even as long as I've been here now is the 1st time we've had it as a commission to put together a document like this. For the public's understanding, because we've had acting chairs prior to your installment, we have not put this plan into place. So, this is the 1st time for me. I think this is a very, I think it's a difficult document to put together, because it. It needs to have a balance between a just overview of and try to anticipate the things over the next 4 years, which is a long period of time. And it's not a document that is designed to get in the weeds. And so I think as we've all had our discussions, that is something that I personally have struggled with, because some things appear to me to be more weedy, if you will, and other things are more strategic. So, I Alex, I think you've been doing a terrific job with this. I appreciate all of your time. And I'm just going to, I'm going to raise 1 point to demonstrate where I struggle. And the fact that this is going out for comment, I would ask would ask for some comments and for some input. And I know we're going to keep looking at this and that relates to in appendix D. We talk about key performance measures for CPSC staff and its participation in voluntary standards committees. And there's a lot of different committees. There are a lot of different goals to those committees. There are some times that the CPSC takes the lead. And there's an approval process for that. And there's sometimes that the CPSC staff participates. And I've listened in on some of the voluntary standards committee activities. Some are more organized and. Go better than others, but what I would like to do, and I'm not going to offer an amendment at this time, but I would like to point this out and keep the discussion going right now in appendix D. We have a performance measure on this particular idea that just talks about the staff participating in committee meetings and measuring our success or goals by the number of times. I don't think that goes far enough. I think that what we've been lacking in this particular area is some type of protocol and understanding amongst the commissioners amongst the staff. You know, amongst each other as to what our goals are in these voluntary standards at committee meetings and whether they're performance standards that what they're working on or something else. And I would like to see. Some language on this particular issue that is that goes more to that point, because just saying we're going to measure our success or our goals by the number of time. Of course, we participate lots of times. That doesn't get me there. So, I would like to call that to attention of my colleagues of the staff and of the public, because this is something that I think really needs to be addressed. Not only in our strategic plan, but also in more detail in our operating plan and so forth going forward. So, I'm going to just give that statement right now. And that's all I have. Mr. Can, will you be willing to yield to me for just a minute? Absolutely. Well, first, I want to thank you and I know that Commissioner Trump has also raised this issue with respect to this this performance measure. And I agree. There's, there should be a better way to measure our participation in and impact on the voluntary standards process. You know, CPC plays a key role in helping to develop the voluntary standards into making them strong. And oftentimes to the extent of voluntary standards take too long, the commission has and should move forward with mandatory standards. So, we need to find the right metrics to better track this work. And I do look forward to working with you and the staff on finding the right path forward. And as you said, I would urge stakeholders and members of the public to share their ideas with us as we put out for for comment. I think that an issue like this is exactly why we put it out for comment. So we can get input. We can raise the issues and then be able to think about it over the next, you know, as we as we take in comment as we update the plan. So, I thank you for bringing up and I look forward to working with you and I yield back to you. Nope, I couldn't have said it better. So thank you. And let's let's proceed from there. I'm good. Thank you, commissioner commissioner Feldman. Thank you, Mr. Chairman. I do have some comments and I wanted to express some some concerns with the strategic plan process that we follow thus far in waiting to consult with relevant stakeholders until this plan has been substantially drafted. I fear that we're foregoing an important opportunity to learn early about specific concerns that will be critical to the successful implementation. Of of the strategic plan, the legislative history in the GIPRama Senate report is actually quite clear on this point. We're supposed to have consulted with Congress. During the development of this plan and not afterwards, and we're required to periodically consult with Congress and obtain both majority and minority views from the house and Senate, authorizers appropriators and oversight committees. And it's my understanding that that we haven't done that yet. And as a result, I'm concerned that at this point, we may have missed an opportunity for input on the goals, objectives, strategies, performance measures that that we're looking at for the agency. But my concerns here run a little bit deeper. The process has been flawed from the start, frankly. And as I mentioned during the public briefing we received earlier, our earlier strategic plans have involved a comprehensive and a full canvas of views from within the agency. From our most junior employees to senior agency decision makers at the public briefing. Also, I was told that this plan was developed by a small committee of agency managers. But I was also troubled to learn that the plan had been under development since last November, I believe, but only recently. Now is the full commission's input being sought. We're being looped in after substantial drafting and without being able to offer specific concerns early on. And that's a problem. The amendments that we're considering today are going to make some targeted changes, but won't under address the underlying procedural deficiencies. And I do believe that that's a problem. I considered offering as an amendment to direct staff to abandon the current draft. And begin anew, but at this late time, of course, that's, that's not a practical solution. So I'm disappointed with the process that we're using this far. I think, I think seeking a more inclusive process from the beginning would have been appropriate, but I'm excited to see the amendments that we're offering. Hopefully that will make this a better document. And I do look forward to reviewing the comments that are made. So I'll leave it at that for now. Commissioner, commissioner Trump. Thank you. 1st, I just want to say that I completely agree with commissioners commissioner, and the chair on voluntary standards. We do need a better way to measure the effectiveness of our voluntary standards work and and I look forward to working together on a solution. And I look forward to seeing the comments that we get back in response. I don't have any questions at this time. Thanks. Thanks, commissioner commissioner boil. I do not have any questions at this time. Thank you. With that, the, the staff is excused and will begin to say consideration of the package before us. I will now entertain any amendments to the. Proposed document before us starting to myself, I have 1 amendment will recognize myself for 3 minutes to introduce it. I have the privilege of introducing a manager's package with 3 amendments that I believe have the support of all the members of the commission. The amendments would clarify the agency's focus on the voluntary mandatory standards to lead a confusing key performance measure related to recalls. Modifier performance measured short in the time by which staff will notify firms who are providing recall remedy information overdue filing. And replace the term unsafe consumer products with hazards for appears these amendments will clarify and strengthen the plan and I'm pleased to support them. Is there a 2nd amendment having heard a 2nd, we will now consider. Move to consideration of this amendment other commissioners will ask any questions or make any comments with respect to some amendments. And then I will provide myself an opportunity to close each commissioner. I'll have up to 5 minutes around and we can have multiple rounds as needed. Kim shamblico, did you have any comments or questions? I do not. I support the the amendments presented. Thank you, commissioner Bellman. No comments at this time. Thank you. Commissioner Trump. Nope, I support the amendments and commissioner while. Also support the amendments. Thank you, Mr. Chair. Here, I know further questions or comments in this amendment. I'd like to thank my fellow commissioners for. Holding together and getting this managed amendment done and move to vote on it. Turning to commissioner Bianco, how do you vote? I vote yes. Commissioner Feldman, I vote yes. Mr. Trump, I vote yes. Commissioner Boyle, and I vote yes. And I vote yes as well. The yeses are 5 and those are 0. The amendment from the chair is adopted. Turning to other amendments going in order of seniority commissioner Bianco. Do you have any any amendments? Not outside the ones that you've already addressed. Thank you. Commissioner Feldman, do you have any amendments? I have no amendments. Thank you. Mr. Trump, do you have any amendments? I have 1 amendment. Thank you. And it addresses 2 important concepts. Chronic hazards and recall response. So. On chronic hazards for you. Uh, no, you are right. You you describe it and then I ask for a second. So. Okay. I'd love if you asked for a second before I described it. That'd be an easier for me to go, but. Uh, but so on chronic hazards, the amendment clarifies that we're concerned. Not just about hazards in new products, but also chronic hazards that we later realize might have been in our homes all along. Because they often take a long time to reveal themselves. It also indicates that. We're going to be moving to address chronic hazards with all due speed. And with all of our tools, including mandatory rules, where they're appropriate on recall response. The amendment clarifies that moving forward, we're going to be publishing more information about active recalls to the extent we can. And also about the response rates that we're seeing this will allow the public to assess both our performance and recalls and the performance of recalling companies. And it should give a window into how many of these recalled products might still remain in people's homes. Thank you very much. Is there a 2nd for the amendment? 2nd, thank you. Having heard a 2nd, we're going to turn to consideration of the amendment itself. For, since I said, we'll have 5 minutes per round to comment on the amendment. I'm going to start with myself and clean 5 minutes and. First of all, thank you for this amendment. And I appreciate all your efforts to make the strategic plan stronger. I think you may 2 changes, both of which I support. And as you've talked about making clear that our chronic hazard work is essential. And it's focused on well known hazards, not just ones are starting now is important and putting into writing the work. And as we've been doing, and I've been. Directly staff to do to make more information available that public disclosing the monthly prior reports. Is important and it'll enable the public to better track. Recall response rates provide more transparency on how individual firms are performing their post recall responsibilities. I'm pleased that this this ongoing work is now being included in the strategic plan and I support the amendment. Commissioner, do you have any comments or questions? No questions. Thank you commissioner Trump for the amendments and you and I have discussed this previously. And as you know, and I will support the concepts of the amendment. I think they're important concepts. I don't love the language. But since we are going to be taking comments, perhaps some of my concerns, if they're, if they're really. That necessary will be addressed, but I would like to see the comments coming in. But conceptually, I think they're both important goals and I will support it. Thank you, commissioner, Mr. Feldman. Thank you, Mr. Chairman, and thank you commissioner Trump for offering this amendment. I do believe that the work that is doing to address chronic hazards is some of the most important work that this agency has in front of us right now. That said, I am uncomfortable supporting this amendment as we discussed at the briefing and in earlier. I think it's important that the language of the strategic plan mirror as closely as possible, our statutory directive, and our statutes direct us to protect the public against unreasonable risks of injury associated with with consumer products. And I think that that is important context and without that additional clarity, particularly on the on the chronic hazards portion of this amendment that used to be 2, but now it's combined into 1. I think we're potentially opening ourselves up to submission brief that I'm uncomfortable with. So, sort of expanding that work beyond our authorization is something that I'm cautious of and that's the reason I regretfully am unable to support this, but I appreciate the thoughtfulness and in the offering of the amendment. Thank you, commissioner, Mr. Boil. Thank you, Mr. Chair. I do support this amendment and thank you commissioner Trump. I'm particularly pleased to see the language that concerns address ability of the chronic hazards. I think at the briefing I did mention that was something that I found lacking in the original draft and the. Message that we're sending that we intend to take concrete actions where we can. I think it's an important 1. And so I support this amendment. Thank you commissioner Trump go. Thank you, commissioner Boil. Commissioner Trump. Did you have any closing closing thoughts? No, just thank you all for the consideration on this. That I'm going to turn to vote on the amendments, uh, commissioner. Yes. Mr. Feldman, I vote no. Mr. Trump. Yes, Mr. Boil. I vote yes. And I vote yes as well. The yeses are 4. The noes are 1. The amendment by commissioner Trump Trump is adopted. Did you have any other amendments? Commissioner Trump? No. You know what? I actually probably no, I did not skip commissioner Feldman. Um, commissioner Boil. Did you have an amendment? Yes, Mr. Chair, I do recognize you to speak for up to 3 minutes and then a conclusion that will last for a second. Okay, thank you very much. My amendment is very straightforward and it's designed to include a key measure related to civil penalties as a way to reflect the need for such penalties to punish bad actors and to deter future bad conduct. Just a couple of points about the amendment, it's meant to systematize the penalty assessment process to ensure that all cases are evaluated for a potential penalty. This amendment is designed to measure activity on the front end and is not a measure of outcomes to achieve a certain number of penalties. For example, rather it is meant to emphasize that the agency will be evaluating in a systematic way all cases to determine whether a penalty is appropriate. Everyone knows a central premise of our statutory scheme is that companies must report information to the agency. And I think we must send a strong message companies that we will be taking action against those that do not comply with our requirements. Particularly the reporting requirements, which are so central to our statutory scheme. So, for most companies that do the right thing, the result of the civil penalty assessment will not be an issue, but for those companies that impede our ability to safeguard consumers by failing to report information or by committing any other prohibited acts. They will find themselves a subject of civil penalty investigation. And so this amendment simply reflects the importance of civil penalty work as an essential tool that the agency should and must use to enforce our statutes to protect consumers. And I ask my colleagues for their support. Thank you. Thank you, commissioner. Is there a second? Second, again, having heard a second, we'll now move to consideration of Commissioner Boil's amendment. The commissioners will ask any questions, make any comments with respect to this amendment. And then we'll come back to Commissioner Boil at the end. Each commissioner will have up to 5 minutes per round. We can have multiple runs necessary and I recognize myself for 5 minutes. Commissioner Boil, thank you for this amendment, which is, I believe, your 1st as a commissioner and given your past history as a director, I really expect your input as we're looking towards a strategic plan and I believe that. Yeah, yeah, I've been working to strengthen the commission's enforcement to ensure we are aggressive and pursuing civil penalties when appropriate. And I think this amendment will enable us to measure how well we're doing at evaluating. That brings such cases. It's an important step in ensuring that we are actively protecting American consumers and I support it. So, thank you. Commissioner Bianco, do you have any comments? Comments, thank you, and thank you, Commissioner Boil. I support the amendment like the other amendments that we have. I, I'm bussing still a little bit with the language and I would encourage because this does apply to all stakeholders. And as commissioner Boil noted. Everybody's going to be looked at the same. So, if you have something that you need to say out there, please give us a public comment so it can all be considered. I, I actually. I have a different view on how the agency has been applying the reporting standard over the years. The statute gives varying classes of hazards and varying times to actually conduct an investigation. Before determining whether the reportability obligation is triggered. I think the agency has really blurred that and said everything has to be reported within 24 hours. Not sure that's what the statute says. So, I'm hoping that this amendment and what we're going to do with it going forward. We'll address that and some of the other issues that go with it, but I do support the amendment and concept and look forward to hearing the comments and I will vote. Yes. Thank you, commissioner commissioner problem. Thank you, mr chairman, and thank you to my colleague for introducing this amendment. Unfortunately, I cannot support this amendment. My concern is that as drafted, it might have the unintended consequence of incentivizing staff to shy away. From the complex and resource intensive enforcement activity that we often see just in order to meet this metric while we don't want to rush cases on the back end to clear the deck. For example, by settling them for less than consumers deserve at the same time. I also don't want to rush the process on the front end by imposing an arbitrary deadline to initiate a penalty investigation. I think the proposed metric. Might incentivize staff to open cases in some instances. Those, including the especially obvious and in less complex cases, but my fear, as I said, is that it might incentivize. Staff to to have the opposite result where we forego enforcement in the larger and more complex and resource intensive cases. And as we know, those cases tend to involve the larger potential defendants.  Certainly not. So, I would welcome stakeholders feedback on a better measure that would include both a qualitative and quantitative assessment of how we're using our civil penalty authority, but I can't support this as it's drafted. Thank you, Mr. Commissioner Trump. Well, I really welcome this amendment. You know, I think civil penalties form the backbone of what this agency does to keep people safe by deterring bad conduct. And so, because of their central importance, this sets up a system or it will help set up a system where we're looking at them every time so that we don't have an arbitrary process. We put ourselves on the clock for consideration. It doesn't push us towards any result, but what it does is say, we're going to have a system to make sure we think about it every time it could be appropriate. So, for those reasons, I think it's a great idea and it's a well-reasoned approach on how to get there. So, I support the amendment. Thank you, Mr. I turn back to Mr. Boyle. If you have any other thoughts before we go to a vote. No, thank you, Mr. Chair. I just appreciate my colleagues support and consideration on the amendment. That we will ask for a vote. Commissioner Bianco. Yes. Commissioner Feldman I vote now. Commissioner Trump. Yes. And I vote yes. Commissioner Boyle. Yes. And I vote yes as well. That makes it 4 yeses. 1 now the amendment of commissioner Boyle is adopted. Are there any other amendments or anybody else? I do not have any other amendments. Mr. Chair. Thank you. So, hearing no additional amendments, I move to approve the staff's draft 2023, 2026. Strategic plan as amendment and direct the publication of the notice of availability at the same time that federal register. Is there a 2nd? 2nd, having a 2nd, we can move to a vote. Commissioner Bianco. How do you vote? I vote. Yes. Thank you. Commissioner Feldman I vote now. Thank you. Commissioner Trump. Yes. Commissioner Boyle. Yes. And I vote yes. The noes are 1. The motion to approve the staff drafts is as amended. Is proved the notice of availability has been approved and should be published in the federal register. Opening the document up for comment, we will now have 10 minutes for commissioner for any closing remarks. I'm going to claim my time and 1st, I do want to thank the staff for all their work on the strategic plan and for the commissioners for their engagement. I know a lot of hours put into it shows. Um, to the issues that commissioner felon raised to point out that this is really the middle of the process with a long way to go. I think that there's opportunities said, we're putting this up for public comments and that is coming from obviously. Uh, our stakeholders, the American people and Congress as well. And so we will engage with all. And I think the number of you have. Uh, it's urged the public to comment on different aspects of the amendments and the plan as we've been talking about it. I think that makes a lot of sense. So, I look forward to that and we will have. Realistically, several months to work on this and to perfect it in a way that hopefully all of us will be able to support going forward. Because I arrived at the commission just about 10 months ago and when I arrived, I was really focused on a number of key goals. And 1st of all, that's been focusing on strengthening and modernizing CPSC. So, it's better prepared to meet the changing needs of consumers in the marketplace. This means improving our internal operations, giving ourselves the capacity to analyze and understand vast quantities of data so that we can better identify hazardous products. And the communities that they impact us, it means adapting to the growth of e commerce and addressing the challenges that come from direct to consumer importation of goods. And secondly, I really do want CPSC to be household names so that we are the 1st place that the public turns to when they hear about a recall or want product safety information or when they identify a hazard and want to raise a flag. They think of us and we're there to take up their information and go forward. You know, we should be there to to warn consumers of dangerous products to educate them how to better protect their families and doing so we should be reaching out to understanding the needs of all consumers, including vulnerable communities and communities of color. Finally, that's the 3rd key. I wanted to make clear that CPSC always should put consumers 1st and work that we do both prevention and response must work with industry to come up with voluntary standards. Where those standards fail. We should turn to mandatory rules are recalls should be conducted in a way that best serves consumers and we should take appropriate enforcement action when companies violate the law. I'm pleased to see that these concepts are picked up in the draft strategic plan and. Incorporates and moving the agency in the right direction sets the agency on a strong path for the coming years. I look forward to getting comments from all stakeholders and the public about how we can improve and strengthen this plan to and based on those comments and come back and we will update the plan and finalize it and. Be here again, talking about it again amongst ourselves. So, thank you again to the staff and the commissioners that my comments are done. I will turn to commissioner Bianco. Thank you. I agree with many things chairman that you said, and the 1 of the reasons 1 of the many reasons I came to the CPSC was also to help modernize the agency to bring some of the credibility that I personally feel. May have dripped away over the years. I really have appreciated and. Black for better term enjoyed working with my colleagues on this. This has been a real exercise in collaboration. We all have been put. We all have comments to be made. And these are important goals. And. You know, we always all of us will say we could disagree on this or disagree on that and human beings are going to disagree all the time. I think many of the points that commissioner Feldman raised today are right on the money and there are certain things that I think. ought to be considered on balance. I think that it's a it's a strong document, but I cannot stress this enough. Those of you who are out there, you have to give us your comments because coming into our offices later and saying, well, I don't agree with this or that and not commenting is really an awkward position for us. I do think that this this particular document and the CPSC as a whole should put the consumer 1st. I agree with that, but it is not. Just consumers who are stakeholders, many industry leaders are stakeholders and in their individual capacities are also consumers. So, I think it would be a stronger effort if all of our stakeholders got together and we didn't leave anybody out, not vulnerable communities, not stakeholders, not you, not me, not our families. I think on this type of goal setting needs to consider everybody's point of view and I know that this particular commission has been very open to that and that is a great thing. So, I encourage everyone out there who's listening or spread the word, please comment on this document, give us some goals or input on the language because I think the goals of this commission are more aligned than it may appear. And I look forward to strengthening the document. I look forward to the agency strengthening some of its approaches and I look forward to working with all of you going forward. Thank you very much. Thank you, Commissioner, Commissioner Pelman. Thank you, Mr. Chairman. I want to thank you and all of my colleagues and agency staff for putting on a decisional today that that ran quite smoothly. As I expressed at the top, I do have some very serious concerns with the process that we followed thus far and a little bit further, the legal sufficiency of the extent to which we're in compliance with not only the letter, but the spirit of GIPRAMA when GIPRO was reauthorized, it was done so with the intention that this not be a rubber stamp exercise. And I fear that that it's possible that that's the road that we're headed down. I was troubled to learn at the briefing that the basis for the document that's in front of us right now is essentially a rehash of a previous plan that we put together. It was constructed without extensive input from up and down the agency. GIPRAMA is quite clear in its directive that Congress be looped in at a point earlier than we've done at this point at the beginning of the process, not the middle of the process. So, with that said, I do have some concerns. I think some of the amendments that we agreed to today make some modest tweaks around the edges. It's my hope that by pursuing public input that we can continue to make this a better document. But for the reasons that I've stated, this is something that that I'm just not able to support. Thank you. Thank you, commissioner commissioner trump up. Thank you. And first, thank you to staff for the work you've put into creating this new strategic plan and for listening to the questions that we raised at the initial briefing and also here today. And thank you to my fellow fellow commissioners for the very collaborative work we've all done trying to, you know, trying to improve this plan. And I think it has many strengths. Um, we have a new focus on deterring bad corporate behavior. A new objective to track what firms do with their product recalls and a clear understanding of when and why CPSC should issue regulations to protect consumers. I know that those changes are going to improve how our agency works over the next four years. I'd also like to thank the chair for his manager's amendment and thank my fellow commissioners for their support on the amendments to help us identify chronic hazards as an important area of focus and to better track and report on recall response. I've still got questions about how our agency measures its performance. It's extremely important that we get that right because for better or for worse, I think we all know that what gets measured is what gets managed and we want the measures to be as close to our goals as possible. So, if we're measuring the wrong things that could pull us away from our mission of reducing injuries and deaths from hazardous products. So, I'd love to hear public comments on our performance measures in particular. For example, is there a way that we can include measures on the estimated number of injuries and deaths that we succeed in preventing through the actions that this agency takes? It's something that we already do to a large extent in rulemaking, but I'd love to hear how we could accomplish that goal more broadly because it would allow us to highlight the full value of the service that this agency provides to the public health. Again, I agree completely with commissioner and the chair that we need a better measure on the effectiveness of our voluntary standards work. We're doing important work there, but we're not measuring it every year. The commission direct staff to participate in a certain number of voluntary standards activities. Last year, I think was 83. And then staff reports back that they participated in those 83 activities. They actually do more than those 83. So, there's no need to hand out participation trophies around here because we're doing important work and staffs hard work on those voluntary standards deserves a true measure of its value. So, I'd like to hear comments on whether we can measure something that captures the public value we create by participating in those committees. I'd also like to see a proposal from staff that creates protocols that commissioner be a co alluded to that would govern the participation, how we participate when we participate in voluntary standards activities. And I think we can conduct a survey as well of staff who work on voluntary standards to get their feedback on which standards committees are giving us a true seat at the table. And where we're hitting brick walls and I'd love a sense of whether we have separately the right timelines for identifying and responding to hazards. Is 85 business days the right amount of time to identify a hazard. Is that too long from there is another 90 business days to get a cap the right amount of time. Or could be proud recalling businesses to protect consumers faster than that. I'd love to hear the public's perspective on those time frames. And lastly, strategic goal to. It's the heart of what this agency does, you know, we enforce safety rules that we put on the books and we do so in a way that deters companies from breaking the rules and putting people in danger. We enforce and deter and wouldn't that title enforce and deter, send the important message to the public and to regulated enemy entities. About what we value more than the current title, which is simply address in which title describes the agency more willing to aggressively protect consumers from harm. So, I look forward to public comment on that and on these other open issues. Thank you. Thank you, Mr. Mr. Well. Thank you, Mr. Chair. And thanks to my fellow commissioners for this productive discussion this morning. And of course, thanks to the staff, put this strong draft plan together and we're so invaluable in providing the assistance as we can develop the amendments that we consider today. I think the plan is stronger product as a result and I'm going to echo by fellow commissioners and say, though, I'm really looking forward to receiving comments from stakeholders. Across the board, as commissioner Bianco said, so that the resulting strategic plan is stronger still so that will be well positioned to address these difficult challenge of safety issues in the years ahead. So I don't have any further comments at this time, knowing that this is an iterative process and we will be addressing it multiple stages along the way. I just want to say thank you and appreciate all the hard work from everyone. Thank you, commissioner. Thanks again to all the commissioners and staff for the work on this process and look forward to getting the comments and continuing to engage with all the commissioners to back the plan and to update it based on the input that we receive. So, with that, this concludes today's decisional meeting of the consumer product safety commission. Thank you.


One for holding till the bitter end last session before the last keynote on Friday. My name is Jason Clark. So I'm here to talk to you about real world Docker for the Rubyist. And this talks, Genesis really comes out of the fact that the company that I work for in New Relic deploys a lot of our services using Docker. And I hear a lot of hype about Docker. I hear a lot of people saying, you should use it. And then wildly diverging opinions about how to use this tool. Docker turns out to be a toolkit that gives you a lot of options that you can pick from. And so what I wanted to do was I wanted to give you a presentation that tells you a way that you can approach Docker. This is tried and true, tested stuff that we've been doing at New Relic for actually the last couple of years. We got into Docker pretty early. So we've experienced a lot of bleeding edges. And we've experienced a lot of things that have made our lives easier. So this talk is going to take the shape of a story.  Jane, who is a new New Relic employee and has a great idea for a product, a service that she wants to run. It's a, we encourage experimentation. So it's a lines of code service. It'll do metrics for how many lines of code do you have? Super useful, like we wanna let people experiment and see how that goes. And Jill, who is someone who's been at New Relic a little longer and has some experience and can help answer some questions. So as we are a public company, this is our safe harbor slide, which says, I'm not promising anything about any features. Please don't sue us. Please don't assume anything based on me making up stories about services that we might develop, okay? So we're all clear. This is a bit of fiction, but it will help us frame how we use Docker and give you a picture of ways that you might be able to apply it. So one of the first questions that Jane has as she comes in is, why does New Relic use Docker at all? What is the purpose and what's the sort of features that drove us to this technology? And one of the big components of it is the packaging that you get out of Docker. So Docker provides what are called images. And an image is basically a big binary package of files. It's essentially a file system, a snapshot of a piece of code and dependencies that it has that you can then distribute around and run. At this point, Jane's like, okay, I've heard about this. There are images, these images you can build off of them. You can take, so for instance, there's a official Ruby image that's maintained by Docker. You can use that image and then put your Ruby code into an image that you build off of it. And Jane pauses Jill at this point and is like, okay, so this is slightly confusing. I've heard about images and I've heard about containers. And what's the relationship here? And so the relationship is that an image is kind of the base of what you're going to run, it's sort of the deployable unit. Where a container, which does not really resonate for me in the term, but is the running instance of something like that. Now the way that you can think of this is if you draw an analogy to Ruby, the image would be like a class in Ruby. So this defines what's there. It defines what's possible and what's installed. And then the container is like an object instance that you have new. It's a individual running piece of that. Okay, so we've got Docker images and then those we can deploy as running containers that do our application and run our code in our staging and production environment. So, but there are lots of ways to package up your stuff. I mean, you could just shuttle files out there. You could make a tar out of it. That's not enough to tell us why we would want to use Docker. And that brings us to the other major thing that Docker brings, and that's isolation. So for most of us, we don't have our app set up in such a way that one host will be completely maxed out by an app that's on it. We may want to be able to share those resources and run multiple things across multiple machines to increase our resiliency and use our resources well. And traditionally, you might have done it in some fashion like this. You have your server, you've got different directories where you keep the different apps that are there and you deploy and run those things on that given host. Well, the problems here are pretty obvious when you look at it and see these things sitting next to each other. They're all sharing the same neighborhood. They could interfere with each other's files. They could interfere with processes that are running. They're sharing the same memory on the machine and there are lots of ways that these two applications that are running there might interfere with each other. Docker gives us a way to contain that, to kind of keep those pieces separate. Now they still use the same kernel. This is not like a VM where there's some separate operating system. But Docker provides insulation so that each of those running containers appears to itself as though it is the only thing that is in the universe. It only sees its file system, a subset of that. It has, you can put constraints on how much CPU and memory it uses. And so it minimizes the possibility of those two applications interfering with one another despite the fact that they're running on the same host. So this is a pretty attractive thing for us to be able to have sort of shared hosts that we can deploy a lot of things to very easily without having to worry about who else is in the neighborhood. All right, so clearly, you know, Jane's new developer has shown up, how do we get started? Well, Docker is a very Linux based technology and it has to be running on a Linux system with a Linux kernel.  We run Macs or Windows. And fortunately, Docker tool kit is available. So this comes from Docker. It's the kind of sanctioned way to set up a development environment and be able to get the Docker tools installed on a non-Linux system. So once we have that, then we can get down to actually writing our own images to construct an image for our app that we want to deploy. So Jane, you know, sits down with Jill, they're pairing. And Jill has her write this in a file called Dockerfile and the root of her application.  She had done some reading about Docker that from says, what image should I start from as I'm building the image for my app? But that's all that Jill tells her to write. And she's like, well, shouldn't there be some other things?  So Jane's really confused about what's going on, you know. This is an image that we're using from New Relic that we've got. But where's the rest of the Dockerfile? And Jill says, okay, this is a fair question. But, you know, running code's awesome. Let's get your thing deployed to staging and then we'll dig into this later and look at how that very simplified Dockerfile actually provides us a lot of value and shared resources. So, having written this basic little Dockerfile, Jane goes to the terminal and writes this command line. So it says, Docker, build the minus t provides a tag for the image that we're going to construct and tells it to work in the current directory with that dot. And then once we've done that, there will be a whole bunch of output that appears at the command line as Docker goes through, takes that base image, and then runs the various pieces that are baked into that image to build out a package of your app. Now, if you have errors in your Dockerfile or you have problems, file permissions, things that go wrong, this would be the point when building that would tell you. You'll see output from those commands there. But once it's successful, if we ask Docker what images it knows about, it will give you a listing, and here we'll see our LOC service image that we built. It gave it a default tag of latest because we didn't tell it to give it a particular tag, and that image is a runnable copy of our application that we can do something with. Well, this is all well and good for Jane on her local machine, but clearly if this thing's gonna go into a staging environment, that image needs to get from her computer somewhere else. And to fill this gap, there are a variety of things that you can do called Docker registries. Now by default, Docker runs one called Docker Hub. This is what all of the Docker tools will default to if you don't specify as you push and pull images. It's where it will look for it. There are alternatives though. So at New Relic, we ran into a problem when they deprecated what version of Docker you could use, more quickly than we had moved some of our systems off of it. And so we had to go looking for some alternatives as well. One of them that we've had pretty good success with is called Key. I know it's spelled kind of funny, but that's how the word gets pronounced. And that is very similar to Docker Hub. It provides you a nice web UI. You can push and pull images. They have a paid service, so you can have those be private. And so that's been one of the major alternatives that we've gone to as we've moved off of Docker Hub. Another alternative as well is a piece of software out there called Dojistry.  And so it sort of takes that third party provider out of the picture, which can be important if you have critical deployments. If we have our deployment, depends on Docker Hub being up. If Docker Hub is down, we can't deploy our stuff. That might be a problem for you depending on your organizational structure and scale. All right, so we have an image. We have this picture of what Jane's service looks like that she wants to get running. So she wants to go get this started up out in our staging environment. And so how does she do that? Well, at New Relic, we developed a tool called Centurion. Now, typically, if you want to just run a Docker image and create a container off of that that'll start your application up, you would say Docker Run and then the image. And that image has a default command baked into it, which is what will get invoked. And then this starts running. If you run it in this fashion, it will be blocking. You'll see the output that's coming out of the container as the commands run. So you can imagine that this is something you could go out to a machine somewhere in the staging cluster and go tell it to Docker Run these containers. And that would work. But unfortunately, if your company gets to any sort of size and scale, you probably want things running on multiple hosts. And you probably have a lot of computers that are out there. And interacting with those individually is problematic. And so that was where Centurion came in. Now, this is certainly not the only way to solve this problem. And I'll briefly refer to some other possibilities later on. But when New Relic started with Docker, these things didn't exist.  One of the other big powers that Centurion brings is that it is based off of configuration files. And these are things that you can then check into source control, you can version, and have a central point where you know what's deployed in your Docker environment, rather than individuals going out to boxes or starting containers that you don't know anything about. If you run everything through Centurion, you have a central record of what's actually going on. So Centurion bases these configs off of rake so that they have some amount of dynamic programming that you can do in Ruby. So you define a task for a given environment that you want to deploy to. So in this case, we've made a task for our staging environment. We tell it what Docker image we wanted to pull onto those hosts. And that allows us to have it grab the latest. You can also tell it different tags. So if you had different versions of the service and you wanted to deploy a certain one, you could do that. And then to handle that issue of having lots of hosts that we might want to start on, you can specify multiple hosts that Centurion will then go and restart or deploy these services to. So with that, it's pretty easy to get Centurion started. It's just a gem. You install it, and it installs an executable for you called Centurion, unsurprisingly. There's a number of flags that it'll take, but the basics are you tell it an environment. You tell it the project where it should find the configuration, and then you give it a command. There's a couple of different commands. We'll just give it a deploy and say, go out there, start these things. So Jane's a little nervous. I mean, she's hardly been here at all, but she asks, does this all look good? Are we ready? Yeah, let's go. She kicks the Centurion command. And what you'll see is a lot of output as it connects to the various hosts. It will go through them. It will pull all of the images down to those. So that all of the boxes that you need have the image that you're gonna then start with. And then one by one, it's going to stop any container that's running for that particular service on that box, and then start a container up for you based off of that config. So after it's connected, there's also options that'll let it hit a service status check endpoint. So you can do rolling deploys where you make sure that things are actually up and running before you start to the next host and shut things down. All right, so having done all of these things, it's been shipped. Things are in staging. Jane is able to test out her code, see that things are working swimmingly, and goes home for the day feeling very accomplished. It goes to bed, comes back the next day, and unfortunately, things were not as great as she thought. The service is not there. Where did her app go? Well, it's time for the tables to turn. Jill's gonna ask a few questions of Jane. So Jane says, well, where were you logging to? Let's start trying to figure out what happened here. And Jane looks through the code and she had kind of cribbed a line from somewhere that she wasn't really clear about, but in her production configuration for her Rails app, it looked like it was a standard practice around New Relic to have all of the logging go to standard out rather than going to files that would get written inside of the Docker container. Okay, so that being the case, this actually put Jane in a really good position because New Relic's infrastructure, where we run the Docker hosts, actually takes all of the standard out that comes out of Docker. So like we saw, when you run a container, you see what's going to standard out from that. So we're able to capture it and we actually forward it to a couple of different places. We forward it into an Elasticsearch instance, which runs Kibana, which is a fairly common sort of logging infrastructure. I've heard it referred to as the Elk stack. Elastic, something with an L log stack. Forget in Kibana. And then also we actually take that opportunity to send things to our own internal database, event database called Insights. And this lets us do analytics and querying across these logs. But you could set things up to send these logs that are coming out of your Docker containers anywhere you want. But I highly recommend that if you do use Docker and production in this way, that you do make sure that all of the logging that you can is going out of the containers and not getting written inside of them because it will give you better visibility to it, for one, by getting it out. And it'll also prevent the file system sizes from getting huge in the Docker containers themselves. All right, so they take a look at the logs. There's not really anything there. Unfortunately, you don't always hit a home run on the first go. So it's time to take a little closer look at the containers themselves. Well, that's actually something that you're able to do. And Docker provides the commands for it. So here we're specifying a minus capital H. That points us to a different host. So by default, Docker is gonna be talking to Docker running on your local machine. And so this lets us go point at our staging environment and the command way off on the in there saying PS lists the running Docker containers that are on that host. And here we see a container ID. It has a nice shot, which will be fun for us to type. But that's an identifier for the individual running container that we've got going out there. And it looks like it's still there and it's running. So what we can do from there is we can say exec rather than run and give it the container ID. The minus it sets things up to be interactive. And so this will actually give us a bash prompt onto that Docker container. Now, this depends on bash being installed on the Docker container that we're connecting to. And there's a variety of other things that could interfere with this. But we have things set up so that we can do this to do any sort of debugging that we need on those containers as they're running in our production and staging environments. All right, they look around. They see that the processes are gone. It's not exactly clear what's going on, but they eventually dig up some stuff that looks like there might have been some things happening with memory. And that tickles something in the back of Jill's brain. She remembers another project that they had and that had some similar problems where things just seem to be disappearing. Like processes would just go away with no trace that they could see. And the problem there was memory. So the lines of code service apparently is clocking in at a good 300 meg. Not totally crazy for a Rails app, but a little big. And that was the key that they needed to figure out this problem with things getting killed. So like we talked about way at the beginning, one of the key things about how Docker provides you isolation is that you can set limits on the containers for how large they can get and what memory they can consume. This prevents the individual containers from interfering with other things that are on the same host. And it turns out the 256 meg was about the limit that was being set by default if you didn't specify anything. And so as soon as you got past that, then Docker's infrastructure would kick in and it would just kill processes to free up the memory. Well, this is clearly not a good situation. And so fortunately, we allow for configuring that. So in Centurion config, you can say memory, tell it to give us two gigabytes. And what this actually correlates to is a command line flag that you can give to Docker to tell it how much memory you want. And basically any of the commands that you can give, any of the flags that you can send to Docker when you're running things to modify that environment and tell it differently how to run stuff are available through the Centurion configs. So you have a source-controlled place to do all of the changes that you might wanna do to how your containers run. All right, this is great. We've got two gigs, things stay up, they keep running. But we actually asked for a little more memory than we really needed. And Jane's like, well, we should probably eke a little bit more performance a little out of this. Even though it's in staging, it'd be nice to have a little more room. So I wanna increase the number of unicorn workers that I've got. Jill's response is to try the MVE. So Docker provides flags when you're running to let you set environment variables that will be passed along into the container. And this is actually a really fundamental part of how you should structure your Docker systems so that things get passed in from the outside. So when we say minus E, unicorn workers, once we're inside that container, it's just an environment variable like you've probably seen in many other places. For our setup, we have a fairly standardized unicorn config. And what we do is we look for the unicorn workers environment, we turn that into an integer and tell it to run the number of workers that we want. And so our Docker image can be used to scale up or down to run larger or smaller numbers of workers without us having to construct a new image that changes that configuration. As you might expect, Centurion supports this. In fact, this is one of the key features of how we use Centurion, is that we drive as much of the config out of the code and out of the file system and into the environment as we possibly can. And so you can say envars, give it a hash to give it the names of that. Now, this is not the only thing that you might wanna configure. Your database YAML file in a typical Rails app gets parsed through ERB before it's actually run. And so you can do things like this where you parameterize potentially off of the environment. So when we run in our production and staging, we can be explicit about where to go connect to our databases. But one of the niceties is since this is just Ruby code inside of the ERB braces there, we can also give you defaults. So if you're running the Rails app locally, it's gonna work, it's gonna find the things that it needs. Similarly, application-specific configs are something that we can rely on the environment as well. So in your application.rb, you can set config values and you can set these to arbitrary names, arbitrary things that you want to pass around and then those will be available throughout your Rails app. So here we take, we're looking for another service that we're gonna talk to. We set the URL and we have a default to fall back to. We set timeouts. And what this does is this gives us one central place in our Rails app that we will see all of the things that we can configure through the environment, all of the knobs and switches that you might want to control. Accessing this from other places in your code is as simple as saying rails.configuration. The accessor that you specified. So here we can get the service URL and timeout that we were talking about and use those throughout our system. Now, some of you may have heard of the 12-factor app. This is a thing that Heroku has promoted that's got a lot of principles around how to run applications well in production. This whole environment-driven thing, while it applies very strongly to Docker, it's not limited there. And this is one of the key tenets that they have with it. This is also a really good idea to drive things through the environment as well for security reasons. If you have secrets, you have passwords, you have sensitive pieces of information. If you put those into your source code or put them in files that are in your Docker images, if somebody gets ahold of that Docker image, they will be able to see what that stuff is. So if Docker Hub gets compromised or some other place does, your secrets, you don't want them baked into those images. By putting them in the environment, they're only there at runtime and someone would have to have access to the containers to be able to get at those bits of information that you don't want. All right, so this is all well and good. Jane's feeling awesome about the work that's going on, but she really wants to understand better. So that one line Docker file that we showed at the front, right? She just wrote one line to say from this image, how does that actually work? Well, it turns out at New Relic, we've put a lot of effort internally into building shared Docker images on top of other pieces of the Docker infrastructure that we've gotten from the world at large to make our lives simpler and bake in the things that are shared across our applications. So base builder was the name of the image that we grabbed from to start. And so this encodes a lot of our standard ways of approaching things at New Relic. So for one, for various historical reasons, we run mostly off of Sintos. That's what our ops folks are most comfortable with. And so we derive ourselves off of a Sintos image rather than a lot of the base Ruby images or either Alpine or Ubuntu Linux. Well, we know that this is something that people are running Ruby off of. And so one of the first things that we do in this base image is we install Ruby versions for you. Now we end up using RBEMV, RBM to do that. That's not strictly necessary because there's not gonna be version switching going on, but it just happens to be the tool that is most commonly used at New Relic for switching Ruby's. You can get a Ruby installed onto your Docker image however you would choose to. Once we have that Ruby version installed, we can start putting other things that we assume people are going to use. So for process management, we use an application called SupervisorD, so we can install that. Most of the time you're running something that's a web service or a website of some type, so we run that through Ingenix, so we put that into this base image. In fact, we can go even further. We can gem install Bundler and then rehash so that that executable for bundling is available. And this is great. We're finding all of these things that are shared between these applications and taking that duplication out, making it simpler for people to build their images. So why not just bundle install? Like get all the stuff, right? Well, here we hit a roadblock and it's pretty obvious when we try to build it what's wrong. The base builder, this is a base image. This isn't the application itself, so we don't actually know what your gem file is yet. Someone is going to build their app on top of this and so we can't go and do the bundle install when we're making the base. We don't know what's gonna get into that actual app. But fortunately, Docker provides us the tools that we need to do what we really want, which is to say, when somebody uses this image, I have commands that I want you to run and Docker's parlance for that is on build. So any Docker command that you put into your image, if you say on build before it, it will wait to run that command until after somebody has already used your image in their own Docker file. And so we can do things like wait until somebody uses this in their app and then go copy their gem file in and bundle install. So we get their copy of dependencies, but we don't have to have them write the lines to know to go bundle and do the correct things in their particular Docker file. In fact, we've pushed this approach quite a ways and provided not just standard things that everybody does, but options that people may want to choose. So Unicorn is used pretty broadly at New Relic. It tends to be the default web server, but there are people that are using Puma and like to try that out. And so what we've done is we've created scripts that allow for those sorts of configurations to be a one line thing that you can put in your application's Docker file. And all that these have to be is a script that modifies whatever configs you need to on disk to get the effect that you want. So in our case, this is just a matter of changing out the supervisor config for which app server to start up and then swapping in a Puma configuration instead of a Unicorn config into the app itself. But this is a one line thing for somebody to do in their app and be able to try out. In fact, we've even gone so far is to provide helpers for installing other things that people might want like Python. We have some teams that have background processing that runs in Ruby and then has some Python that it needs to invoke. And so we can provide simple wrappers baked into these base images to smooth the path for app developers as they do their work. All right, so it's a fun technique. It's fun to see which things you can pull out and make it so that people don't have to think about. But let's get back to some code. So Jane keeps writing her app. She's working on this lines of code service and she wanted to write a file somewhere. She just kind of picked the root directory to go write it and she's getting an error out of it. So she goes, pings Jill, Jill comes over, they take a look at it and it's a, you know, again a pretty straightforward error message but it's not totally clear why this is happening. Permission denied, she tried to put this file there. And Jill, you know, being fairly experienced knows just what the problem is. The problem's with nobody. Nobody who's nobody. Well, nobody is an identity that we have on our Linux machines that has fewer privileges than root. So it's actually a user that we run our things in inside of our containers by default. And so here, this is not super relevant in all of the details, but this is how Supervisor starts an app up and we say user is nobody. There are things at the Docker level where you can control this as well. But this kind of makes Jane a little confused because like she's heard from many different people about how Docker runs is rude and isn't that fine because the containers are isolated. And while it is okay to do that and it's sensible why Docker has chosen that as the default, it doesn't mean that you can't crank things down further. So if you are writing your own applications, you can be more defensive than Docker as itself. And by running as nobody inside of our containers, we give ourselves extra protection in case there is some exploit or some problem with Docker that would let them elevate root privileges inside of the container to the outside host. So running things in as secure of a mode as you can within the boundaries that are in your control will end up giving you a safer result in the end. All right, so Jane gets that fixed up, starts writing things in a location where she's allowed. And then maybe a little late, but she comes around to say, yeah, I wanna write some tests. Like how does Docker fit into this? Well, there are some ways that you can work with Docker to make sure that your tests are running in a realistic environment like where you're going to deploy it. The simplest most straightforward thing that you can do is you can run alternate commands against the images that you've built. So here we say Docker run against an image of our lines of code service. And we just told the bundle exec rake and it goes off and it runs the tests inside of that container. Now this presumes that all of the configuration that's necessary is there. If it needs database connections, you'd have to figure out how to feed those things in. But at base, all it needs to do is run that Ruby code inside of the container instead of running your full web application. But unfortunately this has a problem and that's the fact that this relies on the image that you built having your current code. And I don't know about you. I occasionally will edit my code while I'm working on it. And if you make a change to your tests or you make a change to your production code, you have to rebuild that image to be able to get those tests to run against the current thing that you're doing. And I don't know about you but this would make me very sad. Anything that gets in that loop of making it so I have to do something extra before I can do my tests is not a really great experience. Fortunately Docker does have some options that will let you get out of that and do things in a little different way. And that is with mounting volumes. So here we have a Docker run command. It's running against our lines of code service image. And that minus V is the important part. So what that is saying is take what's on my local host, my host where I'm running at source my app and make it so that that appears inside my container at slash test app. And so this mounts that in without rebuilding the image. And so what we actually have happening at New Relic with most of our tests is they run against the Docker image but they just mount the current code into that image rather than rebuilding it from scratch. You have to do a little directory munging to make sure you're in the right place to go run the code. But otherwise this is a very good approach to keep you from rebuilding images all the time. So life moves on. Jane's got more and more things that she's wanting to do with the service. And as often happens she maybe is looking to use sidekick to do some background processing and she needs a reticence instance and figures, oh, I need to talk to somebody to provision that or set that up. Well, it turns out that what we built with Docker allows her to kind of self serve that and have stuff deployed through the same mechanisms. So what we have is we have a image already constructed that we use internally that has reticence installed and that takes all of its configuration through environment variables. So all that Jane needs to do to get a running reticence instance into staging her production is to create this configuration and go deploy it the same way that she's been doing with her app. This is a powerful approach. Like you can do this with anything where you've got some sort of appliance, just code that you would like to be able to have people parameterize and run without tampering with it. If you build the images to drive off of the environment then people can just take that and run with it and just use it kind of out of the box. So there's a lot of talk about Docker. There's a lot of things that are going on. Centurion came out of a need that we had a couple of years ago at New Relic but there's a lot of other things that are in the ecosystem that might be of interest or something that you might want to pick up today. So one example of that is Docker Swarm. Now this comes from Docker. It is software that easily allows you to control a cluster of hosts. So the sort of staging environment that we have there. Docker Swarm is a good way to sort of bootstrap yourself into running in that type of environment. Something that we're looking at to potentially either evolve Centurion into or use to replace it is a project called Mesos. And Mesos in conjunction with a thing called Marathon allows you to have more dynamic sort of scheduling for your containers. So rather than saying I want to run this on hosts A, B, and C you would tell Mesos, I would like to run three instances of my image. Please go find somewhere to put them. And it would put them out there. And it has some really nice properties around resilience. If it drops one of those instances because something crashes, Mesos can start it back up for you automatically. You can scale things dynamically with it. A similar technology that's for this sort of container orchestration is Kubernetes from Google.  There's a lot of people working to make this a better workflow. All right. So we've come to the end of Jane and Jill's story. We've looked at how you can use Centurion to deploy and control multiple Docker hosts. We've looked at how using the environment to drive your configuration allows things to be more dynamic and controlled. We've looked at some tips and tricks around building shared images so that you can spread best practices within your organization and not repeat stuff. We've looked at some security and testing and a little peek at the future of where things might be going. I hope this has been of use to you. And hopefully you'll have good success if you choose to use Docker at your company. Thank you. So the question was where the Dockerfile lives. And yet typical practice for us is that the root of your Rails app is where the Dockerfile would live. It doesn't have to, you can put it in other locations, but that's been the simplest sort of convention that we've followed. Yeah, so the question is between Vagrant for similar sorts of workflows of testing and developing in Docker. From what I've experienced Docker startup is very fast. So if you have a pre-baked image, like the image building takes a while but actually starting a container is really quick. So it would definitely be worth looking into. I think it provides similar things to Vagrant and is a little lighter weight. That's one of the selling points there. So the question was what concrete usage do we have of this? I think at last count we had a couple hundred services that are running on this internally. It is not everything that we run. There are a number of our bigger older applications, especially the data ingest that aren't converted over to Docker. But pretty much any of our new products that have been developed in the last year or two have been deploying into our Docker cluster. So yeah, so the question was the deployment workflow is building a new image, like run your tests, build a new image and then deploy that image. And yeah, that's correct. We run things through a CI system. We happen to use Jenkins, but it's fairly up to you exactly how that flow happens. I showed a lot of us using the command line directly to do those deploys. We don't actually do that much in practice. You have a central CI server do it, but all that it's doing is calling Centurion from a little shell script. The same way that you could from your local machine. Yeah, so the question is, what do we do about things like database migrations and asset compilation? Asset compilation very often we will do it image build time. I didn't show it here, but that is a common thing for us to do in constructing the image. We have some other techniques that we're playing with for externalizing the images entirely from our Rails app, which takes that out of the picture. Database migrations, the database currently and probably for the foreseeable future does not actually live in Docker itself. And so we will tend to have another environment where we would potentially use that Docker image to go run the migrations, like use the image, run that command to go talk to the database and do those migrations. But it's not part of like the individual deploys. It's normally scheduled separately as part of things. And the questions, what about the fact that migrations might break currently running instances? That's something that we kind of have to manage ourselves at this point. It's certainly something you could build more infrastructure around. We tend to just have a very conservative cadence for when we do migrations in the apps that have those sorts of setups. So red light is on, so I'm out of time to be on the mic, but I'm happy to talk to anyone who would like to afterwards. Thank you for your attention.