Hello friends and welcome back to another VGC 2020 battle series episode My name is Lee also known as Osiris and in today's episode I'm going to be featuring a team from very good friend of mine and top VGC player shared You might also know him as Kunal And he's passed me over this team because we were talking about the Primerina desclops in Ferrothon core very strong core and a prominent core that you're probably gonna see quite often at the minute And I did feature it It was included in my G max colossal team that we just featured last week on our showdown episode And but we wanted something a little bit different and he kindly passed this over to me to use I'm just going forward though If you guys have teams that you would like to see me feature in this series on these episodes Do leave them down in the comment section below leave a poker paste or anything that you would like just even a single Pokemon with EV spreads and a move set that you'd like to see featured I'm more than happy to do that We've got new rules starting this Friday the 1st of May so season four series four starts We've got the new G max Pokemon introduced match up Gengar and Garbados So we'll have a lot of fun with those Pokemon when they do get introduced I've got some really cool ideas for match up. So looking forward to trying a super fun crit team But without further ado, my friends, let's hop into this And get underway. So written's not great written's not too bad We've not really been concentrating too much on laddering this series I think I've been put off a little bit by The disconnect rates that you kind of seen some players having issues with Other than that, I've obviously been working still So I've not had a massive amount of time that I would have liked to but hopefully next week I will be starting streaming again Tuesdays Thursdays over on Twitch. That will be every week So come over there will be playing VGC every Tuesday evening and Thursday evening So do come by it'll be great to see you and hang out and play some Pokemon And I've got a first opponent playing a team of ex-cadrill Tyranitar Breaverie the Incineroar Rotomwash and Clefairy circle fairy another really strong redirection Pokemon that you're seeing quite a lot at the minute Obviously with that friend guard boosts the defensive capabilities of its partnering Pokemon. Um So we've got the sound call we've got speed control with the Breaverie We've got a kind of a trick room check in the Clefairy potentially because it can get access to after you and Helping out its partner Pokemon in the sloth situations and the Intimidate fake out support from the Incineroar and then the Rotom I'd say What are we gonna do here? Primarina is like really good if we can just kind of keep a check on the Rotom honestly And I think what we'll do is I would go for Arcanine Kind of put off leading Arcanine honestly because I just don't want to proc Let's go Primarina nimic you Barathorn and let's chuck the teetar in there Yeah, yeah, let's do that. I teetars pretty decent against most things on this team that aren't Dynamics Rotom and the ex-cadrill so Nice thing about really kind of approaching Clefairy is you because of the redirection to a little bit like how you approach Togus any of the redirection you kind of want to be able to Kind of put spread moods on the field as soon as possible to kind of get around the redirection Got lots of options in this team obviously heatwave on Arcanine I have a voice here with Primarina and the rock slide with the the Tyranitar. Okay, so Do we just max? The thing is that the worrying thing like what we could potentially do is hide max guys are into the bravery and go for a trick room Because that should get rid of the bird Unless it does max itself, but I don't really see it maxing I see something more like Tyranitar maxing here It's likely there's got a weakness policy That's like this kind of standard that you're seeing on Tyranitar. Maybe that the shift has the week's gone, but The bird the bird is the dynamax. Okay, so we've got max s food probably what we're looking at so I Don't mind this too much to be honest, especially if we get a trick room up, which we're likely to do It's unlikely that my opponent's got a way to actually knock mimic you out They can definitely break the disguise but T-tiles Especially not max not gonna be capable of taking down the mimic you over the door But we'll be able to say a lady a lovely lady primarina in action here. I love primarina It's such a great Pokemon very strong Pokemon as well VGC at the moment So we're gonna see the airstream, which is fine. It does a decent chunk of damage Boosting the speed, but that just helps us out like way more because I've had trick room Oh, no way. I want T-tiles. Okay. Well that kind of Scuppers our plans a little bit. I ran to taunt T-tiles 2014 Don't like this. All right, um, I think we're gonna have to at least mimic you still got a disguise, right? All right, did we get rid of the bird? Now, what do we get rid of the T-tiles? Mmm Because we'll take another airstream. It's kind of tempting to get rid of the T-tiles to be honest Like and then get dust clops onto the field Are we having the dust clops? Have we we need to we need to do something? Okay, okay. Okay, let's go Let's get a terrain in effect on the bird. I haven't brought dust clops It would have been a great Pokemon to bring here. Um, let's bring in pherothon because We're gonna need to reset if we want to go down a trick room. We're gonna have to reset this taunt Pherothon's likely to it's gonna take an airstream here No, okay, I don't know if we're gonna be able to take an attack on the T-tile. That's the problem And maybe be being better off going max guard Oh, it's fine. It's fine. I'm worried about dodging these rocks lads like a ninja. Okay I'll get rid of the bird I guess the problem is Really, um We can't get our trick rooms to up until the T-tiles remove from the field. Um But it will depend on at least you've got the rain up which helps support the first one a little bit now Body pressure take the tyrannotile down Okay, so we get a little bit fortunate. I like a lot fortunate there the rocks I missed we would have been probably better off Uh max guarding and then attacking with a mimic you into the bird But I don't know if we would have been able to take it down. That's the problem there Tauntita tauntita very good Very good. Okay incineroar coming in. Does that have access to that fake out? Of course Uh primarin isn't a a terrible position right now. Um, I'm kind of tempted to Honestly switch into Mimic you here and go body press Because we could potentially see a fake out superpower into the marathon, but it's more likely you probably see fake out and Rock slide to get rid of the primarina But I doubt I think they have to fake out the marathon here Yeah You see the superpower. That's not ideal, but it's not the end of the world. That's the rocks life We thought we will lose our disguise Um, but to be honest, this is probably better than losing mimmy uh the primarina And I know it's solo health at the minute and you think uh, maybe it was worth keeping it But if we can get our trick room up, it's gonna be it's gonna be decent against the majority of what my opponent's got right Are we faster than tyrannotile? I don't know if mimikyu is Potentially is you know, if it's not like we could kind of taunt it before it taunts us um And then switch into our own teetal Yeah, I'm gonna do that I'm gonna try and see it's gonna be like if we are slower then it's gonna mean we're gonna have to adjust our board again But I think we've got the pokemon to be able to do this if we can taunt the teetal then we can potentially Get rid of the incineroar with our own teetal and then get Our ferrithon in a really strong position under the trick room to start doing some some work Okay, so what we're gonna see Rotom The taunt's not so bad into the rotom actually because it does prevent Um the nasty plot and that's something that we don't really want to be having to worry about too much So I don't mind the taunt going into that slot at all We'll probably see a flare blitz From the incineroar into our taranatal. Oh taunt everything's got taunt This guy just doesn't want anything To get set up right. Well, huh? I think we can just start chucking out some rock slides to be honest with our taranatal With rotom if they want to go hydro pump into That's that's there enough and we could potentially double up into the rotom I think that's what we'll do like our main objective here if we get rid of the incineroar Just ferrithon wins this match like that's our clear win condition. So that's the thing we've got to be trying to aim for um If the incineroar switches out here then teetal comes in it's going to take Some decent damage with the rock slide and the main thing is we're not going to be propping a weakness policy If we see the teetal on the other side where the rotom is then it comes in and takes a player rough um Which can do some I don't expect it to pick up a knockout But it's going to put it in it in a dangerous range, you know So actually the fastest thing on the field the rotom is pretty slow. Okay hydro pump No Come on. We needed that to hit. We needed it to hit Ah, and then everything would have been gone So unfair when you won't When you want hydro pump to hit those odd occasions. Okay. I'm pointing. Oh, well, we get the flinch on there We're getting some serious roles here to be honest. Um Right. Well I think we're pretty safe from wrapping this one up like the incineroar's got a hard switch out here. I think um But if it does that's a thing like the the rotom Is risking proc and our weakness policy because with the signed up the uh, the hydro pump isn't going to be taken down our at our at our at our See, okay, they're up you connect We actually pick up the knockout. Okay with a crit. Okay RNG has been my friend will do Yeah, I feel kind of bad for this guy, but I think well, this is the thing it happens Doesn't it we have to accept it when it's against us and then Reap the rewards and enjoy it when it goes for us, you know, sometimes it happens like that Um, but we definitely had a clear game plan in mind. So Put aside the rng there for a minute. I think we would have been all right anyway. Um We don't really need to Half around too much We can just super power player up and that should lock this game up. No need for pherothon, but it was there It's what counts Rocker weakness polyp. There we go. Okay Um, the nice thing is that mimikyu is actually faster than tyranitar now We know and the next player rough will be able to pick up the knockout Um, but a teeter is also faster than this. So Just makes cleaning this one up That little bit easier, but very good game to my opponent. Um, like I say, we've got a few of the favorable roles there But we'll we'll take those. Um, but the team feels super nice Um, and I think just generally it's a it's a very good meta team at the minute that we've got from shade. So It's just it's nice to showcase these teams as well Just show the different options and that's a thing like this with these pokemon as well You don't need to run in a specific direction. There's so many different options You can run with this sort of team with these sort of cores as well at the moment Right, we've got our next opponent Number 265. So he's pretty high on the ladder And playing a team of draggapult, togakus, dusclops, milotic, incinero, and pherathon. So Um, kind of a similar call to what we're running, but with the melotic over the primarina. Um, I'm not the biggest fan Of of melotic. I I I know exactly why it's good and it's amazing competitively, but It doesn't mean I like it and probably a lot of you don't like it But probably a lot of you love it as well. Um, I prefer primarina But on to this match not on to my opinion Mimikyu Mimikyu's like pretty good here Just shutting down things that could potentially set up The yawn the hypnosis the coil stuff. Um, so mimikyu also threatens the draggapult as well, which is quite nice. Um Could we go tyranital maybe? Hmm There is the worry about the incinero, of course I think we probably need arcanine Just to check the the pherathon like if I'm completely honest, I'd feel a lot more comfortable with that there. Um And then prim I think Yeah, let's do that. Let's do that A big concern is going to be the melotic Um Because you don't want to start giving it free competitive boosts with our arcanine So we've got to be too careful And I guess that's why again like that combination of melotic Pherathon works really well because you're looking at probably the two more popular Fire types in the format incinero and arcanine both carry intimidate Just like the perfect partner for pherathon really isn't it? Um, we do see the melotic come out with the the dust drops Now, where do I go? Okay, we're gonna see lumberry and the policy. Um I mean, I'm gonna taunt the melotic and more I'm more concerned about that Setting up coils hypnosis All that sort of stuff then I am worried about um a burn from The dust globs or trick room going up to be honest Uh now do we max or do we just Maybe buy that time a little bit and get some damage on the board I could crunch the melotic, but then we could potentially drop its its defense and boost it's competitive So I don't really want to do that. We could just go for a trick room and just kind of hope we maybe get A flinch onto the dust globs get some chip damage onto the melotic, but it is switching out So we're gonna see the pherathon come in here. Just fine. Um We also land a taunt onto the pherathon which stops it eye and defencing which is pretty nice Do you get an intimidate onto both of our physical attackers here? Um You know the leech seed in the eye and defense are the things that you want to be able to kind of stop on character on like straight away Um the intimidates not ideal But tyranitar, but it does give us an opportunity to potentially switch into arcanine now And because everything on my opponent side of the field slower than our tyranitar Um, we are going to get it in before the melotic can come back onto the field Thankfully, which is which is a huge thing for us um But at the same time we're going to have to worry about getting um It's maybe worth going for the double switch here to be honest We're bringing arcanine on um in the q slot and we'll bring We'll bring in prim on our tyranitar because if the pherathon stays in here It's likely to go body press into the tyranitar So we're going to kind of try and soft that up as best as possible really um I'm just trying to figure out now what the best game plan is and we know the sixth pokemon my opponent It's it's how we tackle the melotic um Like tyranitar's max moves aren't ideal There's a parting shot. We're getting into primarina. We're going to see the the melo come back in for sure um Hopefully we don't see power from the pherathon into the tyranitar That's something I kind of forget about because it's like the body press is so prominent the minute you kind of forget that it does Have access to these super strong grass type attacks as well um That wouldn't be ideal for prim primarina at all Okay, so I know it's gonna get filled once again Uh, it's just a body press. Okay, so that's that's fair now You've got to suspect that the pherathon switches out here like Has to has to Now we could safeguard Switch back into tita expecting the incineroar to come back onto the field on the memory queue Hmm We could heat wave Like we could max in heat wave, but probably not gonna do is too much good. I'm gonna safeguard Now we could max here and go max guys are into the pherathon slot it's not gonna be It's so risky though. That's the thing like um I think we'll go for starfall into the melodic one max. We'll go starfall I know we are minus one special attack here But I feel at this stage I need to start getting damage Onto this melodic Potentially the next time we can get arcanine off the field because like arcanines are You key to beating that pherathon like you just don't want to even entertain losing it right now because if we do Our chances of beating the pherathon are pretty slim We're like them we're relying on like super power from taranatul, which we can't even max now So we get the safeguard so we don't need to worry about the hypnosis at least for the next five turns Body water, okay Arcanine does take that should poke the agua berry The max starfall. I mean we're kind of doubling up with our terrain and our safeguard I guess we could have we we probably should have went for the the max guys are there into the incineral like honestly Um because we're going after the the melodic So arcanine wasn't really into much danger It's just that I guess I was kind of hesitant because maybe the melodic maxed and went into the arcanine Okay, well, we'll get mimikyu onto the field now Um, and we'll go for that max guys are into the incineral It'd be interesting to see if it actually sticks around. I can't imagine it staying around on the field Okay, melodic gonna switch out. Oh, it's coming in Pherathon again We're actually gonna be able to okay. No one else Is it gonna be the taranatul potentially what am I talking about taranatul for they are No, they are dust globs. Okay I mean, we'll get some decent damage into the dust globs Okay, now I think we've got a taunt for dust globs. We want to stop the trick room right now. Um I'm just gonna max guys are again into the dust globs and potentially get it in k l range for the next turn Because then you expect it has to switch out for the melodic there After this otherwise it goes down Pherathon what you're gonna do leech seeds. Yeah makes sense I mean the one problem with the pherathon when you look at like that standard leech seed iron defense body press set Is it doesn't really have very many ways of hitting things like piranha for super effective damage So you don't need to be as scared to sit in front of it as you may otherwise be um, okay So I think We are gonna see melodic come in here. Um, so I'm just gonna hyper voice And play a rough that slot We could double it with uh, okay Okay, so we don't see it coming and just gonna let their dust globs go down just fair enough Like the melodic is definitely the one thing that we need to be able to to handle now body press to print Just get an extra damage onto it. I guess it's the one check that we've got for an incineral Well, it's not really though. We got tyranitar as well But as long as they got melodic out in the field, it kind of pins us with Being able to bring in alcanine Yeah, so melodic coming back in Um, let's taunt the pherathon We switch here. I don't think we do Um, it might be better if we just try and get some damage I mean we could hydro cannon Not gonna be really getting the most out of It'd be better off going moonblast because I'm scared of dropping it. I like crocking air Let's just go hydro cannon like we're gonna lose primarina this turn anyway We're trying to taunt the pherathon. Okay. Well Hmm, if we just went for the hydro cannon into the incineral That would have been ideal. Never mind. Never mind I do prevent any parting shots coming out and we still got our disguise intact There's a muddy water. So we're not even gonna get an attack off with prim And then we are gonna lose our disguise I feel like we can get titan in here and really make use of it to be honest. Um And we're not protected by I think we need to taunt the melodic Does it sort of coil or does it just go for the max? That's the question The point is still got access to the max And a max popcorn, haven't they Hmm because we could potentially just taunt we could taunt the melodic. Um Just to prevent any like it's definitely gonna be a coil set. I think that that would be my best bet We kind of want a muddy water to hit here because then our rock slides gonna do Crazy amounts of damage. It's the incineral switching out Fine Yeah, the melodic gonna max Okay, where are you attacking into though? If you're melodic if you go into tea tall, I don't think a max guy's that's gonna get us Um And a rock slide will do a nice chunk of damage Unless it's into the mimic you Yeah Okay, but we do take that that is not ideal Oh Okay Now we're totally pinned like I don't really know what we could have done. Otherwise like we're kind of relying my opponent's played the smart move there and not attack Into our tyrannotel um We need to taunt the marathon potentially Um We need to stand up But by doing that we're gonna there's like By getting the sand up we are gonna Basically proc the competitive on the melodic So it's like it's a bad turn at every point of this battle for us We'll taunt the marathon try and get around it that way Um, we've probably seen max guys are into tea tall that should proc our weakness policy Wow, they're not even doing that. They're just gonna go body press into tea tall. I think Yeah, because they don't kind in. Oh, no, it does go up the iron defense. All right Uh, we're playing on the back foot completely here Uh, yeah, we're just And they're not there is really very little we can do here. I think we have to Like you're kind of hoping Well, there is nothing there's nothing we can do here Incineroar comes in we're gonna see max guys It's gonna be into the arc an eye to get rid of it. So then ferrathon has the win con But they don't really need it even at this point Um You know and like looking back Already at this game like you can see where we like went completely wrong You know like my opponent was way more patient with their their dynamics turns than we were Um And by doing that it kind of puts them in a position.  I know a competitive boost of money water is 100 percent going to take down that tea tall In the rain But we can protect okay The problem is like is a Because we've been intimidated so plus one Super power will not be enough to get ferrathon and the body press will definitely get us. So whatever happens We can probably get the you can probably get the incident if we get a weakness policy boost survive We can definitely get the rock slide here into melodic. I just don't feel like we'll be able to take the boosted money water Single target as well in the rain. It's not happening The fastest the fastest drop in bar in history of vgc Okay, well very good game to my opponent They play that super well and kind of got us pinned into a position where we couldn't get ourselves out of Obviously the ferrathon melodic combination we talked about this start melodic I obviously mentioned or something that I prefer like personally like but You can see the use of it there and how good it is to kind of pin you upon it And we like we need the arcanine really in that situation to deal with it Because of how big of a threat it is But by doing that it really limits your ability to switch around the board as well because the melodic on the board Pretty much the whole time You've got to be really conscious about when you're switching in the arcanine to check the ferrathorn And to kind of force the switch out whilst also being able to react to deal with the melodic Which we just found extremely difficult and maybe we could have brought something like dust globs And got our weakness policy proct on our taranitor I don't know that it's a tricky tricky matchup that one And it just feels very clunky and hard to get around so And it's maybe how I've definitely probably how I've approached it There's probably better ways to do in it But I still feel like that combination is very tricky to get around without maybe A dedicated pokemon to be able to get rid of the melodic Maybe we used our own ferrathorn that would have been an idea to Probably give us a little bit more leverage there rather than relying on the arcanine We could have went for our body press setting up our own ferrathorn, especially with the rain from the primarina And thinking about that probably would have been the better way to go around it But anyway, we'll be back later in the week with more battles from this team Like I said earlier on in the episode, if you'd like to see me feature any of your teams any ideas that you have Do drop them down below in the comment section And I will definitely have a look at those and try and get as many of them featured as possible But yeah, looking forward to friday obviously the new rules come in So we'll have new content around the new gmax pokemon that were introduced The the gengar match up and the garbador as soon as possible Working on teams right now so get excited for next week. But for the remainder of this week We will have a more just series 3 stuff. So thanks for tuning in friends. Have a good one And I'll see you all for the next one till then. Bye. Bye


