Phil Mickelson was beloved on that key while. I mean, it was the lefty chance coming out of nowhere. But I think from like whole six and seven, maybe all the way through, they're like, hey, this is Phil's, this is lefty, this is legendary. In the entire course, felt like they, hey, we're part of history here. Like it's gonna be awesome. They turn completely, I think.  I'd assume move the needle for golf when it always been tiger, tiger, tiger, tiger. And now Tiger Woods is tweeting like, hey, that's incredibly inspiring. I assume Tiger's seen that, seen the pop from the crowd, seen everybody follow him. Was incredibly proud and happy for Phil. I think they're very tight at this point. But man, what a moment for Phil Mickelson. Had to feel great. It was very cool to see, very cool to watch. And this just goes down as another legendary thing that Phil Mickelson's a part of. And I'm happy for the guy.


Hello again everyone here locally. My name is Jacob McElroy. I'm a developer at Octeto and the title of my talk is with preview environments everyone is invited to the party. And that's an interesting title to try and get accepted here but what it means is by introducing preview environments to your review process you're able to integrate a more diverse set of roles and include as many people as possible in your review process so that you ultimately have a better product and a better team right? So same with parties the more people you invite usually as long as they're the right people the better the party right? So to accomplish this first I'm going to define preview environments I'm going to talk about what I mean when I say preview environments maybe you've never heard of it maybe you have it's one of those things that's probably defined differently depending on how it's implemented and how you've used it in the past but we'll define what I'm talking about when I mention that and that'll shape sort of what benefits you receive. Then we will compare the review process traditional review process and that with the preview environment we'll compare and contrast and just review that so that we know sort of where we sit there and then I'll talk about the team benefits and this is where I think is the most valuable here there's we could talk about how it's implemented but but how it benefits the team I think is probably the most important aspect because it's the why so let's talk about what a preview environment is. We are defining today for the context of this talk we're defining a preview environment as a full deployment of your application that is deployed in conjunction with the pull request you open up a pull request and then you have a preview environment so it is deployed from the branch that is under review at least at least the code maybe all the code and the automation to deploy that code is all in the same branch but the point is is that the preview environment is effectively using the code that that you're putting under pull request that you want to have reviewed and when the review is complete it all all the resources are cleaned up so it's an ephemeral environment that is specific for the review process it's all it's it's not it's not a staging and the reason that's important is because you think about these ephemeral environments or something like that you may think of a staging environment well it's a little bit different than the typical staging environment which is after emerge right this is before this is your development branch okay so it's very much a development thing and we have a snippet here of a sort of something fulfilling all of that we have a github bot that is said hey your preview your ephemeral preview environment is deployed and and here's how you access it right there and it's a snippet if you use github's code review process you may notice that as a comment and that's what that is so it appears there so that's that's what a preview environment is that's what we're defining it as and since you know we're here at kubecon um i feel like i have to mention that this is one of those things that is really not necessarily made possible but made better made easy and made the possibility of preview environments being more ubiquitous between teams is made possible because of the groundwork laid down by kubernetes cloud development in general you can go from from that's bit bucket logo you can go from bit bucket github git labs with kubernetes to a preview environment and get that all connected up because of all the tools that we're learning about and talking about uh this week right so that's that's amazing and that's how this sort of fits into the greater kubecon world so we've defined it we talked about how it fits well with kubernetes and so that we probably all here have the possibility of doing preview environments so let's compare the review process both with and without preview environments so the traditional code review process is focused on a code diff it it's for developers right a developer typically writes the code creates the pr and is going through a developer focused review process and i don't think that should change i think that's great it it focuses on making sure that the code is appropriately designed for the system that it lives in it's if you have style guidelines you're checking that those match so that everyone sort of code is somewhat coherent coherent and looks together that's very important we're looking for overly complex code and to see if we can simplify it or if it may be prone to bugs now or in the future and the two other things that i would mention that i think is sort of a gray area between it may be better with the preview environment than it is just with the code diff is that the code provides behavior that functions as intended and that there are tests that validate that expected behavior right and that is that is a whole there's a whole world of complication and and expectation there but it's really hard i think most people would agree it's really hard to intuit or know and understand the behavior of your function feature just by reading a code diff right um you may be able to know how a loop may execute and that those types of behavior but the product it's going to be very difficult so that's where yeah you can get some of that from a traditional code review but i think a preview environment based code review is gonna gonna help gonna help so when you're using a preview environment you have a readily available hands-on environment so readily available i think that's important because there are many times in the past before i used preview environments that were automatically deployed where i would pull down a teammate's branch do a deploy myself deploy it locally or remotely whatever was available to me and i and i would do that and i would do the review process there do sort of the preview environment review process i'll take talk about there but i had to there was there were hurdles i had to opt into doing that i had to be able to do a deploy which in some products is not easy some you know we've talked about there's been other talks here where they talk about how some people can do deploy some people can't you know so you have to be able to do that you have access so readily available i think is is super appropriate here um it just happens with preview environments it gets deployed and then you decide if you want to use it or not right and with kubernetes and all that that's cheaper that's easier so you decide if you want to use it or not but it's already there you don't have to decide i want to spend it up i want to take the time to check out the branch everything it just happens and that's great because we all want to do less work and we just want to reduce friction along this whole process right um often preview environments focus on visual changes visual and i'm talking about visual changes to the application so this is where we pull in some of the diverse role set right um how does it affect the ui if you have a ui component how does it affect the log output are your logs noisy because you that's another visual component i think sometimes is that you have to trace logs and and go through all that how does it affect um if you're using automated documentation how does that documentation get pulled out how does it affect so many things uh the preview environment review focuses on functionality right you care about the functional aspect it's not an an automated functional test or anything like that but you you can use the product in a functional manner and redo oftentimes people do this in staging but now you can do it right with your branch and doing all these things everyone is invited to the party you have more people now that have the ability to to provide feedback they're not going to do a full review you know they may not review your code in this but they could review a piece and it's done here and i think that's super powerful and and provides team benefits such as um you have a greater role diversity in that review process right so content if you if you change even small changes in like login screens and document and just documents on your page or just anything it matters right like we we we sweat the details a lot of times and so being able to see that and be able to show the end product to someone who cares about uh words and phrases and all that is great the design of the page the flow of the page so product can go in and say hey this goes from this to this to this part of your application and goes through all that and they say yeah that's that's how i envisioned it in my mind and they can do that right then um just by clicking a few links on the on the review right um then development they get to use it so if you're developing um an internal api people could target your preview environment with their clients and use that it's it's up there it's ready for them to use um and then dev ops this one is kind of a subtle thing in that with the i think the advent of all of the cloud deployments and everything the dev ops and the uh specifically the automation of getting something deployed things can break then you can go through and make your feature write all the code and then all of a sudden you can't deploy it in a production like environment well with preview environments and specifically preview environments that model how your production environments are done that automation gets tested with your branch if you can create a preview environment it's much more likely that you're able to produce a production like environment so dev ops is now participating just kind of by the fact that a preview environment gets created right um they may not have to review the preview environment but but any automation for putting stuff into production is is now quicker it's just tested right away just by the fact that you created a preview environment i believe that adding all that adding the diverse role set testing all those things adding the visual changes i think that promotes ownership and what i mean by ownership is um i mean having feeling like you have you are responsible for your product that you have a say and that you are participating right and that you're participating in the key role i think i'm biased i'm a developer right but i think the development portion of it is some of the one of the key aspects there's many aspects but that's a that's a place where it's being made is being developed it's being created and so the more people that you can include at that point in time the the more responsibility they'll feel and the increased ownership i think typically leads to better products and better teams um we've ownership gets increased because we simplified the pattern of engagement we've included the review and all the visual review and everything right there with the review process is something that most people are used to when they when they develop code and then hopefully most of your team it is is used to using your application right and so clicking the clicking link or hooking into that development and then consistency so when you are consistently participating in review process because things are now simpler to do and because your role has an opportunity to do so um that's just gonna promote more and more so it just keeps turning that wheel of everyone being involved and then i think critical timing of feedback so uh we're all busy right whenever i typical flow whenever i do a code review as i will do a code review it'll go under the normal let's say that in the traditional sense as this flow shows in the traditional model we'll do a code review we'll check all the traditional code diff type things we will merge and then that gets into some staging deploy and then if there's any kind of visual or integration review that needs to be done it'll be done against that environment right my code's already been merged already went through code review if i have to make a change right if i need to address that feedback what do i have to do i have to go back either get a new branch or get the old branch make that change then it has to go under code review again because typically these are enforced i can't merge at all any new change and so we've sort of in a way disincentivized actually having that because i have to go through this whole flow again and so we're less likely to dot the i's and cross the t's of the visual and the integration review process right because i don't want to have to do this again because i don't have time right is it important enough to where i can redo all of this maybe maybe not and and that's a judgment call that may be true but what if we could remove that and i think with the preview environment the typical flow at least when we're talking about the visual and integration review and and all that sort of thing it becomes this right so we do the code review and the visual and integration review all before the merge altogether right and then we merge and there's no more that the feedback's been done i don't have to wait for another deploy to get more of that feedback there are other things that you will pick up but for the most part we've for this part for this visual and integration review of the actual change we've eliminated that right so we get to do that all once and one branch one go we've i believe save time for um the developer we may be using more time for people that that haven't been part of this review process for we may be using more of their time because they're participating in more reviews but i believe that's a net gain and i think that all those key components you know the role diversity the increased ownership and then just the better use of everyone's time i think those team benefits to me really highlight why everyone should consider preview environments it may not work for you but you should at least consider it because of the benefits we've talked about here today um yeah that's the end of my presentation of my talk on preview environments do i still have time i know we did do i still time for questions okay and i'm going to okay so i've got zero votes but it's the only one up there so it gets uh gets to go um you mentioned the benefits of preview environments for looking at visual changes but it's also great for getting a feel on interactive changes like a search or browser yes um yes so the sort of performance related there's sometimes i talked about in the and i should have mentioned this then but i talked a little bit about how we look at complex code in a different code review we're checking that well why are we looking at complex code i mentioned you know looking for things that may be bug prone but a lot of times complex code is uh non-performant or doesn't perform as well and it may show up in a preview environment especially if you're able to load your preview environment with with data with the last talk they talked about how they because they were database based they talked about adding um data into the database and so that you could do development and they needed for development purposes purposes we could do that here um i think we have one local one oh i was just going to follow up and explain a little bit more what i was talking about you can also end up with like a UI that looked really good when you drew it and then when you go to like click on something like the page reflows and all of a sudden like you thought you were clicking one place and it goes somewhere else and so that's another thing that these preview environments can really help you catch yeah yeah that's a good point thank you thank you yeah so the the point was there that that oftentimes when you have if i get it all correctly if you have a flow or like spinners or something going in between if you actually go through the flow of the website and actually visit you you may find that you've done something you didn't want to do and it's gonna need a change right and you can address that then any other questions yeah we have one right here hey uh i was wondering if you think this method uh would apply only to ui environments or also to like let's say apis or uh command line tools like your preview environment would include only ui tests right yep so the question is uh do you think that preview environments are valuable for non ui environments like like clis and apis that sort of thing yeah yes i do um obviously i think it's a little bit there's a little bit more um harder to integrate a test with that so i didn't talk much about integrating automated tests with preview environments which is something you can do but say you have an internal api right that that the rest of your team users are even publicly available api you can go ahead and either run an automated test suite against that or uh if i'm providing a new api change to say there's like two or three internal teams that use it they can start using that they can target and do whatever you want hey i have a preview environment run it through its paces and give me some feedback right that's now an option um cli is the same you know any anytime there's a client server interaction whether it's htp or whatever if your cli has that way yes yeah i think it's super valuable i think the i do believe it's a harder to adopt right and the the benefits are not as immediate as the ui ones um and the role diversity doesn't apply doesn't necessarily apply as much but you are able to involve more teams and give them a a really high fidelity environment to to do their testing it's before a merge right that's better than doing it stage you can get that feedback earlier and not have to wait for that yeah i think so okay thank you last question uh hi so along the same lines i was gonna ask about the database as well like how would that work but i think i get the answer uh it's only used for ui um previews right so um the question is if you have lots of database type things or database actions how does a preview environment help there yes or is only for ui stuff um typically the the the quickest that i've seen value have with preview environments is for ui basings however that's not the only way right no we absolutely there are absolutely remote uh development products that allow you to populate data for your deployed environment so if uh you know they talked about it last talk where they can populate that data so if there's any type of client server interaction where someone is consuming it which is almost everything right so uh if you are doing some kind of say you're adding a prepared statement i'm not great with databases i don't use them a lot but if you're adding a prepared statement or some change that where the data model is completely different yeah you can you can absolutely model that change and start doing that it's a little bit more you you have a more robust and you have to work harder on creating that preview environment but it usually pays dividends in so many ways you can use that now in your development environment your preview environment and staging and so on right so so basically mock it out mocking it out so basically mocking it out right and no it would actually deploying it you would just deploy the real thing and you may have mock data like fake can data or a copy of of actual data from production sanitize it don't do that unless you know your data right but that's not a recommendation but it it's possible right yeah you you would actually deploy that that's one of the the in my definition that would be fit under that and that it has to be exactly like your production deployment or as similar as possible all right thank you everyone


