All right, I'm Jeff Tomer from Virtue Stream. I'm on the cloud architecture team, and I'm here to provide a lightning introduction to a very new service offering for us. And that's the Virtue Stream Pivotal Cloud Foundry service. The premise is simple. First, we understand that deploying and maintaining a PCF platform is very complex. Second, we know that we can solve that complexity through our infrastructure expertise, comprehensive automation and tooling, and managed services from provisioning of the network, storage, and compute components to customer onboarding from bootstrap through lifecycle management. The Virtue Stream PCF service is designed with security, scale, and availability as the primary objectives. But more simply, our intent is to be your trusted provider providing proactive servicing, management through extensive monitoring and resource capabilities and with timely capacity, management, patching, and upgrades. So we intend to provide to you the platform that's both hosted and managed by Virtue Stream. Also key to the offering is our ability to extend your cloud native app to consume your systems of record that are either hosted at Virtue Stream in the Virtue Stream Enterprise Cloud or on-prem. And that enables you to deploy your enterprise application richer enterprise applications and services. So our offering is designed to be a pertinent offering and the intent there is that delivers the highest enterprise class security model. The offering also includes micro-VM-based metering so you can continue to use the consumption-based billing model you're familiar with Virtue Stream. Initially, we provide four, the backing services. Those are Redis, RabbitMQ, Spring Cloud Services, and MySQL, of course. It's sized for very large workloads with capacity up to hundreds of custom large AIs and terabytes plus of storage capacity pertinent initially. I also want to mention that expansion of resource capacity to meet increased demands is built into the design. So you need more, we'll get you more. Also, in terms of sizing, when you're interested in figuring out how much you need to consume, it's important to mention that the Pivotal Sizing Tool is a key resource and will work with you and use it to determine specific capacities and requirements to run your cloud-native app on the Virtue Stream PCF service. It's also key for us to be able to onboard new customers in days, and we're going to be able to achieve that. And after onboarding, you'll have the ability to self-serve or use directed service for service requests. Our goal, ultimately, is to enable you to accelerate your transition to a cloud-native application delivery and to provide you with a rich set of tools and an engagement model that enables you to focus your efforts where they count most, and that's, of course, differentiating your business. And to do it, to get you started, all you need to bring to us are four things. First, you need to register your, bring us registered vital card domains, SSL certs for those domains, the list of backing services, and possibly any requirements for MPLS or VPN connections to access hosted or on-prem backing services that your cloud-native app will connect to. For more details, we encourage you to introduce yourself to any of the Virtue Stream members who are wearing black shirts and to stop by our booth. And I want to thank you for this very brief introduction. And I'll see you in the sessions or at the booth. Thanks very much.


