Hey guys, just before we start this week's video I wanted to speak on a topic that is obviously very pivotal at the moment for all of us. I didn't really know how to help but I think using my platform would be the best approach. So in case anybody out there has any doubts, Black Lives Matter and understand that I will never understand but I stand with you. Hey everybody and welcome back to The Average. Today we are going to be doing a little collaboration with my good friend Luisa at Colorhold Creations. Go check her out down in the description. She does loads of really fun videos with mostly Harry Potter themes. So today we're going to do a Harry Potter themed video with her and what we're going to do is eat to others Harry Potter Sona.  So I did have the idea to draw like a gang of YouTube people like that's Casey that's Deena and this is Mira. So I was thinking like I was going to draw all of that but then in the end I thought that's a lot of stuff to do. So I'm just going to draw Luisa and yeah I've got a new Mosseri sketchbook which is looking very nice so I want to start that out because I have finished this sketchbook. I drew this at the front page because that's what I had left. So basically yeah I'm going to do a sketchbook tour soon I guess. Also if you guys don't know I have started a Patreon and it's open as of today and we're picking a book for our book club reward tier so get over there if you want to help pick a book and we'll read it together and then we'll create art on it and it's going to be super fun I'm really excited to do that. Anyway that's going to be happening soon. I will probably film a sketchbook tour and post it for early access on my Patreon so make sure you go check that down in the link in the description. Okay so here is my Mosseri sketchbook I haven't used this yet it looks very nice. It has a design by a really cool artist that everybody probably knows of that is hey color and she has this little thing that came with it of her process which is kind of cool. Anyway I bought this with my own money but I just always wanted to try these out and I've always been put off because I don't like ring bound sketchbooks but I'm going to try this one out anyway because it came with like a really nice watercolor paper and yeah I think it'll be fun to try out as different style and also it does lay flat which is kind of cool so we're going to try that out and I'm going to draw Louisa and we will see how that goes. So I did do an initial sketch so I want to just read I just want to kind of go for it with pen with this one because basically I'm trying to get more confident lines so if you just draw with pen it's really helpful to get those confident lines and this is the first sketchbook page so the nerves are up but we're going to go for it. Yeah so Louisa has a really nice channel she posts kind of sporadically but she has a really cool channel and it's really nice when she has stuff it's like chatty style so if you kind of like that style it's very nice to just listen to and draw along with. She works for a pet is it a pet company? It's not a pet shop it's like a pet company. She's gonna be like what are you saying and yeah so I want to draw like a few animals that she would kind of have with her Hogwarts Sona. I really feel like I'm getting that role it's not Hogwarts Sona it's just like you as a character if you are in Harry Potter I guess which is a Hogwarts Sona thanks stuff and also I kind of wanted to stray away from doing exactly what it is in the books where or as in like the style of the outfits I wanted to stray away from doing what is in the films like what they've perceived the descriptions of the uniforms and stuff in the film so I wanted to kind of do my own style and I hope that it's recognisable. Again with the pen it's a little bit of an adventure of trying to draw the right lines and correct things everywhere but I think I need to get better at my my line confidence so this is gonna be helpful for that and then what I'll do to color in is I will use my my new watercolor my new alcohol markers I got from Artex that they sent me these big batch of them because I've been getting into using them again within my old sketchbook and I really enjoyed using them so it's nice to get used to that again I realized that how much I like alcohol markers I've been doing a lot of experimenting with style recently and I hope that it's gonna work out in the better for me because I'm really enjoying what I'm doing so far and I think it's gonna be pretty cool so I want to do like a different kind of kind of uniform here not really sure what I'm doing here I'm just kind of going for it and hoping for the best so Louisa has a pet rat I believe so I wanted to draw him in this image because I thought that makes perfect sense for a Harry Potter style drawing so I have a little drawing of him previously done in my other sketchbook so I'm just gonna try and copy that as best as can if I make any mistakes I think I might just you know go over with the molotov pen or something like that but yeah let's draw her hand here okay I don't know how she's holding this wrap but there we go we could there's the first mistake that I've made oh well we're learning we're doing and then her other hand could be like here so it makes sense now little rat buddy it's super cute I mean I am I am saying like I'm drawing with pen and that's helping my land confidence but I also I have done preliminary sketches so I'm looking at that a lot so that helps out a bit it's not like I'm just going in without knowing anything I've definitely made this drawing way too big as well because if my other sketchbook it is a full body one but it looks like we're gonna just be able to fit just a torso in it which is fine okay I want to do something cool with the robes like a little bit different to how they are in the books or necessarily on on the in the movie I mean okay so there's my super quick doodle of Louisa and her Hogwarts Sona I'm gonna quickly color this in and then we'll talk about stuff that she's got in her bag and things like that so first of all I would believe that she would be half a puff so I'm gonna kind of draw this style of half a puff cape style what I'm saying of colors and yeah like I said I'm gonna make it different to the normal what we see all the time so I'm just gonna use orange and yellowy colors which is the house colors I think this is actually quite too bright of an orange let's see that looks exactly the same color but it's a little bit lighter I think I need like a more of a yellow right for half a puff I like now to do this thing where I do like the swatches above the page because I think it looks quite nice in a sketchbook as well Louisa you need to tell me if actually I've got this wrong and you want half a puff but I think you are and I think I am so we'll see what you put me as she's doing the same thing on her page so if you want to go check it out what she's made me into she's made me into or she I can't speak if you want to see what she's done with my if you want to see what she's done with my Hogwarts Sona then go check that out because I'm interested to see it too I know that she's put pesto in there so that will be really fun to see also I know that she recently colored her hair pink which is gonna be really fun to like have a go with I think I'm gonna make the heart yellow yeah what about it guys we're gonna do about it all the Harry Potter fans are like what doesn't make any sense well that's the thing it's my little Hogwarts universe so I can do whatever I want I'm liking the sketchbook so far as well by the way guys it's pretty nice I like the paper it's handling the alcohol markers very well let's see okay there was some bleed through but hmm that tends to happen with alcohol markers quite easily but yeah a little disappointed that that's not a little bit thicker because it is watercolor paper so you'd think that I'd be able to hold some ink so okay though I missed her other sock I think I want to make like the robe actually like not black but a dark blue as well having fun with with it basically rather than sticking to the strict style of Hogwarts style so oh maybe a purple because purple goes with oh decisions purple goes with um yellow I mean this is a lilac it's kind of a light purple so I was thinking the outside could be light and then inside of the cape of the robe could be dark and then with like stars and things like that do you guys remember and the old Harry Potter book when they had like a totally different Dumbledore on the cover and then now it's like worth loads of loads of money that print because it was like the first run of prints and Dumbledore looked totally different like his outfit and uniform the illustrator had made it really wacky I think I had a copy of that book but then I swapped it with um a friend of mine who then moved to America when we were like kids so it didn't matter and now I'm like damn it should have kept onto it if I can find an image of that I'll pop it up here but um maybe you guys know what I'm talking about I do enjoy using this lilac-y purple as a shade color kind of works quite nicely sometimes okay I'm gonna make her hair pink because that is what she's recently dyed it to find a nice pink that will work with our color scheme here kind of wish I was able to fit her whole body in here but that's all right I can't resist a pink nose guys all pink hands I don't know why all pink knees these are our colors what is a nice blue that could go with that probably maybe yeah okay I'm liking that so on the inside of all the Hogwarts robes in my imagination that bled really badly um they would have like stars and stuff like that so I'm gonna go over with like a white molotow pen here and do like star shapes and stuff I think I look cute and I think yeah let's go for the yellow socks let's round it off some more yellow I think kind of a more witchy vibe there um I'm gonna do some stars and stuff inside the cape cool kind of weird weird outfit but she's a wizard Harry um I want to do like a little bit of a background haze around her as well now I'm gonna draw what would be in her bag so obviously she would have her wand which I'm gonna make a little bit fancy a little bit of a curl at the end and then maybe make a cool little design on the end of a yellow stone or something I know this isn't very um I don't know on point for Harry Potter like it's not very in the brand if that makes sense it's it's kind of my interpretation so I like it and I'm good to make the wand pink to match her hair yellow like a yellow stowed on the end okay let's draw the pages of these books she would be going around because I think she would be quite a studious uh student yeah for sure or she would read a lot anyway I'm not sure if you're very academic or not but I know that you read a lot so I think that would be a lot of books even if maybe they were just for fun being carried around in your bag so maybe like a potions book I don't know what else would be under here but you can't really see you can't really see it so I'm just gonna do colors she would definitely have some little treats for her rat that she's carrying around I don't know what these would be like little delicious uh was it rat treats I don't know kind of looks more like an elephant but that's fine maybe some like potions bottles for later to put stuff into so empty bottles basically I don't know why but in my world uh she would be a potions master so maybe taking like taking like an a-level or something an a-level an owl in potions or something I don't know so she would have lots of empty jars just in case she wanted to pick up something or fill them up or something I like that idea oh yeah so I'm sticking to it nice cute so you've noticed that I am sticking to this kind of color scheme which I think is a good idea so then it doesn't get too crazy I think it kind of looks cute when I do like random colors and stuff I think it looks cute so I'm gonna do it oh yeah what else would you have maybe like some kind of charm or something I don't know what it would be for it's not a time turner but it's some sort of charm and it kind of matches her warden as well oh I think she would definitely have some like sherbet lemons as well which is a really nice sweet and it's a constant sweet that shows up in um in a Harry Potter because Dumbledore eats them a lot and I think that she would like them I like them they are quite delicious so let's do like them coming out the bag kind of doing like the made up language as well which I think would be kind of cool like a witchy style of language that they had for their own which reminds me she might have a purse of money I'm gonna draw a little purse as well something like a drawstring purse because I think that makes sense within the kind of realm of wizardry and lots of money inside because this is our magical land we can do whatever we want I think it would be pink okay I think I'm gonna stop there because I really like the way that this turned out it's just a fun little design the first page of a sketchbook a new sketchbook done and I do really like this um I am a little bit put off with the wire but maybe I'll get used to it that's something I don't usually like in sketchbooks but I thought I'd try it out so yeah I'm not bothered by it too much anyway this is Louisa's character as a Harry Potter Hogwarts goer she is half a puff with her new design robes that I've made she's carrying her potion books and history books and fun books rat treats her magical wand a little contraption that I haven't decided what that is empty potion bottles sherbet lemons and a cold a gold coin purse and I use these r-tex markers for them which are very nice and quite reasonably affordable actually so I do actually really like these pens I used the delta white liner to do like white lines and just a kind of random probably 100 yellow store pen for drawing it out I hope you guys like this and yeah that's kind of my first impressions of the um mossary sketchbook which is very nice I like it and yeah um if there was a bit of bleed through but overall quite good it at least didn't go into that page and so yeah go check out what Louisa has done for me on her channel let's see I'm excited to see that and I'm really looking forward to it also I have got my picture in open so please bear that in mind if you fancy some rewards I've got some original stuff going on for instance you can get this which is an original painting of a gibli scene that I did and that is one of the tier rewards but there's also youtube shoutouts book club tier and just general update here so thanks for watching guys and I'll see you next time bye


