Hey everyone, Shade Bear 1,000 here and I got over here in the corner, monkey! Okay, so we're going to try another one of these macaroni things. This one is Cheetos Mac and Cheese Bold and Cheesy Flavors. So let's get into this. Hey guys, so this is what they are. Monkey found these, she got three of them, they're $1.29.  But anyway, so here I'll show you these in case you guys want to pause that and read it. Or if you want to get more information on it, you can scan that code. Alright, so if you didn't see the first one, just microwaveable, it says, microwave it. Remove lid and seasoning pouch. You will see loose white powder in the pasta. This is necessary for proper cooking. Again, I don't know what the hell that's for. Add water to slightly below the fill line on the inside of the cup. Why slightly below it? Why not just make the line wherever it's, you know, I don't know. I always do that anyway. Then it says stir it up, which I did not do that in that one last night, but it doesn't really matter now. Microwave uncovered on high for three minutes or until pasta is tender. Do not drain. You will need the liquid to make the sauce. And then you just stir in seasoning pouch, mix two to three minutes for maximum cheesiness. Alright, let's open this up. And there's all that white stuff. Oh, looks like it's overexposing on me here. Huh? Yeah. Okay, I'll check out here in a minute. My white balance, I think, I have to set that up. Okay, so what we're going to do is, again, there's the line, that dark line around there, just slightly below that, stir it up, put it in microwave for three minutes. So, let's do that. Okay, we're back. Let's open this pouch up and the other one had lines there that ripped. It's upside down. No. So, yeah, the other one had like two cuts and ripped right through. Okay, now I'll show you this. It looks cheesy. It ain't easy being cheesy. Oh, we're not done. No more. I'll have an aneurysm. Let's not do that. One's enough, right? Yeah. Get it because I have an aneurysm in my heart. Anyway. All right, so, now mix two to three minutes. So, I will have the lovely Monkey 1000 mix this for me. And I will set a timer. And next clip, you'll see us trying this. It smells good. Well, yeah, smells pretty good. Smells like macaroni cheese. All right, we'll be back with you guys. Okay guys, so here we are. We're ready to try this out. Let's give it a go. Give it a go? Yeah, that's from that chapter. That guy's cool. Yeah, we like him. He's cool. Okay, I got mine. Okay. Thank you dog. Thank you dog. All right, here we go. Oh, yeah. You don't like it? No, it's actually very good. It is good. This is very good. Let me smell it. It is good. Yeah, it smells like cheese. Yeah, the other one last night didn't smell too good, but it tasted great. Yeah, but you might want to use a spoon. It's got like the twisty noodles. I think you've seen that, but very good. Again, two thumbs up. I'm definitely giving this one an eight. Oh yeah, an eight, definitely. Yeah, I like it a lot. And it smells great. It smells good. It tastes good. Yeah, I can't wait to try the jalapeno.  What I like knows how you know what it smells like. And I said, but it's none of my business. He said he used his imagination. I forgot to tell you that. Good one, boss. All right, guys. Very good. I appreciate you all watching. Again, $1.29. Definitely buy this one again. Yeah. Yeah. The other one, not so much. I'm not really. I like the other one. You probably like it more. But this one, we're talking about this one though. This one, like she said, well, there's not much in there. Well, they're kind of like for lunches or snacks. You have this with a sandwich. Right. I think it'd be great. Yeah. Strange things happening in this house again. We were talking about that last night. There's something going on in your house, because I'll stop and look. Yeah, there's weird stuff going on. Stay tuned because we're going to be investigating our car. Yes. If you guys didn't see that, I'm going to check it out. On the haunted and paranormal investigations playlist. The SUV. Yes. Weird stuff. I felt something touching my arm today. Yeah. Well, that's driving down the road. Something touched my arm. Yeah.  I thought it felt like right here. I'm going to show it on my elbow. Stay tuned for that. That should be fine. I'll sit in the back seat. Well, we're going to do some camping out in that thing too. Yeah. Yeah. Just in the back. The outer bed rolls. You're going to do a car camping thing. Yeah, an actual car camping. Not just taking our stuff, but we'll sleep in the car. So that should be pretty fun. All right, guys. Thanks again for watching, monkey. Anything? Want to add anything? No. All right. I appreciate you guys watching. Yep. Monkey says stuff. And now y'all. Bye. Every time. We'll see you guys in the next one. Shave your head in the middle of analyzing. We're going for now. Bye-bye, guys. And take care.


Last week the Alabama State Senate tried to rush through a draconian anti-abortion bill without even holding a roll-call vote for it So expectedly other lawmakers weren't too happy about this and they spoke out and Chaos erupted on the floor of the Alabama Senate now the vote on this bill ended up getting delayed Temporarily and I predicted last week when we talked about this that ultimately I think this bill will probably end up passing and Unfortunately, I was correct about that it passed and it now heads to the desk of Alabama's Republican governor Who's also vehemently anti-abortion now? I don't necessarily know that it's a foregone conclusion that she's gonna sign it I think probably it's going to be the case that she signs us into law However, this bill is so extreme that even other so-called pro-life activists take issue with it So let's talk about the bill as Kate Smith of CVS news reports The Alabama State Senate passed a near total abortion ban in a 25 to 6 vote on Tuesday night The legislation provides no exceptions for rape or incest The bill is the most restrictive anti-abortion measure passed since Roe v. Wade was decided in 1973 the legislation House Bill 314 Human Life Protection Act Bans all abortions in the state except when abortion is necessary in order to prevent Serious health risk to the woman according to the bill's text. It criminalizes the procedure Reclassifying abortion as a class A felony punishable up to 99 years in prison for doctors Attempted abortions will be reclassified as a class C penalty. So this is downright barbaric, this is extreme even for the Republican Party They're passing a bill that tells women even if you are raped You have to have that baby that is not just immoral But it is Straight up barbaric. They're taking us right back to the dark ages How cruel is it to tell someone who was sexually assaulted someone who was raped one of the most Horrific things that can happen to a human being that they are forced to have a baby and if a doctor Provides that person a victim of rape with an abortion That doctor could face 99 years in prison The Republican Party At this point, they are irredeemable the only way that American conservatism can be saved is if the Republican Party collapses entirely and Democrats become the new de facto party on the right since they're already pretty right-wing already and a new left-wing party emerges and takes the Democratic Party's place because this level of extremism is not healthy. It's destabilizing This is insanity Now ideally we'd have three to four political parties overall But duverger's law dictates that when you live in a one-to-take-all system You're almost always going to go back to having just two parties. So we need electoral reform So these types of extreme fringe voices are more marginalized and they can't actually come to power as frequently But nonetheless, this is what we're dealing with We have extremists anti-abortion extremists passing laws That even the most pro-life people might take issue with and the reason why I say that is because Americans aren't with them. You can say sure, you know, they live in Alabama. So this is a deep red state But when you look at public opinion polls Very few people in the country support outright bans on abortions and even those that support bans on abortions They always have this caveat that we've got to have an exception for rape and incest But this bill was passed without that exception. We're seeing these types of extremist bills pop up across the country Since the Republican Party secured a very conservative five-vote majority on the Supreme Court and their goal here is to instigate a challenge They're passing these bills with the explicit intent to get them challenged and appealed all the way up to the Supreme Court so This is just it's honestly beyond the pale even for Republicans because they've been extreme But the fact that they would go this far. I mean It's unspeakable. It's just unspeakable now the problem is that if you truly are anti-abortion and you don't want women to have abortions Well, there are various policy prescriptions That they could pass these lawmakers could do things to minimize the number of unwanted pregnancies and thus Reduce the number of abortions, but they reject all of these solutions as Parker Malloy points out here They can opt for comprehensive sex education in lieu of abstinence only education, which has been proven to not work and If they did this this would reduce the number of unwanted pregnancies, but they reject that we could increase access to contraception That would have the same effect, but they reject that as well So they'll reject all of these solutions that are proven to reduce the number of unwanted pregnancies and thus reduce the number of abortions But they swat all of that away. We want to have our cake in you too. We want to say no every time you have sex it must be with the intent to procreate and if you get pregnant as soon as Conception occurs. There's a third person in the room.  This is Extremism it's absolutely extremism and It's interesting to me that whenever Republicans talk about this straw man and they suppose that liberals want to ban guns which Nobody's saying that but they suggest that our ultimate goal is to ban guns But they tell us well banning guns isn't going to work because Criminals are going to do what they've always done. They're going to secure guns Illegally now. I'm not comparing women to criminals, but if you extend that logic to the issue of abortion If we make abortions illegal, do you honestly believe that that will reduce the number of abortions? No abortions will continue to happen, but the number of Safe legal abortions will decrease and unsafe illegal abortions will increase and This isn't just me saying that this is what evidence dictates because a 1976 study Confirmed that once abortions became legal abortion related deaths Sharply decreased. So if you're pro-life keeping abortion legal is Literally a policy that will minimize the number of deaths because if you tell a woman who was raped that she can't have an abortion She's gonna seek out an illegal unsafe abortion and that could jeopardize her life because you thought that you would impose your morality on everyone else and Truly if you are pro-life Abortion should be the least of your concerns because we have Presidents in both parties that are bombing people innocent women and children in the Middle East and North Africa Donald Trump's first raid in Yemen resulted in an American girl being killed We are giving Saudi Arabia bombs that they are dropping on school buses in Yemen And what they choose to focus on is this narrow issue where they think They're being moral you're not being moral you're being an extremist and By telling women that they're not allowed to have an abortion and going a step further saying they're not allowed to have an abortion Even in the event they were raped You're not being the moral person you're being cruel you're being immoral now this goes so far and Knowing that they are trying to catalyze a challenge to this and get this to the Supreme Court They may have inadvertently undermined their own goal because even Pat Robertson another anti-abortion extremist Realizes that they're kind of undermining their own cause here by going this far I think Alabama has gone too far. They've passed the law. They would give a 99 year prison sentence to people who could commit abortion There's no exception for rape or incest It's an extreme law and that they want to challenge Roe versus Wade But my humble view is that this is not the case We want to bring to the Supreme Court because I think this one I never thought I would say this but Pat Robertson He kind of has a point because this someone who's thinking about this strategically He genuinely wants abortion in America to be illegal He does he wants it to be illegal, but what he's communicating to these Alabamian lawmakers is look you've gone too far If you truly want to make sure that Roe v. Wade is overturned what you do is you push the limit only to an extent You make it so that way you pass a bill that gives the state a little bit more discretion to regulate abortion But what Alabama did here? It's so beyond the pale so punitive so brazenly extreme that even the conservative Supreme Court justices who hold a majority may not be able to give Anti-abortion activists what they want because this bill just goes too far So the silver lining is that their zealotry may ultimately end up being their downfall But nonetheless in the state of Alabama This is horrifying if you are raped in the state of Alabama You will be denied an abortion and if a doctor chooses to give you one regardless of that law He or she may face up to 99 years in prison I don't know what to even say about this other than this is downright Disgusting and quite frankly terrifying that we have one party in this country. That's willing to go This extreme this far to the right