It starts with the Red Sox. All right, let's get things out now to the Bronx. The clubhouse report presented by your local Ford stores. Meredith Murakovitz, there has been a lot going on over the last 24 hours. So why don't you fill us in on everything that's happened with this marigold round of a Yankees roster? Ryan, I think it's pretty fair to say it has been a wild 24 hours for the Yankees. They're now playing the Red Sox with a very different roster than they thought they would have heading into the second half of the season. As they say, the show must go on. So here's a look at what has transpired over the last 24 hours. Aaron Judge, Kyle Higashioka, Wandy Peralta, Gio Urschella, and Nestor Cortes all placed on the health and safety protocol list with COVID-19. Jonathan LeWisega was placed on that list back on July 10th. Now, something that is not at all COVID related, Luke Voight was placed on the 10 day aisle with a bone bruise in his knee. Aaron Boone said that he had that knee drained the other day. He'll likely have a PRP injection over the next couple of days. They are hopeful that he will not be out that long. So who exactly do the Yankees have right now? Here's a look at who they called up from triple A. Chris Gittens, Rob Brantley, Hoy Park, Greg Allen, and Trey Ambergy. He played in 568 minor league games. He has been waiting a long time for this opportunity and he is in fact in tonight's lineup as far as Zach Britton is concerned. He is back off the aisle. He'll be an option for Aaron Boone in that back end of the bullpen. But I asked Aaron Boone with all this adversity that this team is going through right now, how they are going to bounce back against the Red Sox. It's a great opportunity for our team and for a lot of people that are getting opportunities in some cases for the first time at the big league level at some time for the first time in this organization. A lot of these guys that we got to see in spring training, a lot of these guys that are having really strong seasons down in the minor league. So we're really excited to go take the field tonight and have the opportunity to go up against the first place team in our division and we expect to go play well. I think we just try to control what we can control. We're here right now. We're getting after our preparation, getting ready for the game, shaking hands with the newcomers, getting them indoctrinated into the clubhouse and situated as best they can so they can perform tonight and we'll get after the ball once the first pitch is thrown. What is the mood in there right now with everything that's going on? Pretty much exactly what I describe business as usual and just looking forward to getting the game off. We got to understand there's gonna be a game regardless. I mean, I guess technically not yesterday but we gotta make these up and we gotta keep pushing. So, you know, we got some guys to fill in and they know they'll have to step up and we gotta file in. Look, there's never a good time for this to happen but you guys play the Red Sox I think seven times in the next 10 games. Do you look at this as the most important series of the season? Yeah, I mean, going forward at playing everyone in our division is super important to catch up, especially the Red Sox. So yeah, we know this is huge and we just gotta do it one at a time. You're missing a lot of personnel. Do you think you have enough pieces to get the job done? We gotta play smart. I mean, it's the battle of the least mistakes and I think if we go out and play good baseball, you know, we'll be fine.


