Remaking a game as beloved as Final Fantasy VII was never going to be easy. Change too much, and fans are going to be upset. Change too little, and why even bother remaking the game in the first place? Understandably, stylistic and story choices made by the team at Square Enix have drawn the ire of fans. While we'd love to talk about some big changes to series canon and how Final Fantasy VII remake ends, we don't want to delve too far into spoiler territory. So instead, let's talk about character design. Some particularly vocal fans have been frustrated by the appearance of Tifa Lockhart, who has been reimagined as an athletic brawler in sportswear. Rumour has it that Square Enix's shadowy ethics department cooked up a conspiracy to change Tifa. These rumours actually are true, sort of. There is an ulterior motive behind Tifa's costume change, although not the one that people might expect. The original Final Fantasy VII is very much a product of its time, with big, chunky, adorably cartoonish characters that inhabit a vaguely steampunk world. Tifa Lockhart is designed to fit perfectly into this aesthetic.  Her costume would look odd on a real person, but in the confines of this fantasy setting, it fits the game's art style. In Remaking Final Fantasy VII, the team at Square Enix elected to make the world of Midgar fit with the art style that's appeared in more recent games in the series. Better graphics means more realistic character models, and that means losing some of the original Final Fantasy VII's quirky art style. Transforming Tifa from a cartoon character to a more realistic human meant coming up with a grounded explanation for her clothing. Real world equipment was used for reference. For example, Tifa's new braces were inspired by military gear, and she wears biker gloves. As Tifa punches her way through fights, it made sense to reflect this in her design. Thus, she was reimagined as an athlete, wearing gym gear to provide extra comfort while training. It's a decision that makes sense in the context of the story, even if the idea of trying to ground Final Fantasy in reality feels a bit counterproductive. Said game director Tetsuya Nomura, first of all, we wanted to give Tifa a six-pack, so we made her more of an athletic style. Then there were also instructions from the internal ethics department, and it was necessary to support the chest area so that it did not become unnatural, even in moments of intense action. We gave her a sporty and fitness-conscious look with a very simple top half with black underwear and a body fitting tank top. While redesigning Tifa, the art team also had to contend with the mysterious Square Enix ethics department. Representatives from this department worked closely with the team to make sure that Tifa's new character design wasn't too revealing. The name of this department sounds a little odd, and as such, it's hard to entirely understand what it does. According to a spokesperson for the company, in the Square Enix Japan studios, the ethics department is actually a group within the company that evaluates game content to make sure it is aligned with the anticipated age rating standards across the globe. CERO, ESRB, PEGI, etc. Essentially, the ethics department has the job of making sure that a game will receive the age rating that Square Enix is hoping for. The goal was to make Final Fantasy VII Remake appropriate for teenage audiences. While the American ESRB and European PEGI ratings boards were never going to cause Square Enix too much trouble, Japan's Computer Entertainment Rating Organization, or CERO, is a different matter entirely. The board is notoriously strict when it comes to representations of romance in gaming. In addition to keeping track of all violence and swearing in games, CERO also keeps detailed notes on every time game characters, quote, embrace, and kiss. This isn't to say that too many hugs will afford a game a higher rating, it's simply worth noting that CERO is paying particularly close attention to this type of content. Masahiro Sakurai has run afoul of CERO while working on the Super Smash Bros. series. According to the creator, the first thing CERO representatives will ask is to see all female character models upside down, so that they can check to make sure that it's not even possible to accidentally see a quick flash of underpants. The Smash team put one character, Palutena, in a pair of shorts underneath her dress to prevent any wardrobe malfunctions, but even so, they had to revise her design multiple times to appease CERO's strict standards on female dress in an all-ages game.  If you're more worried about something trivial like whether you can see some cloth than whether a game includes firearms, you clearly ought to get your priorities in order. It was under this climate that Square Enix established their ethics department, and with these incredibly strict rules in mind, they redesigned Tifa. This paid off, as the game ultimately received a CERO C rating, meaning that it's suitable for those aged 15 and above. And the moral of the story? Perhaps it's that you can't please everyone. Square Enix had to juggle the demands of fans all over the world, the needs of new players coming to the remake fresh, and a strict ratings board that refused to let original costumes pass by without censorship. Frankly, it's amazing that Final Fantasy VII remake is as good as it is.


