So I'm Bud Walker with Melissa, data quality company, many years attending DGIQ, San Diego, I think 10 or 12 years running, but yeah, it's been a great show. So we're here mostly to interface with new practitioners, you know, companies that are starting the process of maturity around data quality, data governance, and we've seen a lot this year for the first time, I think that in a while that I've seen so many new practitioners or people coming to the show for the first time, they didn't know who we were. So it's been an excellent event for meeting new. That's your best and most likely time to influence and make companies, you know, get the value out of our products. Oh, absolutely. Tangible customer problems that we can help them solve across a bunch of different industries. So it's been an excellent way to gauge people and talk about what we can provide. And we're walking away with a lot of really exciting conversations. So I mean, we're always super, I mean, anything data governance, data quality is super dear to our hearts. I mean, that's what we do. We absolutely eat, sleep and breathe it every day.  We plan to continue on with DGIQ and Enterprise Data World and all the show.


This systematic review provides an overview of the current state of 3D printing technology in the field of pediatric dentistry. The authors discussed the advantages of 3D printing compared to conventional methods, including its ability to produce more accurate and customized space maintainers. Additionally, they highlight the need for further research into the accuracy, efficacy, clinical success rates of different 3D printing technologies, materials, and designs for additive manufacturing of space maintainers. This article was authored by Paradox Arian, Parachers Arian, Pedram Sendi, and others.


Today is Friday and that means FNA Friday, but it is actually not FNA Friday because today it's going to be slightly different because today marks in a way a break for the type of things I'm going to talk about in the Friday FNAs. So so far it's been all about what I'm going to call pre-production. It's not really pre-production, production and post-production, but I'm going to name it like that anyway. So it's kind of been the pre-production block of you're going to decide to be 9-meter. Then you're going to decide what you want to do and now you're going to prepare for it. And as you prepare with your reference and the shot idea, what kind of character you want to choose and what kind of things you want to incorporate into your shot. Is it going to be just a shot or exercise or demo or real piece and so on and so on. So it's kind of like the beginning planning phase of your shots or your sequence or whatever you want to do. But now it's kind of done. Now I'm sure I've forgotten some things and there's some things that you would like me to talk about. Maybe I hope. I don't know. Today is going to be a bit of a submit your questions. So is there anything that you want me to talk about in terms of what you want to do for your shot before you actually start animating. So any concerns, any questions, any requests or anything, reply, let me know in the comments, anything you want me to talk about. Now is the chance. This is your submission for questions video because starting next week, I'm going to talk about blocking and I'm going to start talking about workflow and just animation techniques and tools and tips and demos. And it's going to be more the media aspect of animating. How are you going to animate this? How many frames for this? What's the technical workflow for this moment, for this lip sync or this body action to characters, creatures. So this is now pre-production block is done. That's going to be the production block. So all the animation nitty gritty. Now, once that is done in, I don't know, how many weeks or months, then it's going to be more post-production. And again, I'm using those terms kind of loosely. It's not like full on post-production in production and pre-production. But I mean, it sounds fancy. So post-production is going to be, well, now you're done. So now you want to render it. How does it look? Should I do just viewport 2.0 in Maya? Should I do proper renders with lights and compositing and maybe sound effects and music? And then, well, now that I have all those pieces together, how should I construct my reel? What should be on my reel? What are the do's and don'ts? And then as you continue with that, well, now that you're done with this, how do I submit what type of reel do I submit where? And so on and so on. So this is going to be the third block. And after that, of course, there's always something that can come up and I can talk about other things, but this is way, way, way in the future. So this is just the beginning. But I wanted to take the time to say this is the break point. And I think that break would be a good moment for questions. So anything that you have, any, like I said, concerns, questions, requests, comments, anything where you say, well, you can talk about animation and blocking and workflow, but you haven't really addressed other things I wanted to hear. So, for instance, maybe you want to see more explanations about shooting reference if you have two characters and you're alone and you only have a camera and you got to run around, click on and run back and act that out. How do you do this when you have two characters? You shoot reference for multiple characters while you're alone. So there are still multiple topics that I haven't talked about, but I think the foundation has been covered. But again, if you need specific details, I can every now and then in that second block, sprinkle those in or wait till later, who do something special during the week and not on Fridays. So totally up to you. But let me know. So this is your chance. Let me know in the comments, ask me any questions about anything we can do future Q&As or I can take those questions and actually make an FNA about it. Totally up to you. But I also wanted to say thank you because I have passed the 2000 subscriber mark and it's pretty bananas that people actually watch this. There are a lot of views on the critiques. I'm actually surprised how many views there are on each individual critique. So anybody that watches this, thank you so much. I really appreciate all the subscribers and actually looking at my statistics. The subscribers went from kind of 45, 55 percent to now the majority who is watching those clips are actually subscribed. So I highly, highly, highly appreciate it. It is really, really encouraging and motivating to see that people watch this and subscribe. And again, if you have any requests, any questions, any concerns, any bribes, any chocolate that you want to send me, let me know in the comments. Speaking of chocolate, tomorrow is cheat day. I think it is chocolate time. I might just record something just about food. Well, maybe that's in the future. But that's it. So thank you. Thank you again to all the subscribers. Thank you for those that are watching every critique that I upload, every FNA or active analysis is all fantastically motivating. And I'm going to continue. And again, anything you want me to cover, let me know in the comments. And that's it. Thank you.


Many of us have the Holy Spirit. The question is, does the Holy Spirit have you?   We need to empty ourselves and allow that water, that river of living water, to flow from deep within. What know ye not that your body is the temple of the Holy Ghost?  The one who knows you like no one else can know you. Praise for you like no one else can pray for you. Praise, and he pleeeeeeease, fervent for you. When the church finally taps into that ancient power that the martyrs understood, there will be no stuffing the church of the living God.


