Good afternoon. We are going to see a talk about the Rails boot process, and I would like to explain before the goals of this talk. So in this talk, we are going to see a few things related to this topic. For instance, if you open the config directory, there are a number of files that we normally never touch that are generated, like this config.boot.rb, config.environment.rb, and so we are going to see what they do, okay? Then Rails components in general can work independently of Rails. So Active Support, for instance, is a library that you know you can use in a Ruby script that is not running inside the Rails application. Also for instance, you can use Active Record outside Rails, okay? You can have like a regular Ruby script using Active Record connecting to everything, you know? You have everything.  And there's nothing that the programmer has to do to get these things working together. And we are going to see how that works. And you know, the final goal is to understand more or less what happens when, okay? I say more or less because there's a lot happening, but we are going to have a good sense of what happens when. And for this talk, we are going to have to take into account a few things. First, the approach of the talk is thought for Rails parameters, right? So for instance, it's not going to be like a, you know, a walkthrough of, you know, of code and code and code and see the rune path of these things. So we are going to see code, but it's not a walkthrough. So with this talk, I have tried to explain what I would like to know as a Rails programmer about the root process, the boot process, okay? And it is something that I would like an innate guide to cover, you know, that kind of information. In the boot process, we have rail ties and we have engines, but this is not a talk about rail ties and engines. We are going to see what they are, but that's a topic for the whole talk, okay? So we are going to see only what is needed for this talk about rail ties and engines. Therefore, we are going to see some code snippets, but they are going to be like heavily, heavily edited. So I have not even tried it so that the slides makes clear this has been edited, you know, with ellipses or something like that. We put like a big warning and in general, the code we are going to see, if you open the real file, is going to have more stuff, okay? But there is a lot going on and I tried to select and, you know, and put everything out that was not relevant to the topic we are talking about. And finally, we are going to ignore spring, you know, so the boot process assuming that no, no, no, no, no, this is the boot process, you know, the vanilla thing, okay, without additions, all right. So normally when you think about booting rails, you have a server in mind, okay? You launch the application, you launch the server, you can, you are able to serve requests and everything, but there are more things that boot rails. So for instance, if you run the console, you know that somehow you have everything in the application available in the console, right? Also runner, if you run, you know, if you pass runner a string or a file name, it gets executed in the context of the application. So somehow the application has been booted for, you know, in order to run these commands. Runner indeed is a command that I love. I believe I run this command every day. So it allows you to run something quickly instead of launching the console and then control D and that kind of thing, you just, you know, runner something. And indeed to understand the rails, the rails initialization, runner one, which is execute the program that has a literal one, you know, it's something that I do often, you know. So that's the minimum thing, the minimum thing rails runner one, the minimum thing that, you know, loads what it has to load, does what it has to do and then there's no more side effects, except evolution one, which is not allowed. And also in some rate tasks, you know, that you have also the environment load. Booting the application means being ready to serve all these kind of things. All right. So let's open bin rails, okay? This is a file that is generated in any, at least, modern rails application. And we have here config boot, we load config boot and then it doesn't require something, okay? If you open bin rake, you will see that it loads config boot and then does a stuff related to rake, okay? So these both, these both files start loading config boot. That's the first thing. And if you open config boot, you will see that is basically doing bundler setup, okay? Bundler setup configures the load paths so the application is able to require the gems that are in the gem file with, you know, with all the constraints and everything and is not able to load gems that are outside that thing, okay? So bundler setup tricks load path and, I don't know, all is needed so that that is going to work. Then if you open config rule, which is what you execute when you launch a server, you will see that it requires config environment, okay? And then does something. Config environment is another important, important file. It loads application and this is config application rb, which is the first file we normally, you know, working as a programmer. That's the kind of the first thing, you know? Config application rb is where stuff starts, where you can config, I don't know, time zone, that kind of stuff, okay? So that's the file that is being referenced here. And then very important, it runs Rails application initialize. And this is the magic. So initialize, this method is the one that runs all the initializations. Up to now, we are like setting things up, you know, to be able to do this. And this is config application rb, which loads Rails all and then executes boundary require with the groups that are relevant to that execution, okay? So Rails all, we are going to see Rails all later, okay? Forget about it for a moment. But the point here is that we are doing boundary require. At this point is when the gem dependencies are loaded, okay? Unless you opt out, okay? At this point, and after that, we evaluate the class that defines the application itself, which is, you know, this thing that is named after, you know, what you pass to the new command, that kind of thing. Okay, so the presentation is organized in a few blocks.  So we are going to dive a little bit in something, and then I'll leave it up, doing some summaries, okay? So this is the summary of what we have seen up to this point. So define load paths. We have gems, dependencies ready. Then load Rails all, which is something that is going to be seen later. Then we actually load the dependencies. Define the application class, run, initialize. That's like the script, no, that's the order in which things run at this point. And it's initialize that does the proper Rails boot process, okay? Rails-RailType, so Rails-RailType is a class that provides a number of things so that extensions and, you know, are able to hook into this process. For instance, it provides hooks to run code when you launch a console, when you launch the runner command, you know? So you can say, as a gem, you can say, hey, if I am loaded in a Rails application and the console is launched, please call this code, okay? And we may have a series of blocks like this that are scheduled to run at that point. Then you have the ability to define custom configuration points, okay? So when you see, for instance, config.something, config.activerecord.something, you know? A RailType, we are going to see later that ActiveRecord is a RailType, allows you to define configuration points so that applications are able to, you know, to express the configuration they want. And also, very important, they have the ability to declare code to be executed during boot, during boot. So these are called initializers, okay? So hooks, configuration points, and the ability to declare. So, Rails can declare that I want to run something when the initialization happens, which is something I don't know, okay? Rails are defined by suppressing this class, this very class. And Rails knows which Rails are defined because there's an inherited hook, you know, that when Rails, RailType is subclassed, there's an inherited hook that say, hey, I have been subclassed and that by definition is a RailType, okay? Well, there's a technical thing about some special subclasses that I know, but that's the idea. So let's see an example, okay? So this is, for instance, a RailType of FactoryGal. And this initializer thing with a block is, FactoryGal is declaring when the application is initialized and I don't know when that is, you know? But when it happens, you've got to run this code. So for instance, FactoryGal at this point knows that Rails root is already defined, okay? That's a contract. You know you can assume that, okay? And in this case, FactoryGal is setting up some factory paths or something like that, okay? So the way FactoryGal, so FactoryGal needs to define some paths that depend on the Rails application, and the way to do that in an integrated way with Rails is to define a RailType and say, okay, when you are booting, call me and I will, I will configure myself, all right? So Rails components are integrated into the framework using RailTypes. For instance, this is the RailType of ActiveRecord. ActiveRecord defines a RailType to integrate into the framework. In this case, for instance, this is an example. This is one of, this is the hook that tells Rails to run this code if the console is launched, okay? So if the console is launched, if it's launched in sandbox mode, which is a mode that starts a transaction and rollbacks a transaction when the console, when the session is over, okay? Load some code, I have not copied here, okay? Load whatever you need to support this thing. And for instance, then you have, you know that, that recently in the console, you get, you get the SQL logins in, you know, there. So there's code that says, okay, unlock to standard error, all right? So that's the way ActiveRecord integrates into Rails by defining a RailType that does this and, and does a lot of other things, all right? Okay, for instance, this is from ActionDispatch. And we are seeing here an example of configuration. We saw before an example of hooking into the console. Now we see an example with configuration. So for instance, this is the way ActionDispatch defines a configuration point called tld underscore length. And it gives this configuration point a default, which is one, okay? This is from ActiveSupport, and this is another Initializer. We saw an Initializer for FactoryGal. We are now seeing an Initializer for ActiveSupport. And we do not need to understand this code, but it's basically taking the time zone that the application has configured and setting, you know, whatever ActiveSupport needs to set up to to take into account that configuration point. Okay, so that's what Rails all does. Rails all is just, you know, it just loads all the, the rail types of the different components in Rails. So, application.rb loads this file. This file is just, it's just looping and loads everything, all right? And as a side effect of loading these things, we have first that Rails knows that RailTie has been supplaced. So we are able to list the rail, the rail types that have been loaded. And also, as a side effect of loading these, we have the configuration points, the declarations of the Initializer. So it's like a setup, okay? And that's the way the components work seamlessly in a Rails application. So, the application, in reality, well, as a rule of thumb, let's say, maybe it's not 100% in all cases. But as a rule of thumb, this is, I don't know, I like very much this design. So Rails doesn't, it's not coupled to the components. Rails is kind of agnostic to most of them, all right? So Rails does not have in the Initialization process anything that hardcodes stuff to integrate the components. No, no, no, it goes the other way around. So the rail types are loaded and the configuration points are the interface between Rails and these components, okay? So ActiveRecord just loads and say, hey, call me the console, please run this Initializer, blah, blah, blah, blah, blah, okay? And the same for the rest of Rails components. And the rail types, so are the components that know that they are living in a pattern application, okay? That's the way they integrate. So Rails does not hardcode in general anything about ActiveRecord, that kind of thing. Rails just exposes a number of configuration points, ActiveRecord loads, takes the configuration points that it needs to set up itself and you know, you are set, okay? That's the idea. So a vanilla Rails application has 15 rail types, which are these ones, okay? So you see, everyone that needs to integrate with all these processes has to define a rail. All right.  So in general, so example of heavily edited code, this is ActiveRecord RV, which has a lot of things, okay? All right, so in general, if you open like the root file of the Rails components, you will see a lot of auto loads like this one, okay? This is the auto load of Ruby. Well, yeah, so Rails redefines because auto loading Ruby needs the constant and then it needs a path, all right? But when you follow naming conventions for the files and you write this thing three times, so the reaction is to write something that automates this using the convention. So model is that, this is the Ruby auto load, not the Rails auto load of constants, okay? So in general, when you boot, Rails tries to be as lazy as possible loading things, so you have the minimal things to do when you boot. One of them is setting auto loads for, this is the ActiveRecord is the name space, so ActiveRecord base, ActiveRecord, whatever, is going to be auto load. So it's not going to be ActiveRecord base, it's not going to be required on boot. It's going to be required when it's needed, you know? And that's thanks to auto load. So since things are going to be loaded only when needed, and there's code that needs to know, hey, have you load already ActiveRecord? For instance, to include something in ActiveRecord base or whatever, there's this utility which is ActiveSupport on load. So for instance, in the ActiveRecord rail tie, we have to set up the logger of ActiveRecord. And the initializer does not go and straight away assign the logger. Because the way to do this orderly is, you declare that when ActiveRecord is load, then please set the logger with the block that I am passing here. Okay, so that's the way to defer as much as possible things in order to have a boot process as lightweight as possible. And at the end of ActiveRecord base, at the end of ActiveRecord base, which is what ActiveRecord considers to be loading ActiveRecord, by definition is evaluating this file, it says room load hooks for ActiveRecord, okay? So when this file is evaluated, all the class is defined. And at the bottom of the file, you have this line and then everything that was scheduled to be run when ActiveRecord loads is going to be run at this point. Okay, next block is Rails engine. Rails engine is a subclass of rail ties, of Rails rail tie. They are defined as well, so rail ties were defined by subclassing Rails rail tie and engines are defined by subclassing Rails engine. So it's the same kind of thing, okay? And what is an engine? So this would be like one, two, three talks, but just to get the idea of what it is, first it heritage everything from Rails rail tie. So all we saw before about console, runner, hooks, initializers, config points, that's all available here, but it's like a super set. You can do more things with an engine. So for instance, you can define controllers, models, that kind of thing.  So it's closer to like, you know, unless you are able to define like a subset of an application, that's the idea for an engine, okay? So engines have predefined some configuration points and also some initializers, all right? So just by subclassing engine, you got some configuration and some initializers for starters. So this is the one that are inherited. So when you define an engine subclassing Rails engine, you get this kind of thing. So you're going to set the load path of the engine, okay? So adding your own lead directory or whatever, you know, to APP models, whatever, to the load path that is already set. Auto load path, routine paths, locale, a number of things, okay? So it is not important to follow every single step of this, you know, it's maybe too detailed, but just, you know, to give an idea of the kind of things that you inherit from an engine. View paths, load environment config is, these are initializers. This is the initializer that runs whatever you have and config environments, develop config environments, production review, whatever. And then some other paths. Then you load config initializers, all right? Disorder, and then there's a technical hook engines black point that says you've, at this point you have already run a number of things and if you are interested in hooking into this, you can, all right? So initializers, by default, go like in chain, but you can say this has to run before this initializer or this has to run after that one, and there are a number of technical points in order to be able to do that. And a vanilla range application, which is like range new, you know, what do we get with range new? There are four engines, these four, okay? Okay, action cable is an engine, it has an engine, so the rest of range components have rail ties because with a rail tie is enough, what they have to do on boot, and action cable has some assets and that's the reason it is an engine. All right, and we are arriving to range application, which is a subclass of engines, so look at this hierarchy. So the base thing is a rail tie, then we have an engine, and an application is a subclass of engines. So, you know, the application is like a particular case of all this design, okay? Beautiful, I think it's beautiful. All right, so they are defined by subclassing and that's what you do in config application RV. If you remember, you have your application, subclassing range application, that's exactly what that file is doing. So the application indeed is a singleton, you know, there's just one instance of that class and you can access that instance using Rails.application, which is a method. And when the singleton is instantiated, you get a hook, call it, before configuration. That's also just something that is fired and if you're in a rail tie, for instance, you say config.beforeconfiguration execute something is going to be execute at this point, which is just when the application is just, you know, it got instantiated, you get this code called. Okay, so application execute for groups of initializers, for groups, it's organized this way. First, you have the ones inherited from Rails engine, okay, Rails engine have some pre-configured ones, so those ones you inherit, therefore, they are going to be executed. Then, there's a bootstrap group that does like super basic things, like setting up paths and that kind of thing. Then we have the initializers of all the rail ties and engines that the application has load, okay? And the way this is load is because we have a bundle require in config application. So if you have an extension, a gem or something, implementing a rail tie or an engine, so what happens is that when bundle require loads that gem, that gem, you know, at that point defines the rail tie or the engine so that the application knows about the existence of this thing. And then there's a finishes group that does some training stuff. So the bootstrap group, for instance, the first one is a technical hook as well. Then, for instance, we load active support. So active support, that's not something optional. The whole Rails uses active support, okay? So straight away, this one is hard code, this one is loaded. Okay, yeah, so this loads active support all, which brings you everything in active support unless there's a configuration point which is config active support bare, which says instead of loading everything, just load whatever the application, I mean, whatever Rails needs to run. And this light means that we are finishing. No? All right, I saw a change. Okay, okay, fine. Yeah, so you are able to load as the minimum of active support, okay? That said, I have never seen this one used, so, but we have it there. Then eager load, you initialize the logger, this is the bootstrap log, the bootstrap group, okay? So you initialize the logger, the cache, the way constant auto-loading loads things, which can be load or require depending on, depending on the environment or configuration. And then there's a before initialize hook, the details, too much details, okay? There are a number of things that are going on, just having a look. And then Rails and Engines in a vanilla Rails application have 94 initializers declared, okay? It's too much. So then we have the finisher group, okay? These things, more or less, you can think that they run more or less in order, except that the before and after things that are, you know, when you declare an initializer, you can say before this and after this, you know? Unless you have defined something, you can more or less think that they go in order, okay? So, yeah, a number of things. The finisher group does a number of things. It configures lip template in case generators need to load things from here. Yeah, this second one is technical.  So, the way that works, if you go to config.root.rb, that's not in config.root.rb, so how is that served? All right, so the roots are defined here. Those ones are defined here. You build the middleware stack at this point, so we are kind of already late, you know? Okay, you have to think we are already, most of the things are done at this point. Well, you define main app, which is something for engines, doesn't matter. To prepare blocks, important, these are blocks that are on certain points of the runtime. And eager load, this is important. By default, in production, you eager load the application and then there's another technical hook, which is the finisher hook that fires another event, which is after initializing case, you have to do something after this has run. All right, and a number of things that are too detailed, maybe, well, the second one loads the roots, this one is important, okay? But there are a number of things in this finisher group going on. Okay, so once everything has been declared and we have everything load, you know, there's a topological sort going on here. So an idealizer have an after, before, topological sort, if someone does not know. Basically, if you have things that have a relative order declared, like, I have to run at some point but make sure it's before that thing, or I have to run at some point but make sure it's after that other thing, okay? So a topological sort is getting this linear in a way that respects these relative constraints, okay? So if you said, you need to run before that thing, you are guaranteed that you are going to run before that thing, okay? Maybe not immediately before, it doesn't matter. So the constraint is relative, okay? So maybe not just before, maybe two before, I don't know, depends on the other things that have said that need to be run before that hook, okay? So that's the idea, in any case, we ordered initializers to be run the way they have declared to be run. So at this SHA-1, we have 124 initializers, there's a lot going on, okay? Because everything, you know, this is designed so that everything that needs to happen at boot is going to be generally happening in an initializer. So there's a lot of things, 124, and I have listed all of them, so if you get then a PDF or we see the video, we have them at least as a reference. This is not like public interface, this is not something Rails is telling you these are going to exist, you can assume that all of these 124 are going to exist in other releases or things like that. But anyway, just for the sake of the presentation, these are the ones, I am just going to pass the slides because there's no point in going one by one, but you see we have setting load paths here, then out to load paths, and there are like, all right? So yeah, so what I want to say here is just that you are aware that all of these initializers are defined and all of these things are running, okay? Okay, so we've seen like a number of things, and there's too much to get like which is the whole picture. So from all this, I've selected what I think I would like to have clear as a Rails programmer, okay? So you've seen there's a lot of things going on. So this is the summary of the summaries, like the essential things that we need to know. All right, summary of the summary. We go to the beginning of the presentation, okay? With boot, Airbnb and the kind of thing. So first, we define the load paths which is bundle setup. So we have the gems, you know, the ones that we want to be available and not the ones we do not want to have available. Then we load the rail ties, and this side effect defines all these configuration points of this initializer, active record, and all the rails components. After that, we load the gem dependencies with bundle require. Then the application class itself is evaluated, okay? The definition of the application class itself is evaluated.  After that, and this is important, at this point, we load config environments, development Airbnb, production Airbnb, whatever, okay? And this is why the configuration in these files takes precedence over the one in config application Airbnb, simply because it runs after it, okay? So if you say foo equals one in application Airbnb, and since after that, you run config environments, development Airbnb, for instance, and you say foo equals two, so it takes precedent just because it's evaluated later, and that's the one that remains. After that, the initializers in the application engines or whatever are run, okay? So first application, then development Airbnb, production Airbnb, whatever, after that config initializers. These ones are executed in lexicographic order, and after that, if needed, the application is eager loaded, that happens in production mode, by default. Well, another thing, so yeah, parentheses. So we've seen that rails integrate into rails via configuration points, all right? And in general, something curious as well is that in rails, in general, in general, maybe if you do a rep, maybe you find a counter example, but in general, the rails code base is not full of, if development question mark, if production question mark, no, no, no, the interface is, we have parametrized rails using configuration points, okay? And when you generate an new application, development Airbnb, production Airbnb, whatever, sets sensible defaults for that environment, and then rails just checks this configuration, all right? So it's not that in production, you do something, is that in production, the default generated in production has a value that makes that happen, okay? Right, so we run these ones, eager load, we load the routes, and if we were running a command, then the hooks of the command are good, okay? So this is like the most important sequence of things that we have to remember, all right? And that's it, all right, thank you. Thank you.