wonderful speaker for you today. Theodore Roosevelt scholar who spent over 27 years of her professional career researching the life of Theodore Roosevelt and other topics of historical interest. Dr. Kathleen Dalton comes to us today from Andover, Massachusetts, where she serves as the Cecil F. E. Baycroft instructor of history and social studies and co-director of the Brace Center for Gender Studies at Phillips Academy. Educated at Mills College and John Hopkins University, Professor Dalton has been studying Theodore Roosevelt's life for most of her professional career. She has taught at Boston University, the Massachusetts Institute of Technology, and American American University. She has held prestigious scholar fellowships, two of them, one from the Gilder-Lurman Institute of American History, and the Charles Warren Center for American Studies and American History at Harvard University. She has published several books, but many of you are probably familiar with A Strenuous Life, praised as the best one-volume biography of Theodore Roosevelt by the Library Journal, the New York Review of Books, and our own Clay James. In his review of A Strenuous Life, James McGregor Burns had this to say, at a time when we yearn for great moral leadership and conviction, Kathleen Dalton brings back a man who marvelously embraced these qualities and a continually dramatic account told with skill and grace. Ladies and gentlemen, please extend a warm North Dakota welcome to Kathleen Dalton. Okay, one of the things that I realized that it's good to talk about what you care about, and one of the things I really have cared about is being a history teacher, whether it's on the university level or the high school level, and one of the things that I've worked with my students on over the years is trying to look critically at sources, and I'm sure that this is something you've heard from your history teachers, which is don't turn in any papers with Wikipedia as a source, because even though it is democratization of knowledge, it is often plagiarized, did you know that, that people take encyclopedia articles and then turn them around and put them in Wikipedia, and the onions, I'm just telling Greg with this, that the onion has a satire of the American Revolution as interpreted by Wikipedia, and that is 500 years ago, 40 people started the revolution. The onion is a humor journal online, and it satirizes Wikipedia as an unreliable source of knowledge, and I have a nephew who's a very bright kid who's now a Turkish studies specialist for the federal government, and one of the pranks that he did as a high school student was to post false things that Herman Melville had written on Wikipedia to see how long it would take for them to notice false knowledge, because it's unmediated, and so people will put things up on Wikipedia, including some of my students, often take the material and just either plagiarize it or invent it. So let me just say, yes, it's good to have internet, and yes, we live in a revolutionary age, but one of the reasons to be educated, especially person to person, and one of the reasons to have a history education is to look very seriously and critically at your sources, and one of the first things you learn in graduate school, and I'm sure that's true here, for a master's degree students in history, some of you have met, is to consider your sources, and always look at the, you get a primary document or secondary document, primary, eyewitness, secondary, is a book written about an event after it's happened, and students can do this, anybody can do this, look at when it was written, who wrote it, try to find out why, and look critically at some of the things that are said in that book. One of the things you can, I don't know if you have Barnes and Noble out here, many malls have them, what do you do? Okay, all right. I had some, when I went on a book tour after my book came out, I had the misguided assumption that local bookstores would be more erudite and knowledgeable than the big corporations, and that I was sort of anti-corporate in my attitudes towards the book business. Well, one of the things I learned, in fact, was that yes, what gets put out on the tables at these big corporate bookstores are, there's a bribing system that publishers use, product placement, publishers pay to have these tables, and so that what's out on the table when you walk into a big corporate bookstore is not necessarily quality goods, I know I probably don't need to say this, but I think for young students, you're just trying to, you're trying to figure out what's valid knowledge, what is truth, what is reliable. We live in an age where we're bombarded by a huge amount of information, and information is not knowledge. Information is stuff you get from the internet, some of it's completely worthless, and I just have to say, I've had students turn in term papers, we all require term papers, where they got all of their information from an extremist political site where they claimed to have invented documents that FDR planned Pearl Harbor. Okay, not true. Okay, FDR did not plan Pearl Harbor. There's evidence that the United States had broken the Japanese Code and that some people in the United States government had a clue that the initial attacks when we're gonna be all over the Pacific and possibly Pearl Harbor, but if that knowledge was not at the White House, there's just no evidence for that, except on the internet, and students tend to look at the internet uncritically because technology is seductive, it is so exciting, and it's one of those things that, you know, I'm delighted and I'm thrilled to be here when you're on the, you know, kind of this take-off moment with your digitization project, and I just want to say the difference between your digitization project and what most of internet is, is that this is reliable scholarly use of primary sources, and students will be able to look at these things as primary sources. This is serious scholarship going up on the web, and I hardly endorse it, and I believe in it, and I think it's a wonderful thing that you're doing. Internet, again, is addictive, and let me just say, somebody who has raised two children who are at the stage of being tired of hearing what I have to say, it's addictive, and a lot of people can't let go of internet, and yet it's really important to step back and say, okay, what are the forms of judgment that I need to use in seeing what I'm looking at? Am I being persuaded by somebody who's put some stuff out to try to tell me falsehoods? Because there's a lot of false information there. So again, the first thing you learn in history graduate school is to consider your source, and I would argue that one of the reasons to study history, to do graduate work in history, and other fields were not the only field, although sometimes I feel that way, that in fact, learning how to judge a source critically is one of the most important things that you can do as a citizen. We're all going to have to judge politicians. We all do judge politicians all the time. Looking at different sources of information, good to read both sides of the political spectrum, and to go deeper than what news programs will often have you say. So one of the examples I can give you about considering the source is Theodore Roosevelt's Strenuous Life speech, which many people look at as a document of, am I getting some feedback here? I'll step away. Theodore Roosevelt said, and we've brought this up before in the symposium, that he gave this stirring speech, which was his address to an American society at an age of industrialization, where most people weren't doing manual labor anymore, and where they had more leisure time and more wealth than they'd ever have before. And he addressed Americans with this famous speech that historians have studied for decades, and it's, he said, it's not the doctrine of the noble ease, but the doctrine of the strenuous life, the life of toil and effort, of labor and strife. So he was urging people to continue to embrace activity and energy and purpose, even if they weren't having to plow the field so much anymore, or they weren't having to build their own houses, that a modern industrial society would bring more wealth and comfort. But the people shouldn't sit around all day. That's certainly a message that he gave his children. He said, we should not be content to rot by interest in a noble ease within our borders. Now, how you read that primary document depends, in many ways, on your own perspective. One of the things that's been interesting in his strenuous life speech, he argues that America has to look beyond its own borders. And as many people know, he was an imperialist. He believed that the United States should, after it won the Spanish-American War, take in the Philippines, where we go back in Cuba, at least temporarily, and bring them into that American system, be a little bit more like European imperial powers. Now, he moderated those beliefs, but often foreign policy historians will look at the speech as TR's expansionist foreign policy. This is the first step down the road to Vietnam, or this is the first step down the road. Now, that's one way to interpret this speech. I think TR didn't have, I think he didn't have Vietnam in mind. I think he had, you know, he couldn't see the future. He was not a worldwide interventionist. He was much more of a regional, he was much more interested in having an American sphere of influence in the Western Hemisphere. He did believe that America was going to get involved in World War I, but he wasn't a fight every war, every time, kind of a politician. Other people looked at the speech and said, it's TR trying to get Americans not to embrace rambling commercialism. He uses that phrase, rambling commercialism. He was arguing in many ways to say, okay, we've got this industrial revolution, we've made ourselves the most successful industrial nation on earth by 1900. And in fact, it's time for us to think about other things as well. What kind of a country are we going to be? Are we going to have a humane way of life within our borders? I have looked also at that speech and one of the things that historians can do is ask different questions of your material. I ask the question of, well, who does this man hate most? And nothing that the other interpretations of this genuine life speech aren't valid and don't have good points. But I found this quotation that TR had made when I was doing research at the Theodore Roosevelt Birthplace in New York. And in a newspaper interview, he called rich playboys cootie of the body politic.  And he thought it was going to be terrible for America if they were going to be led by the sons of J.P. Morgan or the sons of all of these robber barons. And that those children were not people of high moral purpose. And so I would argue that one of the subtexts of this genuine life speech, yes, there's American expansion, yes, there's people should be physically active. TR was a very enthusiastic defender of physical fitness.  One of the things that is in my book is TR as a moralist. And people in this room, I'm sure, have very different religious views and very different moral views. And one of the things that I saw in TR was a consistent thread of moralism. And some historians have looked at that and said, well, that's not a particularly appealing side of TR. I sort of liked it. I've always liked those WCTU ladies with the access that would chop down the bars in the late 19th century. I think those people are really fun.  The prudes and the Victorians have always seemed to me to be trying to tell us something in the sense that they were worried about the morality of their age. And some, they look prudish to us and they look uptight. But they were people like us who were looking at their times. They didn't know where the future was going to go. And their concerns were largely about, you know, there's drink, there's sex, there's smoking, there's lack of family, loyalty. There are all kinds of things like that. And TR was Victorian. And you can read the Stradinous Life speech as a primary document. And because of what I knew about Victorian society and concerns of other people, I spent some more time talking about TR as a moralist. And I hope respectfully, I hope I was as respectful of his moralism because it was very much of the Victorian age. He was very much a creature of his age. And that is the famous story, well I helped make it famous, where TR at the end of his life works in a magazine office. He becomes an editor after he's president. And it's a great moment. The boys, the young reporters in the office, the magazine writers, like TR, this famous ex-president. And they say, come have a drink with us after work, TR. And so they're, you know, he was a sociable guy. And so we went for a drink with other magazine writers and newspaper writers. And this is in the teen. So there's a little hint of the roaring 20s coming in with this younger generation of men. And they start toasting. And they toast, take a few drinks. And TR hears one young man say, here's to our sweethearts, our friends' wives. Well, what does TR do? What would a Victorian moralist do in this kind of social setting? Well, TR punched him out. And you know, there's a part of me that, you know, okay well hitting people in public, I can't ever, I don't ever say that I encourage you to do that. Don't try that at home. But there's something tremendously appealing about TR feeling that that kind of cynical, yes I'm going to sleep with your wife and that kind of immorality that was in the social group, that somebody's going to have to stand up against that. Somebody should. And you shouldn't just always get along with what people are saying in this social setting. And so that's TR being a moralist. And so I guess one of the things I think I've said that other people haven't said so much about TR is that he had, moral issues were really important to him. And he had mixed feelings about easy divorce. Now I personally think the reason to liberalize divorce laws in the early 20th century was that there were a lot of women who were getting beaten up and had drunk husbands and they needed to go out and have the right to get a divorce. So that's my position. His position was a lot of his rich friends were going to Reno. Nevada had liberal divorce laws and then they were marrying for six weeks or two months and they were rich people who were just treating divorce as something cavalier. And he thought marriage was a serious contract with another person that was lifelong and that shouldn't be broken. Now so he and I certainly have different positions on that but his moral concern was that people were treating human commitments lightly. And that was one of his concerns and that's a story of TR's character that needs to be told. I think that's part of TR and the family. There's another issue with TR and that is he believed that wife beaters should be whipped in public. Okay so this is a guy who's not your average politician but that's again part of the story of TR as a Victorian moralist and part of his character I started to see the threads where he is very deeply offended by some of the moral changes he sees in his time. In fact his children laugh at him because they were part of a New York society where people would go to nightclubs and hear singers and that was coming into Manhattan as part of the recreational options in the early 20th century and his children all you know they all drank and they all went to nightclubs. Theodore Roosevelt never really understood what a nightclub was. He called them night restaurants and you know his children just you know laughed at him because he was so old fashioned but he was who he was. I mean that punching out a fellow for making that statement is very much who TR was. He you know one of the things that held my interest for 27 years is that Theodore Roosevelt had so many sides. He was an advocate of American art and the appreciation of American art. America was a cultural colony of Europe up until the 20th century. That's hard to believe. I always tell my students when we study the American Revolution and the early national period America was a weak power. Face it. Face it. We were once a weak power. We were once a little colony. We were once a place where you couldn't get a good advanced education. It's hard for us looking at a time when America it has been strong for a long time just had excellent education for a long time that TR lived in a day when American literature was not taught as a worthy subject in many universities. He was part of a movement to get people to take seriously American writers Hawthorne Melville Whitman. Now Whitman seems a little risqué for TR but TR accepted the great American writers and he wanted Columbia to teach American literature. He wanted Americans to be able to do graduate work in America and not have to study science in Germany which they did in his youth. He wanted America to be one of the serious countries in the world. Now nationalism can take ugly forms. Anybody who studied history can see that nationalism around wild can get us into horrible trouble. The most nationalistic example of the 20th century German nationalism and the Nazi movement but I think TR's nationalism for the most part was pretty good for America. Much of it was not all of it. His nationalism was sympathetic to the advancement of science, sympathetic to the growth of universities, sympathetic to American literature recognize is it an important world literature American art. He was friends with artists like Frederick Remington who he loved and he he wanted America to be taken seriously as a country. Now clearly he he he got his wish although it was mostly most of this happened during his lifetime but also after he he died. TR was a nationalist in the sense that he also wanted America to be like the serious European countries that took care of their poor people and that was a very patriotic issue for him what we call Social Security today. He defended that before many Americans would step up and say Social Security was an idea. England and Germany had that before the United States did and America was late to provide any kind of welfare state or help for poor families very slow. One of the things that you all probably know that there was tremendous hostility between Woodrow Wilson and Theodore Roosevelt during the last years of Theodore Roosevelt's life and sometimes at historians conventions they'll pit the Wilsonians against the Rooseveltians and usually you can get a pretty good argument. I got invited to a Woodrow Wilson convention a few years ago and I was I was the only Roosevelt person there and I um one of the things that has always bothered me is that Woodrow Wilson had Princeton because he was president of Princeton Princeton funded research and had a professor who did research, Arthur Link defended anything that Woodrow Wilson did for a very long career and most of the major American historians who are specialists in the early 20th century were either trained by Arthur Link or in some way touched by Arthur Link. Now Theodore Roosevelt didn't have that institutional ballast and so his memory Harvard never really did anything for him and they they have other presidents who went there so they didn't take him very seriously so there's never been a place where TR could call home and it's it's great that maybe Dickinson is willing to to take on TR and to become the TR center that Princeton is for Wilson but one of the things I like to tease my Wilson scholar friends about is that they often defend Wilson in fact one of them has just written a Wilson biography that will be out soon and I'm sure it's a shameless defense of Wilson. An articulate and well researched but shameless defense of Wilson because that's what Wilson scholars do most of them but it's one of the things that strikes me as different about Wilson was a great man and the League of Nations and his conduct of World War I was really historically important so the fact that we have a United Nations today and that we have a serious place the United States has a serious place in world diplomacy Woodrow Wilson deserves some credit for that although TR also deserves some credit but one of the big differences between Theodore Roosevelt and Woodrow Wilson is that Theodore Roosevelt looked into the future and said okay we're going to have corporations the government it's just going to happen and it's going to be good for the economy government's going to have to do some regulation and we're just going to not be able to go back to an era of horse and buggy small businesses it's just not going to happen why would you go back to the economy of 1800 why would you you wouldn't unless you were you know Woodrow Wilson campaigning in 1912 so TR argued for facing our modern America with energy with the strenuous lives with enthusiasm and courage but he also argued that the keystone of American nationalism had to be what kind of a humane society we created in the 20th century and so I think he was much more sympathetic to social security unemployment insurance he was more sympathetic to women's suffrage than Woodrow Wilson which seems like we look back and we think why were they so slow about this but TR was a man who embraced the modern age and wanted to accept it with energy so let me stop here and I'm delighted to have been invited to this symposium I hope you will have many years ahead of being the the Princeton of the west in the sense of this is the base that this is the home base that TR has always needed he always needed an academic base to have knowledge gathered together and to be a place where scholars could come and talk about this very very important president and I wish you well in this exciting journey thank you