New America would like to welcome you to our virtual event. The program will begin momentarily. While we are waiting, I want to review a few housekeeping notes. This event is being recorded and the recording will be posted to the New America events page within 48 hours after the event. Attendees will be in listen-only mode and you will not be able to be seen or heard by your fellow attendees or panelists. Therefore, we encourage you to share your comments and questions in the slide-o box located to the right of the video. Close captioning is available by hovering over the video and clicking CC at the bottom of the video. If you encounter any issues during the event, please contact events at newamerica.org. Thank you for joining us. We will begin momentarily. All right. Thank you very much. I can't top that voice. I'm Mark Schmidt. I'm the director of the political reform program here at New America. And I'm just going to welcome you and say a little bit about what we're doing here. For the last year plus, we've been part of, I think, a community of organizations and activists looking at the concept of co-governance. And really, the question is, is there a way for activists and organizers to have a relationship with government that's not always adversarial where we're kind of working together to get problems solved and make sure that the public voice is heard. And in the course of this, we found a lot of really fascinating examples of it. And we, there's really kind of a community of organizations that have been working on it. It includes New America, my colleague, Collie Russell-Dillman, who you'll hear from later, The Forge Organizing, which is a publication about organizing, one of the most fascinating publications that's come along recently and has done a special issue about co-governance, local progress, the state innovation network and other state innovation exchange, and other groups. And also, some key funders. Kevin Simowitz has really been a key driver in helping us think about these issues, along with the Ford Foundation, Open Society Foundation, Foundations, and Democracy Fund have been helpful in building this. So I think this event is part of that process of kind of building a community of shared understanding of what this concept is, what its potential is, what the pitfalls are, what people's experiences are. So we're going to just have real interaction with people who are practitioners of this kind of co-governance, starting with Ellen Gim, who's a member of the Philadelphia City Council, Gail Johnson, who's a former city commissioner in Gainesville, Florida, Jesse Ulibari, who's the co-executive director of the state innovation exchange and a former elected official himself, and Crystal Zermano, who is the strategy director of the Texas Organizing Project. In conversation with Sarah Johnson from Local Progress and Holly Ronson-Gillman, who I mentioned before, who's my colleague at New America, I encourage you to, in addition to this conversation, take a look at the issue of the Forge devoted to this and the report that we recently put out with a number of case studies of our own that I think are all really fascinating. So with that, I think I'm going to turn it over to Elizabeth Guernsey from Open Society Foundation, and thank you all for joining us. Thanks, Mark, and thanks to New America, the Forge and Local Progress for putting together this exciting event and for the important work on co-governance that is really transforming how we can test for power and empower people to make change that affects their lives. I'm Elizabeth. I'm a senior program officer at the Open Society Foundations, and part of our strategy around building a multiracial democracy focuses on moving progressive policy at the state and local level, with a focus on co-governance and changing who serves in public office. We have some of the smartest, most inspiring leaders on this call today, and I think the recent Forge publication and the New America case studies really show the brilliance of how public sector leaders are working with organizers and advocates in their community to change what we think is possible and who government is for and by. Today we're bringing together participants from the case studies and contributors to the Forge issue to talk about new frontiers and collaborative governments, what inside-outside strategy really looks like in practice, and what it takes to build real governing power. I am super, super grateful to be here and to learn from this amazing group of leaders, and now it's my distinct pleasure and honor to turn it over to Sarah Johnson of Local Progress. Wonderful. Thank you so much, Elizabeth. So I think Holly and I have the pleasure of co-facilitating this conversation, and I'm going to get us started off with a couple of questions for our incredible panelists. I'm Sarah Johnson. I'm the Executive Director of Local Progress, which is a network of nearly 1,300 local elected officials, city, county, school board, across the country working collectively to advance racial and economic justice, and so grateful to be joined by Helen, our board co-chair, Gail, one of our former members, Crystal, at one of our incredible partners for our work in Texas, and Jesse, who is like my, I don't know, like corollary counterpart and partner in all things at the State Innovation Exchange. So, and, you know, I'm just personally so excited for this conversation. I come out of labor organizing, moved into movement politics, and have transitioned through my work at Local Progress into really thinking about governance and governing, and really just I'm always grounded in that diversity of experiences and really trying to think about what do we actually mean when we say building the power to control our future, right, to control the largest and most impactful structures that we have for democratic participation. So I'm super personally excited to be here, and I think as we just dive into this conversation, I want to start by taking a little bit of a step back. Collaborative governance is not really a concept or practice that's widely understood. I bet many of the people joining us today are like, huh, I wonder what they mean about that. And if you look at the diversity of voices in the Forge issue and in the incredible case studies that New America pulled together, it's actually a complicated and multifaceted concept with lots of different elements to it. So there isn't one simple or really singular definition. So we want to start this conversation by grounding in the incredible experience that our panelists are bringing from Pennsylvania, Texas, Florida, Colorado and nationally. And start this conversation by just asking everybody or starting with a definition of what collaborative governance means to our panelists and sharing a story of what it looks like in action. So I'm going to ask Helen and Crystal to jump in first on this question. And then Jesse and Gail, you can kind of add in if you've got things to add from your own experience. Good afternoon, everybody. I'm Helen Kim. Sorry for my voice. I'm still recovering from a little bit of a cold. But it's wonderful to join Sarah and Gail and Crystal and Jesse, of course, on a really important discussion about collaborative governance. I'm Helen Kim. I'm a city council member in Philadelphia, proud co-chair of local progress. For me, collaborative governance is so much about a process, a practice and the amount of work. For those of us who represent communities who are often on the margins of public policy or ones that are oppressed or neglected by it. Our work is to build power and to recognize that the systems that oppress, marginalize and push people out of places of self-determination and visibility are all around. And collaborative governance pulls together different forces to alter the trajectory of how people think government currently operates. It alters the mindset of people who practice government inside, as well as outside. And it needs to reallocate resources towards that. So when you think about the work that needs to go in to, say, changing an agency's mission, or expanding an agency's mission to cover an area that has not currently existed, or to drive resources towards an area that has long been neglected, you realize that actually what you need is not just simply people talking inside and outside of government. You actually need to build a strong collaborative, mission-driven force that is working both inside the government institutions and utilizing voices, stories, information and pressure externally. This is what I would say would be one example of that. You know, Philadelphia is the fourth highest evicting city in the nation. We processed almost 22,000 evictions every single year without batting an eye. When I first came in, I knew that evictions impacted 74% targeted a black tenant, 70% involved a woman, and over half involved a caregiver. But the way that evictions are traditionally seen in Philadelphia, it's a contractual disagreement when a tenant fails to pay or breaks the lease with a landlord. And that this was a contractual issue between two parties, which are outside the scope of government. It's not a public policy issue. It's sort of something that's legislated through municipal courts. And so we really needed to change the mindset of that. You know, we first started out with not having that many resources. We didn't have housing subsidies, local rent vouchers or anything like that. We started out by building out a table with, you know, an anti eviction task force. We start out by building bridges with our communities. We understand that in these task forces, we are looking for places of strength, oftentimes in local government, and especially with communities on the margins. We're told what we can't do, what we don't have the power for, and that the forces against us are overwhelming. And what we never have to have the chance to do through collaborative governance is figure out what our strengths are, the strengths that are unpredictable, the things that are untapped and relationships that are underutilized. And so through the anti eviction task force, we launched a tenant legal defense fund. Then we worked on a right to counsel mission. And when the COVID pandemic hit, we were now in full partnership with our courts, working together to see an eviction moratorium go through and then a diversion program that's seen and led to a drop off in evictions by 75% for two years in a row. None of this happens by accident. None of this happens without a purposeful force of people pulling together and altering how we look at one another. And also what the possibilities are as we face impossible circumstances. So that is just a quick window in and happy to talk about it more. I guess I can jump right in. Crystal said manual Texas organizing project and it's just really awesome to be here with these great leaders doing really innovative work and making real changes for our communities across the country. I think for us, we are community organization in Texas, in multiple cities doing work at the city level at the county level at the school district level, we're a member based organization in black and Latino communities across the state. And, you know, collaborative governance is having an authentic seat at the table where real decisions are made. So not, you know, not these sort of commissions but really like in with government sitting around and having real discussions, sharing our stories and making sure that it's not just the organization that's at the table but it's actually those folks that are membership that are directly impacted from our communities actively participating in governance. So they're informing policy Helen it was great to hear you say like telling those stories so that folks really from the get understand what those priorities are and like, and what people really everyday lives look like. And so in, and I think one of the things that has been critically important is getting tapped along the way, right. So I just, I want to give an example that judge Lena Hidalgo, who is actually not a judge but is the top county executive in Harris County, where the city of Houston is situated. When she came in in her administration, she immediately put resources behind these listening sessions to really inform her priorities to hear the stories there were sessions across the city different subject matters was very committed to reaching to all of the grassroots organizations and service organizations, and having real diversity at all of these tables, and then really taking that to to decide where she was going to resource priorities and then putting real resources behind that, behind the different organizations that needed to be formed. And I think one of the other critical things that often we are not prepared for his organizations is when we win governing power and get those progressive leaders elected, having our people in that administration. He was very committed to reaching back out figuring out who those hires could be who was willing to step away from organizations and step into the administration and take on those roles. And what's most important is that it's the everyday things that really I think make the difference in co governance. So it's not just the boards not just the commission hearings it's not just the special meetings. It's picking up the phone and asking our opinions. It's picking up the phone when we call, having real staff connections and sitting down and building strategy and priorities, having a similar power map of the dynamic. If there's a policy that we really need change from the community collaborating together on what is that strategy and pathway look like for victory for our folks. And so I think those are some real critical things that have made a difference, and that I think we've evolved in as community organizations to really recognize we are allies and we can text, and we can call, and that's okay and that works. So that's that's what that's the approach that we've been really taking in Texas. That's great. And I think we've got a couple more minutes on this question, Jesse or Gail if either of you want to hop in and share anything. I would love to hop in. Yeah, I'm really thrilled to be here with you all today. Thank you for having this. So really simply put, I think that collaborative governance means that regular everyday folks are the front and center of making decisions about their own communities. And I think there's a really important piece of this puzzle that we need to acknowledge and that's about making sure that we are making it easy as possible and accessible as possible for people to be able to make those kinds of decisions. I think it's like community engagement 2.0 but with the added piece that whatever kind of community engagement we do, and whatever comes and stems what what comes from the community is actually being implemented in the communities.  I think in government we've gotten really used to either having town halls, or, you know, or having a virtual town hall or having a community meeting like at a, you know, at a church or the face space, but we aren't really doing the work and the deep listening and the meeting people where they are, meaning things like, you know, getting on tiktok and getting into discord and getting into the signal chats and making and getting you know, meaning folks at the grocery store making sure that we're, you know, talking to people when they're picking up their kids from daycare like that is something that I was always pushing in in government is making sure that we are truly meeting people where they are and not checking a box. When we said that we were doing community engagement and helping and helping people to help us make decisions. A really good example of this that we implemented in Gainesville. I thought it was kind of like reverse consulting. And that to me meant like all of you all understand how much money we spend on consultants hundreds and thousands of dollars on consultants every year to pay these experts to come and extract information from our communities, and then package it, and they give it to us, you know, the officials to say this is what we came up with, you know, and we happily paid that money to do that. Well I said to myself, these this money, and these these people that are giving freely of their time and why don't we pay regular community folks, because they are the experts on their own communities to go in and do that we, you know, I call it reverse consulting we rebranded as community cultivators but we literally paid people in the community to go and to other people and get that information which one again once again this these are trusted people right so you're more likely to get the real good information that's going to help inform your policies. And then we did that, and that that that's that's a program that I'm hoping we're going to be expanding we did that without comprehensive plan update. And that was something I was really passionate about is that we were paying people, like you said Helen, the reallocation of resources right, so we reallocated resources from, you know, these consulting companies, and then put that money directly back to the hands of the communities with at the same time being able to get the information that we needed to inform our policy decisions. Thank you, Gail. So hearing themes of radical inclusion of centering decision making and kind of clarifying kind of roles and what people are really being brought into. And then, you know, also want to just like interwoven around what everybody said there was a lot that was just actually about the complexity of governing right we tend to think a lot about policy and legislative campaigns but people talked about budgets, staffing, workforce development, contracting powers of cities, among other things. And, you know, I think we like, when we think about change, it actually requires change across all of these different facets you don't just get to pick one and that is the complexity of really trying to figure out strategies that as Helen said, like unleash the strengths that different parts of coalitions bring with different experiences so just kind of wanted to lift that up. So the second question I want to ask and Jesse I'm going to warn you I'm going to go to you first on this one is really about building power so the title of this session is not just like collaboration because it makes us feel warm and fuzzy inside and it's a good human but it is actually about collaboration explicitly for the purpose of building power. So, you know, if we are really thinking about governing power as not just the ability to be heard, and not just the ability to move our ideas but actually control a seat at the table of the structures and processes that shape the agenda setting and decision in the institution of government. I think everybody on this panel would probably agree we are not really holding it probably almost anywhere in that fully embodied sort of like idea. So I want to talk a little bit about the how we get there. So deepening inside and outside collaboration in the ways that folks have talked about in these examples, help us build power, and what are its limitations as a power building tool. And so I'll turn it over first to Jesse, and then we can open it up for other panelists. And I want to just, again, thank the organizers of this event and I'm always inspired to hear Sarah dream out loud, which is something I get to do pretty frequently thankfully and to hear Helen and Gail and Crystal talk about their experiences. Again, my name is Jesse Ulibiri I'm the co executive director of the state innovation exchange, and we're a network of state legislators moving bold progressive policy across the country. I did this work as an organizer myself, and had the great privilege of representing the area I grew up in, including the trailer park where I spent my earliest years life. And so when we think about the path to governing power is one both in my bones as an organizer of having been on the outside organizing issue campaigns voter registration efforts, building political power, and also the exercise of power once I was elected to turn many of the policies that I fought for on the outside into law when it became a legislator. And so this is not, you know, esoteric or academic for me I think there are three essential components about the path to collaborative governance that are central to our work. And that is refocus recommit and reimagine and I really want to dig in on each of these. I want to like shout out the amazing work and visionary thought leadership I've heard in the abolition movement, which is this dominance over frame this punishment and dismiss frame doesn't serve any of us and unfortunately it shows up in our politics everywhere it's baked in. And what that means is that we have a view of power which is power over power to harm power to do, but not power with. And so when I say refocus there has to be a shift within our collective movements towards power with what does it look like to hold and share power together where we may have different responsibilities and access, but a common vision towards liberation. And that refocus means that we're not saying that elections are the end goal. I will say early in my career, I was taught let's do voter registration let's do turnout let's change the dynamics because in Colorado before I was elected it was super majorities of Republicans. All constitutional officers were Republican so we let's just win majorities and that will be enough. But elections actually aren't the end goal. So we need to refocus our horizon towards equitable implementation of policy and at its core it means that governance is a condition of how we engage with each other. For me that is not revolutionary or new. That is the historic aspect of governance about how neighbors treat neighbors about how communities indigenous practice see the world right like for me this is at our core. Can we do things together that improve our lives. Simple. And if we can hold that collaborative governance really and refocus towards this view that it's about what we can do together. Then we're holding the view of the power of the tools in front of us is it allocating millions of dollars towards affordable housing or making sure that folks aren't being, you know, deported out of our communities or that we don't have institutions that cause continual harm and violence. What are we doing right like that's the focus and when we continually refocus there it puts us I think on the same page and allows us to say what tactics do you have available to you what power do you have inside or outside that we should move. The second thing I said is recommit. So, for me, again I'm going to root in my own experience as an organizer turn elected official. There was a sense. Let's get people elected. They'll do the good work and I will walk away as soon as they're elected. I'm going to say this again, we have to recommit to democracy as a practice, central to the health of our communities. And it's not just democracy is voting. It is showing up and finding ways to create new pathways for our voices to be heard. That means being present in, you know, the official hearings that happen in the state legislature or in city council chambers. That means legislators really commit to democracy as a practice you're not just there to represent everyone you actually have to do the hard work of governance of showing up back in your communities I heard Gail and Helen really talk about this and crystals organizing work is paramount here right. But it looks functionally different when we are sharing power. I'll give an example I worked on driver's licenses for documented folks when I was in Colorado's legislature. One of the most difficult conversations about strategy happened at 10 30pm at a local bar, or myself and now Colorado State Senator Julie Gonzalez went to talk to the small organizing committee of immigrant rights folks who have been gathered from the state. They showed up after state legislative sessions after they put their kids to bed, and they were angry that the governor was actually pushing back on the licenses issue. We had to talk strategy you had to talk about negotiation we had to talk about policy choices. And it was heated. It's 10 30 a night in a bar like we shouldn't been fighting over the details of policy but that's where folks could be at that time. Right. That's what we had to do we had to change the conditions of how people got information. They were hearing real time updates that I was hearing inside the capital, and then there were changes in strategy. But we have to recommit to this idea that we are in relationship with each other democracy is the constant practice of struggle. And so if, if there's a standard of leadership that says let's elect people. Let's send them into chambers just to vote yes or no or just to give a good speech. That is an F that is not the passing grade of public leadership. And similarly, we can't say let's send those folks off alone into those chambers and not reimagine that there's a need for us to show up in every space that they're in to push to demand to create new conditions of success. Right, that's what we mean by collaborative governance. And I'll say this is something I hear frequently from the legislators I work in with our within our network across the country. It's to reimagine legislators especially those of us who come from the communities which representing came out of organizing step into this positions and there's a lot of hopes thrust upon our shoulders. And there's a lot of reconciliation repair that has to happen, because we are working within systems that have historically harmed caused violence within our communities. We can't just go in and say hey we're here now and everything's fine in fact we have to reimagine the systems of power and push really hard. I think for that view we need to say there's a fundamentally different way that we connect into reckoning with those systems of harm changing those systems because we now have our hands on power. Great Jesse. So I'm going to turn it over to Holly in just a minute to kick off with some more questions I'm also going to use this opportunity to remind people that you can submit your own questions using the q amp a feature. And we'll have moderators who are monitoring the q amp a and fielding questions to the speakers through Holly, but I want to ask one more sort of trying to be a little bit provocative question before we jump into Holly. I think we've talked a lot about kind of like how collaboration can help us build power. I love to hear like what are some of its limitations like where has like like this is something we're working on together it is really hard. And we are constantly trying to make strategic decisions in a complicated environment that is not neat does not foster information sharing trust relationship building a more any of the really nice things that we've just talked about so if anyone wants to step in and just share sort of reflections on limitations that would be great and then Holly maybe you can jump in and take it from there. Yeah, I'm happy to jump in and talk about a little bit and I just I was really excited about everything you said because I feel like, you know there's something really exciting that we're doing here in north central Florida which I think is going to lead to many more successes.  Recently in, you know, north central Florida I'm a former city commissioner by the way, and I'm former because I recognize that this was much bigger than me and my like one or two dissenting, you know, one or two dissenting voices on the commission. It really has to do with our all the jurisdictions within our region right so city county school board state, you know, working together so what we're doing here is we're testing this kind of collaborative campaign model slash coalition building where we're making sure to recruit train. And like you said Jesse support the candidates once we get them elected, making sure that everybody is beholden to you know certain principles that we're all deciding together and not just signed together amongst ourselves, but as a coalition before the candidates even, you know decide what their platform is we're going to help the communities and doing issues based canvassing, and that is what our platform is going to be we're working with the organizers, we're making sure to recruit, you know, from the organizations. And not only that but the important piece of this and I want to mention is that we are absolutely working on on pre qualifying and and and pre election policy. And that's one what is affordable housing need, you know, across the city, state school board, and you know, soil and water. Does that mean that city and county are working together to make sure that we have land available for affordable housing. Does that mean that at the school board they're going to set aside some money or some land to build workforce housing. What does that mean at the state level, you know what kind of bill do you need to introduce to push forward kind of this regional. effort towards affordable housing so we're making sure that before we even elected because we're in a sunshine state so we're not going to be able to do that after we're elected that we absolutely are very aware of the policies that we need to bring forward. We're elected that worked across all the jurisdictions at one time with everybody that hopefully gets elected from the because of coalition that we're forming so this work starts. Not just when we're elected like you said Jesse but before that with the people on the ground informing that the issues and informing the policies and then getting elected and then making sure to implement that. I believe, you know, personally this is going to be the wave of coalition building and getting candidates elected in the future like we cannot continue to do the same things that we're doing and continue to lose like this absolutely needs to be collaboration absolutely needs to be coalition absolutely needs to be resource sharing and policy sharing ideas so that's what I'd like to offer to the conversation thanks. Wonderful and this is an honor. Thank you all so much Helen I was just going to bring you in and crystal as well I mean I think one of the things that's really interesting here is kind of this feedback loop mechanism that you all are talking about. Thinking through sort of before an election than the election itself and then Jesse I love your sort of equitable implementation of policy. And so I want to I want to bring Helen and crystal and Jesse and everyone in to kind of tease this out a little bit more and to think about also where are their trade offs I think kind of underscoring what Sarah was saying around these tensions of power. You know one of the things that I hear a lot is in this conversation okay co governance is great but what is in and what's out and so I think getting a real sense from all of you of places where you've seen those tensions would be great so thank you all. Sure. Thank you so much Holly. If we are doing our work right. We are running ahead of political moments that we're currently in. And that's largely because the political moment and the political realities are monstrous for many of our people. They result in massive deportations Philadelphia being the highest evicting city, one of the highest evicting cities in the nation. They result in children being taken away from their parents or schools closing down. So the political realities of the current situation are devastating. And as I said if our work is right, we're running ahead of a political moment that we're in. But there are times when we're doing that work where there's no question that there's just tremendous risk and I think Gail kind of touched on some of that there's a lot of uncertainty about what lies ahead. There are questions about what we might have politically, you know, within our corner from an outside perspective versus an inside perspective when when your fellow, you know, council members are the voting entity. Sometimes it becomes difficult when they become the target. And so you need to massage and work through some of these questions and issues. And then I think one of the hardest things to do is to, you know, pull people together. Those who are most risk within a political moment. And then those who are running as fast as they can to like, you know, pull us out of this thing to really like continually be in deep conversation about strategies approaches disagreements in particular. You know, we've had like a lot of heart to heart with our community members when we've disagreed. And there have been situations like, you know, when we were stopped in our eviction work by the municipal courts, I needed to see a change in the municipal court leadership that was terrifying to a number of our advocates who can't be out front on doing that kind of work. And so, you know, there's there's a lot that needs to be done. And then I think the second thing is, and this is also very important. There is a difference between external actors who are galvanizing for larger movements that exceed expand and are very long term. They exceed any election. And those who are in government who are, you know, for for better or worse, you know, with without any kind of like despite your best desires.  And so our language is not the same and does not have to be the same. The things that we're shooting for are not the same. I will not curtail a movement that that needs to go far beyond this political moment that we're in. I'm not going to stop people from saying like that's improper or that's not what we say or behavior modifying the work of activists that are profoundly important because fundamentally we have to change the mindset of what's even possible right now.  I think Crystal said this really beautifully. The reason why we invest in town halls and listening sessions and building out collaborative tables is because. The number of options before us are determined by the number of people that we bring to that table. If you have only a certain set of individuals at the table, all of whom are beholden to existing systems. Your options are extraordinarily limited. And when we massively expand the table, we massively expand those options. But at the same time, we have to recognize our worlds are different and elected officials cannot get hung up on, you know, wanting to behavior modify immigrant activists who abolish ice or defund the police. There is profoundly important work that is done at that level that cannot be seen as a threat within. But those of us who are in government have to figure out how to navigate that internally as well. And so I think that's some of the areas, you know, that make it a challenge because we are here to change this political reality. We're not here to keep it fixed. Yeah, and I mean, I wanted to speak a little bit to this question and the prior one in that. I think one of the limitations and some of the work that we still need to do together that really helps mitigate some of them those tensions is we have to do more work on power mapping our local governance institutions and understanding the opportunities and the systems changes that we can make. I mean, that is something that I think we are starting to uncover at different levels like within the bail system and judicial system in Texas. And it's been eye opening what we can do at different points and intersections. But I think we need to do that together with our leaders in and their staff right in governance. We need to have that shared vision because then we know where we're headed together, you know, two years, five years, 10 years down the line, the things that we need to shift and change and because we would be operating off of the same map then we understand the roles we have to play and when decisions need to get made and and why right and so I think that's a critical part and and then there just has to be full transparency and authentic relationships along the way. And that's from both sides and I think those are those are new things that we're learning to do together. When our executive director walks in to city council and we, you know, we just, we say it we're, we're going to go after you in this way. And, and it's okay right like this is what we need to do. And we're going to have your back on the next thing or you're going to have to have our back on you know we just, we have to be willing to just be upfront. It isn't a game, even though it feels like it sometimes it really is all about transparency and relationships. And so I think that is something that we just have to keep remembering. And again, I think, starting from a place of a real shared vision of where we need to go is a is a strong foundation for that. I want to give some context to some examples of what we mean, especially the tensions between governance and protesting and like when you're pulled in and pulled out what does that look like. For me, there were some very specific things I presumed as an organizer that I felt very different about when I was elected official. I thought that any kind of disagreement on policy was a lack of values alignment. And then I got to be an elected official and realize sometimes there are disagreements and policy that are super technical that I didn't fully comprehend, and it wasn't for lack of values alignment, it was actually some technical limitations of bureaucracy. I'll give an example, modernize Colorado's election system. It was a huge undertaking now we have one of the highest motor participation rates in the country. Wonderful. And then the DMV was using DOS operating systems green screens like we had no technology, right to even do motor voter registry it was just madness. And when I started, I was telling some of the election advocates like we can't do the thing you want yet, and they're like, Oh, you must be terrible you don't support the vision it's like, I support the vision. We're just working with computers from 1984 right like there's a little bit of that that we have to acknowledge and so the limitations of bureaucracy really do matter when you're governing. Literally the computer system sometimes or the amount of staff on the floor to process housing applications or you know the kinds of things that actually make government work. And so when there's disagreements and policy there needs to be that level of trust that crystal was talking about both directions. And it is, you know, organizers saying we're going to push you hard on X because we don't think you're there on the issue. That's totally true, and legislators sometimes have to communicate the real honest information about the vulnerabilities of our systems, or the limitations of bureaucracy and how they may not fully achieve the vision of our movements. I'm really proud of some of the work that happened in Nevada this year with our state director really looking at full range of access for indigenous folks in Nevada around voting. We had a statewide res tour with four different affiliated sovereign tribes to talk about the kinds of access issues in rural communities, lack of broadband, it was lack of connection to post office service, a whole host of real technical limitations of government that were keeping native communities from full voter participation. Without that kind of deep and collaborative view, the election administrators were unclear about what kind of policy changes were even needed because they didn't have the lived experience. So that's a little bit of what we have to do. I think the other part here is protesting can and should happen it should always continue it has got baked into our organizing ethos across the board. At the same time, it has to be done with a level of trust and this is why what Gail said about before people are even running you're building these relationships of trust you, you know, established during the time they run and then afterwards, because sometimes there's information inside that needs to inform the outside strategies. I remember there was a Republican leader blocking a bunch of legislation I was working on was privately communicating that to the governor. I knew the inside dynamics outside groups I had shared Hey, this is the person who's blocking some of the work that we want to move. And the outside groups decided to protest the governor who was actually in line with us pissed off the governor instead of actually going after our target was the real barrier. I when I was serving in the minority. Those kinds of things that really can limit our strategy and our potential. And I totally understand there's a lack of trust sometimes when we don't have the full view of information. But this is where we need to do something that I want to echo a mentor a friend of mine, though Mitchell he's the head of the working families party. He says we need to pull the sum of our parts into the strength of a fist, and know that in fact someone inside might have really important information that can shape a protest strategy that will be much more impactful. It's not always going to be right but the more we can do that the better refined our options are and we get to the right kind of power outcomes. Well this is such a rich conversation I wish you know we could chat all day but we are all everyone is doing such amazing work on the ground. So I'm just going to share a few kind of things I'm hearing and then we're going to open it up to the Q&A and thank you all for putting your questions in the slide out. They're really amazing. I mean I think, you know, for me it's sort of like a pyramid thinking about how do we start centering with people place and power and creating those mechanisms, particularly for traditionally marginalized communities to have a voice and to have a say. But then understanding all the machinery the bureaucratic limitations Jesse that you mentioned I think that was really illustrating. Crystal your point about sort of the power mapping that the ecosystem analysis understanding where all of these relationships fit. And then Helen and Gail you've provided these really rich examples of this on the ground so I'm going to turn it over and just share a few questions that we're hearing from the audience. For example, can the panel leader share moving beyond urban focus successes of co governance to heavily rural less dense population centers. And this idea of community cultivators which was such a great thing so I love that girl flipping the consultancy model on its head. Maybe you can speak a little bit more about the kind of government benefits to the community as well and maybe some of the tools out there so why don't we start with those and there's there's so many rich things here thank you all so much. I know I'm technically a facilitator but I can't help myself to jump in on the first one so I'm just going to do it to open us up. I think you know like I grew up in New York City politics, and like many people that grew up in a professional world predominantly shaped by like the, you know, beautiful ego centrism of New York I spent my first several years at local Congress like unlearning everything I learned about New York City being the center of the universe. So I want to share an example from our local progress chapter in New York which is you know, 175 around elected officials from municipalities large small medium sized rural suburban, all across the state, who work together collectively. And that work has been really transformative for me because coming in with this very like New York centric New York City centric thing. It was like a huge shock to me when I first started to do that work to see how changes that we were fighting for for like decades in New York City could pass in Albany up and down the Hudson Valley in New Berg New York in small towns and smaller communities so you know for example some of the most controversial police reform bills that were being debated in New York City in 2013-14-15 passed in Albany and in Kingston, New York before they passed and passed in stronger form in those places than they did in New York City. The work to move just cause protections for evictions has now moved in like half a dozen municipalities across New York State. And you know I think when we talk a little bit about I think we're all like, as kind of organizers and people who want to build power were often thinking about scale and the scale of our impact. And I think examples like this really show the kind of promise of innovating policy and smaller jurisdictions and when we go back to the complexity of the bureaucracy, the workforce challenges, like those actually look really different in smaller cities right than municipalities where you're not talking about 5000 workers you might be talking about 50 or 10. And so, you know you really can experiment with bureaucratic change in ways that I think often is outside of the grasp of bigger cities where there's more contentious politics and there can be greater barriers to experimentation. You know we have seen like the cities of Brooklyn Center Minnesota and Ithaca New York pilot some of the most pro like sort of comprehensive strategies around reimagining public safety and delivering policing. Those are not big cities right those are 40,000 people 50,000 people really trying to think about what is that what is innovation that is in line with our values look like at that scale so you know I think that just is a couple examples from kind of our broader work at local progress. And I think that's something that I think is important to you from a rural perspective with state legislators, and maybe to challenge an assumption that folks might be working with for this conversation. You don't have to be in a political majority to move policy or resource and collaborative governance doesn't just happen when you have, you know, all of the political power. You can actually engage in these key components and move policies or resource. So this year, the state innovation exchange the organization I'm co executive posted a strategy session on the justice for black farmers act that was being introduced in the US Senate and worked with black legislators all across the country to introduce policies including in states where there were no governing majorities. I want to highlight in Georgia, Senator Kim Jackson was able to work by organizing black farmers and rural areas and connected them to the policy ideas that were central there including land reparations and really investing in communities by doing the front end work of organizing across rural communities to talk about the specific and historical impacts of racism on black farmers. That kind of organizing work then built a clear sense of what the needs were. So when the ARP funding came down by state, Senator Kim Jackson was ready to actually deploy resources aligned with that vision connected to rural communities, based on a vision of the operation in Georgia. Right, like so this is what we mean like you can actually lead and be prepared for moments, even if you're not in a governing majority, you can be bold in your advocacy as legislators and movement actors alike. And it's because you're cultivating the relations of trust. So when the moments arise, you can move. If you have political power is a lot easier to move a lot of things a lot of things more quickly, but we shouldn't have the idea that you can be in a proactive forward stance, when you're serving in a political minority in fact, that's some of the ways that we see a lot of states innovating in policy and moving great stuff. Without, you know, full political majority. That's great. Others want to jump in on this question. Okay, well, there was another question that I thought would be really interesting for this group and maybe Helen, Gail, Crystal, if you want to jump in research shows recent voters feeling decreases in their agency the ability to make positive change in their community through engagement. What do you suggest Helen you want to start us off. You know, I don't think there's any question that part of the work, especially being a local elected official is to really get on the ground and showed that if you participate if you can engage and if you persist through things change. It's not that you just say it or you're shoring people up but you have to prove it. And I think that's one of the biggest tasks. When we, when I first came into city council. We had closed down almost 30 public schools and lost thousands of educators including most of our nurses and counselors out of schools. We held a series of town halls with more than 2500 Philadelphians. When we were under a state takeover and didn't control, you know, a school board, we didn't have a local school board. And, you know, there were no resources, but an overwhelming turnout of Philadelphians demanding nurses and counselors meant that nurses and counselors actually came back into our schools the following September. With not a significant change in resources with the same leadership of the school district. The thing that had changed was not them the thing that had changed was us. It was our belief that we could not let the intolerable last one day longer. It was committing ourselves to a process that would take time and recognizing that while it doesn't have to happen overnight. It does have to happen within a timeframe that you can count that can make a difference in a child's life, you know, and so, you know, that only launched more things through. We have school board meetings that that can last for hours on end now, because there's so many people engaged. And now I think one of the things that we have to remind ourselves of is that as we get better systems get better at refuting us. And so our processes need to change. Our strategies need to get smarter. The people who show up need to diversify. And that what we're really conscious of is that the things that threaten us from coming together are not so much the forces that are external. They are forces that are internal within movements. It can be patriarchy, misogyny, anti-trans hate, anti-blackness, you know, a language that alienates pushes away or tries to once again centralize power within movements whose only power is more people. And so, you know, I think that part of this work is to really show that something can be done and not to talk about it. And that is why I'm so committed to groups like local progress to the people on this call. Because we're trying to show every day that in the face of the most dangerous thing in the world, which is the idea that nothing ever changes, that when we take bold action together, systems topple. And sometimes we can be there to watch it all happen and be part of it. And so I hope that that gives people some courage and some faith. I'll jump in here for a minute. Thanks, Helen. Just to piggyback off of what you said is that the reason why people feel like their voices aren't being heard and that their input is not being considered is because many times it is not. And I think at the very outside, like with that feedback loop, we're missing an important piece of that, that we as anybody that can influence this need to be committed to. And that means telling people at the beginning what their feedback will do and how it's going to impact the outcome. So if you have a panel with someone we need to follow up or we invite people to the table to talk about, you know, how what the how their voices will impact, you know, policy, we need to be incredibly intentional from the outset to say, this is how it's going to impact the outcome, and then come back to the people to say, this is how your feedback impacted the outcome. And that is what is missing most of the time. So if we as people that are, you know, have the ability to impact that can do that from the outset, I think that that will give people continued kind of energy and hope to continue to to take part in the process and be a part of the civic engagement that we need. And I wanted to lift up, we lift up some of the examples that Gail gave earlier around organizing work that they're doing and really going out there and capturing people's voices. I mean, I think the pandemic has taught us, you know, to, we've been forced to restructure how we organize and how we engage and I think that's opened the door to many more opportunities of meeting people where they are in this challenging time to have the conversations with them about what their needs are what their priorities are how they can tap into government and into these decisions. And so I think we need to be thinking about TikTok and all of the different, you know, all of those different technical resources that we have now and how we convert that into real energy and feedback. And then I think just for for those that are already in government, and even elected officials who sit in safe districts that sit on resources that they don't really use, give that back into community organizations to have conversations the vaccine money has been given to organizations in Harris County to talk to folks about the vaccine but to also talk to them and ask them, ask community members questions about what's happening to your family right now what are your priorities what are the things that you need. And so we need to think about that reallocation of resources so that we've got money in the community to knock on doors and have those conversations. Just want to remind us all in the folks listening that we've survived a pandemic or surviving a pandemic and insurrection, a lot of isolation and so despair and hopelessness are designed outcomes of our current reality is up to us to inspire hope and to encourage a view of what's possible. And I think it's incredibly important that for folks who are feeling disillusionment with their power to remind them that all of the things that we aspire to are possible and especially possible at the local and state level. We've been talking about free college states have been implementing if we're talking about protecting immigrant families cities are innovating. If we're looking at the big changes happening at the federal government. Most of those come out of state and local policy first. Right. So the ways that we change the world happen in our closest proximity of power and influence. That's our neighborhoods. That's our people. That's where it starts.  A big thank you to all of our panelists such an inspiration. Thank you for the collaboration local progress the forge the new America events team and a reminder that there are links to the forge publication on co governance and our recent new America political reform publication as well.


