Hey, what's up? My name is Sonali. Welcome to a new vlog. We are at the new house. It is actually Halloween day, which is exciting because it's gonna be my first time doing trick or treating as like a homeowner. And I believe that there's a bunch of kids in our neighborhood. So hopefully we have a good turnout. We actually bought like two giant candy bags because if they're left with me and Ryan, we will do some damage and that would not be good. We're starting off this vlog with a very exciting project. I'm finally going to be testing out some paint samples for the kitchen cabinets. I also don't think I ever mentioned what color of the walls we went with and it is Swiss coffee in gilding or glidden. I think that's the brand of the paint. And I'm so happy we went with this. Kind of like a warmer white, especially when the sun hits it, kind of just brings out those warmer tones. As you can tell behind me, our cabinets are currently gray. They are from Ikea and it sucks because I saw what model they were and they literally come in a white. They just choose the gray. So we're fixing it. And I'm not even going with just white. We're going to try to go for this off white creamy color. I've been seeing it all over Pinterest and I'm obsessed with it. And especially with our warmer white walls, I think it'll look really good. But of course, we're going to try and test it out before we paint all of them. And paint samples are like $7 each, which is kind of annoying because I don't even need this much paint. I just literally need like maybe an eighth of it to like see if I want to do it. Cause you know, paint samples that you get in the Home Depot, just on the paper can sometimes be a lot different than actual, you know, paint at home. So I just want to make sure I'm going to love it. And I don't want any regrets. We have three samples already sanded it down. We actually found this sample cabinet thing in the garage and it's coming in clutch right now. Also, I'm not like spray gunning it just because I just really need to see the color and I don't really care about the texture. So I'm just going to use these little spongy things really feel like all of these paints are going to look so similar to you guys because I mean, I feel like I wouldn't be able to tell between these two if I stood for enough back. I don't even know if there is a really big difference. I highly recommend if you are painting, definitely get the samples because I was going to go with one color for the walls and then Mimo was like, you should probably get a sample of a couple and we decided to go with one that I didn't think I was going to like. So definitely always get samples even though there's seven dollars it could save you a lot of money in the end. So this one is Polish Pearl. And I remember Ryan really liking this one. It's just like looking really similar to that one. And that is the color of our walls which would be fine. You know, to do the same color but I kind of want something more creamy and a little bit darker. So the next one is going to be cottage white. I think this might be the darkest out of all of them. This really looks exactly like that one too. My God, how am I going to decide? This is what it looks like when it's all dried. I know you guys cannot tell pretty much at all on the camera but I do think I like the middle one the best. This one's too yellow, this one's too peachy and this is like in the middle. Guys, we're on our next project already. Mimo, what are we doing? We started with the top of the mantle. Basically the foundation is shifted and so this whole top of the mantle shifted. Can you guys tell? So basically he's going to like pick it up. I don't know, are you cutting the side right now? The sides now, exactly. And so he's going to pick up the top of the mantle and just literally scoot it over. Back over I guess. Whoa. Okay, fun. We started moving all this back in there. Mimo, are you getting rid of this whole thing? I think, yeah. So I have to buy a new? Okay, we put it back. Oh, put it back? I think we should put it back. Yeah, I'm like, ah. No, no, no, no, no. Yeah. You just have to redo it, re-glue it. Yeah, I made it re-glue it. It may look nice without one. I like it but then I'm also like if they're, because I also wanted like a mantle that kind of came off the wall a little bit more so I can put stuff on it. But before your repairs it just look online real quick and see what you can find and how fast it can repair. Yeah, yeah. Okay. Mimo's saying that now we have to take the bottom off like the legs off because it needs to be repaired back there. Right, I want these, yeah. So, like do I just buy a new one? A whole new one or keep that one? You like this one? Yeah. Let me do a quick Google search. Thank you. Okay, I need to move this one. Can I look at anything with this one? Do I send it to being one size first? That's why she may have to hold something on it. Mimo can fix anything and everything. And Ryan showed up as a farmer. Happy Halloween, Sophie. But you can't have any chocolate. Ryan got this cowboy hat at a gift store, yeah, on 6th Street recently and it actually looks really good on him and looks good on me. So, it's our hat now. But this is his outfit of the day. Where'd you get the car heart? Overall, it's like on car heart? Yeah, they're like used from the car heart website. I mean, they're cool. White tail, something, lock neck. I got my farm shoes on. What if they actually think you're like just a cowboy, a Texan cowboy and this is like your look? Cause this is like the first time we're gonna be meeting a lot of our neighbors. Not our neighbors, but our- What do you mean? Like geeks and like straws in the middle of my mouth. Yeah. They're not normal clothes, just in case I thought you were gonna wear like a mask I think you said. Well, that's why I asked you if you left already cause I forgot we had that whole Halloween bag from last year. I could have worn like a wig or something. Ryan got your Roco for dinner. I'm so freaking excited. It's like sushi hand rolls and I'm starving. So let's go eat. We got two giant bags of candy, chocolate and the sour stuff. His friend got these at Sam's Club and it was a lot cheaper. I think it was like 20 per bag, right? So I think I'm gonna just do like half and half. I just have this like random bowl I got from the house. This is a hollywood bag that we're passing out candy at least. I was a loser and I think I literally went to retreating my freshman year of hollywood. Look how delicious. Ryan's literally taking all the Reese's out so he can have them.  That is his number one kryptonite, would you say? My super power? Yeah, sure. Yeah, I'll see. It's his time. Ew. I'm gonna feel gross. I think that gets me in. Ew. Ew. Nice. What are you doing yours on? What? Oh my God, it smells so bad. No, it smells real bad.  It is a pumpkin. It's the same weight as the pumpkin was when it wasn't run. One different trash bag. You want the trash bag? Yeah. We'll never do that again. Not again. Carving pumpkins? Ew. I'm alive. Super treaters. No. We literally go grab the pumpkin candy. You can't be so desperate. You can't just hang out here, Ryan. Ryan, I know we're here. You should be loosing it. Close the door. Close the door. You're desperate. Getting ready to go to my friend's murder mystery party. We were actually supposed to do it on Halloween weekend, but her and her boyfriend got sick, so we all just like postponed it to this weekend. I'm doing a little of a lip. And I wanted to talk to you guys because today is a big day.  Mm-hmm. But today's a very sentimental day because tomorrow, take it away. No, today's our last night in our apartment.  Once you come fairly on parents thing where it doesn't show the, was I fairly on parents? I feel like a couple of cartoons from that. It's Tom and Jerry. Tom and Jerry. No, like that other one. I can't think of it. It's our last night in our apartment, at least sleeping there. And it's the night before we move into this house. It's Christmas Eve. It's really Christmas Eve. It doesn't feel real. So I'm being here, though. It's kind of weird. Yeah. It also echoes a lot. I can't wait to have furniture and be like not echoing. Yes. Ryan's super excited about his office. He already bought a rug. He bought a new Big Mac. I don't think I showed that, right? We can do- Whole hamburgers for my room. Whole hamburger? Big Mac. Oh. Anyways, he's really excited. So we'll have to do like a full reveal for his office.  I have three golf bags, one travel bag, and then I have like 12 putters or something, so. But whatever. He wants it. I've got a whole house echoing now. I hear exactly what we're gonna have. Yeah. Like accounts. Yeah. I'm excited to finally get all our friends right here and finally have somewhere to sit because this whole time we've been sitting on like lawn chairs that we brought over to the house like the first day. And I mean like they're fine, but sometimes you just wanna like lay down, you know what I mean? So I'm very excited about putting our couch in here, but we're also kind of nervous because we did like a rough measurement. And like yeah, we think our couch is gonna be too big, which when we measured it, we were like there's no way our couch is this big. So we're nervous about that. Also another update is that today my dream mirror was supposed to get delivered, which it did get delivered. And then he like said he would unbox it. For me, I guess they like don't do that, but it's a good thing he freaking did because it was broken. Like the mirror was cracked at the top. It was like the smallest crack, but I spent a lot of money on this mirror and I'm not taking a broken mirror. So anyways. I was broken right in the middle of the room. Oh yeah. A lot of corner bounds. Yeah, we did get them on sale. But like this one's a CB21. We got that one out like home goods or something. I was like, I'll just get a discount because it's broken, but like this one it's a CB21 mirror. I'm spending a lot of money on it. And I want it to be like really, you know, pristine and new, obviously. Anyways, so I had to like message the customer service and they're like, okay, well once that like warehouse updates that it was broken, then we can like see about getting you sent new another one. I was like, all right.  Honestly, I think I could probably pick it up in store because I did pay for delivery and it was, I don't know if I had it. Just keep it in your car though isn't it? That's right, yeah. Anyway, so any other updates that you can think of? I mean, Mimo and Ms. Brenda left yesterday, was it yesterday? Yeah. And we cannot thank Mimo enough. Like he pretty much did the whole house except for the floors, but he did the baseboard. So like, you know, half of the floors. There's a little bit of work left, but. There's definitely like a lot more things we can do, but I have to remind myself to like slow down. Now that the floors are done, that's like those are our priority because then, you know, we would be able to put furniture in the paint.  Next priority is gonna be these cabinets because I just hate that they're gray now that everything else is done. I know Ryan likes them, but. Even the bottom one is staying gray. No. Down here? No. Fine. No. I'm still trying to find my paint though. A lot of people on my Instagram stories are telling me to go to Sherwin Williams and I know that's like a standalone store, so I have to like make a trip out there, but I just didn't really love the samples I got from Home Depot, so. Do you show the empty house door in the blog? Yeah, well, before renovations.  Do you guys wanna see it? I guess we can. Can run through it really quick. We're supposed to leave for this murder. I don't know if you wanna see it right now. Yeah, comment below right now. We have to leave for this murder mystery party, but let's do it quickly. Little breakfast and up. I'm so excited about this, but I wanna get like all of our furniture in and kind of see what we need and probably order it during Black Friday. We definitely need a breakfast and up table. Back here is the pantry and laundry room. Mimo took off that door and honestly, it's kind of nice because it's just like more open, but I obviously wanna finish the tile there. Need to pick out that, get that done. I wanna do a butler's pantry here. We still need to buy a washer and dryer, which we should definitely get that done this weekend because we're gonna live here. It's not gonna be fun without washer and dryer. So here's the kitchen and then we're going into the living room. My special chair that I've been sitting on for the last two weeks. This is what it looks like. The floors look so freaking good. I'm so happy we chose this color and this fan really like brings it all in together and Mimo fixed this fireplace. I'll try to put a before and after picture right here, but basically the entire top part was shifted over because there was some foundation issues and it's on straight now and it's beautiful. I really like it. Like I liked it at first, but now I'm like in love with the fireplace. Coming over here, we have the stairs. We have our dining room, which I don't know, we'll probably get a dining room to table like the last thing we do. I'm not like stressing about it. And then the stairs. We still need to stain the little end caps and then I need to find a guide to like, just I don't know, cover this up.  Okay, why haven't you done it then? You don't know what you want. I want, I literally just want something simple. Bring it on. Babe, I showed you so many pictures. Mimo was gonna do it, but he didn't have enough time, but I just like literally want something flat and just like a blank wall. Oh, thank you for turning on the lights. So we're gonna go up here and Mimo put on this sconce over here. So it was pretty outdated, the one that was on here already. Look at Sophie's new bed. It's so cute. And she like immediately fell in love with it. I just got her from Amazon. Here's the loft. The recess lighting looks so good everywhere. And you can change the lights. Ooh, do you want to show them that? Cause I forgot to show them. Is that the music part? Not the music, but just like the app. No, go on the actual app. Yeah, that's it. I think they're done here too. This is the den. The den, the loft, you mean? Yeah. Well, that's called den on here, but color. When do you guys want to do it? Red. Yeah, red. So cool. So vibe-y. I love it. There's some lights like this too, but. Yeah. This is candlelight and you can mess it up. And then you can like dim them too, which is nice. But basically we can only do it from our phone cause we didn't add dimmers onto the switches, but like whatever, cause we're always with our phones. So it should be fine. Going into my office. We have another one of those fans and like it's a fan with the light fixture in it. So it's really nice because the fans like hidden. So whenever I film content, like an ugly fan won't be like on top of my head, which is awesome. And then I put four lights in here for recess lights. And the mirror would have been there, but RIP to the broken mirror and whoever broke it. Not wishing bad luck, but you know, and then this is Ryan's office. He just went in one little light. Not kind of regretting it to be honest. Yeah.  You can always get like a lamp. I told him he needs to get a mini ring light to put on his big light. Yeah, I thought you were gonna put the dresser a little bit there. I thought like my dresser. Yeah, I don't want to. Have at it. Yeah. I'm gonna dim this. He wants to put his like putters on the wall and then put his golf bags in here. It's gonna be a man cave. And then he also has this Georgia diploma that he wants to hang up. And all the stuff that she said was ugly. You gotta put up stuff.   I don't know. They're just like don't go together. Look at the space. Really excited about the spot. I don't really know exactly what we're gonna put in here, but we're definitely gonna do like two accent chairs, a TV. Coffee table. The first set they would now. Or TVs. So. La Croix Frades. The rhinestream, which I'm gonna be mad about. The La Croix before that. Show your fan. Oh yeah, this is a new fan. We got our hands on. It's beautiful.  In one of my other vlogs, I can't remember if this one or the other one, but I did stain one of the rods. The stain was too orange and I didn't really like it. So we're just gonna put that rod in Ryan's closet. But I really want to stain the wood rods before we put it up and we didn't get to it. So we're gonna have to do that this weekend because I want to put it in the clothes like right away, you know? It's time to go to the murder mystery party. So I'm gonna say bye to you guys, but I'll see you guys in the moving vlog. I'm so excited for it all. And if you guys want more real-time updates, follow my Instagram and my TikTok. So underscore gnarly without G and I will see you guys in the next one. Bye.


