Hey there Foundation staff, Sherm here, and welcome to Sherm's Declassified Skip Survival Guide. Today, we are covering one of the most requested topics in SCP lore, a comprehensive breakdown of everything we know about the Scarlet King. Remember one of the most important laws of the SCP Wiki? There is no canon, so we're going to approach this from every angle we can. Funnily enough, we honestly don't give very much information on the Scarlet King from his author, Dr. Clef. We learn of the Colt, the children of the Scarlet King, and the ritual they were attempting causes these women to birth disasters of some form that cause increasing numbers of casualties. We know there is a risk of an XK class scenario from 231-7 giving birth, but anything past that point is just speculation. It is important to remember that Clef has explicitly stated that SCP-231-7 is not the Scarlet King. 231-7 was Clef taking a second swipe at the concepts he worked on in 231, and the similarities are supposed to highlight that, but they are not canonically related, at least from an authorial intent perspective. As happens in a large amount of artistic endeavors, the thing you wanted to talk about isn't always the thing your audience is interested in. While Clef was writing about the links the Foundation will go to and how monstrous they'll become to fight monsters while hiding that fact from their rank and file staff, the general SCP fandom was enamored with this hidden, ancient evil waiting in the wings to come back and end us all. And that's where we hand off the torch to the author who gave us most of what we actually know about the Scarlet King, George. To start off his history, we look to the tale Dust and Blood, which the villain's wiki actually summed up quite nicely. The Scarlet King was born with the planting of the Tree of Knowledge, called Karak at the time, and known to us as the Wanderer's Library. He was the smallest of his siblings, but the only one aware, and it brought him great pain. He decided that existence itself is painful, and that he'd have no part in it. As well as destroying existence itself, he started by consuming his siblings and growing stronger on their essence. He vowed to destroy the Tree, the Creator, and Creation, and consumed or subjugated all the other gods, naming himself King of the Darkness below. He declared war on Creation itself, one which will not end until the very end of everything. He took Sanaa, one of the gods he subjugated, forcibly as his wife and sired seven daughters on her. Sanaa died after birthing them, and the King took his seven daughters as his new brides, sealing them so they would not die as their mother had. Six of his seven bride daughters bore him armies of monstrous children called Leviathans. The seventh bore heroes who fought but failed to defeat him. This tale also plants SCP-682 as a child of the fourth bride, and gives us a peek into the brother's death. A separate tag on the wiki you can check out that Joric uses liberally in his Scarlet King canon. For more on them, check out SCP-1440 and the tale Chapter 1, Verse 1 by the author Dematics. We see more of the relationship between the Scarlet King and the brother's death in the tale, three short scenes about death by Dematics. In this tale, we see that the oldest of the brother's death, all death, visits the Scarlet King's court annually to deliver a birthday present. Our point of view character points out in this tale that the Scarlet King, terrifying as he is, is comparatively unimpressive when compared to the all death. All death even feels confident enough to call the Scarlet King by his true name, Haram, son of the third brood. In the end of Joric's canon, when we came home, we see the final war of the Scarlet King in which he snuffs out damn near every single piece of creation, every god and creature and man, before finally being defeated by seven warriors wielding seven spears. These warriors would be characters of interest from other corners of SCP lore, such as Isabelle Wondermaker, SCP-1440, and Saturn Deer. Reality is restored and the apocalypse has a happy ending. Beyond Joric's massive contribution to Scarlet King lore, there are also other scattered mentions throughout other works on the site. New job by Dr. Chandra posits that the child of SCP-231-7 is actually SCP-999, and that the tickle monster could be the thing that defeats the Scarlet King with its cognitohazardous happiness. Three of Tufto's works, 3150, 3514, and 3838, contain mention of Middle Eastern groups dealing with the oncoming threat of the Scarlet King. Twisted Gears gives the Scarlet King a connection to Mr. Red of the Little Misters in his tale, SCP-Red. And the tale, Fear Alone by DJ Cactus reimagines Procedure 110 Montauk as the act of convincing the Scarlet King that awful things are happening in its name to keep it complacent, while not actually doing anything horrible to the poor girl. This leads back into the tale's second watch by Joric, where the Scarlet King is described as The King gloried in violence and depravity, calling to it the psychopath and the deviant, who then attempted to summon it and bind it to the world, as the King could not make avatars of its own. Rituals spanned from the proper preparation of a person for consumption, to methods of violation, to the summoning of the King's servants, and all pointed towards the singular purpose of reshaping the world of man in its own image. Oh, and now that I'm back around to second watch, it's time to talk about Blue Whales. In the comments of SCP-231, George explained that he didn't especially like SCP-231 as it is, but joked that because nowhere in the article does it say that 231-1 through 231-7 are humans, that it could be seven sacrificial whales just as easily. This gave the story some much needed batshit insanity, rather than just being standard horror in his words. When it was pointed out that there was one too many black boxes to accommodate this explanation, Dr. Clef showed up and removed one, hence giving the headcanon his blessing. Due to that joke, you'll notice a lot of whale imagery and references in George's Scarlet King tales, for instance, that his final daughter is named Ahabet, which is a play on Captain Ahab. The Scarlet King, in his words, might as well be a giant cosmic whale entity of destruction. And that's everything. Thank you guys for tuning in to another episode of Charm's Declassified Skip Survival Guide. If you like what we're doing on the channel, like, share, subscribe, click the bell, and if you really like what's going on around here, hit up the Site 42 Patreon or the Site 42 Store and support the channel that way. You can also join the Site 42 Discord server if you want to venture deeper into Site 42 itself. See you next time, Foundation staff.


