So by now, I'm sure that you've heard that Kaylin Jenner is running to be the governor of California. Look, reality television show stars in American politics, obviously, isn't necessarily a new phenomenon. It's still really depressing because I know that she actually does have a chance. I don't know how high of a chance that she has, but would people vote for a clueless reality television show star to be, you know, an elected leader? Yeah, they would. I think that Trump proved that. But Greg Gutfeld, who has a comedy show now on Fox News, reacted to the news and it seems like he actually is kind of enthusiastic about Kaylin Jenner being the governor of California. The issue for him is that she's transgender. He could barely contain his transphobia and in his monologue where he jokes about her running, you're going to see a consistent theme here with his jokes. Now, I tried really hard to cover this in a regular segment where I just talked to the camera.  That's how bad it is. So I'm going to be pausing this quite a bit, but nonetheless, let's let's let's let him take it away. Could we see Kate running the Golden State? Kaylin Jenner is running for governor of California, hoping to unseat Gavin Newsom, who is as unpopular as Gavin Newsom. Jenner, a Republican, has lived in California for over 50 years and considers herself fiscally conservative and socially liberal. No word if Democrats might nominate the real housewives of Orange County. Kaylin said in his statement for the past decade, we have seen the glimmer of the Golden State reduced by one party rule that places politics over progress. Damn straight. And special interests over people, I agree. Sacramento needs an honest leader with a clear vision. Here, here.   First of all, she should be happy about one party rule because even though the Democratic Party is objectively terrible when it comes to economic issues, as are Republicans, that party is the party that fought for her rights as a trans woman. And when it comes to special interests, she is a special interest. Elites in America, multimillionaires, billionaires. These are the special interests. So them being in positions of power, that's not going to make things better. As we've seen with Donald Trump, that just makes things a lot worse. And what is your vision? She has zero policies on her website. Zero policies. But she says that Sacramento needs an honest leader with a clear vision. Kaylin, name one policy. Just one. Just name all policy. Conservative, just name one policy. I'll wait. The fact that she knows that there's a difference between fiscal conservatism and social liberalism, to me is honestly shocking because I didn't know that she was aware of even these types of things. But this is someone who is obviously not qualified. She's clueless. This is a Trump supporter. She literally voted against her own self-interest and now she wants to run an entire state. What's your qualification? Oh, well, I was a reality show star for like 10 years and my family literally will not go away. Oh, great. Thank you. Thank you. Let's definitely vote for that. Apparently this announcement made Newsom so nervous he nearly dropped his shrimp fork at the French laundry. The big question will Jenner pull in the crucial ex-Olympian transgendered conservative reality show star voter demographic. One thing is for sure, Democrats will have to get very creative in trying to argue that voting for her is transphobic. Kaitlin's appeal... Stop, stop, stop, stop. What? Kaitlin's appeal could cross gender boundaries as easily as Kaitlin crossed gender boundaries. But here at Guthbell, we are so excited. We've already come up with some bumper sticker slogans for her. Jenner, better ideas and better hair. Jenner, a governor that can keep up with the Kardashians. Nice. Jenner, strong enough for a man but made for a woman. That's the second transgender reference. Jenner, did you already beat the communists once? She can do it again.   Finally, Jenner, make the switch. He just, he can't get over the fact that she's transgender. And it's funny because conservatives, like, they're really struggling here because on one hand, they know that Kaitlin Jenner is someone who would do exactly what the Republican Party wants, exactly what they want.  Now for me, this is easy. I don't care about your identity. I care about what you're proposing. And regardless if Kaitlin Jenner is transgender or cisgender, the policies that she'd implement would objectively hurt working people, would not be good for the LGBTQ plus community as a whole. Perhaps she would advance transgender legislation, but I mean, it's California, so it's one of the better states. If you are a trans person, they at least acknowledge your existence, you know, contrary to more Republican leading states. But the panelists is now going to chime in here and what they say, like, I saw most of this, but not all of it, what they're going to say, they don't even realize how hypocritical and contradictory their statements are, and nobody calls them out for this. Hey, Morgan, I am so excited. I quit my job and work for her except I'm greedy and I have a lifestyle that needs to be supported by vast wealth. What? Is that really that funny? Does that really warrant them busting a gut like that? This is so weird. And I don't even get the cadence. It's kind of like the semi-serious tone that he's using, but it's like, he kind of does seem enthusiastic about her. I just, I don't understand this. You would be a great press secretary. You'd be a great press secretary. I'm so excited about this. First of all, I think she's fabulous. I think she's great. And this proves, by the way, that Republicans don't care about identity politics.  I mean, let's pretend like the monologue that Greg Gutfeld just did didn't make like five or six references to her being transgender, but nonetheless, we're not phased by any of it. We don't care about identity politics. Wait for it, because the hypocrisy is coming. You can pick whatever you want to be. I also love that Rick Grinnell may run against her, the first openly gay cabinet member, so we can have the first trans woman, the first openly gay cabinet member running against each other in the Republican primary, like, take that list.  Also, we'll have the first transgender and the first gay Republican running against each other in this gubernatorial campaign. But we're against identity politics.  It took less than 10 seconds and she contradicted herself.  It's a deal, Terry. People are going to focus on Caitlin's identity, but not her. Who's doing that? Caitlin's appeal could cross gender boundaries as easily as Caitlin crossed gender boundaries. Jenner, make the switch. Wicked sense of humor. I don't know if you've noticed that.  Well, we lived together for a while. You know that I actually was her. We lived together in the 70s. I got her into the Decathlon. I pulled some strings, I know people. This explains a lot, because I want to say something. First of all, I've got to talk about this. Okay, the Gutfeld exclamation point thing. Listen, now it's all coming clear, because when we were close, you used to come over my place and I knew he was coming because it's goofy Gregg and he'd knock on the door and sometimes he'd be naked or it'd now fit. No, guys, this really... I'd throw the door open and we'd greet each other and go like this with jazz hands. Gutfeld! And it was like exclamation point. And so I feel like you've robbed this from us. Yes. This was supposed to be our thing. This was kind of... It was kind of between us. And again, I'm happy for your success, but I can't say it hurts. It hurts, too. Caitlin, if you could vote for her, would you vote for Caitlin? Yeah, sure. I would not vote for her just because she's Caitlin. She's got a great platform. Go for it. It'd be hard to put into working... What is her platform? Name a single policy that she is proposing besides tax cuts for the rich. Can you name any other policy? They must be so tired from all that fake laughing.  Why not? That's the challenge. That's the problem. But it's Arnold Schwarzenegger. It destroyed him. Yeah, it destroyed him. And he probably had a good shot. He ended up sleeping with the maid. Yeah, I got bad. Yeah. It had a baby. That was the beautiful happy ending, though. Silver lining. Yeah, that was the beautiful happy ending, though. You're so funny, Greg Gutfeld. Oh, my God. Stop it. This is silver lining to a lot of infidelity. You know... I'm starting to wonder what you two did in that foxhole. Right. Could we do a reenactment of that? Yes. What we did was get each other through the war. Yes. And we'll just leave it at that. So, Janice, I grew up in California. I can't vote there, but I would vote there. I would vote twice. No ID, right? See, Democrats commit voter fraud. I'm a comedian. I'm a comedian.  I'm a comedian. I'm so edgy. What are your thoughts? I wish she was running against Cuomo. Oh, wow. How about that? How about that?  He would try to kiss her in the debate. Right. Good to see you, Caitlyn.  Because he kisses everyone. Yes. That's an Italian thing, right? Yeah, yeah, yeah. Thank you so much for explaining the joke. If she didn't explain that joke about him being a perv, I wouldn't have gotten it.  So thank you for explaining that. I don't think they would have gotten it otherwise. Yeah.  Right. Orfredo. Yes. Racist. Yes. I think it's great. That's a good question for you. Yeah, yeah. I think she has been on Twitter pretty long today. All of Twitter melted down. How could you tell with Joy, though? Right. She kept calling him, him, he. Really? And then kind of apologized at the end. But you know, if she had done that with, she'd never do that with a Democrat. Yeah. Right? That would never happen. It probably, it probably bothers her because it happens to her. Whatever. She had the word whatever in her apology. The most heartfelt of apologies contain the word whatever. I'll bet you a steak dinner. because she's running as the anti-lockdown candidate. A lot of people are pissed that they were all locked down. Their businesses had to fail.  You know, that occasion only comes once in a lifetime.  Well, people, yeah, yeah, sorry. No, no to the funeral to say goodbye to your loved one, but oh, but this I have to do. And there really, there is a space for that right now. And I just think it really is great because again, a lot of the arguments people use to sort of silence Republicans are this, oh, you're this bigot. She is not only transgender, she's also a lesbian. So like, what are you gonna do there? And I think it's awesome. I love keeping up with the Kardashians. Kris Jenner was so mean. Yes. And I'm almost afraid to say that because I'm scared of Kris Jenner. Yeah. She has better hair than Gavin Newsom. Yes. Oh, definitely, definitely. And she's an athlete. Athletes are never victim. They never fall for the victimology. She doesn't mind if people make jokes about her. She's like, oh, that's funny. I had no idea she was a lesbian because that's what I identified. Yeah. Oh, that'll be great. Again, this explains everything. This explains everything. Back to the fox. We just went right to it. Oh, no. That's what I'm thinking about right now. Hey, Sean Hannity here. Hey, click here.  So that is conservative comedy. Any questions?