The study investigated developmental changes in high-frequency oscillation, HFO, and modulation index, MI, a coupling measure between HFO and slow wave phase, using subdural EEG signals from 8251 non-epileptic electrode sites in 114 patients who achieved seizure control following receptive epilepsy surgery. The study found that occipital lobe had higher MI across all ages, with occipital MI increasing notably during early childhood. The cortical areas exhibiting MI co-growth were connected via the vertical occipital fasciculi and posterior callousal fibres. While occipital HFO rate showed no significant age association, the temporal, frontal, and parietal lobes exhibited an age-inversed HFO rate. The study also found that Zscore normalized MI and HFO rate were higher at seizure-onset versus non-epileptic electrode sites, and has publicly shared its intracranial EEG data to enable investigators to validate MI and HFO-centric presurgical evaluations to identify the epileptogenic zone. This article was authored by Kazuki Sakakura, Nooto Kuroda, Masaki Sonoda, and others. We are article.tv, links in the description below.


One nice way to keep players engaged in the game is to have challenges as we reward them, and nothing better as a reward than an asset that you should use real money to push it otherwise. So in this video we are going to see how we can create in-game events and using Lootlocker's trigger API we are going to reward players with assets. Here on Moonshiza when we complete a thousand points we reward players with a new skin. New skin unlock it? Cancer sent. So let's get started. So here we are on the Lootlocker's dashboard and to find the trigger system we go to systems triggers and right at the center of the screen we can see that we have the new trigger button here so let's create a new one and let's give it a name new skin unlock it game name you can see that we have this option how many times this will trigger right so this can trigger an unlimited amount of time this is especially useful if you are giving experience rewards but since we are giving assets I think that is most reasonable to use the limited one and let's add some rewards for the player so on the rewards add new add reward button you can see that we have experience and assets so let's add a new asset to this reward and I will use this area sent I will add a new one add a new reward tarot add a new one gemini add a new one and cancer and now we have four rewards right so I think that is reasonable to use these four times because you can see that we have this grant all option if we left this unchecked Lootlocker's will internally try to randomize each one of these rewards and will try to exclude the ones that the players already have so it will try to give players always a new reward that they don't have yet this is very cool if we check this Lootlocker will give all the rewards that we set to the players so I think that is reasonable to limit this trigger to trigger only four times let's save that and now we have a new trigger available let's see how we can use this on the game because we are going to use the Triggers API the Lootlockers Triggers API for that let's go there so to emit a trigger from our game is quite simple we have to make a post request a post HTTP request to this URL with the the content of the request with the request body being a JSON dictionary with a name key with trigger name as a value and we are going to get as a response a dictionary a JSON file with some information with some useful data especially telling that the trigger was successfully triggered and the green tape assets this will be important for us because we are going to access the the green tape asset name and display this to players you can see that right below here we have a list a listing trigger trigger trigger events that we can access as well and this can be useful if you have an achievement system so let's say we we create some events in the game and each event will be a trigger and we want to list all the achievements that the player already achieved we can create an interface to display that so you can see that making this HTTP request will give us a JSON dictionary as a response with a trigger key that is an array with all the triggers that the player already achieved with all the triggers that the player already triggered so let's go to the game to see how we can actually emit this ingot engine how we can use this ingot engine so I have Mochizer opened here and the way that I implemented the triggers on my game is that I have a node called score achievement that has an HP request as a child node and let's open its script so this is what it uses to compare the scores I have a score singleton that I connect on the ready function and once it every time the player scores it emits a new signal I checked if the the current score is greater than the is greater or equal than the scores we showed this variable right here then I call the method trigger skin unlocked and this is the important part for us so I will fold this and fold that and I will open the trigger skin unlock method here the first thing that it does is that it goes to this achievement label if we saw the first video you will remember that I have a network state label right this is very similar to that one I will open that here so basically it has a label it is a canvas so it gets always on the front of everything else and it has a label a timer and achieve a animation node that makes it appear or disappear and it has a text that any node can can change back to our score achievement node it changes this text to new skin unlocked and show the achievement label then it disconnects the score singleton signal just to prevent it from happening many times in the the same play session and then we finally reach the important part for us so we have here the URL that we just saw in the API this is how we access the trigger system and the reader we have the content type application slash json and the x session token remember this is always important to to parse as the the reader and then we use the method post and the body we have a dictionary with a name key that has the new skin unlocked as its value and then we make the hp request using these variables and passing false for the SSL certification using method and we convert the request body to a json file then we use for the response and use the the fourth index of this signal the request completed signal as the value of this response variable then we parse it from a json file because this will be converted to a dictionary and to get access to the asset name that asset that the player just earned I created a new variable that goes to the response granted asset remember granted assets remember that on the API we get a dictionary that has some keys and one of these keys is the granted assets right and it is an array so we go to the first index of this array and we find the name of this asset so if we if we search on the API we have the structure of the assets object that this is retrieving for us there are many keys that we can access for instance there is a ID key that we can access as well but for the sake of this system here we just need to know the asset name then we change the as achievement label text to be a new skin unlock it and we use a placeholder and we replace this placeholder value to be the asset name that we just gather and we convert it to a lower case and then we yield for a timer that we create from using this method to timeout and we hide the achievement label afterwards so just for testing purposes I will go to this score if we test this we have an authenticated login let's test this this trigger yeah new skin unlock it tauro scent let's go back see the skins and there we have it I have the tauro scent skin unlock it for this player we just saw how we can use in-game events to bring players some assets right but this doesn't actually give us any money how we can make money without games so in the next video we are going to see how we can use a purchase and building api to get a token that loot the locker we'll use to unlock some assets on players inventory see you there thank you so much for watching keep developing and until next time