Matt, the CEO of WordPress.com, called it their biggest organizational asset. Now in your head you might be answering that must be the people or it must be the money in the bank or it must be their source code, but that was not his answer. His answer? Their internal micro blog. In essence, this contains all the combined knowledge of all the people that ever worked for WordPress.com. This second brain for organizations is also the hidden superpower of DevOps platform GitLab and of telecom provider Voice. In this video we'll dive into why you would want a second brain for your company, what the four main pitfalls are, and how you can become successful in the usage of such a second brain. So why would you want this? Well, what happens usually when you have a question in the organization? You ask a colleague and that's a great way for a fast response, but it also has some major drawbacks. The first one is that it's one-on-one knowledge transfer and not one too many. The second one is that information gets stuck in people's heads and those heads aren't going to be available all the time so it's very difficult to maintain that information. The third one is that you interrupt somebody in a world that's set up for interruptions and it will take more than 50 minutes for them to get back into their flow. A solution might be found in knowledge bases but if we look at how organizations use these we see that they're often old, out of date, contain old information and aren't actively used or maintained. But there's one massive internet success story where we can learn from. Let's take some lessons from the biggest online knowledge base Wikipedia. The first one is that it's open to all. Everybody can read it, edit it or add information to the system. The second lesson we can learn is that you can do that without a login. There's no barrier to entry. And the third lesson we can learn is that it's linked information. Diving deeper into a subject is very very easy. So if these very basic principles work on the open web we must be able to implement them in organizations as well. Now there are loads of tools that can help you out with capturing this but if you select the tool these are the four elements you have to look for. The first one is that information should be opened by default. Having access to the same information doesn't only bring alignment, it also helps people make autonomous decisions. Number two, everything should be changeable by everybody in the organization by default. This makes information complete and up to date. Number three, document the optimal way not the only way. You have to look at the information that is being captured as a best practice but not as an only practice. You have to be able to divert from the default path to try something new if the situation asks for it. And number four, let people make mistakes. It's okay if information gets deleted, it's okay that information gets altered and it isn't altered in the right way. You can always revert back. It's more important that the system is being used than people making mistakes from time to time in such a system. So we have been experimenting with multiple tools over the past 15 years but two years ago we finally found something that truly fits us. It's very easy to use, it's open by default and this open for everybody to use. It's very strong in linking information, having multiple types of linking and it's very easy to let content live on multiple pages without having to duplicate the content. The tool we found is called Notion. Now I've got two more bonus tips for you but before I share these I would really like your help. There's a lot more we can say about building a second brain and using Notion at scale. We will go deeper into how we do that, how we structure information, how we manage information but also the theory behind it. If you want to see this in the future you can subscribe to the channel. But more than that I would love to know how you structure second brain for either your organization or for yourself so I would love to hear that in the comments. What can also help you is our three-part blog series about this topic and you can find links to that in the video description. Now for the bonus tips and the first one might be the most important one. You have to create a company culture that embraces knowledge management. Our knowledge base is called the Oracle and I often hear people in the organization say oh don't ask me you can find that in the Oracle and they often put an extra comment to it saying and if it's not in there put it in there. Now it's not that colleagues aren't willing to help. We often send each other links to the Oracle but it's more that we want people to be self-reliant in finding information. It helps with the autonomy and mastery we feel everybody in the organization should have and with these remarks documentation becomes a habit for the organization. The second tip is on when to start building this second brain. We started straight when we started voice. I documented everything that was difficult and I didn't do that frequently so I wouldn't skip any steps or have to reinvent the wheel every time I wanted to do something. This really helped new colleagues pick up tasks quickly because they were documented or take over tasks they wanted to do for the organization. So today might actually be the best day to start this. The compounding effect of creating this together is fantastic and for you it might lead to an Oracle that also becomes your biggest organizational asset. Thanks for taking the time to watch this video. If you want to learn more about getting the most out of yourself or your organization I can recommend the rest of the channel and I would love to see you in the next one. Cheers!


Hi, I'm Professor Stephen Nesheba and I want to elaborate a little bit for you on the reversible adiabatic expansion of an ideal gas. And namely, what I want to get at is figuring out how to express the pressure of such a gas as a function of the volume as it expands, given that we know that it's going to be following what we call an adiabat, which is a path through state space corresponding to a reversible adiabatic expansion. So here we've got our starting state, it's our reference state, pressure, temperature, and volume. It has undergone an expansion, so now it's going to be at some new pressure, temperature, and volume. In an indicator diagram, the idea is that I've got pressure here, volume on this axis. There might be our reference state, which would be that pressure and that volume and that temperature, the reference state. Since it's undergoing an expansion, we know that the gas is going to cool down. If it's a reversible process, then we say that it's going to follow this reversible adiabat and end up on this cooler isotherm. So this would be T-Rap and that would be the final temperature, which is cooler than the starting temperature. Now, the starting point on this analytically will be a result that expresses this change in temperature, which rearranged slightly from what you might have seen before. We said T over T-Rap is equal to some stuff and I've just moved the T-Rap off to the right. So here we have the final temperature, that temperature right there would be the starting temperature corresponding to that isotherm times the ratio V divided by the reference volume all raised to the minus C and this minus C is what's called the reduced constant volume peak capacity, which would be the actual constant volume peak capacity divided by N times R. So there we have that and so how do we get to really what we want here, which is expressing the pressure as a function of volume, because this is really the temperature as a function of volume to quite what we want. Well, it's easy enough to do. There's a temperature for the ideal gas in its final state, which would be PV over NR. There's the temperature for the gas in its initial state, which would be P-Rap T-Rap over NR. Now, because we're assuming that we haven't lost any gas along the way and gas constantly is a gas constant, those can go away. So that expression now turns into just this one, that PV is that PV, that P-Rap V-Rap is that and the same thing over there. There's one more step that we can do, which I'm going to just to have it, I want to have ratios of the pressure. So I'm going to divide by both sides by P-Rap. So I get P-Rap, P over P-Rap on that side and then I'm going to divide by volume on the right side. So I have V-Rap over V, that would be raised to the one power and then here's V over V-Rap, which you combine all of those terms and it turns into V-Rap over V raised to the gamma, where gamma is just defined to be one plus one over that same C that we started off with. So this is the, that's our final algebraic expression and it just says the ratio of the final pressure to the new pressure is equal to that quantity and you can kind of see that since we're assuming that this is an expansion, that volume is bigger than that volume and therefore the final pressure is going to be lower than the starting pressure, which you can see from there. Okay.