My name is Angela Kegler and I'm going to be the instructor for your upcoming course. Allow me to introduce myself. I've been teaching in both the collegiate and corporate environment for over a decade now. I have a PhD in organizational development, which gives me the opportunity to have the academic experience in learning the tools that you need to learn and also the experience or the practitioner side where I've had to employ these tools in the workplace. Like you, I've also sat in the seats and had to learn these skills in such a fashion that I can turn around and teach them to you. I hope that you enjoy my teaching style and the content that I have to deliver for you. Happy learning! Let's start with the first concept, attitude in the workplace. With this concept, we're going to explore what is attitude? What are your responsibilities, what are professional behaviors, task-oriented behaviors, and how your attitude and your job work together? So what is attitude? Well, when we hear the word attitude, the first thing we think of is maybe some negative attitudes or negative behaviors that we've seen by others. Well, let's look at this definition. Attitude is a settled way of thinking or feeling about someone or something, typically one that is reflected in a person's behavior. What this means is that our attitude is generated by what we believe. So that means if we have a specific belief, it's actually going to come out through our behaviors and that is what we see as attitude. So what are your responsibilities? As an administrative assistant and how does attitude impact it? Well your responsibilities are to first help organizations to be as productive as possible. That's the general tasks that you are responsible for is to be productive and help your organization to be productive. To do so, you're responsible for maintaining a positive attitude. Your attitude can really make or break the productivity of the organization. You have to be positive and enthusiastic about the goals and the direction that the organization is going. When you create a positive work environment, you can create an enthusiastic and optimistic outlook for everybody else.  Now positive doesn't mean Pollyanna. You have to be honest and you also have to be realistic. However, being honest, giving a true but positive picture of where things are at, an optimistic picture of where things are going regardless of whether things are looking dim or not at the current time. Your responsibility is to also show respect for others. In respecting others, you can keep a positive work environment for everybody around you. They will in turn show you the same respect that you would like to have and show others. So your responsibility is to help the organization be as productive as possible by maintaining a positive attitude, being optimistic and enthusiastic, creating that positive work environment by being honest and respecting others. What are some personal behaviors that you can demonstrate that will help you with your attitude? The first thing is be sensitive to what we call the rhythm of others. Ask questions at convenient times. Consider it this way. Your colleagues, your coworkers and those that you work for will have busy schedules just as you will by finding their rhythm and taking time to insert at their times of maybe some down time or having time for you and asking questions at those convenient times. They can give you the attention that you need that will allow you to have the information you need to be productive as well as help them be productive. You can also update and monitor current needs of other personnel by keeping your own eye on the rhythm of others in the workplace and understanding where everybody else is at. Then you can give others updates, you can monitor current needs and you can fulfill those needs by proactively making appropriate changes immediately, meaning that if you see something that needs to be done, proactively seek out getting it done. That is an incredibly professional behavior because you're taking the proactive approach and others will recognize that as positive. Another professional behavior is to seek out opportunities to make the office more efficient. Your role is so unique that you'll have the opportunity to see where others are at in their specific roles. You're like a piece of the puzzle that brings all of the puzzles to get puzzle pieces together. So if you can seek opportunities to help everybody else in the office be more efficient, that may be from keeping the office supplied with proper supplies to ensuring that people are where they need to be when they need to be there, making sure agendas are printed or communicated. All of those opportunities that can help folks know where they need to be when they need to be there and have the resources that they need so that they can become more efficient. Also recognizing a customer complaint as an opportunity for improvement can set you apart as a professional. Often individuals see customer complaints as just a problem. But you, being the professional, recognizing a customer complaint as an opportunity for improvement can create that positive work environment and be recognized as a professional. Another professional behavior that you will often find is when other departments request assistance or help, you can find it and help them find it as quickly as possible. Again, this ties into proactivity. If other departments are in needs, if you can assess those needs ahead of time and direct those individuals to where they can find their resources or assist them, that's going to set you apart as a professional. And not just somebody that they have to go to when they need your help. And finally, when working on a project, if you're happy to insert last minute changes, even if it means considerable more work for you, you will be seen as a professional. This all ties to attitude because they are your beliefs, your support, and your desire to help others that will turn around in behavior, these professional behaviors, that will show others your professionalism in the office. Let's take a look at task-oriented behaviors. When we say task-oriented, they don't necessarily take attitude into play. Task-oriented behaviors would be things like interrupting others whenever help is needed with individual tasks. You're driving the behavior by the need for help. That can turn into interrupting others as opposed to being aware of what their rhythm is and only going to them when they have the opportunity to assist you. Other task-oriented behaviors could be like keeping information the way it's always been because it's easier. Well, sometimes doing something different can show professionalism because you're proactively seeking out improvement as opposed to doing things or keeping things the way they always have been. Another task-oriented behavior would be to change nothing unless it's instructed by a manager. Often managers are very busy and they're going to expect you to be the one who sees the need for change. And if you see the need for change, speaking up is going to be more professional as opposed to being focused on the task and not changing it. Another task-oriented behavior is answering each request individually without noticing patterns or trends. When you can see the trends, when you can see the patterns and be able to put them together, you can demonstrate more professionalism and seek out opportunities for improvement. When you just answer each request individually as it's an individual request, that's more task-oriented and does not necessarily relate to professionalism. If you dread messages from unhappy customers because maybe you don't know what to say or you don't know what to do, that's more task-oriented than professional. And finally, delaying other department's requests so that they can learn how to do it on their own is not professional. That is very task-oriented. A professional doesn't delay other department's requests and doesn't look at ways to help them figure out on their own how to do things. Professional will take the attitude of, I'm here to help and assist the other department's need and fulfill their needs. Let's take a look at your attitude and your job. The magic key that opens up your mind and heart to better job performance and a better life is your attitude. A positive attitude can help you do several things in the workplace. Well, first of all, it can help you to consider your job as a part of the larger picture in your entire organization. You may just have one job and it may be a small job. It could be a large job, but you are one part of an organization and without you, the organization is not effective. So a positive attitude recognizes that and sees the importance of your job to the effectiveness of the entire organization. A positive attitude also helps you to visualize your potential when dealing with other employees, customers, and clients. That means that you can make a huge potential in success of what other employees are trying to accomplish, what your customers' needs are, and how clients' needs are being met. By visualizing your potential and striving for that potential, you can make your co-workers, your customers, and your clients needs much more effective. And finally, a positive attitude will help you to understand how your attitude affects and impacts other people's attitudes and performance. Think about it this way. When somebody smiles at you, you smile back. We mirror other people's attitudes. Well, if you have a strong positive attitude and that is being demonstrated through your behaviors and your performance, others will mirror you. You can impact their attitude to make it positive and make their performance effective. Thank you.