First of all, let me know if you can hear me. I am using a mic.  Hey Libby Shelly Melissa as I use them So this one is pink passion It's gonna be the red So I forgot that I haven't told you guys what I'm doing. I'm going to attempt to do a Rainbow ocean because I did an ocean for the class that we just taught here in Dallas and I love it. I love all things rainbowy Rainbow is always just make me happy. So What's up TG Michelle carries Shelly vamp? So I'm gonna be using all transparent tints from color obsession for this pieces Rainbow colors I'm gonna add abalone shell from resin art to all of them to give them a little bit of sparkle I'm using snow white From color obsession for my white and then I may add some color obsession Rich gold shimmer if I decide it means more gold which I may because I haven't done that in a while What's up meeks Nancy? Thank you guys for coming in and seeing what I'm up to today. It means so much to me I'm gonna try not to add too much tint To these because I don't want them to get dark because while they will always be transparent you can add enough to where they'll be really dark and I feel like the red is borderline on too dark. So I want them to be Just I want them to be bright. You know what I mean? Never mind the sound Jeff is airbrushing in the background. We love it What's up Linda? How you doing Carrie? Some lemon drop boop boop Trips me out every time I use these yellows because they look green before I mix them in That little dribble right there. Well, it's starting to go yellow now, but it looked green maybe I should have used bigger cups, but Live and learn what's up Joe. How are you doing? What's up Joseph? We got lemon drop tiger orange pink passion This may be so forever. Let me get a different green So I have a bunch of chartreuse greens in house, but the lids are Like stuck together forever Would you guys be interested in buying some? They're not stuck together forever. They're gonna take a little bit of finagling to get off the lids Believe this one is emerald green. It could be meadow. I can't read the label anymore. Oops. I'm great. How are you guys? Yes, it does No, it looks like he's got his bottom lip curled in I think one more drop into the green Yeah, the yellow Leaves a little bit to be desired sometimes When you're before you mix it, but once it's out, it looks really good Yeah, shelly I'm out of it. So until I get more in I'm actually using an old formula of Stone coat when they had the blue labels still I've been keeping one in my stash because it was Back before the formula changed. I'm using some of our ATD stir sticks. Please don't let that be too much purple If I had too much pigment to these I it probably ended up being like three drops, but it should have been not three drops Yeah, I'm gonna have to add a little bit more rosin to this one and then the blue For the purple. I'm using purple topaz and the blue. I'm using Bondi I'm glad you're here tg You holler at Natasha for me Awesome, I'm sure it's in route. I just actually I don't even have diamond coat on order It's ocean coat That I have on order isn't this the prettiest blue of ever. I agree And I'm gonna hold the gold aside just in case we decide not to use it Put some abalone in these Just a little because if you add too much, it'll make it opaque. I just want to add a little bit of sparkle. So Just a little sprinkle Dabble-do-ya Like it's barely noticeable without a flash on Tiger orange Yellows starting to look a little bit more yellow-y Good. I just put my whole finger in that. That's fun Saved it. I have some resin left in a cup just in case we decide to make more of any of the colors All right, green Nancy vamp is always down vamp down. All right, so I'm gonna start with the clear and this side What does vamp have a bell like on what's his name not better call salts the other one Heisenberg Breaking bad. What's up Sue? Oh, yeah Libby Is that every day or just some of the days? Okay, so we're gonna start with red And this is a little bit of a darker red. So I'm just gonna Put some out and then I'm gonna add more resin to that to lighten it up some orange yellow Purple and start purple in the deep so I can add a little bit more resin and lighten it up Just like I'm about to do with the red That's the best advice I can give if you think you Tinted a little bit too much. I need to lighten it. Just No, they're the only answer I can give you is to add more epoxy Didn't make much of a difference, but that's fine It's still a good red color even though it's called pink passion Red let's fill in the orange a little bit more You can even add an extra couple drips of pigment to darken it to have like the depth Color no That's not gonna work So I'm pouring on one of our substrates That has the frame around it So that when I tilt this around I don't have to worry about too much going off of My board Because I don't have that much room on this surface anyways Oops, I didn't mix that that's fun That'll just have to be a little swirly Okay So now I'm gonna have to pick a finger for each color to blend these out except for in the in between Red and then in between that can use the same finger Yellow out of fingers. I Got a pinky left And purple. I thought I wanted to like Melt them in to each other just slightly, but I'm not sure about that. What do you guys think? Not too much because I don't want to mix them But what are y'all's is thoughts is is also? Thank you guys so much for watching So JJ Jenny. I hope everyone hello, Sue. Hope everyone's having an awesome today If you haven't checked out the super sale the clearance sale that we have going on right now at artistilldebt.com you have 24 more hours and we just got more Avaloni and Something shooting star or Milky Way. We just got more of that in You like it as I have it cool. We'll roll with it So I'm gonna add my white just no white from color obsession I'm gonna add it to where it's just touching both the water and The sand that's represented in the piece Don't want to add too much white because then it'll cover All of your awesome color. I think I'm gonna add just an Extra wave kind of See what that looks like Blend no blend. I'm glad I'm not the only one Vamp down is is a total mood All right. Nope Where's my Concentrator nozzle I'm gonna use the That's not a wedding cake. It's a groom's cake because it's one stack short I'm gonna start by popping all the bubbles I'm making sure I have no crazy floaters that may interrupt the flow of my waves You don't want it to get too hot you just want to pop the bubble so that you can see what's bubbles and what isn't I Think we're good Too much heat will thin out your resin too much and make it all flow So now I'm gonna do a section at a time. This will for this size piece. I'm gonna do thirds. I'm gonna do To hear then to hear of pushing it. You'll see what I'm talking about And I put it on just slight tilt actually I'm gonna tilt it forward To start You know what I'm already full back here because this table is tilted slightly to the back so the whole point of my using this type of board it's kind of OBE because it's supposed to catch all of this but if it starts out full then it's gonna end up flowing out anyway So I'm just gonna scoot this back So that I can catch everything That may flow backwards Also Hi beep pop. What's up? Welcome. I'm not sure shelling So I'm gonna do the first third Pick up first third I'm gonna tilt and do small circles Let everything ripple backwards second third You can follow your wave all the way down if you want to But I'm just going to clean up those little mushroom clouds that have popped up After I let the resin cool down just a little bit may actually leave this Like this I think I like it Rolling off the back. I just get London. How are things over there? So in a moment, I'll show you guys what the piece looks like trying to decide if I want to have other colors break into Some of these colors, but I think I might just down here. So right now I'm just manipulating the resin with every clean finger I can find To break up those mushroom cloud bits and Already have to get a new set of gloves, but that is okay Mushrooms and rainbow soon it makes sense. I hear you Libby. I hear you. I hear you So, yeah, what I was saying earlier is we're having a sale on our products 10% on the whole website, but we have clearance items as well So I'm gonna hit the areas where I mix a little bit of the color with some heat as Soon as you can hold your hand over the piece and don't feel too much residual heat You're okay to continue manipulating it, but if you can feel a lot of heat then just Let it live for a minute So now I'm just blending out these The start of these waves. I guess the end of the wave really It's a lot of times it doesn't make sense if you know where the waves coming from because in the ocean You don't really see where it's coming from. You just see it once it's on shore And I'm gonna probably have to add some white here So because the purple has waves all the way to the edge But the red doesn't and so for it to be a cohesive piece all the way down. I'm gonna have to Add some right here as well By the time we start to spread the white creating the seafoam the residents already dense are curing it It's better this way. Sorry. Don't understand English. I just follow the live. So I don't know Alva's If you're asking if it's better for it to be denser, but with art coat it is a long working time and I wish I spoke whatever language you speak so that I can explain this to you or get clarity But definitely it depends on the working time. Thank you Claire for typing it so that hopefully they can put it into a translator but If you have a resin with a long working time or a long open time The amount of time that I use between when I mix the resin applied it and manipulated it is Not long enough for it to have cured up and enough to notice A couple specs in my red that I'm pulling out Probably just dried color from the lid Okay As you can see it's still really fluid. Let me pull a color It's still super fluid. It hasn't cured up Really to anything noticeable. It hasn't gotten hot yet or anything So let me see if I can add some wave over here without Messing up everything that we've created so far When you do a tilted wave like this It's easy to mess up what you already have Because once you hit something with more heat It kind of gets rid of what you've done Or it blurs what you've done there's just a little bit of Pull back from this edge because the amount of heat I use so I'm just gonna Add a little bit of white there I think that'll work. Thanks Robbie. I just sent out both your orders today by the way I think it works. I think it looks good There's already something that landed in it Chalker I don't think you have any tweezies over here Maybe I do. Nope false alarm If you ever find yourself without tweezers And you have some old popsicle sticks flowing around because you don't use them anymore because you use our reusable stir sticks Then just twist one until it breaks and then you can use that to Pull little hairs. You'll never see this hair on video Nope, never. Anyways, we got it and I need to edge up my white. I think because well, actually I think it looks okay I like my waves to have a white harsh line in the front Because I don't know why I just do I wonder if this resin will soak up into a pipette The answer is no I was gonna fill this area with the clear that I have left over but It's not cooperating. I guess I could put the white in there I'm not gonna do that It'll be fine Yeah, the skewers are great too Ask Bowie for Jeff's So let me turn on a flash and show you what we're working with What do you guys think? Trying to find there's the sparkle Thank you be pop. I try really want to help people to make the best ocean that They can As a mermaid anybody that appreciates the ocean Makes me happy. So So that's what my ocean waves look like. It's not focusing in some areas And obviously it looks better in person There's our Joseph. I appreciate that I am teaching another class in Seguin at the end of september I have the class listed on our website already and it will cover oceans if you want to Be a part of that class I encourage you to sign up We have sale right now on our website artists till death comm where you can get all the pigments We have some clearance items and you can get an extra 10 off if you use the code clearance And that's for another 24 hours So, yeah Super easy wave It took me 26 minutes including mixing colors to do it Anybody can do it. You just have to have the right materials. I prefer having the transparent Pigments from color obsession to do mine And as you can see you can use Color obsessions white for the wave. You don't have to use just resins, but I do usually use just resins Anyways, I hope you enjoyed it. Please subscribe if you haven't Feel free to ask any questions I'm happy to answer Shoot me an email if I didn't get to it on the live Feel free to rewatch it if you missed it and um Yeah, that's what Jeff's doing So, yeah, I will thank you Ida So, yeah, you guys are amazing. Please subscribe if you haven't If you want some videos on airbrush, just let us know Why I hope so Do you have to tell do you get the amount of cells that you have so you don't have to you can push further down with the heat gun But I like having the stretch Wave look But that's totally up to you If you wanted to you could just use the heat gun to just do have the ripple And that will probably push to here depending on your viscosity of your resin So maybe tomorrow I'll go back in and do another wave Up to here like two inches back If you guys want to see that just let me know Sure is Evelyn Yes, ma'am sue. I'll do another one Here Anyways, you guys have a nice night Tara, I hope you got an amazing heat gun. It makes a difference um, I find that the cheaper ones with just the The heat setting on the back is Better for me, but to each their own anyways I did spray paint the gold. I painted it white And then I spray painted the gold to here And then Hold my wave onto the shore Just airbrushing the same image That was on my son's Drag car. I love that Is Johnny a commission piece this small one is not But that's just a rehearsal piece for For this size Johnny cash. So that one will be available for purchase. The big one is commish Anyways, you guys have an awesome night. Be kind of one another could you never know what someone's going through? So you don't have to you just look like I caught you in the cookie jar Anyways, we'll see you guys tomorrow. Bye