September 10th, 2017. I joined Roblox at this time, I was very curious of what it was and what I could play. There were millions of options of what I could. Later I searched about Roblox and found out it was created in 2004, and came in public in 2006. I liked the game so much, I couldn't stop playing. There always were the good, half and bad moments. One time I found a noob on Roblox High School, and then I decided to troll him. He got angry and reported me. I thought reporting never worked because of what people say. After some minutes, I left the game, then came to play other stuff. I then had to sleep, because tomorrow I'd have a test and I had already studied for it. October 10th, 2017. I had a normal school day and I did the test. I wanted to play Roblox again, so I logged into my account and I got terminated for trolling the guy from yesterday. So I made another account, then played for a long time. Until I got bored, then I remembered to verify my account, I verified my account and I saw forums. So I decided to troll a bit on them. I got warned, then I continued to. But then I started to use bad words which led me into a term. November 17th, 2017. So I made another account and I found out that there's a developed page, I did not know what it was. I clicked and there was a page saying, you could be a builder, etc. Then I decided to make a place called Sword Fights on Buildings. Inspired by the place made by Shedlotsky, called, Sword Fights on the Heights. I slowly was founding out on how to build, until I had to sleep. November 18th, 2017. Then I finished the map, but when I finished the map, I had to put a sword on it. I searched on YouTube, but I had to script, and it was complicated. But then I discovered out what people call free models. I then searched for a sword and something weird came up. It was a dark sword, different from what I saw in the sword fighting game. I took a picture of that, then sent to my friend on Discord. He said he didn't know what was that. So I just added it into my game. And I added some other swords, if it didn't work. I later saved everything and quitted the studio, then tested it. The first sword, not the dark one, was normal and didn't work. Then I tested the dark one. It was a bad mistake, a lot of scary images popped up with scary and loud sounds like screams, ghost whispers, etc. But it was only for some seconds, maybe just for one, two or three seconds.  It wasn't scary nor creepy, but it was confusing, until I remembered what I did in the first day I joined, but I wasn't sure, then I thought, is it him? Then I searched up some videos with this place name, for some weird reason, the first video I saw was, being bullied in Roblox High School. It showed some person in a 2.0 package mocking a new player. When I watched the entire video, I remembered it was his name and he could seek revenge now. Later, I came up in my place, I put the dark sword in workspace and I tried deleting it, but I just deleted some stuff. The sword, when I wasn't playing in studio, it moved in a building. I tried removing it from there. But any time I pressed delete, it would get back. Then the note block opened up saying, you can't. And my browser crashed. I tried entering Roblox again, but I was IP banned. I contacted my friend and told the entire story. He said my profile was still visible.