how to add your buyer accounts to AutoDS and automate your incoming orders. First on AutoDS on the left menu, click on settings. Then on top, click on buyer accounts. Now we're gonna click on add account. Here we're gonna fill in our buyer account information and the system will use this buyer account to automatically fulfill our orders using the account details that we will provide now. First, choose your supplier. So which supplier would you like to automate your orders from? In this example, I'm gonna go with AliExpress. So I'm gonna fill in my AliExpress email credentials along with the password used to login to AliExpress. Then I'm gonna fill in my full billing name, billing phone number and zip code. Now we're gonna head over to the payment methods. And this is the payment method that the system is gonna use to fulfill our incoming orders automatically as soon as they come in. So under account payment method, we're gonna click on the dropdown menu. And here we've got two options, credit card and gift card. Gift card is used for Amazon.  But in this example, we're going with AliExpress. So AliExpress doesn't have any gift cards, we're gonna go with credit card. Then we're gonna click on add credit card. Fill in your credit card information. Now before we click on next, we're gonna click on add card. And now our card has been entered. Now last but not least, we need to fill in the following settings. The first is maximum pending orders. How many orders do we wanna have under the ordered status before allowing new orders to come in? Ordered status means that the orders have not been shipped yet, but they were ordered using your buyer account. So if you do not wanna set a cap to this, you can leave this blank or otherwise fill in the maximum pending orders that you wanna have in your account before allowing the system to process new orders. So in this example, I'm gonna go with five. Then we've got the daily orders price limit or in other words, what is the total price limit that you would like to order per day? For example, if your credit card is maxed out at $500 per day and you cannot spend more than that, then you're gonna set your daily price limit to $500. You can also leave a blank if you do not wish to have a limit. And then we've got the options down here. So the first is auto order. In other words, would you like the system to process your order automatically as soon as it comes in or would you like to move the status from pending to send to auto order in order for that to happen? So if you do not want your orders to be processed automatically as soon as they come in, you're gonna leave this part blank. Otherwise, fill it in. And as soon as an order comes in, the system will use your buyer account that you added in your account details and payment methods to process your order automatically as well as update tracking information as soon as tracking information is available from your supplier. That is the second option that we see right here. So as long as we have this option on, the system is going to update tracking numbers on our orders as soon as it's available on the AutoDS platform as well as on our selling channel. This way our customers will be able to know what's going on with their packages and track it as soon as tracking information is available. My recommendation is to have it on. And finally, we have order scan which isn't available here because it's only if you're using Amazon as your selling channel. And what this does is it sends you a notification as soon as an order comes in. But if you're not automating your orders from Amazon using your buyer accounts, this is not relevant. And that is all there is to it. Once we're done filling in the information, we're gonna click on add. We now have a new buyer account as we can see right here. So this is the email address that I used to sign into the supplier. This is the supplier that I added a buyer account for. So it's AliExpress. My daily set limit is $200 in sales and up to five pending orders. Of course, you can leave it blank if you do not want to add a limit. Payment method is credit card. Last automatic orders. Well, no orders yet because I didn't process any orders and the status is active, meaning I can start automating my orders right now with AliExpress using my buyer account. And that is how simple it is to add a buyer account to the AutoDS system and start automating your orders.