All right, welcome back to 353. So today, probably another short one, we get to play with memory allocation. So of course, definitely wrapping up. So when we want to allocate memory in our program, easiest way to do it is what, I mean, we can just create a global variable that's called static allocation. So if I know the size of memory I need ahead of time and it's gonna last the entire duration of my program, well, I could create a global variable, let's say buffer that is a char array of 4,096 bytes, size of a page. So how this works is your compiler's just gonna pick a random virtual address to put that buffer in and then whenever you load your program through the exec ve system call, the kernel as part of it, like it's gonna describe in that executable file that you need 4,096 bytes and what virtual address it wants it at. And then the kernel's job is to go ahead, set aside that memory for the program, set aside 4,096 bytes and then make sure that that's actually valid. And if the kernel runs out of memory loading your program, then well, too bad, your program probably is not gonna load. If your program loads successfully, then you have access to that memory, you don't have to worry about allocating it, you don't have to worry about running out of memory, you don't have to worry about anything. That memory is going to exist as long as your process does and then like you don't need to free it, you don't need to manage it, you don't need to do anything. Whenever your process exits or gets terminated or gets killed or whatever, that memory goes away, the kernel's gonna free it for you. So our programs do not use static allocation. Most of them have some aspect at least that needs dynamic allocation. And we probably use this, we probably remember it, but we haven't talked about how it could be implemented. So often we need dynamic allocation. Sometimes we might only require memory under some conditions. Static allocations, we have to know the size of it ahead of time and while it would have to, in order to make sense, it would need to be active as long as our program does. At some point, probably you don't need that memory anymore, so it's just gonna be wasting space because it's around until our process dies. Also, static allocations, you have to know the size of the allocation ahead of time or at least your maximum size and then you have some type of limit. So if I don't know the size of it ahead of time, then I also have to do dynamic memory allocation through malloc or something like that. And then the other question is, well, where do I allocate memory? So there's actually like, we know malloc that can grab us memory on the heap. Well, there's also a call to actually grab memory from the stack. If we want it, the compiler inserts it for us and that's mostly done for us in C. So like if you think of a normal variable, if you just have like int x in a function, instead of malloc, the function to actually allocate space on the stack is actually called alloc a. You can use it if you want. You've probably never had to because the compiler does it for you. So whatever you write in x, this is the reason why most people you see compilers is, well, that has to live in memory somewhere and then the compiler will go ahead and kind of internally insert a call to alloc a that wants the size equal to the size of the data type. So for an int, it'd be four bytes. And then it would have a pointer to that memory, which is on the stack, which it can go ahead and use. And then the rule behind that is if you want to use alloc a yourself, you're free to, you don't have to call free or anything with that because the rule is whenever the function that called alloc a returns, just freeze all the memory that you allocated with the stack and doesn't matter how much memory you allocate to it. I'm going to be really, really fast because all it does is just restore the stack pointer to the previous state from when you called the function and then it's just going to reuse that memory for other functions and go on and go on. So this isn't going to obviously work if you actually try to use that memory after returning. So yeah, so let's go to our fun example. So let's look at this code and I'll give you a minute to go after it or read it.  So I'm going to like for these two printf statements. So I call foo and it returns an int pointer inside of foo, my declare int x and then I print the address of x and I return the address of x as the return value of foo. So now it's captured in P and now if I print off the value of P, it's a pointer. What is the value of that pointer or should like the address of that pointer be the same in both print statement should be different. What should actually go on here slash is this a great idea? All right, we got a seg fault or they're different. Yeah, yeah, I'm not accessing the memory. It's the same address each time, right? I print off the address of x, it'll be some memory address wherever x is be some address, I don't know, let's call it a zero zero and then I return a zero zero. That should, I should get a copy of a zero zero back store it in P and then when I print off P it should be like a zero zero or whatever that random address is, right? So they're both the same. Okay, so would be surprising if they were different. Anyone care to explain? Yeah, yes, well, so after I returned so like that address is to some variable on the stack that should only exist as long as foo exists, right? As soon as foo is gone then that memory is no longer valid. It'd be like with malloc if you try and use something after freeing it. It is what's everyone's favorite C word. It is undefined behavior, right? So use after free undefined behavior trying to access an invalid address, also undefined behavior and see the compiler is smart enough to know that, hey, the address of x isn't valid outside of the function foo. So if you return it, it's undefined behavior so I can do whatever I want and they decided whatever they want is just to set it to null. But it could be anything doesn't have to be the same thing. You would think it would be the same thing. Let me see if, okay, let me just get rid of it. Actually, let's see if I can recompile it. Let's put a new line, recompile. So yeah, it even tried to warn me. It said warning function returns address of local variable so I shouldn't be able to do that. What is this with today? Okay, whatever, maybe it's this room. So it says warning address of local variable. It's just a warning but it's technically undefined behavior so it does whatever it wants. If you want to get around it and fool the compiler so I worked in compilers so I know that they're not terribly smart. So if I want to fool the compiler I could do something like this. So if I do that, suddenly that warning goes away. I fixed it, right? So now if I do this, it's actually the same address both times because well, I outsmarted the compiler so it's just what you guys said before. It's just an address, it doesn't really matter. It just stays the same value. So I use it, it's fine. It's the same address. So now that it's the same address, what happens when I uncomment this line? What value am I gonna see? One? Yeah? Not one? Any guesses as to what not one or just not one? Just not one? All right, well let's see what we got. One. So that's one. Why? We got lucky, right? So it was one here before. We returned the address of it so the stack would get smaller whenever we returned from it. So see it's not gonna, I mean it could but it's not going to because it wants to be lazy and fast. It's not gonna like zero out. It's just gonna move the stack pointer down so the value doesn't change. So it's still one. And then we print it out. Still one, we haven't modified anything. We're all good and nothing changes. But we only got one there because, well, we got lucky. And in fact, you would think that if I just print the same thing twice, it should be the same value but any guesses will it be the same value? Probably should be the same value, right? One one? Yeah, makes sense, right? One zero. Why? Yeah. Yeah, printf uses the stack for whatever it did. It just didn't happen to use it before it printed the value the first time but the second time, you know, it played with the stack memory. Somehow it set it to just be zero for some reason. So just ended up being zero because we're pointing to invalid memory. It doesn't really matter. And I could just make it like, if you want it to be really weird, it's like, if I do something like this and compile it, like it just gets like really weird values because, well, I mean, I'm just getting lucky or unlucky however you think about it. So any fun questions with that? Yeah, that doesn't print an integer. So it will, because like, it's a printf with a format specifier d, it'll just take whatever that's pointing to, use the four bytes. Doesn't really matter what they represent and try and make it an integer. So it'll always print some type of integer whether or not it makes sense. It's up to you. Like, it's just C, it's just memory, right? So I tell it's an int, but if I told it was a character, it would print, try and interpret the memory as a character or do whatever. All right, anything else we want to do with this fun thing? I think that's the most fun we can have. Yeah. Yeah, each thread has its own stack. They should. Yeah. Well, yeah. So they should have their own independent stack. If you could get addresses to other stacks, I mean, it can access it because it's all the same virtual memory. But in order to function correctly, they should have their own independent stacks because that would get weird and probably be like impossible to debug. Yeah, anything else with this? This is good fun, right? So just don't do that. Oh yeah, a question. Why doesn't C prevent you from doing such? Because C is all about going fast and checking would be slow.  All right, so that was a fun adventure in Stackland. So back to dynamic memory. So like there's the malloc family functions everyone likes. That's the most flexible way to use memory, but also the most difficult to get right. We have to properly manage our memory lifetime. So whenever we're done using that memory, we have to remember to call free on it. We have to remember to call free on it exactly once. After we call free on it, we're not allowed to use it. We also have to make sure to not call free on it twice. Lots of those things. And there's also a new concern if you were to write the memory allocator itself, fragmentation. And that is a unique issue for dynamic memory allocation. So fragmentation, just essentially wasted memory, like when we talked about file systems, but it also applies to memory. So it's more of a unique issue for dynamic allocation because I can allocate memory in just different sized contiguous blocks, right? You just say, hey malloc, I want 100 bytes of contiguous memory. I want four bytes. I want 4,000 bytes. Doesn't really matter. You can request whatever you want. And you also can't move memory away. So ideally, you might be able to move memory and compact it together if there's holes in the memory.  Well, that 10 bytes might be useless because, well, nothing fits in there anymore. But if you could move things, so if I could like move that 100 byte allocation over into the gap and make them all contiguous, maybe I wouldn't have any fragmentation issues, but you can't do that in C because every allocation is essentially permanent.  They can't move it because you're going to access memory through that pointer. And it would be especially rude if they just changed the value of the pointer and suddenly you just seg faulted through no fault of your own. You use the pointer you got back from malloc and then suddenly seg fault. So Java does not have this issue because in Java, it has like a garbage collector and references, but references are just fancy pointers that can change. So what Java will do, which is why it's slow, is say you have a reference to an object, which is just a pointer. Well, whatever Java decides to run its garbage collector and clean up memory, it's allowed to move objects, but it has to be careful, which is why it's slow because if it moves an object in memory, it has to update every single pointer in it so they all agree with each other. So it has to track all the pointers, has to make sure it changes all the pointers like consistently. So usually, or at least one dumb thing it can do is just pause the entire program, wait, update all the pointers and then let your program resume. So that's something you can do with some programs, but C does not have this luxury. So fragment, just a small contiguous block of memory that cannot handle allocation. It's just like a whole memory wasting space. And there are three requirements for fragmentation and they all have to be true. So your allocations have to have different lifetimes. So whenever they're valid till when they're invalid is a different period of time from one another. They also have to have different sizes. So different sized allocations. And then the third one is you can't relocate them after you've already allocated it. So for stack variables, they all have the same allocation lifetime. So they all exist as long as the function exists. So there's no problem with fragmentation for stack variables. If I need four bytes, well, I get four bytes on my stack. If I need another 20, I get another 20. They're all contiguous all beside each other. And then I get rid of them all at the same time when that function exits. So I don't have any problems with fragmentation. If I have all my allocations are the same size. So think of like, I don't know, page allocators or your like I node array in lab six. They all have different sizes or sorry, they all have the same sizes. So there's no fragmentation because while one's as good as any other or like if I have a page is as good as any other page, I'm not wasting a space because they're all the same size. And then the third one is you can't reallocate or relocate previous allocations. Might hear this as being termed defragmentation. So I'm just kind of moving memory around to make everything contiguous, make everything close together. If anyone's like, I guess this might date me, but anyone have like their parents like start running the defragmentation on their computer and tell you not to touch it because it's doing stuff. Or am I too old? No one's done that. All right, nevermind then. That's never happened to me either. It was just like something weird. Yikes, all right. So last year they did, but okay, new generation. So there is two types of fragmentation. There is internal fragmentation and external fragmentation. So external fragmentation occurs when you allocate different size blocks. So there's no room between the blocks. That's basically the fragmentation that the memory allocator actually cares about and can control. So for example, if I have like a red allocation here and a red allocation here, maybe any other allocation I have is bigger than this blank space between the two red allocations. And suddenly, well, I can't use that memory because nothing will fit between these. I have to use this space. I have no other choice. Nothing will ever fit in here. So it's wasted memory. It's external fragmentation because it is between blocks. Internal fragmentation is when you allocate and waste memory within a block. So the amount of memory, the memory manage ur sets aside is bigger than the amount of memory you actually need. So there's wasted space within a block. So if this is our big allocation, we could split it off into two parts. The red is the part that the user actually cares about and is using. So it would be here. And then the wasted space would just be in the dark box there. That's just the rest of the block that it is not using. So this generalizes to any type of memory. So your file system, still an example of this. Or for malloc, maybe it only allocates some powers of two and you ask for five bytes or something like that. It would do the same thing. So for internal fragmentation, even you could still have that when you have fixed allocation sizes because it's just wasted space within a block. So maybe I get rid of external fragmentation because everything is the same size, but I couldn't get rid of internal fragmentation as long as they use less than the memory that the block is. So memory allocators, yeah, in terms of what you saw before, those were conditions for external fragmentation for the memory allocator. Internal fragmentation, well, if you don't use as much as the memory you get, then well, you can't really, it's like a trade-off. You kind of trade off external fragmentation for internal in that case. So our goal, minimize fragmentation. So just wasted space, we want to prevent it. Whoops. So, sorry, back up. In practice, usually create a very huge array, not use all of them since C has no array list, then it would be very common to have internal fragmentation. So for that, like a big array of everything the same size, you generally don't consider elements you're not currently using as fragmentation because you could use them for useful things. Just because you're not using them does not mean they're considered fragmentation. So as long as I could use them for useful things, then they're not considered fragmentation. So just having a too large array, yeah, you might be wasting space because you don't need it yet, but in terms of like the memory allocator, you're actually, it wouldn't be considered fragmentation. So we want to minimize that fragmentation just wasted space, which we should prevent. So we're kind of putting ourselves in the shoe of people writing malloc. So we want to reduce the number of holes between blocks of memory. If you have holes, you want to keep them, maybe you want to keep them as large as possible so we don't have fragmentation. We can use that memory for more useful things. So our goal is to keep allocating without wasting space. So whenever you're implementing a memory allocator, that's very, very general. So think of like how you would implement something like malloc. Usually it uses a link list called a free list and that keeps track of free blocks of memory by like chaining them together.  So just be like one giant block of memory that can use for whatever it wants. And then whenever a request of any size comes in, well, you just choose something from your free list that's large enough to hold the request. You would remove it from the free list. Maybe you split it aside. So if you had, I don't know, if you had 4,000 bytes and then a request came in for 20, well then maybe you split that 4,000 into 20 and then 3,980, did I do my math right? Yeah, boom. All right, I shouldn't do math live. That's really a bad call. So split it, I use the 20 bytes, the other side's free. I put it back on the free list and then I can do another allocation with that. Overtime might get pretty messy. So for allocation, whenever someone requests more memory, well then you just choose a block in your free list, large enough for the request, remove it from the free list, maybe split it off into parts. And then for deallocation, you would just add the block back to the free list. If it's contiguous to something else that is free, well, you can merge them together because it's now a larger chunk of contiguous memory. So, in general, there are three general heap allocation strategies. One is called best fit. So, and this is how to choose something in the free list to use for the allocation. So best fit is I choose the smallest block that can satisfy the request. So I need to search through the entire free list unless there's an exact match, in which case that is the best fit. So I shouldn't bother looking any further. The other one is called worst fit. So it is I choose the largest block which has the most leftover space. Also, I have to search through the list, check the biggest block instead of the one that barely fits or exactly fits. And then the other is just kind of like the FIFO of this algorithm. So instead of searching the whole list, I just search the free list until it's big enough to satisfy the request. And then I just use that one. I don't really care what I get. So let's have this situation. So here, if I want to use best fit in this situation, anything that has a color on it is an allocation that's in memory that I can't change. So this is the amount of memory that we are managing. So this would be like malloc is managing this giant block of memory. Someone has made an allocation that is in the red. Someone, and then they also made a bigger allocation which is in the blue or teal or whatever that color is. And then the blank boxes here are free space. So there is a hundred bytes free here. And the other entry would say there are 60 contiguous bytes free here. So now if a green allocation comes in that is 40 bytes, my question is well, which of these ones should I use? Should I use the hundred byte free space or the 60 byte free space in order to allocate this 40 bytes if someone requested 40 bytes and I'm using best fit. So which one do I use? We got 50, 50, the hundred or the 60 if we're using best fit. 60, right, 60. So best fit is I want the smallest one that can still satisfy the request. So between the hundred and the 60, well it would be the 60. So I would put the green one there at the beginning at the end doesn't really matter. I would split it off and then of that 60, well I use 40 of it for the allocation and then there's another entry in my free list that's 20. So now I have 120 bytes left. So now I have this purple allocation comes in that's 60 bytes that's a bit hard to read. And now while where do I allocate this? Well, I have no choice, right? Doesn't fit in the 20 block, I have to put in the hundred. So I could put it at the beginning, put it at the end, I'll put it at the beginning. So you would split it off into a 60 for the allocation and then a 40 for the free list. And now our memory looks like this. And now while we have 60 bytes free but a new allocation comes in and they're requesting 60 bytes but we have nowhere to put it, right? So we have 60 bytes in total but it's not contiguous. So we actually can't do the memory allocation here. So best fit didn't work out for us in this scenario, right? So these would both be considered loss based due to fragmentation, they are now useless. All right, so now if I do worst fit, let's see if things are better. So if I'm doing worst fit, then I have a 40 byte allocation between the hundred and the 60, which do I use the hundred, right? The hundred, that's the biggest one. Worst fit is to pick the biggest free block there is. So I would allocate it in the hundred block. So I use 40 of it for the allocation and then the rest of the remaining 60 bytes go back on the free list. And now when I have the purple allocation come in that's 60, where do I allocate it? That doesn't matter. There's two 60 blocks, one's as good as any other. So maybe I use the first one. And then now I have the pinkish allocation come in that's another 60 bytes and boom, it fits exactly in the remaining space. So it looked like worst fit, despite its name, worked better than best fit. So turns out names can be deceiving, right? Well, turns out no one actually uses either of those because they're both slow, right? That you like one, they're slow because you have to search the entire free list every time for every allocation. And then if you go ahead and simulate these things, best fit tends to leave like very large holes and very small holes and the small holes would probably be considered fragmentation. If you do worst fit, if you simulate it, simulation actually does say it's the worst in terms of storage utilization. So it's name is actually accurate despite that silly example. And then first fit actually tends to leave like average size holes that probably would not be considered fragmentation. And also in terms of implementation, it's a lot faster because it doesn't have to scan the whole list every time, just finds the first entry that fits and uses that. So if you wanted to implement malloc for fun or for profit or whatever, you could implement it. It just takes a link list and you can just do first fit and use that SBRK system call to just get heap space if you want. So you could do that. They'll come up in different courses if you're more interested in system programming, but for now we just kind of just leave it as is. All right, so any questions for today? Sweet, we're definitely getting near the end of the course because the lectures are getting very short, which I guess is a good thing, right? Because imagine if I went on about threads and things that difficult until the very end of the course. Yeah, so I intentionally push stuff back that are easier so we have time to breathe. So, oh yeah. Yeah, so the question is how does realloc work? So realloc would try and extend it if it can because it doesn't have to really do anything. It just shifts it a little bit and makes life easier. And also realloc would copy the memory too. So if it can just grow it, it doesn't have to copy memory or anything. So it would prefer to do that. So yeah, realloc would just see, hey, is like in the free block after you, is that free? Can I just use that space and just extend it instead of actually grabbing another one and copying memory and all that stuff? So yeah, it would prefer to just extend it. All right, any other, whoops, any other questions? All right, so we'll do some, oh yeah, sorry, what do you mean by linking? So for this, so let's, oh okay. Yeah, so the rules of C for like realloc and stuff, it has to be contiguous. So you can't divide into two chunks. Otherwise, like your raise suddenly wouldn't work because it just stupidly just does pointer arithmetic and it assumes everything's contiguous. So if you wanted to split something into two like this, you pretty much have to use like a link list or something like that or something else to keep track of the breaks in it. But in terms of like this, like maintaining the free list, there's some hand wavy stuff there because if you freed blue, then you wouldn't have like a free 60, a free 100 and a free 60. If you freed blue, it would try and, they're all contiguous, so it would probably try and make like a free 220 all together. So it would try and merge it. We'll go over how we would merge in the next lecture because for this, it's just kind of hand wavy, you have to scan everything, see if they're contiguous. Yeah, so how do you get a split in the first place? Yeah, so basically the question is, how would I end up in this situation? Yeah, so okay, so the question is, why is blue in the middle? So this could be in the middle because this is like halfway through running a program. So yeah, initially we're just managing this big block of memory and then maybe we just have a 40 allocation. It goes at the start, makes sense, right? Then we have 100 allocation, it would go after red. Then we have another 100 allocation and then we put in blue and then we free that 101 and then suddenly we're like this, right? Yeah, so contiguous in terms of virtual memory but we know the kernel can just, I mean, just map whatever pages it wants. So it'll be contiguous in terms of virtual addresses but maybe not physical but it doesn't really matter because it's random access memory. The only thing holding us back is the TLB speed really. But yeah, so this would be contiguous in virtual memory which is an easier illusion to do, right? Then just doing it with physical memory because for physical memory, like that's technically memory allocation too but the kernel only cares about pages, right? And each page, they're all the same size so one page is as good as any other page, it doesn't really matter. And yeah, for malloc and stuff, your allocation can span multiple pages, do whatever, it doesn't matter. But in fact, for performance, I guess that's kind of a detour but like some people have done performance analysis on their programs and like the same program got way slower for what seemingly looked like the exact same execution, same parameters, same everything. Turns out it got slower because someone's username was slightly longer and because their username was longer and was stored on the stack at some point, it crossed a page boundary and because it crossed a page boundary, it got a lot slower because that's another thing and it just had enough. So yeah, weird things can happen because of that. So weird things like yeah, so if you want your programs to go fast, I guess too long to read of that one is shorter user names are better. So mine's only three characters, so just J-O-N, boom. My programs go fast. If you use any more than that, yeah, you're screwed. All right, any other fun questions? So yeah, if you wanna be better than me, just, okay, I wasn't gonna, yeah, just have your username as X even though that's like a terrible name too but could do better or just J would probably be better. All right, any other fun questions? Otherwise, I will be around to ask things. So here, let's wrap up. Kernel has to implement its own memory allocation so we haven't gone to that because while the kernel wouldn't have malloc or anything like that because while the kernel exists before malloc exists, right? So the concepts are the same for the kernel as for user space memory allocation. Kernel just like the kernel just doesn't really care about virtual memory. Well, I mean it can, but that can be contiguous. In terms of allocations, there's static and dynamic allocations. So just global variables versus using the stack or the heap. If I'm doing general dynamic allocations like malloc, fragmentation is our big concern. In fact, web browsers and things like that will ship their own version of malloc instead of the standard malloc because they really, really, really care about memory. So like Chrome, Firefox, all those web browsers, they don't use libc malloc. They have their own malloc because they really, really care about that. And for dynamic memory allocation, just returns blocks of memory that have to be contiguous in virtual memory at least. And fragmentation between blocks is external. That's what your memory allocator mostly has control over. Fragmentation within a block that the memory allocator manages is internal. And in general, there are three general allocation strategies. If you just have general different sized allocations, there's best fit, worst fit, first fit, and we'll see better ones tomorrow. So just remember, pulling for you, we're on this together.