This is covering the spread part of the Fandall podcast network a lot of blowouts across the opening round of the 2023 NFL playoffs and you know, it's a bit of a bummer But I thought all those games were still pretty entertaining despite the fact the final margins were not that close and looking ahead to the divisional round We could see something similar because a lot of large spreads on the board right now, but also it's fun teams It's fun quarterbacks and to me I can get behind that even if it's not a super super tight game looking at the spreads right now Fandall sportsbook three of the four games have spreads of six or larger I still think we'll have some fun though We're gonna break down all four games for today taking a look at what my numbers say about those four divisional round games And trying to identify but receive value for this weekend over at Fandall sportsbook welcome on into covering the spread That's right here on the Fandall podcast network and Fandall research My name is Jim saw this I am a managing editor of digital media for Fandall research here to give my first look at the Divisional round of the NFL playoffs breaking down where is the value across this week? Over at Fandall sports will do all that here in just one second But first a reminder to make sure you're subscribed to covering the spread wherever you get your podcast You're still here every week day Monday through Friday breaking down the NFL Getting ready for that talking some NBA the NHL of course as well all right here in this same podcast feed So go search for covering the spread wherever you get your podcast You can also find us on the Fandall YouTube page and Fandall TV plus also quick shout out for our Heat check fantasy podcast myself branding a duo because we've revamped the format to get betting discussion in there We had Brandon here on the show uncovering the spread in the past. We're now gonna shift those discussions with Brandon over to the PGA Daily fantasy podcast as well. It's me and Brandon. Don't throw our favorite Windbats non-outrights and all that for each week's event. That's on the number fire daily fantasy podcast We'd every Tuesday afternoon also over on Fandall TV plus if you want Brandon's insights on betting golf Which you should pretty good week for him and myself this past week for the Sony open You can find those on the number fire daily fantasy podcast Every Tuesday afternoon you can also find that over on Fandall TV plus when it comes to the NFL playoffs You've got to win one game at a time when you bet the NFL playoffs on Fandall one game can mean a lot of wins Fandall America's number one sportsbook has all your favorite bets like the money line and spread There's all sorts of prop bets like quarterback passing yards or who will score the first touchdown plus every day There's an NFL playoff game Fandall is giving all customers a no sweat same game parlay That means you combine all your bets for a chance at a bigger payday You'll get bonus bets back if your SGP doesn't win make every moment more with Fandall an official sportsbook partner of the NFL Must be 21 plus and president select states Minimum three leg parlay required refund issued is non-controllable bonus bets which expire seven days after receipt max refund $5 unless otherwise specified Restrictions apply see terms at sportsbook dot Fandall calm Fandall is offering online sports waging in Kansas under an agreement with Kansas Star Casino LLC gambling problem Call 1-800 gambler over the Fandall comm slash RG in Colorado, Iowa, Kentucky, Michigan, New Jersey, Ohio, Pennsylvania Illinois, Tennessee, Virginia and Vermont call 1-800 next step or text next step to 533-42 in Arizona<PHONE_NUMBER> or the ccpg.org slash tag naked 109 with it in Indiana 105 to 240 700 for the case gambling help.com in Kansas 1877 770 stop in Louisiana visit MD gambling health at Oregon, Maryland 100 gambler net in West Virginia or call 1-800 522 4700 in y oming Let's dig in now to all four divisional round games over at Fandall sports But can try to identify we can find some value for this week over at Fandall sports But let's begin things the Saturday afternoon game That is a Texans at the Ravens right now at Fandall sportsbook spread here is eight and a half minus 115 on the Ravens at that eight and a half and the total is 45 and a half and I would say right now a lot of places have this game nine and a half So Fandall is higher in the Texans than most sportsbook The sportsbooks are and as you know the Texans are a team I've bet a ton this year and I do see value on them right now. No shocker This is the 17th time this year My model has shown value in the Texans money line and that hasn't always gone great obviously because they were a team That had to win week 18 to make the playoffs But I do think they are a legitimately good football team and the reason I think that my numbers tend to be higher than The most is because I wait passing efficiency a lot and they've been a very efficient passing team When CJ Stroud has been out there Stroud's a point to passing net expected points per drop-back this year Lee gathers point oh seven so Stroud more than double almost triple Lee gathers in that regard and That number has been high even without tanked out. So I buy into Stroud and that's why I can feel okay Buying in the Texans even in the spot where they are a legitimate underdogs Like they should be underdogs in this game like there's no doubt about that for sure But even if they do fall behind I think Stroud moved the football against this Ravens team It's just hard for me to justify saying take the at eight and a half right now when there's leads to somewhat decent chance I can get a nine or nine and a half later on So if you like me like the Texans I'd wait There is a shot this number lengthens given how good and how fun the Ravens are and I think we'll see a lot of interest in the Raven side Throughout this week. So just based on what the market is saying right now The market says to me we are more likely to get this game to move Toward the Ravens where the spread lengthens they end to move towards the Texans So I would keep an eye on the Texans right now the money line plus three ten do show value there as well We might not get nine and a half to do something. We'll talk about here in a second But even nine is really nice. So if you like the Texans, I'd play wait and see here I think we'll get a nine at fan duel pretty soon given that there are nines nine and a half elsewhere Don't tend to see it that big of a gap in the market But I would hold off if you like the Texans to kind of see what you can get later on The key factor at play that I alluded to and why maybe this game does tighten is weather Right now the wind speed projections at baltimore are at 16 miles per hour And that's a big number and the Texans are a dome team playing outdoors That's a bigger downgrade for them than a lot of teams That's why the bet I like most in this game right now is the under at 45 and a half That's minus 115 a fandal now 45 is kind of a No man's land kind of number because it's not a key number 47 is 44 is but it's between those two numbers so It's just kind of floating there I had this number under 44 slightly under 44 and 44 is a key number So I think what we'll see here is this total will come down As people realize that wind speed projection is as high as it is So even at minus 115, I do think that the under is the right play in this game That also does give me a bit of wiggle room in case the Texans offense Does come back to earth a bit from where they've been recently So for right now my lone recommendation here for Texans versus Ravens is the under But I would keep an eye on that spread If things move toward baltimore during the week and we can get that at nine and nine and a half Then I'd be okay jumping on it and when doing so I'd spread that out Putting most of it on the spread but then some of the money line as well because I do show value there too And I think the Texans are live to win this game despite the fact. I very much respect the Ravens Again, this is all because of how efficient cj stroud and this passing offense have been So taking the under right now and then keeping tabs on the Texans plus eight and half to see if we get a better number on that later on this week Second game on saturday is the Packers at the 49ers right now fandal sportsbook It is the 49ers minus nine and a half and the total in this game is 50 And I am really excited for this game because the 49ers offense is obviously elite and the Packers defense is not And the spread here is justifiably large which correlates with an over as well But the Packers offense Should also be able to move the ball too Even if they fall behind like let's say christian mccaffrey goes nuts diva sandal goes bananas early on this game and 49ers get up early I think that the Packers will be able to move the ball in a negative game script and put some points on the board Jordan love is up to point two one passing that expected points per drop back this year and We saw what he did last week with all his guys totally healthy luke musgrave being back christian watson being back Having all those pass catchers legitimately like seven deep not even including erin jones That's a pretty good passing offense. So i'm only locked in the total in this game It's at 50 right now at fandal sportsbook I have 51.8 personally and 50 is not a key number 51 is though and i've got the number above that and we get a win on 51 If it goes to that so i actually do think the over Is the right play in this game Even with my faith in the Packers offense i have this spread at 9.4 points Which is right in line with market and big spreads correlate with higher totals so That's a point in our favor I think both sides as mentioned should be able to score for all four quarters Regardless of who winds up getting an early lead in this game. That's a good recipe for an over Right now windsby projections in santa clara are at eight miles per hour. That's higher than usual for that stadium You'll see a lot of like five or four miles per hour out there So maybe it comes down a bit if that number were to go up I'd be a bit bummed because I don't have a ton of wiggle room on this over here personally So if it does go up, that would be a bit of a buzzkill for sure But with where it stands right now I like it. I think there is a shot that maybe that wind does go down a bit too So from a an entertainment perspective betting overs is fun So it's a fun bet, but also my model likes it too. It's not just vibe space. Like this is actually one where my model says Yeah, it's okay. You can take the over here So I'd be vigilant If it seems like we'll get 49 and a half then hold out Because that would be a better number obviously, but again 50 is not a key number Some spots are 50 and a half already some pretty sharp books are 50 and a half don't see a lot of 49 and a half But I saw that's why I'm fine taking the 50 right now I think it's more likely to see we see 50 and a half than 49 and a half I fan dual for this game. So No interest in the side here given. I've got a 9.4 points. I think the market's got this one pretty well pegged I get to just sit back and cheer for a fun game and kind of see What goes down here? So over 50 for packers versus 49ers my one bet in that game Let's shift now and talk about the two sunday games beginning with the uh The cast off bowl It is the buccaneers and the lions baker may feel versus jared golf to my favorite quarterbacks in football for better or for worse Love these two guys and excited to see them both one of them in the nsc championship game Depending on who wins this one right now fangirls sportsbook lions are six point favorites total is 48 and a half and It's very interesting because neither defense is good Both offenses can throw the football pretty efficiently both rush defenses are pretty good too So I think we're gonna see Baker mayfield and jared golf let rip a little bit and I love that I think that's going to be a very fun game That's not enough for me to bed and over though. Uh, even with this game being the lone dome game on the slate I've got the total of 47.8. It's a 48 and a half right now So if it were to get to 50 and plug an under, you know, kind of, you know Plug your nose kind of thing and take the under at that point, but I don't see that happening I don't think we'll see this total move a ton. So no action for me on the total right now I do show a bit of value in the bux money line And it's because their passing offense has been efficient The money line right now plus 220 Detroit's past defense has not been efficient And my model cares a lot about that plus the bucks are a very good team against the rush, which means the lions Game plan will be a bit different than what we've seen out of them recently They've been very ground and poundy in a good way. Like I think it's been inefficient game plan from them to be pretty run heavy That may now work in this specific matchup against the buccaneers I think they'll be fine because because they've got good passing game pieces They're pretty healthy right now It's sam la porta getting an extra week to rest up But it is a different flavor of defense than what we've gotten for the lions recently I don't think I'm going to take the money line right now for the bucks My model has their win odds at 33.7 percent. They're implied odds of plus 220 are 31.3 percent That is an edge for sure But it's not a huge one and I bet we see more interest in Detroit here than Tampa Bay looking at earlier I don't look at Ticket spreads and stuff like that because I don't want that to influence my betting because like it doesn't actually influence the handicap at all Like what the public is doing does not change what these two offenses and two defense will do So I don't really care typically what the ticket count looks like but in this spot where I've got slim value I'm okay looking at it because it can potentially tell me If I'll get a better number on the bucks later on right now at fandals sports But 82 the money on the spread is on the lions at minus six So that to me says I'm more likely to get a better number on the bucks later on this week And if I like let's say that doesn't happen like let's say the buck short into plus 200 It wasn't a big value for me to begin with there's not a ton of fomo for me with the money line so If it were to lengthen that out a bit more then I could change my mind There is a reason that my model shows value in this game But for right now I am okay standing pat just to kind of enjoying this game and getting Props on it later and just watching my two large adult sons jared golf and banker made to hopefully Rip a lot of efficient passes in this game. So no bet for me for bucking years versus lions Final game of sunday is the chiefs at the bills And you couldn't finish things off on a better note and then that right now fandals sports book bills are two and a half point favorites minus 122 on the two and a half there so Effectively kind of three the total is a 46 and a half for this game very interesting game because the chief's offense finally Showed life last week against the dolphins patrick mahomes in that game Had his most efficient passing offense game since week 12 in terms of passing that expected points per drop back It was also his fifth best game of the entire year By passing at n e p per drop back and that came in Uh pretty high wins against a defense that was very banged up But you know still has some talent leads in the secondary and the bills defense is banged up too They're gonna be down basically backups at all three Linebacker positions and I think that's why this number is a two and a half this game went up pretty early last night because the bills were Initially putting a beat down the Steelers didn't wind up that way as much but like Fandal opened it two and a half and then quickly got back to three very short window was two and a half and then three But as the game went along and went back to two and a half as more and more players for the bills went down with injury So I do show value in the two and a half right now and the bill's money line at minus 148 But the two and a half is minus 122. That's a pretty hefty tax to pay on a team That is super banged up. It's basically three and i'm kind of wary to lay that right now I don't show a lot of value there So you could go with the money line again It's minus 148 the implied odds at minus 148 or 59.7 percent. I've got them about 60 percent So at least some edge in the money line, you could go with the bill's money line if you wanted to But I also don't know how this line will move during the week given all the bills injuries I think that'll be a pretty major talking point I'm also currently assuming gave Davis is in and it would be a slight downgrade For the offense if he can't go not a big downgrade because gave is not great But he's a very good run blocker and he does have a vertical threat It does add a vertical threat to this offense So In other words, I show value in the bills right now But it's pretty slim value and I can't guarantee I will show value at kickoff on sunday So I don't want to bite on minus two and a half at minus 122 If that were to get to minus 110 I would change my tune and you may say it's not a huge difference But the implied odds of minus 122 are 55 percent. There's 52.4 percent at minus 110 That actually is a huge difference between minus 110 and minus 122 So I'm going to hold off for right now. We'll see how markets move during the week Maybe I'll be able to hop in but I just don't want you right now. So Okay holding off despite the fact I do show us some value in the bills in this game Total is 46 and a half. I've got that at 44.9 wind speeds are at 10 miles per hour in buffalo for sunday nights If it gets to 47, I'd bite and take the under 47 is a key number And I'd want at least a push on that in order to take this and it would give me More than two points of edge on the under with where my model has things right now But the under right now minus 118. So if we're talking like What's more likely getting a 46 or a 47? I think it's more likely we get down to 46 or 45 and a half then getting to 47. So I keep an eye on that during the week It's another bet that could be a bet later, but it's not right now So overall across all four games. I think markets are very efficient For this week over at vandal sports, but cannot see a ton of value and honestly no spreads I want to take right now the two bets i'm locking in for what for a divisional round are Texans Ravens under 45 and a half and minus 115 and the 49ers packers over 50 and minus 110 I am going to keep a close eye on the Texans. Uh, see what that spread looks like I'd be willing to lock them in at nine Nine and a half somewhere in that range. I think it's decently likely we do get that and if we do get there I'd be okay putting a bit on the money line as well I'm monitoring the bucks money line if it gets longer than plus 220 I'd probably bite somewhere around 235 or 240 if we do see a lot of interest in The lion start the week and lengthen that Tampa Bay money line And then I bet the bills that minus two and a half if it gets to minus 110 If it goes to three or saves heavily juiced down the two and a half It's a stay away from me and then also potentially taking the under for bills and cheese if it gets up to 47 Or 47 and a half just because wind speeds 10 miles per hour Uh cheese defense is very good Bill's been a bit run heavy. So We keep an eye on the total there, but for right now the lone two bets I want to lock in for the divisional round are the Texans Ravens under 45 and a half and minus 115 And the 49ers Packers over 50 at minus 110 That's all we got here for our divisional round first look We'll have our full preview of the divisional round coming up with dr. Ed fang on Thursday and then a prop look at that game with a jj's ac recent coming up on Friday Hopefully get some props in there for myself as well For later on this week because kind of a lot more than just two bets on what should be fun or for very fun football games Before we close up for today Got to go back to your recommendations from last week here on the show and overall pretty good week For the show and that includes a sweep by dr. Ed fang you can find him on twitter at the power Bank check out his work at the power rank com Ed was on the cheese minus four and a half against the dolphins and that game was never closed The spread has never closed the cheese dominated and won that game pretty easily So got that win over the dolphins and minus four and a half Ed like the packers when it was plus seven and a half it was plus seven it adjusted to that when we recorded So he said if you get plus seven and a half take it if not, you know Was less enthusiastic about the seven of course they won outright So hopefully you got seven and a half on that one Even if not though a two and a week for ed because he had the rams plus three against the lions And they did cover their shout out to shawn mcvay for taking the field goal to make it a A one-point game versus going for the touchdown gets ed the win there So two and a week for ed if you didn't get the packers three You know if you did good calls bad all around be back with us on thursday We had jj zack recent on the show talk player props friday find jj on twitter at late round qb You find his work at late round com and the late round fantasy football podcast jj had patrick mahomes under 252 and a half passing yards of minus 114 finished with 262 Mahomes andy reed letting it rip despite the weather in that game They were not afraid of the weather and they let it go JJ had patrick mahomes plus 440 for any time touchdown and that got close honestly Mahomes did run quite a bit was very effective in doing so couldn't quite get there I think he got stopped like the one or the two at one point so He was close but no cigar on that one other two were david and joku for a touchdown at plus 180 And joku 93 yards and played very well harrison bryant had a touchdown in that game But no in joku touchdown Good call in the role for in joku just no touchdown there final one was tre palmer of over 24 and a half receiving yards of minus 114 and palmer had a six a sick 56 yard touchdown to hit the over there so one three for JJ Thought the process on the in joku and mahomes touchdowns is good Didn't get the good results, but he's been awesome in the touchdown bets all throughout this year So looking forward to getting JJ back on with us on friday We had ryan williams on yesterday to break down both those games the eagles and the bucks and stealers and bills Find a ryan on twitter at ryan alexander underscore w ryan had a very good read on the stealers versus bills game didn't get the spread at stealers plus 10 But one pretty much everything else He had close Shakira over two and a half receptions and minus 146 Shakira had three receptions including a long touchdown pass Reception that was a win there. He had a james cook over two and a half receptions minus 102 cook had i think four in that game So win there as well ryan had dalton kinkade over three and a half receptions minus 130 finished with just three very involved early on But couldn't quite get the over there He had josh allen over one and a pass and touchdowns at plus 112 Allen had three and had two in like the first five minutes it felt like to knocks and kinkade so win there as well uh ryan had jalen ward over 34 and a half rushing yards minus 110 warren had 38 rushing yards So good call there. He had george pickens to get four plus receptions of plus 102 Pickens had five for 50 i believe almost had another one too So a win there and then the long shot for ryan was mink if it's patrick to get an interception That was plus 750 no picks for josh allen allen kept things pretty contained So overall good read for ryan on the bills versus stealers game bucks versus eagles did not go his way Uh, that didn't go a lot of people's way given the way thing the the way that game broke down He had the eagles minus three and of course the bucks won that game outright Had the over at 43 and a half minus 105 and the eagles offense just never really clicked at all So 41 total points to the under hitting that one He had dalis goddard over five and a half receptions plus 114 goddard got banged up kind of late Finish with just four receptions. I don't think he would have gotten there regardless, but Bit of a bummer there He had holio jones for a touchdown at plus 390 jones got hurt. Uh, I left this game early So no win there He had jillan hurts and won that passing touchdowns plus 148 hertz had one passing touchdown Uh, but couldn't get a second one there. So I lost on that one. He had her shot white over 89 and a half rushing plus receiving yards a lot of chase edmonds in this game And I want to keep that in mind for next week when they faced the lions because I think rachad white unders would be pretty attractive Uh for that uh lions game rushing probably rushing primarily more so than rushing plus receiving So rachad white under rushing next week is one that'll have my radar for sure I want to see where that number opens up Also rachad white over 21 and a half receiving yards plus minus 110 I think white had like three or so all pulled. Uh, so a loss there Ryan and chris godwin six plus receptions of plus 110 godwin not super involved in this game They got a lot to david more k-dot and etc etc The problem was they didn't get k-dot in a touchdown at plus 470 That was one that ryan liked to 89 yards So it's similar to the enjoku one with jj good process in terms of nailing the roll I just couldn't quite get the touchdown Froton there and the final one was jillan hurts over 40 and a half rushing yards Uh, he had one rush for five yards If you're wondering why the eagles offense didn't operate well last night Maybe use your very effective quarterback in the ground game, but they didn't do that So, uh, rough one in the second half there, but We'll get ryan back on the show next week probably talking some futures entering, uh, or some other stuff entering the conference championship games Our guest for talk epl matric 21 was austin cast you can find him on twitter at austin cast find his work over at fandal research Clean sweep for austin as well. He had the chelsea money line at minus 170 and chelsea won this game 1-0 Because col Palmer scored col Palmer Was plus 120 to score or assist austin like that one as well It's a little double that there with the palmer goal at plus 120 the chelsea money line minus 170 working in tandem there Other bat for austin was man united over one and a half goals a minus 158 Then a two-two draw which means they got over one and a half goals So clean sweep for austin two bets working well on tandem together Find him on twitter at austin cast so they'll austin back in the show Later on this week to finish up match week 21 And clean sleep for austin clean sleep for ed clean sleep for me as well four and a week a second consecutive four and a week here for Look ahead shows now 11 and one across the past three weeks So feeling pretty good best stretch event if I've had my entire life recommendations from me With the texas plus two and a half and their money line at plus 124 It didn't really move in my favor a lot until the very end of the week We saw some late movement in the texas close to one and a half that money line I think was 116 or so at the end And like it was it was a combination of betting on regression for joe flacco betting on cj stroud being a dude and that all worked out pretty well So like the texas there felt good about the process and good about the results obviously had the bucks last night plus two and a half and plus 126 is this moved against me even though a jay brawl got ruled out and I was confused by that talked about the ride yesterday Why I was like I think my process was good here, but the markets to moved against me Obviously the results were good and that's a matters But I was a bit annoyed with the way the market moved throughout the week kind of made me feel like a fish for the for that bet but hey, uh The money spends the same regardless didn't get the best number which I wish we had but Regardless it is a win no matter what I had the bill stealers over 35 and a half minus 105 Those bets were honored at fandals sportsbook. Uh, despite the fact that the game was moved It was 33 and a half on sunday morning and then went back up to around 38 or so I believe once it was shifted To monday still like the over there honestly even when it was on Up at 38 and a half. I had this total I think at 42 Or so and that game went well over the 48 total points in that game so easy win there And I think it would have been Fine even if it held on sunday morning honestly just based on the fact that both these teams were in the football and stuff like that Although honestly, like I don't think they could have played the game sunday regardless so Felt good about that one and finally had the packers plus seven and a half minus 118 against the cowboys moved to seven So good movement my favor obviously great results with the packers winning that game outright so on a bit of a year only two bets this week out those two totals so Kind of a bummer, but I don't want to force bad bets especially ones I think could move the other way throughout the week so keep tabs on those other ones and hopefully we can get uh to Some more action, but for right now just sticking with those two totals And we'll see if we can keep the good vibes rolling here on the podcast That's all we got here for today on covering the spread back once again tomorrow with breakdowns in md and hl action Of course pga podcasts on the number fire daily fantasy podcast later on today too if you want to bet The american express and then uh, we have our division around Full preview thursday and prop betting on friday all right here in the covering the spread podcast feed If you like what you hear leave us a five star rating on apple podcasts or spotify We appreciate those of you who have done so already make sure to check us out on fandall tv plus and the fandall youtube page If you got any questions for me I am on twitter at gymsonus you can follow me on threads at gym dots on this and you can find fandall research on twitter At fandall research want to thank you all for tuning in for today. Good luck to you with your bets across tuesday We'll talk to you once again tomorrow. This has been covering the spread right here on the fandall podcast network


