So, hey everybody, my name is Corey Chamblin, I am a programmer, I write back-end software at a company called PagerDuty, but today I'm not going to talk about any of that stuff, I'm going to talk about something way sweeter, I'm going to talk about how to build video games in Ruby. I don't do this for my job, but I like to write games and I think Ruby is a good language to do it in. So the github for the talk, github.com slash Chamblin, you can go there, download the slides, download all the code for the talk. So first we're going to talk about kind of the reasons why you might want to make games or why you might try to get into this as like a hobby, just something to do on the weekends. We're going to talk about why Ruby is a pretty good choice for getting started making games. The second bit there, the main chunk of the talk, we're going to talk about how games are structured and pretty much every game framework out there. We're going to talk about Gosu, which is an amazing little library in Ruby for building your own games, and we're going to talk about how to write pieces of games that you might want to build by building a couple toy games using Gosu. And if we have a little bit of time at the end, we're going to talk about a few resources for aspiring independent game developers, so if you're not an artist, you can go get some open source artwork or some open source music, sound effects, and maybe some tools that you might use in building your own games. So first of all, why do I make games and why should you make games? So I like to make games because it reminds me of when I very first started programming.  No, but it was exciting in the sense that I typed this thing in and something happened on my computer. And that is a real visceral kind of creative feeling that I think all professional programmers need to find some way to get that. The first time I hooked up an Arduino to my computer and I made the little light blink on it, I wrote some code and do a thing and I pressed play and a thing that was not my computer did something else. That was a similar feeling for me. So I think you should try to write games if you don't already have an outlet like this. See if games are that for you and if not, I highly encourage you to go find some way to creatively express yourself with your craft because it's very important to grow as an engineer, as a programmer that you can express yourself creatively. So what about Ruby? Nobody considers Ruby a high performance programming language. So is Ruby the right tool for the job? Is it the right tool to build games in? So when I first became a professional programmer, I first had some interest in writing games because a lot of people get into programming because of writing games and I think games are sweet. So I was like, okay, well, I can write stuff, I have a computer science degree. So what do I need to know to write games? And I thought, man, okay, well, I need to go learn C++, I need to go learn half a dozen graphics libraries. I need to know what SDL stands for.  But none of that is actually true. So almost every language out there, every language out there has some library where you can write really nice 2D independent style games, very commercially popular. These are the games I love to write. I love to play. And that's a ton of the kind of games. Ruby is no exception. We have Gosu and Ruby and there's plenty of power in Ruby to write these simple games that are very full and very satisfying to write. Photographers often say that the best camera that you can have is the one you have with you. So if you want to make games, don't feel like, okay, well, there's just so much I need to know to do that. You can make games today. If you know how to write Ruby programs, you can write games. So go make your games with Ruby. If you feel like later on, okay, well, I'm feeling kind of hamstrung. I need a little more performance. The lessons you learn writing games in Ruby, the lessons you learn writing games in Gosu, ports very well to the more commercial tools. I poked around in Unity. I wrote a couple of games using Unity, just having background writing games in Gosu. And the vocabulary, the semantics of writing games, the structure of games is very similar across the board. So you can kind of get your sea legs writing games in Ruby. And if you want to go do this professionally, totally room to grow into those higher end tools. But for me, I found out, hey, I love Ruby. Ruby is a great language and I'm not making a ton of money writing games. So I'm going to have fun doing it. I'm going to write my games in Ruby. So let's get into the kind of meat of the talk here. Gosu games can just be one class. So we inherit from a window class in Gosu. And you only have to implement three methods, generally. And these three methods, you're going to see them all over in game development. So like every game framework literally I've ever used has had these three methods be the primitives for building games. The first thing is the constructor of your game. So this is responsible for doing things like setting up the window details. Like what's the size of the window? What's the title on top of it? Is the game full screen? What's the resolution? If so, kind of the graphics setup of your game. It's responsible for loading assets from disks. So things like your image files, your sounds, and your music files. For reasons we'll talk about in a second. You don't want to be reading those things off disk in the middle of the game. You want quick access to them. So the constructor is responsible for loading all those things into memory. Finally it's responsible for setting up the initial game state. So things like, well I have three lives. So initialize says lives equals three. It's not very complicated. Level is one. Very simple stuff. The state of the game as the game begins, it's responsible for that. So this is called when your game first runs. This is called the setup method in most game frameworks. So after this gets done running, the game enters into an infinite loop. And that infinite loop is called the game loop. And then we call the other two methods in sequence in that game loop over and over again. The first of those methods is the update method. And it's responsible for detecting and responding to user input. So did the user press the B button? Okay what do I do? Did the user press the right arrow? What do I do? It's also responsible for updating all of the state of the game. So if the user pressed the B button, I'm shooting a fireball. If the user pressed the right arrow, I'm adjusting the player's position five pixels to the right. That kind of stuff. Finally, the draw method. It's responsible for drawing the current state of the game to the screen. So it doesn't change anything about the game. It just goes through say all of our image assets and says, okay, well based on the state of the game right now, I'm going to draw the hero right here. I'm going to put three hearts in the top right corner, all this kind of stuff. And so these are called in a loop, the game loop. And each time we go through that loop, that's called a frame. And however fast we're going through that loop, that's called the frame rate. And Gosu tries to run games at 60 frames a second. But obviously if you have a bunch of stuff in these two methods, that can slow it down. This is why we load images into memory. Because if you had to load all of your image files into memory on each frame, if you try to do that 60 times a second, your game is going to run really, really slowly. And you're going to turn your hard disk into a pile of slag. So that helps us keep up a frame rate. And that's basically at a very high level how games work. So to demonstrate these concepts, I wrote a really amazing game called Winner Winner Chicken Spinner. And how this game works is the chicken there, he spins until you press the space bar.  And if he stops in the highlighted area, you win. If he stops outside the highlighted area, you lose. The game is over. So the implementation of that game, it goes like this. So first, we're inheriting from Gosu window. At the bottom there, we're instantiating our game and we're calling the show method on it. I don't know why I named this game window. That's a terrible name. It should have been Winner Winner Chicken Spinner window. So anyway, here's the implementation of Initialize. We have the three responsibilities of Initialize and I kind of made different code paragraphs for the responsibilities. First, it's responsible for setting up the window. It's saying, okay, super class, make the window 480 by 480. It's setting the title of the window to Winner Winner Chicken Spinner. If the game were full screen, we would set that up. Second, it's loading all of our assets into memory. So the way we do that is we just instantiate the image class. We give it a path. These are just PNG files. There's no fancy games-only image format here, just PNG files. We have the chicken plate disk thing. We have the arrow and then we have two different images at the end of the game. If the player wins, we're going to draw that fantastic win logo and if they lose, the sad lose logo on top of everything. The last bit there is setting up the initial state of the game. So Winner Winner Chicken Spinner has really three pieces of state. It has the current rotation of the chicken because each frame we're going to rotate that chicken a little bit so he starts spinning. It has a game over flag so we know to stop spinning the chicken when the user presses the space bar. And it has a one flag so we can tell are we showing the win image or the lose image on the game over screen. The update function, remember, is responsible for checking for user input and it's responsible for updating the state of the game.  However, if the game is not over, we want to check to see if the user has pressed the space bar in this frame. So if they did, we can use the button down method and it has a little constant called kb space. All the keys on the keyboard have these constants, they're all in the Gosu docs. But if they press the space bar, we're going to set that game over flag. We're going to set the one flag to whether or not we won and that just looks at the current angle of the chicken to figure that out and it was a lot of trial and error to come up with those numbers. There was no trick there. And if neither of those things are true, we're just going to rotate the chicken by 10 degrees by adding 10 to the chicken angle. And that is all update does. The draw method, remember, all it's doing is it's saying I'm going to render the state of the game to the screen. Whatever the game looks like right now, I'm just going to draw that. So the arrow, the little blue arrow that you saw, we're always going to draw that to the screen. That's at x equals 320, y equals 200. It's important to note in Gosu that the origin of 00 is on the top left-hand corner of the game window, not the bottom left-hand corner.  Some game frameworks like to do bottom left, some like to do top left. I don't really know why, but Gosu is a top left kind of framework. The last number there is the z index. And if you do any web development, you're probably familiar with that. It's just the draw order of the images. The arrow will be on top of anything with a z index less than one and under anything with a z index greater than one. The next bit is drawing the chicken plate. So we're going to use the drawROT method because we want to rotate it. It's the same x, y, z stuff there, but we have the angle and degrees that we want to rotate the chicken. You'll note we're not setting it or changing the angle. We're simply drawing the angle that the update method has set. Finally, the game over state. So if the game is over, we want to draw the game over screen. And the game over screen depends on whether or not we won the game. And if we won the game, we want to draw the win image. Otherwise, we're going to draw the lose image. And we're going to draw it at z index of two, so it's on top of all the other stuff on the screen. And that's actually all the code there is in Winner, Winner, Chicken Spinner. But Winner, Winner, Chicken Spinner is a very, very simple game.  So we're going to make another very simple game, a toy game. But it will have, it's a little platform game. And that has a lot of important kind of mechanics, pieces of games that you'll map to pretty much any kind of game you want to build. So you don't have to make that huge mental leap from Winner, Winner, Chicken Spinner to what I actually want to do. So let's jump right into the code on this guy. So first the idea is we have a little guy and we want to be able to move him around on the ground just like a real platform game and we want him to be able to jump. So we're going to make a new game. This one's called Running Hero. And we have two images right now, the hero image and the background image. We're going to load those into memory and then we're just going to draw them statically on the screen. You know how to do this from Winner, Winner, Chicken Spinner. The next bit is we're going to make our guy be able to walk or at least be able to slide along the ground in an orderly fashion. So in a platform game the rules of movement are that the player can move to the left or the right but he can't move up and down. And if you want to build like your top down like Zelda kind of game you just change the perspective and then the player can walk up and down too. The same principles apply though. So all we got to do to walk we're going to store the current position of the hero in an array with the X and the Y coordinate. And in the update function remember update is going to check for that user input. It's also going to change the state of the game. So when they press the right arrow we're going to want to update that position by changing the X coordinate. And when they press the left arrow we're going to want to subtract from that X coordinate. So we wrote this little move function that does that. It just adds or subtracts five to the X coordinate based on the speed thing which you can set and change to make your hero a little faster. The only change I had to make to the draw function was just quit using hard coded numbers and start using our position when we're rendering our hero. And that's all there is to drawing the hero and making him be able to slide across the screen. Jumping is a little trickier.  And I kind of just made this up for this talk so there's probably some way better way to do this but this is a simple way and it made sense to me. So how jumping works in running hero is you can only jump if you're on the ground so there's no double jumping antics. But when you jump you get a certain amount of vertical velocity. And then each frame the game's going to look does the hero have vertical velocity? If so I'm going to move their Y coordinate up by that number and then I'm going to divide their vertical velocity by some amount of gravity. And then eventually they're going to run out of vertical velocity they're going to be at zero and then they're going to start falling so I'm going to give them negative one vertical velocity and then each frame will be multiplying that velocity times gravity. So they'll go faster and faster and faster until they hit the ground and then they can jump again. So maybe some code is a better way to explain that. So the implementation of that just in the update function if the user presses the space bar we're going to call this jump function it just does nothing if the user's already in the air otherwise it'll give them a vertical velocity of 30 pixels per frame. The other change to the update function is we're going to call this handle jump function which is going to do all that math we just described and updating the hero's position and updating vertical velocity. The implementation of that we have this gravity constant of 1.75 just has to be greater than one I just fiddled around until I found a good feeling number you will see that a lot in my game it's just most of these numbers are just made up. The ground level I can talk about that in a second it's just the Y coordinate where the hero is standing on the ground because that is currently how we're going to find out that we've landed. The next bit just subtracting the vertical velocity from the hero's Y coordinate because remember the top of the screen is Y equals zero so as you go up your vertical velocity goes down and then when you have negative vertical velocity your Y coordinate will start going up again. The next paragraph thing there is just changing the vertical velocity so if the vertical velocity is zero that means the hero is at the top of the jump and we need to start falling so we'll give them a vertical velocity of negative one so on the next frame we'll start falling if the vertical velocity is negative that means they are falling so we're going to multiply the vertical velocity times the gravity constant so they're falling a little faster on the next frame and if they're going up then we want to divide the vertical velocity by the gravity constant to go up a little less on the next frame. The last bit there like I said so when we get back on the ground we need to know that we're back on the ground otherwise we're just going to fall forever so how we're doing that is our ground is a straight line so the hero is always at the same Y coordinate when he's standing on the ground so we could just look at the Y coordinate if it's at the ground level then we can stop jumping since this is a platform game eventually you're going to get to the point where you have platforms to jump on that kind of thing the logic will have to change you'll have to use something like collision detection to know if you're on the ground or not but that's actually all there is to jumping and to walking so now our guy he can walk and he can jump but he does look a little silly because he cannot look to the left which is sad and he also kind of just moves like a cut out paper doll and not like a real hero it doesn't feel like a game yet it feels like a toy so in this chunk we're going to animate the guy we're going to add a few poses to him and make him look like way better so to make the guy be able to look to the left we're going to need to know which way he's facing and that can change as the game changes to a new piece of state so we're going to store the direction he's facing we're going to update that direction in our move function because that's the only way currently that our player can be turned around to face the other way is that they start walking the other way and then we're going to do this little trick in the draw function so one way you could do this is that you have a left facing image for every image in the game but that tends to get a little unwieldy and is a little hacky so a better way to do it is that the draw function on the image class has a scale x and a scale y parameter and if you set those things to negative numbers it actually will mirror the image and make it face the other way on that axis so if you set scale x to negative 1 it's going to flip the hero over back the other way and he's going to be facing the other direction back to back with his original position to compensate for the fact that we just moved the hero to the left by his width we're going to add the width back to the x coordinate so now our hero can be standing in the same spot but he can turn around and can face the other way so a pretty neat little trick there so now our guy can look to the left he can look to the right but now we need to animate him so animation in Gosu is very simple and by simple I mean you're on your own so so what you do is you get an array of images and each frame you just decide this is the one I'm going to draw this frame so you load up all of your stuff into an array and then you pick based on the state of the game which of these am I going to draw fortunately we have a really easy way to get a bunch of images into an array and that's by using sprite sheets so sprite sheets are a very very common tool in games development you just basically take all of your images that you want you make them all the same size and then you put them all in a bigger image and then you load them into your game and you say all of my sub images are this size and you cut them out for me and it'll do that for you this is usually done for complicated graphics card reasons but in running hero it's done because it makes the code nicer that the thing there behind the blue wall is our sprite sheet so we have seven poses for our hero we have the standing still and doing nothing pose we have three frames of animation for walking so if you play these in a loop it looks like walking it's called a walk cycle the fifth the fifth image is the player kind of with his arms out going up I don't know why this is going up I have never jumped like that but that is what going up looks like for our hero for going down our hero is kind of looking down at the ground and then the last image there is like our hero has been hurt and he stunned or just very surprised so to build all this animation all these poses into our game in the initialize function remember we load assets there we're going to use the load tiles class function on the image class we're going to give it a sprite sheet we're going to say our sprites are 64 by 64 so load those all into memory and this will just return that array for us of regular images we also need to keep track of which image we're going to show on this frame so we have this piece of state called the current hero image which update is going to check or which update is going to set and then draw is going to draw so in update we're going to look at the state of the game to figure out which frame to draw so if the hero is jumping that means they have a vertical velocity and based on that vertical velocity we're going to decide to use the going up or coming down image if they have a positive vertical velocity we'll use the going up image if they have a negative vertical velocity we'll use the going down image otherwise if the hero is walking one of the weird things about this is that the hero can be jumping and walking at the same time so if the hero is walking then we will just use one of these three images in the walk cycle and you don't want to just loop through these like one per frame because your game runs at 60 frames a second and this animation looks ridiculous at 60 frames a second so you want to slow that way down without slowing down your whole game so how we do that is we can take the number of milliseconds since the game started divided by 100 and that gives us 10 frames a second so we just take that number modulo 3 and that gives us a loop 012 012 we add one to that and then we get the right offsets in the array for the hero images that we need to show this frame finally if the hero is neither jumping nor walking we're going to just set the current hero image to the resting hero image, the first hero image and the only change we had to make in the draw function was that we want to use the current hero image instead of that old static hero and shockingly that is all that it took to animate our guy and actually he looks a lot better right now and he's feeling great about life however our game is missing a plot it's missing drama and to have drama you need to have pain and you need to have suffering and in games to have pain and to have suffering you have to have collision detection and so we want our guy to be able to slam into things we want our guy to be able to get hurt and so we're going to add a bad guy who currently doesn't do anything so he's not really that bad he's more of a painful obstacle but it's going to let us start building collision detection to our game so how does collision detection work well in our game we are going to put rectangles imaginary rectangles around our hero and around all the stuff that our hero can run into and then we're going to look for intersections of those rectangles and if there's an intersection that means there's a collision there are other ways to do this there's so called pixel perfect collision detection which will tell you exactly which pixels overlapped between two things on the screen but every platformer I've ever played as a kid used rectangles and it feels great it feels good it's also very conceptually simple it is you can run these in constant time so it doesn't matter how big the things are that you want to detect collisions are the collision detection is always just very easy math and it's totally good enough for our game so this is what we're going to do so let's draw our enemy into place so we just have a static enemy image for now we are going to draw use this draw collision bodies method which I'm going to talk about in a second it just draws rectangles around the physics bodies in the game so you can see where do your rectangles need to be we have a couple changes in the update method so first of all our hero can feel pain now we have this hurt until timer thing so our hero can be hurt for a little bit but then we want him to recover so how this works is we're going to set if the hero gets hurt we're going to set hurt until to some time in the future and then if that is set we're going to say ok the hero is hurt once you get past that time you can un-set it the last bit there is we're just going to call this handle collisions function because we need something to detect and respond to collisions in our game and how is it going to respond so a couple different modes of collision detection that can happen in our game first of all the hero can run into the enemy from the side like from the left or the right and when that happens that means the hero made a mistake so he should be hurt and in order to hurt the hero we're going to knock him back 30 pixels and then we're going to you know stun him for a little bit however if we collide with the bottom of the hero that means the hero jumped on the enemy's head and as we all know if you jump on the enemy's head you did a good thing and the enemy should die so that so right now we don't know how to kill an enemy so we're not going to talk about that but we are going to give the hero a little bounce which is a very cheerful celebration of jumping on the enemy's head so handle collisions implemented like this the first third of the code there is just defining the rectangle around the player and around the enemy there are a billion ways to describe rectangles in code I chose the worst one which is to use a hash but it looks good on slides so that's why I went with that in real life I probably would have used a struct or even just an array with the two corners specified to specify your rectangle the next bit there is we're calling this check for collisions function which for now all you need to know is it takes two rectangles if there's a collision between those two rectangles it's going to return the direction of that collision relative to the hero so if the hero gets hit on the left side it's going to return the symbol left if the hero gets hit on the bottom side we're going to return bottom and then the logic for how to deal with those collisions if you get hit on the left or the right that means you want to get knocked back by 30 pixels and we're going to set the hurt until timer to the current time plus 200 milliseconds which again just a magic number I made up because it felt pretty good if you collide with the bottom of the hero however you want that little bounce so bounce all you need to do is set that jumping flag to true and give the hero a vertical velocity of 10 pixels per frame the check for collisions function I just described so first you need to get the intersection of the two rectangles you were given so this is very simple math if you had like three minutes and a piece of paper you could figure out how to get the intersection of two rectangles but I just got my answer off stack overflow and if there is an intersection we can use that intersection as a heuristic for figuring out the direction that the collision came from the reason we can do this is because okay so if the intersection is wider than it is tall so if it's like a landscape style intersection we can know with high probability that the intersection came from the top or the bottom of the hero rectangle the reason for that is because the rules of the game don't allow you to intersect very deeply with another rectangle like it'll stop you, it'll knock you back 30 pixels or you bounce off the enemy's head so if it's wider than it is tall that means these rectangles aren't very thin it's probably a top bottom collision and otherwise it's a left-right collision for the same reasons so knowing that we can look at the top of the intersection and the top of the hero rectangle and decide if it's a top collision by checking if they're the same because if they're the same that means the top of the hero's rectangle is pushing through the bottom of some other rectangle and if it's a wide intersection and it's not a top collision then it must be a bottom collision so the same kind of trick applies to the left-right thing if we know it's a left-right collision we can look at the left of the intersection and the left of the hero rectangle and if they're the same it's a left collision otherwise it must be a right collision that was a lot of words and not very many diagrams so this is that draw collision bodies function I talked about you should definitely do this if you're going to write a game with collision detection because it's very tricky to dial these numbers in without having some visual aid all it is is just drawing drawing four lines makes a rectangle goes through as built-in drawing functions draw line is a neat one so I set a debug flag whenever I want to draw the physics bodies in the game and that's all there is to collision detection so now our guy can get hurt he can bounce off the enemy and he can celebrate in triumph so the very last bit of the game so we want to make it flesh it out a little more we want to be able to kill the enemy we want the enemy to be a little bit smarter and we want to be able to keep score so the first thing I did was I separated the enemy class out as its own entity because eventually your game is just going to get unwieldy if you leave it in one class forever so this is one way you can start moving out various entities in your game to have their own logic also maybe we want to make a bunch of enemies so this is a neat way to do it so we implement an update, a draw, and a body method on the enemy class here the update and draw methods are just called on all enemies in the appropriate method in the game call is going to call update on all the enemies every draw call is going to call draw on all the enemies the enemies know how to draw themselves the enemies know how to update their state as the game progresses the body method just returns the rectangle for collision detection because the game itself is still going to be responsible for detecting those collisions so here's how we plug that in we have we're going to instantiate an enemy in our initialized function we're giving it a sprite sheet now instead of just a static image you could make many enemies we're just going to make one for the purposes of this talk in our update function we're going to call update on all of our enemies in our draw function we're going to call draw on all of our enemies and in our collision detection function we're going to loop through all of our enemies and we're going to check for collisions on all of them otherwise the logic remains the same and since we have that in place we can now implement the draw and update functions on the enemy to handle those bits so the draw function on the enemy the enemy only has two states he can either be alive which means he's walking around or dead which means he's squashed so in our sprite sheet for our enemy we have four frames of animation so we just do the same kind of thing with the 0 with the milliseconds trick to loop to slow down the animation and if the enemy is dead we have a little squashed enemy image there on the end the call to draw just uses some ternary stuff to figure out if the enemy is facing the other way and if he is flip him over so he's facing the right direction the update function is responsible for the brains of the enemy if he's dead the enemy's brain is no longer functioning so it doesn't do anything otherwise we want to move the enemy five pixels in the direction he's facing and if the enemy walks off the screen then we want to turn him around so he's facing the other way so he starts walking back so besides AI and besides drawing the enemy we want to be able to keep score so we're going to have this new piece of score state it starts at a zero as one might expect we're going to load a font into memory this is just a ttf file nothing too fancy you give it a size you say it's a 64 point font and load this file then in the draw function we're just going to say hey font draw the score in the top left corner of the screen and draw will happily oblige finally to get points we're just going to update our handle collisions function so when we have that bottom collision we're going to set the enemies a live flag to false and we're going to increment our score and that is the final product of running hero so you can see we can jump on the enemy's head we can get points, we have drama and you can imagine how like going from here you could make this a full game you could add an endless number of enemies coming at you that get smarter and better you could add interrupts and weapons and all kinds of stuff you could make platforms and levels and goals and hopefully you have a starting point where you could start to think okay well that's how I would do that in gosu a couple of resources for your game development career highly recommend open game art huge resource if you look at the game development community this is like the one everybody says use this the hero image and the enemy image both cc0 images I pulled off of open game art you can go there and build a collection of images for a game idea you've got you can just go there for inspiration they have sound effects, music tons of art, just a great resource for tools for image manipulation you can use whatever you want you don't need anything super fancy I use paint and paint like tools I think I use pinta on the mac but also occasionally pico pixel which is a dedicated pixel editor all that stuff is free I highly recommend the tiled map editor so when you're building a game you're going to start building up all these chunks of games like okay well I've built this kind of enemy thing I built this kind of block and you're going to want to lay out your levels, your maps you can load all of your stuff into tiled and then it'll export json or xml you can parse that in you can parse that in your game and it makes building levels so much nicer I highly recommend that tool of course you can get gosu all the docs for gosu a really great tutorial on gosu from libgosu.org I highly recommend it check it out I hope you all feel inspired to make your own games now I hope you feel at least a little more equipped to go make games now and thanks for coming to my talk I think we have about a couple minutes if anybody has any questions so for testing okay so testing in gosu you can write unit tests that do things like send keystrokes to the game testing in games is really fidgety because there's so much that can happen there's a lot of state that has to be set up and so tdd in game development doesn't seem like to be much of a thing but certainly like sanity checks and tests like that are a lot more appropriate in game development it's a lot more experimental and like okay I did a thing how does it look, how does it feel kind of iterative development the most fun game I made with gosu man all my games are terrible okay so okay so the most terrible game I made with gosu I made a game that was really just kind of this stupid art game but it has this little fly and he starts buzzing around on the screen and then you slap the fly and then more flies appear and then you kill more flies and then eventually it ends and you just try to get as high a score as possible like I don't have it with me sorry but I'll put it on my github so so everybody can see how bad I am at this my github it's on the first slide github.com slash chamberlain yeah there's the link to the github all these slides and all the code for this talk will be on that github do I think they're going to make a library to write VR games and ruby I think it would be tough just because 3D is more computationally intensive it might be possible but I think it would be very constrained by the performance of ruby is there a 3D library I don't know of one there probably is but I'm not aware of one yeah so the question is the question is like why do you draw the same images in every frame does that sum it up so my understanding of how it ends up working is that you sort of end up with a blank slate each frame and like for video memory reasons or whatever and so you're actually just going to redraw everything every frame anyway but if you think about games from the point of view of like regular application development it seems very weird that I have to keep drawing this thing all the time but under the covers your graphics card has to redraw things every frame so this is just getting very explicit about that no more questions alright thanks everybody