Hi everyone, my name is Steph, this is Little Bookish Teacher, and today I am here with a review of Nightbirds by Kate J. Armstrong. This is a new release, Young Adult Political Fantasy Story, set in a world where magic is real, but magic is also feared and outlawed. I was sent this book for review by Alan and Unwin, so thank you very much to them, and I thought I would start off by reading you guys the synopsis. Magic may be illegal in simter, but you can find it if you know which girl to kiss. In a world full of whispers and clandestine trades, the Nightbirds are simters best kept secret. These high society girls can gift their magic with a kiss, something the church would have them killed for. But protected by the great houses, their identity is safe behind masks, the Nightbirds are well guarded treasures. Matilda will show her place in this glittering world, but not of her Nightbird sisters, say her from the wrong side of the canal with the score to settle, and either are afraid of everything and everyone, including herself. Soon the girls find themselves at the heart of a political scheme that shakes the world as they know it. When they discover their magic is far greater than they were taught, they see the Nightbird system for what it is, a gilded cage. They must make a choice to remain kept birds or take control, remaking the city that dared to clip their wings. So this is a really interesting concept, and I have to say this reminded me of a book that I read many years ago when I was reading A Lot of YA, The Bells by Daniel Clayton. We open up with an intro and a look into the world of the Nightbirds as one of their clients comes to visit the house, and we see that in exchange for a session with a Nightbird, and there are three of them. The client has to share some kind of secret that would be damaging to them, and that's sort of the currency. So in order to access the best kept secret, they need to give a secret of their own. And we spend probably more time with Matilda I think than any of the other characters, and she is very sure of her place. She comes from a place and a family of privilege. She is used to being sort of the center of attention, and she is also used to the power that she wields as a Nightbird. Not that she really understands what that means, but she's used to knowing that she has an absolute choice. But of course all of this comes crashing down when the political powers in town decide that they want to try and access the Nightbirds for themselves. The church wants them taken out, political powers want to use them to their benefit, and they really don't know who they can trust, not even the people who have worked with them as they became Nightbirds. So some of the things that I really enjoyed in this story, I liked that there seemed to be sort of this dynasty effect. Matilde comes from a family of Nightbirds, and I like that contrast with Sayo, who is someone who didn't grow up with privilege, and in fact her background is quite fraught, and the contrast between her and Matilde is very evident even in the way that they interact. And Issa, who is the third Nightbird, is just very unsure of herself, and again in great contrast to Matilde and Sayo. And of course they also learned that, you know, maybe what they first thought about the Nightbirds is not true, and maybe there is more to the world than they had been told. And that's where that sort of gilded cage comes in, because they really only know what they've, what they've been told. And they believed that, and then suddenly maybe that truth is shattered. And they have to come to groups with that. Being a political fantasy, there's a lot of machinations. So it's not a super fast read, there is a lot to take in with the world. It is set up as the first book in a series. So there are things left at the end of the book that while not being a huge cliffhanger, obviously there are things that haven't been answered. So if you're picking it up, you need to know that going into it that you're going to be waiting for another book. But overall, I enjoyed it. I have not read a YA political fantasy in a long time, so it was nice to dip my toes back into this one. I will leave a link to where you can read more about the Nightbirds down below in the comments. I'd love to know if you have read this book, or if you have plans to pick it up. Alternatively, feel free to leave your favorite bird in the comments to let me know that you're here. I hope the world of you're on the world is staying safe and healthy, and I will see you in my next video. Thanks so much for watching. Bye everyone.