Let's talk about Cicero for a second because Cicero is an Epicurus and Cicero is an Epicureanism but he's the means by which we're going to learn about Epicureanism. So the first thing is that what is this book? This book is an English translation that was done about 10 years ago, or a little more, of a Latin work that is about a Greek philosophy. So there's a big danger of a game of telephone that goes for thousands of years and through big linguistic changes here. So we are very far removed from this phenomenon of Greek philosophy and specifically Epicureanism and we're reading it through an extremely mediated literary piece here. Now, say something about the overall purpose of this work which consists of five books. So Cicero, section 11 of book one tells the overall purpose. And he begins by saying that no one who is habitually and carefully read my philosophical works will judge that any is more worth reading than this one. So like I told you, I picked good books for this class and there's no one that is better by Cicero's own estimation than this one. And here's the reason he gives. For nothing in life is more worth investigating than philosophy in general. You should say period and that's just the conclusion that you need to come to. But he says more worth investigating than philosophy in general and the question raised in this work in particular. What is the end? What is the ultimate and final goal to which all our deliberations on living well and acting rightly should be directed? What does nature pursue as the highest good to be sought? And what does she shun as the greatest evil? So that's the overall point. The overall point of the book is what is the overall point, period, of everything in general and human life in particular. And this human life that you're living to be more specific. Now one more thing is keep in mind Cicero's philosophical allegiance. What kind of a philosopher is Cicero? He is an academic skeptic. Blythe Green lectured you all about the views of academic skeptics, the crazy views of academic skeptics if you think about it. For example, the view that knowledge is impossible. Cicero believes that. So if that's all true, then this book isn't going to produce knowledge as such. It can't do that. Its author doesn't believe that anyone can do that. So what does it do? It produces, it's an attempt to discern what is the most probably true view as a basis then for further action. Because remember, academic skeptics don't walk into walls instead of doors when they're trying to leave places because they reason probabilistically that a better way to get where I'm going would be to go through the aperture in the wall and not the wall itself. And they can reason like that without claiming that they know that that's absolutely true, but just that's what the balance of evidence seems to be, them to be true. So what Cicero does in this book is he goes through the leading ethical notions and he hears one side of them, hears a pro side, and then he hears a contraside which balances out that case for it and leads him to suspend judgment about whether that's true. Well, there might be something to that or it might, but a lot of things seem wrong with that. He does that for Epicurean ethics and then he does that for Stoic ethics. And then there's a fifth book that concludes and gives his view on what is most probably the true answer to the ethical question that he set out in that section. What is the overall end? What's the point of it all? What is the purpose of dealing with this life? So there is a very important structure here. Book one will give us a positive case for Epicureans and book two will take that case apart and then book three will give us a positive case for the Stoics and then book four will take that case apart and then book five will try to produce some results that we can act on. Okay, any questions about the overall structure of Cicero's work here? We'll be reminded of that each time we go to a new book. Now let's focus on book one. So each book consists of a dialogue that has named characters who exchange speeches and engage in a conversation about philosophy and each of them has a specific setting and a specific point in time and so it's a fictional piece that's made up about a place in time where some people got together and talked about philosophy and which characters speak and why they say what they say and why they're where they are and when they are all of that is significant to this and shouldn't be ignored. So first of all the setting is Cicero, a rich Roman senator and philosopher, his villa outside of just north of what we would what we call Naples now. Okay, so he's got a couple of big properties and he goes there and he writes philosophical books. He's got another one in Tusculum where he wrote a book called Tusculum Disputations and this one he's in happens to be in his villa in Cume. Now there are three characters. So his friend Lucius Torquatus is there and he is an Epicurean. He lives the Epicurean lifestyle and he offers quote in elaborate defense of Epicurus' theory of pleasure and there's a kind of guy in the audience, Gaius Triarius said to be a young man of exceptional seriousness and learning and he doesn't add much to the conversation and he agrees with what everybody says. Yes, yes, you're quite right about that. Oh, but you just said the opposite was true. Oh, well that's true. Sorry about that. He kind of gets instructed. There has to be a student that, you know, we're all trying to convince, right? And that's sort of the structure of it is that Torquatus thinks that Gaius should, you know, sign up and believe all this Epicurean stuff and live this lifestyle and Cicero says I'm the one who gave the response meaning he was the skeptical interlocutor who came back at him but he goes rather light on him in book one because the purpose of book one is to expound the theory and it's not until book two that he takes it apart and tries to show how it's all wrong.