in which lane you're in. So far, I think it's pretty challenging. I think for all of us, from what I hear from all the competitors, it's, I think it's gotten probably the best of all of us, and it's become extremely challenging here in the last couple of days. I don't wanna just go halfway and not be able to finish. Even if I don't win, I wanna finish the competition. I think with everything that we've done, it would be an accomplishment, even to finish just the opportunity to have competed in, you know. They try to make it as realistic as they can to being deployed. Obviously, not everything's gonna be 100% real world, but you can tell they're trying to make it as realistic as they can, and that's a good opportunity for the soldiers who haven't had the chance to deploy it. As far as the competition, I think something about me, a lot of people see me very quiet, very, I don't talk too much, and some might take that as not being too confident, and I like to see myself as a quietly confident, and I'm always competing. Even if I feel I might not have a chance, in some events I still try to compete as hard as I can, and I know a lot of these guys are extremely squared away, but they're gonna get competition for me, and I'm gonna try to give it all I got, even if I'm running a little bit on fumes right now.


With the popularity of the carnivore and ketogenic diet lately, more and more people are talking about organ meats as superfoods, liver, cod liver. A lot of people are even promoting these organ meat based supplements. Then of course there are the lesser known superfoods that are high quality animal foods like salmon roe, aka caviar, bone marrow, brain, shellfish, like oysters, foods that people aren't making money on selling you. But today we are going to discuss kidneys as they are very similar to liver from a nutrient standpoint. Just like liver, kidney has all of the nutrients your body needs. The water soluble B and C vitamins, all of the fat soluble vitamins A, D, E, K2, all of the minerals, elements and essential fatty acids that your body needs. There are some slight differences between liver and kidneys. Liver is drastically higher in vitamin A, but this isn't unusual as liver is the only significant source of vitamin A found in nature. It also has a much higher copper content, which isn't actually a good thing because we have to keep our copper to zinc ratio in balance, which can be hard to do if you're eating liver every day. Kidney has slightly less vitamins overall across the board, about 70% of what is found in liver and this is still an incredible amount considering the nutrient density of liver. Kidneys do have more iron and selenium, about 20% more in iron and selenium is a bit higher, but this isn't that significant because both of these foods are incredibly high in these nutrients. It's definitely worth mentioning that vitamin C and vitamin E are contained in both liver and kidneys as these aren't vitamins that people really think they're obtaining from animal foods. And keep in mind how the animal is raised directly influences the nutrient profile of the meat. All the vitamins, minerals, elements, essential fatty acids count on the animal being on its natural diet of grass or forage. Due to modern conventional agriculture, the meat we're eating now isn't nearly as healthy.  Imagine, the animal is starving, it's on a poor quality diet, there's no nutrients in the diet, there aren't going to be nutrients in the flesh of the animal. Since liver is so high in vitamin A and copper, it creates the issue of having to obtain the other fat soluble vitamins in large amounts to maintain nutrient homeostasis. All of these nutrients are synergistic and work with each other so we need to get all of the fat soluble vitamins in certain amounts, especially if we're eating liver every single day. Our indigenous ancestors weren't having liver every day, we have created unnatural access to food and even when the food is healthy or very good for you, it's not necessarily a good thing to always consume more of it. If you're eating liver on a daily basis, you need to make sure to supplement vitamin D3 or get some sun. You have to eat fermented food or supplement vitamin K2 and you definitely need some extra zinc in your diet to keep that copper to zinc ratio in balance. Consuming dairy that has high calcium can also chelate zinc which might cause issues if you're eating liver on a daily basis. With kidneys, however, you are able to obtain a very high amount of overall nutrition without throwing anything off. And this is especially for B vitamins. The only thing that might happen from eating too many kidneys is that you pee out some of the water soluble B vitamins in your urine. Yes, liver is slightly higher in vitamin B12 but when you're throwing your nutrient homeostasis off by consuming liver every day, that's where you run into issues. So that's the main reason I like kidneys so much, not having to worry about eating all of those other foods to get those nutrients. But kidney does have a hidden benefit. Dow, DAO, diamine oxidase. It's an enzyme that is produced by the kidneys to process histamine in the body. Histamine is a neurotransmitter involved in immune system response and it actually is contained in the kidney of an animal when you eat it. So people with a histamine intolerance might benefit from consuming kidneys and not only do they contain the DAO enzyme that actually helps process histamine, it contains all of the nutrients that your body needs to produce DAO, DAO. It's definitely a piece of the puzzle in regards to solving histamine intolerance which I'll talk about next week. But let's cut to the chase. Why is no one eating kidneys? Because they taste like piss. However there is a quality factor here. Younger properly raised animals will yield much milder, better tasting organs. This applies to liver as well, kidneys of course any part of the animal. Fresher meat also makes the flavor more mild. I've literally eaten freshly slaughtered lamb kidneys hours after the animal was killed and they don't really taste like anything. So if you are having issues with food powder ability and not enjoying the taste of the food, you want to buy higher quality, younger and fresher. In regards to preparation, lately I've been purchasing veal or lamb kidneys and letting them soak overnight in a salt water solution. What this does is draw out any of the negative flavors that were left in the kidney. I would probably use milk if I wasn't allergic and after you soak them in salt water or salt and milk, you can then prepare them however you like and kidneys are delicious. You could pan sear them, you could poach them in milk, poach them in butter, throw them on the grill, a little bit of salt at the end, maybe finish them with some more butter. Kidneys can be just as delicious as any food if prepared properly. But you have to put in the extra effort with soaking it, that's the key here. Or you could be like me, chop it up into tiny bits and swallow it down by the spoonful raw. I would try to keep the kidney on the rare side if you do eat it to preserve most of the nutrients but eating cooked meat is far better than eating no meat at all. Thank you guys for joining me today. If you could please like the video, subscribe, hit that bell icon and share the video if you can. If you guys would like to support me further, definitely check out Frankie's Free Range Meat. We do sell veal kidneys and we might have some other kidneys in the future.  Just recently added 100% grass fed wagyu. Definitely check that out, frankiesfreerangemeat.com. Thanks again for joining me guys and enjoy the rest of your day. If you'd like to reach out to me for one on one consultations, please email Frank A. Tifano at gmail.com.