Today's question comes from somebody who literally their username says I don't know so I guess they don't know their own name and They say basically I used to lose a dream all the time Yeah, I used to have these regular lucid dreams every week You know every few days and then I stopped doing it for a while for whatever reason they don't they don't specify They just started focusing on other things and there's nothing wrong with that by the way It's you know naturally when you start lucid dreaming you're gonna wake up with this newfound confidence and energy You can start focusing on other stuff, you know whether that's your own business your life your personal goals What you want to achieve or whatever it is you're gonna bring that back into the in the waking world And you're gonna start focusing on other stuff. That's just how it works. That's just where lucid dreaming takes you However, they say they tried to get back into lucid dreaming and found they couldn't do it They used to do it before fairly regularly, but now they can't do it and they're wondering what was changed Why is it so difficult now? Oh boy? This is a tricky one because as frustrating as it is There is a really simple answer to this and that is to do with the way that your brain adapts to new stimuli So when we learn something we typically Create a neural pathway in our brains Which is basically associates certain things with certain other things neurons that fire together will generally wire together So used to have a pattern used to have a routine where you would practice certain things and then eventually it led to lucid dreams Right as you say used to lucid dream quite a lot Now what happens when you stop doing that is that neural pathway gets broken down So although you'll never forget how to lucid dream. You'll never really forget everything about it What will happen is you'll become less and less likely to have the experience because you had that break in the middle All right, because you stopped doing it that neural pathway weakened and weakened and weakened until eventually It's gone. All right Now just like riding a bike you never truly forget However, riding a bike is actually easy to remember than lucid dreaming because it's a physical motor neuron pathway It's something a physical movement is always easier to remember in terms of you know Literally as they say muscle memory in terms of how you remember it than something mental like a habit or a Mental exercise and lucid dreaming really is a mental awareness exercise when you break it down So there's a few things that you could do the first one is probably the hardest But also the most simple and obvious solution is just to to learn again and to follow the exact set steps That led you to become a lucid dreamer in the first place. So however you learned the first time Go back and do those exact same things.  They're gone because you had that break So it is very much like a muscle. You need to use it or you will lose it So go back and learn exactly what you learned the first time and just go through the process again Now there is a second approach a sort of a backdoor way here, which will it'll make it work a lot faster It will get it'll get you back to the point that you were out before a lot faster Than if you just learned the same thing that you did before and that is Learning a completely new way of doing it Whatever techniques you were using before whatever methods you were using whatever reality checks you were using Put those to one side forget those for a second. I mean you've already forgotten them, right? It's I mean you've already forgotten them and learn new ones New techniques if you use the mild before use the wake back to bed now If you use the finger palm push reality check use a nose pinch now Use something different to what you were using before use a completely different new way of doing it And luckily with this a dreaming there are several techniques There are loads of different methods and you you have options right you have loads of different ways You could do this so just learn new techniques and do it in a different way and what that will do is that strengthens a new neural pathway and It builds it up a lot faster than it would build up if you didn't if you did something that you've already done now I can't think of why because in in logical terms It seems like the best way of doing it will be to follow the steps You've already done before but from my experience and the experience of several others. I've spoken to right You learn you get back on track faster if you do new things because your brain loves novelty we are wired to love new experiences new ways of doing things and Fresh approaches to things. So if you go in now and learn a different technique It's likely that that's going to work very fast for you And I would say that's probably the best way of getting back into it It's just to learn a different technique now. You mentioned that you have trouble Remembering how to do reality checks or you know reminding yourself to do them Okay, this is a very common problem as well if you have an iPhone you could download my app I made a a lucid dreaming app which reminds you to do reality checks It's literally called how to lucid if you search it on the iOS store, you will find it there However, you could also just put notes around your house like this note here literally says are you dreaming? I've got another one on my door You know, I speak about this all the time. I'm sure you've heard me speak about this Just try and remind yourself in as many ways as you can to do reality checks. You'll get back on track I promise you you will get back to the state you were at before if not slightly better But the fact that you've already experienced it You already know what it feels like and you know that it's possible, right?  Let me know how it goes. Thanks for watching guys This video and this channel was supported by my patreon followers Please consider giving just a dollar a month to support this channel or just click the links in the description You'll find links to various lucid dreaming products articles techniques and tutorials if you did enjoy this video Please click the notification bell and subscribe and I'll see you next time Why are you still watching that you should have clicked one of my related videos by now right or subscribed or gone on to my website or something like that


So we didn't see much Jalen Johnson this past year at Duke. He played just 13 games there So Brandon, how does that affect his draft profile? If at all? Yeah, I mean Jalen Johnson is a really skilled basketball player He's getting a lot less buzz than he probably should he left Duke after rehabbing an injury Being designated to a reserve role after that. So the sample size is small But what he did put on film and in the box score is really promising He's a really good rebounder had a lot of assists For the position my prospect model is top comparison for him is Rudy Gay who was a top eight pick I'll list some scoring defensive stats as well and in my draft database Including forwards drafted since 2003 only three players rank in the 75th percentile or better and points rebounds assist Steals and blocks per 36 minutes. It's Johnson, Zion Williamson and Danny Granger So that's pretty elite company. There is inconsistency lots of turnovers But at his peak Johnson declared he can really outproduced the free draft rankings