Okay, so yesterday we finished our presentation of the geometric side of the toposphering, and today we shall begin talking about the logical approach to toposis. So we shall start by renewing the approach to toposis as mathematical universities, which emerged in the 60s and 70s thanks to the work of categorical logicians, in particular Billovir and Mike Stearney. So what logicians undertook at that time was an axiomatic study of glottendift toposis from the point of view of regarding them as places where one could develop mathematics. So alternative mathematical universities with respect to the classical set theoretic setting to which everyone is used. So one can wonder, given the fact that a topos has a very rich categorical structure, whether one can really do mathematics inside a topos. And in particular one wonders whether the classical logical rules of deduction we are used to apply become sound in toposis when we develop mathematics inside a topos. Investigating these issues amounted to focus the attention on a particular object inside a topos, which we already introduced yesterday, the sub-object classifier, the omega object, because in fact this object captures a great amount of the internal logic of a topos as a mathematical universe. So in fact yesterday we already talked about hiding algebras and their relation with inclusionistic logic. I remarked that hiding algebras provide the analog for inclusionistic logic of Boolean algebras for classical logic. So in fact they provide a sound and complete semantics for propositional inclusionistic logic. And hiding algebras arise naturally in toposis because in fact as we shall see, all the sub-object lattices in a growth-indict topos have the structure of a hiding algebras. So this means that really the internal logic of a topos is intuitionistic. So of course this has a lot of consequences because it ensures us that if we develop mathematics in a constructive way, then what we establish will be sound not just in the classical set theoretic setting but in every topos. So as you could imagine this point of view had a lot of applications in fact it paved the world for the construction of new mathematical words satisfying particular properties because of course thanks to the generality of the notion of sight one can construct toposis adapted to the needs of the particular situation that one wants to investigate and so one can profit from this flexibility of being able to change the universe according to one's mathematical needs. So in particular it is possible as we shall see in a moment to consider models of any kind of first order mathematical theory in a topos. So it is possible also to try to classify models of theories in arbitrary toposes and we shall see that if the theory has a particular form namely if it is expressed within the framework of geometric logic its models can be classified in a very satisfactory way by a growth-indict topos called the classifying topos of the theory. So you see this possibility of considering models of theories in arbitrary toposes the possibility also of changing the base topos over which work and work all of this is extremely important. Think for instance about growth-indict refoundation of algebraic geometry a very important principle which applied throughout this work was the relativity principle so the idea of considering schemes over bases which could vary according to the needs of the specific situation so here we can do the same with toposes so we can not just consider toposes of sheets of sets which means working over the topos of sets but we can develop topos theory relatively to a base topos so consider if S is a growth-indict topos S value the sheets on it which will again be a growth-indict topos and so all of this of course makes the theory extremely powerful both conceptually and technically of course things become even more interesting when one gets the duality between toposes and the structures that they classify a duality which is well established for toposes defined over sets and which is not quite completely understood at least from a user-friendly point of view for toposes over an arbitrary base but of course it works equally well but it is quite powerful to be able to dispose of this point of view of toposes as the classifiers of certain objects and not just for toposes over sets but for toposes over an arbitrary base but before going to this let's be a bit more precise about these height-ing algebras which I have mentioned so I have told you that in any growth-indict topos for any object the collection of its sub-objects has the structure of an height-ing algebra in fact a complete height-ing algebra these are all frames and in fact we also have another quite important construction which is the second point of the theorem which is the construction of left and right adjoins to the pull-back factor between sub-object lattices induced by an arrow in a topos so you see given an arrow f in a topos you have the pull-back factor along f which sends sub-objects of b into sub-objects of a and what is quite interesting and was discovered by Lomir at the time of this exploration of the logical side of toposes is the fact that this factor has these two adjoins which in fact can be used to interpret the existential and universal quantifications along f in the sense that they can be used in categorical semantics to interpret these quantifiers appearing in first-order formulas so let's give a complete description of all of these so first the height-ing algebra structure so what does it look like so here I have reported the operations that you have on sub-objects in a glottin topos so the sub-objects of a sheaf they are just sub-ships in the sense of this definition and the operations are defined in this way so notice that there is no surprise concerning the myth because it is defined point-wise but things become interesting when you consider the other operations in particular the orb operation, the disjunction which is interpreted by referring as you can see to the covering sieves for the topology so you see that here the logic becomes much richer than the usual binary logic because it is able to capture the idea of local truth so the truth relative to a covering and you see this precisely by looking at these formulas so of course since you have this complete height-ing algebra structure on each sub-object lattice and the object omega classifies the sub-objects you can conclude from the yonida lemma that the sub-object classifier has the structure of an internal height-ing algebra in the topos now the interpretation of quantifiers is also quite interesting so these are the formulas which I have reported for you so of course the pull-back factor is defined in the obvious way because pull-backs are particular kinds of limits and so as we saw yesterday the limits are computed as in the category of pre-ships so they are computed point-wise but the left adjoint and the right adjoint admit interesting descriptions as you can see in the formula which gives the left adjoint you see the existential quantifier appearing so see here and in the description of the right adjoint you see this condition, this inclusion which again involves quantification this time a universal quantification and so you understand how this really represents a way of interpreting the quantifiers in the topos theoretic setting ok so now let's go to the point-of-view of classifying the topos so the point-of-view of developing model theory in topos and then aiming for a classification of models of theories so what is possible to do is to interpret any kind of first order theory in a topos in fact it is possible also to interpret higher order theories because of the existence of the exponentials in a topos but we shall not be concerned with this in the course so here we just limit ourselves to first order theories for which there is a well-developed classical model theory and we shall see what topos is bringing to this subject so as you know Tarski introduced the notion of model of the first order theory in the classical set theoretic setting so first you have the notion of first order signature over which you write the axioms of your theory and how are first order signatures interpreted in the classical Tarski and Semantics well in a first order signature you have sorts, function symbols and relation symbols so sorts are interpreted as sets function symbols as functions relation symbols as subsets what is going on in categorical semantics is a very natural generalization of all of this because sorts get interpreted as objects of the category function symbols as arrows relation symbols as sub-objects and then of course when you have to define the interpretation of the formula in a given context recall that a context is any finite set of variables which contains all the variables which appear free in the formula so whenever you have a formula in a given context it will be interpreted as a sub-object of the corresponding Cartesian product or the interpretation of the sorts which correspond to the variables in the context and of course as you can imagine as in the classical case the interpretation of the formula is defined recursively on the structure of the formula and of course this definition involves precisely the categorical structure present on the topos for instance as you can imagine to interpret conjunctions you will need to consider certain limits to interpret these junctions you will have to take unions of sub-objects to interpret existential quantifications you will have to take images of certain arrows but we know that we can do all of this because of the original categorical structure present on the topos and so everything is defined in a very straightforward way and then in this way you get the notion of the structure of the first order signature and then a model of a theory will be just a structure in which all the axioms of the theory are satisfied ok now we respect our attention to a class of theories which is very important because the theories in this class have classifying toposes so this framework of geometric logic is a framework of first order logic but where the axioms of the theories need to have a particular form so a geometric theory is a theory of a first order signature whose axioms can be presented in this form so this is the sequence notation and the meaning of this notation is for all the variables in the context the first formula entails the second and we require these two formulas to be geometric which means built up from atomic formulas over the given signature but by only using finite and even junctions infinity junctions and existential quantifications so this definition might seem at first sight quite straightly but in fact it is really not because on the one hand most of the first theories naturally arising in mathematics are already geometric order signatures so you don't need to make any operation to make them geometric but if this is not the case there is always a canonical procedure that you can apply to turn any finite and even standard theory into a geometric one this procedure is called more regularization so you see that thanks to this basically you are able to investigate any kind of finite and even standard theory from the point of view of geometric logic because this process of more linearization doesn't essentially change the set base the markets of the theory so as far as classical model theory is concerned there is no difference now why do we need this restriction to geometric logic well because we want to develop a factorial model theory so in particular we expect the morphisms that we have defined between toposes mainly the geometric morphisms to send models of a theory into models of the theory and this will not in general be the case for an arbitrary classical theory but if the theory is geometric then it is too so it means that when you have a geometric morphism between growth and if toposes so the fundamental the one which preserves the greatest amount of structure is in the seamage because it preserves the finite limits as well as arbitrary limits so this is the one we are going to use so what we want is that if we have a model of the theory inside f this is transported to a model of the theory inside so we want such a pseudo-factor defined to be induced such such a contour if the theory is geometric if the theory is not geometric this will not in general be the case so the reason for this is that when you interpret arbitrary first order formulas in toposes you use these constructions present in the topos for instance the universal quantification the the hiding pseudo-complement the sorry the hiding negation the hiding pseudo-complement etc. and in fact these operations are not in general preserved by in this matter fact also geometric morphisms while if you stick to geometric formulas you see geometric formulas are built from atomic formulas by only using finite conjunctions possibly infinitely disjunctions and existential quantification so you see these finite conjunctions are interpreted in terms of finite limits these are interpreted as arbitrary unions of sub-objects and these are interpreted as images of arrows so you see all these constructions actually involve finite limits and arbitrary co-limits which are all preserved by functors of this form and so you see that if the theory is geometric then we indeed have a functor making the capitalism models of the the theory induced by the geometric morphisms between the toposes and so since we have such a pseudo-functor we can wonder whether this functor is representable and now we get to this fantastic result which was discovered in the 70s which says that every geometric theory has a classified topos by this universal property that the geometric morphisms from an arbitrary topos to the classified topos are in natural categorical equivalence with the models of the theory inside that topos and what is also very interesting is that classified toposes not only exist for an arbitrary geometric theory but can be built in a canonical way by taking into the category of sheets on a particular site attached to the theory called its syntactic site which in fact embodies a great amount of the syntax and the proof theory of the theory so this is the definition of the syntactic category so it is a category whose objects are geometric formulas in a given context over the signature of the theory considered up to renaming equivalence and whose arrows are the formulas which are the geometric formulas always over the the signature of the theory considered up to provable equivalence which are provably functional from the domain to the column one requires this proof-theoretic condition so that when you pass the syntactic interpretation of such an arrow becomes the graph of an arrow from the interpretation of the domain to the interpretation of the column then you realize immediately that this is a category because you have a very naturally defined the notion of composition of arrows you have also the identity arrow on each object and so you have a well-defined category which in fact has the structure of a geometric category ok so on the syntactic category of a geometric theory one can put a naturally defined glottendictopology called the syntactic topology in fact this is precisely the so-called geometric topology on that category which actually has the structure of a geometric category so concretely this syntactic topology is defined in this way so a family of arrows to a given formula in the syntactic category is governing if and only if the sequence which expresses the fact that this family is public is provable in the theory so you see how beautifully this relates the geometry of the syntactic category with the provability in the theory so why do we get the classifying topos when we consider ships on this side well we just have to recall the theory which we presented yesterday which gave the equivalence between geometric morphisms to the topos of ships on the side the connection with the plate path also so let's recall that what we saw yesterday was that we had equivalence between the geometric morphisms from the topos e to the topos of ships on the side and the flat j continuous path also from c2 now if we apply this to the topos of ships on the syntactic side what we get is this so we have to consider the flat jt continuous path on the syntactic category now this category is geometric in particular it has finite limits and yesterday acted that a factor defined on a Cartesian category is flat even only if it is Cartesian so it means that here we get the Cartesian jt continuous path from ct to tablish a factor equivalence between these factors and precisely the models of the theory in e why this is an equivalence because we can define a factor going in one and in the other direction I will just give one direction so given a model here the factor which corresponds to it very naturally defined because it is the factor which sends every formula to its interpretation in the model in fact the factor going in the other direction uses the existence inside the syntactic category of a distinguished model called the universal model of the theory inside it and it will denote this model by so universal model a factor defining this equivalence which sends a given Cartesian jt continuous path f to the image of this universal model and you can show that you get an equivalence of categories and so by putting these two equivalences together you can conclude that the category of sheets on the syntactic side a classifying topos for the theory ok so it may happen of course that two distinct geometric theories have equivalent classifying toposes when this happens the theories are said to be more equivalent as we shall see in a moment this equivalence relation is extremely deep and interesting because it formalizes in many situations the feeling of describing the same structures in different languages or constructing the same object in different ways so just having different linguistic points of view on a given field so for the moment let's just remark that by definition of classifying topos two geometric theories are more equivalent if and only if they have equivalent categories of models in every growth index topos naturally in the topos so it means that if you change the topos by means of geometric morphism you should get a cognitive square connecting the equivalences existing for each of the toposes so is it true that every growth index topos is the classifying topos of some theory? yes because by definition of growth index topos any growth index topos can be presented by using a site and you can attach to each site a geometric theory which will be classified by the associated categories so given a site cj you can write down a theory a geometric theory the theory of j continues show that the classifying topos for is precisely the c that infect the language of sites and the language of theories are strictly related because to any geometric theory you can canonically attach a site it's a syntactic site and conversely to any site you can naturally attach a theory which will be classified by the corresponding topos so in fact we really have two levels here at play the level of toposes and the level of their presentations which can be sites which can be theories or more generally any object from which you can construct a topos and in fact this is by no means limited to sites or theories because toposes can be associated with many other mathematical objects for instance they can be built from two points either topological or localic or they can be built from quantals or more generally quantaloids so in fact it is possible to construct the toposes from many different kind of mathematical objects but all of these objects will play the role of presentations so actually it is most important to distinguish these two levels the level of presentations and the level of the toposes and to investigate the interplay between these two levels and this will be really the art of the the bridge technique that we shall present in a moment so for now let's just conclude that this construction of the classifying topos of a geometry theory allows us to think of a growth in the topos as a canonical representative of equivalence classes of theories, mobulo, morita thank you very much ok so now we we can start presenting our perspective of toposes as bridges by making a few remarks about this notion of morita equivalence how should we think about this so apparently this notion is quite sophisticated because you require the theories to have equivalent categories of models in every growth in the topos which in general is a condition much stronger than simply the condition of having equivalent categories for instance of set-based models so you might think that this is a very strong condition which is rarely found in practice, in fact the opposite is too my experience with the topos theoretic study of theories have led me to conclude that actually the notion of morita equivalence is ubiquitous in mathematics whenever you find yourself in a situation where you can talk about the same structures in different ways where you can describe a given mathematical content in different languages it's very, very likely that you find yourself in presence of a morita equivalence and it is worth to try to capture this feeling of describing the same things in different ways to capture it through this notion because then the feeling becomes a definition and a theorem on which you can build and from which you can extract information so in fact throughout the work of last few years I have undertaken the task of formalizing many dualities equivalences and correspondences that I could find in different fields of mathematics in terms of this notion and in general I have to say that it has turned out to be quite effective so of course many more dualities and equivalences still wait to be investigated from this point of view but the results that have been obtained so far indicate that indeed morita equivalence provides a very general notion of equivalence of theories which is naturally related both to the classical notion of categorical equivalence and to the categorical notion of duality and also to the notion of bi-interpretability in logic but before I go into that let's remark that in fact topos theory by itself is a primary source of morita equivalences because in fact having different theories classified by the same topos corresponds actually to having different presentations for this topos talking about theories or about sites is essentially the same and so actually the existence of different theories classified by the same topos translates in particular into the existence of different sites which present the same topos and conversely if you discover that a certain topos presented in different ways this can be interpreted from a logical point of view as the existence of different theories which are morita equivalent to each other and so all the representation results for topos that you can prove by using topos theoretic tools actually can help you generate morita equivalences that can be relevant in different mathematical context I have really used in my work such a point of view to generate new equivalences new dualities in different mathematical fields really using the tools of topos theory so in fact normally topos theory allows you both to shed new light on classical subjects in particular on classical dualities but also it allows you to generate many new insights many new dualities or equivalences or correspondences that would be difficult to obtain otherwise now as I mentioned the relation of morita equivalences strictly related to by interpretability so what does it mean that the two theories are by interpretable well we have the notion of the syntactic category available to express this so intuitively two theories are said to be by interpretable when there exist a sort of dictionary relating them to each other so by a dictionary I mean a procedure which will assign every formula written in the language of the trans theory a formula written in the language of the other and conversely so as to induce an equivalence at the level of the categories of models of the theories so by using the language of syntactic categories you could define by interpretability as an equivalence between the syntactic categories of the two theories because you want every formula the language of the trans to correspond to the formula in the language of the second and of course if you add that the two theories we have the same classification because the classification is built by equipping this geometric categories and so such an equivalence of course entails morita equivalence but what is most interesting is that in fact most of the morita equivalences are not of this form so it means that they do not come from dictionaries and this is a very important remark to make because it shows the relevance of topos theory to understand theories from multiple points of view and also relating different theories with each other because what this is saying is that in fact most of the correspondences which arise in mathematics are not induced by concrete dictionaries they are much deeper and so thanks to toposes you can identify them if you don't have toposes you will never realize about them or realize about them but with great difficulty and without most natural point of view so to realize about this difference between dictionaries and morita equivalence you can think again about the example I gave yesterday of the basis for a topological space so what I said yesterday is that if you have a topological space so if you have d1 and b2 bases and you can on the one hand represent the topos of shifts on x in terms of the first base with respect to a certain growth in the topology which will be induced by the canonical topology on the category of open sets of x and on the other hand you can represent it in terms of the other base so in particular you can conclude that the two toposes are equivalent but look you don't necessarily have an equivalence between d1 and d2 so in general there will not even be a factor going from d1 and d2 so you see that the connection between the bases cannot be understood in a linear way so you need to complete the two bases to the whole space in order to be able to link them and this is what the topos is able to achieve so of course this case of the basis is very simple because in this case the topos basically can be identified with the frame of open sets so you don't actually need the topos you just need this to connect the two bases but this is a very simple example in general when you go from the propositional setting to the setting of of first order theories then you indeed need the full topos to connect the theories ok so I will continue in the second part of the lecture to illustrate the theory of topos theoretic bridges so how to build bridges and I will illustrate this by analyzing a number of examples so for the moment thanks again for your attention