Alright baby, it's time to get ourselves a team together and the stakes couldn't be higher. Ladies and gentlemen, we'll go back to this channel My name is Jack the Buster Ice Shinobi. I'm watching episode 84 of Dragon Ball Super today and in the last one We had a new member of the family join, Bola. Thanks to Whis and the, I guess, power to speed up pregnancy by a substantial amount. Bola went through a pretty comforting birthing process by Whis just kind of snapping the baby out of her. Now we're out to try to find our team of fighters for the Tournament of Power and, I mean, we gotta get the best of the best, man. If you're new to the channel, don't forget to drop us up and let's hop into it. I'm just excited to get Krillin on the team. Imagine Krillin just says no. He's busy that day. But that's what I was saying. Like, they have to- You guys never learn. They have to tell people the stakes that are at hand, man. They need to fight for their lives. There's still a lot of bad guys out there, so please be careful. Dude, what was this guy robbing her in the middle of the day for?  Wait till night time, bro. Rookie work, man. Aw, look at Krillin, the public servant. Bro, how much crime is occurring in a city that Krillin works in? What's going- Oh. That was a big one. Ooh. It's an omen, right? Let me see if I got this straight. Aw, the little pictures! So, there's a Tournament of Power, and it's a battle royale. So, did they tell him the stakes? With any universe is fighting in teams of ten. Right. Yeah, I might be able to- Let's go! Starting my return to martial arts in a cosmic tournament, kind of- Well, he already kind of got his start again in those two offices we watched. Honey, just say yes. Huh? What's the point of spending all that money on a- Ooh, that's a nice home gym, too. We don't just want Krillin. Eighteen. Oh, you too, yeah. We're about seventeen, too. I'm not into working for free. Guys, tell them the stakes! But why do you need me so bad? Because you're strong. Just for fun, right? No! Oh, my gosh! Just tell them that if we lose Grand Xen- Yes, tell them! Can't start a panic, dad. Aw, this is the worst decision they've ever made, ever. What's going on? Nothing! I get it's for, like, this sort of, like, overarching plot of them not telling people, but it's so frustrating. And you swear you're not just me making this up. Ha ha ha! That's exactly what they get!  How interesting. Wow! I had a boy Goku. I'll join your team, Goku. Let's go! Don't let her find out the truth. You're not just recruiting me because you really want 18s! Ha ha ha! No, Krillin! No! Sorry, Krillin. We need to do something first. Huh? Huh? This tournament's all about ring-out! Is this, like, a try-out? Oh, my gosh! He's making sure he's ready, ready. Why isn't 18 in there? Does she not have to do the try-out, either? I doubt it'll help our team much. Oh! Dad must want him for a reason. It's his fighting spirit! You still haven't told me everything. Oh! I can see the serious-looking Gohan's eyes. This is for more than just bragging. She is, uh, perceptive. Oh, look! The guys are just about ready to start fighting. Come on, Krillin! Let's see your new strategy! I said he was good at lying. I take it all back. All right. Come on, Krillin! You got this, buddy! This tournament killing stuff is gonna be a lot of limits on what we can do! I'm not sure you fully appreciate what that means. Ha ha ha ha! What does that mean? Hi, Daddy! Aw. He's fighting for her. Oh, nice! Using your daughter for a distraction! Oh, my God! He put him in this place fast! Okay, this is actually kind of a banger. But he can't fly, though. Is that a jump? Or are they not going by, like, strictly the rules of this tournament yet? I mean, this is technically not a weapon. The brightest solar flare! She had, like, three glasses, like, pairs of glasses packed. Wait! Krillin is kind of cracked for that! He won! Ha ha ha! And a boy! Like, it's nothing! They called that one player! Solar flare times 100! That's an amazing technique. I got some other new techniques up my sleeve. Nice! We'll find out in the tournament. Now, it's my turn to push you. Okay, Goku, hang on. Chill. Don't hurt him. Gohan, for only being in the driver's seat again in terms of fighting for such a short period of time, he's taking it really into his own hands. He's like, yeah, we're gonna try him out. Make sure he's ready! I guess he knows the stakes, though. I really do lack experience. Yeah, he knows his, uh, his place. Hey, don't mention it. At least Gohan's still, like, you know, hasn't lost his humility. What say we take this somewhere else and have our own back? Let me guess, like, Grand Canyon area. Let me guess. Oh, wait, the city? Guys! On top of Satan building? Why?! I mean, I'm all for a change of scenery. This is a pretty sick stage. Aw, this is cool. Goku and Krillin sparring. Krillin hasn't recovered yet from his fight with Gohan.  You wouldn't have put my training to use. He's, like, sparring. You're not getting away with it a second time. He said he's got more moves, 18!  Oh, yeah, I know. Aw. More than you ever could. Oh, bro, whenever he looked down on like that, he kind of looked, like, uh, like black. I have, like, PTSD. I just don't enjoy having to see my husband depressed after learning how outmatched he is. Aw. But you said he'd be okay. Mom, why do you think he's gonna lose so bad? Okay, he's gonna win. Let's go, Krillin. Don't let him win this. She's gonna at least pretend to have confidence in him. We know that Krillin is nowhere near Goku's level, and Krillin knows that. I think it's about how outmatched he is. How ready he is. This reminds me of our fight way back at the World Martial Arts Tournament. Aw, yeah, there it is. I like how they still give OG like it's flowers, basically. Pay homage to the groundwork. Like, Goku's giving Krillin the respect that he deserves, too. As a fighter and as a friend.  Krillin's gonna give it his all. The Rogue guys probably try to do it without, without flying, too. Yeah, these are technically, they could use them because they're not weapons. It's their abilities, their latent abilities. They're not flying either. I love that the rain is making them, like, slide all around the place, too. Sick. Atta boy, Krillin. Are you? He didn't, oh, he's behind a rock. He has to be. That, that there he is. He's doing better than I expected. Yeah, to say the least. Wait a few seconds and you'll see. He's planting a bomb! Oh my gosh. Not alls are gonna be just as important. Yeah, it's gonna be a chess match between everybody. I like this, this sort of trial for the team, though. Oh, is that it? Oh, nope. I thought Goku had seen enough. Okay, this is unnecessary. He really wants to see what Krillin would do, though. Against, like, actually being outmatched opponent. Because there will be people probably in the tournament stronger than Goku in Super Saiyan Blue. He has to see him maintain his mental. Doesn't stand a chance, yep. Got to stand your ground. Man, stand up, I'm concentrating! Yep, he has to maintain. He can't freak out, can't panic or anything. Even if he knows he's outmatched. Titled in this episode, Goku kills Krillin?  Goku, no! Is this the best idea? Can the same building withstand this? Oh, look how much bigger Goku's beam is. But it's the fact that Krillin even gives it a shot and stands up against... Brother! Yeah, she's gonna stop it. I'm shocked that Krillin was even able to get some pushback against it. He maintains. Yeah, see, it doesn't bother him. I like when they show real emotions like that. Yeah, because it'll be a battle royale. True. You can't just raw dog your opponent. I think it's quite obvious, Krillin. They're so cute. Dang, Krillin! He said, bring your boy in here. Nah, I think that's enough. Yeah, I was gonna say he's seen enough. He threw a Kamehameha wave against him and blew. The clouds are breaking too. Aww. Somewhere Vegeta, like, his ears perked up. We never want to actually say that to Goku, but you know what I mean. He would still be offended. Goku already cheated on him with Hit. This just makes it even worse. Alright, nah. He's correct, our couple. I like how he says number 18, number 17. Oh. Oh, that's sweet. Yeah, I would imagine there's some way to find him. Okay, is that the rider actually, like, speaking through Goku? Because where's Dende half the time? I know he's not the most important character, but come on, man. Oh, Ranger! Aw, so there he is! The building, the ring. Alright, so we have another member on the team. Well, two new members on the team. And I really like how they did this episode. It did remind me a lot of the two episodes that we had with Krillin where he needed to get back into the swing of things, and now I realize how much more important those two episodes were. Because if they had just gone to this without anything in terms of, like, bringing Krillin back into the swing of things, it would have felt a little bit more, like, disjointed, I guess. Because it would have been a very, like, harsh transition from just regular life to fighting for your life again. Not to say he doesn't have a cup, but, like, this is very, very different. And those two episodes where he regained his confidence again as a fighter, even against opponents that are much stronger than him, were very important and now are much more important, considering the tournament power, again, will probably have fighters equal to, if not stronger than Goku. And that's what's more important than raw power, is the teamwork and the fact that you have the spirit, the will to go on. But that's been my reaction to episode 84 of Dragon Ball Super. Drop us some of the channel if you're new, and I'll catch you in the next one. Peace, peace.