Alex Steven, I go by at Rambo Raptor throughout the Interwebs. And today I'm going to talk to you about how you can make Ruby write your code for you. So just some quick background about myself. I work at Google. I'm a part of Google Cloud. And for those of you that don't know much about Google Cloud, it does a lot. You can make virtual machines, you can make container clusters, and you can make load balancers and databases and all this stuff. And my team in particular does open source integrations. So we look at open source tools like Puppet or Chef or Ansible or Terraform. And we try to give those tools, add features to those tools so that you can use them to create virtual machines and SQL databases and all the different things. And so just kind of way back when, when I first started on the team, we added support for virtual machines over to Puppet and Chef. And then we follow that up with, I believe, load balancers. And by the time we got to the third or fourth feature that we were adding in, we said, hey, if you kind of take the code for those different things, for those different features and put them next to each other and kind of squint at them a little bit, they basically all look the exact same. Like yeah, they're a little bit different. They're trying to do different things. But they're interacting with very similar APIs. They're doing it in very similar manners. Like all of this is, it looks almost the exact same. Why are we writing out all of this code over and over again, especially when we're anticipating making 50 or 60 different features? And so we actually went about building a code generator. Code generator called Magic Modules. It's on GitHub. It's open source, github.com slash Google Cloud Platform slash Magic Modules. And Magic Modules is a Ruby-based code generator that takes in some information about Google Cloud and it spits out actual Ruby code that we develop upstream, that we contribute upstream to these tools that they can interact with GCP. And we've since extended it, so now it spits out some Python code that we ship off to Ansible and some Go code that we ship up to Terraform. And so code generation, like writing code that in turn writes other code is something that I've been doing now for a really long time. And so today I'm gonna kind of tell you more about the ideas that, the ideas that we used in order to create Magic Modules, how approachable this whole code generation process is, and when or when not, when or times that you should not actually use this process when you're developing your own code. So I've used this word auto generation a lot. It sounds super scary. I said I was writing Ruby that outputs Python and Go and a lot of you must be like, what is going on here? This sounds absolutely, absolutely wacky. So auto generation, big word. And what this means is that computers are writing your code for you. And this still, this doesn't sound very approachable. This sounds very black boxy, it sounds kind of like the matrix is happening. It makes you sound very powerless like nothing that you do actually matters. And so I'm going to reframe this idea of auto generation a bit. And I'm gonna reframe it in terms of what you're actually doing throughout this auto generation process.  Which you're telling the computer exactly how you want the computer to write it. And the computer's going to go ahead and it's actually going to perform those actions. It's gonna write what you want exactly where you want it.  This feels more like, yeah, I know kung fu. This is just another tool in my awesome Ruby toolbox. I don't think I'm using this gift in the right context. I don't know the matrix that well, but hopefully the juxtaposition works. So I feel like in tech, we love this meme of something once, something anywhere. And I think the way that I kind of think about auto generation is you are writing something once and the computer is going to write it anywhere else with about 17 different asterisks on that. So that's what auto generation is. And the next thing you must be wondering is, well, how do you auto generate code? This sounds super, super complicated. Like what are the actual steps involved in this black magic?  Okay, so it's like half the room. So half of the room has been to middle school. So mad libs, you get like a packet of them. You get about 20 of them. And each one is a piece of paper with a template. So it's a couple sentences with various words that have been replaced by blanks.  And so then you take a couple words from the word bank and you fill them into the template. So I'll take a couple nouns and we'll say the dog ran up the hill. Then it, I'll grab an adverb, then it angrily jumped under the chair. And hopefully you made something funny out of it. And then you rip it out, throw it in the trash and move on to the next mad lib. What we kind of ignore here is I have one template, and I've got four, six, eight different words. And I can actually use this template in a set of words to create a whole mess of different sentences, different paragraphs. And so these are a bunch of the different paragraphs that I can create with one template and a batch of eight words. And some of these sentences are utter nonsense and some of them are grammatically correct. But ultimately, this is kind of an interesting idea that I have one template. I have a word bank and I can use that to create many, many different kinds of sentences. So now let's try applying this to something like code. And for the rest of this talk, I'm gonna kind of use this. It's a little bit of a, it's not, anyways, I'm gonna use this example relating to food. So I'm gonna have all these different food APIs that allow me to add toppings to food and order food. So you can see in my word bank on the right, I've got pizza class. And pizza can take various API options like pepperoni and sausage and salad, et cetera, et cetera. And on the left, we've got something that actually kind of looks like Ruby code.  So the reason we can kind of look at this and see Ruby code, the first line we see dot new, that's obviously a Rubyism. And then we set something to an object, the second line. We can see that we're calling this add function and we're calling it some kind of parameter. The third line is just completely valid Ruby. So we're just saying on some object called a, we're gonna call the order function. So what I could do is I could take various parts from this word bank and I could apply it to my template just as I have been in the last example where I was using English. So let's see what that looks like. So I've got these six examples and all of these look like valid Ruby code. Provided that I have some kind of pizza object or some kind of salad object, some kind of breadstick object. And so this is kind of an interesting idea that instead of having a template full of words, which is kind of like a text file. Instead, I've got a template full of words that when everything's all said and done, it just happens to look like code. And it just happens to be code that a Ruby interpreter could perfectly handle. And so if there's anything that I really want you to get out of this talk today, it's that auto generation is just like Mad Libs. It's taking a template file that looks kind of like Ruby if you squint at it a little bit, and it's a file that you have written out by hand. It's a text file. And you're injecting in certain Ruby keywords such that when you have a final result, it's valid Ruby code that can be run through a Ruby interpreter. Now I think the important thing to think about is what isn't auto generation? Auto generation means a lot of things to a lot of different people. And in the context of magic modules, in the context of how I've been doing auto generation, these are the things that aren't being used. I'm not doing any blockchain. There is no Bitcoin. There is no initial coin offering. Insert Bitcoin joke here. But there's also no machine learning. I haven't talked at all about linear regression models or TensorFlow or black boxes or artificial intelligence. That's because none of those things are necessary in order for a computer to be writing code. There's also no compiler magic.  And there's also no metaprogramming. I'm not gonna be writing Ruby code that on the fly creates classes and adds methods to those classes. There are auto generation approaches that use all of these. Maybe not blockchain. I don't really know what blockchain is. But there are auto generation approaches that try to use machine learning and try to use metaprogramming.  It's not gonna be what I'm gonna be talking about today. So auto generation, cool little trick. I can build this template and I can get something that happens to look like Ruby code. What is this actually useful? When do I want to be trying this approach? And so before I dive into that, I kinda wanna talk a little bit about the abstractions that we have in our toolbox and the things that we use every day as Ruby programmers. Because I think it's really useful to look at the tools we already have and say, this is why we use X, this is why we use Z. And then understand where those approaches don't necessarily work. And why we might be searching for other options. So I've got a little bit of Ruby code here, using the same example as before. And I've got a little script. And at some point during my script, I call the same block of code twice. I order a pepperoni pineapple pizza twice. And so most of us would say, hey, wait a second, that's code reuse. That's, we're using the same code in two different places. You know what we should do with that? We should apply a function. So we take all that code, we remove it, we put it into a function. In this instance, it's called the order pizza function. And then we replace those two instances of code with function calls. And as Ruby is, I think we've all done this before. And if we wanna get really fancy, we can actually say, okay, well, a function can take in parameters. And so let's go ahead, and instead of having all those constants in my function, we'll have them inserted in as a function parameter. And then we can call this function with that parameter. So this code and this code functionally do the exact same thing. And so why do we actually choose to use a function here? I think we all kind of have built up this gut intuition of when to use functions, and when they're good to avoid code reuse. But we use functions for one thing, to provide us the ability to reuse code. Provide us the ability to have the same blocks of code in one spot that can be called from multiple areas. But they also provide us an abstraction. And they provide us an abstraction over actions. I can call the orderPizza function, and I really don't need to know what happens under the hood. Is Ruby firing up a pizza oven? Like what is happening? I don't know, I don't really care. I just know that if I call the orderPizza function, I will get a pizza. So let's move on to the other abstraction that we use very commonly, which is classes. So in this case, I can actually create a class called a pizzaOrder class, and I can initialize it with toppings. And so then I can create a new instantiation of this class with a certain list of toppings, and I can call order. And again, this functionally does the exact same thing that I noticed that I was doing a couple slides ago. So when we think about classes, we have always been taught in object oriented programming that classes are an abstraction over things. Classes, we, if our code is going to be using pizza, if pizza is something we're going to be interacting with in our code, let's create a pizza class. And let's put all of the functionality relating to pizza inside of this class. And then we can create various instantiations of this, and we don't really have to worry too much about the underlying ideas behind what this class is doing. But classes also provide an abstraction over inputs. Once you instantiate a class with a particular set of options, a couple slides ago that happened to be toppings, I no longer have to think about what toppings are inside my pizza. And do I have to interact with my pizza differently if there are lots of toppings or no toppings? At this point, it's just a pizza object. I interact with it using the standard API that we've defined, regardless of what actually is within this pizza. So now, I'm gonna move on to what if we actually had multiple different variations of this. So I've got that pizza function from before where I'm interacting with a pizza. And now I'm gonna add a new set of ideas. So in a slightly separate script, I'm now interacting with salads. And so it's the same idea. I have a order salad function that interacts with a salad class. And I'm calling this order salad function a couple times.  Cool, and I'll view if you could all keep your hands up for just a quick second. How many of you think that is a good practice? Okay, cool. So just for everybody, about three quarters of the room put their hands up for that first question, a quarter of you are lying. And pretty much everybody put their hands down for the second question. So ultimately, that is the same approach that I would take looking at these two sets of code, is I would copy and paste everything from the first script, copy everything from the first script, paste it over to the second script, and then just change a couple things by hand. I'll change pizza to salad, and I'll change pepperoni to lettuce, etc., etc. And then we've got a third one, breadsticks. Okay, well, same idea, I'll copy and paste salad over to breadsticks, and I'll change salad to breadsticks, and instead of using the dot add function, it turns out breadsticks actually has a dot add sauce function. Okay, we'll find, that's a one line change, I'll make that change just fine. And we can kind of see what this would look like is one large code base. So this is kind of the same idea, just rearranged a little bit. But as we keep going, what happens if we add in a fourth option? What if we add in interacting with hamburgers, or a fifth option, interacting with pasta? Do we wanna just keep copying and pasting these blocks of code over and over again, and slightly tweaking them? And then comes the question of, well, what happens when we decide to do a refactor? When we decide that, all of these different order functions actually need to work a bit differently, because all of the underlying code within these functions changed. When I'm interacting with two or three things, that's just fine. I can go ahead and make two or three manual changes. If I'm interacting with 50 or 100, now I've actually given myself a huge maintenance burden to deal with. Because every time I copy and paste code, that's giving me an obligation to go and change that code later on, if need be. So what we're really looking for is, we're looking for a way to fix this copy-paste problem. How do you deal with the situations where you're copying and pasting code, and then just making very slight variations to them? Variations that are slight enough that if you squint at your two various places that you put code, they pretty much look the exact same. And so going back to abstractions, we need some way to abstract over similar functionality. And more importantly, we need a way to abstract over the problem of similar functionality at scale. At a very small scale, we have a great way to deal with similar functionality. It's copying and pasting. It works very, very well when you only have to copy or paste two or three times. So now, why talk about this idea of at scale? Like, what exactly does scale look like? And I'm gonna show you this lovely unlabeled graph, which is going to make everything clear. So this graph is kind of showing the amount of effort something takes versus the number of features that you're adding in. Versus the number of similar features that you're adding in. So if we look at this first line, if I'm adding very similar features by hand, every single time I do it, it's gonna take roughly the same amount of time. You know, I'm gonna copy and paste a block of code and I'm gonna slightly alter a couple things. Sometimes those alterations might be very major, sometimes I might be very minor. And every time I do this, it's gonna take roughly the same amount of time. And it's not gonna take a huge amount of effort.  And so gradually as more code is introduced into my code base, it's going to take more effort and more time for me to actually introduce new things into my code base. Now, the problem of auto generation is the first time you auto generate something, it takes a tremendous amount of effort. You have to write up some templates and you have to write up a word bank and you have to figure out how the two interact with each other. And then you've got to do some bug bashing. And then you get to the second time that you're going to add a feature. And now you've got to alter your code generator a little bit. You've got to alter your templates a little bit. And then you get to the third time and okay, I'm starting to get the swing of this. And eventually you hit an inflection point where you've generated enough features that, all right, it doesn't take any effort really. A slight tweak of my word bank and I can spit out a new feature. A slight tweak of my word, a slight addition to my word bank. I've got another new feature over and over and over again. So when do you actually auto generate? And I think the key thing here is you auto generate when you have lots and lots of similar looking code. And because of that, the overhead of writing out templates and writing out word banks and getting them to coalesce properly makes sense. And ultimately, you're going to be asking this question of should I be auto generating pretty much every time that you add a new feature, not just at the beginning of the process. Should I be auto generating this feature? Or is it so different from the features that I'm currently auto generating that I should just do this one by hand and leave the rest of them to be auto generated? That's not necessarily a question that I've got a great answer for you for. It's really gonna depend on your particular situation. Because the other thing to remember is once you start auto generating, there really is no going back. Once you have this template and this word bank and you start spitting out auto generated code, you can't just make handwritten alterations to auto generated code. You run your auto generator, you get all of this auto generated code, and then you make an alteration to that code. Well, the next time you try to rerun your auto generator, your auto generator is going to rewrite that code. That little alteration you made isn't in your original template. So everything that you write has to be back ported to your template or you're going to lose it. There is no way to merge auto generated code and handwritten code. The auto generated code always wins. So the topic of my talk was make Ruby write your code for you. And a lot of you at this point might be thinking, hey, wait a second, where is the Ruby? So for the rest of this talk, I'm going to be talking about, why is Ruby a great choice for writing out code generators and for doing this template and word bank mad living process? So Ruby. When we're trying to auto generate code, we need three distinct things. And I think we've talked about all three of these so far. We need a word bank. So somehow computationally, we need a way to define this word bank. We need a way to write out these templates, these templates that are text files that happen to look like Ruby code. And then we need some kind of a tool that can inject values from my word bank into my templates. And I'm not going to talk too much about that third bullet point, just because depending how you've built out your word bank and your templates, the actual little script that injects values from one to another might not actually be all that complicated. And it also might wildly vary depending on what your templates and word banks look like. So let's start out with templates. Ruby has this amazing library built in called ERB. ERB stands for embedded Ruby. And out of curiosity, how many of you have ever done any Rails development like web dev before? Wow, that is a lot of hands. Okay, so that's everybody. So this is all a pretty familiar process to most of you, where you write out a template file in ERB and it's gonna be a text file that's a combination of both text as well as some Ruby statements that are denoted via this bracket percent mark, that's what those are called. Bracket percent mark thing.  And so in this case, I'm gonna hand Ruby this array of four different things. I'm gonna hand it this template. And it's gonna run through and it's gonna return back to me a text file that is, has no embedded Ruby in it, it just has a bunch of text. And if you're thinking, man, this sounds a lot like what we're trying to do with this mad living thing, you're completely correct. So now what if my template actually looked like Ruby code? I think that's what we're getting towards here. And so on the left here, I've got this segment of code that we've been using throughout this talk. And on the right here, I've got a templatized version of it. And you can start to see the similarities between them. You can start to see various Ruby keywords, def order, okay, now I'm injecting in the name of my food, which is pizza. And then I'm going to loop over some various toppings and I'm going to do a.add the statement. And then at the end here, I have a.order followed by end, which is used to denote the end of a block or a function. And so the template doesn't look, it doesn't look very clean. It's a little bit difficult to parse. But you can definitely get the sense that this is Ruby code. Now, everybody raised their hands and said that they were a Rails developer. And so a lot of you must be having your minds blown right now and thinking, oh hey, web dev, I've done this before. I've used views, I've used ERB, I have all of these thoughts and all of these opinions and I can't wait to start auto-generating using them. And just all kinds of deja vu. And the ideas that we use towards creating our templates are actually fairly different. So I used to do some Rails development back in the day, not a ton, by any means. And some of the opinions that I got while trying to build out Rails applications are very different from the opinions that I've been getting when trying to auto-generate code. And the big thing is in your templates that are being used to auto-generate code, you wanna put as much logic as possible in there. You don't wanna be clever, you don't wanna be making function calls that are writing out whole functions. You want these to be as verbose as possible. And that's because once you start auto-generating, your code base isn't the code that you're auto-generating. That's just the end product. The code base that you're working on on a daily basis really is your template. The alterations that you make to your template are going to be what you're doing on a daily basis in order to get to your final state, which is almost a byproduct. And so your biggest goal should be, I want my templates to be human readable. I want them to have good coding standards. I want them to be something that I find hopefully joyful to interact with on a daily basis as I'm auto-generating code. So now we get to the second part, which is your word bank. And there's a million different ways to define your word bank. The way that I've been using in my work with magic modules is, oh, we're not quite there yet. Okay, so word banks. Your word banks contain everything that you need in your templates. And so I think the best way to figure out what information do I need in my word bank is to actually reverse engineer your word bank from your templates. So you start out with one feature that you wrote out by hand, just to understand what does my template look like. And then you take out some of the key words in that handwritten example and you replace them with blanks. You say, okay, well, this is now my template. And then you look at your template and you say, okay, well, in this blank, I'm going to need this API information. In this blank, I'm going to need this information. And from there, that's how you engineer what your word bank is going to look like and what information is gonna be contained within it. So now that you have some idea of, this is the information that my word bank actually needs, how are you going to format it? Like, what technical prowess can you use to actually get this into a computer-readable format? And I love YAML, which I feel like is becoming a very unpopular opinion by the day. YAML, I just think, is really cool. So you can, Ruby has a really, really cool YAML library. It lets you both take a Ruby object and serialize it to YAML and also do the opposite. So in this case, I can write out some YAML that represents an array and I can say YAML.load. And I get a Ruby object that is, I get a Ruby array with all those given values on it. And I can do the same thing with a hash or really any other primitive. I can also do this with classes, which I think is the absolute coolest thing in the world. So I can write out by hand in YAML what I want a various object to look like in Ruby. Then I can say YAML.load. And for the most part, I'm gonna get to some caveats in a second here. For the most part, that's the same thing as saying object.new and setting all of these values. And the first time I heard that, it pretty much broke me but in a good way. Like I thought that was just the coolest thing in the world that I could write up Ruby objects by hand and then just say give them to me and all of a sudden I would have them. There are a couple caveats in this. These are things we use YAML within our co-generator magic modules. So these are a lot of the caveats that we've had to deal with which is like initializers are never called. And so you just kind of get an object that has all of the various fields that you've written up about. And there are no rules just because something doesn't have a getter or setter doesn't mean that you can't actually inject those values into YAML. And you could have some security issues depending on whether or not you trust the source of your YAML. And the TLDR is there are no rules you can do anything that you want. And that might make some of you a little unhappy. So kind of just to wrap up, the TLDR of this entire talk is co-generation really is like Mad Libs. It's taking a template that looks like Ruby code or Python code or Go code. And it's taking a word bank of things from various APIs that you're interacting with or whatever it is you're trying to auto-generate. And it's combining them in order to build functional Ruby code that is run through a Ruby interpreter or a Python interpreter or a Go compiler or whatever else in the exact same way that your human written code is. So with that, thanks a lot. I'm available throughout the interwebs, Twitter, GitHub, speaker doc, Rambo Raptor, slides are already posted up there. If you're interested in seeing the code generator that I've been working on full-time, github.com slash Google Cloud Platform slash Magic Modules. And good luck, hopefully this is useful and you can find uses for it in the real world.