Thank you very much. Welcome, ladies and gentlemen. This afternoon's very important session on visa openness. We talk so much here this week in Kagawa about connecting Africa's resources, how can we connect our resources if we can't travel around the continent, where 55% of African nations require visas, so a main driver behind enabling better regional trade, regional movement. Dyma fod yn ystod y llwyddi ar y cael yr aflwgrifedd, y Cynghreif Llywodraeth, ac mae'r cefnod Fyraig Gael Llywodraeth nid yw'r unigllun yma. Fod a lawrwch mewn cyfrif gwaith i gyrs continuefyd yma o gyfraeg maes yng Nghaerdydd Llywodraeth. Mae'r llwfodor allan o gerdyniadau mythaf am yr ymgymru, oreid cael yr ymgyrch cyfarid yn digwydd y panel, mewn cyfraeg mysgau i'r Cynghreif Llywodraeth, Ia Degi Adasina. We all know he's the president of the African Development Bank based in Abergan. Great to see you again. Another co-chair this morning, Dominic Barton, Global Managing Director of McKinsey and Company. Thanks for joining us again. John Moreng, you're very pleased to have you here this afternoon. Chief Executive Officer of Rwanda Air. Of course you've been involved in efforts to open up the skies of Africa, so I'd like to hear your perspective as a business leader. We'll also be joined by Carlos Lopez, Undersecretary General, Executive Secretary of the Nations Economic Commission for Africa, based in Addis. Carlos is unfortunately just tied up on the BBC debate. He's just finishing now, but we're going to start without him. We don't want to wait any longer. President Adasina, maybe I could ask you to start by outlining some of the key findings from the report. Well, thank you, and welcome to this session. First, let me say that as we all look at the impact of the global commodity price shocks on Africa, all eyes have to turn into what really happens in the regional market. I really believe that as we develop the regional markets in Africa, we will reduce the susceptibility of Africa to these global commodity price shocks. And for that to happen, it means that we must expand significantly the level of regional trade we have today. African countries only trade 11% among themselves, and that is far below the rest of the world. If you look at Asia, it's worth over 40%, and if you look in Europe, it's about 70%. And so Africa needs a bigger size market, it needs a better integrated market, and it needs to have the mobility of people to be able to move across to do that. Some progress is being made. Already intra-Africa business investments, we talk so much about foreign direct investment, but investments Africa to Africa investments have expanded significantly from $10 billion to now $50 billion a year, which is a very good indication of how things are going. However, there remains a couple of challenges to being able to succeed with regional trade. First is still high tariff and non-tariff barriers, so you have infrastructure challenges and power on roads and ports and rail and also transnational highways, and you still have sometimes a not very favorable business and investment environment. But the most critical thing that we are talking about today is about the ease of travel. And that's why the African Development Bank launched the Visa Index, the Visa Openness Index, together with the McKenzie and also with the Global Agenda Council of the World Economic Forum. Essentially, what is it that we are trying to do? We are trying to drive a continental visa policy reform program for all of Africa. We want to make things very simple. We want to remove many of the challenges and the procedures that are facing many people when they travel. We want to make sure there is reciprocity on visa issuance across countries, and we want to promote talent mobility all across Africa. And this is a very important tool for being able to achieve the Agenda 2063, laid out by the African Union Commission. So what are some of the findings of this report? First is that Africans need visa to travel to 55% of African countries. Africans also need to get visas to travel to 25%. They can only get visa to travel to 25% of the countries. And Africans don't need visas at all to go to only 20% of the countries. And if you look at the issue of openness, if you take East Africa, Central Africa, North Africa and Southern Africa, you find that the openness index is much better for East Africa, but also for West Africa. The openness index is much lower for countries that are in middle income countries. It's more difficult for people to travel, for example, in the openness index in North Africa. It's actually much worse than anywhere else. I think the progress that has been made in the ECOWAS protocol, but also in the East Central Africa protocol, accounts for a lot of the success that has been recorded. What are some of the solutions that we propose in this report? We should make it easier for people to get visas when they arrive in Africa. We should have visa-free regional blocks, just like we have at the East Africa community. We should have regional block visas so you can actually go to a region just like the Schengen, and you have that kind of open movement. Africa spends a lot of its time on issuing single entry visas, and that's very expensive for travellers and also investors. We should have multiple-year visas, 10-year visas. There's no reason why a businessperson has to go back and get the same visa 10 times. Just 10-year visa for business investors to be able to invest across. We also think it's very important to simplify the visa procedures and also the level of documentation that is required. Finally, it's that we must eventually move to the Africa passport that allows Africans to move freely all across Africa. This has been proposed by the African Union Commission. We are strongly supportive of that from the African Development Bank because we think it's going to make Africa to Africa investments much easier. Let me just give you an example of how difficult this is. Aliko Dangote, which is Africa's richest man, told me at the Africa CEO Forum that he needed to go to some countries, but he wouldn't let him in. You don't let your richest African into a country just because of a problem with a visa. That just tells you how difficult that issue is. Just to close, I want to say that this is something we are going to be doing with our partners every year. We will release the next one by February of next year, and that information will now begin to look at the cost of actually issuing visas and also to see how we make progress with e visas in Africa. We are very delighted about it. We think it's fundamental to how we have labour mobility and labour market integration and also promote investments in Africa. Thank you. Dominic, my simple question is here with all your vast interests at McKinsey companies. Why you got involved in this scheme? Well, for a number of reasons. I think President Adesina did a great job of laying out the context and the benefits from growth. The need for a more regionally integrated economy will lead to more growth. We won't be as dependent on external factors, so there's a lot of the rationale. But to be very selfish about it, when we look at Africa, there are 700 companies that are over the size of $500 million in sales each. One could say that's small or large. I think it's actually small for the size of this continent and where it is. But one of the biggest challenges for those companies in becoming more significant, and by the way, there's not a single African country in the Fortune 500, which I think again makes no sense. I really hope that that's going to change. But to be able to grow and build the depth of expertise you need to scale and you can't scale if you're just restricted or limited by your local national market. So the ability to be able to play across a broader set of borders is vital to the vibrancy of the corporate sector. So at a very selfish level, having more free movement of people and resources is going to make a significant difference to growth and to the success of these organizations as we go through it. I think that we're again very proud to be part of this effort and we have to start somewhere. And I think the benefits of allowing openness of people to move across borders is actually a key part of actually improving also growth in national economies. I think there's been too much of a view of a zero-sum game. If I open it up, are businesses or are there going to be social costs in my national economy that will be badly affected. And evidence shows quite conclusively out there that in regional trade agreements that you have, and I would look particularly to the NAFTA agreement, the North American Free Trade Agreement, very politically difficult. I think it was only passed by one vote in Congress when it went through. The combination of those three countries together in terms of what it did for the collective are very significant, so they're difficult. So again, we have to start somewhere. We're in the digital age or we're talking about the fourth industrial revolution. The fact that it takes so long, especially for people within Africa to travel in Africa is just an ancient regime in our view. So we're excited. I think we need to monitor progress and I think having this index will be an important peer pressure for us to be able to monitor progress and really begin to accelerate more of the regional integration. If you can't measure, you can't improve. A brief welcome to Mr Lopez. Thanks for joining us.  Let's take the view of the business leader here. So Mr Marengi, what does it mean to you having a more freer liberal regime in terms of moving people around the continent as head of Rwanda Eir? Oh my God, thank you very much. First of all, that's great news to us as operators. You probably appreciate the difficulty that we go through. First of all, Africa is not rich as yet to be. And with that, you find that all these barriers that are put by our own governments just keep pulling us back as businesses. To put this into perspective, you realize at times that it's so difficult to even get a visa in countries where our people live, because there are no embassies in some of these countries. And then you have people having to cross into another country to look for a visa. And that is all unnecessary expenditure and time consuming and get back to travel. So that is traveling within the same African continent. But more to the business. I mean, naturally it will contribute more to what we do. Once it becomes easy and free for people to move from one African country to the other, you can imagine that is all that we will be looking for that will increase the traffic in terms of business. But also something else that I want to throw here. While you're working, like the president of the ADB just mentioned, when you're working with the bureaucrats and the politicians for that goodwill, please also throw in something else that is rarely discussed and this is from our perspective, liberalization in the sky. And that is also very important because for now most of the African sky is not liberalized. So we as operators are extremely competitive. We are exposed to airlines beyond the continent that have more access to the continent beyond what we as operators within the continent can even access from governments. So it's again a problem as you put it where people think that if I open up probably this is going to unload my value, but let me also share that in Rwanda we have already done it and I mean as an airline we played our part to make sure that happens. We have removed visa requirements for all Africans travelling in the country and let me tell you there are not a million Africans that have been swam in Rwanda to stay legally or anything. So it has only from an airline perspective it has only made us more value, more business today you can pick up passengers that are transiting out of Kigali but just because they want to go into town and see friends or even just do some little tourism stay over for a day or two and then continue with their journeys and the other way round has always worked but we are not getting any respocation from anywhere else and I hope this study is going to kind of push our people to get into life but what I want to say is it's a great idea I hope it can happen tomorrow. Interesting to see whether there will be a joint momentum for visa openness and open skies. Mr Lopez, alongside your work with UNICA you are a chair of the Global Agenda Council on Africa why did you select this project as your major work stream? Well we are very proud of this work stream and the results it has produced so far and a word of gratitude here for the African Development Bank that has been behind stabilizing this new initiative through support for the research and housing it within its various initiatives and it is part of a larger effort of the Global Africa Council to really give credit to some progress that has been made in the reflection about human capital for the development of the continent. Reflection now has to translate into implementation and policy design and it's happening and I think this index is going to be part of a larger effort that is championed by African Development Bank ourselves, the Economic Commission for Africa and the African Union to expand the discussion about regional integration to a larger number of indicators than trade. Trade is very important obviously and by the way Africa has been progressing on intra-Africa trade more than people think over the last five years about 4% increase which may sound small but it's quite significant if you actually contextualize and know that all of this has happened in regions other than North Africa where trade integration is the lowest but then you have a number of other factors of integration and human mobility is extremely important and if you look into the human mobility history in Africa despite our proclamations of Pan-Africanism it has not been really a very good storyline. Africans have been protagonists of 27 mass expulsions of migrants from other countries. This is really tragic and it continues to happen. The latest example is the debate that was very prominent in South Africa last year and I think it is for us time to really check what leaders are doing and governments are doing in terms of human mobility and this index is the instrument to actually be able to do so. I think when you regard the continent as being bigger in terms of land mass than China, India, US and most of Europe combined and you think that we only have about 90 aerial apps or aviation apps and only about 63 sizeable ports you can see how much integration we need really to make progress because this is an indication of failure in terms of taking into account the opportunities that are offered by a growing market that has already more than a billion people and it is going to grow to 2 billion by 2050. Thank you. Thank you. We are running out of time. I do want to have time for questions. Having read a bit about the report myself when it was prepared but preparation started three years ago only five African countries offered liberal access to all Africans but that number lept to 13 over the three a period. There is progress there. Let's see who has got the first question. Gentleman on the front row. Peter, I know your name but could you please give it to the rest of us on the audience online and who you are? My name is Peter Holmes Accord. My question to the panelists is just to get some context for this. What do people think that we are really talking about in terms of the population percentage of America this impacts? Are we really in low single digits of Africans that have passports but substantially higher than that percentage of Africans who cross international borders informally during the year. Aren't we talking about one, maybe two percent of Africans who travel on a passport for their international travel? Just getting the context from the panelists. Mr Lopez, I think I'd be a good place for you to start off. Yes, I can respond to that. In fact, most of the travel, if you want to call it that way, in Africa is protocolized by migrants that do it informally. You are right. I live in Ethiopia over the last six months more than 100,000 additional refugees enter Ethiopia. Obviously they didn't have a passport. So human mobility does happen in Africa in great numbers but not necessarily the formal way. But one explains the other is because there is absence of human mobility easiness that you have also situations where people have to find a way not through the formal means. It's not very different for trade though. Most of the trade by road in Africa is also illegal if you want to call it that way. It's informal. Not necessarily in areas where there is already a high degree of trade integration, like South Africa Customs Union. You don't need to do it because it's already part of the single market. But in most of the rest of Africa it is happening all the time. So even our statistics on trade have this deficit of quality that you have rightly pointed out. Let me just say that somebody who there was a time I travelled to one country many years ago and I arrived there and the problem was because I couldn't get a visa on arrival I was actually locked up and I was actually locked up and this was many years ago and after a while I sorted it out because it was a problem of you couldn't get the visa on arrival but then others that are not Africans who are coming for the same meeting could get the visas on arrival. That's how absurd this is. What's your point in terms of the issue of the proportion that is affected? You know, even what it affects is even 5%. If you got 5% of investors that want to invest a lot of money in other countries of course the experience they have is like the kind of experience I have that's a lot of money you've lost. Maybe you probably have a billionaire that you've turned away and that's it. And so I think it's not even so much of that is the fact that we want to improve the ease of people travelling and the ease of investment and doing business all across Africa. The second is that when you have like the ECOWAS passport or like the East African community passport here you want to have a communication. Yes we want to have mobility but it has to be we have to be able to account for who's moving because we also live in a world in which you have a lot of terrorist attacks and a lot of people that have on toward attitudes. So we want to be able to track that and I think that is why we think that you can have a form of identity but that identity card must allow us to be able to travel freely and so I think that's very important and I agree with him. A lot of trade that we have in Africa it's largely informal trade but if you don't have documentation sometimes when you make those trades people market women get cheated just because they don't have a form of identification so I think this should help quite a lot by having regional blocks for visas for people to be able to travel back and forth. Thank you very much. Unfortunately we have no more type of questions and schedules this afternoon. Thank you so much for joining us here wishing you the best of luck looking forward to the next year's index. Thank you all for joining us watching us here online and in the room as well. Thank you. This is now closed.