Day 5 of the 12-day soccer challenge today only takes 8 minutes. Try this at home agility routine. It's a follow along training session. Play the video. Do it in real time. If you can't sacrifice 8 minutes to improve your speed, sharpness, and agility, you don't deserve to play better on game day.


by Roadrunner Sonic Fox versus Ninja killer the most infamous internet warrior that has ever existed ever All right, and they're just going right in starting off with a very smart block and punished by Ninja killer This is this is the match that everybody's been most anticipating the entire tournament Everybody looking for it. That's gonna be the crushing blow from the throw and Ninja killer making quick moves here Going right for the throws into the double bicycle kick amplified We're probably not going to see it in this round, but he's holding on to it for the next one Yeah, he's got such a life lead right now. He's so in control the fourth throw does get pretty good Okie-the-catsy, but disrespecting with the down three. No punish on the low stance out of the shell instance All right, great decision there to go for the throw But Sonic Fox all over and able to react and tech the correct way Not sure which way Ninja killer gave it to him, but I know it was correctly Anticipated and this life lead is slowly slowly getting back to sonic fox nice block No punish on the low fireball though. Oh, there's a low fireball again for your troubles there All right, it's just a great way to just keep your opponent back It is it is a great like footsies check especially gives the character that's footsies are so good But ninja killer he was looking so good at the start of the first round and then a sonic fox He's looking like he's kind of like re-adapting, you know, he's getting a little bit closer He's even knocked down quarter position. He's good. Now. Here's the thing about Ninja killer's play styles He doesn't ever usually go for those wake-ups He likes to reserve his meter for the rolls a lot And I want to see if sonic fox catches onto that and starts punishing all those advancements Right right now. It looks like sonic fox is going for a more defensive option. Nice gets punished Flying kick is a very very good punish on those low shots anybody who's got a fast forward advancing move And there it is again. There it is again. Sonic fox needs to be a little bit careful here When to do this he's got to be a little bit outside of that punishment range That's going to be zero on block both players can move at exactly the same exact frame This is so close. Oh, oh, is that enough? I think that's gotta be it. What a conversion. What a hit confirm Not only did he just not hit confirm on the first one able to recognize the second one continue the string going and then go Right into that fatal blow fatal blows ready to go. Yeah, gotta watch out He was so sure that was so good and a very very fast first match two rounds straight And we are seeing the switch back to casting now We see a lot of the time sonic going with the other variation with yas queen of uh Cassie because he doesn't like the fact that you can I believe it's because you can punish So easily as jackie You can punish the low shots, but you can do the same exact thing with lou So i'm surprised we're not seeing the same thing and the last time we saw these two play on the online tournament The online na east tournament. He also chose yas queen, which he didn't the first round of vests So let's see. Yeah, sonic fox this time sticking it out with digital soldiers So not changing the variations. We're gonna see the exact same move list here on gaffy gauge There's a little bit of you know some time to get back But right now ninja killer not trying to miss a beat here escape failed there by a ninja killer is he teched the Correct way. Oh man. Wow. Yeah, he's getting punished for low shots so so much right now and this is really unfortunate for him Okay, getting carried to the wall getting the knockdown.  Oh no break away Yeah, that's gonna be a break away there and again just kind of want it You don't want to give your opponent too much credit here Great tech. Oh space a little bit of meter. Thought that was gonna flip back Didn't quite the things who's crouching low when he got hit Oh, that's the crushing blow counter hit punish only Yes, yes, it does Oh big big uh check there with the elbow right to the gut and he dropped the left. Oh no combo Oh, it's not chip yet. Okay, but does manage to get it Wow, that one was actually a counter in that minus situation So that was just a little bit of a late poke by ninja killer Violent Our first round taken by sonic Yeah, he's kind of testing ninja killer really to kind of just throw out that stagger and see what he's gonna do Once he blocks that first hit there and again sonic box That's what he was looking for the first time He was looking for luke hang to start poking right back. It's such a safe option I mean you just you know if something happens you get a lot of reward if nothing happens You're still good. Oh, he dropped the combo unfortunate for sonic bot The huge execution error cost him both his defensive bars. So if ninja killer opens him up again, he's gonna make sure it hurts All right corner position. He's really good. Oh, no, it was actually back Though it was a really bad situation because you don't get any oaky, but now he's back in the corner He's okay Oh, oh, okay. I don't think that's enough my brain says no, but my heart says maybe I don't think that's enough either I believe he would need around 41 percent this little punch here at the end only gonna do a little bit more damage there But this is a scary zoning situation. Oh wow just gets hit by the fireball All right match one ninja killer ninja killer was able to close it out one fireball at a time did not panic kept the composure here Ninja killer look enough to fill this prophecy that has been bestowed upon him, but sonic fox says no I'm the greatest fighting game player that has ever existed This is this is a lot to prove for both players to be 100 honest But a huge lifeline so far to sonic fox this time He's ending in the air gunshot enters just to knock him far away and get a little bit more of a zoning advantage A little bit of a cancel here, but wasn't ready for the challenge that sonic fox presented to him Oh, miss the anti air and the interactable is gonna be it sonic fox taking game two This is of course going to game three. There's no other way This could be it has to it has to go to game three has to go to the final round Let's see these guys just go at it two titans Finally meeting in and out. This is what you have to keep in mind. This is sonic fox's realm There's like 500 people 5,000 people 50,000 people on each side of this fight saying, oh, of course, sonic fox is gonna win Oh, of course, ninja killer is gonna win, but honestly, I have no idea I could not call it both those players are feeling so great those first two games on either side It's been very close However, I think ninja killer is feeling very comfortable. He knows he can do it and here we go What a conversion here gonna bicycle game amplified double times here Now he's gotta amplify it one more time to get that crushing flow ready to go Oh that one one one wasn't safe, but oh he gets missed. He must have missed time that must have and now he's Oh, okay, the drop but the throw is gonna mean match point for ninja killer in game three right now This is very very scary for sonic fox because he knows ninja killer There's just one amplification for that bicycle kick to get that crushing blow ready to go and that crushing blow really really hurts Great patience here. Yeah, the zoning game this match is going back and forth between zoning and rush down But the zoning is very even because they both have low fireball They're very like parallel fight here You know both both these characters really throw their projectiles and both these characters can definitely Slug it out when they decide to go in great down for from sonic fox doesn't get much out of it But does get the opening here. No the throw escape. What a great whiff punish.  All right Last round match point both players positioning is definitely in favor of sonic fox But we've seen that can switch so quickly Definitely can definitely can't just one back throw away, but that is a big crushing blow here It's gonna hurt but ninja killer's got something ready to go on his end once he just opens him up twice Oh, no, he didn't even amplify it. That's so smart. This life lead is definitely running away for sonic fox He's got the corner position. He's got the life lead.  This is almost definitely guaranteed chip and that's gonna be it sonic fox In the final round taking it to ninja kill as it came it down to that very calculated by sonic fox deciding to leave