Staff Sergeant John Archiquette, and I'm here in Agadir, Morocco for African Lion 2012. This largest exercise on the African continent brings over 1,000 U.S. military members, including 800 United States Marines. This U.S. African Command-sponsored event is led by Marine Forces Africa and builds partnership with the Moroccan counterparts through various peace support operations. The mission is for us to come out here and conduct a security cooperation bilateral training with the Moroccan Army. They're working, providing instruction to not only the Marines but the Moroccan soldiers on our techniques and tactics and then in turn the Moroccan soldiers are providing their instruction on their techniques and together we're starting to understand how we both operate as well as developing those close ties together. Staff Sergeant John Archiquette, Agadir, Morocco.


This is one way that I teach counting in a sequence to early childhood students. I use my fingers to teach them to count to ten, and I model counting first. We count one, two, three, four, five, six, seven, eight, nine, ten. I might do that a couple of times just so the children get used to counting. One, two, three, four, five, six, seven, eight, nine, ten. After we've practiced a few times as a whole group, I would then have the children turn to a partner and count the partner's fingers, and then fingers would be spread out and so that all the child had to do was point. So they would point one, two, three, four, five, six, seven, eight, nine, ten. Then I would ask them, boys and girls, how many fingers does your partner have?  All the fingers in the classroom would come up, and they would go through the sequence again, and I would say at the end, boys and girls, how many fingers do you have? And they would say ten. And we would come to the conclusion that everybody in the room had ten fingers. To finish up this whole group activity, we could sing a little song.  And this is one way that I would teach counting to my early childhood students.