We are now at the end of day one, Targarotarua 2016, and whilst there are many categories in this particular event, one of the particular ones is the one that Lee Hopper is in, who leads, and now he hasn't had a lot of luck in his previous starts. But this weekend today, in fact, has been an absolute ripper for the guy. He is well ahead with some good time ahead of Chris West for tomorrow's stages. We've been pushing hard and nothing much left in it either, so the car's going good, so everything going to plan safer. And Chris West, of course, is in the modern four-wheel drive in the prototype rally car, the Mitsubishi Proto, and that is a weapon in itself. And wrapping up the top three in modern four-wheel drive, of course, is the name everyone knows and Targar, Tony Quinn, and his beast of a machine, but he does have some work to do. Of course, in the modern two-wheel drive, Martin Dippy and his brand new Porsche, a fabulous machine, he is really achieving the good numbers in his times as well, because he was a little easy early in the morning. He didn't really know what the car would do. Well, it's a lightweight, factory, road legal waste car, so it's got all the go-fast bits on it. A lot of carbon fibre, sequential box, which is pretty cool, and four-wheel steering. Simon Clark is also doing well in the modern two-wheel drive. The man gets known around the event, because he always seems to have a stereo screaming everywhere he goes. And after a great event in the Targar Bambina, Clark Proctor is still up the pointy, and as he, well, genuinely normally is, but this time without folks, Clark Proctor doing the stuff out on the Targar. And so there ends Day 1 of Targaru Tarua. Tomorrow it's more of the same, hopefully fine weather, because the reports back from all these drivers is that it was nothing short of spectacular out there today.