Greetings and welcome to the Introduction to Astronomy. In this video we are going to talk about compact stars and what happens to them in binary systems. And compact stars that we have looked at so far are the white dwarf stars that is the in state of something like our sun and is compacted down to about the size of the earth and we had neutron stars which occur after a supernova explosion and are compacted down to closer to the size of a city. So let's go ahead and get started here. And what we see is that in terms of compact stars we have looked at the individual ones as I've said. We've looked at the white dwarfs and the neutron stars and but what happens when one of these stars is in a binary system? We know that half the stars in the universe are in binary systems. So that implies that there are a lot of these times when a compact star is going to be present in a binary system. And what we have is we can get a number of different things. We can get Novi, we can get Supernovae, we can get X-ray and Gamma-ray bursts and we want to kind of look at all of these. Now the supernovae that we get here are different than the type 2 that we look at. The type 2 that we looked at previously was a massive star at the end of its life. In this case we're going to see a different type of supernova. So let's look at each of these in turn. So what we have, first of all, let's look at the Novi. What is a Nova? Well, if we have a white dwarf star in a binary system, they may be close enough that material can transfer.  So if they are close enough together, material can be pulled off of the ordinary star and into what we call an accretion disk around the white dwarf. And as that material spirals around and in towards the white dwarf, it then builds up on the surface. Now what is building up there? Well, we know that the outer layers of a star are mostly hydrogen. So hydrogen is now building up on the surface of this white dwarf, and eventually the temperature can become high enough that nuclear fusion will actually start on the surface of the white dwarf. And this star, we'll see, when we look at this, we will see it become hundreds or even thousands of times brighter. And this is the kind of thing that can happen over and over again. It does not damage the white dwarf star. So the material can build up to the point where it explodes as a nova, and then 50 or 100 or 200 years later, we can do the same thing. We can actually produce a nova recurring. It will recur again in the same system. So some of these can occur over and over again as long as this star is still transferring material. Now generally, this would happen when this star evolves and becomes a red giant star. Remember that when it becomes a red giant, it becomes many times larger, and that allows the outer layers to actually get closer to the white dwarf star and allow the mass transfer to begin to take place. So a nova is one thing that can happen. Another thing that can happen is a white dwarf supernova. It is exactly the same process as for a nova that we looked at on the previous slide. But the question here is what happens if the mass transfer pushes the white dwarf over the 1.4 solar mass limit? In that case, the star can no longer support itself against gravity. So it will begin to collapse and essentially the entire star will explode. So our image shows that a little bit of that here. What would eventually happen is you would have the main sequence star and you would start have two stars first. One would evolve and become a red giant and eventually end up as a white dwarf. When this main sequence star becomes a red giant, then we would have mass transfer occurring and material is being transferred onto the white dwarf. If this white dwarf is at 1.4 solar masses, then a little extra material can push it over that limit and it will collapse and essentially a carbon fusion begins throughout the star all at once throughout that white dwarf and that will rip the star apart causing a massive explosion, which we call a type 1 supernova. Now that differentiates it from the type 2 supernova, which is when a very massive star reaches the ends of its life and ends up forming iron in its core. This is actually a white dwarf star that is right at the limit of 1.4 solar masses. If it gets pushed over that limit, it cannot survive. So that means that we do have these two types of supernovae. So what we can look at and just to give some of the ideas here, we have the type 2.  The different one way to differentiate them is that their light curves are slightly different and that a type 2 will show hydrogen lines in the spectrum because the outer layers of that star were a lot of hydrogen. A type 1 supernova on the other hand occurs when a white dwarf star exceeds the 1.4 solar mass limit and explodes. In this case, nothing is left behind. We do not see hydrogen lines because the white dwarf was made primarily of carbon and the little tiny bit of hydrogen that was transferred does not give very strong hydrogen lines as it would in a much more massive star exploding. These are extremely important for determining distances to distant galaxies. They are what we call standard candles or standard bulbs and that is because each of them, every single time it occurs, it is the same type of object exploding because we know their mass. Every single one of these is a 1.4 solar mass white dwarf star. So there should be little difference between them when they explode. We should see the same brightness occur and the same patterns in their light curves and that means that we can use them to then determine distances because they should all reach the same maximum brightness. So what can happen for other objects? Those are some things that can happen with white dwarfs. What if we have a more massive object instead of a white dwarf? What if we have a neutron star present? Well, we can take a look at that as well. The same kind of process can occur. You can have a neutron star in a binary system and the mass transfer can occur just like it did to a white dwarf. You can have the ordinary star here and the neutron star here and you can have material transferred into an accretion disk that then spirals around down to the neutron star. Material would also build up on the surface but the difference is that you have much stronger gravity and much higher temperatures that occur than it would with a white dwarf star. That gives us instead a burst of x-rays from the surface. So instead of a burst of visible light as we get in a nova an x-ray burst is essentially a nova but instead a neutron star is the compact object instead of a white dwarf. These are, many of these have been detected and interestingly enough, depending on the positioning these can actually speed up the neutron star rotation. So if you are sending material from a star into a neutron star if you kick it up and push it the way it is spinning, if it is spinning this direction in the first place then if you give it a little kick this side kind of like pushing a child on a swing you can give it a little bit of boost of a boost and that will allow it to speed up its rotation and in fact we find what we call millisecond pulsars pulsing in thousandths of a second and at the absolute limit of what a neutron star can actually do without ripping itself apart and these are believed to be spun up by mass transfer from other objects.  Now we see x-ray bursts but we can also find gamma ray bursts so let's take a look at those and gamma ray bursts were first detected back in the 1960s in looking for gamma rays from nuclear detonation so military satellites were detecting these first because a nuclear blast would give off a lot of gamma rays and they were looking for these detections. Now we have detected thousands of these from space. One of the problems is it is very difficult to pinpoint the location and this is because gamma ray telescopes have very poor resolution. It is very hard to focus gamma rays as compared to focusing say radio waves or visible light and that makes it hard to find the optical or radio counterpart. So where is the burst occurring we need to say that if we can only judge that it's in this region there could be multiple objects that could be the source of this burst and we don't know which of them it is. After some work we have been able to detect optical sources for some of them and many of them are found to be billions of light years away. So what are these gamma ray bursts then? Well there are two types there are the long duration bursts and the short duration bursts these are defined and given the limit of two seconds so a long duration burst is something that lasts longer than two seconds a short duration burst lasts less than two seconds. We believe that the long duration bursts are caused by the collapse of a star which has lost its outer layers of hydrogen so as the star collapses down and gives off all of this energy the energy is then beamed and gives us a gamma ray burst these are the longer ones. Now we believe that the short duration bursts are caused by colliding neutron stars two neutron stars orbiting each other and then spiraling in closer and closer together over time and eventually coalescing into one single object. Some of the evidence for this we have things like the kilonova and gravitational waves. Gravitational waves have now been detected from black holes and are a prediction that would occur for any massive objects that are moving and massive objects moving fast like two neutron stars collapsing would be believed to give off gravitational waves and that is getting to the point where we can now detect these. So the difference is again what happens if some of the outer layers have been pushed out of a star we may get in that supernova explosion instead of a supernova we may actually get the gamma ray burst because the outer layers are no longer present we only have the inner layers of the star in a short duration burst again we're looking at a different process where two neutron stars are actually colliding together so we can look at an image I kind of drew that on there but we can actually look at that as an image as well and when we see them here they are actually giving off those gravitational waves that will travel out into space the closer they get together the more rapidly they move and the greater the gravitational waves therefore making them easier to detect any object moving gives off gravitational waves any object with mass at least but they are so weak that they are difficult to detect unless you have high mass objects things like neutron stars or black holes that are moving very very quickly so let's finish up here as we do with our summary and what we find is that compact stars in binary systems give rise to different types of phenomena the white dwarf stars can give us novi or supernovae things that we can see in visible light neutron stars can give us x-ray or gamma ray again more compact object then can give us higher energy events so we associate the x-ray bursts or the gamma ray bursts with neutron stars and bursts of visible light for novi or super even supernovae are believed to be caused by white dwarfs in a binary system and remember that most stars in the universe half the stars are part of binary systems and that means that there are a lot of cases where this can occur so that concludes our lecture on compact stars in binary systems we'll be back again tomorrow for again next time for another topic in astronomy so until then have a great day everyone and i will see you in class