So I'm here to talk about data mapper My tag line here is the persistence framework get into a little bit more details about why that is, but um That's what I'm calling it So who am I first of all I work for engineering probably know who that is I work on jQuery. I work on Merle. I work on data mapper Which is really cool because I have commit access to pretty much all the things I use on a day-to-day basis It works out pretty nicely I guess I forgot Whoops So what is data mapper Data mapper is an ORM It's like actor record Drops into rails like actor record Or more and let's take a look at what the architecture looks like you have your marble rails, which is the application You then have data mapper Which talks to Merle rails? You then have an adapter which DRB is one of the adapters and it's just a unified database adapter You can have YAML or I don't know something else that someone's gonna write later And those talk And then you have your database your set of YAML files or the something else that someone may create at some later point And that's the data store. So the first thing that you should notice right off the bat is that unlike something like sequel Data mapper is designed out of the box to work on arbitrary data stores. The API is designed around accessing data rather than creating a good API for SQL and that's sort of the main Difference between that and some of the other alternatives There's some caveats about this presentation. The first one is that data mapper is a work in progress So oh nine should be released like some early next week So some of the things that I'm talking about here are going to be released in oh nine and are not out yet So I have code here that will not run today, but we'll run tomorrow That's sort of the way data mapper is right now I'm also assuming active record functionality. So I'm not talking about here's how you do an active record And here's a slightly different way you do it in data mapper I'm not going to talk about how to do it has many or has one or belongs to or has many through Not going to talk about migrations because all these things Exists an active record and have either identical or slightly different implementations in data mapper and I Don't have enough time to go through all the little nuances. So I'm going to talk about What's cool about data mapper above and beyond what exists in active record? Also, there's code in this presentation a lot of code I tried to keep the code to things that you would actually do in a real application So it's like here's how you would do data mapper in your application I tried to keep the examples as simple as possible. So I don't have an entire model anywhere It's just like little stub models and then whatever I'm talking about And Lush very there's no code. That's in data mapper itself. So it's there's a lot of code But I hope that will not be a problem So what is data mapper look like what it look like to make a query in data mapper? So Looks like this There's no find so instead of find all and find first is just a find and a first accessor You can see that there's some cool stuff here like the symbols take greater than not Less than equals a bunch of different things like that to make it more easy to do complex queries without having to Resort to a condition string And so what does this create an SQL? It creates this so you can see that the Not arrow array got converted into not in Bob Jones The age is bigger than 30. So Basically, this gets you into more ruby-esque writing of cool SQL stuff without having to write SQL as much What else is true This is not true in in active record right in active record every time you get a new object from the database It's a new Ruby object and even though it has the same ID and I guess you could override equals equals to save it As the same ID. It's the same object or something They aren't the same Ruby object in data mapper There's something called an identity map which basically means when you do zoo dot first it goes and gets it It gets the ID I think the idea is one and then it gets stored in memory as we know that the that zoo one is this object And the next time you go to get it it pulls it out of the identity map Which is really cool for things like you have you pulled all the zoos and all the animals Separately and now you want to go get an animal zoo. Let's say right so It has a belongs to something you have the foreign key an active record even though you might have the zoo in memory You still can't go and get you have to go ask the database for it again Whereas in data mapper you have you just say dot zoo and it will go say oh zoo number two I have that memory here right so you have a situation where you have you don't have to do as many queries and you have this which If you've run into problems Entailing it you will know that it's cool. I'm the good So how about this this is like a big no-no an active record because it's like an n plus one query problem, right? How many queries isn't is it in data mapper? It's two queries in data mapper The reason for that is that what data mapper does is when you say zoo dot all it says okay Here's a set of zoos big array right, but it's not an array. It's a special set object And when you go and call animals on any one of them What data mapper will do is say oh it looks like you're starting to Start calling some associations from inside of the object. You probably want all them And in fact 99% of the time that that's true right you're gonna do something like this So what happens is we have this thing called strategic eager loading Which means that you don't you pretty much eliminate the n plus one problem and even for something like a nested tree We're an active record that might be like an absurd number of queries Right because it has to keep asking for each child in data mapper It's the number of queries you have to do to get a complete nested tree is equal to the number of levels of the nested tree So five there's five levels or whatever not, you know some absurd number So after we talk about eager loading, there's also a lazy loading technique that we use in data mapper Let's take a look at some code here I'm gonna talk first about each little piece here just to let you know what's going on first of all We have include data mapper resource you may notice that we aren't We aren't doing post inherits from data mapper base right where you would do an active record What this means is that you could take any object that you you'll have and make it persistable, right? So basically all you have to do is you take your you take an object that you have out in the world You include data mapper resource and now all you have to do is specify which instance variables you want to have persist because in data mapper instance variables are the same thing as properties and You can then save a an arbitrary object. It may inherit from something You don't have to worry about the fact that it doesn't inherit from data mapper base You know may inherit from some random thing and you can now persist whatever you want Property ID fix num serial truth So this is the basic setup of a data mapper property. You say what its name is you say what class it is We'll get into that a little bit more later and you say in this case that it's a serial column Title as a string And here's what I was getting out with the lazy loading you can say lazy true what lazy true means is that When you load the when you load the thing the first time get all the things that aren't lazy loaded Right so get in this case the ID and the title then if you actually ask for the body then go get it This is really useful if you have a situation where you have an index page Which has a lot of things that you want to get but then some other page where you want the whole thing Right so in the index page, you're not going to necessarily load all these columns They may be big text columns Maybe God forbid you have images in the database You can lazy load these things and only get them when you need them And of course Because it's in a set once you start lazy loading one thing it goes and gets everything in one query So it's not like you have to constantly do queries every time you try to get a lazy loaded element from one object That's in a set Okay, so that's the end Okay, let's take a look at some What data mapper maps to what's equal so in this case we had a lazy loaded column So when we did posts equals posts at all it said select ID title from posts Right let's assume that it returns two objects that have IDs one and two and Then you do post up first stop body That'll do select body from posts where ID is in one two right in other words We got two objects back there on our set now go get the lazy loaded column because I now ask for it Right, but if I do this The only sequel query that gets called is the exact same sequel query right because once I have it once I have the identity map and I can just get the other ones out when I need them there's also a really cool thing called lazy loaded grouping and what that means is that we have Property title string and instead of saying lazy to you say lazy details and here you say the body has lazy details And what that means is that when any lazy loaded column gets asked for that's in a group in this case details It'll get all the lazy loaded columns that are in that group So in this case, I have some for some reason I have a database a table that I only want to get the ID for the index Maybe it's for an API or something and then as soon as I do dot title It'll get me the title and the body because they're in the same lazy loaded group So that's lazy loading. There's those are some nice enhancements that help you build more efficient things Then you could easily build when you have to stick with either, you know Writing raw sequel or writing the little Ruby that you have access to Let's talk a little bit about You know the fact that you can go off the golden path in data mapper You're not trapped in either. It's a default or the crazy, you know writing everything raw sequel yourself. So This is a stripped-down data mapper model This is what I'm what I want to talk about which is that you can specify for any class There's a new repository called legacy which you define elsewhere and we'll Talk a little bit how you do that in a little later But you can say for the legacy database the title property has a field of weird thing, right? Weird thing so What this allows you to do is it allows you have a database for which all the model logic is the same But the mapping you might have a legacy database or you know yaml a list of yaml data Yammel files or whatever store you want that have different conventions for what the names are right? So you can say is when I do this with a default It's just a title do the regular data mapper defaults Which are the same as the active record defaults, but if I want to call the legacy repository Then it has a special field and you don't have to care about this You can just say dot title and it'll know oh it has this weird field name And you obviously we might be able to do this for any as many as you want The nice thing about this is that if you have a bunch of fields and only some of them are different You can specify the regular one all them on the top level and then what goes inside of repository legacy is just overrides So if you have 10 property names And only two of them have special weird names in the legacy database.  Posts in the legacy repository so it looks like this post at all and you can specify repository in the conditions hash or This is equivalent repository legacy do post all The top one is really syntactic sugar for the bottom one the bottom one You would use it for example You had a bunch of things to do in the legacy database and you don't want to have to keep specifying repository legacy, right? So now you say repository legacy while I'm in here all the models that I talk about use the legacy repository to access them So similarly Post at all by default means the same thing as that right so post at all Looks like oh, it's just post at all same thing as active record behind the scenes. It's identical to this and this Basically, there's a default repository that if you don't specify it becomes that And I guess for most cases in most like new projects. You wouldn't even care about this. You would just omit the Default all the time and you'd be done But if you had a legacy database you want to import data from or occasionally use You'd be able to specify in this case. I want to use the default in this case. I want to use the legacy one Okay, now we have naming conventions. So in active record your you have you have to either decide all my tables are Name the way that active record wants them to be named with plurals or whatever or I have to do set table name on every table Right in data map or you can specify what the naming convention for your table is so there are some built-in ones like underscored or underscored and pluralized But you can do this really cool other thing which is say the naming convention is a lambda And you can specify let's say your table name always starts with TBL It's some weird legacy thing and that's just what it is so you can specify that it's table class that camel case and All the tables the first time that they have to figure out what table they are it'll run that lambda against the class name And you're done Okay You can also specify for a given a given model that you want the default repository to be something different Just by overriding the default default repository name method. So for instance, you might have a bunch of classes that are Basically only there to exist for legacy purposes It's not something that you're converting legacy into new But you just have these legacy databases that you want to have access to so in this case You want to specify legacy is the one I mean when I say post at all, right? I don't mean to go to the default Do you get a nice API for importing data which is just post copy legacy default and you get an even cooler API If you want to only import some data in which you can use those same selectors that you saw earlier for Deciding in queries what to use you can say that here So post copy legacy to default and created that created as greater than a year ago So now I'm only copying over the post from legacy database that are a year or more old Yes, sir It so there's basically depends on the repository that we use Today it generates basically an insert statement for every single one, but if the repository supports it We're definitely gonna have multiple insert support so that you can do that and then have it generate like one giant insert statement for everything but I'm sorry You're gonna have Yeah, and so just a reminder you can do this field thing which means that you basically can copy over from a legacy to the default Database without having to specify what the mapping looks like because you've already specified it So that's importing of data Yes, so What he asked was is it possible for different repositories to have different back ends? Yes, the Pretty much the mission here is to make data mapper not care about what the back end is so you can have a SQLite database as your legacy database or postgres database is your legacy database and the and the mysql database as your default database or something it basically as long as you stick with Using data mapper queries it puts everything through the thin Thin eye of data mapper and then converts it back on the way out So it takes the data puts it into normalized form and then puts it back out the other end So we have We also have custom types so in active record you're used to seeing you have basically whatever types of database supports And maybe you can do some serialized thing for objects, right? So we have custom types first. What primitives do we have? We have true class string text float fix num big decimal daytime date object in class and basically the repository Stores are required to implement how each of these should be handled, right? So True and false and string and text and float all these are just required to be specified on the store How they should be serialized and then the store will handle the serialization and deserialization So those are those are all supported by default things like object would probably be implemented by either Marshall load and dump or Or Yama load and dump But yeah, these are all supported by default and the ones that come with Data mapper and any other adapters that were created would simply have to implement the same load and dump routines But custom types go beyond that so what if I have a post and I want to specify some special things like My author is actually a full name and my details are in CSV, right? And what I want to do is I want to be able to while I'm working with the object in the arm I want it to look like CSV or an array form and I want it to look like an array from the name first and last But I don't want to have to deal with any of the messy details I just want the database to know that last comma first gets deserialized into an array of first comma last, right? So warning, there's a bunch of code ahead And it's just sort of for purpose of illustration It's not necessarily not necessary that you necessarily understand all the pieces in each routine But I guess I just have it so Here's how you would implement full name. This is trivial, obviously the top piece has a primitive string So you say in the database, this is a string and it has a size of 100 And you can use you might be able to use any of the other primitives that we defined on the previous slide And you just have to specify a load routine which says how I want to handle it coming in from the database What I wanted to do and a dump routine which says I'm gonna have an array. How do I want to serialize it into the database? Similarly CSV Works the same way. You just have to specify load and dump routine what primitive it's based on and Then what does the create look like so it looks like this We have a create we say title which is a string but then we get to say author which is an array Which might come really in handy if you have a form and you can specify you know first and last name and you can use the Properties of forms to make it come in as an array and then you don't have to worry about doing any kind of serialization logic on Your own it will just get handled for you and then metadata That's just something that needs to get converted into a CSV file And what does that look like in the database? Looks like this right. It looks like whatever the dump routine said that it should do Also, it's lazy parsed what lazy parsing means is just That we take the data From the database unless you lazy load it so let's say you didn't lazy load it We take the data out of the database as a string and until you actually ask for dot CSV dot details or whatever It stays as text in memory But as soon as you start asking to do anything with it it becomes the right thing that means that if you have Difficult routines that take some RAM or CPU. You don't have to worry about the fact that every time you're using these special Classes, I just want to build an index and I want an index page. I don't want to have to do all these I don't want to undo the CSV or I don't want to care about the name at this point You don't have to until you actually ask for it and then it will unparse it Okay, we also have custom stores So stores are URIs they look something like this My sequel colon slash slash user at local host and you set them up like this So data mapper dot setup default my sequel colon slash slash local user at local host And this is how the database knows when you say repository legacy repository default or repository, whatever This is how the database knows what you mean, right? So you don't you set it up once you say here's what the default database means and then every time in in Data mapper that you use the default database It'll know to access this repository data mapper has connection pools which means that it's thread safe and there's you don't have to worry about Connecting to my to my sequel database is the data mapper will handle the connection pool for you This is not finalized, but the database that yaml will probably look something like this. So you'll specify Something similar to what you have right now and we'll get converted into those URIs. Here's what you might say legacy sqlite But custom stores go beyond that you might have something like this yaml colon slash slash slash fixtures Maybe at some point in the future ssh plus yaml colon slash slash fixtures Obviously this is probably not going to get into 1.0 But the the simplicity of the way that the store API works means that it's relatively trivial to take Make any sort of store and make it work So as long as you have a way of getting getting at data and having it implement those types that we talked about earlier You can pretty much do anything Sam who wrote data mapper was joking yesterday about a you know IRC colon slash slash data store Yeah, it basically the the options are pretty limitless and there isn't a ton of code that you have to implement So that's cool For tests you probably would have something like this right and now that you now that you have a yaml store You no longer have to actually Assuming you don't have any sql on your database or in your models There's no reason to have to actually take the fixtures and load them into any database right you can just use data mapper to access The yaml store yourself directly right and yaml stores will support things like joins associations All the features that are supported by regular databases will be supported They will probably be too slow to use any legitimate production sense But for tests they'll probably be more than fast enough and this will save you some of the horrors of having to deal with Loading and dumping fixtures in and out of the database And yeah adapter yaml which is cool So how do you make fixtures? The obvious answer is something like this right post a copy default fixtures You won't even have to specify any sort of repository information in the models because yaml will support all the default stuff So the field names will just be whatever and the table names will just be file name dot yaml So you'll have a table will basically be a file with a bunch of yaml documents inside of it Which will be records And you'll simply be able to do post a copy default fixtures, and you have your fixtures you're done right But there will probably be a rake DB copy fixtures that does that for you It occurs I have more stuff But it occurs to me that I'm well behind well ahead of schedule So I'll probably open everything up to questions shortly So validations I said I wasn't going to talk about things that are in active record, but there's this works Sufficiently different that it's worth talking about So we have class product right and we have property title string and What's cool is that that automatically generates a validates length of right So the database has some amount of characters that string means right and if you just do that in active record what that Produces is a string and if you try to save to that it will work and truncate right in data mapper That will automatically produce a validation that says don't be bigger than whatever it is a database accepts You're able to say auto validations arrow false if you don't want that behavior, but typically you do want that behavior We also have property price string this thing over here No noble false means validates presence of and then there's just cool thing called validation context Which lets you say I only care about this validation it when you say valid for purchase question mark Right, so say I have a price and I want to be able to import all this data from a legacy database And I don't want it to fail because there's a validation called you know Validates presence of price, but I don't want people to be able to buy the thing until I have a price in there Right, so now there's validate or valid question mark, which will do the default validations But there's also valid for purchase question mark Which will check all the validations that have validation context purchase listed, right? Which is pretty cool We also have you can say format arrow D that thing or you could have which produces a validates format of Or you can say It's a proc which takes a string and that also produces a validates format of we can say Number and that may have a length of two to ten which produces the validates of length of and We may just reiterating you can do special things like in this case. I only care about the number on import For some reason so I can have a valid for import situation Now we just showed how you can do it in line the same old validates length of all these present stuff stuff still works With basically the same Cool additions that are available like the proc form format But you can do them with the old validates length of and you can still do supply context in this case You say when import which produces valid for import so About a half an hour in which means I'll take questions So I guess any questions Basically what happens is Sorry, he said yeah, you do if you do find one it gets put into a memorization table called an identity map What would cause it to be reset? so data mapper Basically tracks if you do if you save something it'll track it in an identity map as well So if I modify the if I modify property, there's a dirty attribute that will get set So you the dirty question mark it's dirty and then when I actually go and save it all it does is persist it back but it doesn't It doesn't actually Do anything to the object except say it's no longer dirty so There really there's no reason for it to be reset if you're doing something with Where you're actually using the connection pool and there's multiple users Then what you should do is you should you should exit out of your session So data mapper allows you to say like I want this stuff to happen inside an identity map session So if you're actually expecting people to be changing data that's not in your process You should put things inside of data mapper sessions And then the identity map will get closed out after you leave the session and then loaded and again So basically the identity map should be identical to whatever's in the in the database except for that case and then You should be careful. Yes Right The thing that the the saving grace of active record in general is just that these things happen very fast, right? So when you click on when you make a save from a form Active record opens up does something extremely fast saves it and you're done so any Active record has it has a problem where if two people save it roughly the same time They just clobber over each other and there's no locking or anything like that and data mapper Will have optimistic locking which is good, but The reason why that doesn't really come up very often is because it happens so fast. So similarly identity maps in Rails or MIRB apps are very short lived, right? So what will happen is both the rails and MIRB plugins will say we'll put the identity map session block around your Around your request. So as soon as you start the request, it'll go do the active record It'll go get the thing copy identity map You'll be able to do other things that will make use of the identity map go return the request and then kill the identity map So it's really useful for a block of code that's inside of one request It will it unless you want it to persist for your entire the lifetime of your app Because you're only one process something that would not be the default anybody else So Suffice it to say that there there is a connection pool that Doesn't require a thread for connections. So you have a bunch of connections that get reused That are in the process Connections Yes So yeah So the mapper will run a j ruby except for the data objects that are be framework. So a couple of months ago I was looking at the state of ruby database drivers and noticed that they have all been written like more than five years ago by Japanese dudes they have no consistency whatsoever The half of a big chunks of active record are dedicated purely to making them have what should be a similar interface So I wrote I use the swig interface to build new database drivers for My sequel sequel item postgres which became the data mapper core Drivers and then they recently rewrote those to not use swig anymore. So they're pure C So those drivers won't run in j ruby What would need to happen the things that the do that are be driver project was created pure simply to make a really simple API So the API basically is open a connection close a connection make a new query Open a reader once you have a reader go forward with a forward-only cursor until you're done be able to get the fields from each At each point in the record set. I think that's the entire API what I just said So it wouldn't be hard to write a JDBC adapter that complied with the DRB interface and then it would work Maybe it did at one point though Yes It might be Profiles every use Yeah, so there's basically Threaded mode and the quote-unquote unthreaded mode the the one that is thread safe, which people should be using actually Makes a new thread per connection, which is way way worse right data mapper has a number of threads But there's a limited number of connections and it's able to reuse them I guess if you didn't want to have thread safety you could optimize for something else, but That one of the missions of data mappers to be able to be thread safe and to be able to run inside of Merb without the mutex So That's a trade-off we made Other questions Your Yeah, so let me go back to that slide a long long time ago So yeah, you can specify in your that your test database should use YAML adapter or if someone wrote an in-memory adapter That would work too. So basically this the storage adapters and data mapper are also very have a very small API They basically just need to implement like all and first and some other joining things So you could probably you would pretty easily write a simple in-memory adapter that was designed to do Effectively what people do when they're mocking out the database And then just say that that's the adapter to use and as long as that adapter wasn't burdened with table names needing to be something special Or column names need to be something special, which they shouldn't be then it would just work Data mapper supports fine by SQL and the same conditions hash that active record does but the goal is to make that extreme much more rare, right and In addition to that API that I showed earlier with the GT and LT and that stuff There's also going to be an API in 1.0. That's going to support being able to go do associations, so let me see if I could pull up a text-mate window So let me so the API is going to look is that too small All right, so it's going to look something like zoo that all Animals The other example is a more cleaner so animal that all zoo or animal that zoo And then you'll be able to specify some stuff in here like you could do or you could say You know if it was a has one association that was a number you'd be able to use the same greater than for So you'll be able to do I Hesitate to say ambition style queries because it's not as ambitious as ambition, but you'll be able to do a lot of Join style queries with an API that's similar to the rest of datamapper and and because of that Have adapters like in-memory adapters or yaml adapters that work. So yeah, it's definitely We consider it a bug if there is something that requires SQL that's that's common enough that a lot of people are doing it Right. We're trying to avoid you having to write SQL Primarily because we want to support other storage strategies, right? No There's one auto migration strategy, which is destructive at the moment and basically what auto migrations does is Kills your database goes through all your models go through those properties And then makes new tables, right? If you had a dump your development data into a yaml store you could trivially then reload the data in and I would That's the recommended strategy for development, right instead of having to keep a database That's crafty and is like and is old that way new developers could just run the auto migrations Instead of having to run a hundred migrations that happen to exist from the past that have no bearing on the present And you and that way you keep your data separate in yaml files You load them in and because you can do you know zoo dot copy default comma yaml It should be trivial to do it, right? So that's the auto migration strategy There's a myth. There's a goal for us to have non-destructive auto migrations Hobo and Django both have this which basically allows you to keep some track of what you've done in the past And when you say auto migrate it'll say oh it looks like you've deleted a column and added a column That probably means you want to rename the column So then you know is that what you want to do and if you say yes, it'll like make migrations for you So that's not going to be in one one prop one oh probably but will probably be in a one dot X release So that's auto migrations. The other migration strategy is basically Rails migrations with a couple of exceptions one of them is that they're not required to be in numbered files they still have numbers but the numbers are specified together with the migration and You can have multiple migrations with the same number as long as they're not dependent on each other So if me and my friend who are both working on the same project both check into migration number seven And they aren't dependent on each other, which probably they aren't since we're working separately Act data mapper will just say oh you you haven't done migration number seven named foo yet do it Oh, you haven't done migration number seven named bar yet do it This also allows you to add back migrations if you would want to like you're ready up to migration number 20 But you want to go and add a new migration number three for some reason you'd be able to do that and data mapper would say oh You haven't run migration number three named bar yet. So now run it Basically these are just Simplifiers over a lot of problems people have with rails migrations mainly that since their number and files People have problems working in teams. So that solves that but otherwise We use we don't use the X dot style So rails does you know create table do X X dot add column blah blah blah. We use the style. That's like you know create table do add column Which was in sexy migrations originally and we also support the syntax for Modifying tables that's modified table and then you don't have to specify the table name throughout all the columns So if you want to modify ten columns in a table you just say you know Modified table table name do and then you have the column modification without having to specify the table. So I don't know it's just Just a bunch the regular classic migrations are rails migrations minus a lot of the hurt that people have cool So pretty much everything that I had in this presentation with the exception of the YAML plus SSH is Will be in 1.0. Oh nine should be released This week ish The main things that are missing in oh nine that will be in 1.0 are There's some association stuff like that syntax that I that syntax I showed earlier in text mate and there's where there's going to be has many through through through through and Belongs to through which are not yet in oh nine, but we'll be in 1.0 Pretty much everything I showed on the slides will be in oh nine I actually I in doing these slides I spoke to Sam last night who's Writing a lot of the code these days and said can I put this on a slide?  And he said yes, so pretty much everything that's in these slides will be in 1.0. Oh nine rather There's a git repository which you can download which is datamap record and you can install you do rake install And it will install but at the moment it's not considered stable enough to be supplanting the very stable datamapper o3 so Yeah, if you do gem install datamapper, it'll still install three if you want oh nine for now You got a rake install it from git, but There will probably be a gem install datamapper minus minus source datamapper that'll work soon And then eventually we'll get pushed to before other questions Yes, sir Right now, so oh nine will have My sequel sequel light postgres and yaml I Think we'll probably support whatever a Combination of what people asked for between oh nine and one oh and what's easy to implement between one oh nine and one Oh, but the API like I said is very simple so The anticipation is that weird back ends that we don't want to support will still exist and be supported by other people who want to The DORB project will probably separately add new back ends like Oracle so DORB is like a C API for For databases and that's a whole different animal than the other storage API, right? So the storage API is really simple It just needs you to implement how to find things and buy conditions, right? Which is trivial but these the eight once you have SQL in the mix you have to figure out how to Open readers and general and send SQL to them and get record sets back That's different Yes Yes, I Would say That There are some And some for when we fake it at the moment the one oh release will definitely Have the one oh release that comes with the data data objects are be library will support placeholders Let me reiterate the question. He says there's support for placeholders in you know, basically passing in a bunch of parameters with the query There's some Databases for which this is extremely efficient and some for which it's a wash Basically, the goal is that right now the API lets you say when you when you execute a query It lets you pass in parameters if we support it right now It'll pass it and using the placeholder API and if we don't it'll just generate the query with interpolation The goal is to to the extent that such things are supported to support it natively and it will that Yes So So to the extent that a API actually supports a forward-only cursor that's more efficient than the alternative we support it in the C API Postgres has a weird C API where it supports a cursor But then it makes you load the whole thing into memory anyway, which is weird so we don't do the cursor API there because it's silly but Yeah, if there's a cursor like the oracle driver will probably have this stuff in it and to the extent that there's a simple way of doing cursors Our AP the DOR B API is cursor oriented So it's trivial to pass it through if it's supportive anybody else Yes, sir Oh A lot of people have done it hobo does it and Django does it but I Don't know we it seems to be an obvious idea when you're really thinking about the problem space and a lot of people have come up with it but There's definitely the plans for out for the one that we're doing is Pretty like pretty wicked. It does more things than some of the other ones It does better inferencing about what you mean by things And obviously there's I haven't really talked about this But implicit in this whole conversation is the fact that data mapper makes you say what the fields are and I guess the active record People that may seem weird But there's a lot of leverage out of it the fact that you could specify Validations in line that you can do auto migrations that you can specify You can specify things that other that in rails have to be separate lines in line Let's you have like a one definitive place for here's the schema Here's what it means in the database and here's what it means to my to my model Which ends up being really powerful if at first makes you queasy because you're used to active record not making you have to do it Anybody else I guess that's it. There's nobody else