My name is Anand and this is Nafl. Both of us work for Internet Archive. This talk is about an introduction to Internet Archive and its architecture. So let's get started. So that's our office in San Francisco. Nafl and I work from India and the office is in San Francisco, United States. Before I start giving an introduction to Internet Archive, I want to ask you a question. So what's the average lifetime of an URL? Like once a URL is created, how many days it's going to be live and accessible? Do you have any ideas? So the estimate says that average lifetime of a URL is 44 days. There are some people who say it's 75 days and 100 days but that's around the ballpark figure. What does it mean? It means 44% of sites available on the Internet in 1998 have vanished in one year. So what happens to all this information? So there could be something which is very important and which is not available after that. So let's see if you can look at the URL. So let's see what it gives. I have a cash copy of that. So that's what you get. From that's a scientific article. It's not a site which is a small site but it's a very popular site but still you can't find that URL. So Internet Archive started a project in 1996 to create an Archive of Internet. And this is a scientific American article that we're looking at. And from the WebAc Machine which is the Internet Archive project that Archives Internet. So let's look at... So that's the Internet Archive website from 1997 from the Internet Archive WebAc Machine. WebAc Machine is a project of Internet Archive which started to create a snapshot of Internet from time to time. So it maintains a snapshot of Internet over time since 1996. So you might actually think why is it useful? It's very useful because there's a lot of information now available only in digital form. If the lifetime of this page is very less, how are you going to access them after some time? So let me show you something more interesting. So this is a blog post from CU of Sun about Android. So this says Sun is very happy about Android. So how will somebody find information like this? Let's say there's a code case from between Google and Oracle. So how will they find information about what happened in history which was available only in digital form? Without something like Internet Archive WebAc Machine, you wouldn't be able to see this information. So this information is available from Internet Archive WebAc Machine. So that's a page from October 23, 2010. So let's actually see how the WebAc Machine works. So I'm going to take an example of Apple.com as an example and then see how the website has been changing over time. So if you go to WebAc Machine and look at it and actually show a snapshot of how it hasn't been captured. The top bar shows when it was captured. And the circles here show that when it was captured, the date. So this is how Apple website was there in 1996. So the emails were not there, but let's look at the next year. That's 97 and that's 98, 99, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008. So that's how the website in 2009, 2010. So you can go to WebAc Machine and then actually see how the website has been changing over time or find some information, how it was a couple of years back. So WebAc Machine is one of the popular projects of Internet Archive. In fact, if you look at the Wikipedia citations, WebAc Machine is the second most cited resource on Wikipedia. That's because websites keep vanishing over time. So the only way to access them is through the WebAc Machine. So Archive is another project of Internet Archive. So it allows the partners to select and archive their selected websites. So a lot of libraries use this service. So other than the WebAc Machine and archiving, Internet Archive has a couple of more projects. One of them is book scanning. Internet Archive scans about a thousand books a day. Most of them you can see from their website. So this is the scanning center at San Francisco. And what you see there on the left and right are the book scanners.  And this is the Open Library. That's a website that's project started to create a catalog of all books in the world. So it has about a collection of 25 million books cataloged. And it has access to about a million free books which can be read online from Internet Archive. And it's like a front end to Internet Archive books. So the public domain books you can read from here and some books which you can borrow. This is a book reader of Internet Archive. So the scanned books can be read from using the software. This is a book reader. You just have to open your browser and then flip through the pages and read. So it allows you to search through the book and then go to the pages. You can have a table of contents. So it even lets you embed a book reader inside the web page. So one of the interesting things about this book is if you see the notes written on the top, it's actually a very interesting book. So if you actually flip through this and see, it has a lot of notes written like that. So that's a book on optics by Isaac Newton himself. And those notes are written by Isaac Newton with his signature. And in fact now you can actually hold that book while not in your hands but in your computer and then see through his notes. And this is the Internet Archive website. So it shows all its projects including text and audio collections. So if you look at the scale of Internet Archive, so it has about 3.5 million books and 170 million web pages archived so far. And my colleague Norful will now talk about how Internet Archive handles this massive scale. So this is a big data conference. It starts off with the size of the archives data. It's got about 3.5 million books, more than 170 billion web pages which is on the way back machine. So plus it has a lot of other stuff and totally it comes to around six petabytes of data. So I'm going to first talk about how the six petabytes of data you have to be able to manage this in some way. And how do you manage when you have large amounts of data? You impose some kind of structure on it so that you can actually talk in terms of larger abstractions. So the archive basically has something called items. Items are like the fundamental unit of storage on the archive. It's basically a directory. So the archive contains for 10 million items or so. And each item is basically just a directory. It contains the original files which were there in the item. It contains what are called derivatives. So suppose if somebody uploads, let's say I don't know, an mp3 of a song, the archive automatically creates orgs and other audio formats so that it becomes more accessible. So those are called derivatives. They're not original data but they're equivalent data that was generated by the archives software. And we have metadata files which contain things like when it was uploaded like who was the artist, which is the album, et cetera, depending on the type of item you're talking about. Each item is stored on two servers. There's a primary and there's a secondary. Usually they're on separate racks because the same rack gets fried and you don't want to lose your copy of the data. So we keep it on two separate machines. First one's called a primary and there's a secondary. So this is an example of an item page on the archive. That's the URL, archive.org details, Hollywood Without Makeup. You can see that on the top there's what is it called? A classification for this. It's part of the moving image archive, movies, short format films. You will have the original format which was uploaded, derivative formats over here. You can download all the files like this. And since it's a video file, you have an embedded player. You can actually watch this. Incidentally, the archive made videos like this in a streaming format available before YouTube, but a bit of tech history. This is the bottom part of the page. So you can see all the files which are over here. The MPEG4 version, the org version. We generate an animated gif from this so that you get a thumbnail kind of thing. These are the metadata files and there's a comment board so you can actually comment on different videos, enthusiasts, stuff like that. Items are the lowest level of data. Then there's a higher level categorization which is what are called collections. Collections are like groups of items basically. So it's used for, like you saw on the earlier slide, it said moving image archive. That's like a collection of videos. So we have different kinds of collections depending on functionality, depending on what it's for. So there's 911 footage. That's a collection. So news footage from when September 11th catastrophe occurred. Things like that. So collections are basically groups of items. These terms, they come from the library domain. So we have so many collections, that sort of thing. So this is an example of a collections page. So you can see that the collections called net labels. It's a sub-collection of the audio archive. So when you talk about collections now, you can say what all items are in this collection and what is the most commonly downloaded one, which are popular. You can find similar ones, et cetera. It's the way you look at things when you're in a library. All right. Now, since we have to do all this, you have to maintain this amount of data. So you should understand that the archive started in 96. And at the time, we didn't have the cloud. You couldn't just put your data onto the cloud and just leave it there. So we had to actually build custom hardware. So the Petabox, which is the Internet Archives machines, they were designed by the archive staff themselves. It was originally designed to hold one petabyte of data, one machine holds one petabyte of data. One petabyte was a lot back in the day. I mean, 96 one petabyte was quite a bit. It was designed low power. So I mean, these things are specs for the, which were obtained in 2010. Six kilowatts per rack, high density. So you have one rack can hold up to 650 terabytes of data. All right. They run without air conditioning, which is kind of cool. So the heat from the racks are actually used to heat up the building in the main office. You saw the office, picture of the office. It, there's no heating, central heating on the office. The heat from the servers is used to heat the office. And consequently, the servers don't need air conditioning. The next point I'll come to it. There are four data centers, totally with 1,300 nodes and 11,000 spinning disks. We use what you call commodity hard disks, like, you know, consumer hard disks. Cheap. So that was a bit of hardware porn. This was the original petabox, the one which was designed originally. This is the current generation petabox. This is what it looks like right now. This is an example of what it looks like inside the archives, great hall. So that church building, the church, they have a great hall. It's something that looks like this. And these servers are at the back of the hall. You can see that arch type thing on top. That's where the heat goes up through there. Then the question, how big is the internet? Since we have this business of, you know, the way back machine. We archive the entire internet. How big is it? And the answer is that it's one shipping container. That's 20 feet into 8 feet into 8 feet. The entire internet presented by the way back machine is stored inside this one shipping container. Okay, we'll just talk about the services which we have on the archive website. There are three basic things. These three things form the majority of the part of the thing. These three services form most of the archive infrastructure. The first thing is what's called the locator service. The locator service actually helps you find where a certain item is stored on this cluster. So you have a large number of machines, large number of nodes lying there. And the locator service allows you to say, when you say archive dot org slash details slash something and you ask to download a site, it has to actually find the server where the data resides. Then the, so it's a very simple program. What it does is it sends out a UDP packet to the entire, what do you call, the cluster and the machine which actually has the item response. It redirects to that. All right. And it redirects to that. The second thing is what's called the catalog. The catalog is something like what our task queue. So since the archives tries to store its information in a simple format, the speed is limited because of that we process things in an offline queue. So the catalog basically has tasks which execute as and when traversal sources become available. It's an old fashioned message queue. So if you look at the archives catalog, it contains a list of all the tasks that were executed and there are tombstones for all the ones that were completed. There are tombstones for which are really, really old tasks. You can still find them over there. Third thing is what's the driver? The driver is basically a piece of software that runs when new items are uploaded or modified or on demand. It creates new derivative formats from what was originally uploaded. So for example, if you upload a flak file, flak files are usually very big. The driver automatically converts this into mp3s, orgs, and other formats so that they become playable and more usable. It increases the usability of the data. Also, when we do this kind of thing, we augment the metadata from external sources like music brains and stuff like that. Another example of what a driver does is if you upload a PDF of a book, it will automatically OCR it and full text index it so that you can actually search through it. The new files are created and then the metadata is updated and the items sink back to the primary. Derivation is done by a catalog task, as I mentioned what the catalog was. This overview of our software stack, it's basically PHP, the front-end is PHP. You should remember that this was 96. So PHP, Nginx, Solar for all the searching and to render many of the pages. MySQL to store some of the metadata. Redis, I wrote Solar twice, I'm sorry. Redis is used primarily as a caching thing. And Python and Java in places. The Wayback machine is mostly in Java. We're trying to slowly move it to Python and stuff like that.  All right, now big data. What makes the archive different when it comes to big data? Our considerations are different. Most organizations, the big data is necessary for mining and analytics, visualization and things like that. With the Internet Archive, the reason what we do with big data is we preserve it. So because of this, the considerations are different. Our idea is to make sure that this data is available forever, in the long term. So we try to keep it that way. And that gives us a certain amount of, you know, certain kind of vision to do this. So give you an example.  You get up to 100 MB of free space. All right? You could upload your stuff over there and it would preserve it for you. It's similar, it's what Dropbox was back then. So, you know, no matter where you go, everything on your X drive is just a click away. But the next drive, shut down. All right? So many of these things are not really long term. Another example is this. This was a iOmega released, you know, a disk that was supposed to be, you know, higher storage than floor piece. And your life is safe here. I think if you go to the iOmega site right now, all you get is cables for the zip drive if you already have an old one. So when we have to engineer things, we have to engineer it for the long term. That's the way we try to design things. All right? So our basic concern is long term preservation. We try to keep things simple so that, you know, like, we don't, you know, for example, when I say simple, one simple thing, one example of how we do this is we store the metadata along with the actual items in flat files rather than put it externally in a database or something. We also just use UNIX permissions rather than put it in a database separately, permissions in a database separately. We also try to be independent. We don't try to outsource our storage and stuff like that. We try to keep it within ourselves so that we have control over what's going on. And low maintenance because, like, you know, it's a nonprofit. The staff is limited. The resource are limited. So we have to try to keep it low maintenance. Low cost where it doesn't conflict with the rest of the things above. And the basic thing is we're not really concerned with the code. We are concerned with the data. The code will die after a while. The code will become obsolete and it will go off. Data should remain forever. It should always be available. That's the consideration. So that's it. Thank you. So any questions, comments? I have, okay. I'm Sandil Nagam. I have a couple of questions. First question. Do you get DMCA takedown notices? We do get takedown notices for some things as far as I know. Okay. Second part, okay. Are you exposing any APIs where we can face these data sets because these are excellent data sets? Yeah, I mean all this stuff is just directly downloadable. The open... No, no, no, no. Web via APIs. We won't have the raw access to it. So what kind of API are you looking for? Okay, I used to have a couple of sites which I don't no more own or manage. The data is still there. I would like to do what my thoughts were going then. I would like to have access to my data. Okay, so I don't think... Not through website. I don't think the Web App machine has any APIs as of now. So you're talking about the Web App machine? Any point, okay. Sure. But are you doing anything with news? All the news... Can I check news for any newspaper or any website over the last couple of years? I don't think we're doing for... Well, I mean you can look at the news websites and then go and look at Internet Archive Web App machine. But yeah, but we have a TV archive. You can go and actually look at how the news were in this TV channels over time. My question is about how do you handle the copyrights? Usually, all the data that you're archiving must be subject to a copyright. So what are the policies that you follow or does the proprietary organizations don't come to you at your weight? So the archive crawler respects the robot standard. So if you have a website which you don't want crawled for whatever reason, you can specify that. You can specify IA archive or something in your robots.txt and it won't crawl it. And also, you can also request retroactively to have this thing removed and stuff like that. So that's done. And then specifics of copyright depend on the actual media which is in question. Like if it's books, it's one thing. If it's audio, it's something else. It's a legal question. I'm not really qualified to answer it. Anything else? Do you actually do deduplication or anything like that on the back end too? Week after week, not all the data changes for a website? So especially with some kinds of media, like music for example, there are attempts to actually do deduplication. So if you're actually archiving a certain CD, we have some things in place. In fact, I'm working on some things like that right now which tries to tell us like this thing has already been archived. You don't have to do it again. And it's not very straightforward because things released in one country, released in another country and stuff like that. So at the track level, at the album level and things like that. So there's some work that being done like that, but I don't know if the user uploaded data is just uploaded and kept. So it's not. All right. All right. Thank you.