Thank you, and I think we need it. It's that time of the afternoon when you're ready to just relax and have a nice, slow talk that doesn't have too much hard stuff, and that's not my talk, so wake up. Hi, I'm Ed. This is my first DrupalCon. I actually kind of worked with Drupal for the first time about seven months ago and have worked on it fairly continuously since then on several different projects, using it integrated with some fully decoupled Ember apps, some progressively decoupled apps. And so I'm a newbie in this community and have been really interested to learn the history and the culture and the software archaeology of a project like Drupal that has been so successful for so long. It's definitely, I got interested in Drupal and got involved with Drupal because I can see that this is a community that's kind of like the community that I spend most of my time in, which is the Ember community, in the sense that it's true community open source with long-term vision and a willingness to come together and hammer out agreements and conventions so that we can all stand on the shoulders of giants, help each other go further. So that's the big commonality that I saw that got me interested in Drupal. And I want to talk about the second thing that's clearly dear to the hearts of the Drupal community and the Ember community, which is that the open web platform is like the coolest software delivery platform we've ever gotten. We probably only get one shot at this. The web has no gatekeepers. Nobody owns it. You can throw an app up there and everybody gets to see it and nobody takes your revenue.  The web has URLs, which are amazing and give us such a rich capability to deep link from one place to another and form what is the deep interlocking of the web. That's the metaphor. URLs are really special. And it's actually kind of an amazing social hack that we convinced pretty much everybody in the world that they can see a URL on an advertisement and understand what it is and go there. That's pretty cool. And the other thing, I'm about to switch into contrasting this with native apps some more. And when you compare the web to native, one of the ways that the web really shines is when you sit down and you think about the first run experience of getting introduced to a new application on the web. Because you just go there. You follow a link and you get it. And if it takes two seconds to load, we say, no, that's kind of bad. It should really be a lot faster than that. But of course, on a native app, what's the experience, the first run experience? First is the interstitial saying, would you please install my app? Then it's, OK, let's go over to the App Store. Let's say, install. Let's say, OK, let's put in my password. Let's wait for it to download. It's probably 40 or 100 megabytes or a gigabyte. And then it will finally boot. And even the boot there is on the first run, slow for what you would get for a fast web app. It's a very bad experience, a very high friction. But people put up with it because on the second run, they've got reliability and speed and performance and a really rich user experience. And so people keep making premature statements about the web being dead and apps taking over. And that's not true. The web is going to live on. And the web is actually rapidly catching up in the areas where it was behind and staying far ahead in the areas where it was ahead. And the areas of where it was ahead, I already kind of talked about it. That first run experience, the no gatekeepers, the rich interlocking of it all. So the areas where the web has been behind is this idea that we have to have extremely tiny, lightweight experiences with very lowest common denominator assumptions about the technology and the hardware because otherwise you can't reach everybody and you can't be fast. And those constraints are important to think about, but the ground is rapidly shifting under those constraints. And if you insist that your website is never gonna have more than 800K of payload, you will lose the native apps because they don't have that constraint. They ship hundreds of megs. And they're built on SDKs that are hundreds and hundreds of megs. And they have all kinds of capability built in there. Let the developer go further faster and deliver better experiences. So the point of what the web platform is trying to do to be that good is to build technologies that let us ship ambitious applications on the web platform to everybody. And so that means you shouldn't have to worry about keeping your app super tiny. If you have great technologies, like the ability to do a fast server side render of an application that might take a second to boot in the browser. So the user gets their stuff instantly on the first run. We keep that first run win. And then by the time the second run comes around, they've already in the background pre downloaded everything that you could possibly want using ServiceWorker or even AppCache, which gets a bad rap but is widely deployed today and lets you get that reliable fast second run experience that native apps have. So that's the big picture pitch about why you need to care about ambitious applications. So that's the story. You're competing with native apps, native mobile apps in particular. And so I'm here to talk about Ember today because that's the community I've been deeply involved with and we're actively working on this problem. The way I would describe what the Ember community is trying to build is that Ember is an SDK for ambitious applications. In the same sense that you would use Cocoa to make an iOS app and you would use the Android SDK, you would use Ember to build that kind of application. So we're not comparing it to websites, we're comparing it to applications. And there's lots of things that truly are websites and are good as websites and you keep doing the website thing on those. That's really, really valuable. But I suspect many, many of you are writing things that are actually apps or have apps embedded in them and you struggle with that dichotomy sometimes because it's hard to run, to walk the line. If you kind of pretend you're not really an app, you're just a webpage with some parasitic JavaScript floating around, that rapidly grows. And any long lived successful, traditionally server rendered website I see has tons and tons and tons of JavaScript. Many, much of it redundant because there's no holistic picture of controlling it all. So I wanna take an example here. So I have a lot of screencast here of some demos. I wanna take you through a demo. It's gonna go into some depth. My goal here is to show you two things. One is that I'm starting with, this is a completely stock Drupal 8 website. This is thedrupal.com website. I got a copy of it. I asked to see if I could demo it. So it was written by other people, not knowing I would do this with it. It's just, it's obviously it's modern, which is great. That's why I was the main one constraint was I wanted Drupal 8. This was started at 8.0. I upgraded it to 8.1 and did just some minor tweaks to make it all work. So the point is there's nothing up my sleeve. So how do we evolve this site into something that can support those kind of rich application experiences I was talking about, right? We want a steady evolution so we can keep shipping value and features to the users without a big bang rewrite the world situation, right? I think everybody knows why that's not the best strategy when you have the opportunity to evolve instead. Particularly on the open web because the web itself has to evolve. You can't, you could come up with a, you would come up with a much different set of standards if you were reinventing HTML, CSS, JavaScript, all from scratch to do what we want to do with them today. You can come up with something much nicer but nobody would use it. And by the time you implemented it, the rest of the world would have moved on for the five or 10 years it would have taken you. So we're all in this evolution together. So first step of my evolution here is I'm gonna install a module. Let's see, am I just playing? Do I need to click them? There we go, okay. So I'm installing a module, it's called Ember and it does very, very little. Really it's just adding the libraries and in development mode, how I have it here, all it's doing is pointing at a conventional Ember server, Ember development server that expects to find. So if we go and look at what happens when we render our site now after I turn it on that module, it looks exactly the same except it's got some broken links to the, it's looking for an Ember server. And the Ember server is the Ember CLI, the Ember command line tool, the standard conventional way to do development on an Ember app. You'll rapidly find, to throw out all the constraints of a really rich client-side application, you need build time support. There's a bunch of different competing standards in the ecosystem, a lot of them have their own strengths. The nice thing about when you're writing an Ember app working with Ember CLI is that we've got the whole community to agree and so the way everything's packaged, the way everything's installed is all very standard. So there's not a lot of gluing things together. So we're gonna stick with conventions and we're gonna, is it playing? I can't actually see it on my screen, okay. So what you see here is this is how every Ember app starts. You say Ember new, the name of the app, optionally where you want it to go. And so I'm putting it in a directory alongside doc group. They live in one repo, but I actually tend to suggest to teams when they're doing this the first time, you might actually just, it might be even more conceptually clear to everybody if it's two repos because you truly are writing an app. If you were writing an iOS app, you would probably treat it as a separate thing than your triple site. Now the deep integration of the two is very important and this is a progressive decoupling story. This is not a fully decoupled story, but the reason I'm stressing the idea that you have a full application from the beginning is because that lets you take advantage of all the standard conventions of having a standard number application. So we're gonna, so that we've got our standard number application there and let's see, is that it? It's funny, I can't actually see the videos on my screen. Okay, so we stick with conventions. So now when we run our application, we can see in the console that Ember in debug mode is telling us it's present. It's booting, it's ready to do stuff. It's not doing anything yet. And if we start to navigate around, there's two things going on here. One is that every time we navigate the page, of course, it's loading again, it's booting again. And the second is that you'll see when I go to a URL other than the homepage, Ember doesn't know what to do with it. Ember is very sensitive to the URL. That's the whole point of being on the web, right? The state your application is gonna boot in has to be tied to the URL. So next, we're gonna install an add-on that I just shipped called Ember handoff. Good, and I would describe Ember handoff here as analogous to what a UI web view does on iOS. Right, it's the idea that you can embed some existing web things inside your app. And we have an app and we can embed our existing web things in it. So the point of the handoff here is that we're going to, within this browser application, render the stuff coming from Drupal, right? So this is basically like turbo links, basically like refresh lists, with a bit of a different philosophical flavor in the sense that you're not just sending commands from the server and driving things from there, you're really driving flow from the client side application and getting data from the server.  So this is a standard Ember router map and what I just did there is put in, this is referring to the add-on we just added. I'm basically saying for a wild card, all URLs, I don't know anything about them here, I want to delegate them to the hand-off add-on. So we'll hand them off to the server. And there's one Drupal-specific thing I did here, which is that there's this hook that says, hey, we've appended some new server content and there I get to call Drupal attached behaviors and this was wonderful discovering all this because Drupal has very nice clean abstractions for doing this stuff because it was already written for the AJAX support and all that. It puts you way ahead of most of what I find out there in terms of server-rendered stuff that has the wild west for how all their assets are handled and this is great because it means everything works. So when we go and boot the app up now and we can open up the network console and we can navigate around and we can see that we're not doing full page refreshes anymore. We're loading everything over AJAX but all the JavaScript still works on all the pages, all the widgets still work and so we didn't have to do much to get here, right? Because, and the reason we could do this because the hard work is pushed into these add-ons and these add-ons are very, very standard and they could be shared by the community so that we could do the hard work once and then you could just be up and running. So this is an inversion of control, right? We're starting our project. This is a progressive project. We're not throwing away our website and making a whole new thing. It's very progressive from where we are with Baby Steps but the Baby Steps have to be going somewhere, right? And the goal is to be able to shift richer, user experiences, better performance. Maybe we wanna make our app work offline. Maybe we want to add rich animations and transitions, things like that. So you're gonna eventually hit the point where you need to have the control happening on the client and so it's actually, as long as you can make that step in the very beginning like this at low cost, there's no reason not to because now you have the option of very piecemeal choosing what parts of your application are gonna be handled where. So that's the idea, you know, progressing toward where. It's toward, it's basically moving toward fully decoupled with the understanding that you might never choose to go all the way there but you always have the option to take tiny steps any place in your application that you need to. So let's take some more tiny steps into letting Ember understand more about this application and have some opinions about how it should behave. So in this, I'm adding two new routes to the Ember router map. Before we had one wild card route that would just delegate it to handoff and it has, you know, this catch all path. The star there literally just means, you know, match everything. But the two new routes we're adding are just much more conventional Ember routes. One for showcases, one for case studies. Those are two content types that are already on this site. They're URLs that already existed. And the only difference between the two is that one of them is basically static and one has a dynamic piece that you can see there's an ID in there. But they're basically gonna, they're fully conventional Ember routes and so you could just go read the standard Ember guides and understand exactly how all this works. Which is a really big benefit when you think about teaching teams how to do these things. Next I'm taking advantage of Ember to generate some of the files that are gonna back up these routes. This whole step is basically just making sure each of these routes knows how they load data, right? And so you'll see that we're basically gonna tell the Ember data system, hey, please go get me this server page. So there's not a lot of complexity here. And you'll find that what you're typically doing is you're adding a line of code here or there to express the behavior you want. This step also gets nicer once we ship a new feature called Ember engines, which will let you just, the first step I did where I just edited the router map, there you would basically just say mount Drupal wherever in many places in the tree where you want it. That's a really nice feature that's coming down the pipe pretty soon. All right, this is my other route, very similar. So I'm gonna keep moving so I don't run out of time. So now here's our application. It still looks the same because the point was that we did the same thing except that we now taught Ember about the routing a little bit so that it has the option to do different things on these different pages now. And to show that I opened up the Ember Inspector which is a browser extension that works in Chrome, Firefox, IE, can remotely debug mobile apps.  But what I'm using it for here is to show what route we're currently in as far as Ember's concerned. And you can see that it's actually changing. So that Inspector is a great example of the kind of stuff you get when everything's standardized because you weren't gonna find the time, and I wasn't gonna find the time to write a whole browser extension just for debugging your site. But of course, if it's very standard, the community can pull it off. The other big piece of finding things in the community is the EmberObserver.com is a really wonderful resource that you can go find what you need. In this case here, we're gonna go just search about animations because that's what we're gonna do next with these two routes. Find the thing we want.  She's amazing and goes through the whole add-on ecosystem. It's a huge resource. So we went and decided we're gonna add an animation library. And so you're just seeing the steps that required to do that. So we're writing some animation rules. Can you guys actually see any of that? I know we're mostly just trying to get the flavor. You don't have to follow every character. The point here is that it was very declarative and that we're able to say these kind of things about our application. We haven't changed a single template. We haven't touched the DOM to make anything different. We just expressed an intention. So let's see it run. So keep in mind that the two routes that are animating are from here to there. There's the fade, right? And that's the only thing that's animating on this pass. So let's make it cooler, right? You'll see the fade again right there, okay? So that's nice, right? That's kind of cool. That's not something you can normally do. Let's take it up a little bit. So let's change it so that it alternates. The reason that it's such a thing as use and reverse here is because there's a directionality to the constraints we put on this row. We said from to. So that's how we're able to know which way it goes. And let's see that one. Okay, yeah, so thank you. So this is a very rough level of animation, right? This is just kind of the very first draft. And if you sat down with a designer and a developer together and put their heads together for an hour or two, you can make this really, really nice. And the kind of things, the reason this kind of behavior is important is because of the way our human brains work, right? Computers are very abstract. You're navigating through a very abstract space when you're moving through a rich application. It really, really helps to have spatial metaphors, right? So things in the physical world don't just appear and disappear, they go somewhere. And if you can feel like you're going somewhere on a journey, that's a real mnemonic help to your mind. It really helps users not get lost. So let's take it up one more level. What do we got here? Oh yeah, okay, actually I was supposed to point out a bug on the last slide. That's why we're adding memory scroll. So I don't know if you noticed, but we're losing our scroll position. And yeah, let's watch that again. Who do I talk to me not looking at the screen? So watch when we go to the lower one here, when we do red hat. It's nice when we go over, but when we come back and notice the back and forward buttons are making the animations work correctly, but we lost our scroll position, right? That's the bug. So that's why we're gonna say, okay, let's jump, let's go to the add on ecosystem again and get an add on that knows how to fix that problem for us. It is the kind of thing that you get for free when every page is a hard refresh. Now you kind of have to manage it. That's the blessing and the curse of having this level of control. So we're gonna go and add this memory scroll add on. It's gonna give us a new component. We're gonna drop it in our template. And let's see. I will definitely be posting all these videos so people can follow them at their own pace too. I realize it's a little fast and disjoint. So now we still keep our position. Okay, great. Okay, so that's a kind of nice illustration of the power you get once you have a client-side application running. All without having, we didn't change anything at all in Drupal. I installed one module, right? That just added some JavaScript. So next step, I am gonna go touch Drupal a little more and I'm gonna add some stuff to some templates. Just some data attributes. A little, a small thing that's gonna make it easy to do the next animation, which is we really wanna be able to target specific things semantically. We wanna be able to express a rule that content on one page and content on another are semantically related. That's why I added those data attributes. So this is the most complex, this is the most complex animation I'm gonna show you. I won't go further than the sign you. But the intent is that we're gonna find, whenever we're transitioning between these routes, things that match each other. And that's what the explode rule here does. It explodes out the pages and tries to find pieces that go together. And then it's gonna delegate any matches it finds to another rule called fly to. So, and this final step here is what happens to the things that don't get matched. So basically the background. So let's see that one. All right, so this is how we beat native mobile apps, right? Because they get this stuff in their SDKs. That's what we need to build. That's why we need these kind of things. So, and we might as well, for completeness, we're gonna just copy that block and do the reverse too, so it goes back. And that just basically means flipping two bits here. The moving side thing, by the way, is just basically we have an old and a new state that we're comparing, which one flies across is what we're deciding there. So in this case, you really want the bigger image because that's gonna look nicer. So now it goes both ways. And notice I can do it with the forward and back buttons or with the links. It's all actually driven by the URL. There's not like click handlers here, right? It's all driven by the URL. So this is one kind of progressively enhancing an existing application. Let's go more baby steps. How would you choose to start implementing chunks of the actual DOM here within Ember if you wanted to get, to move some of that functionality to the client for some kind of rich behavior? So here I'm adding one element to a Twig template and this is probably not how we wanna do it. I think what we really wanna do is use the progressively decoupled blocks module to drop a block here, right? That says, here's where I wanna put this Ember app. And it sounds like I just need to integrate those guys because they've already done all the work for that piece of it. But in this case, I'm just dropping some stuff into a Twig template and I'm binding in some state. I'm naming which Ember component I wanna use and I can pass arguments to it. And then I'm adding one extra thing. So what we're looking at right here is actually the top level template for my Ember application. This is basically just my one hook for that handoff add-on to have an opportunity to stick things places. So far I hadn't really been, I hadn't stuck it in any templates anywhere and so this is a fairly clean public API way to be able to inject content. You need to be in a template somewhere. So we're putting essentially what looks like a tag at the very top level template or application. It doesn't generate any DOM right there. It's more of a behavior. But I'm showing all of these little details just because I actually wanted to show all the steps. I'm not hiding steps here. I mean, I'm hiding like CSS, that's it. Well, yeah, that's it, right, yes, yes, yes.  It's not like key frame animations or anything like that. That's all in the JavaScript. So it worked because it made us get an error. So now when we render this page, we see an error that Ember says there's no such component, right? So it's good that it found it, that was the point. So now we're gonna generate that component. We'll say Ember generate component case study editor. And I called it that because it could conceptually evolve to replace the thing that's already on the page there. That's running the case study. So we'll give it a template and we'll bind in some of the actual argument it got to show that it's there and it's there. So that's good. So now this is a case where it's gonna render on the client after that HTML has come across. And, but I wanna point out it that doesn't have to be that way. All of this works nicely with fastboot or any kind of server-side rendering. The idea being that if you want to run node infrastructure in front of your Drupal infrastructure, that HTML could already be in the page when it hits the client. So that even somebody with JavaScript off still gets that chunk of content. It can be a fairly transparent process as far as Drupal's concerned because, conceptually, the browser has everything it needs to know to take the JavaScript and the data to put it together and get that DOM. You can just do that, move that step one step closer into the cloud. So let's, but let's make this thing actually get data and really talk to Drupal in a meaningful way. So I'm gonna install another Drupal module. This is the second one we added. The first was just adding the libraries. This was actually a JCNAPI implementation I'm working on. I want to make it an official project. I heard there might be, I don't know if I'm floating around and I'd be very happy to collaborate. Come talk to me if you've got one. JCNAPI is a standard, relatively young, younger than HAL, which is often compared to, and tried to build off of some of the things learned by HAL. It's a bit, it's more opinionated in the sense that it specifies more things and it talks a lot about the kinds of, both read and write operations that are allowed and how they should happen. And by standardizing on that, you get really nice properties in terms of the, plug and play ability of code on the browser and code on the server to talk to each other. So that's JSON API. Now that we've got it, I can't actually see what's we're cutting. Okay, so I'm adding another add on here. This one's called cardstackcms and I was, as soon as I named it, my collaborator pointed out it's a terrible name because it's not a CMS. It's more of a tool for talking to CMSs. It's called cardstack editor. I wrote it along with a group of great people where we are cardstack syndicate. We're all really independent developers, designers, strategists who come together to do big projects together and often try to work on kind of stuff that will push forward open source ecosystems. So we tend to do take on projects where the client is happy to get their product built and generate a whole bunch of open sources as a side effect. So this is an example of that. So yeah, so we've got nice toolbars and stuff now. Now we're gonna mark up. This is, so this is, I'm gonna just drop this template on you. It's the most complex one you'll see. This is where I'm actually using that library to do, to say I have a CMS editing capability here and I'm gonna pull fields from the CMS and bind them into the DOM. A cool feature of this, well two, two cool features. One is that you can, at compile time, take out all of these annotations so that the DOM is perfectly clean. But the other is that even for an editor, the DOM itself is perfectly clean. All of these, this markup is purely behavioral. The running, because you've got the running JavaScript on the page, you can keep references into the DOM without having, there's no container divs, right? There's no extra markup just to support editing. So you don't break your CSS because the editor view and the non-editor view are different, they're all the same DOM. And so once you have that, now the editing tools are aware of that content and they can interact with it. And so we can actually go and if we flip editor mode on, we can actually touch the page itself and get those fields and edit them. And when I hit update here, it's really going all the way back to Drupal. That's a JSON API patch. I'm gonna switch over quick to another piece of demo which is that I have a full, an actual application that we've shipped on this kind of technology. I'm gonna see if I've got enough internet to make you look nice. So this was the client, the American Institute of Architects was willing to take a chance on us building all this crazy stuff for their reinvention of their online experience for their members. And so what this is, you could go to this URL, it's a real site. It is all fast boot rendered. So if you hit it with JavaScript off, you get all this content. But it's a full, this is a fully decoupled umbrella because we're starting Greenfield. But if I go to the logged in experience, so here's a case where I'm already logged in. I can go there here and activate those tools again. And you can see much more richly. These are all the fields coming off the content types in Drupal. The fields on the right here discover dynamically based on what's in the template. So they're not necessarily 100% of what's on the content type. The UX strategy here is that some things you always need, and they go under editorial if they're something that doesn't go in the template. So I can choose to, like if I go to an editing on here. Remember not to save this because this is their actual website. I've got things here like, this is actually talking to, these are actual, this is a real taxonomy coming out of Drupal. I can add and remove things. I could search for things. All that stuff. That's all powered by JSON API talking, fetching taxonomy terms and vocabularies and all. These also are basically all driven by taxonomy. So a site builder can go and change taxonomy and change these controls. Certainly this is not the end of the end game for where I think Drupal can go with this because this doesn't give the level of flexibility to a site builder that you'd have if you were purely server rendered. The pitch here is that to go and do something, to go and make ambitious changes, you do end up writing templates, handlebars templates. You shouldn't have to write code. You just need to do handlebars markup which is pretty comfortable for a designer if they get somebody to help them get started. That's an area I'm really excited to push further. You have really dead simple out-of-the-box setups so that somebody who's comfortable with HTML and CSS should be able to jump into an application like this and do anything to it. And I think with things like decoupled blocks and all that stuff, much, much further in terms of plug-and-play. This can also be viewed in all the other formats that it comes in, the cards and different devices and stuff. Here's my content library. It's gonna, I don't know if the Wi-Fi here is fast enough. Oh, here it's finding me. This is all the recent stuff that's unpublished. We can go find it. And I can create, these are all my content types that I can create new ones from here. So it was a pretty cool project. We were really grateful to the organization for taking a chance on this technology, really is paying off. And as I said, it generated all this great open source because the underlying tools are now, we're open sourcing them. So I have links here on my last slide to the things that are already open source here. Oh, now I'm playing again. Going forward. So handoff is the thing I tell, is basically what's implementing all of the turbo linkious refresh-ish behavior here. I really wanted to actually just build it off to the existing refresh-ish module, but we need to do a little integration work to make that work. I think we'll still get there. Cause we can get a little more efficient than we are now. It's right now completely agnostic about Drupal, which is actually kind of a positive from the perspective of it actually you can, the module encodes some things that are specific about Drupal today, but it's very small amounts. And it's actually just speaking HTTP. Hey, great, we have standards. You know, HTML is pretty standard. You can actually fetch it, fetch a blob of it from the server. And the semantics are well-defined enough to pull out the scripts, do the right thing with them, pull out the style sheets, figure out if you need to insert some, take some away. So it's pretty cool. Cardstack CMS here, as I said, it's kind of a bad name. We'll probably call it Cardstack Editor instead. That's all those toolbars you saw and the overlays that highlight where your content is. And last of course, EmberJS, because it's all a very stock Ember app, very much by design. So I think that leaves me some time for questions. Yeah, if somebody wanted to just hit the mic. Thanks. So if you wanted to play with the version of Drupal that you had just demoed, is that available someplace? Can I ship that code? It's not my, it wasn't my kite, but yeah, okay, I will absolutely post it. Sure, I just didn't know, because I just think, hey, here's a dump of the site. Oh, that one. Drupal.com. Oh, I gotta check. So we gotta check. I can certainly, all the stuff I wrote, I will certainly can share. I will rip out and share, because that's the interesting part anyway, right? I didn't do much with the Drupal site. Absolutely. You're just using stuff. I did, yeah, I upgraded Drupal.com to 8.1 for that. And not even like I needed any features, it was just, well, I was trying to use refresh lists and refresh lists needed it. Oh well, but it wasn't that hard. So I definitely have more code to share than I shared here. But I don't have a link to the JSON API module and I really want that. So I know I just wanna work with actual Drupal.org to get it on there. We should just do that. Yes. I was wondering if you could comment about versioning in Ember. And just like how that works. I think that's one of the biggest cultural differences for Drupal developers and it might be useful for people to hear you over the chat. Yeah, so you said versioning, right? Yes. So Ember took a key from the way projects like Chrome release where they've got channels and a very fixed schedule. So there's canary releases of Ember basically all the time, weekly at least. And then we do, we'll branch a beta basically every six weeks. And then that would go through a beta cycle where there are weekly updates to the beta cycle. And then after the sixth week, we've ironed out enough of the bugs that it goes to stable. And so there's a stable release basically every six weeks. Now that said, we know that's a really fast cadence for a lot of people. And so we also have long-term support releases which are spaced out much more and you basically end up with, and these are even firm, these are basically semver minor releases. So they don't actually break anything but we still support them at least 18 months. And the ones that break things, the actual major releases, we've really only done that once so far and we don't really want to do it again if we can avoid it. There will probably be an Ember 3.0 but we don't have to rush. We have a lot of, we've built on a lot of capability for ourselves to strip out the things we don't need. That's really our goal so that you can pick and choose. So compatibility-wise, we're very, very serious about not breaking people's apps and we're really proud that most of the ecosystem has been able to keep up with us. We just did a community survey and like 70% of the people who responded were up into the 2x series, which was just great, especially since we all feel like we could have done even better at the 2.0 boundary but it worked out. So versioning is very serious. I encourage you to check out the builds and release pages on emberjs.com because there's all kinds of docs about the process and how things happen. Yes. Hi. Just wondering if you think there's any possibility for template system agnosticism in emberjs future. Handlebars looks like a very friendly templating system. It looks pretty similar to Twig. I'd be a little bit concerned with two templating systems that are very close but not quite the same. Right, exactly. Where it could be confusing. So the syntactic differences are very small and people have at various times supported alternate syntaxes with ember. There's none that are really kind of live and active right now because the people who cared about them didn't have the time. So today it's an upstream struggle to try to have your own syntax but it's getting a little easier because Glimmer 2 is the name of the new rendering engine that's currently in Canary and we're working on. Having caught the, listen to mostly just to the end of the last talk, it was very much the same themes. Everybody cares a lot about performance on front end rendering and there's only the constraints of performance are pushing everybody to a convergent solution. We have a very aggressive pre-compiler that happens at build time. We have a JIT that runs at runtime to optimize templates. Templates are actually, there's an opcode VM that actually emits the code that alters your DOM in the minimum possible way and while it's emitting that, it's emitting the update code so that it knows what could possibly change in the future. There's, if you're curious about Glimmer 2, there's some extremely in-depth head spinning talk from Emercont this past year with Godfrey and Yehuda, you can check it out. I brought that up though because Glimmer 2 is a much cleaner low level abstraction than its predecessor and I think it's gonna stay that way because we've learned enough like this one is really actually good. Good enough to expose this public API so the goal is that there's a lower level API to use for expressing Ember templates that is lower level than handlebars which would make it much easier to support an alternative syntax. All that said, the syntax isn't really the hard part, it's the semantics, right? So the hard part today of making twig stuff work on the Ember side is actually the semantics of the data and the helpers and the functions and all that stuff. So that will be work for sure. Overall, I think it's very, very clear that you will either always have nothing but twig or you will have twig and something else for a long, long period of time because a cutover's not possible, like that's the evolution story, right? So as we think about how to, we need to think about what would be a wonderful, perfect vision but also what would be step one. And I think step one probably involves two templating systems, that's my guess. Yes. I just had a question about the card stack CMS. The live editing is really awesome. Does that take into account any kind of revisioning system within the CMS? So today, I guess it is actually, yes, the revisions are visible in Drupal. So it's using, it's very similar to the kind of way the rest, existing restful services module would manipulate entities. And somebody who knows those way better than me can correct me if I'm wrong but you get revision history out of that, right? Like a new revision for each field edit? Well, that's actually why we chose not to auto sync every single thing, every single keystroke. Cause that's an option here. We can do that. But then your revision history is insane. That's why you have the big blue button for update. And so that would create a checkpoint and you would get revision out of it. But you absolutely should. There's no reason it can't. I don't know off the top of my head if the existing one does. That JCNN technology definitely needs work to be production quality. Like there's no configuration capabilities yet. You have to go and tweak stuff to set it up where you want it. Thanks. All right. Wow, nobody asked me anything like in Cindiary. Like why aren't you as good as React? And mostly that comes down, mostly that comes more down to like the structure of communities. I put my weight in with Ember community because of the philosophy in the community, more than the technology at one point in time, which six years ago when I was going to start it was very different technology. So I put my bets on people and shared values and philosophies and that's why I'm happy where I am.