This is unprecedented. I have more time than I expected. It's usually the other way around. Luckily, I have about 90 slides, so I think that I can fill it hopefully. My name is Ola Bini. I work for ThoughtWorks. I'm a consultant. I've actually spent the last six months in a legacy Java project, so it's really fantastic to be back in Adobe Crowd again. It's been a bit of hell. Anyway, so I've been involved in... Well, Java is not that bad always, but in this case it's been very bad. You probably know about JRuby at this point. That's kind of where I've done most of my open source work. I'm one of the core developers for JRuby, so I do a lot of Java, but I do Java so that you don't have to, basically. In the course of working on JRuby, I found stuff, and some of the stuff you probably have encountered and some of it you probably haven't. It's funny. Ruby is a big language. If you start looking at it, the only way Ruby could be bigger is if you had a static type system, because that tends to kind of inflate the size of the language. But Ruby is probably... Well, it's not as big as Perl, but it's big. So I wish to just look at some features that Ruby had that you might not know about, and I might want to talk a little bit about whether you should be using them or whether you should not be using them. Hopefully, there will be something new for everyone in here, but I can't guarantee that you haven't seen everything in here. So I'm going to be talking about regular expressions and strings a little bit. I'm going to be talking about Proxon blocks, expressions and operators, a little bit of collections, and a little bit of loading. So the biggest section here is regular expressions and strings, and obviously you have used these features of Ruby. How many people know that you can write comments inside of regular expressions? You do it like this. You use the regular comment operator, and everything inside of there will just be completely ignored. You can also use the X flag in a regular expression, and that means that all of the white space will be ignored. And comments in Ruby count as white space, so you can actually lay out your regular expression like this, and the comments will be also ignored. And if you actually want to match something inside of it, you can use slash s to match it, or you can use slash blank, and that will match it. The extended flag is quite nice to make it possible to lay out regular expressions in a way that makes them a little bit more readable. And you can use it if you don't want to do other ways of putting together regular expressions. Martin Fowler has advised that instead of putting together a regular expression like this in one big chunk, you should just dividing up in small, small pieces that you can name and then put together instead. In general cases, I actually like that better, but using the extended flag for white space formatting is a great aid for readability. A one-nine feature that I like a lot is this, where you can actually use name groups instead of referring to things using numbers. So here we give names, and then we match specific numbers. Notice that I'm also using the X flag to make the layout a little bit better. And then we can refer to it using the square bracket syntax. You can also refer to these name groups in the local context with local variables of the same names if you want to. So basically, you can use them in all the places where you can use group indices. You can use it in Oniguruma, if you had that in one night. And it always increases readability. In fact, I would really hope that using indices for regular expressions stopped being used at all. Another feature of springs that I don't see used a lot is this feature that allows you to use regular expression capture inside the square brackets. Where basically, you can just give a regular expression and ask for the match. And you can give it a regular expression that has a little bit more complicated. And it returns nil if it can't match. You can also match groups using this feature. So you can extract a specific group at the same time and you will just get nil if you don't do it. And most of the cases where people use the global variables, stuff like $1 and so on, can usually be replaced by this kind of feature in a much cleaner way. The only thing you can't do, as far as I know at least, you can't match more than one group and get that back. That's something that I've been missing in some cases where you want to match two different groups and want to get that back. In that case, you can instead use the match method on regular expressions instead. So this is a great date for readability of regular expressions. And most regular expression usages in open source code is something that can be replaced by this. So you can also use the symbols to extract the name groups in these cases. And yeah, it's actually a no-brainer to use it. Ruby has a lot of string support. We all know this version of strings. We know about this, no interpolation here. We probably know about the percent sign. But did you know that you can do this where the matching of parentheses actually work out? So this string is a valid string and will contain the two inner parentheses. This works for square brackets. It works for angle brackets. But you can also use basically any other null alpha character to delimit strings like this. You can also add a queue. Lowercase queue will be without interpolation, but it will still use the matching. So you can use the curly braces inside of it. If you use uppercase queue, you can do interpolation. If you use s in front of it, you can do symbols. And the same feature of matching up of angle brackets and square brackets and so on works fine here. So you can create a symbol that have a matching pair of angle brackets by just putting that inside of it. Same thing works for x for doing execution. The same thing works if you do w for word creation. You can actually create words that contain square brackets. For example, if you were to put square brackets around the word two, that would be part of the word that gets created. If you have uppercase w, you get interpolation. Regular expressions work roughly the same way. You have to use the R, but after that you can also use all the matching braces like this. For some instance, there is no way of doing a capital R. The lowercase r actually gives interpolation directly, but you can't. There is no symmetry in lowercase r and uppercase r. Basically, string can be delimited with double quotes, single quotes, and many versions with the parenthesis. Almost any non-alpha numeric can be used before and after, but the matching braces are treated specially. You can use several characters in between, so you can use lowercase q for non-interpolation, uppercase q for interpolation as the default. You can use s for creating symbols, w for area words, uppercase w for area words with interpolation, and x for another version of backtake. Present r and the same kind of delimiters as string can be used to allow regular expression creation. In most cases, I would recommend against using these. It's very, very seldom I've seen the need for them, and the fact that they're there at all in many of these cases, I had no idea about the simple creation, for example. But in some cases, they will make stuff more readable. So if you have a case like this, you can replace it with something like parenthesis, for example, or regular expression that matches lots of slashes. In almost all cases, in local source code, I've seen square brackets being used for that, so I've considered that the most idiomatic use. But in any case, it kind of depends on what the string contains, and using the regular string single and double quotes is almost always the best choice. Prox and blocks have also changed a lot in Ruby 1.9, and I'm going to talk a little bit about one change. But for that, at this point, almost everyone knows about the two-prox trick, so I'm not going to spend much time on it. Basically, it works by using the ampersand. The ampersand will make sure that whatever is on the right-hand side of it will call, Ruby interpreter will call two-prox on that thing if it's not already something that is a block. And that will out-occur something into a proc, if that's sent in, if you add that symbol. The same approach can be used with other Ruby objects. I've seen open source projects that create a small interpolation language, just in strings and turn them into procs, for example. What would a two-prox on a regular expression do? I have no idea. It's a good pattern in terms of making symbols and operations with symbols a little bit more readable. It removes lots of duplication in many of the common cases. However, there is a performance cost to doing it, so keep that in mind. Another trick that I like a lot is the overriding of the triple equals. Specifically, if you combine that with a proc. In this case, the case statement will call triple equals, and we have a method that generates procs on the fly, and proc has a triple equals that uses the double bang to call itself and then turn that into a Boolean result, and then evenly divisible with returns of proc on the fly. Case statements always call triple equals, so you can use that, and you can encode some pretty nice stuff and create some DSLs using this approach. Triple equals is already defined in many places, though, so it's a good thing to know about real expressions, ranges, classes, modules, strings, and symbols. In general, you hide a lot of cost when you do things like this, so it's something that you should do at the upper levels in domain-specific languages, but in general, the further down the stack you get, the more cost you will be encoding and hiding by doing it, but it's a good feature to know about, and the general triple equals trick is quite useful to know about. In many cases, Ruby hides a lot of operations like this that it does for you on the fly. For example, another thing that I'm not going to be talking about, but if you use binary operations, there is a coercion protocol that allows you to actually hook into how Ruby coerces one number into another type of number to make it match up for a binary operation, and you can hook into this if you want to. So Ruby has three ways of creating blocks. Well, actually, I should have included stabby lambda, but stabby lambda, if I remember correctly, does the same thing as the lambda keyword. Now, if you look at, this is Ruby 1.8, and what this one does is that lambda and proc lowercase both the return keyword will return from inside of the block. However, using proc.new will return from the full method, and that's what you can see down here. In Ruby 1.9, lowercase proc do the same thing as uppercase proc.new. Now, this behavior is something that is a little bit unintuitive in some cases. There is a very good reason for having it like this, though. Basically, in the implementations, blocks reified with proc lambda have a flag called lambda, which is whether they had this lambda feature, and the way they work is more like internal methods. What that means is that the return statement will return from the block itself instead of returning from the closing method. Now, when you use blocks, when you send in a block to the each method, for example, use return, return will return from the enclosing method, and that's almost always what you want. A lexical return is what that's called. That's almost always what you want when you actually use the block features, but when you say the way a block for later usage, in many cases, you might when I'm able to use it like it can return from itself instead. One specific case where this is really useful is if you use define method. When you do define method, you definitely want the return keyword to work like you would expect it to do. This is one of those features that is there. Most people don't really remember exactly the cases. I had to go back and run all the examples again to remember exactly what it actually does, but be mindful of the difference because there is a difference here. So one of my absolute favorite examples of a feature that I don't like in Ruby is something called a flip-flop operator. What the flip-flop operator does is that it basically keeps track of the state of itself. It roughly does the same thing as having a boolean flag inside of it saying whether it's turned on or not. So in this code example, we have an X statement here. The flip-flop operator here masquerades at the two dots that kind of look like a range operator. The way we can see that this is a flip-flop operator is because the end points are actually boolean expressions or semi-boolean expressions. Now what the flip-flop operator will do is that the first time it encounters this, it will evaluate the left point and it will return false for this expression until the first time this expression returns something that is truthy. And at that point, this whole expression will continue to return true and evaluate the second expression until this expression returns true and then it will turn off again. So it will basically turn on and off between two different states and it will evaluate either the left hand or the right hand expression depending on whether it's on state or off state. So in this case here, I'm parsing the input that looks like it could come from a C file and try to extract all the macros. Or all the if-defs, sorry. This feature is an interesting one. In fact, it turns out that it was broken in JVB for about two years. It was so broken that it threw a null pointer exception if you actually executed that expression and this was when JVB was starting to get C use. So as far as I can tell, no one was actually using it because it took so long time for us to actually figure out that it was broken. In general, this is an interesting feature for one-liners. It's one of those pearl heritage things that is really useful for short throw away scripts. You can do one-liners that are quite useful with it. But in general, I don't want to really see it in production code. This one is also funny. Let's see. This is a little bit tricky to explain what goes on. In terms of Ruby implementations, there are two different super implementations. There's one super call that is just the regular super call, but there's another super call that is called said super in the Ruby implementations. What we see here is said super. This is one of those few cases where it actually makes a difference whether you have parentheses or not. Said super is the super key with no arguments and no parentheses. Otherwise, it's a regular super keyword. This code has a super class called A. I meant to call foo. It takes three arguments and prints them. It then does a subclass of A, overrides foo, splats the arguments, sets the third element to a specific value, and then calls said super. Now, in the first case here, this will actually print one, two, 42. The second case will print one, nil, 42. And why it does this is because it seems like these splatted arguments here actually points to the same memory area that Ruby uses to send along the arguments to the super method. This looks like a bug. I was sure it was a bug because we found this example in JRuby once again by basically this was not working as the Ruby implementation did it. And we were sure this was a bug until we decided to not fix it and we ran some of the core libraries. And it turns out that there are core libraries that depend on this behavior. So that also means you can do things like this. If you add to the splatted orcs list an element and you call it correctly down here, one, two, three, this will actually raise an exception because it got too many arguments. This is one of those interesting features that if I ever see you use it, you are not on my team anymore. But it's used in the standard library so we had to implement it correctly. As far as I know, this is actually encoded in the Ruby specs. Please don't use it. If you ever want to see funny code or interesting code that uses clever Ruby tricks, I would say go look at the source code for camping. And in fact, you can look at both the expanded code and the small code. The small code uses some tricks that are very clever and very interesting, but the expanded code also do some really nice things. One of my favorite DSL things is this way of using a superclass or an expression in a superclass point. So you can actually generate new classes on the fly here if you feel like it. This just calls the method matcher. Matcher will generate the new class on the fly that matches the specific regular expression given and then inherit from that. Now, you've probably seen this behavior all the time because it's really idiomatic to use that when creating new structures. So you say inherit from struct.new. But you can actually put anything you feel like in that position. So you can generate a class on the fly. You can inherit it from it. And this struct idiom is probably the only place where I expect people to see it. But it's a nice way of creating good DSLs. So something uses it to on the fly create routes and inherit from them to tie them to actions. One of those things that I have a problem with in Ruby is that I actually sometimes kind of care if I'm giving an argument or not. So what's the difference? If I have a default argument like this, I can't see the difference between a nil that's given or a nil that's not given. It's not very common to care about this, but it could happen. There is actually a way of handling this case. And the solution kind of looks like this. What you do in the place where you define the... I think it dropped my... I don't think this was a very good idea. Let's see. Okay, I'm back. So basically, you put some code in the evaluation of the default case here. And that code will only be evaluated when the default case is taken. And since you can actually create a new variable here, you can say that flux default equals true is actually something that only is going to happen if the default case is taken. So if someone sends in a nil, that will not be taken. So there is no real way of distinguishing between these cases, but you can do things when you evaluate arguments. In fact, you can put any code you want into that position. You can define new methods. I've seen that done. You can define new classes. You can replace the whole currently running program. I don't know if that's useful, but you can send all the missiles and... Yeah. As far as I know, there is only one language that has a feature built in, and that's common lisp with C loss. We keep coming back to lisp. You should really not use this feature, except if you really want to and need to. But it's... Yeah. It can be useful occasionally. I guess this talk is not really about useful stuff. It's more about fun stuff. But now the collection stuff... I don't know.  However, in open source code and in production code, people don't know the innumerable APIs well enough. And I guess my message here is just use the innumerable APIs because they are really quite useful. And everything you might want to do is there. Sipping is really quite useful. All, any, none, one. Each cons, really, really useful. Each slice. Or max, pi. There are lots and lots of useful innumerable methods. And in many cases, people just sit down and write out stuff, and it's so easy to write these things in Ruby, so people have a tendency to just rewrite them over and over again. So if you don't know them all by heart, you will duplicate the logic, probably badly. Most of them take a block. Actually, most of them are even better at taking a block in 1.9 than they were before. You should use them all the time. It's funny, though. There is one method that's missing in innumerable, and I haven't gone around to submit a patch to it, and that's Flatmap. I don't know why no one else has a use for it, but it's very, very useful. That brings me to one case, which I don't have covered, actually. How many people have tried to include a module into innumerable and been surprised when that doesn't work? I get surprised every time because I try to add features to innumerable using another module because that's the way you should be adding stuff to other things, and it never works, and I keep coming back to it. You can't add a module to another module and expect all the including classes to have access to that behavior. It's very surprising behavior to me, and I keep forgetting about it. Anyway, lazy innumerables. We have this all over the place in Ruby 1.9, and it's also one of those things that is just very, very convenient to have. Basically, all innumerable methods, almost all, that take a block will return an innumerator if not given a block. An innumerator is innumerable, so you can do it recursively. You can combine them and you can chain them. Yeah, no real question about it. There are some old-school Ruby tricks that people don't really know about. This one, for example, is very common in the standard library, and the basic idea is that you can put stuff, anything, in a Ruby file, after the double underscore end bar. It's called a data segment, and you can automatically get access to it using the global constant data. You can read from it because it's an IO-like object. Many old libraries use this way to put their own test cases inside of the file itself. They put test cases as a separate Ruby file inside of the same file, and then if you run that file as the main program, it will execute the test cases as the main program. So you can end a Ruby file with this symbol, and everything after it will not be evaluated, so you can store anything there. You can put pictures there if you want to. And there's an IO object available. So this pattern is what you might see if you look in the standard library, where you evaluate data if the currently running file is the program. Oh, it can be useful in some cases. If you have large amounts of data, that is really, really part of the file itself. Sorry. Dollar, double quote. Loaded features allow you to see what's been loaded in the system. So you can ask, okay, which features have been loaded, but you can also do something really quite interesting. You can actually add strings to it, and if you do a require on that string afterwards, it will look to the Ruby system as if you've already added or required that file. So say, for example, you don't want to install a dependency. Say, for example, that you're trying to run without Ruby gems. You can actually add Ruby gems to a list of loaded features, and Ruby will think that it's already loaded Ruby gems. Now, this can cause all kinds of havoc, but it's also been occasionally useful if you want to fake out loading dependencies and so on. So this is a way of hooking into the basic part of the require framework of Ruby. And for God's sake, please don't use the short form. Use the long form. And that goes for all of these things. Use the English names, please. A useful tool for debugging. It's probably not something for your production code. So there are many things that I haven't talked about. I haven't talked about all the globals, for example. There are many of those. I haven't talked about taint and save levels. I haven't talked about all the hook methods, the meta-programming stuff. There are many regular expression flags.  Exactly. Compile ones. But there are a few other ones that are quite useful. Here knows have much more features than I thought when I started looking at them. You can use Emacs style literals for characters in Ruby. All Emacs people. That's like three or four people, but... It is really two languages. It's Ruby, and it's the language that you can use inside of the defined keyword. I haven't really talked about that either. I did talk quickly about the bang-bang operator, which is not really an operator. Ruby has a lot of really interesting features. I don't know. I hope that you now know a few more of those. We have about ten minutes until we're supposed to go on break. So if you have any questions? Yes. Yes, I am going to make the slides available online. Any more questions? Yes. How easy is that to pick two words? As far as I know, it's not documented anywhere, so I recommend you go and read the source code for those pieces in either CRuby or JRuby. I know where they are in JRuby. I don't know where they are in CRuby. I honestly don't remember the protocols right now. It's a little bit tricky because the whole idea is that you have to look into the switching. So Ruby tries to switch the order of the arguments when it tries to do a binary operation. Yeah, exactly. Thank you very much.