get started. Hey, everybody. I hope your day has been going well so far. Thank you for coming by. I'm Justin Weiss, and I work at AVO, where we help people find the legal help that they need. At AVO, I help our software developers get better code into production more quickly. I also write articles and guides to becoming a better Rails developer on my site, justinweiss.com. And I wrote a book, Practicing Rails, which can help you learn Rails without getting overwhelmed. Hey, everyone. Hope your day has been going well so far. Thank you for coming by. I'm Justin Weiss, and wave at me if you've seen this part already. What if that was your experience on the web? Like, imagine if your site couldn't know that the same person visited two different times, or if everything you knew about a user just disappeared as soon as you returned that first piece of HTML. Now, this might be fine for a site that doesn't do much, you know, a site that only cares about handing out the most generic information. But most of us, we don't really live in that world, do we? We need to know about our users, and we need to store some data about them, whether that's like a user ID, a preferred language, whether they like the mobile or the desktop version of your site better, or what their favorite breed of cat to make memes with is. You could solve this the functional programmer way. You know, if you can't store a state, then pass all the data you have along with every single request. Whoops. But since we're all using Rails, this problem is pretty easy to solve. We put data in the session hash, and it magically comes back to us on the next request. And with that, we never have to worry about which user is accessing our site ever again. So this has been my talk in intro into sessions. Thank you all for coming. But wait a second. How does this even work? How does it stick around? I mean, I thought HTTP was stateless. Now, Rails makes using sessions really easy, and that's great, but it's also a little bit dangerous. For a long time, I treated sessions like a database that I didn't have to set up. I didn't understand sessions, but I didn't really need to, because they were a magic hash that I could always depend on. Sometimes depend on. And that sometimes, that flakiness, it meant that I hated using sessions. And how many of you get unreasonably frustrated when session stuff doesn't work? When you see session exceptions or session bugs or missing data for a user? And why is that? In my first web programming job, a lot of people didn't have accounts, and so we had to use sessions a lot. And I caused so many problems with them. No pointer and couldn't find data for this user exceptions. Those showed up like 10 times as often as any other. And I actually got reprimanded more than once for the problems that I caused around sessions. So this is what I did. I didn't understand it, so I just did what I was already doing harder. The code I wrote wasn't working. The code I wrote wasn't working, but that's okay, because I'll just write more code. No checks everywhere. Now, when that didn't work, I tried to avoid them. Sessions are terrible. Let's not use them. I have an idea. Let's just make the user login on every page. It'll be great. But then I got a little bit more mature, and I realized that this problem wasn't going to go away. So instead, I spent the time to really understand sessions at a deep level and construct a mental model out of them that worked. And after a while, I started to be able to write code that avoided a lot of these problems in the first place. The nice thing is, to understand sessions, we really don't need to get too complicated. Really, this is what we want. We want to know about a user, we want to know about them securely so that nothing can mess with that data, and we want to know about it until they leave. Once they stop using the site, we don't really need to keep that data around anymore. All we need is some way for your user's browser to coordinate with your Rails app and make everything connect up. Now, this problem, the problem of not being able to keep track of information about users, like, people realize this is a thing pretty early on. And as more people wanted to use the web, and especially to buy things on the web because money, people, developers needed a way to keep track of things, like shopping carts and user preferences. Now, I was joking a little bit earlier about passing in all the data you needed along with every request through the URL. But that's actually not too far off from what we ended up doing. If those params are in the URL, though, it's easy to see them, it's easy to lose them, and it's easy to fake them. You have another option, though. When a browser makes a request to a server, it sends some headers along with that request, some information about that request. So what if browsers send some user data along with the rest of the headers so the server could see it? Once the server saw that data in the headers, it could use it, it could change it, and it could send new data back to the browser. Then the browser could send that modified copy back to the server, and they could just kind of ping-pong it back and forth, changing it as they needed to. Now, this idea, the idea to use a header that would be automatically sent from the browser, this came out of Netscape in the early 90s, and Netscape called these special headers cookies. And about a year later, it was supported in IE. So, yeah, even 20 years ago, we had to deal with that. But the neat thing about this is that the server really doesn't have to manage any of this data at all. This data is managed with, or stored with the browser, and managed by the browser. So how do these cookies work? Like, what do they look like? Well, let's say you make a request to Google through your browser, or because these are slides through a program like Curl.  And there's one line I want you to focus on right now, this one. When Google returns a page, it also sends your browser that cookie header. When your browser sees that, it stores it along with information about which server it came from, in this case, Google.com. That's so that the next time you request a web page from Google, your browser will send headers like this. And if we put these side by side, you can see it sends that exact same cookie the next time your browser hits Google. That way, your browser and your server have some shared piece of information. They have that connection, they can keep their conversation going, and not have to reintroduce themselves to each other every single time. Now, all cookies have a few different parts. They have data, which is the information that your server wants to remember. And they have metadata, which the browser cares about, which determines how and when that cookie should be sent to a server. This first part, the part before the semicolon, is the data. When you use the session object and rails, it's storing data in that part, and it's reading data out of that part. The rest of it is all metadata. For example, you can give cookies an expiration date. In this case, after September 7th, the browser won't send this cookie anymore, which means that the server won't have access to the data inside that cookie anymore. If you don't set an expires date, the cookie will usually disappear as soon as the browser closes. These are called session cookies, because they last for one browser session and then get deleted when you close the browser. They're sometimes even just stored in the browser memory and not actually persisted anywhere, because you don't really need to. Cookies that have an expires date are sometimes called permanent cookies, because they last until the date you set. They're not automatically cleared when you close the browser. Now, sites can't read each other's cookie data, so if I was visiting goggles.com instead of google.com, this cookie wouldn't be sent. With path and subdomain, you can go a little bit further. You can go down to subdirectories and subdomains, which is especially helpful if you end up running multiple apps run by multiple users on a single domain, like Thinkit Hub pages or WordPress. There's a leading dot there, but .google.com is the same thing as google.com. It's safer to have it, because older browsers still care about it. Now, when you set a domain, it also includes all subdomains. So here the cookie is valid for google.com and all the subdomains, drive.google, docs.google, all that stuff. And there's also some extra attributes you can give cookies, like HTTP only, that'll go over a little bit later on. But you didn't just come here to learn about cookies and get hungry before lunch. What does all of this have to do with sessions? Well, sessions are built using cookies, because cookies are a pretty reliable way to keep track of users without having to keep track of params. So the better you understand cookies, if you can understand cookies at a deep level, it's going to be much, much, much easier to understand sessions and how they work and how they don't. We'll see in a minute that just like a hash, you can build way more complicated things on top of cookies. But out of the box, they're pretty limited. A single cookie can hold only a single value, so you need a separate cookie for every key value pair. And because all of the information is on the user's side, on the browser's side, you can't necessarily trust what they give you. Like, what if you stored username inside a cookie? The server would send this to your browser, then you go into your browser's cookie database and change it to this. Your browser sends this cookie to the server and all of a sudden you can mess with everybody's data because the server doesn't know any better. Like, it can't know any better. It has to trust this. Now, this isn't any safer than having it in the URL like we saw before. So how does Rails get around these problems? Let's dig into an example. Here we have a pretty simple controller action. It takes whatever's in params name, like whatever's passed as a name param, and puts it into the session under session name. This way we should be able to see some session data get created. So let's hit that and see what we get back. You can see that we're sending the name just into the controller. Again, our controller is going to take that name param, put it into the session, and then hopefully return that session back. And that's maybe what we see over there. You can see that Rails stores the session under a single key, like a single cookie, this session MyApp cookie. And if you search the sample code base for session MyApp, you'll find it in an initializer, sessionstore.rb. If you change that option, it'll change which key your session data is stored under and also break all your old sessions in the process. So, not necessarily a great idea, but you can certainly do it. Now, what about the rest of the cookie? Like I said, we maybe have the data in there, and that's because we can't really tell. It's totally unreadable. I mean, somebody can try if they want, but it's probably not going to be too successful. So how does it do that? Why does Rails do that? Well, the why is pretty easy to answer. The value looks like that so that users or anybody else can't mess with their own cookies. In modern versions of Rails, session cookies are signed, and that means that if anybody tampers with them, they become invalid. And they're also encrypted so that nobody can even see the data stored inside them. But that's not going to stop us. Let's try to get into this cookie and see what's inside. Now, all Rails apps have a secret key. These are these things that get constantly leaked onto GitHub. And the key is also used for all the encryption that Rails does, which is why it's such a disaster when it gets leaked onto GitHub. But that includes encrypting and signing cookies. And Rails gives you some defaults or generates some defaults, secret keys for Dev and test. You can generate new ones for production with rake secret. When you're at boots, Rails puts the secret key into the key generator here at rails.application.keygenerator. Don't bother like writing any of this down, I have links later on. But you can see we use that key generator, that rails.application.key generator at the top to create some secrets. And then we use that secrets to create an encryptor object. And this encryptor object is the same kind of thing that we use to encrypt and decrypt cookies. So with this encryptor object we have at the bottom here, we should be able to decrypt our cookie. So we can paste that big giant string of encrypted text into this encryptor object and this is what we get. Looks like JSON, right? So why is that JSON? Well, it turns out you can also configure that. It's set inside another initializer, this cookies serializer. And you can also use the symbol Marshall if you'd rather use Ruby Marshall. But most people just use JSON. It's the default. It's also even useful if you're like trying to share cookies between apps written in other languages because every language understands JSON at this point. So what do we know now? We know that Rails stores all the session data inside a single cookie. We know that it does this by turning it into JSON which gives us the opportunity to put multiple keys and values inside a single cookie. We know that Rails signs and encrypts the cookie so you can't tamper with it or look at it. And we know that the session key and the serializer can both be configured to be something different if you want to. So now we can see that the cookie actually does contain that name param that we passed way back then. And what we should be able to see now is if we stop passing that param and we pass this cookie instead, we should be able to see this data come from the session data and not from the param. And so let's check that out. Here we pass that big blob of encrypted cookie back to Rails and it should remember who we are without a parameter. You see, we dropped the parameter off of the URL at the bottom there. And that's what we see. And we didn't have to pass any params. This is exactly the sort of thing that a browser would be doing in this case to store that data across multiple requests. So step by step to kind of tie everything together. Your browser hits a server and the server stores data into the session. Rails turns that session data into JSON. It encrypts the JSON and it signs it and then it sends the encrypted cookie back to the browser in that set cookie header. The browser then stores it along with the fact that it came from your Rails app. That's so that the next time you hit your Rails app, the browser will send that cookie back. Rails will verify and decrypt it and then turn it into that session hash that everybody can use. It's like params that are passed on every page, but managed automatically so that you don't have to think about it. Finally, Rails can change the data and send it back to the browser, which will overwrite the previous cookie and they can just keep passing that data back and forth. But if passing cookies back and forth was all there was to sessions, there'd be no reason to call them sessions.  Like, it's just the same thing. But cookies aren't always right. Remember how your browser sends that cookie along with every single request? Well, what happens if you start storing a ton of data inside of that cookie?  Every request to your server would include that four megs of data, even if your server didn't care about it right now, even if your server didn't read it during that request. So cookies are limited. You can only put four kilobytes of data in there. If you store more than that, you're going to get an exception. This action dispatch cookie's cookie overflow exception, which also happens to be the most delicious of all of the Braille's exceptions. But even 4K is a whole lot bigger than most HP requests. I mean, most requests are only a couple hundred bytes. This is like 10 times that size. So if you care about performance, you probably don't want to get even close to that 4K limit. But what if you needed to store more data than that inside your session? How can you keep your cookies small but make your sessions big? Well, let's think about how you're already dealing with users. If you're a cookie store user, you're probably storing a user ID in there. You're not storing their email address in there. You're not storing their full name in there. You're not storing their list of cart items in there.  And then you'll use that ID to look up other information inside their database later on. But what about people who don't have an account? They don't have a user ID so you can't do this. But you could generate a random ID and you could store that in the cookie like this. Then you could use that ID in the exact same way that you're using a user ID to look up information from the database later on. It's not really a user ID, though. So you should probably call it something different. In this case, a session ID. So now we have two different options for storing data persistently across multiple requests. You can store the data right inside the cookie or you can store a reference to that data inside the cookie and store the actual data someplace else like inside a database. Now what would that second option look like? Well, let's say that just like the rest of our data, we want to use active record to store our session data. And let's say we called session name equals Justin to create a brand new session. What would Rails have to do in order to store this in active record? Well, Rails could generate a new random session ID so it has something to look it up with. It could turn the session hash into a string so that you don't have to have like separate columns for everything you could possibly store in the session. You just stuff it all in one string and then put it in a single column. It would save the ID and that data to a row in your database so you could look it up later. And then it would return the ID with set cookie so that the next time your browser hit your site, you could use that ID, look up your session data and get your session hash back. So let's take a look at that in action. First, we'll change our session store to the active record store which is a gem. Like that. Then we'll add some data to the session using curl again. Remember when we passed that name for AM, it just takes it out of the name, puts it into the session. And this time, we're just getting a short string returned instead of that big mess of encrypted signed data. That A6C49 string instead of, yeah, instead of that big mess. And that comes from, if you look inside your database, you'll see a session ID alongside some encoded data. And you'll notice that the session ID and the string return of the browser match. And that's how we'll use that ID to look up the browser data or the session data later on. When your browser sends that cookie data back to the site, it remembers who we are, again, without passing in a param. And this is how that works. It grabs the session ID out of the cookie. It looks up the session ID in your database. It pulls the data that's associated with that ID. And then it transforms that data back into your session hash. You can even store sessions in Memcache and Redis and MongoDB or pretty much anywhere else. And they all pretty much follow the same process. Your cookie is now just a session ID. And then your app uses that ID to look up the rest of the information. And you can even write your own session store. You just need to tell RAC how to find sessions, how to create new sessions, write session data and delete sessions by implementing a couple methods. And Rails even includes a simple cache store that uses your Rails cache to store sessions. And it's a really, really simple and good example to follow if this is something that you're interested in. I'll have a link to that in the notes that I'll share at the end. And that's really the gist of how Rails stores sessions. There are two different strategies it uses. There's the cookie store strategy and there's the everything else strategy. No matter what, you're storing some data inside the cookie because you have to. It's the way that the browser keeps that relationship with the server. But while cookie storage stores all the data inside the cookie, the other methods just store reference to data inside that cookie. And then they can store the data however they want like in database, on disk, in memory, wherever. But now we have a choice to make because we have a few different ways to store sessions. And this is an important choice to make because changing session stores is not an easy thing to do. So which one should you choose? Should you choose the cookie store, the cache store built into Rails, or the database store? Storing your session data in cookies is by far the easiest way to go. You don't need to do any extra infrastructure setup. It just kind of works out of the box. It's also nice because it syncs with your user lifecycle.  When your user stops visiting your site, if they never visit your site again, you have no cleanup to do because the cookie is on the browser side, not the server side. No other methods can guarantee that and it saves you some cleanup. But it's also limited. You can only store 4K of data and you probably don't want to go anywhere near that. And it's also more vulnerable to certain kinds of attacks which I'll go into a little bit later on. But if the cookie store won't work for you, you have two options. You can store sessions in a database or you can store them in your Rails cache. Now, you might already be using something like memcache to cache your partials or some like API response data or that kind of thing. And if you are already using a Rails cache, then this is pretty easy too. It's already set up for you. You don't have to do any more extra infrastructure work or any of that kind of stuff. You also don't have to worry about your session growing out of control because most good caches are going to evict older stuff when new stuff comes in. And it's fast because if your cache is slow, you probably have bigger problems to solve. But it's also not perfect. Your sessions and your cache data are going to be fighting for space. And if you don't have enough memory, you could be facing a ton of early cache misses and early expired sessions.  Still, this is how we tend to store data on our main nav.com site and it's worked pretty well for us so far with those caveats. Now, if you want to keep your data around until it legitimately expires, you probably want to keep it in some sort of database, whether that's like Redis or whatever you're using for ActiveRecord or something else. But storing sessions inside your database has some other problems. Sessions won't get cleaned up automatically so you'll have to go through and delete old sessions on your own. You also have to know how your database is going to work when it's full of session data. Like, are you using Redis as your session store? Is it going to try to keep all of your session data in memory? Does your server have enough memory for that or is it going to start swapping so hard that you can't SSH and fix it? It's happened to me. You also have to be more careful about when you create session data or you'll fill your database with useless sessions. Like, for example, if you accidentally touch the session on every single request, when Googlebot crawls your site, they could be creating hundreds of thousands of useless sessions that are never going to be hit again. And that would be a bad time. Now, most of these problems don't happen super frequently, but they're all things that you need to think about if you're storing the session data semi-permanently.  You don't need to set it up and it's not a headache to maintain. Cache versus database, I see is more of a choice of how much you want to do maintenance versus how much you worry about accidentally expiring sessions early. I tend to treat session data as pretty temporary. I tend to program pretty defensively around sessions. So the cache store works well for me. So my personal preference is cookie store first, then cache store, then database store. Now, in a lot of these examples, we've used sessions to identify users. And that's actually one of the more common things you're going to use sessions for. And that also makes it a super juicy target for hacking. That means on top of the pretty simple key value pair that make up cookies and sessions, there's a lot of extra stuff that somebody needs to worry about in order to keep your cookies secure. Now, I talked about how the Rails server trusts your cookie. It kind of has to, because it's the only thing it has to go on. And that means that if somebody else can get your session cookie, the Rails server has no way to tell that they're not actually you. Now, in lots of public Wi-Fi networks, you could pretty easily snoop on other people's network traffic. And so if you're sending cookies to an insecure, over an insecure network to insecure servers, somebody might be able to grab your cookies and pretend that they're their cookies. Now, this became a pretty big deal a couple of years ago when a guy, Eric Butler, released a proof of concept called Firesheep that would grab cookies over open Wi-Fi networks and check this out. Double click on somebody and you're instantly logged in as them. That's scary, right? I mean, that Facebook used to have this happen to them. Now, the only way to really prevent this is to run your site over HTTPS. And that way, all of your cookie data and all your session data is secured along with the rest of your internet traffic. On the Rails side, you can turn this on pretty easily. There's some extra infrastructure setup you'll have to do, though. But you flip this config for SSL equals true in your production.rb. And with free SSL certificates from Let's Encrypt and this whole ecosystem building up around them, and I think Heroku now supporting SSL on all paid dinos, there's really not a great excuse to run a site without SSL anymore. After you force SSL on, Rails will automatically add this attribute to your cookies, this secure attribute. What this means is that your cookies will no longer be sent to HTTP protocol sites. It's only going to be sent to HTTPS. It works just the same way as if you were trying to send a cookie to a different domain. But snooping a Wi-Fi connection isn't the only way to steal somebody's cookies because JavaScript can also read cookies. That is, if you're Google, you can use document.cookie to readgoogle.com cookies. And anybody else on Google that can run JavaScript on Google can also read Google cookies and send them to whatever server they want. Now MySpace is probably my favorite example of this. I mean, MySpace is my favorite example of a lot of things, but this was particularly fantastic. So that site used to have scripting vulnerabilities all over the place. It was really easy to get JavaScript or Flash embedded on your profile. And once you did that, you could grab information about any of the people that hit your page, like name, profile URL, account ID, all that kind of stuff. I'm guessing that you probably could have even logged in as them, but nobody that I knew figured that part out. Rails protects you from a lot of these attacks automatically by escaping your HTML. And Rails also marks session cookies as HTTP only by default. What that means is that when a cookie is marked as HTTP only, it's only going to be accessible to your server. The browser's not going to make it accessible to JavaScript anymore, so that helps with a lot of these things. But if that's not enough, you can't even trust your own users. Like say you run a music store and your customers can earn credit to buy songs. Your boss read an article saying that forcing signups drops conversion rate, so no more signups, we're just gonna put everything in the session instead. Seems great until one of your users gets this brilliant idea. But Justin, you probably say, we've already went over this. Rails encrypts and signs the cookie so you can't tamper with it. But in this case, you don't actually have to tamper with it. Imagine the cookie was encrypted. You couldn't actually get into this. Somebody buys a song sending this cookie with 400 credits into it. You respond with a new cookie that has 300 credits into it. Your user ignores that cookie and sends the old one again for 400 credits. Now they have infinite credits because it's never gonna go down. Now this one doesn't really have an easy fix. You can store a unique number in the session and then check to make sure that you never use a number more than once, which is not really my favorite thing to do. Or you can switch to a database store or a cache store, which doesn't really have this problem because all of that data is stored on the server side. But a better idea is just not to put this data in the cookie to begin with. That's what we have databases for, for storing this kind of data. Now these are some of the more interesting attacks, but there's a whole lot more. And I'm a big, big fan of the Rails security guide for learning more about this kind of thing. I'll have a link to that in the notes also. Now it might seem like there's a lot to think about around cookies and sessions, but there are a few good rules of thumb that I've picked up over the years that tend to keep problems to a minimum. The first is prepare for the session to disappear at any time. And this happens because sessions are on the user's computer. And that's a problem because that means you have absolutely no control over when they clear their cookies or when they switch devices or any of that stuff. So keep in mind, every time you use a session, that session might not be there anymore. Program defensively because it's going to happen and if you're not prepared for it, it can cause big problems later on when you're not seeing the data that you expect. The second is don't store actual objects in your session. So why would this be a bad idea? Well let's say you store a cart item in the session that has a title and a quantity. And later on you rename title to name because frankly title is a terrible name for a cart item and I have no idea who came up with that. This is probably going to work great for you in Dev.  But then when you shift to production, cart items in old sessions are going to try to turn into new cart items. They'll try to put data into a title attribute that no longer exists. And everything will explode. Now I've personally taken down large chunks of site because of this problem and I know I'm not the only one. I've seen this happen many times. And when it happens, you really only have two options and they're both terrible. One is you could reverse the change which probably isn't going to work because now you have people with old cart items and new cart items in their sessions and so you can try to come up with some grand unified cart item that deals with both. The whole time the site's falling down and everybody's hair's on fire and it's just a bad time. Or you could just say we're going to start from a clean slate, we're going to wipe all the session data and we're going to log everybody out and lose all their data. So I usually go for this third one over here, at least for a little while. Now the bigger your objects are, the more likely this is to happen. This never shows up in Dev and Test because you probably aren't using sessions in the same way in Dev and Test as you are in production. It's the ultimate works on my machine and it will wreck everything when it shifts. So just don't do it. Prefer storing references to objects, object IDs in the session, not the objects themselves. And finally be deliberate about what you use the session for. Only use the session when it makes a lot of sense. Because sessions are so easy, it's really easy for them to become a dumping ground of random data and that's when things start to go really wrong. One of the worst bugs I ever investigated started like this. We shipped something and we all of a sudden started to see exceptions coming from what seemed like a completely random part of the app. Like a lot of session bugs, we couldn't repro it locally and we couldn't debug it remotely and after adding a bunch of logging, we ended up discovering that some code that we had deleted a long time ago used the same name for something in the session as something that we just recently shipped. We had two completely different pieces of data that were stomping on each other and causing problems. And it turned out that neither of those things needed to be in the session. We just put it in the session because it was convenient and we didn't want to roll a whole new database table for them. And that convenience ended up costing us way more dev time and the experience of some of our users and it would have been just to do it right in the first place. Just like code, if you don't use sessions for something, it can't cause a problem. So use it with intent. Even when you follow these best practices though, things are gonna go wrong, they just will. So how do you start debugging when you're not seeing what you expect? Well, the best trick I've ever learned to help me debug any kind of problem is to isolate the problem area as quickly as possible. And by that I mean, is a function getting the right input? You probably don't need to go any higher than that. Is a function sending the right output you'd expect given its input? You probably don't need to go any lower than that. And you just keep cutting those closer and closer until you really narrow in on the place that's causing the problem. So the best tools I've found for debugging session issues are all about showing me what my server's sending and what my server's receiving. So how many of you are using something like Coral or Postman or Paw in your web development? Yeah, that's just many, many people. So these are great tools for debugging session issues. You can see the session data your server's sending and you can send arbitrary sessions back to the server and see how it responds. If Coral, Postman or Paw are telling you that your server is working okay, you can usually assume that it's a problem with the browser not sending something you expect or something else that's weird going on. And for debugging weird internet problems, MITM Proxy is my favorite tool. So with MITM Proxy, it's a little server that sits between your browser and your app and it shows you all of the network connections that go on between the two of them. So you can see like a list of network requests. You can dive into each of these things and start to see the request headers, the response headers, all that kind of thing. You can see all of the real stuff that's going back and forth, which is really great at helping to plug these kinds of problems. And even just last week, I was debugging a session race condition where we had AJAX requests that were stomping on session data. And with MITM Proxy, I was able to within about a half hour construct an actual timeline of how these requests were going through when they were coming back and how they were conflicting with one another.  If your browser isn't sending cookies correctly, nine times out of 10, the domain settings on your cookie are wrong. This is really easy to mess up. It's also really hard to test and dev because in dev mode, you're probably not running the entire DNS structure of your production website. And it's also going to be hard to debug your cookie data if you can't see what it is. So if you're using cookie sessions, I have the beginnings of a gem that you can install in dev mode. If you include the gem and run Rails console inside your Rails app, you can paste in your cookie strings and decrypt it using the Rails key generator. And I'll have links to all this stuff in the talk notes too. Now from all this, we can kind of see that sessions are core to the modern web. And by modern, I mean since like 1995, so modernish. And when you run into problems with session data, it might seem like they're big, they're complicated, they're flaky, they're frustrating. But like we saw, session data isn't that big of a thing. Sessions are based on a pretty simple primitive, you know, a single key, a single value and some metadata. And on that foundation, you build new features bit by bit and piece by piece. First, you serialize the data so that you can store the values so you can store more data into a single cookie. Then you encrypt it to avoid tampering with it. Or you use the cookie values as a reference to data somewhere else. Sessions get big and complicated, but really at their core, they're built out of a few simple parts that all can be combined together. And this is one of my favorite things about software development is that it's all just code. And things that seem super complicated, like Git or Sessions or how the web even works, they were all built by somebody. They were built for a reason. They were built to solve a problem. And when you understand what that problem is and how they were built, they're all at their core understandable. We usually only dig into these things when we have problems with them and that stress and that confusion, it makes these seem completely insurmountable. But in the end, they almost always turn out to be way more simple than you'd expect. So the next time you get unreasonably frustrated when something doesn't work, don't be like me. Skip straight to that last phase. Spend some time and force yourself to learn it. Turn that frustration into a mystery to solve and dig into the pieces until they're small enough to understand. That's how you'll transform bugs that seem confusing, random, and unfair into some new and exciting piece of knowledge you can use for the rest of your programming career. And if you've recently learned something new and exciting or wanna talk programming or really anything else, I would love to talk with you. My email address is up here. Use it, I love getting email. I read and respond to everything. Let me know if you're ever in Seattle, I'd love to grab a coffee with you. And that last link up there, if you're gonna write one thing down from this, write that down. It's a link to resources for the talk with the slides, gem to decode, encrypted sessions and some other notes that didn't quite fit in and some useful session-related links. So it looks like I have about eight minutes or so for some questions if anybody has them. I'm happy to answer them or deflect them in some creative way. All right, well thank you so much again for the time.