We are back here in the studio at Davis Media Access. I'm Autumn LaBaye-Renau, and I'm your host today. I have with me some guests from Paradise, California, and we're going to talk about the work that's happening up there to rebuild Paradise in the wake of the devastating campfire last fall. My guests today are John Waterman, who's the team leader for the Paradise Rotary, and Vicky Perez, who is also with the Rotary, and then Mark Thorpe, also a Rotarian, but here representing the Paradise Ridge Chamber of Commerce, and welcome to you all. So John, I met you briefly when we were holding a fundraiser here last November, and that was right on the heels of the fire. And my memory of that day was running around like a fool with wearing a respirator and trying to talk to people and raise as much money. So I'm glad to see you again. I hope that things are beginning to ease for all of you, but I have a feeling we're going to hear that it's still a pretty tough go. So how do you rebuild a town? Unlike some of the other towns in the area, Paradise didn't sustain some damage. It was leveled. How do you begin to get your head around that process as a business person? Well, just as establishing that at first. It was really, as it devastated the town, everybody had to get out. Basically, it was all immediate fire, how would you call it, what would you call it, an evacuation? Then we went into a recovery phase. And I have to emphasize that we have, we've moved into that with some of the cleanup. We started to have plots actually cleaned, and we're seeing some movement of trucks and a lot of personnel in town. We're starting to see how this has turned into a recovery effort. Businesses were affected as much as residential and vice versa. The town was virtually destroyed and infrastructure has been damaged and will need to be replaced. Rotary, among other organizations within the community, are doing all they can to support fire victims directly, as well as the rebuilding effort. And that is for residential and commercial, too. North Valley Community Foundation has been instrumental. A lot of individuals to international organizations contributing to that fund for the direct benefit of the fire victims. But again, we're moving into the recovery phases where we need to start supporting the business and the rebuild effort. And that recovery cannot have been made any easier by all the rain and the mud that you must be dealing with up there. That's true. Correct. We've got issues concerning the weather. It's wintertime anyway. And we can always reflect back and say it could be worse. A lot of us are taking that attitude. We have a lot of gratitude in general as a community. But the fact that it's not three feet of snow, that we're not hindered by other crisis that are occurring, or counter our blessings in that sense. How do you begin to bring together all the players who I'm sure need to meet and strategize and plan to physically rebuild buildings and homes and businesses? And that's for any of you who want to chime in. I think the big thing for most of us, it's the unknown. We don't know when we'll be able to rebuild. I'm thinking I'll be lucky if it's two years from now. And in two years from now, I'm older. Will I want to move back onto the ridge? Will we be able to get buyer insurance? Will we be able to afford the buyer insurance if we can get it? Are we going to face new building codes to where we may have to spend $300,000 to build a home that's valued at $200,000? Will the elderly of our community come back? A lot of people think the people who had retired up there that were in their 70s, 80s, 90s, they're not coming back. It's a problem. And we know that we won't face the rebuilding process for at least a year and a half, maybe two years, at the earliest. But I think, going back to your question, is getting people together is, first of all, our Rotary Club does still continue to meet weekly, not as many of us every week, but we do try to get there when we can. The other thing is, is the city council meetings and they're live streamed, so we can attend those in person or via watching it. And then also, many community members are getting together with events and things that are happening in the town just to get people together. Our ice skating rink has reopened. The chamber has been having ribbon cuttings as businesses reopened, so just getting as many people to get that word out and attend those events and reconnect has really been heartwarming to see when people reconnect with each other. Well, it must also be healing, that reconnection. It is. Yeah, yeah. So, John, when I met you last fall, you said, please have us on in February when everyone else has forgotten. Do you feel forgotten or is there still a lot of outside attention, care, money, resources coming in? I really think that we're getting the people on an individual basis still care. I've been going from Rotary Clubs from Cameron Park to Danville throughout the entire region and everybody still cares, but on our GoFundMe, for example, paradisestrong.org. We're during as many contributions as they were as there was in the first month, keeping it in the public eye a little bit, trying to continue to raise money. I kind of perceived that our Rotary Clubs gonna go from 80 very active members, maybe by the end of the year, down to 20, 25, 30 members as our talent scatters across the country. Our Rotary members are. On the I-80 corridor right now, we've got one in Truckee, one in Granite Bay. I'm now in Sacramento, Vicki's part-time in Vacaville, and we've got one down in Walnut Creek. And so the whole fabric of our community, we're kind of a microcosm of that. We're going through those same things in our Rotary Clubs, so we're continuing to try to raise money so that we can, whoever is left behind, and whether or not the three of us will still be there a year from now, we don't know. So we're trying to leave as much behind for, so that we can help the community to rebuild. Vicki, you mentioned earlier that you're living between three different houses. I am. Yes, I am. It's gotta be a little unsettling. It is. You know, I'm in Vacaville with our youngest daughter, part-time, and then my brother has been gracious to allow us to live in his home up in Kelly Ridge, which is just above Orville, also part-time. And then we do have some family in Las Vegas, so we've been there as well. So that's actually, my husband is there today, and I'm here in Vacaville. So yes, but you know, the good news is, is everything I own fits in a suitcase, so I just keep that packed and go from place to place, but. That's some perspective. Yeah, yeah, so it is difficult at times, although we are very fortunate that we do have the family that we can rely on. This is for all three of you. What do people need to know today about Paradise? Because when people see this, they're gonna ask me, how can I help? Because that was the question that came through Loud and Clear back in November. So okay, help is needed. How can I still help? So what can the outside world do? Go ahead, John. Well, we're working on several things. One is a Rotary Club, Clayton Valley, Concord, Sunrise Rotary Club, long name. That is a long name. But they have a program now called Cars for Paradise. So if you're sitting and you've got a clunker sitting in your driveway, we want it. They're restoring them, making them safe, and then turning around and giving them to people in paradise. We've got a small committee within our Rotary Club that is betting who gets them. We started with an organization up there called California Vocations. They take care of developmentally disabled adults. And they had 30 cars in their parking lots burned as they were in company vehicles. Picking up young adults with autism, Down syndrome, brain injury, whatever, their clients. And 18 of them didn't have full insurance. And so our Rotary Club with Clayton Valley's Rotary Club have been able to replace all 18 of those cars. It's going to be a long-term program with Clayton Valley. They're going to continue to get cars so that we can help our community. So if somebody in Davis has that. So people can donate a vehicle. They can donate a vehicle. We're still accepting contributions on paradisestrong.org. I'm doing a couple of fundraisers right now in the I-80 corridor. February 24th at the Deville Theater in Vacaville. We've got actually a Davis band playing cold shot along with time bandits out of Solano County. So that's a fundraiser that the money will go to the Paradise Rotary Foundation. Cars for Paradise had a motorcycle donated. And we didn't know what to do with it. So it's being completely restored. And we're raffling that off. So we're selling raffle tickets. And then the big event is going to be here in Davis at the Mundavi Center on March 23rd. And Judge Dave Rosenberg is going to be our emcee. Chancellor May has said that he'll come and will help us host the event. We're inviting all the politicians from the city council to the governor. Some we've heard from, some we haven't. We've got some fairly big names that are going to be playing at the event. And we hope to raise a couple of $100,000 at that event. So we're still trying to do the fundraising and keep the name in out there, or Paradise out there. But the event in Vacaville is co-sponsored by the Vacaville Rotary Club. And so we're getting a lot of support from Rotary Clubs throughout the state, everywhere we go. They're really reaching out and saying, what can we do? So we're appreciative of being members of Rotary. So support those fundraisers. Well, good. And you can get information to me and I'll help promote it here in Davis. Thank you so much. Thank you, of course. I literally talking with all of you, I have no clue what you have been through. And I said earlier that it really is a form of PTSD. And so you're all dealing with making these huge choices, even will you continue to live in the place that was your beloved home? You mentioned a couple of businesses were reopening. Let's just touch on that quickly because if that's happening, that speaks of hope, that speaks of renewal. So what kind of businesses are opening and are they getting support from, are people coming in them from surrounding communities or? They are. There are a number of different businesses that are opening, but we have to remember that we're dealing with issues concerning not having a potable water, number one. The power is hooked up in certain areas, but not extended to the entire community. So there's, there are a lot of challenges. They're opening up in the communities of Orville and Chico. They're starting to come back to the ridge proper, but absent water and power. It's a challenge at this point. But I want to emphasize that there's something that's coming up this month on the 22nd. FEMA has provided us with a master planner to be able to actually, who deals with disasters specifically, coming to the community so we can start lining up how this process is gonna work. We've been wanting a wastewater system for a long time in our community. Looks like it's on the table, fiber optic, buried PG&E lines, reestablishing perhaps some of the zoning within the community, which is essential for us to look down the road and we're talking about posterity and how it's gonna look in five, 10, 15 years. So there are plans that are being made now coming out of the direct impact of the fire to actually rebuilding. So when you talk about businesses coming back, yes, we're setting those plans up. Right. Well, in that kind of infrastructure, it's very hard if you don't put it in from the get-go, especially bearing the fiber optic and putting things underground. So that's encouraging to hear that ultimately there may come some very good, there may be some very good outcomes out of- We've had great cooperation from PG&E, from Comcast, from our partners into the community and from federal and state. Worst wildfire in California's history. They're addressing it that way. Right. And Vicki, you said that you commented on the state of the state address last week. You wanna share what you said about that? Yes, well, I happened to be watching it and at the very end, our governor introduced Alan Pierce who is a nurse at Feather River Hospital and I happened to know of Alan and the heroics that he showed in rescuing patients and from the hospital and taking them to safety. You know, it just brought tears to my eyes. I hear the story a lot. I know of the story, but every time I hear of it, it brings tears to my eyes just to know the dedicated people of our community that care about everyone. And so I think things like that, I was so happy to have Paradise mentioned in the state of the state because it is an ongoing process and it's gonna take many years. Sure, and clearly Governor Newsom hasn't forgotten about Paradise. Yes, and he was up and he visited Paradise after the fire so he's well aware of the devastation there. Yeah, good. Any last thoughts, John? I just had one that there's a now famous picture of President Trump and Jerry Brown and Governor Newsom. In pleasure. Yes. In our mayor, Jody Jones. And when I first saw the picture, all I could think of is God help these men because she's a dynamic lady. Caltrans divides the state into 12 districts. She used to run one of the districts. So she's uniquely qualified that she knows how government works, how federal, state, local funding works and having her as the mayor does make a difference because I don't think there's a better mayor in California to handle a disaster like this. Good. And she's, we're very lucky to have her. Well, I thank you all for taking the time to come down to Davis today and share this and saw that I in turn can share it with the community. And let's do this again some point down the road. So we keep it on Davis's mind, we don't forget and we are aware of what opportunities there are to attend fundraisers and to otherwise contribute. We are pleasure. Thank you for being my guest today. And this has been in the studio here at Davis Media Access and we've been talking about rebuilding Paradise, a long-term project for sure. Find us on the web at dctv.davismedia.org. You can find all our local shows archived there and watch this show Tuesday evenings on DCTV channel 15 on the Comcast system. Thanks so much.