This study demonstrated the feasibility of 3D printing polylactic acid, PLA, scaffolds and their potential applications in craniofacial implants. The scaffolds had a porosity of 73% with an average pore size of 450 microns and an average scaffold fiber thickness of 130 microns. The average compressive modulus was 244 MPa and the scaffolds generated an electric potential of 25 MV upon cyclic slash repeated loading. The crystallinity reduced from 27.5% to 13.9% during the 3D printing process. The hydrolytic degradation was minimal during a 12-week period. Osteoblast-like cells did not attach to the uncoded scaffold but attached well after coating the scaffold with fibrinogen. They then proliferated to cover the entire scaffold by day 14. This study demonstrates the potential of 3D printing PLA scaffolds for craniofacial implants. This article was authored by Devakar Karant, David Pulio, Dolph Dawson, and others. We are article.tv, links in the description below.


Hello! Today we're going to talk about moving items around on a PowerPoint slide. So let's take a look at our title slide here. Maybe I want to move the title under my content box. So the first thing to do is I'm going to move the content box. I need to click on it and you see the dotted line, the border line around the box. And when I move my mouse, if you can look closely, you'll see four arrow cross. And I put my four arrow cross on top of the outline of the content box. I left click and I drag my mouse. That's called click and drag. You can see it moving. So I'm going to move it to the top of the slide. Now I want to move the title box. So I click on that. I put my mouse on the outside border. I click and drag and move it to the bottom. And that is how easy it is to move things around. You can do this also with pictures. Time for a review. There's my content information. Okay, how can I move the text boxes and the picture around? So I click inside the boxes to highlight and you will see a border line. Then I click on the border line. I hold the button down and drag it to a new location. Good job.