Hey everyone, I'm Jha with CalTV Entertainment and I'm going to be telling you where all the hottest spots are to go for Valentine's Day in Berkeley. Here at Memorial Glade, it's very intimate, very close, get you a nice picnic basket, get off your phone and talk to each other. So if you're looking for somewhere, a little quaint on campus, very close to you, I definitely recommend the Bears Lair. Campus-wide menu, all of their cocktails are specialty towards Cal and it's just a cute place to hang around. If you're under the age of 21 and you don't like liquor or simply just don't like drinking liquor and your significant other loves boba, I suggest coming to share a tea. It's right across the campus and it's awesome. Lastly folks, for all my singles out there, I would suggest going to Spats. It's right on Shaddick and they have a great, great, great liquor selection and you get to spin the wheel for fun. I'm Jha with CalTV Entertainment and thank you. Hello, I'm Justin Jeon. I'm on CalTV.


Okay. I've been working with Ember for a while. I'm talking about my experience building web apps with Ember. My name is Miguel Canba. I'm from Spain, obviously. You can reach me in any of these places. And I have, I am entitled to speak here, because I know how to pronounce Ember any way. I've been working with Ruby and Ember for a while, but like most of you I imagine mostly in desktop. And the thing is my most complex project in Ember probably is this one. It's an online video game in Ember. It's a fantasy manager, a football fantasy manager. And there is a few interesting facts about this game. It's a very big project. It has been two years in development. It's began in Ember 2.0 Beta 6, something like that. So it has been a long way. It's almost up to date, I think. It's not in HTML files, but it should be soon, very soon. It has a very complex UI, like an action house. You can see the match in real time with the ball moving around. It's quite complex. And we also have a huge amount of users. I think now it's six million. And we have a web Ember client and native apps, iOS, and Android. And at the time we tried to see, okay, let's see if we can build this. I mean, the mobile, the desktop was the first thing we did. And we tried to say, okay, let's move this to the mobile and see if it works. That was in Ember 1.5, I think. We made some tests. But the main market of this is Europe, Southern Europe, Spain. And I think a very big market is South America. And you can expect people in South America have the latest devices. I mean, iPhone 6 Plus and everything. So performance was very critical. And we decided to go native for all. And I think it's a good thing. But I learned a lot of things there. And the most important one is if you want to make money, and it's why we are here. Not here, but in the profession. And we wake up every morning and go to the office and everything. It's that we need to think in mobile first. I mean, it's something that you heard very often. But it's very true. I mean, these are some numbers. The last time I checked, there was around four million players that registered in the game using the desktop client. And 500,000 players using the iPhone app, not even the Android. The Android was not released at this time. This took two years and this took two weeks. You can see that there is a huge difference in users. And this is in a market, Spain and South America, where 93% of the devices are Android. And this is the iPhone app. So it made the numbers. It's very important to be on mobile. There is the Android. I mean, this is where the money is. But I have some numbers to share. I mean, this is from our search of the GSMA, the mobile consortium that builds networks and everything. These are the numbers of the internet a year and a half ago. There is around two millions, two billions of users, American billions of users with landlines in the world. And pretty much the same number of users with mobile connections. But in five years from now, there will be around twice as much users in mobile than in desktop. And this is very important. These are us now, us in five years. This is the third world and the second world, South America, Africa, South Asia, et cetera, now and in five years. We are about to grow at 15% and it will double the size in five years. So in advance, on top of this, we have to think that there is a lot of devices in five years that are pretty inexistent right now, connected cars. There is already a bunch of smart TVs, but you won't find a smart TV in five years from now. Every smart TV will be a smart TV. And the internet of things, which we don't even know what it is, but will be something. So there's a very important thing about being native or going to the web, because if you go native, you need to choose one path of the other, or both, or three of them, if you include Windows and Linux and everything. The web is the only platform that will be in every device, you can imagine. It will be in cars, it will be in phones, it will be in everything. That's a huge selling point for doing things in HTML. So right now, where are we treating a good mobile experience like a nice-to-have, like something, okay, it's nice that this scale is very well, it's responsive, but right now we develop thinking in the machine we are developing this in this laptop. But my products will more likely be used not in my laptop, rather on my phone. I carry my phone all the day, but not my laptop. Having a good mobile experience is core for your business. When I came to London six months ago, now I am a freelancer, but I started working on this company, that business, it's literally a name. And it's a company that makes native apps. I do the Ruby and I do the backend of many apps. And I learned something there. UX is very important. Product owners used to care about the thing they sell. I mean, this app needs to show the news or receive push notifications. But people, for example, from Google, for the Chrome team, they made a survey and they discovered, they ask users of news apps which feature they like the most about using an app and not a web page. And they thought that the response would be, we have offline news and we have push notifications of important news. And the answer was, no, what we like is that the UX is very smooth. And people care about these details. So as developers right now, we are kind of in the middle ground between designers and coders. I mean, people doing our job, for example, people that work in Ember. We need to care about the sign. We should aim to be in the middle. This is where I am. So what makes an app appealing to a user? Appealing means at the end sales.  Basically, there is three pain points in mobile apps that we need to fix and we can fix right now. One of them is we want our apps to load fast, initial load, respond fast, and work offline kind of. It's not everything can be done offline, of course, because we need communication, but it should at least not break completely. I'm not going to talk mostly about the last two points, but about how fast there is a few things like us as a community can do right now. There's a few interesting things coming. The first one is specific to Ember, it's Ember fast boot. I mean, when we load a single page application, we first of all load the HTML, then we discover the assets, like the JavaScript and the CSS. We request them, we get them, and afterwards we boot our app and probably make another request to the backend to load the initial payload. I mean, something maybe our user or the news or whatever. Ember fast boot pretends, this intention is to make everything in one request. So we query our server and there is an Ember app running on the server. It renders the HTML, sends the HTML and the assets and everything, and as soon as we have the HTML, we can display something. We can show the app to the user. Even if Ember is still loading things in the background. In fact, they are even making experiments to kind of serialize the initial payload within the HTML because you can basically serialize the entire store and then pretty much dump everything into the store and you're ready to go. This will make our application much faster. Another thing people is working is removing jQuery as a dependency. We want HTML to be lightweight and it's not. So the first step is basically remove things that are not mandatory and make it optional. JQuery should be one of them. Another is tree shaking will be much easier when ES6 models are kind of finished and established. The idea is if you have an app that only uses part of Ember, why do you load all Ember? Things like maybe sets. Maybe you are not using sets. In fact, I think they are deprecated now. I don't know. So the idea is if you can know in advance, given the models you load, which part of Ember, what part of Ember are you using, you can just make a custom build with only the things you need. And these two are just general for any web application. HTTP2 will make things much faster because you can make server-push content. So when you request HTML, your server can know, okay, this guy is requesting the HTML. And every single person that asked me the request the HTML, they also want the CSS and JavaScript. So take it. I know you will need this. And browser catching. So why do I need to download the entire app each time I enter? If you go to the store and buy an app, you don't load the app and you have the app forever.  So if we can cast this thing, you only need to make a request once in a month maybe, depending on how often you deploy. This is an interesting one. Response fast. We want, as I said, very smart, very smooth UIs. And a fast UI is how much time there is between when the user makes an interaction and when the user gets the feedback. When we use the input, when we are talking about mobile, we are typically talking about fingers, I mean, touching things. It happens that we still think in clicks and drags, and it's not the case in mobile. We have another event. So please, right now, since this very moment, please stop using this. Have something like this. Use the touch start, touch move, and touch events. It's kind of the most down mouse up, but they are native. And you prevent the default. So if you are on a device that has this kind of events, these events will fire, and this won't because it's prevented. So you will have the immediate response of a touch start, immediate response of a touch start event. And if this is reused between mobile and desktop, you still have this. So you can have the instant speed of touch events without having to mimic the click, which is a hack. Browsers implemented this fallback from touch events to click because at the beginning there was no web pages prepared to this. I mean, you need to, okay, someone taps here, and if nothing is listening for this tap, means, okay, it's a click, and it works. But clicks are atomic. They are not native. In fact, in iOS, by example, they have a 300 milliseconds delay. And touch events, on the other hand, you have fine-grained control because you know when the touch begins, the touch ends like with mouse down and mouse up. They are native, which means these are the actual events the browser fires. And the click is something emulated, let's say. And it's instantaneous. I mean, if I listen for the tap-start, tap-start fires immediately. And extra, you can have multi-touch. There is not something that people using two mouse to make things. And the other part is how do we update the app? There is this graph I take from a presentation of the Chrome Dev Summit. People, users receive the perceives things as blazing fast, instantaneous, when it's below 100 milliseconds, more or less. When you have something between 100 and 300, it's pretty fast. This is where people start to, okay, this is uncomfortably slow. And when you surpass the one second, people actually start to make questions. Did I click this button? The app is frozen. People doubts about, okay, maybe I did something wrong. So this is the pattern we usually follow when we develop apps. We make some kind of gesture recognition. So we detect a swipe.  So we fetch the data, wait for the data, and then we display the new route. Something like this. And I have a few videos. Let me put it on... No, this one. Speed, a quarter, play. I make a swipe. I want to lift the finger. I did the swipe. I command to make a transition. And I transition. Let's put it in. I made a sweep, lift the finger, and then it's when things happen. But there is nothing here. It might even seem like an accident. I'm here, and suddenly I'm in another article. I don't know why. Because when you think about UX, animations are in fact something that are not just... because it's pretty. It helps to build mental models. I have a very... When I think about good UI, I always think about material design in Google. I mean, you don't need to follow the rules of material design or the patterns or have these guidelines. But as a general guideline of who to build a good UX, this is quite a good resource. This is an animation. You click something and things fade in or come in from the side. And this is the same thing. Just like popping or appearing from nothing. In actual things, maybe apart from lightings, nothing happens in a fraction of a second. When something appears, it appears from somewhere. There is animation. This helps the user to understand what they are supposed to do. I have another video here. I'm sorry if I haven't shown any code yet. There will be some demos. This is the same thing, the same app. But in this situation, I have the animation. I made the gesture at some point. I made a swipe. And the things come here. This is not displaying the content any faster. But if a user makes a swipe to the left and goes to the next news, the next article, he knows already that if he makes the opposite move, he will go back to the previous article. So this is why using animations wisely can help you to build a good user experience. But there is a point where this is not fast enough and we want people to have instant feedback. So if you can't make a network request go faster because there is latency and you can deal with it, you need to make things look faster. So a way to make things look faster is... No, I'm sorry. This is, again, from this very good talk by Paul Lewis on the Dev Summit. When a user makes an interaction with a screen, there is a few moments. The first 100 milliseconds, the user doesn't perceive that his action has ended. Which means you can make work here and at the end, when the animation ends, there is a few milliseconds where the user realizes that the animation has ended and he can continue working. So taking advantage of this, we can make things happen in parallel. So if instead of gesture recognition, we make gesture tracking, so instead of waiting to the gesture to end and know that this is a swipe, I can recognize that the gesture is going to be a swipe because it looks like a swipe. Eventually, he will lift the finger. So why wait? If a user makes a swipe, let's fetch the data and update the view even if I don't have the data to fill the view. And afterwards, make the transition. So the same slow speed. When you move... No, this is a false move. Now, you have the card coming in. You have the... You can... I mean, the user knows that the application is responding even if I don't have still the next article recovered from the server. So the user... When the user sees this, he knows even if the information is still not available, he knows that the application is working. If a user has instant feedback, he knows that everything is going okay. And it makes two happy users. So that's why it's important to make things happen as fast as possible and delay maybe updating information to the point you can, but you already have shown the user that everything is working. And if you do this, it's very easy to say, okay, I have the pieces when the network is bad, this is the work, but when the network is fast, when the network is smarter than the network, I can preface the content. I have the best experience possible. People don't need to wait.  And this is a mobile webpage. I mean, there is a lot of reasons to use native apps, but there is a lot of reasons why web apps can be better from some kind of applications. So if we want animations to help us to improve the sense of speed in an app, they have to be smooth. That's when the frame rate crumbles. That's when they defeat the purpose. But JavaScript animation are quite hard. I mean, it's because to control everything involves using request animation, frame, makes the maths and everything. It can be challenging or at least cumbersome. So there is a new API coming to the web called Web Animations API.  It's like the Bastard Kit between CSS animation and JavaScript animation. But it has the best of both parents. It's a new standard. It's declarative like CSS, which means it's very easy to use and gives you full control of what you are doing because you can control from JavaScript what's happening. It also has nice features like CSS animation. It doesn't use the main thread. It can't even run on the GPU. So it means it's very performant when there is native support for them.  You have free synchronization. There is even some things it wasn't even possible previously like motion paths, which I define a polyline in SVG, like a mountain, and I want this object to follow this like if it were some rails and a train. So this wall moves following this strange path and it works. This is a small... Maybe it's a bit small. There. This is the basic syntax. Its element is a DOM element. So you can define a few keyframes. That's the origin. That's the ending. And a time.  The animation runs. And it has the same effect that having this CSS on a class, this CSS on another class, and add this class to the element. It just moves things around. You can specify animations, things like delay, the easy and iterations. And it works like if it were a CSS animation. But the key point is that when you call this, it returns a player. And with this player, you can post animation, resume the animation, play the animation backwards, change the speed, seek a given point of the time. You can do pretty much everything you want with this. So it means that you can control a CSS animation from JavaScript. There is a very good polyfill from the Polymer project. You can use it right now. That means you can use this on iOS, for example, that it's not supported right now. It's only supported in Chrome. And it's coming to Firefox. You can use this polyfill. It's not as performant this polyfill as, for example, GESAP or Green Sox or maybe Velocity. But when the support is native, it's blazing fast. I have a small demo here. This is the code for making the animation with request animation frame, the most efficient way, and with animations API. I have this diff, it's a red diff, and two buttons to trigger the animation. This is my code for the web animation thing. Yes, sorry. And then there, enough. Okay, this is the code for the web animations API. You define the keyframes, the options, and when I click the right button here, I just call animate with the keyframes and the options. That's everything I do. And this is the code using request animation frame where I request, this is my starting point, my ending point. And I call this function recursively to date things. And this is for a linear animation, not even easy and anything more fancy. You can see that this is with request animation frame. It works. It's just moving and scaling. This is with web animation API. It's equally smooth because it's a very simple transition. But let's see something very interesting. Let's go full screen with this. Okay, I have this here. And everybody's familiar with the timeline? Okay, if you want to develop for mobile, you have this open all the day. You need to measure things. This is, oops, this is, I have this here, this button. $0.click. I'm calling this from JavaScript to make it easier. And timeline, I record, I click this, I see animation, and I stop. These are my frames. It's very smooth. You see that it's almost in this. Here, this is the amount of time I'm consuming from my budget. This is the 60 frames per second boundary. So that means this animation is very fast. I'm not hitting any kind of bottleneck. It will be around very smooth with JavaScript even. Let's do the same with this other thing. Expect element. I do this. I'm selecting the other button to measure. Timeline, a bit less clear. Record. Let's play the animation. And let's see our frames. There is no frames. This is because it's not running on JavaScript. You can't measure what is not running. This is happening on the GPU. So there's a few situations where JavaScript animations are still faster than CSS animation. But you can improve these things as much as you can improve things using the engine of the browser. So you can expect CSS animation to be much more performant in a year from now because of this. Because now browsers can make everything happen in C++ or whatever language the browser is down. And you have the performance. You are as performant as you can be. You have the main thread for your app, which is nice. And I have a bigger demo. This is the same app you have seen before. I have this, I click this, and I can move this around. And there is something I want to show because it's a very simple use case of how to take advantage of this new API to make things very easy. Look at this. I have this menu on the bottom. And as you see, I move it dragging around and I have this cross on the top corner being animated along with the movement. Let's see how I did this. Maybe. Maybe. No. Not this. Here. Let's open the slide menu. The slide menu HVS. No, the application HVS. And I think it's everything I need for now. I know. I need more things. The toggle menu and the overlay here. Let's put this on the side. If we look at the application HVS, we see that we have this slide menu. Yes, sorry. We have this a bit more. We have this slide menu, which is a component. And I deal some contents, which are the links that the menu contains. I also have this other component, the toggle menu, which is the button, the hamburger button on the top corner. And I have this overlay, which is basically, if you realize here, this is becoming darker because I have another layer on top of it. And I synchronize everything. In this case, I have this set of animation, which is called when this element is added to the DOM. And as soon as this element is on the DOM, I want to prepare the animation. So I cast the width because it's performance. And I create this animation. New animation is something that the polyfill provides you because you can, instead of calling element.animate, you can instantiate a new animation object and pass the element. The difference is that this doesn't start animation right away. If you do animation, the animation starts when you call document.timeline.play and you pass the animation to this. And I'm sending this animation with a send action to the controller. I'm doing the exact same thing here in this other component, which is the overlay. And the same thing, which only is in case animation, it's more complicated on the toggle button. And in the controller, it's application, maybe? Yes. I have this set of animation, which basically, it's time I receive animation. I push it into an array. And I schedule things on the after render because I know that in the after render, everything will be added. So I will have all the animations already prepared. And what I do is to create an animation function, which what it does is create an animation group. What I do is I create an animation group, which contains these three animations. And I command document.timeline.play this group. If I tied these animations together, they mean I have only one player to control them all. So I can move the animation back and forward, changing the time. And I'm basically calling this recursively on all the inner animations. So I can control every animation with only this little code. By example, in the slide menu, I have a few events. But this is the touch move event. I have an abstraction. You don't care about this, the gesture. To detect swipes, if the speed, something I did. But I just say this.player.currentTime equals some math I did to say, OK, this is the 50%. So I changed the time to the, if this animation is two seconds, I set 100 milliseconds. Sorry, 1,000 milliseconds. And I am in the middle. And everything is in the middle of the animation. So I can control things. And the same things work for sequences and everything. So you can have very complicated animations and control it very easily with one liners almost. And the other part is working offline. I hope, I really hope you like this icon. I learned how to use Adobe Illustrator just for this. What if I tell you that you can make your app work offline in 20 lines today? Only Chrome, but yes. They're introducing service workers who heard of service workers before. It's the best thing since Battle Cream. This is all the code you need to make your app offline. Everything. This is one of the approaches. There is a few approaches to make this offline. This doesn't work for every situation. But a service worker is a worker, like the web workers, which means it runs in a separate thread. But unlike workers that don't have network access or DOM access, but this doesn't have DOM access either, they are intended to intercept the main thread request. So if you perform a request from the main thread and you have a service worker register, and with this FetchEventListener, you will get, I mean, this code will be executed before the request actually outputs, goes out from the browser. That means that if I get this request, the requests that I streamed, that's why I'm cloning because I stream can only be read once. I'm cloning things. This is the request, the fetching request. Wait a minute. I don't remember. And this is, I want to respond to this request with an actual fetch to the server. So if I get 200k or I just get a request successful, I can, I have the cache, I fill the cache with this response and I return whatever I get. So that means I have just cached this response forever. I mean, if the content, if your content doesn't need to be cached because it needs to be updated, you can't use this, but, and if something fails, I try to read on what is on the cache. That means if I am on airplane mode, by example, and I try to access a web page where I have been before, first of all, I try to make the request, I have no network, then I look in the cache. It's in the cache. The user doesn't realize. It's served right away. And this is the code you need to register the worker. This offline support file contains these 20 lines. And a small demo is, again, this thing here. No. Here. This is the same app. I've been here. And I basically, I've been in all the pages. So if I go here and stop the browser, I go here and reload. It works. I mean, it's, I can navigate. I can go to everywhere. I can be here. Newspaper here. Change the animation to something different. Everything works because, and it's 20 lines. 20 lines of code. Sorry. It casts by URL. So yes, it includes the mine and port. There is a restriction to this. Like many other features coming into the web, you need to use HTTPS to have this thing available. Or be a local host, which is basically useless. This is how it works. You have the page. The page makes a request. The service worker intercepts this request and runs its code. Its code, what it does is basically makes a network request. And if I get a network request, I populate the cache and returns the very same request. If I don't have network, if this fails, I will hit the cache and return whatever is in the cache. And this is only one approach. There is a lot of other patterns. We can prefetch content in advance, because this, we can use the cache always and only fall back to the network when I don't have this thing in the cache. It's the opposite thing I'm doing. This is what I call the offline first. In the cache, this is the right content. Save things for later, like I read it later. I want to make this, I want to read this later. And based on a user interaction, I command the service worker to request this URL and store it for later. Or return whatever is in the cache and make the request in the background. So the next time I have the more data. So it's not very important to you to have the most up-to-date information as long as you are very fast. Or this is very cool. And it's not, we're not yet there, but this is very close. Listen for pass notifications, push notifications. Even when your app is close, because when you register a service worker, it's alive forever. So the browser is listening for post notifications or for messages from the server. And when you go back to your app, you have all the information there. Or you can use the native push notification service of your operating system to actually show things. There is very, very good blog post, kind of a cookbook for various types of Jake Archibald is a guy working in Google and kind of the main promoter of this technology. When you can see a lot of usages of this technology, even many, very, many crazy ideas like having your framework running on the thread. Because you can, on the initial request, maybe request a template, have some code that knows how to use this template. And from that point on, you request JSON, mount the HTML on the worker, and the request returns HTML. And you just display HTML. But it's possible. I have a bigger demo. I don't remember. Ah, yes, I do. The difference between this and something that exists in the past named App Cache is that you have full control of the request and the content. That is a very low-level API. That means that you can do pretty much whatever you like. And in this application, maybe you realize that here I have this sign. I know that I have no connection. And this is why, in the code, I close this offline support. This thing here. And I have this thing. When the request fails and I return something from the cache, if this request is from an endpoint that matches this regular expression, so the API, it's a JSON request, so I can open it, add information to this request. In this case, I add a meta offline support worker equals true. And send the request back. So I create a new request and send it. So basically, I intercept the request and add metadata to know, hey, this request has came from the cache. Deal with it in a slightly different way. And in my app, what I do is just every time in the app there, every time I receive a request, if it has this meta, I just enable this icon and that's it. I mean, it can be done, but this is just an example, but you can actually tamper your request and make things happen. So please don't wait. I mean, this is so, so powerful as something that you can start using right now. Even if Reynolds only works on Chrome and I think on Firefox behind a feature flag, it's, I mean, if it doesn't work, if, I mean, doing this feature detection, if it doesn't work, you just don't. And if it works, you have an offline experience almost for free. So go ahead. I mean, there is no harm. And that's everything I have.