This is unblocked, this is a talk about Ruby's blocks or something like that, or that's what it was supposed to be, I don't know. For those who don't know me, I'm James Evergrey, the second. I've been in the Ruby community quite a while now, not as long as some, but one of the most. I've written several things you may have seen, including the faster CSV library that became the standard CSV library in Ruby 1.9. I built Rails applications for a living, one you may have seen recently was Go vs. Go, which I built with Ryan Bates during the Rails rumble, and that was fun. I've also sometimes been caught impersonating Jim Wyrick, I have no idea why. I'm going to be nice and leave him alone today. The other thing you really need to know about me though is this. If you've seen any of my talks before, you know, I love these pop culture references, heroes, Ballastar, Galactica. I used to video game ones, Living Planet. I've even used my vacation photos from Japan, how cool was that? By the way, this tree, I believe Rich Kilmer once showed a tree in a talk at Lone Star RubyConf. This is from my own photos and I believe it is the exact same tree Rich Kilmer showed in Japan. So we both traveled all the way to Japan and got obsessed over the same tree, right? How was that? Okay, but I'm not cool anymore because I'm a dad now. That's right. This is my daughter, James, I work for the third. Yes. I'm just kidding. Her name is Sar. As my wife's doctor is fond of telling me, dads are not cool, they're weird. Okay, so I'm not cool anymore. She always says that because her dad once dropped his watch in that the taper pond at the zoo and went in after it. Yes. Okay, so the reason dads aren't cool is we can really only think about two things. Okay, the first one is where is our next state of caffeine coming from? And I just drank an entire Dr. Pepper before I had this speech, so that's why I'm wired. The other thing we can think about is playing, okay? That's what we're programmed to do. By the way, if you guys don't notice, this is why you have kids. You know it's socially acceptable for me to play with Legos again. That's awesome.  Don't wait on that birthday. It's too long. Just steal one or something. It's way too long. Okay, so Summer has all these great toys, right? And I want to show you one. These are some blocks, some alphabet blocks, ABCs, teacher ABCs. But they're from the point of view of everything a young mad scientist would need to know. So, like, F is for freeze-breaking, right? You might need to know that. Or U is for underground layer. Everybody needs to know about that, right? It goes all the way down to Z is for zombies. And why do you need to know about zombies? If you're a young mad scientist, well, because of this. Obviously. Okay. Oh, yeah. I'm supposed to be talking about Ruby's blocks. In case you haven't noticed, I'm not doing that. Actually, there's been some doubt about my ability to talk about Ruby's blocks. You can almost hear Jeremy's question here when I tell him they took my blog time and he goes, like, you're going to talk about blocks for 30 minutes? No, the talks are 45. But he's right. I'm not going to talk about boring old blocks. It's not the usual boring stuff you're used to. These are experiments with blocks, right? And the words of Dave Thomas are meant to inspire. And I'm so glad he said it was okay to do it worse, because we're definitely going to. These blocks might be, or examples, might be described as maniacal. That's definitely true. And I've already given you the reason for that is because I'm on caffeine, right? Okay. So this is the evil blocks talk. Okay? So let's start off with a quiz.  So let's see how you do mad scientist. I'm going to pose a problem. Let's say we have this Ruby construct. We have a table, right? And we're storing it by rows and columns. So we have rows and then columns ADC. We wanted to find a simple indexing method, pair brackets, and then we want to try to get the three inside, right? And there's a lot of ways we can do this. I'll show you a couple. The most easy way is we could delegate to the underlying array, right? So we just write here when the first value gets passed in, we pass that on to the underlying array, then we return the array to the row, and do that. The weird thing about that is then we have to pass it in kind of backwards for us humans, right? Y then X, right? But usually we think in terms of X then Y. So that's a little bit backwards. To fix that, there's several ways we can fix that. This is probably the best idea. If we just take both of those values at once, the X and the Y, we can swap them right here and pass them both in there, and then that lets us call it with X, Y, which is very natural and it's a good idea, right? This talk is not about good ideas, right? Not at all. So we're throwing this slide away. Okay, so I actually want to do a bad idea. I want to do it the way I did it in the first slide, with brackets, brackets, but I want to pass X, Y. So I want to come up with a line of code that goes right here and allows us to do X, Y, like this. Pop quiz. Any suggestions? Shout it out. Return of lambda. Return of lambda. That is so cool. Alright. I'll show you a more pedestrian way first. How about transpose? Anybody know this method? Array, you can have an array of arrays flipped around in Ruby, right? So that it'll change it to go by columns instead of by rows. And usually it's easier to store it by row because when we're printing it out or things like that, it makes it easier. But if we want to access it the other way, we can transpose it first. This could get expensive though, right? If we have a lot of data in there and we're constantly having to flip it around just to get at the data or maybe having to save two copies of it, even worse. So this could get really expensive. So that's transpose. The other answer that was offered is let's return a lambda which is an awesome answer and it's right, it works. The reasons that it works is kind of interesting though. So let's look into these a little bit. First you have to know what a lambda is. So we kind of got it into some black drama just a little bit. And a lambda, this is a simplification, but I'm sure you've seen a method like this before in Ruby, where you put the ampersand in there and it will bundle the block up into an object for you. And then we can do something with that block inside the method, right? So lambda could almost be defined like this. It's not really, this is a simplification, but it basically just bundles it up into an object and immediately returns that object. So it allows you to invoke a block anywhere when you wouldn't otherwise have a block. It's like a stand-in method to generate blocks. This is the way to think of it. Well, why would you want to create a block where you can't create a block? To get the answer, we'll go to Java, obviously. So this is from Java code and it just sums up five numbers. Simple stuff, right? But in Java, this is common sense here. You would want to be able to access this variable in this loop, right? If you couldn't, Java would make you even more mad than it already makes you, right? Okay, so here's the equivalent program in Ruby. And like usual as Ruby, we drop all the loops here in place of iterators, right? So they're blocks. And in order to get that same thing, in order to be able to access that outside variable, blocks have to be closures, which is the scary computer science word we throw around, but it really just means that they can access the surrounding environment so that they don't make you mad in simple situations like this, right? Okay, so that's the quality of blocks that we care about. The last point that you really need to understand how that example I showed works is duck typing. And here's the pretty canonical example that we tend to see, which is with this append method right here, right? And the idea is that everything supports this append method. We can append to arrays, we can append to strings, we can append to file objects, et cetera, right? But my favorite duck typing method is not append. It's the indexing method, the brackets. Everything supports this sucker too. Look at these examples, string, array, hash, and lambda supports the indexing method as well. It's an alias for call, right? So anywhere you could use a hash to look something up, you could use a lambda instead to calculate something instead, right? So let's go back and look at that example I made one more time. You can see all the tricks here. So we're using a lambda so that we can grab a block here when we couldn't otherwise do it, wrap up the context, and the reason we want to do that is so we can gain access to this private instance variable and the x that was passed in. And then down here, when the y gets passed in through that duck typing method, we'll have all the pieces we need and we can sort it all out, right? So I love this example because it reminds me of all the reason blocks are cool in Ruby, okay? As example number one, how are we doing so far? You guys feeling like superheroes or are you feeling more like this? All right, let's see if we can bite off more than we can chew. All right, so the awesome thing about Ruby is that there's blocks everywhere, right? You already know about iterators. We've got talks about that here. Everybody knows about the iterators. But a lot of weird Ruby methods take blocks, like exit takes a lot, right? And this allows you to do something when the Ruby interpreter is shutting down, okay? So in this case, I'm just checking to see if we have an error and printing out a message when we do it. It's time to shut down. That's cool stuff, right? And another thing that can take blocks, and this is one of my personal favorites, is class new. You can actually define a class programmatically in Ruby. And the block is the class block, okay? So this allows you to make up things on the fly. So in this case, I've added a method to all classes to bring in an audit long version of Ruby. It does that by calling class new. If you pass anything to class new, that's your superclass. So in here, we inherit from whatever class it's called on. Then we run through all the public methods and we read a final to do the exact same thing they did before, but first, print out a message about what happened. So now I can create an array with an audit log and then I'll call some methods on it and you can see it's printing out what I'm doing to these methods. That's pretty cool, right? So what can we do with this dynamically describing methods? So I thought I would go, this came up at OKRP recently. And people were talking about how this data, by the way it exists, actually confers some structure about the data. Just by looking at it, we can see that it's a collection of names and these names have these various attributes. We can already see that from the data itself. All right, so artists for a robot, which kind of disappointed me a little bit, really felt like that should be for Ruby. So we'll just turn it into a Ruby robot, right? We want to parse that XML with no pre-existing knowledge and determine the structure from it. Let's see how we would do that. So here's a simple parse. Regular expressions are my weapon of choice for those who know me or won't be surprised by that at all. So I didn't use anything cool like Nukagiri, but I'll get back to Nukagiri in a minute. This is a simple parse right here that just runs through. It's not really important to understand how it works, but I do want to show you a couple of things. It works tag to tag, and I do that in Ruby by changing the line ending character when you call each or gets or something like that. You can tell it when you want to use this line ending character. So here if we use greater than as the line ending character, I think Jeremy actually calls it Waka. Then we can move tag to tag. And then I parse those tags with two regular expressions. I am using a cool Ruby 1.9 feature here, though. If you don't know about it, I'm using named captures. I'm naming them and having Ruby set local variables of the exact same name so that I can access everything by name instead of $1, $2, etc. Okay, so that parser relies on some escaping. This is a little more code to kind of round it out. Here's the escaping function. And the IO we're going to leave from. Also, I've got this storage prepared for where we're going to stick the classes when we make them, but we haven't got that for yet, so just don't worry about that for now. And here's the parser. You can use it just by opening a file, wrap it around it, call the parse method. I'm using some Ruby 1.9 tricks here again for variables in the block and have defaults now, awesome. And below you can see that prettier hash syntax. And we get these events, right, these parsing events. So here's the start of a tag. Another tag that has these attributes. Another tag here's content, etc. Okay, so it's an event-based parser. Okay, now we've really got into getting into the icky stuff, okay, into the designing of the classes around the data and the parsing and end objects. So here's a code for that. If you're going to parse a tree structure like XML, the easiest way in the world to do it is with a stack, okay? And we just start with a root context. Every time we go into a new tag, we push that onto the stack, and every time we leave a tag, we pop that back off of the stack. That means whatever's on the bottom of the stack right now, that's the context we're currently in, okay? And we can use that to figure out where we're going. Given that, as I read new tags and stuff, I just keep track of the attributes on them in hash by their class. This is the parsing part where it's doing the pushing and popping that I talked about with the stack. And then we do one dirty trick here, and we don't really want to have a names object that contains a bunch of names. Really, we just want to simplify that to a Ruby array. So I'm going to go ahead and collapse a couple of levels. And this isn't perfect. It doesn't work in all cases. But we'll see how far we can make it go. And then I just run through those and turn them into classes, which the code for turning them into classes is almost the same thing. Here's class here. The whole point I showed you this example. And I'm dynamically defining the classes here, right? I'm running through the attributes I found and putting those attributes in so that we can build up this class definition. I also added one thing because it was a symbol, one line. I landed past an enhancement. If you want, that enhancement gets included in the class bucket. So you can actually add helper methods or whatever you want to make it nicer, right? I'll show you where that might be useful. One more time with the parsing. You can actually do the whole thing in one pass, but it makes the code much uglier. So here I did it, too. We got to parse through again to get the objects, right? Now we have the class structure. Let's create the objects. I'm using this same trick here. Make a stag, start with a root object, push and pop to create classes or objects as I go through, and populate the attributes of those objects, et cetera. We'll return the results. And then I need to make a pretty interface here. It was easier for me to think about test and design in those three pieces I showed you, parsing, classes, and objects, but nobody would say if you use it like that, because it's the final method that unifies the three of them. And we can try it out. So now I pointed that at the names XML that you saw before, and you can see, but get a really ruby interface here, right? XML.names.map. You can just run through those. We can do things like name, middle, or map all of those names to their first name, or just call them methods and ruby, right? And you can see where to print out at the bottom. All right, so I thought to myself, James, you've got to be honest here. So here's the same code in Okagiri, which, you know, I'm totally disappointed to say it's shorter and easier. And the reason it won is because of the X path, right? Okagiri has X path, which is a language, a mini language designed around searching XML. So it's actually easier to get at the parts you want than just prints the exact same thing. So then I got to thinking about this, and that means I got whooped by a practical tool when I was trying to make this horrible example and that really made me mad, right? So I did what any good programmer would do, and I assumed the fault lies in the data, and not in my code, ok? So if we can just find the right data to feed it, something Okagiri would choke on. Dang! Dang, we got an example, right? Ok, so we're going to look for more palatable foods, right? That's my daughter's Halloween costume, isn't that awesome? Ok, so I went hunting for the most evil XML I could find, and it turns out it's in iTunes. Sorry, there it is. So these are related, right? The only reason you know that is because iTunes was kind enough to put them on the same line for me. Just show me they're related, but you can't tell they're related in XML because they're not nested or related to each other, right? And the tags that come after the keys can be arbitrary. So like integer, string, date, whatever, right? You don't know. So you cannot expat this, ok? You cannot, yeah, there's Okagiri's advantage. You can't expat this. You could do it with Okagiri's node structure, but even that, I think, is pretty complicated since it's actually the order of the tags that's a key to put these together. So I wanted to see if I could modify my system to work with that. So here I'm using the enhancements, and the thing is those dictionary objects, so I need to just modify them, so I'll redefine some things on the class, and the trick is to unify all the different kinds of values into one list, which is what I'm doing here, and then changing many Ruby objects at the same time. And then I get my way to convert the entire thing to a hash, and I want to do that recursively so that it makes this whole hash structure. And once we do that, notice I can index into this, just like I get that specific song we were just looking at, and we get this nice little Ruby data structure. And you might be thinking there's a library that does something like this called the XML simple, I think, that will convert an XML structure to a system like this, hash, in a way. But it, too, would have the same problems with those tags not being related to each other, so it wouldn't be able to figure it out. Okay, so that's good. We would know from your area. I feel better about that example. All right, for this last example, we're going to try another weird invention of mine. If you thought the last one was weird, this would be even better, like a lizard connected to tank tracks with horns. Yeah, I don't know what that picture is. It's an invention. And we'll do some bioengineering. No, this is block engineering. I think it should stand for that. And we've got to get out my favorite block for this one. This is absolutely my favorite one in the set, because this is probably what you guys are going to want to see to me afterwards, but P is for peasants with pitchforks. I give my daughter the coolest toys. These are awesome. I'm expecting to spend quite a bit of time in her principal's office. Okay, so as we get into an example, we need to talk about a rubyism. This thing right here, this thing that we do, the ampersand on name, right? This has a name. It's called simple to prep. But what does that really mean, simple to prep? Well, it means that there's a method called to prep on the simple class, right? And this is, again, a simplification, and it's not needed in Ruby 1.9 or Rails, which is where a simple to prep came from. But look at what it's doing here. It's, again, delaying this decision with this black context, right? To prep is the name of a method we might want to call, and so we just delay the decision and then when we finally have a receiver, we'll send that message to it, right? And we can call to prep on things and get an edge string. This is successor, I guess, whatever. Next, the next one. Gets an edge string or a next number. But the cool thing about this is what happens when we put an ampersand in front of it? If it's the last thing in a method call and it's got an ampersand in front of it, then Ruby automatically calls to prep, right? And converts it for us. Well, that leads to an interesting question. What else in Ruby has a to prep? Anybody know? John the Dirt? Lambda. Lambda? Yeah, Lambda, prep, same thing. I don't want to go into that. I don't know what they're saying. Method. Method has two programs. Yes, there is an object in Ruby for representing methods, right? Let's go into this. So you can have a fixed num and then you can ask for a method on that object, so in this case the plus method, and it gives you back this object that's called a method. It's a method object. And you can call it normally like you could with Lambda, prep, whatever. Or we can call to prep and convert it ourselves and then pass it values the way we've done before, but look at this. If we put the ampersand in front of it, Ruby's going to call to prep for us and do that, right? So what does that actually mean? Well, it means we can map objects to blocks, right? Anywhere that we have a block interface, which is like everywhere in Ruby, we can use an object instead, right? So I needed something that we could do cool things just by passing the blocks, like Synodra. We can create an entire web application just by passing some blocks, right? So, here's a simple example. We'll take an object, a simple object, an array and turn it into an entire web application, okay?  I went and explained this example to my wife one night and I just started cracking up. That was great. I think she thought I'd finally gone over the deep end. Did I mention I didn't get a lot of sleep now? Okay, so we're just mapping some URLs to some methods on an array. And we have an entire web application. Check this out. We can AQ things. One, two, three, right? D, AQ things, pop them off. P, what's there? It's two. Now that we've pulled the one off, like so. We built an entire web application just by mapping some blocks, right? Cool. Okay, the truth is, I just used a whole bunch of dirty tricks right there. So I probably ought to explain some of them. We're going to do a little pen and teller thing here and I'm going to show you some of what I just did. So there's a lot of dirty tricks in here. First of all, I have used something where I can control the arguments to lots, right? Some methods need arguments like push. You can take any number. In this case, I'm just passing at one. My original thought was to use rake for this example. But in rake, I couldn't control the arguments as well because they're all coming in one hash. And the first argument is always the task itself. So I couldn't really make it bend to my crazy example here. Also, I had to choose my methods carefully because Sinatra is expecting, like, a string to be returned, which is the content to be displayed, or something that responds to each. So I chose methods that, you know, return the items, the strings I was putting in, or the array which responds to each, then it'll just each overwrite and use that for the content. So those are two of my new tricks. The other one was I didn't want all of these to run together. So while I was in queuing them, I added this plus, which is a URL encoded space, right? So actually, the first item in this array is O&E, but the second item is space TWA and the third item is space THR. So it's a little disappointing when you see it all explained. It's not near as cool a trick as you thought it was, right? I know, I felt that way too. So I said, James, you've got to think of a way to keep this thing alive. So I thought about it, meditated on it a little bit, looked at it from some different angles, you know, and I really put my mind to it and I said, well, all right, Summer has this wish list, right, that I maintain for her, but she tells me what she wants on her. And these are things we want to make sure mommy stays aware of, right? And we might be needing these, especially with Christmas coming up, you know. So things like self-rescuing princess shirt, there's this Wi-Fi robot on here. How cool is that? Gyroscopic board keeps track of your food so it doesn't spill, you know, it's awesome. Finished an ad for the AR drone instead of the Wi-Fi robot. AR drone? What's that? Okay, so anyways, Summer sometimes wants changes to this. She communicates this to me. And she wants changes to this. Well, I haven't built an admin interface, or anything like that. So that sounded like a perfect opportunity to review this idea of mine. So let's just map active record to Summer. That can't be hard. All right, so here is how we're going to do that. We'll just open up the Sinatra application, require a new file with the admin, and tuck it away behind some URLs so that we have a URL space we can muck with, right? And then here is the entire trick, right here. These lines here, I just require a simple database wrapper and connect to my database in the configuration step. It's an active record database backed by SQLite. So super simple stuff. Ignore the middle part for now, because that's the scary stuff. I'll get to that in a minute. But down here, look, I'm doing the same thing. I did the last example, just mapping some URLs to some methods of active record, right? I'll take out new types, destroy, et cetera. I'm making new URLs wrong. Okay, so back to that middle part. The trick is I'm pulling all these methods on this magic model object, right? And how did I pull that out? I used simple delegate, which this is so awesome.  So perfect thing to use in this example. And I wrote the documentation for it. That's right. Okay, so simple delegator is basically a nothing object, but you pass it something in and it reconfigures itself to pretend like whatever you passed in, right? So in this case, you pass it a fixed num and now it's a fixed num. And then you can later change the underlying object, but all the methods still work the same just pointing to the new object. Well, the cool thing about this is what if you use it on a class, right? So like right here, I give it to a class, I give it some number, but then I can later change the number out from underneath it without it realizing that I've changed its internal data, right? It's probably pretty evil, but it's cool. Okay, let's go back to that little part. So we make a model that wraps any one of the records. It doesn't matter which one. That just gets it to do the methods, right? Then before any of these URLs are resolved, we need to figure out a way to switch it to the right model. And I was running out of things to abuse in this web application because I've already appropriated the URLs, right? So I decided we'll use a subdomain to get the object we want. Yeah, not part of the URL, technically. So we'll just switch the model object to whatever the subdomain provides, right? Okay, so we get an end result of something like this where you can do rovio. You know, your post, and then add, main, remove, and it removes the robot, right? Now that, to be clear, the URL didn't return this complete page. The URL basically returns nothing useful because Active Record doesn't return anything useful there, but then if you visit the application again, you'll have this. So it's not a complete interface, but it is a mapping of URLs to Active Record, right? And then Summer thought we should edit the price on this one. Maybe that's the reason Mommy isn't getting it for us. She thinks it's a little too expensive. So we edited the price to very reasonable, again, the plus being a URL encoded space and sure enough it changes. Or we can select the bowl and then hit the admin and move it to the top. The items are listed in terms of their updated updates. All we have to do is touch it to get it to bounce to the top, right? And we can edit this web application using this simple URL mapping. All right. I don't know about you guys, but I'm kind of playing out and running out of caffeine.  So here's T for tentacles, H for henchmen, A for appendages, and for nanotechnology. I don't know if you can see it on that screen. There's a little dot right in the middle. Also, this next block could probably be considered child abuse. This is K is for potassium. Right? We did a periodic table of elements. Oh, yeah. I love that one, too. And S is for self experimentation, which is really what this talk's been about and we should all do more of, right? So thank you very much.