What's good y'all chris from Jackson's case breaks calm We got a fun one coming up it got filled out took a couple of fillers and some big big names and big help to get The spot sold straight up, but we are here with 2022 tops luminaries baseball 12 box full case break random team number two Thanks again y'all for getting this filled out any fillers any straight up spots. I appreciate y'all. Here's our dice Here is our list from Nicholas Stofold down to Michael P with that straight up last straight up spot that last spot mojo and then two fillers the tops chrome jumbo 15 and the tops Chrome jumbo 16. Thanks again for getting this filled out y'all and our teams will roll this dice for both Five and six eleven times for the players and the teams. Thanks again y'all and good luck one two three four five six seven eight eight nine ten 11 Boom last time 11 times Niko down to Anthony and 11 times for the teams we go one two three four five six seven eight nine Ten and last one 11 11 times boom 11 times With the Cardinals down to the Dodgers my Dodgers All right, let's look at our teams right here We'll have some trade discussion as well before this break actually starts We'll see you after a pause but here we go Niko with the Cardinals Steve Herrick with the Rays nice Steve Michael with the Braves John Herman with the Pirates Nester with the Mets Nicholas with the Reds Barry with the Phillies Michael with that last spot mojo gets the White Sox Steve Locke gets the Cubs Nicholas with the Angels Steve with the Astros Steve Herrick with the Astros my apologies Nicholas with the Rangers Jeffrey with the Mariners nice Jeffrey Gigi with the Diamondbacks Nicholas with the Blue Jays or second half Jeffrey with the Yankees Wow nice two teams there Ryan Hines with the Brewers Jacob with the Red Sox Nicholas with the Rockies Chad with the Guardians Chris with the Orioles Mike McCarthy with the Nationals Nicholas with the Giants Thomas Tanner with the Padres Chad with the A's Nicholas with the Marlins Nika with the Tigers Jacob with the Royals nice Andy with the Twins and Anthony with the Twins and you rascally Anthony Raimondi with my Dodgers All right, so we'll have a little bit of trade discussion if there is any and you know is you will know about it We come back though full case break 12 boxes of top preliminary. You're right back All right, we are back couple room ones of stuff Padres Brewers and Twins were available But no one bit. So let's see how we rock here on a full case break of luminaries to get this printed out and let's get to ripping Very exciting man big beluga in front of us Kind of see I'll show it after we get the case opened up top's luminaries full case Yeah, not to please. Well, this offense has been quiet for a good one It's often sucks man.  It's a pie. So I have some room. I'll check the list now It's number two random teams. She she with the Diamondbacks all the way down To Mike and the Nationals. Good luck again, everyone. Thank you for getting this break filled out Let's do it box number one if you couldn't tell I've never opened up luminaries right box one and card one. It is a cut signature. It's a one-of-one a Bowie Coon Major League Baseball Commissioner. This will have to be a randomizer Everyone's got a shot at the one-of-one cut signature Bowie Coon Sponsor left. There we go Rock and roll here y'all. I'm missing the Yankees game right now. I mean if the Yankees come back They they fulfill the prophecy of getting three one Come back and they do a three one come back themselves For the Reds, it's gonna be another one-of-one Joey Vado 12.4 I think this is a home run Kings. It is Joey Vado. Wow Little bit of the Mr. Red on the on the patch one-of-one Joey Vado Cincinnati Reds That's going to Nicholas Stoffel. One of our one of our random team Tops chrome jumbo spots. Wow Two one-of-ones to start off the case very nice box three for the Red Sox four out of ten Big poppy David Ortiz home run cakes 17 number one Red Sox postseason home run totals bow socks Going to a Jacob Famer brand new hallfamer to newest inductee Very photogenic. He's got a lot of great-looking cards Stuff Are they double dip for the Red Sox? Darren Durand rookie out of five out of 15 one more for Jacob first and we'll be home run number one July 19th, 2021 Maybe this is it.  Here's box five Gonna be Andrew McCutcheon Phillies edition eight out of ten eight home runs number three on active walk-off home run totals Philadelphia Phillies going to Barry Roberts Here's number six We went fishing and we hope the big one two out of three Home run Kings Mike Trouts Very nice. Los Angeles Angels. All right from Nicholas Stoffel team tops Chrome Jumbo 15 career-high home run total in 2019 45 home runs Mike Trout to three, you know, it's all about the boom Mike Trout Bay Bay. I thought it was three one. Was it real? Am I thinking of basketball for the three one when the Warriors came back or the Cavs came back on the Warriors after the Warriors were down Three one to the Thunder next up. This is box seven 14 of 15 another Boston Red Sox nice Bat relic and auto Wade Boggs 200 hits hit Kings For Teddy 14 out of 15 another Boston Red Sox for Jacob Red Sox cleaning up I'll see you Sam Fuddles three one. I don't know why I thought it was three one for some reason Three three one memes on Najee outside box eight One out of ten Nice one more for the Reds patch. Look at this. Hold on. I think uh Part of this jersey has a bit of a berry arc and autograph as well hit Kings Cincinnati Reds one more for Nicholas One of ten auto on the card and maybe auto on the jersey Very cool Here is box nine 12 out of 15 Juan gone nice spark of light signatures Juan Soto auto out of 15 Washington Nationals Mike McCarthy spark of light Little eye black on there all the best My favorite my two of my favorites in wrestling That's so funny that Adam Cole just like randomly streams on twitch and it's just like doesn't no one talks about wrestling just the nicest guy T off the tji Friday joint two Jets have fat masa This is probably oh my god. I feel like right before This is like right around the first all in Here's box 10 By the way, you your Yankees one out of three Alex Rodriguez. Nice Yankees Jeffrey Darlak 600 home run king for a rod and then uh Was it was a cracker barrel too? They have to close out the uh the next show First fold here the cracker barrel match with Darby and uh Joey Jamelon Shouts out to you All right box 11 pen ultimate box here. Y'all good luck two out of 10 Bang bang Houston Astros hose a all to ve auto Hit kings number one in major league never be hit its last 10 years 1716 hits Houston Astros is going to go to steve harrick man, what a What I what a gang of people there and the last box of this case very very nice one And we still have a randomizer to do someone's got a chance at this one on one But we couldn't cut auto all right last box. Thanks again y'all fun break We'll do a recap at the end when we do our randomizer Last box good luck socks eating here raw file devours patch and auto 14 out of 15 112 at the time career home runs one more for jacob and the socks Very nice Okay, but we got a little bit more work to do Let's go back to our screen Bowie koon cut auto one of one is an lb conditioner not assigned to any major league team obviously Oh my god This game's over We'll grab our teams our players from Nico down to anthony go to a fresh dice and a fresh list Top spot gets this cut auto Four and one five times good luck. Thanks again. Y'all what a break one two three four and last one five top spot only Five times for the cut auto We're good, uh Nico at eight and shishi at seven jacob at six jacob almost walked away with another one Nicholas at five michael p at four Barry at three steve lock at two And ryan heintz at that top spot will walk away with that cut auto Very very nice to get that all written up and we'll do a little recap If we have four red socks in a 12 box case Crazy crazy crazy One recap we'll do for the night for sure. So this Once again, bowie koon one of one cut auto going to ryan Raphael devers patch auto out of 15. How's the altube auto out of 10? a rod one out of three Juan soto spark of light 12 of 15 The very larkin cold one right here one of 10 for the reds Wade boggs red socks edition bat relic and auto out of 15 the mic trout two out of three Very very nice for the angels failure's edition of angel mccutcheon eight out of 10 auto jaren durant five out of 15 rookie auto The david orteez four out of 10 one last one for the red socks and sticking with the red put an s on the end of it one of one On the joey vato patching on the mr. Red In the car itself. What a cool break. Thanks again y'all We will have most likely p a random team number three We still have r&b number two on the site as well That's one of our break credit giveaway. Check the site jassescase breaks.com. Thanks again. Bye. Bye