Dear students, I welcome you in the course of Leadership, Emotional Intelligence and Decision Making. This is module number 163 and in this module, we are going to talk about rationality and obviously turning your adversaries into your allies. In this context, remember that when we are talking about rationality, we are going to use reason and logic and that reason and logic is obviously going to be accompanied by redirection and reciprocity because we can keep these three things constant and establish our matters in a way that is more important than what they are. When we talk about rationality, remember that there are a few things we have to bear in mind. For example, we have to understand the expectations of others and we have to try that we can reach their expectations with our reason and logic. Our rationality would be the source to convince them that why we are doing what we are doing and we can establish our relationships better through the use of our rationality. The second important thing that we have to bear in our mind is that sometimes emotional distress or emotional unease, it challenges our trust. So emotional control is a key to success. Another important thing is that when we are using rationality, we have to give importance to others. We have to take care of their priorities and try to reach their expectations and remember that rationality should follow redirection and reciprocity. And remember, there is another important thing that we have to understand that rationality should follow redirection and reciprocity. It is very important to have time for these three hours. We can redirect things, we can adopt the principles of reciprocity and we can bring rationality when our negotiation, when our decision making, when our relationship with our stakeholders would be in a rightful manner. Now in this emotional intelligence, where we want to promote rationality, remember that rationality is basically is going to avoid the ambiguity. We can get out of the dilemma, we can avoid uncertainty. Another important thing is that mutual agreement is necessary so that both of us are on the same page. We should be able to understand what is being said and why it is being said. We should be able to have a win-win collaboration and win-win association. Likewise, using rationality, we are able to establish a healthy working relationship or as healthy working relationship, the both parties are going to have the benefit, the desired outcome. And obviously, using rationality, we are able to get the desired gain. We are able to give a stronger relationship, a trigger. This relationship say, just gain say the organizational objectives, your personal objectives, your stakeholders objectives, they can be achieved and we have to be motivated and motivate others to achieve their gains properly. Dear students, remember these three principles. Rationality, reciprocity and redirection. And these three principles will take you to success, your negotiations will be better and you will be able to establish your stakeholders in a stronger relationship with yourself. Thank you.