My name is Amy Goymor, and I'm one of the lecturers in the Cambridge Law faculty. I'm going to say a few words about one of the subjects I teach, Civil Law 1, which is also known as Roman Law. That is the law that the ancient Romans used. In Cambridge Roman Law is a first year subject, and it's actually a compulsory subject. You won't find it taught in many other law schools. Why in Cambridge do we regard it as an essential first year paper? A hynny'n dweud y cwrs yng Nghymru, y bydd y rhomannol yn dillunio a gwahanol. First of all, rydych chi'n gweithio'r cyfnodd, rydych chi'n gweithio'n gweithio. Rhomannol y bydd y bydd yn gweithio'n gweithio y system efallai, nid ynglynig a nhw'n cyfrifiadau, a dyda hwnnw, yr edrych yn eich gwirio, y bydd y rhomannol yn gweithio'n gweithio. A'r llaw Romanoes yn cael Llywodraeth Llywodraeth yn fath o'r system cymryd yn cymryd. Mae'r gwaith yn ôl yn y ddau ffwrdd, ond Llywodraeth Llywodraeth yn gweithio'r llaw yma, ond yna'r llaw yma yn cymryd o'r llaw, os yna'n gwybod yn ffwrdd. Felly, mae'n rhai bod yn ei ddweud ymlaen o'r Llywodraeth Romanoes, yn y cymryd o'r Llywodraeth Pwysigol 1. Mae'n gwneud yn y gweithio'r gweithio'r gweithio'r gweithio'r gweithio, ac yn cael ei wneud i chi weld rydw i'r cynnwys iawn amlaen i'r Parwyr. Ychydig, maen nhw'n gylau Rhomion yn gwneud, unig i ffasenidol, ac mae'r cerdyn effeithio yn amlêffgodol, yn ei wneud yn gwneud gweld bod yn cymdeithlo'r parwyr. Dyma'r yrddw i'n gwneud gossipau yr unrhyw i'r Prifysgol. Roedd Rhomion yn gwneud, oherwydd, mon â'r Llanfaenol ac yn ffasenio i'r rhomion yn holl y modern ddeu. elevator flynyddiad yn gwybodol. yn part. Fy rwy'n gweithio'r rhomans had slaves and therefore they had law to govern the holding of slaves. Thankfully that's not relevant today. But actually many of the factual scenarios that Roman law had to govern equally arise today. For example people used to sell things, they used to have disputes over who owned things, they used to have disputes when one person injured another. We have exactly the same factual scenarios today which English law also has to provide answers to. So the idea that Roman law isn't relevant and the answers the Romans provided to these problems isn't relevant just isn't true because we have to provide solutions to exactly the same sorts of problems. Now in Cambridge our Roman law course is divided into three parts, the law of property, the law of contract and the law of wrongdoing, what they called the law of delict. And we look at all of these three parts. Now I'm just going to give you an example from the law of property just to illustrate that the Romans had to find solutions to exactly the same sorts of problems that we have today. Now the example is very straightforward. Imagine that A owns a chariot, it is stolen by a thief, party B. B then sells the chariot to a purchaser who is innocent and doesn't realise the chariot's been stolen. The purchaser has enjoyed using the chariot. B the thief is paid the money and runs away, never to be seen again. A manages to track down that chariot and wants it back. But C argues that it should be his because he paid good money for it and didn't know it was stolen. So this is the problem, should A get the chariot back or should C get to keep it? And this is a problem that the Romans had to solve. Both of these parties are innocent parties. Should we prefer the first owner or should we prefer the later purchaser? It was a dilemma and the Romans decided to resolve that dilemma by allowing party A to get their chariot back. Now in English law you can imagine that we have to solve exactly the same question. The chariot could of course be a bicycle or a computer or a car and we have to decide which of these two innocent parties A or C gets to keep the item of property when it's stolen and sold on. Now English law tends to adopt much the same solution as the Romans did, which is an interesting insight. A generally will get to get the item back except in a few exceptional circumstances. So hopefully that shows that Roman law offers a really interesting insight into another legal system's response to everyday problems. Now let's go back to the second concern that somebody looking at Roman law might have as to its relevance today. The idea that Roman law was a simplistic system compared to the many hundreds of pages that make up English law today. Now I'm going to offer you three reasons why actually it's definitely worth looking at Roman law even though it was a more simplistic system than our legal system today. First of all it's actually a real bonus that Roman law can be found in just four books. This means that you can get to grips with a whole legal system in just one year and you can get a really nice overview of the subject and how different parts of the subject actually fit together. You will never ever even if you study and practice law for the rest of your lives get to grips with the whole of English law there's just too much of it but you will do that with Roman law and you will get to see how the law of contract fits with the law of property and fits with the law of delict making those connections will make you a really good lawyer. Secondly the Roman law even though it was ancient was actually exceptionally good. The Romans were very very good at building roads and they were equally good at creating law and developing an advanced legal system. So Roman law yes it's ancient but it's definitely worth studying. Thirdly many European systems are directly built on Roman law for example German law and French law have directly built on Roman law when they created their civil legal code so if you ever wanted to go on and study those legal systems having a base in Roman law would actually be very very useful. Now English law isn't directly built on Roman law it's a different type of legal system but there are parts of English law that do directly draw on Roman law. Some of the most recent Supreme Court decisions have actually quoted parts of ancient Roman law when reaching a decision. So hopefully this has given you something of an insight into Roman law and all that it has to offer.