Good job, well done guys, brilliant, brilliant, love it, love it. Broadcast Lawyer for 24 Hours in Aida Charity for the Mekawish Foundation.


So within the main topic of building the writing habit, we have got an important technique or skill of instant writing. So we will look at what means by instant writing and how we can incorporate it into our language teaching paradigm as language teacher to develop the art of writing in our students. So we cannot ignore the significance of instant writing. Instant writing means writing on the spot like this kind of writing maybe like for instance you can give a task to a student to your students on the spot without any preparation without any background information. So this can be incorporated in some at various stages of our lessons like that's not necessarily considered as longer part longer kind of writing where they have to produce longer text rather they can produce texts of like tasks may take five minutes or less than that or five to seven minutes like how to ask a stranger about directions, how to order food, how to book ticket. So these are the tasks which may be introduced in the classroom or tasks can be to describe their favorite poet or describe or discuss or their you know recent holiday. So these kind of instant writing activities actually play an important role in developing confidence and enthusiasm in our students. So one of the activities is sentence writing. By sentence writing I mean the teacher can dictate sentences for completion. For example the teacher can dictate two or three sentences about a certain topic and for example the students can be asked to write something about weather forecast or they can be asked to write about the climate change or how they feel about the weather over the weekend or what they are planning next month or next year like there can be several tasks and in this regard we can use movies in the classroom. We can show them a movie which they can watch which they can you know think and discuss and then write. So of course we'll have to make important decisions when we are choosing movies the movie which is appealing to the students which doesn't you know which is which is not against this sociocultural sensitivities of learners right and how does it make them feel actually. Then we can ask them write stories right about different versions of stories right and then we can also use the pictures. This is how instant writing can be used an important tool to develop a habit and enthusiasm in our students and instant writing can be encouraging and in this regard it's important to give tasks which are of interest to the students which are appealing to them and which encourages them and which make them feel about their own writing.