Apple has stood with its users in the FBI case and we're happy to stand with any tech company that's gonna stand up for your rights. We would like them to encrypt their cloud backups. Yes, we would like them to encrypt their cloud backups. And have stronger protections for the differential privacy. Yep. But these are relatively small deltas compared to some other things. But honestly, you know, if they want the list, we'll provide it. Eric, I mean, Andrew, did you have something? I was gonna mention that on the COVID API in particular, which I'm not sure if that was the focus of the question, one of the things that we've called for, for any contact tracing app is auditability and open sourcing of the protocol or the app. So we don't have to trust that Apple is living up to its privacy commitments so that, you know, this interested outsiders can get it and make sure that they truly are.


Welcome, everyone. Today, I'll be talking about how to keep calm and contain a deion. My name is Anusha Raghunathan, and I'm a principal software engineer at Intuit. Intuit is a fintech company that makes software around tax preparation, accounting, consumer credit reports, and stuff. So if you have ever used TurboTax, Mint, Credit Karma, or QuickBooks, then that's us. The agenda for today is basically starting off with, why are we even doing this talk? What is the background? What are CRIs? Then we'll do a section on how we went ahead planning the migration to this new CRI. What happened during our great migration? And some performance analysis that we did with the new CRI. And finally, finish it off with takeaways.  We run about 220 plus clusters. And they average about 16,000 nodes. And this number of nodes actually goes up pretty high during our tax peak seasons. And a number of Kubernetes namespaces, roughly, about 15,000 and odd. We run about 2,000 production services on this Kubernetes-based infrastructure, serving about 5,000 developers. And we have about 17,000 assets that we manage with this. And each Kubernetes cluster runs about 25 add-ons on top of the vanilla Kubernetes cluster we get. These are primarily around security and compliance, cluster lifecycle management. I want to call out our KCoProj, which is an Intuit-started open-source project that manages our cluster add-ons, instance management, upgrade management, and stuff. Then we have add-ons around observability, metrics, tracing, and logging, networking, CNI and service mesh, storage, reliability testing around chaos experiments, and finally, container-native workflow engines, specifically Argo workflows. Now, what's a CRI? A CRI is a container runtime interface. And Kubernetes has interfaces for running your storage and running your network, container networking, using CNI and CSI. Similar to that, for running a container and doing some image management, there is a CRI interface that the Kublet calls out to. And a high-level container runtime, like DockerShimp or ContainerD, manages containers and images, lifecycle of them. And in turn, calls out to a low-level container runtime, such as RunC. And a CRI is a well-established interface that the Kublet calls over. And it's GRPC-based. And examples of container runtimes, like I mentioned, DockerShimp, CRIO, and ContainerD. Now, why is it that we're talking about ContainerD and CRI and stuff at this point in time? Typically, your average Kubernetes operator doesn't have to worry about these things. However, now we have to worry about it because of something that happened in Kubernetes 120, which is the primary container runtime that was used in Kubernetes, which was DockerShimp, got deprecated. And Docker, just a little bit of history, DockerDemon was the primary runtime for Kubernetes, but it was not CRI-compliant, mainly because DockerDemon was written way before Kubernetes originated. So a thin shim layer was written on top of DockerDemon to make it CRI-compliant. The problem was the shim struggled to find maintainership. And also, there were rising container runtimes that were CRI-compliant. So in Kubernetes 120, DockerShimp was deprecated as the default CRI. And in Kubernetes Upstream 124, it's going to be removed. That's why we all have to worry about the CRI runtimes now. So we decided to pick ContainerD as our CRI runtime. Why? Because DockerDemon eventually calls ContainerD in any way today, even when it's not the CRI. And it's been battle-tested really well. And it offers better performance in terms of CPU memory consumption as well as port startup times. And it's supported by a cloud provider, so we went with it. It was an easy choice. This is a quick comparison about the container runtime invocation between DockerShimp and ContainerD. You will notice that in DockerShimp, we have the extra hops between Kublet and DockerShimp, and eventually reading up to ContainerD. On the right side, you will notice that the Kublet directly calls ContainerD, and the extra hops are eliminated. So how did we go about planning our migration? First, you need to understand the CRI wiring in your cluster.  In our case, the blue Docker veil in the middle is actually the heart of a lot of things. And it was exposing DockerShimp and DockerShimp socket as well as DockerDemon socket. And if you look at the bottom of this diagram, there is a box with all our add-ons that we're actually relying on the CRI socket. Namely, the CNI, Chaos Engineering Toolkits, FALCO add-on, which we use for security scanning for our container runtime images, as well as Argo Workflow Controller. The other obvious clients of DockerDemon were the Kublet making the client connection through DRPC, as well as DockerCLI and API. The settings on the left side were mainly around DockerDemon configuration. And as you might see, there is a Selenux policies that we were writing based on DockerDemon GPU configurations for our ML workloads, as well as container log management. And another indirect dependency that we had was that we were expecting the container logs to be in JSON format, which was offered by DockerDemon. And we were using FluentD to ship them out. So we had to rewire our worker nodes to use containerD or other mechanisms when we had to migrate. Here is how we rewired containerD. So we mainly baked the containerD client, which was the crycuddle client, which worked out well for us. And the crycuddle client would talk to the containerD socket. And the containerD socket was also used to communicate with our add-ons in the bottom. So the CNI, Chaos, Falco, Plugins all ended up working really well with our new containerD situation. And notice that the containerD config file now actually still continues to take GPU config and AC Linux. But the container log management has now moved to the Kublet. So it's no longer maintained in containerD. You just have to configure your Kublet accordingly. Also notice that our Argo workflow controller is not dependent on containerD socket anymore. Argo workflow controller had a dependency on Docker, mainly because it needed a primitive to share the container namespaces. Two containers needed to have the same process namespace. And we were now able to use the Kublet because Kublet provides process namespace sharing. So our dependency on the container runtime was removed, and now we had a dependency on Kublet. And finally, the direct dependency I was talking about as far as the JSON log format was that containerD doesn't have a concept of logging plugins. And it was only logging container logs in text format. And we'll see what happens because of that in a bit. Word about container declient crycuddle, we baked this client basically into all of our worker nodes. And for the most part, we were able to actually find parity with the Docker API CLI, main handy commands that we would use for crycuddle PS, crycuddle images. Instead of Docker inspect, if you were used to using Docker inspect, you could do the same thing with crycuddle get info, which was used in our use case primarily to work around SE Linux policies. So you can actually explore more on crycuddle as your CRI containerD client. We couldn't find exact parity for some of the use cases. One thing I would like to call out is the Docker system prune command that we were used to for actually cleaning up leaky containers. Again, since Docker was more than just a CRI, it did a lot more than just container and image management. So system prune, we had to find some hacky batch scripting and cron jobs on top of crycuddle, and we were able to get it done. So the big takeaway is get familiar with some containerD client so that it's helpful during your migration. Another containerD client, the obvious one, is Kublet. And the one thing that was handy, again, for us during our migration is that Kublet actually can be configured to have a different CRI. In this case, the options are containerRuntime and containerRuntimeSocket, where you could actually spin up a test cluster today by setting these options and you will get a containerD cluster. So it's easy to just basically jump start on it and see which part of your bootstrap code you need to be changing in order to actually perform your migration. And like I mentioned earlier, now log management has moved from the CRI to Kublet. So you can get familiar with the log rotation options for max size as well as max files. All right. So we planned our migration. We made all the code changes that were required in our cluster bootstrapper. We had reconfigured things to use the containerD configuration rather than Docker. And all our add-ons, that code was also changed to accommodate for containerD. A lot of our end user teams and our platform teams had also migrated to their code path. So one thing I would like to mention here is that at Intuit, we go through monthly cluster upgrade cycles, mainly for security and compliance reasons, as well as a time to actually introduce new features to our Kubernetes platform. And this is the time when we actually migrated from DockerD to containerD. And one thing to note that is that we performed rolling upgrades of our clusters, which means that you started out with Docker as your CRI for your cluster, and then you ended up with containerD as CRI. But then there is a period of time during the cluster upgrade where you have a mix of both kinds of nodes in your cluster. And we guarantee to our end user developers that there will be zero downtime during the upgrade. So we planned and planned and we did the right things. Any guesses on whether it went smooth or did we have any gotchas? Well, of course, we had gotchas. And I'm going to be talking about two of them today. First was about the logging pipeline. Now before we get into the details of the problem and how we solved for it, a quick reflection on our logging pipeline. We used Fluendee as our node driver for logging. And Fluendee is responsible for log collection, log parsing if it's needed, as well as shipping it to our log aggregator, which is Splunk. And Fluendee takes care of shipping pretty much all the logs in our nodes. But the critical ones are container logs. And we cannot afford to miss even a small gap of logs. So log loss is a big no-no in our infrastructure. And Fluendee runs as a daemon set and it's a cluster add-on. So what is the first problem? Well, our entire logging pipeline had the assumption of JSON-formatted container logs. And containerD basically broke that assumption. Right from container logs to Fluendee to how it reaches our Splunk servers, everything was expected to be in JSON format. And this was because JSON offered better performance as opposed to other formats that we had considered before. And what happened was because of this change in this log format, there was log loss because there were portions of our pipeline that did not recognize formats. And we ended up with log losses. And like I said, this was a big no-no. And how did we solve it? Well, luckily, even though container logs were in text format, there is a predefined specification for the format, which is a timestamp, the stream, tag, and the actual log message. And they were all space delimited. We could pretty much use Fluendee configuration to actually parse it out using a regex. So that's precisely what we did. What we did was we changed our bootstrap code to make sure that each node came up with the CRI runtime that was running that node. And our Fluendee bootstrap container would read that file and load up the right Fluendee config map. For Docker, it remained the same JSON-based configurations. But for container D, it was a regex parser that would extract out the log message and eventually send it out to Splunk. The one thing to note that is with this approach, we did observe a 17% dip in performance of log throughput that was sent out. And this was because of the additional regex overhead that we were seeing with Fluendee. What was the second problem? Well, the way our cluster upgrades work is that the nodes are rotated out first, and then the add-ons are upgraded. And what was happening was there was a period of time when the nodes were rotated out and the new CRI was coming in place. But Fluendee still did not recognize it needed to do the bootstrapping changes we had made. As a result, there was, again, log loss during that period of time when the clusters were getting upgraded. So how did we solve it? It was pretty simple. We just got our code for the platform, the release before the actual migration to container D. So that was one big takeaway for us is you have to actually not just make all the wiring changes, you have to actually get it in a release, one release, at least, n minus one release before your actual CRI migration. The second gotcha I'm going to talk about today is regarding CNI. Again, a quick refresher. The CNI that we were using along with POD and host networking stack wiring for container networking also took care of IPAM daemon. So basically, IPAM daemon was like this local host daemon that was responsible for two things. One, maintaining a warm pool of IP addresses to hand out to pods and also taking care of allocating and deallocating IP addresses for the pods. And for IP allocation and deallocation, it would query the CRI socket to get a list of running pods. And CNI was running as a daemon set in all our cluster nodes. So what was the problem? Well, to prepare our CNI for our container de-migration, we had actually mounted container de-socket in the CNI POD spec as expected from our CNI vendor. And CNI is actually a bootstrap add-on for us. So in this case, the bootstrap add-ons get like upgraded before the nodes get rotated out. So you can see the problem, right? This meant that a node, a Docker node, would still be running. But the CNI would think that this was container de-node. And it would query the container de-socket, get an empty list of pods, and voila, it'd be like, OK, this node doesn't need any more IP. So let me start deallocating from the Docker pods, which were actually live and running. So this was, again, a big no-no for us. So how did we solve it? Well, we created a generic sim link for whether it's a container de-socket or a Docker socket in our bootstrap code. So if a node came up with Docker de-man, then this generic cri.sock would actually point to that. If it came up with container de, then it would point to container de.sock. And the cri.sock was actually mounted into our CNI pods spec. And we made sure, again, that these changes got into a release prior to the actual migration, because you had to prepare your CNI code to handle this before the actual migration. Let's talk about performance. We had already set expectations that pod startup times and CPU memory consumption for pods would be lesser in container de. But we wanted to actually verify that and see how much of a performance gain we get. So our setup was running Docker 19.3 and container de 146 on Kubernetes 121. And the test service is a Java Spring Boot application that very closely mimics our developer environments. And our test line generates about 6,000 transactions per second. And these transactions are mostly a combination of reads and writes into a memory heavy load, a GraphQL in-memory database calls. And the test was set up to actually ramp up for the first 60 minutes and then have a steady load of about 6,000 transactions per second for two hours. And we started with an HPA replica of Com3. How did we do in this? Well, container de definitely fared well. Especially in the startup times, we noticed that container de startup time maximum latency was only about 120 seconds in our synthetic workload, as opposed to Docker, which took about 200 seconds. And we're pretty excited about this performance gain because it will come in handy during our tax peak seasons when there is very high HPA kicks in. And we have a lot of replicas running at the same time. And startup times really matter. And during the steady state of about 120 minutes, we noticed that because of a slightly lower CPU consumption, there was lesser number of pod and node usage because it was just slightly more efficient. And HPA doesn't kick in for slightly longer than when compared to Docker. So I'm going to wrap it up with some takeaways. Understand your cluster CRI wiring. This was our use case where we thought we could just start off with a simple migration from Docker to container de. It turned out to be a several month project for us. So understand your CRI wiring. And plan to test and verify ahead of time because Kubernetes 124 is coming up and there will not be a Docker shim anymore. And the third big takeaway for us is you have to account for live cluster migration if you have a big platform like us. For us with the 220 plus clusters, we had, and with zero downtime, we had to make sure that all the live migration use cases were handled. Thank you very much. And we are hiring at IntroWidth. So if you're interested, please come and talk to me and I can take some questions now. Hello. You mentioned that your CNI needs access to the Docker socket, right? Yes. And do you know if the Docker socket, if the container of this socket is compatible, like fully compatible, or you needed to change your CNI codes to read it in a different format? So the CNI basically queries the CNI socket mainly to get a list of containers and parts so that it can actually do IP allocation. So as far as compatibility goes, the interface is pretty well established and to what it is expected. So we didn't see any compatibility issues there. It was more around the live migration where our CNI did not account for both set of CRIs to be available at a particular point in cluster upgrade situation. Just a question about the GPU.  Can you say more about that, please? So the GPU issue was about, so it's more about a vendor issue, more than a container issue. So we get our GPU support from NVIDIA and our cloud provider is AWS. And the issue there was the NVIDIA GPU operator out there for container D doesn't work out of the box for AWS. It's mainly around OS support. So we had to work closely with AWS to actually get a separate recipe and bake it into our AMIs. And the other sort of glitch in there was the end user license agreement between NVIDIA and AWS had to be sorted out. So so far we've done some preliminary testing with GPU. There have been no issues with container D, although we haven't gone fully production with it. But I think if you have NVIDIA GPU operator running on CentOS and or Ubuntu, then you have out of the box support. All right, thank you, everyone.