I've always thought that strategic use of questioning is one of the most effective forms of feedback. For example, I encourage my students to provide a full draft of their assignments before they submit their work for assessment. If I see a gap in their reasoning or something that's been omitted, I write a question. The purpose of the question is to stimulate the student's thinking rather than have the teacher tell them the answer. I want the students to make the connections for themselves. Questions as feedback are great for achieving that goal. We can provide feedback by telling, but this only achieves so much. At the deep learning stage, asking open-ended and thought-provoking questions can prompt students to clarify their intentions and direction in their own words and for the teacher and student to negotiate meaning. Particularly if the questions encourage the use of higher-order thinking skills, such as asking students to analyse information or reflect on their learning. This makes me think about a teacher I observed some years back. Let's call him Mr Mathematics. Mr Mathematics had a culture of deep learning fully established in his classroom and I thought, how did he do that? By observing the classroom carefully, I worked out that he would begin a new unit of work by posing a big question and that motivated the students to explore the topic. When the students realised they didn't know something, the teacher refused to answer a question until the students had exhausted all the sources of peer help available in the classroom. Mr Mathematics wanted his students to engage in authentic inquiry as part of deep engagement. This process is accompanied by developing habits of individual assessment and self-monitoring. But it can also be generated by students in equal status peer partnerships. Mr Mathematics asked students the types of questions that made them query their own assumptions and locate their own errors. He pushed the intellectual work back onto the students. And you know what? The students started to identify and correct their own errors, their peer's errors and even the teacher's errors. He also asked students to explain and justify their strategies to each other. They had to convince a peer that what they were saying made sense. And without any prompting from the teacher, the students started to form their own informal groups. They would check their progress with each other, seek feedback from each other and explain their ideas to each other. Mr Mathematics classroom culture is a prime example of how questioning and peer feedback can develop deep engagement competencies in students. Now, these were 16 and 17 year old students, but these techniques can be used at any level. The capacity to use higher order thinking skills for deep learning is not limited to mature students. Teachers of three and four year olds argue that even very young children can engage in deep learning. A real danger is to underestimate what learners are capable of doing. Students thrive on challenge. We need to question students to stimulate their learning, make the connections themselves, prompt them to explain and justify, and provide their own feedback.