what's up guys today we're gonna be opening up a maximum gold booster box or whatever you call this thing against rhyme style today we're gonna get a revenge we've not won against him yet but we're gonna do it the winner is the one who pulls the most original blue eyes red eyes or dark magician i guess they're not original but the original monsters whoever pulls the most of them wins if we tie like we both get one or both get two you guys are gonna have to let us know in the comments so let's go ahead and do the giveaway since we're opening maximum gold figured i'd give away some maximum gold kission dragon made super polymerization tour guide and elemental heroes stratos all you have to do to win these cards is like this video be subscribed and let me know in the comments who won between me and rhyme style i'm gonna put his video down in the description so make sure you guys click on that watch this video let him know he or i won we're gonna win today that's all i'm saying and we're gonna break the bad luck so here we go i'm probably gonna cut get all these packs out and we're gonna go all right we have our 20 packs out here we go let's see what we can pull we want to pull blue eyes red eyes and dark magician for this battle so let's do this here we go we've pulled a lot of blue eyes so far so let's see see if we can keep up there what am i trying to say keep up the good work i don't know something like that start us charge warrior and a house dragon made so pretty much all these extra cards don't really mean anything toward the battle because we're doing only original monsters so red eyes dark magic i guess the other ones could be like tie breakers for you guys so like if we tie you guys if we if i pull like a couple impermanence is you guys might pick me stratos that's nice um cosmo town there we go i was like oh where is it there's three we're gonna sleep up stratos where am i sleep here we go i've been uh reorganizing my studio i guess you could call it and it's we've done a lot of work on it we're going ham but it has taken a lot and we've moved a lot of stuff so it took a long time but it was totally worth it it's pretty awesome okay here we go slow start we've got stratos that's all right here we go you're getting eater of millions oh we were we were on that one start us charge warrior again let's see if we get the same one kitchen dragon made this time okay that's not bad we're gave away one of those in this video so make sure you guys into that giveaway by liking the video being subscribed and letting me know who won the battle all right next pack here we go let's do this dark lord contact traptrix dionia heartbeats feather duster i assume if this one counted it does not count unfortunately even though it is pretty awesome speaking of awesome i've got a couple of epic things that are coming in the mail just saying super poly there we go and it's gonna be pretty fun it's gonna be pretty fun openings thinking 40k special potentially because we are in there we're getting pretty close what are we nearly 37 000 now that is pretty good that is pretty good all right so far i have zero points in this battle zero points nurse dragon mate okay temple of the six tour guide from the underworld that is the altar so that's a nice one that's also double sam so it's like both tour guides are like that it's really strange okay tour guide here we go come on give us a red eyes dark magician or blue eyes i mean technically they all count the same i guess but unless it's a tiebreaker barrier statue of the torrent layer of darkness elder entity ghost sister and spooky dog would okay link caribo man we're on a dry spell but look we're in a battle of course we're on a dry spell but as i said we're winning this one as i said i have faith night beam i gotta just have faith here we go barrier statue of the heavens cosmo dark destroyer and house dragon mate all right okay okay we need something we need something guys that black rose in the background give us some luck here we go maybe cool black rose was a gold rare let me nice solemn judgment that's a cool pull unexpected die and darker brilliant xyz dragon xc's dragon i should say solemn judgment okay we've gotten some cool original cards but we haven't gotten any original monsters yet the ogs the lobs monster reborn there's another there's an lob i asked for and i received monster reborn synchro carrier and kitchen dragon mate okay that's pretty good pack actually and speaking of lobs if you guys do not follow me on instagram and twitter make sure you guys go over there and do that because i posted my ps a submission not my return but the ones i'm sending in and we sent a bunch of lob first editions from that collection we sent that dark magician girl stuff like that you guys want to see what we submitted either check out twitter or instagram it's easier to find it on instagram because twitter like you can't save your tweets they just scroll down so instagram it'll be the last post it should be at least world store dragon that's nice oh you know what time it is time for the i think look if rhyme doesn't sing chica lattes then we win how about that yeah i think i think that's a good uh a good call check out those chica lattes check them out just look at them look at them you can't say they're cute little chica lattes that's for sure okay refocus all right oh wow infinite impermanence we're looking at chica lattes didn't even notice the impermanence i mean it's not as good as chica lattes but it's close it's pretty nice infinite impermanence that's a really good pull we're actually having pretty good pulls but we're not pulling any of the og stuff borosword and infinite impermanence and chica lattes can you beat that pack i think the only way would be like blue eyes impermanence and chica lattes all right number c 101 union scramble tour guide we got both arts cybers core and a red eyes we got a point we're on the board red eyes black dragon that corner up there is not perfect but we are on the board with a red eyes let's put it back there there's our points we'll cover up rainbow dragon sorry rainbow dragon we're actually getting a lot of good pulls in this opening a lot of good pulls okay we still got a few left as well here we go red eyes black dragon noble knight drison sink ron carrier fire formation yaku fantastical dragon phantasme and a drill and lock bird see these these packs are absolutely loaded we are pulling absolutely amazing we only have one point though one red eyes we're gonna need at least two i think to at least high and we have a good chance if we tie because we have infinite impermanence we have drill and lock bird so i think that that could be pretty strong okay come on give us at least a dark magician blue eyes i think those are actually the harder ones to pull harpy's feather duster again okay that one's very beat up look at that one that the edges are horrible known cyber dragon infinity that's pretty nice okay let's leave up the the duster even though it's like destroyed already it's already light play okay so far we've pulled we've pulled really good actually we've pulled really good we haven't pulled the big boy which is blue eyes he's worth $30 we have pulled impermanence but i think still the second most valuable card i don't think dark magician has passed it could be wrong drago sack elemental hero stratus again man edges are destroyed yet again totally awesome that's good that's a good rear um gold rare ghost reaper and winter cherries unexpected die okay totally awesome let's leave that up another stratos that's number two he's definitely beat though okay we have how many more packs six more packs here we go we're gonna need some luck here guys dark lord ickville dark lord contact guy of the dragon champion not a great one and a laundry dragon made okay guy the dragon champion i think is one of the best looking ones i don't know why i think it just looks really good but it is very cheap because there's just no use for gaya even though there is a guy the dragon you know there's a guy archetype the guy the dragon champion is still terrible trap tricks dnl extra flash burial come on we need one more at least temple of the six miracle contact ghost reaper and winter cherries miscellaneous oris and yes i have seen this one before i've seen it before decent bold but not an original monster so not what we're looking for these are not the droids we're looking for here we go all right tachyon transmigration mistaken accusation elemental stratos that's a play set foolish burial house dragon made that's a play set of that as well okay stratos i think he's like a dollar so he's not crazy three more packs we need one more pull we need red eyes something to go along with red eyes to have a chance i think there's almost no way he strikes out forbidden chalice i think that's like almost impossible mantis reincarnation dark magician there we go there we go and that one actually looks like it's in good condition and it is not impossible to strike out i know a few guys have actually told me that you didn't do anything which is really unlucky but it's pretty tough so there we go dark magician we now have two of the three that gives us two points in the battle so if we can at least get a tie i feel pretty strongly about our chances to win so a third would just be i think we win i think we're gonna win if we get a third if we get like a blue eyes i think we win if not i think we have a good chance mantis trick star reincarnation eldritch okay we definitely have a good chance and apollosa yep that's a good pack that's a good pack eldritch not eldritch i always would say glitch i'm sorry if i annoys you with that apollosa bow of the goddess i probably say that wrong as well and some people like i don't care about that but when you say apollosa that makes me want to smack myself with my head up against the wall or something okay final pack let's pull blue eyes let's pull even a red eyes dark magician as a point toward the battle here we go number 74 master blades barrier statues of the heavens elder insti whatever you say whatever that name is and marshal metter marchers okay that was one of our worst packs but overall we did pretty good let's go what we got over for the battle which was dark magician and red eyes black dragon so we did pretty well there then in terms of if we get a tie and you guys have to pick we did pretty well as well we got apollosa eldritch three stratos i think miscellaneous sorus a totally awesome we got two feather dusters one droll one fantasm a we got both arts of tour guide with boros already got an infinite impermanence monster reborn trick kitchen dragon made solemn judgments super poly there's the other one and other stratos so we did really good overall i think so let me know in the comments who you guys think one if it's me or i make sure you guys go check out his video in the description and you can watch it and then you can comment over there rocks and one rocks and destroyed you you finally got a win or something like that unless i lost then probably don't say that but i appreciate the support either way so thank you guys for watching hope you guys enjoyed this video let me know in the comments what you guys want to see in the future i'll see you guys later peace