What's going on everyone? Sam here with late sports cards. I've been 23. Bowman's Best University Football Delay, 10 box, case number 6. Pick your team style. Read all of the list of our names and our teams. You've got Brandon C., with Wisconsin, Brandon S., Ole Miss, Bryce G., Colorado, Chris V., Michigan, Christopher C., with Washington, Dan B., Oregon, Daniel L., Oklahoma, Edward P., all other, and Clemson, James M., Florida State, Jeremy B., Tennessee, John K., with UCLA, Kenneth B., North Carolina, Larry S., Kansas State, Michael B., Duke, and LSU, Michael H., Arkansas, Mitchell J., with USC, Nick T., with Notre Dame, Peter A., Georgia, Richard R., Alabama, Sean R., Texas, Stephen L., Penn State, Vincent P., Ohio State, and Wayne S., with Mizzou. Good luck everybody. Let's do it. Yeah, I wasn't a huge fan of that.  He like screamed and threw like a tantrum in the clubhouse when he got traded for the Mets. And then he went after Brian Cashman for not trading for it. I was like, what he wants to do? That's what they were saying on, I listen to Michael K. Show every day on my podcast. And Michael K. was like, we didn't trade for you because you weren't that good. You weren't good enough to trade for. That's a quick route. Good luck here, everybody. Honestly, it's right. A little man syndrome, she drew. Or Bofa has that. Marvin Harrison for Ohio State on the short print. Congrats, O.S.U. Very nice one there. Super, super short printed card. Let's go. Very nice. And a gold Mason Smith to 50. 25 and under, I would say. Yeah, I would mag that one. And then 25 and under, I'd say for base all out is Roger. Keon Keely. That is Caleb Williams to 100. There you go, USC, Pink Lava. A 299, Eli Holstein. Blue, AJ Swan to 150. 275, Jury on Dickie. We've got Caleb Downs on the Wanted Bandits, 225 for Alabama on the Orange. Congrats on that one, Bama. You've got Gunslingers, Mr. Caleb Williams to 75 for USC. There is a little bit of damage on the back there. I'm going to send an empty box and wrapper. There's not damage, but ink. I don't know that you can see the imprint of Caleb Williams' auto on the back, too. Yes, good call. Nice one there, Caleb Williams. And then Kate Klumnick, Jersey Auto for Clemson. Congrats on that, Clemson. Let's give this one, this will be for this, and then we need another one. Every time I look up, I see him. It's not good. It's not good at all. All right, Studious Stars, Braylon Allen for Wisconsin. That is Orange, KJ, Jefferson to 25 for Arkansas, Arkansas. Really quick again. We've got Keith B with Mizzou and Florida State. Florida State in 7, Mizzou in 8. Matt M with a flawless spot. Wayne with a couple of random team spots. And Anthony D with a no-huddle spot. So thank you all again. Down to 4 to go on the next one, I believe. It is going to be on 7, Georgia, Penn State, Ole Miss, and Kansas State. Will Rogers, Refractor to 150. Grant Wells, Vatek. We've got Yellow, Joe Milton to 75 for Tennessee. Orange to 25, Johnny Wilson for the Nulls. Blue to 150, Dorian Singer. Damn. Wow, that's big. One up 25, Doolado, Caleb Williams and Drake Mays. Good god, man. Assuming this will be a random at the end. Yeah, UNC, Kenneth B, or no, North Carolina, Kenneth B, and Mitchell J with USC. That's big. That's big. Get that into a mag for sure. Got Lugan Diggs to 25, Orange for the LSU Tigers, and Mason Taylor for LSU as well on the Refractor base. Wanted Bandits to 50, Caleb Downs on the gold. And Dante Morda, 50. UCLA. Dan, did you really, Peter?  Frank Orr, Jr. Refractor to 75, Mason Smith for LSU Colormatch. Tyler Buckner to 99, Green Minidiamonds. It's a bot lock. Yeah. Look at it right now. It's bad. There's so many people. Blue to 150, Carson Beck. And then red to 10, Jarquez Hunter. I love that. I wouldn't trash him as much as he did. You said that's what's happening. When did I say 80 and 2? You said half the season. Yeah. You said he's going to pitch me to games. No, I said that's, I said, I didn't say that. Now you're twisting my word. No, I didn't. I said you play in Yankee Stadium, 82 games a year. 81 games. No, no, no. No. Please God, no. If it's Marcus Strowman, please. No, you're good. Rashad Dabinion, Refractor for Arkansas. I know, Mitch, it is a random dissuade. Nice one there. Kendall Milton is going to be 2 at 25. Congrats on that one there, Georgia. Orange. And then we've got Quinn Shaw-Judkins. That is 48 to 49, two-color RPA for Ole Miss. Congrats on that, Ole Miss. Very nice. Ray, picking up Colorado at number eight. Thank you, buddy. Going to the CU Bucks. I can't believe that guy. Out, dude. I don't know why you're walking around like you're going to play. Not open to box yet. Two 25-sheet door sanders, masterpieces. And Drake made a 25 as well for UNC. I got it, I got it, I got it. Do you need any more or just one? Refractor is AJ Swan. Yeah, yeah, I think so. 299 is Caleb Downs for Alabama. Mario Williams to 50. Especially negative 30. Nice one there for USC. 2-150, Michael Penex for Washington. Got blue to 150, John Rhys Plumlee for all other. That is an element of the game to 75. JJ McCarthy. Congrats on that one. Nice one for Michigan. That is a Audric Estime base auto refractor for Notre Dame. And printing plate Brady Cook. Going to Mizzou. One of one. Congrats on that, Missouri. That'll play. That will play. Thank you, Tony. The spots in Prism as well as Scott with two spots in Prism. Rick C picking up a Sapphire spot. So we're down to Georgia, Penn State, Ole Miss, and K-State. Got four to go in the next one, everyone. Four to go. Elements of the game, Drake May for UNC. And gold to 50. Cam Rising all other for Utah. The youths. Bonix refractor to 100. Drew Aller for Penn State on the Pink Lava. 299. Ruben Owens, Texas A&M, all other, I think. Gold to 50. Donovan Edwards for Michigan, color match. Got Braylon Trice, 2-150. Blue for Washington. A gold tie, Simpson. Elements of the game. Auto two at 50. Going to Alabama. Congrats, MAMA. Little tied. Taj Brooks to a 15. Texas tech. That'll go all other by way of there is no Texas tech spot. And Marvin Harrison, Jr., rookie Jersey auto. Going to the Ohio State Buckeyes. Congrats, Ohio State. Cam Rising elements of the game. Gold to 50 for all other by way of Utah. Gold Carson back for Georgia. 50 as well. And there at UGA. We've got Brock Bowers refractor. Blue to 150. Keon Keely for Alabama. Pink Lava, Michael Pratt, Tulane, all other. 200. That is a Green Mini Diamonds Dante Moore for UCLA. 299. Got Gold Mario Williams. True Gold. That's nasty. A 50 for USC. Got Elements of the Game. Cade Clubnick. 37 to 50. Clemson auto. 35 to 50. Clemson. Space refractor, Mecca Egbuca. Going back to Ohio State this year. I'm kind of surprised about that. I'm not going to lie. I guess it kind of makes sense because how much wider receivers now that there is. And then Jackson Arnold. Nice one there. Going to Oklahoma. Oklahoma. Again, Penn State. Georgia, Penn State, Ole Miss, and Kansas State. And then, no, that's the wrong break. Number eight is Georgia, Oklahoma, Florida State, Penn State, Notre Dame, Ole Miss, Kansas State, Arkansas, and Texas. So yeah, not a lot left. Not a lot left today, everyone. Let's get seven sold out. Four to go. All right. We've got Gunslingers, Joe Milton for Tennessee. And Red 5-10. Blake Corum. Nice one there for Michigan. National champion. Thank you, Tony Jay. Brady Cook refractor. Pink Lava. Drake made to 100. Nice one there for UNC. We've got Blue to 150. Dorian Singer. Going to USC. It is a yellow Michael Pratt for all other by way of two lane to 75. Pink Lava to 100. John Rhys Plumlee also going to all other. Got Ruben Owens. Two of five on the auto. Nice one there. A&M. So that'll go all other as well. A&M. It is a gold 42 of 50. Dorian Dickey, Oregon. U of O. And Cam Rising. Rookie Jersey Auto going to Utah. So that'll be all other. As Utah not on the list. That is a gold Marshawn Lloyd Studio Stars, two of 50 for USC. And Nick Singleton. Penn State, 15 of 15. Penn State, another really sneaky team in this product. Mason Smith refractor. That is 299. Casey Thompson, all other. Three mini diamonds. Blue to 150. Jayden Dolora, all other by way of Arizona. Yellow to 75. Jatavion Sanders going to Texas. Orange to 25. Jacory Brooks for Alabama. True Orange. Got Daylan Everett on your refractor auto. That's going to Georgia. Congrats UGA. 16 to 25. Cam Rising. Orange. I'm over it. Has she though? Who knows, man? Who knows? And Richard Reese, 39 to 50. Gold for Baylor. The world would never know. Please. The world would know if this was true. That is, try taking Ole Miss in 7, Oklahoma in 8. Thank you buddy. We're down to 3 to go in the next one now, everybody. 3 to go. She rinsed you up lately. Oh god. All you have to do is say hi. Yeah, I mean. I will give you that. Got him. Got him. One of 50. Gold masterpieces. Caleb Williams. Grats on that one. USC. Got Blake Shapen, 3 of 15. Braylon Trice for Washington. Refractor. Yellow. Trey Benson to 75 for Florida State. Pink Lava. Donovan Esoraco for Boston College. That'll be all other. Two at 100. Got Egmeca Egbuca to 99. Green mini diamonds for Ohio State. Xavier Worthy to 150. Gonna be going to Texas. Dejas. Got 50 to 50. Gold, Arande, Gadsden, the second for Syracuse, all other. Logan Diggs, refractor for LSU. And then Justice Ellison at 12 of 25 for Wake Forest. That'll be going to all other as well. Very nice. Jonathan L with Georgia in the next one. We are down to 2. Thank you, Jonathan. You're looking at just, no, that's number eight. You're looking at just Penn State and Kansas State. That is it, everybody. Penn State and Kansas State. Everybody else is off the board. Two to go. Box to break here. Good luck, everybody. Quick random and then a quick recap. JJ McCarthy, studio stars. And Orange, Frank Gord Jr. to 25. So gonna miss. Got Jupyne refractor. Blue Penex to 150. For Washington. Yellow, Caleb Williams to 75. For USC. Two 100. Eli Holstein for Alabama. Green mini diamonds to 99. Cam rising. Nice one here for Washington. 12 to 50. Elements of the game, Michael Penex. That's Washington. That's awesome, man. Very nice. This is our man, Chris C. Good stuff, Chris. Got Shudder Sanders, 12 to 75.  Unreal, dude. There we go. Good stuff, Chris. And Dominic Lovett, 350. Gold auto for Georgia. University of Georgia. All right. We've got the Caleb Williams and Drake May. Duelado to do. Southern. Kingdom, everybody. For the Caleb Williams, Drake May, Duelado. Between USC, Southern Cal, and UNC. North Carolina. That is one of 25 on the Orange. Good luck. Gonna roll the dice. Whatever team's on top. After nine times, I'll get the card. One, two, three, four, five, six, seven, eight, and nine. Go to North Carolina. Congrats on that one, UNC. I'm gonna give you a little bit of break credit for that one, Mitch. That is a bad beat. I'm gonna give you 10 bucks in break credit after this break for that one, because that is a big card. So I will give you some break credit on that. All right. Start off with our color to 25 and under. Orange of Frank Gore. I don't believe so, Brandon. Chikori Brooks. Shudder. Drake May. KJ Jefferson. Johnny Wilson. 215. Blake Shapen. Nick Singleton. To 10. Blake Corum. And Jarquez Hunter. Autos. Now, we had a Lugendiggs. Dalen Everett. Emeka Egbuca. Autric Estime. Rashad Dabinyan. Mason Taylor. Shudder Sanders to 75. To 75, J. J. McCarthy. Caleb Williams. Dominic Lovett. Michael Penex. Arande Gazzden. Ty Simpson. Richard Rees. Jerion Dickey. Cade Clubnik. To Orange to 25 now. We've got Justice Ellison. Cam Rising. Kendall Milton. Logan Diggs. Caleb Downs. To 15. Taj Brooks. To 5. Ruben Owens. Printing Plate 101. Brady Cook. Cam Rising. Jackson Arnold. Marvin Harrison. Cade Clubnik. And Quinn Chod Judkins. To 49 on your patch autos. And then two mags as well. Thank you. We had the Caleb Williams and Drake May Dool going to UNC. And then the Let's Go of Marvin Harrison Jr. going to Ohio State. I'll do it for the break, everybody. Thanks again for the fill. Up next is number seven.


Once the Messenger ﷺ along with a group of his Sahaba, his companions were returning from an expedition. So Namiyya Rasulullah ﷺ takes a siesta and he sleeps underneath a tree and his companions are sleeping around him. Before he does, Rasulullah ﷺ he takes his sword and he hangs it over a branch on the tree. As the Sahaba are there and everyone is sleeping, a man sneaks into the camp and Namiyya Rasulullah ﷺ wakes up and he sees the man standing over him with the sword in his hand pointed at him, Rasulullah ﷺ. The man asks him, are you afraid of me? Looks him right in the eyes, dead in the eyes, no. So he asks him, who will defend you from me right now? What is his response to Rasulullah ﷺ? He said, who will defend you? Who will protect you? He said, Allah. That's it. The moment he says the name of Allah ﷺ, the man's sword drops from his hand and so the man drops the sword. The Prophet ﷺ reaches over and he grabs it. The man is paralyzed, he can't move. He can't move. The Prophet ﷺ grows and he grabs the sword and he points it at the man now and he says to him the same thing. Who will defend you from me? Who is going to protect you from me now?