Going on everyone Sam here with late sports cards. We are ripping at 22 pinning flaws football hobby one box break number 20 Random left side serial numbers There's a look again at your random results as always you can find those on the website under the results tab as well as a link in chat Good luck everybody. Let's do it. We are down. I guess to just the bears and The next one couple of orders came in. Let me just thank those people before we get started That is gonna be Sean M with the Titans Phillip S with the Patriots Kyle B with the Jags Joseph D with the Falcons Scott F with the Ravens Bob G with the Chiefs Andy F with the Cardinals. Thank you. That's unreal man. Thank you all. Let's do it. Here we go We're down to just the bears and NT PYT now. They're on sale. They're 120 Vila shown junior RPAs. They got a slew of that single Terry or locker Briggs Couple other guys as well Dan Hampton, I believe is in there. I'll see a shield everybody That's a really good in here.  Holy hell All right, we got going to the two spots two of ten Derek Henry and CJ 2k Chris Johnson James D. I just went there buddy. Yeah, that is the logo patch and the Just like letter patch for Chris Johnson Game worn Chris Johnson. Hell. Yeah, dude. That's a game worn letter of Chris Johnson. Hell. Yeah, man CJ 2k one of the most electric running backs of the 2010s Nice one here is going to the 16 spot Viviana V Roger Stalback Tony Romo and Dak Prescott Congrats on that It's got up with the Ravens there you go Joseph D. Now the now the orders are starting to come through took the Falcons. Thank you Go fence up Kyle. That's a shady said fins up sold out sold out everybody Unreal. Thank you guys Don't a Philip S. E. How about a Drew Bledsoe logo patch auto nice one there for New England and the 10 spot which is Philip S Oh Going to the 13 spot Viviana V. That is gonna be how we long Going to how we long nice one there 13 spot Viviana Go into Peter M at the three spot Shawn's boy cheetah Tyreek Hill Here Nice one there congrats to the three spot Get healthy This is nasty you can make this one go to the one spot shot him. We've got Kenneth Walker nice canine one of eight Canine on the glove rookie patch auto and nice one here going to Ben P at the nine spot nine of ten Archie Manning Archie Manning at the nine spot. That is a three-colored a player worn patch auto Congrats, Ben. Nice one there on the Archie empty. I just want to see who took the Bears really quick Bears are going to Sergio a Sergio a selling us out for the night. Thank you Sergio hell. Yeah, man Yeah, this is a so wild inner dude We're gonna start here going to the two-spot two of five. That is prime time Deion Sanders Two of five congrats to James This thing's nasty right here One of two going to Shawn have laundry tag Color match on the green sauce gardener Congrats on that one the dual laundry tag shield swoosh and the NFL players Logo congrats Shawn There you go, buddy. That's awesome man.  He did not sign his RPAs in time, so he is now in this year as is Kyle Pitts. Yeah big time Jamar Chase going to Ben at the nine spot That's a big card right there man again empty case Thank you all again for filling that one up coming up next is NT