Why do you think that post-colonial federal states want to be treated by the international community as equal and unequal at the same time? Well they're sovereign states on par with everybody else. They have full membership of the United Nations and of course they want all the privileges that come with that membership including the influence and including the right to be treated on par with every other state no matter where in the world it is, so far so good. However the fragile states also request help from the international community. They say we have too little, we need aid from you. And that is not a normal way of acting if you are a sovereign state. You basically take care of yourself. But as soon as you ask for help you open the door to outsiders and outsiders will often be interested in knowing what's going on with the money and other resources that they bring in.  We're sovereign state just like you are. But at the same time please come in with some aid but do not control or take care of how it works when it comes in. And this of course creates tensions and it is these tensions that we see especially when we have interventions by outsiders.


Hello, my name is Wendech. I'm a software engineer at Red Hat. And I'm part of the Anaconda team. And I've been the lead developer of the Anaconda backend. So welcome to my presentation about the story of the Anaconda backend. Let's start with a simple question. What is Anaconda? Anaconda is a system installer used by Fedora, REL, and other operating systems based on this. And it kind of is doing three stuff. So usually, when you want to install something on your system, you download an ISO, put it on your USB stick, boot it. And then what happens is that Anaconda configures the runtime configuration. So it modifies the installation environment based on some preferences and detective values. Then it tries to collect the user preferences about the final system. So you can select what kind of language would you like to see on your system. The time zone, you can choose some specific software you want to install, define the partitioning, and create some user accounts. And then we verify that this is valid. And it looks like the new system should be viable and bootable. And after that, we allow to start the system installation. And this is important because why we collect the user preferences, we don't really touch any of your disks. And we don't modify your data. But once you confirm that you want to start the installation, that's where all the magic happens. And we use your user preferences to do some real actions on your hardware. So quickly, how does it look? So runtime configuration usually happens in very early stages. You usually don't even see the screen because it happens very quickly. Then eventually, you end up on something like this where you can specify what you want to do. As I said, nothing really happens. We just collect your data. And when we have all that we need, we enable the Begin Installation button. And then we actually do the real action. While I'm mentioning this, my conda is very difficult because of this part. Like the part where we just collect stuff, but we cannot really actually do some stuff because we have to kind of simulate what's going to happen and how the system is going to look like. And that's not easy. And also you can visit and configure anything in a very random way. So you can start with the user account and then specify the software and then specify the partitioning. But in reality, what happens next is that we start with the storage, download the software, and then we start to create some configuration. So yeah, this is the difficult part. So what's the actual Anaconda modernization? So this is the initiative that started in 2017. And the idea was pretty simple. So we started with something like this. And that was one huge monolithic Python application that had everything in one process. So the user interface had access to all the data that you might need or you might not need. Everything could use anything. And it was all very interconnected and it was just a huge mess. So the idea was to separate this data and business logic into the bus services and have the user interface and the debug services and the debug services can talk to each other and user interface can talk to the bus services. What will you gain with this? Is that eventually you can replace the user interface with something that's not even based on Python. And for example, have the web-based UI, which we might have heard about this year. So yeah, the idea of the web UI is very old actually and it started here in this year because it was the ultimate goal to get there. So that was the plan, what was the reality. So this is kind of what you have. Like Anaconda is a very old project and it's not pretty. So there are no nice boxes that you could just take and move to some service. You have to create these nice boxes first. So you just start somewhere. So let's say you are able to identify a piece of code that looks kind of isolated and maybe you might be able to move it on the bus. So the next thing you have to check is what kind of data does it use. And if there is anything that's not really on the bus yet, you cannot really touch this logic because you would miss the data. So instead of that, you target the data, see where it's used and migrate the data first, make sure that all the code that uses the data are using the database API to gather them and change them. And then you actually can go back to the piece of code that you wanted to move and move it. So based on that, we targeted the data. So Anaconda had a lot of weird data objects for some reason. So yeah, we had a lot of global variables that was lovely but we eventually got rid of them. Another weird object was the Kickstarter data. So Anaconda has like this special mode when you can like automatically run the installation using a Kickstarter file. And Kickstarter data is like a Python representation of this Kickstarter file. But the Kickstarter data are used also for interactive installation because we use it as a main data holder of your preferences, which doesn't make sense because Kickstarter doesn't support everything that Anaconda does. So you end up with selectable workarounds and that causes a lot of issues. Another funny object that we have is the storage model. So as I said, the storage model is, yeah. So we have to somehow like simulate the actions first. So with the storage model, we have a Python representation of your device tree and we do actions on this device tree and we just check the result. And when we are happy, we actually apply these changes to your real storage. But unfortunately, our storage model didn't have an undo button, but sometimes you had to like reset because you ended up as a very invalid model. But this object was already propagated to all corners of the UI. So you couldn't just throw it away and create a new one. You had to somehow reset it. And that was also an issue that we solved later in the polarization. Then we had a representation of the payload object. By payload, we call like all the support that we need for installation software on your system. And then there is a special category of product data where every product can have a little different defaults that they want to show users. So that's also something that we need to take in account. So the most problematic part was the kickstart data actually. So we decided to start the planning around that and we collected auto kickstart comments that are supported by Anaconda and we split them to some areas that made sense. And this is basically the foundation of the D-Bus modules. And you finally have something to work on. It has very clear goals and you just go module by module, command by command, and just try to figure out how to like handle this command via the D-Bus module. So this was the plan. The phase one targeted the system installation. So everything that you needed to actually finish the installation. And the phase one was actually finished on April. So yay, we are done with this one. The second phase is going to target runtime configuration. It's about the runtime module and the bus module. The bus module is kind of special because it's main purpose is to orchestrate other modules and send them some data and collect some data from them and basically it like oversees the whole D-Bus API. So what kind of challenges did we face? So the first question was where will we develop this code? And we had two options. The first one was to have a development branch which would be separate from the production branch and it would be nice because if we make a mistake it will not affect any critical workflows like Fedora, Prohite. Unfortunately, it means that until you release this thing you don't get any feedback about what you are doing. So you don't really know if your idea of how it should work really works in the real world. Another thing that we were afraid of was to keep it in think with the production branch because this project didn't have a very high priority and there was always new stuff and features and requests that were coming up and we still continued development of the production branch. And we didn't want to lose these features and backfixes so we would have to port everything to the development branch and we knew that that would be just too much work. So the other option was to use the production branch and that has a lot of benefits but unfortunately you can very easily break Fedora or Hyde and you don't want to do that. Yeah, so there was like a lot of pressure about making it right and we were doing very thorough request reviews and yeah, we spent most of the time on just making sure that we didn't forget any use cases before we actually did some change and that was very difficult to do but I think like considering the amount of work that we did we didn't mess up so much. Yeah, so what we had and have for all these years was kind of a hybrid solution because I mean some of the Kickstarter commands were migrated on the debuts modules but a lot of them were still handled by the user interface and that created a lot of interesting situations and changes because you somehow needed to take this Kickstarter file, tear it to pieces, send it to the right components, collect the feedback about possible issues and validation errors and later again collect new pieces of this Kickstarter file and generate an output Kickstarter file. Another thing that we had to make sure is that there is no overlap that we didn't forget to remove the management of one Kickstarter command from the user interface while it's already handled by another debuts module so we wrote a lot of unit tests for that to make sure that this is fine. Yeah, another challenge that we had was how to quickly and safely develop the debuts API. I don't know if you ever read the debuts specification, don't, you will, it's very difficult to like understand and grasp. So we needed to make sure that what we are writing is right and that we don't have to spend a lot of time on these little tweaks and weirdness of the debuts API and that we can focus on the code. And we knew that we will develop this very iterative way and that it's going to be a lot of refactorization of the debuts API. And for example, one of the things that you need to provide at some point is like XML specification of your debuts object and that's really not something that you want to refactorize because it won't work. So what we actually did, we started with the PID bus library but we built a lot of functionality around that that would simplify a lot of stuff for us. And eventually we throw away the PID bus library and create it a new one which solved some other issues that we had with the thing, for example, and put there all the new support that we created. And now it's available on PIP and other operating systems so you can use it if you want to. So another issue that we had was the management of the default values. So the problem with defaults is that we have a lot of sources of the default values. I mean, like Anaconda has some ideas what are the defaults but then the products have some other ideas what the default should be. And then you have these kernel arguments and boot options that can override them. And we didn't want to propagate all these sources to the debuts modules so they can pick one. So instead of that, we introduced the Anaconda configuration files that are just text-based and we, in very early stages, process all the sources at some point generate a temporary runtime configuration file and then we start the debuts modules. And the first thing that the debuts module is doing is that it's looking for this new runtime configuration and it's using only this one. So it doesn't have to care about the other sources which helped us a lot. So, and the final question was, how can we test this thing? So the main goal was to be able to test the backend with unit tests very easily. And unfortunately, and luckily, we were able to do that with the libraries that we had. So we didn't have to do any weirdness with debuts demands and we didn't have to test really the debuts API. We could just create these Python representations of the debuts API and unit test them directly, which simplified a lot of things. What we also were focusing on was the end-to-end testing. And with Anaconda, Anaconda is very difficult to test. So this was like the best effort we could do and that was the focus on Kickstarter tests. But that was actually good because we were targeting Kickstarter commands. So it makes sense when we was migrating a Kickstarter command like auto part and it wasn't covered by these end-to-end tests, we could try to a new end-to-end tests to make sure that it's covered forever. So we spent a lot of time on this and improved into infrastructure a lot and it was also great. So, what's the current situation? So as I said, we finished the first phase and this is the code distribution of our current modules. As you can see, storage kind of consumes like most of that code, then it's payload network and the other modules are pretty small. So you can guess that we spent years on the storage development and another years on the payloads module and then the network and the other stuff was pretty much easy. So here are some milestones and yeah, it took forever but as I tried to explain, there were reasons for that. So what were the benefits and was it like even worth it to do this horrible mega thing? So we have a pretty good code coverage of the new code. So this number is a little confusing but we can check actually, how does it look like right now? And when we focus on the Payana Konda library which holds more of the most of the biting code, you can see that the core package that's like a general library of functionality has a pretty good coverage and the modules have a pretty good coverage and UI, yes, we don't have tests for UI, so obviously not so well. And the modules itself, most of them have a very high code coverage except for the ones that are really big like the network module, the storage module and I forgot the last one, payload. Oh, payload is pretty good. So yeah, I think we did a pretty good job and when we started, I think the code coverage, we didn't even measure code coverage but I think it was around 20% and it wasn't great. So what's next? So the number of end-to-end tests that we run daily on Fedora, Rohite with our upstream changes is over a thousand which is a lot because when we started, these tests didn't even work properly. So like having these run daily makes me sleep at night. So another side effect of these things was that we kind of by accident stabilized the GUI and the current user interfaces because when you are modifying the user interface to be able to interact with the D-Bus API, it means you have to touch the code and you have to test it and if you find a bug, it doesn't make sense to ignore the bug and leave it there, you fix it. So we were finding a lot of issues there and fixing a lot of bugs just by working with this piece of code and then when we had the bug reports, for example, for RHEL, we noticed, okay, but we saw this on upstream actually and we fixed it so it was very easy to just port the fix to RHEL and it didn't cost us any additional work so this was great. Another benefit of the development of the backend is that it enabled development of the web UI because the UI wouldn't be even possible if it didn't have something to talk to. So this was kind of crucial part of that and the fact that we can work on this is great but as I said, this all started years ago. Another thing that we improved is the simplified way of customizing Anaconda for products. As I mentioned, we had some issues with that and we had to handle the defaults differently and side effect of that is that it's very easy to provide new defaults for your project and you don't have to understand Python. It's no longer a weird Python class that's breaking all the time. It's just a simple text file that everyone can understand and change and you can find it in our repository. Another thing that this was intentional was that the support for add-ons is much better on the backend level and basically there's almost no difference between add-on debas modules and our debas modules because they use the same basic, like the base API and we treat them the same. So we were able to remove some weirdness around it and make sure that it's easier to develop. Also add-ons can now be developed in other languages if you are interested because it's debas and we don't really care what's running behind it. So that's another nice thing. And one controversial thing I want to mention is that since we kind of like dropping the dependency on the Kickstarter data object, the data holder, and using Kickstarter just for input and it's no longer just there to hold some data, it means that there's a possibility to support more formats or maybe switch the format or stuff like that because we don't really depend on packing starts so much anymore. And I personally don't like the current for all. So if anyone is interested, this is definitely something to think about because I think we could do much better. So what's the future of this? So right now my colleague is working on the phase two, which means he's writing debas support for the runtime configuration. In the future, we want to clean up and stabilize the debas API because it's a little still graph and messy. Still, it was coded, it was developed for six years. So some of the early parts are not so nice as the later parts. And also we have zero documentation of the debas API, which is not great. Unfortunately, all the resources are currently working on the web UI, so I cannot promise you when we will have documentation of the debas API, but we will get there. Yeah, so that's all from me. I just, very quickly, because I have time. So like one of the side effects of this was that we created some new libraries. As I mentioned, we have the dustbus library for the debas communication. And there's another library called Simpleline. And that's actually a very simple Python framework for the text-based user interface. Because we don't have only the graphical user interface, we also have the text-based user interface. And because of some weirdness, okay, 390, we couldn't use existing libraries. So this is kind of like separated code that used to be for a very long time in Anaconda, and we cleaned up and created a completely new library that's independent on Anaconda. So you can also use it if you are interested in this. Okay, here are some additional info. As I said, don't look for the debas API in our recommendation, it's not there. If you have any questions, reach out some metrics, this is the best way how to get any answers. Yeah, does anyone has any questions? Yeah, okay. You mentioned the decision to this idea has been eventually evaluated to talk about all the roles of the users, the linux installers in order to create some kind of a Ligba Franca one, four, whatever you have here. What is the, evaluate what is already existing also inside or inside, for example, the federal system, like for example, one for the rest, one on the outside, because your professor recently reviewed it. Yeah, okay. So the question, sorry? Basically, the question. Yeah, yeah. So the question was if we will consider the new format instead of the kickstart, have you considered to use the existing formats that are used by other installers? So yeah, this is not really initiative. This is an idea that I'm throwing out for someone who's interested. But yeah, it would definitely make sense to look at what's there first. I personally would like to be able to use Uncivil, but we kind of looked into that and it would be so difficult to support it. But yeah, it makes sense to like, try to unify the formats and make it happen. Yeah, please. We've done in the end on the background. Have you considered writing some kind of simple command line interface to execute all these things in series if you wanted to simulate a workflow running for the web UI or running on the front end that some of the else will develop or something of that sort, because the open system guys will be able to go on them. Their first interface wasn't the web UI, it was the CLI tool that they've been both servicing some sequence, and they used that to be able to build all the other front ends on top that allow them to document the best interface, the best interface for ramization, and do those other things. Yeah, okay, so the question was difficult. So kind of if you considered to create the client, a simple client that was allowed to run the processes first and then write the web UI based on this client's tool, right? Yeah, okay. So, no. So basically, yeah, you kind of have very limited resources, so you have to explain everything that you are doing, and there wasn't really a need for this kind of tool because there are other tools who are better at just doing the installation in an interactive way, and Anaconda's focus is the interactive installation. So it's definitely possible to use the backend and write a very simple tool that will just use the backend without any user interface, but there was no demand for that, so we didn't really explore this area. Yeah, yeah, definitely. Yeah. Well, there was no demand. Like, no one asked for that, so we couldn't just go and write this piece of code that no one really needed at the time. Any other questions? Yeah. How would the application, John's application, I assume, talk to the people in the group? Would you use something like the cockpit's bridge or have you created something from your own? Yeah, okay. So the question was about the web UI, and how the web UI is actually talking to the debug services, which is a very good question. And yes, we are using a cockpit bridge and basically the whole cockpit setup to communicate with the debug services because the support is already there. It was very easy to reuse for this use case. Well, you are using all of it because maybe you were not there. So basically we were doing this iterative way, so we were doing the migration over the years iteratively, so there was more and more backend. And since we finished phase two, it means that most of the, or all the modules that are related to the system installation are basically finished, so all of that is running via debas. The missing parts are just very simple edge cases that are related to the runtime configuration, and that's currently being worked on, but otherwise it's all on debas, and it mostly was debas for years. Yeah, yeah. So the question was when we will be able to leave the hybrid solution and fully switch to the debas modules, and we should be able to do that at the end of the phase two, which is currently under development because the phase two is targeting the missing kickstart commands, and once all of these commands are handled by debas modules, we can drop all the support in the user interface, and the user interface should use only the data in these debas modules. And it's also critical for the web UI as well because it cannot really access any of these data that are not available on debas. I would consider that spending like this I don't know, a few months of development that will develop with the code covers to 90 last percent of the circular stress from all the scenarios in the break, when development is there, then the modernization, like, way? Yeah, so basically, I guess the question was why the coverage isn't higher. I don't know what you mean, in some of the latest cases, if you actually spend prior to developing more time on covering all the scenarios that you've done. And do you mean the unit tests or the end-to-end tests? Yes. So the code coverage is related to unit tests, and you really don't want to write unit tests for something that you are going to refactorize like three weeks later. So as we moved a piece of code to the module, we tried to cover it with unit tests, but since Anaconda is very complicated and it's a lot of code, it's really like 100,000 lines of Python code, it's not so easy to cover all edge cases. So I would say we did our best, and this is what we have. But there's definitely space for improvement, and it can be better. And the problem I'm having is I just wanted to say, I think you've done an amazing job of this. I think I can test this when they're done building it, and it's amazing to me how well it works the whole way through this kind of slow development process between divas, so great job on that. And the question is, as you've been going along with divas stuff, have you considered dropping support for certain difficult to maintain things, and how have you made that decision? Okay, so the question was if we were considering dropping some difficult support, and how was the process of doing that? So what we were able to do is that we very often found something that didn't work for years. So we kind of silently dropped it because no one was complaining that it doesn't work. And but sometimes there were people who later noticed, so we had to say, okay, it's gone, sorry, we are not reviving that. About specifically targeting difficult parts, I guess it never was on the table. I guess we always tried to support all the use cases that we had, which maybe we shouldn't, because it was sort of more. But yeah, that was kind of it. We didn't really try to target some stuff that were already working because we were afraid that someone will complain that, okay, but this was to work and now it's not there, and you did the horrible, yeah, maybe we shouldn't. And then the question. Okay, so thank you so much for coming.