Would you like to support Nintendo Prime, but you don't have any money maybe you don't have an ability to pay for anything online That's where gawkbox enters into the equation down in the description below You'll see a link to gawkbox.com slash Nintendo Prime where all you need is a smart device of some type You go to it you sign up for an absolutely free account and you play some games You download some apps and you will get a sponsored tip That so helps support our channel and all I could say is if you do this, I greatly appreciate it So this topic was brought up by IGN so I'm gonna give full credit to IGN For this topic they put out a video a few days back about how the Nintendo switch They boldly say that third parties are out of excuses And I wanted to expand on this because they did a little short conversation with a bunch of cutaways clearly cutting out a lot of in-between chatter and I just want to focus squarely The third-party problem that Nintendo has had over the years So Nintendo's been driving third parties away for a long time This dates all the way back to the N64 days if we're being completely honest with ourselves After the whole fallout with PlayStation and the fail partnership with Philips Nintendo started losing their third-party support to platforms that were more Available let's say to third parties easier to develop for less restrictions and Nintendo really stuck to this old policy of theirs from back in the NES days Which when the NES came out that policy that Nintendo seal of quality policy was Important to reviving the industry because part of the reason the industry crashed is there was so much shovelware coming out That people had a hard time finding the good games and because a lot of people's experiences with the new Atari's and such were terrible experiences people just stopped buying them and It's kind of a problem that steam is running into something like 5,000 games or something being published on steam this year Well, and a lot of them are not very good And when you have a lot of not very good games it could lead to oversaturation of bad titles Which makes it harder to find good titles which can lead to a platform ultimately to crash You know is steam going to crash anytime soon I don't know steam does a pretty good job of promoting the good games and getting them in front of people I mean think of how quickly, you know player underground's but battle or Think about how quickly pug G is just blown up So obviously a steam still has a way of getting the really good games in front of consumers and until that stops And until it just starts being everything a load of steam you're just seeing a pile of crap Throwing at you right away. I don't think steam is going to be greatly affected but back in the day this was a huge deal in the video game industry and Nintendo had these policies in place that helped turn things around and they maintain those policies with the Super Nintendo Which at the time made some sense Plus their only serious competition was the Sega and Sega Genesis which did well for itself But Nintendo was clearly the market leader still well PlayStation came out and kind of took away the market leader from Nintendo and Nintendo can saw a pretty big drop-off from the Super Nintendo to the Nintendo 64 Now there was a drop-off from the NES to the Super Nintendo as well Although that drop-off wasn't quite as big it might have just been because of the introduction of the Sega Genesis But the PlayStation really ate into the Nintendo's market share and third parties really started happen ship on the Nintendo 64 Now obviously there were still third party games on the Nintendo 64, but there was less of them Final fantasy, you know It was an example is a huge game on Nintendo systems through the Super Nintendo and it completely hopped ship over to PlayStation and This continued for many years and it just got worse as the generations went on Nintendo kind of maintained their Nintendo seal of quality type restrictions. I'm not going through all of them there's so many of them really into the Wii era and And really towards the end of the Wii era they started Relaxing on that policy and realizing we really don't need to be so restrictive Obviously at this point Nintendo's other issue with third parties once you got to the end of the Wii era is that Nintendo's hardware was So different from what the other competitors were doing that Third parties just really didn't feel like supporting it and now we're getting to a decade plus where third parties have been leaving Nintendo and now they weren't really being incentivized to come back It was still harder to develop for you still had to customize things for a completely different hardware set And things really got Really bad in the current generation when we you Xbox one and PlayStation 4 were going toe-to-toe into each other PlayStation 4 and Xbox one were built on the x86 architecture, whereas Wii U Was still built on the old Wii architecture Just you know newer versions and more ram thrown at it and more this thrown at it and while it was an HD console with the capabilities You know ahead of an Xbox 360 and PlayStation 3 the differences in raw You know performance between an Xbox 360 and PlayStation 3 were not very good it was only slightly better than that and Here I am talking about the Xbox 360 PlayStation 3 in an era of the Xbox one of PlayStation 4 Can you see the problem with that and this is in addition to the copious amount of other issues that the Wii U had So Nintendo really had this third-party problem while they have the control scheme back They did not have the power again. They don't have the install base They did not have the clout they once did to kind of push third parties around and have them release their games Anyways, so Nintendo almost got humbled right the Wii was so successful for you know a very different reason It was lightning in the bottle the types of games that sold best on the system We're not the types of games at most third parties made and it was just Lightning in a bottle effect that gave Nintendo a false sense of security and they kind of came back down to earth crashing really hard with Wii U and switch is now here and Nintendo switch has reminded people of a number of things. It is still behind on power It's not as powerful as an Xbox one or a PlayStation 4 but see the form factor it gives you the sacrifices to do what it does are Different in the marketplace than a console like Wii U when you're putting a box underneath your TV You expect it to be pretty close to on par with other boxes that are put under your TV Hence if Nintendo released a traditional home console in 2017 it would be expected to be pretty on par with a PlayStation 4 Pro and an Xbox one X I mean there's really no reason for it not to be those would be the latest boxes coming out underneath TVs and if Nintendo's gonna charge $300 to $400 for their own box. It really needs to be something that is impressively on par but That's not what happened Nintendo went a hybrid route with switch a system that you could play under TV but also take with you on the go seamlessly without really much effort at all and Because of that not being on par with even the base PlayStation 4 and the base Xbox one is deemed Acceptable because we're not talking about a platform. That's directly comparable. Yes It is a system you can put under your TV But really it's a system you're probably gonna sit next to your TV because you could just Undock it and take it with you and that take it with you factor that playing games on the go factor means that the Expectations for performance are going to come down And so people are willing to accept the switch as an underpowered console gaming platform because it is portable. It's a sacrifice that consumers Understand on the surface people don't expect things that you have in your pocket or things that you play Holding in your hands to be as powerful as something that sits underneath your TV So with that in mind Nintendo also did some smart thinking with the switch They teamed up with NVIDIA and NVIDIA has been huge in the console gaming space for a long time To give you an example in my PC gaming rig, which also obviously doubles as my editing rig I have a GTX 1070 that is it, you know a Close to top of the line. It's not a 1080 1080 ti or 1080 XP But it is among their top cards in their current GPU stack for gaming And that's a really really expensive card So teaming up with a company like NVIDIA who's got all this long history with PC gaming is Important and it was important for the switch in terms of attracting third parties back now Their Tegra technology is mobile technology. Nick Mo mistake about it Is a gaming specific mobile technology at least the x1 version is but it is still mobile technology Which means it's not going to be as capable as say their typical Maxwell graphics cards, however It is extremely capable and because it's made by NVIDIA. It's also extremely compatible with PC hardware This is important because it means porting games off of PC To a Tegra APU is actually a lot easier than people realize In fact getting unreal engine for support on switch was fairly simple epic pulled it off Really easily because of the way the x1 is comparable to a PC and how it handles things So all of that being taken into consideration The switch is actually the perfect platform for portable third-party console games And this is where we run into third parties running out of excuses because Well, it's neat in theory for the switch to be the perfect platform for portable home console gaming It's also one of those things that someone has to do it first and now people have we're not just talking about 2k Who's NBA 2k 18 game is a pretty on par comparison to other versions of the game Although the game itself is a little disappointing We're not just talking about FIFA 18 who's using an older engine So it's kind of like oh, well, there's FIFA 18, but it's not the true FIFA 18. No, we're talking about games like doom We're talking about Wolfenstein The new Colossus we're talking about Skyrim. We're talking about LA Noir Which is being remastered for current gen consoles and we you know, we I'm sorry And switch is one of those current generation consoles. It's being released on day and date. So We're getting to this point now where third parties are already proving it There are third-party companies including ones that traditionally do not support Nintendo systems like Bethesda Going out of their way and supporting the switch full stock given it all it all the games that it possibly can right now and It's leading to the realization for me and I think for many gamers out there that there is no more excuse in 2018 I will still give certain third-party developers an excuse for 2017 You had to play wait and see with Nintendo. They just came off their worst generation of gaming ever in terms of sales They just came off, you know a decade plus worth of driving third-party companies away In a decade plus of you know No one else really being super successful on Nintendo's platforms outside of you know companies that Made Nintendo like games as an example. There's a story I thought about reporting on today, but I kind of backed off it because I feel like it's obvious Mario plus Rabbids Kingdom metal is now the most successful on third-party game on switch But again, it's a very Nintendo like game. It literally has Mario in the title It's literally a crossover game. So while it is a third-party game fully and wholly developed by Ubisoft I don't I don't think that's a very good barometer because it's still Very much a Nintendo game and Nintendo's copyright is still very much on it. So Yeah, it's I don't think that's a the headline. I'm seeing out there. I don't think that's fair I think it's cool to talk about the sales of the platform Obviously that means it's probably so close to a million units on the MPD report, but it's still not something that I think is I think it's being misrepresented a little bit in reports even if the report is technically true I don't think it's an impressive remark to talk about now. You talk about NBA 2k 18 You know selling, you know a million plus units now We got something to talk about with third-party success on switch, but yeah, third parties are really running out of excuses and I'll give them a pass this year because we didn't know what the switch was going to be We didn't know how successful it was going to be But now that we have third parties putting effort into it if these games sell That's the only caveat the only excuse left is that third-party games? Do not sell on switch and if doom fails to sell if Skyrim fails to sell L.A. Noir's fails to sell if Wolfenstein 2 early next year fails to sell Alright, you still have one excuse and it's a pretty important excuse You know it the game third party games don't sell is a pretty damn big excuse but if these games do sell and they sell over a million units each or more especially this early in The switch is lifecycle. We got to be talking about how there is literally no excuse anymore in 2018 the new Assassin's Creed the new Call of Duty the new X the new Y the new whatever Third-party game is being made switch should come into consideration on day one of development So yeah, it's it's gotten to that point now with these major third-party companies showing their big open-world Gory shooting all these games can run on switch the walls have been torn down Nintendo somehow Kept up with having a less powerful system, but still bringing back third parties It's crazy But Nintendo found the one way to do it and I applaud them for it and third-party companies You better be paying attention because if these games start to sell and you continue to ignore the platform You are gonna be missing out on a potential money train over the next few years because it's very apparent that people want console gaming on the go and Nintendo's giving it to him in spades and now we have other companies like Bethesda and Rockstar jumping on board It's time if the time is now if your game is not coming to switch in 2018 The only excuse I want to hear out of your mouth is that doom and Skyrim and all these other third-party games It did it first just did not sell that's the only acceptable excuse in 2018 and I here's the thing I don't think that's gonna be an excuse. I think the games are going to sell So I think pleasantly so for many companies, but yeah, that's all I have to say a third party's Better get on board man.  I normally don't care if your game sell well But I am a Nintendo switch owner and I would love to have a day where I don't need to own another home console I could just own my gaming PC and get all the games I want between my PC and switch But right now there are still some console exclusive Multi-platform games that I need other systems for Madden is one of them. Please 2018 make it a reality. Everything comes to switch. No down ported messes in terms of using different different Engines and dropping down Features and stripping things away like EA has done. It's time full console ports. Let's do it 2018 I am the thinner over just from the center prime if you like this video, you know what to do If you dislike the video, that's all right Hit that dislike button subscribe for more and I will catch you guys in the next one