So it's been a couple weeks since I've done a video. So I figured I'd splash back on the scene doing a video that literally no one asked for.  But you don't even know that you don't know. So you're definitely gonna learn something from it. But I will say that it is about grammar. Grammar, but of course not in the way that you understand it. So I'll go ahead and start it by saying saying it this way. So we have modern notions of what grammar is. And these are totally different from what the ancients thought about it. And I don't even mean the ancients. I mean like people, you know, in the 1500s. You know, the word grammar has totally changed in meaning over the past couple hundred years. And it means something very, like it has nothing to do with grade school grammar or the stuff that like generative linguists talk about nowadays. But anyway, so what do I mean by this? Okay. I was thinking about this because I was reading and I was actually writing a commentary to Dante Alighieri, the guy who wrote the Divine Comedy, you know, Inferno and all that kind of stuff. He wrote a book called De Volgare Elocuencia, okay? And this book is, it's in Latin, it's on vernacular dialects. But one of the things that it illustrates really strongly is that people of that time period, and this is gonna be, you know, for people nowadays, I'll say.  Latin was spoken in the Roman Empire and you know, the language has gradually changed in different regions to give us the Romance languages we have today, okay? So it's important to realize that that is a modern notion, the idea that these languages descend from Latin. Back when Dante was writing, the understanding was, first off, they didn't really have a word for Latin. You did go to school and you learned Latin, but it was referred to as grammar. That is, you took grammar classes and when you took a grammar class, it was basically the same as what we would now teach as a Latin class. And the percept back then was not that Latin was an anterior language to a lot of these other vernacular languages, but the idea was, and Dante illustrates this in his own writing, I mean, it's not like he argues this, it's just like something implicit. You know, Latin is viewed as a kind of synthetic language that the goal of which is to create an unchanging standard for all the people in the Roman, you know, Roman region. And of course, even modern linguists who are really big-brained, they actually have a notion similar to this. And that is, if you want to be really anal about it, French and Romanian and all those languages, they don't really descend from Latin. They really descend from vernacular languages, you know, proto-romance, which are basically reconstructed languages because they're not based on the grammar of Latin. They're based on, you know, what we can actually ascertain that people actually spoke based on these different languages and the actual attestations of like real-life speech. And it's very different from Latin.  They just often have different forms. They don't have the same grammatical categories. But the percept that people had at this period was the grammar, what we would call Latin in this context, but, you know, grammar was an abstraction. And the thing, you know, for those of you who are familiar with Latin or another, these older Indo-European languages, you know, they're different from modern languages in that they have a lot more, you know, inflected categories. They have more grammatical cases. They have more, you know, verb tenses and stuff like that. And the percept was when you learn one of these languages, you're learning sort of an advanced, like a state of language that's more representative of how humans are actually thinking. You learn all these new distinctions when you learn, let's say you knew French and you start learning, you know, grammar, aka Latin. You learn all these distinctions that don't exist in French, but do exist sort of at the subtle level. Like the French doesn't have an overt distinction between, you know, dative and ablative, but Latin does.  Now, so that's the distinct, and keep in mind, this is actually, this isn't just something that happened in Western Europe. This is, the Greeks were the same way. Greeks often thought of, you know, Greeks, of course, have many different dialects at the period.  But, you know, Greeks had very un-dialects and they, when they looked at, you know, what we call classical Greek, they viewed it as some kind of grammatical abstraction, which people might not have necessarily spoken as a real language. But, you know, just this kind of standard for people to abide by. And the same thing, it's actually constant across other Indo-European languages as well. In India, people had the same view of Sanskrit. Modern linguists will now look at Sanskrit, you know, and call it the Latin of India, because their view is, you know, most of the North Indian languages, most of the Indo-Aryan languages, descend from Sanskrit. But there, the perception of Indian grammarians was not that Sanskrit was necessarily changing. But that Sanskrit was a perfected speech. It wasn't original, it was actually invented. And actually, you know, speakers of Latin had the same idea. Latin wasn't something original, it was something invented, it was something perfected. In fact, the word Sanskrit, some skirtam, or whatever it is, that's actually what that means, more or less, refined speech.  But one interesting thing is, even at that period, when Europeans went to India, they saw that Sanskrit was manifestly similar to Latin and Greek and Gothic and all these languages. But they looked at Indian languages, like Hindi and Bengali, that we now think of as being descended from Sanskrit, of course. But they looked at them and they were like, oh, these are something totally different. They don't look like Sanskrit at all. I mean, they borrow some words and stuff, but it looks like they're just totally different languages. And that was actually a common view at the time, that, you know, Sanskrit was this, you know, Sanskrit was the only Indo-Aryan language, and a lot of these other ones were just sort of, you know, copying from Sanskrit. Actually, another fun fact, which isn't as relevant. So there's this language that, in the literature, is referred to as Zend, and it's sort of a Persian, well, it's really Avestan, right? That's the old word for Avestan, Zend, and it just comes from the word for language. But in European scholarship, back in the mid-1800s, I want to say, there was actually a debate as to whether Zend was actually a real language, because there are some people who argued that it was just like degenerate Persians who, the heck is that? Degenerate Persians who just wanted to imitate Sanskrit. So they basically borrowed, because Zend, Avestan, and Sanskrit are actually very, very similar. They're very close in their form. And the idea in European scholarship was sort of, these languages are just too similar. Like it's probably just Persians are just copying from Indians. That was their idea. But anyway, so the point I'm getting at is that the idea of classical grammar, or the idea that Latin was a, as we know it, it was a spoken language, or something from which other languages descend, that wasn't so much the idea of people. And grammar, as they called it, or Latin, or Sanskrit, or anything else, was important not because of something historical. It's important because it's something ahistorical. On one side is a standard, a kind of social standard to which you can, people of different cultures can write, you know, French people, Spanish people, Italians, they can all write in Latin and communicate in a standard that isn't just a standard at one point in time. It's also a standard over the centuries. So you can read things written by, you know, Cicero or whatever. And at the same time, this kind of grammar was viewed as something that is a little bit deeper. It tells you a little bit more about, you know, what we would now call human cognition, the way that people look at events or stuff like that.  And a grammar or Latin is a better representation in their idea of something like that. And of course, there are also religious, I should say there are also like religious connotations to a lot of the stuff, particularly in Sanskrit.  They were used in liturgy, but there was nothing about the Latin language that was like holy. You know, Europeans at the time usually were sort of Hebrew centered, because they thought that Hebrew was like the first language or whatever. And they sort of thought that it was, you know, the one unchanged language from the tower, tower of Babel or whatever. But Sanskrit does have a religious importance, because, you know, in order to pray properly, you have to say it in this liturgical language totally properly.   They know about voicing and, you know, all these kind of linguistic categories. That was something really religiously important, because you have to be able to pronounce prayers and stuff like that. So anyway, that's about all I wanted to talk about. That was all I wanted to talk about in this video and maybe a little bit more. But this is just one of those things where, like, and by the way, I mentioned a couple, you know, I mentioned, like, Divalgaria, Laquencia and stuff like that. Don't read translations of these things. Like this is the other thing, because, you know, if you need to read something in Latin, read it in Latin. Don't read a translation, because what often happens is the translators, you know, in the case of, you know, Dante's work, for example, translators will see the word grammar and they'll translate that as Latin, because that's the correspondence of the idea. But that hides the fact that people are just thinking differently about what these words mean. So anyway, but that's basically all I wanted to say. So that's it. See you guys next time.