Okay, this seems to work. I hope at least we are back from the lunch break and we have with us already waiting our first speaker for this block in the Brian room. I am going to invite, let's see, work. Hey, I'm going to invite Philip Jones from my night. Philip, where are you calling us from? London today, in the UK. That's nice. And have you been working from home all the time? Yeah. Like, like almost everybody. You're involved with a lot of asynchronous projects like quad, hypercone, and where else do people know you from? Probably that, maybe from helping maintain the pallets libraries as well, but probably those if people know me. Yeah, and today you're going to show us how to do our own asynchronous GI server from scratch, right? Yep. So we're really looking forward to that. So please start your screen share and show us how we can do this at home. Okay, so hopefully you can see if it's correct. Yep. I presume you can see everything. I can't hear you if you can, but I'm hoping if it's good. So yes, so I'm going to talk today about building an ASCII server from scratch, quite what that means and everything about it I'll explain in a minute. You can probably find the slides in quite a number of places at the moment, but you can also find them on my site, which is PGJones.dev. Excuse me. And you can find the slides on the talks page. I've also got some code to go along with this which you can find on GitHub. Under my name PGJones, if you look for ASCII server from scratch. So all the code I've got in these slides is also available on GitHub to help make things a bit easier. Before I get into the talk itself, I'll just tell you a bit about myself. So I think you already know about the bit of the open source work I do, and you can find me here. You can find me as PGJones on GitHub and GitLab. And on Twitter, if you wanted to tweet me, you need to remember this extra D. I was too slow to get the PGJones, so there's an extra D there. And as I just said, at the start of this year, I co-founded Moneyd, which at the time seemed like a great time for it. Since then it's proved a little harder. What Moneyd is, is it's a financial tool for people in the UK. So what it provides you is financial planning tools and guidance to effectively become your own financial advisor. So if you're in the UK and you're interested in your finances, please have a look at Moneyd. Okay, on to the talk. So our aim today is to build this green box in the middle. So we have a client talking to us and we can talk to some ASCII app. And ASCII, which I'll come to in a minute, is basically the definition of the interface between our server and any app. But of course we need to be able to understand what the client does. And whilst ASCII can do more than HTTP, it can do web sockets and stuff like that. For time constraints, I'm just going to focus on HTTP. So sorry about that. Okay, kind of like introduce why you'd want to do this and what you need to consider. I think I just need to say a little bit about ASINCO and the ASINCO wake keywords. So the joy, if you're in my eyes of ASINCO and awake is they're very explicit. It's very clear what's going on and what parts of code could yield control back to the event loop and what couldn't. The downside of this, of course, is that a coroutine function and async def can't be run itself. If you just call it, it's just going to return you a coroutine and do nothing. What you need to have is an event loop, run it for you, for example, like this. Of course, the bonus of that is the event loop can then interleave the IO as the whole point and know when to yield. And in our case, what we're going to be interested in is creating a server and listening. So this is the start server command. So, brief introduction there to kind of introduce ASGI. I'm going to start by talking very briefly about WGSGI, which is the web server gateway interface. So if you're using pretty much any kind of framework in Python at the moment, particularly Django or Flask, you're almost certainly using WSGI whiskey. And what it is in its simplest form is a definition of the interface between the server and the app. So between any server and your Django or Flask app. And what it says is the server will call a callable that takes two arguments, an environment and a start response. So your app at the very least has to be this callable. And the environment is a dictionary that fully describes the request and start response is a callable that the your app uses to tell the server when it's ready to start responding. And this callable takes two arguments, the status and then a list of headers. And then this callable should yield or return the body. So in a way of HPP, the server figures out what the request is, calls this callable, and then your app will start the response and return the body. So this is all very good. It's actually worked really well in the Python community but you can see it's got no async. So it doesn't work with a sink await. So your app can't be asynchronous. So this is where ASGI comes in, which I always pronounce as ASCII, but I'm sure I was doing differently, which is the asynchronous server gateway interface and it's heavily influenced by WSGI, as you can tell by the name. And to kind of show the comparison with that with the whiskey example I showed there, the interface is that you have a callable. This time it's asynchronous that takes a scope and two more callables are receiving a send. Now the scope is very similar to the environment. It's a dictionary that fully describes the request, but it doesn't say anything about the body this time. Now the application has to get the body by receiving it so it can call this receive. And then when it's done, it can send messages back to the server using the send, as you can see here so we send we say the response is ready to start with a status code and some headers, and then we send the body. So this is pretty much the same as the WSGI version, except for ASGI. So this is our interface effectively this and the definition of these messages that go between the server and the app is what we need to build on that side. Okay, so just to hopefully clarify what I was talking about there. So we're building the server. So STI is the interface between the server and the app. And the real advantage I forgot to say really is that you can switch out any ASGI server for any other ASGI server and not have to change your app. She's good at the moment there's like Daphne you've a corn hyper corn, you can just choose between and hopefully your own at the end of this talk. Of course, we need to do this part. So I'm going to focus on this part now the connection between the server and the client. So this is actually turns out first talk mostly a synchro bit here and what we need to do is open a socket on the server, listen for incoming connections, and then do something with that data. And this example I'm going to start with is just going to send every byte it receives back to the client. So if we start in the main, we use the start server command I mentioned earlier to create a server. And this server is going to listen on the host and port, and every connection is going to call echo server callable. So I'm going to get to in a minute. And then the server itself, if we just await its server ever methods, and it will just serve for as long as you don't interrupt it. So very simple and we can run this main in the asynchro run or some other way, which I spoke about earlier. So it's a server bit that we're really interested in so every connection is a new task is going to be created running this core team function. And this is going to take a reader and a writer and it's exactly as you'd expect the reader reads messages from the client and the writer writes them back. So a simple echo server simply needs to listen to everything the reader sends until it indicates it's done, which is the at end of file. So it reads up to 100 bytes, and then writes it back. And then for a bit of flow control, it waits for the client to have received that data. I'm not going to talk more in this talk for time reasons about flow control, but if you do go down the route right in your own server, this is really important, very easy to get wrong. It's actually quite pain. But anyway, so we read the data, write it back out. Then when the client said it's done, we close. So this is entirely controlled by the client. The server doesn't actually decide when to can close the connection. So as long as the client plays nice, it should be good. So let's test it. So if I run it this way, I can connect using a tool called town that. And then I can type in hello, and the server's going to send it back to me. I can type in goodbye, so it's going to send it back and then I can close the connection and the server's going to close it. So it's done everything we wanted to do. She's great. Again, this codes in the GitHub repo if you want to play around yourself. So what we've done now is figured out how to do this connection here. So we can send bytes back and forth between the client and server, which is great. But what these bytes are actually going to be formatted in or the protocol is going to be HP. So we really need to understand that. So let's move on to that. So I think if you're present in the last talk, you saw a snippet of this as well. I'm going to focus on HP one. I'll talk a bit about HP two and HP three later on, but let's start with HP one because it's much easier. So HP one requests looks like this. And we have a request line first, which has a method path and a version. Then we have the headers, which consists of a name colon and a value and possibly more of them. And then we have some where we have a blank line and then some body. So this is what it is. So our parser needs to be able to understand this. So this is a very simple parser I've written for this talk. And you can see we feed it lines to the key thing here is your kind of implicit, but there's line breaks between each one of these. So you know, it's the next thing. So we feed it the lines and it starts off in the request. So the first line should be the method path and the version separate by spaces. And as soon as we got that we can look at the headers. Now the headers, it could be one or many. So as long as we don't see a blank line, we think it's still the headers. But as soon as we see that blank line, we know that now we've moved on to the body. Everything that comes after is going to be the body. So not really any more parsing to do. It's just all going to go in the body. I'm going to ignore training headers for simplicity. So if we're in the headers part, this is probably the most complex bit. We split on the colon into the name and value. And then we append it to the list of headers. And we're just going to keep as well. If we find the content length, we're going to keep hold of that. So that'll tell us how long the body is, so when to stop reading the body when we're done. And we're also ignoring other ways of like, like truncating coding or anything like that. We're just going to do content length. So this is a very simple parser, which will allow us to pull out the important parts of the HP request, notably the method, the path and the body and the headers. Okay, so now we have this, we can combine it with the server we had previously and start to understand the requests coming in from the client. So this is it. So this is, if you just imagine I've switched out the echo server to this HP parser server, still gets the reader and the writer. And I create the parser and byte array to store the body in. Once again, I'm going to keep listening until the reader, the client says it's done. And I'm just going to feed the lines that I get to the parser until it says everything else should be body. And then when I am in the body states, I just keep reading until I've read as much as I expect to read. And at the end, I could print out the methods, the path, the headers and the body, which is what we want. And then I'll just write a simple response so the client doesn't get upset. I'll just tell it that everything was okay, but I'm not going to send it any data. I'll come to response later. Again, a bit of flow control and then close. So if I send a HP one request to this, I should print out all the important parts, send a valid response back, and then close. So we can test this. So we run it this way. And this time I'm going to use curl rather than telnet because curl will do the whole request for me. And just using the V flag so we can see it all, you see it's going to send this request line, then these headers, then the five bytes, which is going to be hello. And then it will get a response back and you can see when we test this, it sends all this and gets a good response back and the connection closes. So as far as curls concerned, our server did everything nicely. So as far as we're concerned, the server did as well because it's printed out the method here and the path, and then all the headers that passed in and the right body. So that's pretty good. So we now have a server, very basic server that can listen on a port and excuse me, and understand the HP request being sent to it. So now we have this, we need to effectively convert the HPB into ASCII messages. And to an extent this is what an ASCII server is. It just changes from the HP protocol to the ASCII protocol and back. So you can imagine we get HPN, we change it to an ASCII message, send it to the app. The app is going to decide to do something. So if you can imagine if you're using Django, it will match the path, send it to the right handler. The handler will do some logic and then send a response. And that response is going to be a new ASCII message, which goes back to the server. And our server is going to have to turn that ASCII message into HP and send it back to the client. So that's what we're up to. So let's focus a bit on the app. Sorry, I'll come to the app in a minute. Let's focus first on changing HP into ASCII. So I mentioned earlier on that the scope pretty much fully defines the request other than the body. And to fully define the request, and it's a bit more than this actually, but in this simple case for this presentation, we need the method, the path, the headers. And you see the ASCII scope looks like this. You tell it, it's HPV, has a method, has the path information, and then the headers. So the code to do this looks like this. So if we use our parser from earlier, a scope, which is the scope dictionary, is simply created this way. So that's great. So now we can tell the app about the scope, about the request. We also want to be able to tell the app about any body. And that obviously isn't going to happen for a GET request, but for a POST request with some content, the client's going to send us a body, which is some bytes. Now the scope is created pretty much the same way as before, exactly the same. But now we can send extra messages to the client. And these extra messages are going to be type HP requests. They're going to include some body. And for as long as the server thinks there's more body coming, we should set more body to true. But as soon as we know there's no more body coming, the content length is five and we see five bytes, we say more body false, which tells the app that it's got everything it's going to get about the request, it can then move on to response. So the code, again, is quite simple. It's just a simple function that takes the body bytes and a little flag to see whether there's more bytes coming or not. And we just create a message. And we can send this message to the app. And I'll show you how in a minute. Okay, now coming back so the app has got everything it needs to know about the request. Now it needs to tell us how it wants to respond. So the app does this by sending a message to us, to us as being the server, and that type is going to be the response start and the status code. And it usually 200, but it could be anything. And then whatever headers it wants to send. So this is the first message, the, the app will send back to the server when it's ready to respond. And the second message will be if it has any body. So if it doesn't have anybody, this should be blank and more body would be false. But if it does, you can see it has hello and and us as a good server should probably check that the content length matches the body it sent us. And the right today doesn't, but you can imagine that's a nice extension, just to make sure nothing strange is going on. So just to summarize, when we get a HP request we create a scope, and we pass that to the app, we call the app with the scope, we then pass asking messages, defining any body to the app. And then we can decide what to do with that request, and then send a response and that response is going to be a start response message, and then any extra response messages. And so that's the app process. So now I can actually tell you about the app itself. This is a hopefully quite simple app, which is very similar I hope to the echo server we said earlier, it's basically going to echo out any body that's been sent to us but now it's running over the HP protocol. So you can see, in this case we don't actually care about the scope. All we want to do is receive the messages from the server and get the body, basically so every message we get every event, we get the body out and extend our body copy. And as soon as we're told there's no more body, we break out of this loop. So the server tells us about all the, all the crests all the body, and then we do something to some logic. This could be like I said just like matching the path, deciding which route to call but in our echo app it's all we know it's going to do is send the body back. So we start by saying, everything's good, and we're going to send you the link for the body bites back. So this is it basically. So this is a very simple app that will just listen to all the messages from the server build up a body and then send that back to the server expecting the server to then echo that back to the client. So now we have a test app to use we can actually build our server and our server will call the app so just to qualify here what we just spoke about here was an ASCII app you can use any ASCII app for it but this one's kind of simple enough to show an example. So what we're trying to build is the server. What I'm going to focus on first is this flow so I spoke through this is kind of the messages come from the client HP, our server turns them into ASCII and sends them to the app. So I'm going to focus on that first. And this is the code for it. So this is a little bit more. This is a little bit more code so I'll take a while to talk through it. Again, it's another server. So very similar to the two we've spoken about before it just takes a reader and a writer. We use our parser familiar. And this time we create a queue to put the messages we're going to send to the app. So this is, this is what this is for so two app we're going to send to the app. We're also going to keep account of how much, how many bytes we've read, just to know when to finish, basically. So, again, we're going to keep reading as long as the client hasn't told us it's done or there's a disconnection. We feed the lines into the parser as before. This time, if we find after the passes in the body states that there is no body expected. I maybe it's a get request or something like that. We simply put a message to the client that says, I'm done. And we can break out of this loop. If not, we're going to start reading in the body. And we're going to send a message to the client that has that these body bites in and it tells us tells the client whether there's anything left. So we're keeping track of how many we've read. I just noticed what's making me hesitate is this should say read here rather than length body otherwise it would break. So sorry about that typo. But hopefully you can see what's going on here. We're reading the body from the client and that's coming in chunks. Very likely we're sending each chunk to the app and we keep in track of how many we've read so that when we've read as many as we expect we can break out of this loop. So we've hopefully here past the entire request from the client. And now we can create a scope as well. So with the combination of the scope and this queue of messages that we're going to send to the app, we have everything the app needs to understand the request. I'll just note as well here that you can kind of see how you may be thinking that we've read and done everything before we've called the app. And you're right, this is to make it simpler to show on the slide, but a real ASCII server could have actually created the scope before it even started to read the body. And the app could have started to understand and process the request whilst the body was still being still arriving. That's one of the advantages of it. But it's a little hard to write that on a slide. Okay. So we've now got the information coming in, turned into ASCII messages to send to the app. Now we need to go back as well. So the app's going to send us some ASCII messages, which we need to understand, turn into HP messages and send back to the client. So this is the code for that. So now we have another queue coming from the app. And now I'll just note that we actually do call the app here. So this is the bit where the app's going to do everything. It's going to read from the two app queue and fill up the from app queue. So as a server, we just need to get the messages from the app queue. The first one we expect is the response starts. And when that happens, we just write out the status code. And we write out the headers and a blank line. Then the next messages, we expect our body. So as long as the, there is a body in it, we write it out. And then as soon as the clients, the app, sorry, has told us there's no more body, we can break this loop as well. So that is it pretty much the combination of this code to send messages back to the client. And this code to read messages from the client gives us an ASCII server for HPP. So let's test it out. Again, this code is in the repo. So we'll use curl again. So this time I'm going to do the same thing as earlier. I'm just going to send hello to it. It's going to send all these headers. But what we're expecting our app to do is just echo back hello to us. I tested it with a lowercase h. So sorry about that typo as well. But that's what it does. And it's working as we expect. So as long as clients do the very limited HPP one that we support, this will work fine. And yeah, it works nicely as an ASCII server. So if you follow along, you now have your own ASCII server. So what's next? Well, whilst the simple HPP parser I showed you there does work and it gives really nice benchmarking scores. In fact, it is not stable enough for production and it doesn't cover any near enough edge cases. So I'd recommend you use something like H11 for this, which is a sans IO HPP parser. And you can then build on from there and there's an example in the repo for this talk if you want to look at that. Going any further, I think you should take a look at hypercorn, which is a project I maintain. So hypercorn is an ASCII server that supports asyncio and Tria workers sports HP one using H11 HP to use in H2 and HP free using a quick. It also supports WebSuckets using WS Proto.  So that's it. Hopefully you've got a good idea of what makes up a very basic ASCII server. And yeah, I look forward to your questions. Oh yeah, thank you. Thank you very much for the talk. I think you overwhelmed almost everybody because we just have one question. What's the benefit of writing this by hand compared to using a library like Flask. Flask is is just the the app side. So you'd need a server for that as well. Now for Flask you probably use something like to unicorn or you whiskey which are your WS GI servers. So Flask itself isn't yet ASCII compatible. So you wouldn't use Flask. But if you were using say ASCII one like Starlet or Sonic or any of the others, then you could use a server like this you've written yourself. There is no advantage. I would actually say you probably don't want to write it yourself because there's a lot you can get wrong. However, I think it's quite interesting to know how this works and to have a good understanding of the code you're using. So hopefully you've gained that from my talk. Yeah, thank you very much. That was really interesting. So let's have some virtual applause and everybody at home please clap along. Thanks. And just a reminder to everybody who wants to learn more about this. There is a separate chat room for this talk called talk ASGI server so if you press controls K and ASGI you will find it on the score. So if you have any further questions you will probably be able to go there but I see there's a last minute question coming in and we should ask that it's why Django and would Django and tornado be considered WS GI. Yes, they are both WS GI. However, I think they're both. I'm not so sure about tornado but Django certainly is gaining ASGI capabilities as well so Django free, I think, or 3.1 which is going to be released this this summer is is going to be an ASGI framework as well. So you could use ASGI servers like hypercorn or Daphne or others to serve your Django apps. And so, for example, from the previous talk if you wanted to play around HP free, you could start hypercorn HP free survey Django app and play around have fun. And we have one final fast question from Javier do you recommend to use hypercorn with fast API. It depends really on your use case and what you'd like to do, but yeah, it's certainly I mean I would personally because I work on hypercorns, but yeah, you certainly can it's up to you. Okay, thank you very much again. That's all that we have time for now. So, we have to get ready for next talk so see you at the conference and in the chat rooms. Bye.