This is Rob Johnson, president of the Institute for New Economic Thinking. We're in a world right now where people are terrified about what you might call the resilience or the evolution of democracy, our ability to meet collective challenges like climate change, our concerns about overcoming the hideousness of racism and gender discrimination. And in that context, in all the tension, people are very, very concerned about expertise, education, and the credibility. Are these people who are well educated, doing marketing for power, or are they there to represent a deeper understanding of the public good? Obviously, we all look for the latter. And today I have with me a gentleman who's very experienced in this realm and very devoted. Ronald J. Daniels, the president of Johns Hopkins University, has written a new book called What Universities Ode Democracy. I think this is how would I say it, that what the doctor ordered is someone with his level of experience and insight sharing with us, which you might call Turn the Supertanker of Education, so that we miss the coral reef and have a successful voyage. Ron, thanks for joining me. So great to be here, Rob. Thanks for the opportunity to talk to you today. Well, this book, which I believe you have two co-authors, Grant Shreve and Philip Spector, who are involved with you, and you can describe the chemistry that you put together. But this book, as you could tell from my introduction, just feels like what you might call what the doctor, what the spirit doctor ordered. And I'm curious, where did the inspiration come from? Where did, what inspired you to do this book and now? So I think it starts first and foremost with the sense that I and so many of us have around the state of our democracy and the concerns about the fragility of our democracy in the face of growing polarization, distrust in core institutions, the rise of fake facts, the tendency for people to not merely think that those with different views are wrong, but they're immoral or evil. And in all of these ways, I think this creates a very perilous moment for democracy. And it's in that context that, given my many decades as a student, as a faculty member, as a dean and now president of a university, I've been thinking lots about the role that universities play in supporting democracy. And the more I thought about this, the more it seemed to me that universities are not just an institution and society, but perhaps are an indispensable institution for the flourishing of democracy. And in a way that these institutions have a role to play that is comparable to the role that we see an independent judiciary, responsible elected legislatures, a free press playing in our democracy. And if that is true, then it's important to understand the precise ways in which universities foster democracy. And then, of course, to ask the question, as much as we think and know that we are doing to support democracy, to ask the question, are we doing enough? And if we're not, what should the reform agenda look like? And so it's really that fundamental sense of the marriage of the seriousness of this moment coupled with the prospective power of this institution to do more to respond to it. Well, from our preliminary discussion preparing for this, I came to understand that you grew up in Canada. And the great author Jane Jacobs, her last book in 2004, was called Dark Age Ahead. The third chapter was called Credentializing Versus Educating.  And both matter. And it seems to me that the, what you might call the withering of the democratic, the citizenship flank has taken place. I know in the United States, when I was a boy in Detroit metropolitan area, we took civics. And it was about the role and the favorable role of what government institutions did to create the contours and enforce the contours of a just society. But that seems to have evaporated. And along with it, some of the trust and faith and confidence in government institutions. And I don't know that that cynicism is always unwarranted. But if there's a better way, we've got to be able to teach that. And it seems to me that's what you're invigorating, is that possibility at this critical time. Absolutely. And so, you know, I think it starts first and foremost with, you know, a sense of what is the responsibility, not just for universities, but for K-12 education, in terms of educating our children for the responsibilities of democracy. And as our founders well understood, democracy is not easy. It's challenging. It's challenging when there is not an essential dogma or essential truth. It is challenging to have to deal with competing viewpoints, competing claims around what the public good requires. And so, it's in that hurly-burly world that we know that we have to equip our children with the capacity as they mature into adulthood and to take on the responsibilities of citizenship, that they understand the nature of the enterprise that we're involved in, why we have the institutions we do in the United States, where those institutions have worked well, where they have not, how they have evolved to respond to challenges and failures, and, you know, more than that to equip students with the capacity to be able to take that knowledge and to be able to develop the skills and habits of working with others across difference to be able to foster change in our society. And I think it's really a foundational responsibility. It's, you know, this sense of understanding of democracy and its requirements doesn't get acquired through osmosis. It requires deliberate education. And to the extent in this country that we know that 25%, only 25% of the students graduating from high school have had a proper grounding in civics, that means that if we're going to rectify that situation, it falls to universities to step up. And again, given that we have a situation where more than 70% of Americans will go into some level of post-secondary education, I think that we're important sites for being able to respond to this challenge. And again, I think it doesn't have to come at the cost of giving students expertise, skill, dare I say, credentials in areas where they are interested in pursuing careers, professions, graduation. So it's not either or, but we have got to understand that we're both training for the marketplace, but at the same time, educating for citizenship. You've given us a very good statement of what, in the medicine and why, but I guess it's how.  So maybe it might be helpful if I start first and unpack a little bit the idea that universities are indispensable for democracy. Because I think some people might say, well, I get courts, I get the media, universities are good in training, but why do we really think a vital role for universities is indispensable for democracy? Maybe I can talk a little bit about that and then we can talk about prospective reforms. To start, so much of the writing about universities and the extent to which they touch democracy has historically been about the importance of a liberal arts education. And when you look at whether it's Alan Bloom's classic, closing in the American mind, a totally improbable bestseller that shaped the date for a time, or at some of the recent writing of people like Tony Crom and at Yale, the focus has been very much on the importance of getting the Western canon, the liberal arts back into the first, back into the undergraduate curriculum. And that's an important debate to be had, but I think it's only part of the story about how universities affect the society of which we're part, not just about what kind of undergraduate, formal undergraduate program you have, but there's so many other ways. And so let me just talk about those briefly. One, universities are really important engines for social mobility. In fact, there's no more powerful instrument for taking people from disadvantage and casting them up the economic ladder. And it's not just that those who graduate with a university degree are going to enjoy a significant increase in lifetime earnings. It's not just that they will have much less risk of periods of unemployment. It is that they will live longer. We know that they will enjoy greater family stability. There's a greater degree of contentment. So there's so much that happens with the receipt of a university education. And it's here that one can't help but ask the question, given the overwhelming weight of students in universities, both public and private, here in the United States and indeed internationally, to students from the highest income strata, the question is, how well are we doing in ensuring that the ideals of equal opportunity and getting access to the benefit of social mobility is being realized. So I think that's an important area where we very directly touch the confidence in democracy. Another area which we play an important role is around educating for democracy and teaching the ideals of the Enlightenment and what it is that we're trying to achieve through the structure of government we have in this country and where the aspirations have been of the founders have been properly realized, where they may have been too myopic and we've over time broadened them. These are important issues for us to be teaching our students and to make sure that they are well prepped for citizenship upon graduation. And it's not just about stock of knowledge. I think there's skills and habits that we can inculcate in our students during this time that will make them better citizens and better equipped to deal with the challenges that we see in democracy today, including of course the ability to be able to discern fact from fiction where there's so much exposure to claims and sometimes people overwhelmed in terms of being able to know what is true and what is not, which is so foundational to democracy. We want to operate on truth rather than falsity. The other area which I think institutions of higher education are absolutely critical is that we're really important places where we are dedicated to the pursuit of truth, of creation of knowledge, of stewardship of knowledge, and as places that take the commitment to fact and truth so seriously, we play an important role in helping media and indeed political representatives be able to check, confirm, verify what claims are being made out in the marketplace of ideas are true and what are manifestly false. And so we play an important role of checking claims and here it seems to me that we have to worry a lot about ensuring that our ideas are shared, are accessible, and the public can have a high degree of trust in our reliability and I think we face some challenges in that front. And then finally, and as important as the other three areas that I've talked about, you know, in a world where increasingly we just don't hold different views and are unwilling to really engage with others across the divide, we actually create lies for ourselves where we live, socialize, and work with people who are just like ourselves so we sensuously avoid the opportunities for contact and engagement. We know this in terms of the great sword in American society of liberals living with liberals and conservatives living with conservatives and never the twain shall meet. Universities have become very intentionally sites of enormous diversity, of enormous pluralism. Our classes are much more diversified, race, ethnicity, socioeconomic status, geography than they've ever been. And it seems to me that we've got four years when the students are undergraduates to do something really extraordinary and allowing students to be able to learn how you navigate those differences and find friendship, civic friendship with those whom you might vociferously intensely disagree with but nevertheless can still see yourself as being part of a collaborative enterprise. And if we do that right, if we're better able to equip students with the ability to negotiate those differences, then I think we've got a shot, particularly given the high numbers of young Americans who are in post-secondary of education, to be able to change the arc of the country's culture and in particular to increase the likelihood that we become less polarized and less distrustful of each other and the institutions that govern us. Well I think these are very, how I say, very powerful elements of the healing and the repair and the evolution of our society. What are their specific structures that are in your mind obstacles to this achievement that you would like to underscore? You know, it's a great question, Robin. I think for me, you know, when you think about what would change if we would take these ideas seriously, you know, I think we would, for instance, end legacy admissions. I mean, this is a practice where, as you know, about 70 to 100 top private universities in the country put the thumb on the scale for students who are family members of graduates of the institution. If we're really committed to the ideals of American democracy, Jeffersonian ideals of equal opportunity, it seems to me that it's very difficult to justify such an overt preference for people who come from privilege. And particularly when there's so many other benefits that students of or children rather of graduates of a university will already have by virtue of their parents being educated and subject to all of the benefits that I talked about before in terms of higher earning power and so forth. So, you know, that's something that's clearly available to us just to stop tomorrow. It doesn't require government edict. One could think about, for instance, how we deal about our challenges around educating for democracy. And here I think a number of institutions are moving in the direction of introducing courses or clusters of courses where students are given the opportunity in some cases required to take an exposure to some kind of educational training in democracy before graduation. Again, that's easily available to us. And then, you know, if you think about other practices within the university that I think have undermined our effectiveness in promoting some of the things I'm talking about, one of the obvious places is around, and it's quite simple, it's around housing. When students come into universities, and again, as I said before, these enormously diverse and interesting communities were creating, but to the extent they are given, for instance, the ability to choose their own roommate before they come to university for the first time. And when they do that, that they're choosing, you know, roommates in university housing that look a lot like them, you know, whether it's by race or by socioeconomic status, that seems to me to be something that is a lot, you know, that represents a lost opportunity. And here, again, something as simple as what some universities have done recently, which is to end the ability of students to self-select their own college roommates before coming to university, again, is a simple way in which we foster this idea. So there's lots of things, and there's others that I talk about in the book that I think can make this broad ambition very practicable. And I don't think that much stands in the way of doing this other than our willingness in some sense to take this responsibility seriously. Yeah. Well, I do think, you know, I want to talk about two dimensions of learning. One, the learning is the experience of who you learn with, like you said, the diversity, whether geographic, gender, race, income, you know, tears that the children come from. And so that, which you might call fostering of mutual respect across all those different categories is contributing to the democratic sensibility. The other question I'm curious about is in the curriculum, a lot of people have written about what I'll call the rise of the vocational, you know, accounting business majors and the things of that nature, and the decline of the humanities, poetry, music, Shakespearean literature, and all of that. What role, that latter chapter, what evolution of the curriculum do you think is, we might call a necessary ingredient in achieving this success? So in the book, I discuss this briefly and other writing that I've done, I talk about it very explicitly, the importance of the humanities and undergirding a good undergraduate education. And I've talked about, you know, the extent to which in a place like Hopkins, we have a lot of students who are deeply interested in the sciences. And that's why they come to Hopkins. But I'd like to remind them that, you know, one, just in terms of the kind of technical skill that you're looking to acquire while you're here, it's going to come at a very early point in your professional lives when you are going to be confronted with issues as to how you think about that technology, how you use it, is it does it, it does it comport with the public interest, you know, doctors face this on a daily basis, research scientists face this in terms of the new technologies in CRISPR and artificial intelligence so and so forth. And you need an understanding that goes beyond the technical aspect of these scientific disciplines to contextualize it. So I think that's really important just for being good at what you do on graduation. At another level, I think just in terms of as you know, we know as we age, we become more and more attentive to the meaning of our lives and whether we're having the impact that we want to have and, you know, thinking more carefully about whether we're living up to the things that we hold most dearly. And again, I think that's what an educated imagination that is steeped in the humanities allows you to do. And I feel very strongly that, you know, as much as we're trying to prepare students for the first job, and I think the humanities are helpful, even if they're a minor to the major in engineering sciences, we also got to think about, you know, the midlife crisis that is, you know, that comes the way of so many of us and how we actually equip students with the ability to have avoided that by ensuring they're living lives that are meaningful to them. But even when that moment, and if that moment still happens, that they have some foundations is to be able to work through it and to understand how they fit in in a broader universe. So I think we can do all this. It's not either or it's and with. There is a sense, I think, in which we've been talking about enlarging the community within the United States, but enlarging that dialogue and difference and compassion and curiosity across borders may also contribute mightily to the quality of our future children's lives. And so I'm curious how you see those, which am I called the cross cultural challenges to be integrated in this process? You know, Rob, it's a really interesting point that you're raising. And, you know, in fact, it was the challenge that you're raising about how we negotiate an increasingly interconnected global society is one that, you know, 20 years ago, 25 years ago, when I first became the Dean of the Law School of the University of Toronto, I was very focused, we were very focused on this sense of how do we open up to the world and what this what what the opening implies for our educational mission and the law school indeed across the university. And there was a sense, you know, that globalization is going to infect every nook and cranny of life. So just precisely things you're talking about is, you know, how how we work to understand different cultures and societies and, you know, how how we should assess them, work across them and so forth. That was all that was a paramount concern. And it's still, of course, important today. But I think in some sense, the spotlight has shifted, you know, very much domestically that, you know, given how deeply ribbon we are domestically, if we don't get over the level of polarization, acrimony and trust, distrust that I think threatens the core stability of our common enterprise here is hard for me to imagine we're going to be worth much on an international stage. So I think in some sense, the issue that you're raising around global society and how we reflect that in our mission are really important. But we've got a more important issue given what's going on at home right now that we have to solve and solve quickly if we're going to be able to maintain our end of the conversation at the global level. So I think it's just a question now of shifting priorities, not that we dismiss this other poll, it's just that we understand the perilous state of our domestic political culture. Yeah, you're how to say your awareness of society, of institutional elements, and of the emotional psychological elements in a person learning is I'm just I delight at listening to you today and the way in which you can integrate all of these things. It feels to me more like a credible healing than almost anything I've read or heard in recent times. And what I really I really admire is that you are embracing this challenge. When everybody's scared, it'd be easy to hunker down, but you're becoming an even greater leader by rising to the challenge. And I want to I want to celebrate that for a moment with you with a song that I heard in my mind as I was listening to you comes from Harold Melvin in the blue notes, but Teddy Penegras sang it. And the first portion of the name of the song is Wake Up Everybody. Wake up everybody no more sleeping in bed, no more backward thinking, time for thinking ahead. The world has changed so very much from what it used to be. So there's so much hatred, war and poverty. Wake up all the teachers time to teach a new way. Maybe then they'll listen to what you have to say.  When you teach the children, teach them the very best you can. In the chorus, the world won't get no better. If you just let it be, the world won't get no better. We got to change it. Yeah, you and me. Well, I got to do my part because you're rising to the challenge. But it's really, I feel very fortunate to have been able to spend this time share it with my audience, my young scholars. We have a over 15,000 in our young scholars initiative. And how would I say, I look forward to them reading your book, engaging in discourse, talking about the reform of economics or affirming parts of economics, but engaging in that critical discourse. But you're one heck of a catalyst and you're very insightful. And I'm grateful that you joined me today. Thanks so much, Rob, for our truly wonderful and really interesting conversation. I've really enjoyed it.


Most men are weak and beta. How do you get past this? How do you be a real man? How do you be a husband and a father? That has been where we dropped the ball as men is because we're too accepting. We're too tolerant. I'm calling for intolerance for evil. We need to be able to properly identify, with the definition, what is masculinity? We need men to stand up and do heroic things. Building a tribe of people who are of like mind, who you can depend on, who hold you accountable, who will call you on your VS. I call the official tagline for now, the 2011 convention, is America's last stand for masculinity. I think it is. The event is a reflection of the man's spirit, really.  Not just talking about being masculine, but, okay, you've done all the self-development. What are you gonna do with it?