MSI, FAO's platform for animal disease information, contributes to animal disease intelligence at a global level in two ways. First, it is an integrated platform where the FAO and partners can share information, view the global animal disease situation and extract data, maps and graphs. This is essential for coordinated risk assessments, communications, preparedness and early response. Second, it is a powerful tool used every day by the FAO team to track and analyze animal disease events and effectively support members in their preparedness and control activities. MSI is a powerful information system that transforms information into intelligence, leading to effective actions that saves lives and livelihoods. MSI is one of the most comprehensive online global animal disease event databases and it's invaluable for two reasons. One of them is actually that it brings information together from a range of different sources and it then allows us to perform advanced analytical analyses using customizable functions and risk collector layers. In the case of zoonotic diseases, which are those that can be transmitted between animals and humans, FAO shares information from MSI with our partner organizations, WHO and OIE, which is the World Organization for Animal Health. And then together we assess the risks of emerging events, way before they develop into epidemics or even pandemics. And we decide if a joint response or a coordinated support is required from the three organizations. MSI is one tool that makes it easier to think about where the risks are and then to come up with ideas of in relation to potential interventions. We've used MSI for teaching spatial analysis courses and as part of that we needed them to show, visualize the distribution of diseases and also how those patterns changed over time. And we also then got them to import the data into specialized statistical analysis packages that allowed them to do more sophisticated spatial analyses. We need to understand how diseases are moving around the world and that is where we need to have easy or effective ways of accessing disease occurrence data from around the world. And MSI makes that relatively easy by bringing in the data from the different sources together and allows us to analyze and present or visually analyze information and then present the patterns of the disease across boundaries. So it's not just within the national context but can be within a regional context, can be across the whole world. So a regular key activity that makes use of MSI disease event information is undertaken by the joint OIE FAO network of expertise on animal influencers or off-loop. And by combining information available in MSI and OIE's why he's database off-loop compiles the epidemiological information on animal influencer from an animal health perspective. And this information is then used in the biannual influenza vaccine composition meeting organized by WHO for human vaccines. During this meeting experts select virus strains that have public health relevance and could even have pandemic potential and by linking animal disease event data to corresponding genetic sequence data from these viruses. We can assess the spread of zoonotic influenza viruses in space and time and then evaluate which animal species they affect. And before MSI was available this was actually very difficult to do. One had to use information from other sources and extract the XY coordinates and then import them into a specialized GIS system. With MSI it's possible to do it very quickly and you can retell it in the way how we as spatial analysts or as epidemiologists need it. And then we can use the resulting maps to communicate to decision makers, to other stakeholders, to farmers what the issues are and what the concerns are in relation to disease presence and also potential spread. By early warning by finding these outbreaks fast and before they develop and spread further we can make sure that we have targeted action ready which at the point of development of the first outbreak is much more cost effective than when it has developed into an epidemic or pandemic already. Animal disease control is essential if we want to keep the world safe and that is not just about human diseases because some of those diseases could affect humans but it's also about the productivity of animals. And that then is associated with the food that we're consuming, the amount of food, the price of the food, the quality of the food and also animal welfare. And given the high density of humans and the clustering of the human population in the world and the movement that there is in relation to food products and to people there are plenty of opportunities for pathogens to spread and that includes animal pathogens. By sharing data and by working together we can coordinate our preparedness and an effective global response to disease events and this is obviously essential to mitigate the risk to animals, humans but also the economy and so much more. As you can see, Impress Eye is a vital tool in the global fight against trans-boundary animal disease events.