Your Coca-Cola bottler presents Claudia based on the famous play and novels by Rose Franken Brought to you transcribed Monday through Friday by your friendly neighbor who bottles Coca-Cola Relax and while you're listening refresh yourself.  Where's Claudia upstairs feeding the baby What on earth we whispering for I don't want her to hear us talk Not on Claudia's birthday. What's going on? I told you it's her birthday here's some boxes and things I'll put them behind the sofa pillows Say tell me mother has she been wondering about what I was going to give her today if she has she hasn't admitted it Strange Claudia is usually so curious about presents. I'm so anxious. Maybe she's growing up She's has grown up now as as I want her to be and you're as Ungrown up as I want my son-in-law to be too calling Claudia from New York six times today Just because for her birthday her birthday they had nothing to do with it. I just happened to like talking to my wife Any objections to that? What do you think David? What do you think about none of your business hello darling the baby eat his dinner down to the last drool You know he's getting so he doesn't mind vegetables even and he can't be much of a man Happy birthday, Mrs. Knott. Thank you, Mr. Knott for the umpty ump time today. Oh David It was such a long day for no reason. I missed you more today than usual That's what you get for calling her six times funny But when I hang up the receiver I'm more lonesome than before I pick it up I guess that's when I remember what I'm missing. You really make a man feel as if it's worth coming home We do our best happy birthday. Mrs. Norton is happy. Mr. Norton. Oh The baby winked at me today. That's a nice present. It's all the present.  What's too bad David? Tell me what's too bad? Oh, I brought you home a present But if you have too many already, why did you go and do that spending money? Silly it is that we haven't got that kind of money throw around giving each other presents We haven't no we haven't no you don't have to give me presents Just because it happens to be my birthday to prove to me you love me I don't it is just a silly hand-me-down tradition. It is a silly business of giving presents on a birthday Mm-hmm after all it's no fault of mine. I'm having a birthday.  That's what I'm for So you you don't want my present I think it's darling of you David to go to all the trouble of buying something, but I just want you to know that Well, I don't What is it? Just a little something I picked up nothing expensive. I hope I stop worrying Here you are a Little box.  It really is little too. Well oak freeze from little acorns, bro This is not a little acorn.  All right. Oh was it? Mama, can you guess what's in the bottom? I would rather wait and see mama has some self-control mama sounds very dull Look, it's beautiful. What is it? What is it? Well, can't you see what it is? It's a it's a It's a pin David. It's lovely. Oh, it's not much not much Well, it's a pin and it's a it's a lovely pin. It's um Peacock that's what it is. It's a peacock. It's to go on a pocket book Pocket book. Mm-hmm. Why can't I just wear it in a dress or a hat? Because you don't wear hats. Oh Well, I wear dresses it doesn't belong on a dress who says the man's the store where I bought This peacock belongs on a pocket book. I never heard of such nonsense. Whoever saw peacocks on a pocket book I don't care about peacocks on a pocket book. I care about him now This peacock belongs on a black suede pocket book. He would look stunning. I shall wear him where I shall wear I mean it will not be on a black suede pocket book David, I love him. I'm devoted to him.  Because I don't wanna. Because I don't wanna.  Because you don't own a black suede pocket book And because I don't own one either. I don't want a black suede pocket book. I never did. I never will a rub all Mm-hmm. She's sweet, isn't she? What she doesn't have she doesn't want. My daughter has a beautiful speed.  Who me? Well, you're not so bad, but I speaking of the bird you just gave I think I'll wear him in the middle. In the middle of this black suede pocket book. I told you darling. I haven't got David what's in this box? Look and see.  You haven't got to bought me a black suede pocket book have you? Well, I bought you the pen so I thought I ought to buy you the black suede pocket book to match. It's so extravagant darling. If you keep on being so extravagant David, I won't have anything to put in the pocket book I'll give you a penny for luck.   Yes divine Such a divine word. I Always wanted to use it, but I never had the opportunity to it's funny I didn't think of presents all day long. You didn't not once it's this morning when David didn't give me one before leaving Will you look at this bag isn't it beautiful put the pin on it now go away mama leave me alone. These are my presents David you have the most exquisite taste You really like it So chic well, it doesn't look very good with those brown calf shoes Because I have a beautiful new bag doesn't mean you have to criticize my favorite shoes The fact is that they don't go very well together. All right. All right.  No darling not Just because you brought me a little present because I know what it meant for you to buy it for me Well, I must say that I can't stand the sight of that bag with those shoes you're wearing Can't you think that anything to admire instead? It just seems to me that you have a black suede bag. You have to have shoes to match Who do you think you are a millionaire? I don't have to be a millionaire so my wife can wear a suede shoes Awful to be married to a man who's a perfectionist is so expensive here Try these on see if they fit From the store where do you think I made them you bought me shoes. Yes, I bought you shoes You don't have to tell me I bought you shoes. I know I bought you shoes. They're black swan David I love them.  That's the thanks I get It's all the thanks you deserve spending your hard earned money like like water Oh, look at these stunning shoes I'm not too small. They make your foot look small. Why do people always object to another person's foot looking small? I can wiggle my toes and see I don't see they do look small stop fussing I told the man your size and he said they'd fit but they do look Okay, but a good shoe is supposed to make a person's foot look small. That's why they're so David these shoes must have cost a fortune. There's such beautiful Money money money money money is that all you can think of? It's a good thing one of us thinks of it Listen, how do you think I look walking in my new shoes? Not bad from the ankle stop I always did say you had a pretty nifty ankle. Oh, is that what you always did say? Oh, I feel absolutely wonderful Or if you can get those shoes to come back over here. There's something else that goes with David you've gone out of your mind completely berserk No, the man is berserk because he buys his wife a few things. He's been needing desperate It was a nice sound as if I were going around for a bear You wouldn't buy yourself anything if you were going around threat bear here Blacksway blood. Oh Mama, I've never go to where cottoner will again. Never your size. Try more. How'd you guess David? No guest. Didn't you give me your hand well over a year ago, Mrs.  Hey, what are you gonna wear all those things with? With a dress. What do you think? What dress now? How do I know what dress? I'm not in my closet Do you have a decent dress to your name? What do you think I've been wearing this last year? Well, you can't wear a dress you've been wearing for this last year with shoes You haven't worn for an hour and why not just isn't done. That's why by who I'm home by the leading young women of the community By wives of prominent young Well, that just shows just shows how much you know about wives of prominent young architects Why black suede accessories go with practically everything don't they mama. They're very adaptable see Well, I wouldn't buy my wife black suede accessories to go with practically anything. Thank you And since she doesn't have the sense to realize that black suede accessories should be worn with a very special and spiffy black dress I just simply have to take matters into my own hands I'll be right back. Hey, where are you going David?  I did not I didn't even know about it Poor darling. He must have hated every minute of it.  He wanted to do it. I know, but even so it must have been an enormous effort for him a Diamond bracelet wouldn't be half as valuable to me as is that effort mama.  Yeah, what have I done now? David I must have cost a fortune what so what so what I'll tell you so what later Mama, look at this the lace around the neck. Look at the fullness of the skirt. Look at the way their sleeves turn Oh, where'd you ever get your training in shopping for women's clothes?   How can you be so sweet? I just happen to be in love with my wife and she's gonna see that you stay in love with her if it takes until a Day she died stop sniffling. I can't help it. It's such a beautiful dress and I I Love having birthdays. Well, you'd never know it before you received your present.  I Think I'm gonna cry At this time of year probably more than at any other There's a desire to extend hospitality to invite friends and neighbors over for talk and music and refreshment With a case of Coca-Cola in the house such invitations can be readily extended Everybody likes ice-cold coke. It's all you need to say welcome. Well, do you approve mr. King? I approve the whole business presents Sentiments and all so do I I remember when Claudia was little she objected very much to her birthday being so near Christmas You know why well she's changed the mind about that a David has well Claudia is gonna have the opportunity to wear her new clothes very soon night after tomorrow really the children were planning to spend New Year's Eve at home. Well that all changes tomorrow good I like to see them step out. You're only young once and not according to old Jared Tucker Who doesn't mind a bit of stepping out himself? Well, see you tomorrow, Mrs. Brown. Bye Joe Every day Monday through Friday Claudia comes to you transcribed with the best wishes of your friendly neighbor who bottles Coca-Cola So listen again tomorrow at the same time And now this is Joe King saying or if war and remember Whoever you are whatever you do Wherever you may be when you think of refreshment think of Coca-Cola Or Coca-Cola makes any pause the pause that refreshes and ice-cold Coca-Cola is everywhere This broadcast of Claudia was supervised and directed by William Brown Maloney and now here's the word from your friendly neighbor who bottles Coca-Cola