Individualism, a Reader, edited by George H. Smith and Marilyn Moore, narrated by James Foster. 8. From The Dominant Idea, Volterine Declare Selected works of Volterine Declare, edited by Alexander Bergman, New York Mother Earth Publishing Association, 1914. The American free thinker and individualist feminist Volterine Declare, 1866-1912, was known in radical circles for her advocacy of anarchism without adjectives. This phrase expressed Declare's belief that any type of voluntary society is acceptable, so long as it embodies the voluntary cooperation of all members. In this excerpt from one of her most famous essays, Declare explains the implications of committing oneself to the ideal of individual freedom. It is not to be supposed that anyone will attain to the full realization of what he purposes even when those purposes do not involve united action with others. He will fall short. He will in some measure be overcome by contending or inert opposition. But something he will attain if he continues to aim high. What then would I have, you ask? I would have men invest themselves with the dignity of an aim higher than the chase for wealth, choose a thing to do in life outside of the making of things and keep it in mind, not for a day nor a year but for a lifetime. And then keep faith with themselves, not be a light of love today professing this and tomorrow that and easily reading oneself out of both whenever it becomes convenient, not advocating a thing today and tomorrow kissing its enemy's sleeve with that weak, coward cry in the mouth circumstances make me. Take a good look into yourself and if you love things and the power and the plenitude of things better than you love your own dignity, human dignity, oh say so, say so, say it to yourself and abide by it. But do not blow hot and cold in one breath. Do not try to be a social reformer and a respected possessor of things at the same time. Do not preach the straight and narrow way while going joyously upon the wide one. Preach the wide one or do not preach at all. But do not fool yourself by saying you would like to help usher in a free society but you cannot sacrifice an armchair for it. Say honestly, I love armchairs better than free men and pursue them because I choose, not because circumstances make me. I love hats, large, large hats with many feathers and great bows and I would rather have those hats than trouble myself about social dreams that will never be accomplished in my day. The world worships hats and I wish to worship with them. But if you choose the liberty and pride and strength of the single soul and the free fraternization of men as the purpose which your life is to make manifest, then do not sell it for tinsel. Think that your soul is strong and will hold its way and slowly through bitter struggle perhaps the strength will grow and the foregoing of possessions for which others barter the last possibility of freedom will become easy. At the end of life you may close your eyes saying, I have not been dominated by the dominant idea of my age. I have chosen my own allegiance and served it. I have proved by a lifetime that there is that in man which saves him from the absolute tyranny of circumstance, which in the end conquers and remolds circumstance, the immortal fire of individual will which is the salvation of the future. Let us have men, men who will say a word to their souls and keep it. Keep it not when it is easy but keep it when it is hard. Keep it when the storm roars and there is a white streaked sky and blue thunder before. And one's eyes are blinded and one's ears deafened with the war of opposing things and keep it under the long leaden sky and the gray dreariness that never lifts. Hold unto the last. That is what it means to have a dominant idea. This has been individualism, a reader, edited by George H. Smith and Marilyn Moore, narrated by James Foster. Copyright 2015 by the Cato Institute. Production Copyright 2015 by the Cato Institute.


So yeah, I found out that I was pregnant. It was absolutely amazing. My perspective changed. It's not about me anymore.  So I was so excited. I was like, my dream come true. I have the boy and my two girls. I wasn't one of them. The doctor came and said that have you considered your daughter have Down syndrome? What? He told me that's not true. And she said, yeah. What's going to happen? She's going to be OK. How are we going to deal with this? Looking back at our appointment with Dr. Finn, she kind of looked at us, and she saw that we were not beat down, we wanted no more. We really want to be an advocate for our daughters. And that's when she says, you know, we're forming a research bank committee. We would love for you to be a part of. We jumped to our seat and says, yes, we want to be a part of this. The Kaiser Permanente Research Bank collects blood from the members of Kaiser to be able to study those blood samples, to hopefully be able to find cures or treatments for diseases. For me, what's personal, it's important for us as a minority community, they get our blood. That's the only way that they can find out what's going on in our community. The only way they find out something is from us with our blood, and they need us. And they need us now. Anything we can do to help our daughter, our other kids, other people, yeah, we're all in. Through the process, I've learned that Janela has come to us as a gift. And we love her for that gift that she is. And it's been quite an interesting journey, for sure. You can experience the most wonderful love. I think it's the most rewarding experience. If you want to help your future generation, your kids, kids, they need us. And it's our responsibility as a human being to help.