All right, let's get started. Welcome, welcome, everyone to our community call. We're excited to be able to give you guys a sneak peek behind the curtain about leaking DOIs as well as letting researchers earn open science badges. I guess we'll start out by introductions because I don't think I've met everyone. Hi, my name is Mark. I am the product owner for OSF registries. So essentially whenever someone has a question about registries, they kind of come to me and either I can steer them in the right direction, learn about what some of the pain points are and try to make sure that we can connect with the different communities and be able to reach their goals when they're trying to pre-register and register their research studies. And today to kind of help me with our conversation and our little preview is my friend and colleague, John. John, would you mind giving me a quick introduction, not to put you into spot? Hi, yeah, my name is John Walls. I am the senior backend engineer on this project. So I'm here to kind of give a demonstration of how the APIs work when we get to that point and to answer any questions about that piece. Awesome, thank you. Speaking of which to kind of get some of our kind of the basic rules during the session. If you have any questions, please go ahead and put them in the Q&A and we will make sure that we address them at the end of the demonstration. As we put out in the emails, this demonstration is being recorded and we will disseminate this after the call is done. Anytime that we're answering questions, such like that, we'll probably end up cutting out that part or and also try to remove any other kind of anomalies. So everyone will be getting a free recording of this once we're done with the presentation. So with that, let's go ahead and get started. To kind of go ahead and begin, I'm gonna go ahead and share my screen. As a quick little primer, this is currently on our staging. It's not on production, even though it may look like it, we're on a staging server. So everything that you'll see is kind of being done behind the scenes has not been pushed out, but it kind of gives us a really great example of what it's gonna be like when it's actually put onto production. We're all researchers and partners just like you will be able to start using it. So I'm gonna go ahead and share. Great. So to kind of get started, I'm gonna go a little bit page by page so that we can all get acclimated this together. First off, what you're seeing right here is a registration overview page. Assuming most people might be familiar with preregistration, but if not, it is essentially putting out your study protocol or data analysis plan so that way you are kind of transparent and rigorous about what you're trying to study and that you're being honest and that you're being creditable. So it's essentially just like whenever you start putting it towards a grant it's the same thing, but instead of just giving it to that funder you're actually putting it open to the public. All right, with that being said, one of the favorite things that your researchers and people you interact with, whether you're an institution, preprint or registry, is we're gonna have this nice little call-out saying, hey, we have a new feature. We think this is a great opportunity for us to start using these types of pop-ups to really introduce new types of workflows and anything that we kind of refine or that we edit or add on. So with this one, it kind of points out to resources. Resources is a new tab that is gonna be accessible on registrations and that's exactly what we're gonna be digging into because that's where you can start linking outputs for that it's data, code, publications, et cetera. You can now be able to put all that in resources and you can link them through a DOI and I will show you that in a second. The reason we're going with DOIs is because, one, they're permanent, which means no matter whatever happens it will always be accessible and we want to make sure that when it comes to registrations things have permanence and that they are properly archived. And also two, it now gives researchers the flexibility to link things both on and off of OSF. So if they have another registration that has data in it they can just take that link and put it in there and people can access it all in a single place. Same thing if they have data or files on Zenoto they can get a DOI and link it directly towards their pre-registration. That way everything is housed and wants to get a point so your research, or you have to ask your research teams and your collaborators to send give me your DOI for your registration and you can access it, all that information right from here. And it just really helps with making sure that people are being open and transparent but also encourages compliance which has been a big buzzword here as of like these last couple of years making sure that research teams and others are being compliant with their work. So with that being said let's go ahead and get started into this and we'll go ahead and click on Got It and let's dig into resources. As you can see I already have a couple of resources here and let's say that I'm a researcher and I want to add in another piece, a DOI I have another data set that I need to include because I did I like almost like a replication but also built upon it. So to do that you would click that little plus button right there and we had this format and so that way they can put in a specific type of like a DOI every single DOI has a format and we want to make sure that we can help them put in the right format that's easily accessible. So with this one I'm just going to go ahead and click this resource type we have several. So our first one is data we have analytic code, materials, papers and supplements and these are the first five we're going to start out with with this initial release and the ones that we're going to pushing for and if there are others that you might think of please let us know we will discuss this with our own top committee as well as our badge committee and see exactly where we can go with that. Again, these badges are intended to help you to encourage open science best practices. So I said I was going to click data so we go ahead and do that and you can provide a description the DOI and the resource type will always be required so researchers will always need to put that in. Description is optional and this can be as detailed as the researcher wants. So for this one I can put something along the lines this is and let's put that in a dintum for my previous data. All right, so once I'm done with that you'll click preview and it just gives the researchers another opportunity to make sure everything's accurate make sure everything's okay and for me, yep, and I will click add and then boom, I have another piece of data right here. So it's that easy. Let's say that I accidentally did not check the data and I need to change it, it's also very simple. I can easily click edit, go back in, change it to whoever I need to, click save and it'll automatically update. Every single time when a user updates their DOI we validate those DOIs to make sure that they actually exist. So even though there's a small little typo and that DOI doesn't exist it will check and say, hey, you may want to come back here and make sure this is accurate. But if it checks out it'll be go ahead and it will go on through. Just another way to make sure that the information that researchers are putting in is accurate for me when I cancel and there's also the opportunity to delete it and that's to help make sure that what if it's with the wrong project or they ended up putting something they didn't because for human we make mistakes you can easily delete them as well. So that's easy clicking delete verifying make sure that this cannot be undone so there's no undo and then click delete that easy. So if I was a funder and I wanted to check compliance all I have to do is go to this registration click resources and here's everything that I would need. Secondly is actually before I get into that I'm gonna go ahead and let John talk a little bit about the API because all of these materials will be available through our API if that's the way I know that you like to go. So with John I'm actually going to pitch it over to you. All right, do I have screen sharing permission? Let's find out. So starting from the same registration that Mark was looking at. I don't know if you are familiar with any of our APIs some of you probably are some of you probably aren't but they are all publicly accessible. So we can look at this registration by going to api.staging2.osf.io-v2 registrations and then the Google. And from here we can see all kinds of information about the registration. Notably we have added some of these values for these different types of resources. So every registration will tell you at the very top level if it has resources added for each of the five types of data, analytic code, materials, paper, something. So if we go down into the relationships which is the thing that all of these OSF API entities have we can discover the resources. Actually the easiest thing to do by far. Okay, so you can find the link here or you can literally just type resources at the end. So if you're doing this programmatically you would find the link in that relationship field of the big return JSON blob. If you're exploring through the browser you would just go to resources and that will give you the list of all of these resources. So we can see each one tells you the type it tells you the PID. We use the PID term PID for persistent identifier generically as opposed to DOI because we do have a goal supporting more identifier types than just DOIs in the future. You can see again the registration that it's linked to and any description that's provided. And this will give you the full list for all of these things. We also have the ability to just look at the resource individually and we build restful APIs. So if you want to do any manipulation through the API instead of through the front end you can send requests to this URL with the information that you want to update in order to make updates to it. The other notable thing is that as I showed you before we have those fields on the registration or has data, et cetera. And those are all filterable. So you can look at the full list of all the registrations on the OSF and find only the ones that have each type of this information. So this query will give you all of the registrations that have associated data and you can do that for any of these things. And that will give you just the registrations in the system that fulfill this criteria. Probably the most interesting stuff so far I will happily answer more questions if they come up later. All right. Thank you, John. Appreciate that. One thing to kind of follow up on is those are only pertainable to public registrations, not embargo because only public registrations are accessible through the API as well as when you're searching for them through OSF registries. So if you have a, if you're a partnership with one of those things where you can't access embargo registrations then that might be a limitation. However, if you're, for example, an OSF registries moderator, you have access to both. So that might be something that would be helpful for you. All right. I want to go back to sharing my screen real quick because I want to talk about one other thing, which is going to be what we're calling open practice resources, which are essentially almost our badges and kind of a loose term called stamps. So if you are unfamiliar with those badges or introduced in approximately, and think about 2014, if my memory serves me correctly, as a way to incentivize research teams to share the materials, specifically with data to help reduce our replication crisis that we were experiencing. And the psychology science, psychological science journal found that that actually encouraged open sharing, especially with data by about 33%. And that's something that we want to encourage as more and more journals start adopting these factors. But we wanted to go a little bit beyond that and say, how else can we use these? And a great example is also those with institutions, funders, other kinds of organizations that are like research teams, et cetera. So we want to really be able to maximize that to incentivize us and encourage it. And that's exactly what you're seeing not only on this page, but also over here that you'll be able to access when the overview and resource page, other registration. I'm going to go back to the overview just to make that a little bit easier to scan. But as you can see, we have five different items here, but there's a slight little distinction. We have data that is a open science batch, which is when it's in an open repository, wherever they added data as a resource, they look at this batch. See the materials. Materials has been a batch that we've had since 2014 as well, just like data. And you get it about the same way. But we've added a new batch here in the last couple of months called analytic code. This is the code that you use to analyze your data. So now code that you will use for such example, building software and stuff like that. And so that is a new code that we're going to be starting to disseminate and encourage. And journals are going to start evaluating and potentially implementing. And so these are the actual open science badges that you might be familiar of. And this is a great opportunity for researchers to show, Hey, here's some more materials from our registration. Here's all my open materials. They're right there. But then we have these two other things as well. We have papers and supplements. These are not technically badges. I think right now I've just been concerning them stamps because they're a little bit different. Badgers are ones that have been openly adopted by journals thus far and some of other partners where papers and supplements have not. But it's a really key piece of information that we want to make sure that we can disseminate out there. For example, open publication is one that's a really big incentive. We want to encourage that. So we want to give them the stamp of papers. For example, you can also do publication. Do I, if you have a deal, I great. If it's not a deal on something different, you can do it there as well. And there will be a point where we will be migrating all publication, do I's to papers, but that will be in a future release. And then lastly, we have supplements. There are so many different materials that are generated from a research project. And most of them can be put in one of these top four items.  So we have supplements as a kind of a catch off. It does not fit into some of these. And you can find those exactly what that criteria and what those examples are in our help guides, as well as in one of our OSF projects that I'll be disseminating in the email when I send out this recording. That way, if you're not familiar with these criteria, you'll be able to have that resource right in front of you. And you can share that among all your research teams and your other collaborators. Not only can you find these on the registration itself, but if you go as a researcher and you want to see exactly what types of registrations do you have your materials on, you can go to my registrations, which is a great house for you to scan through all your registrations all at once without having to go through each individual project. So I'm not sure if this is well known with your researchers, but if people are asking, I have a hard time finding my registrations and projects stuff like that. This is a great way to just filter out those registrations. But here's a great example. If I have barriers and facilitators to adolescents, et cetera, I can see that I have a batch for each one of these. So I can see that this is a, my registration is applying to open science best practices and I'm keeping my things open and transparent with community because I want people to trust my research. Down here with my sugar, concentration and taste preference, I can see that I'm not doing such a good job as a open research advocate. I don't have anything linked down here. So this is a great way for me to kind of scan on through saying where am I being compliant and where am I not being compliant or where am I practicing my open science best practices and where am I not. So as a researcher, it's a great way to kind of gauge that. And then lastly, let's say that I am a, another kind of researcher kind of want to say like, I want to see exactly what's out there and who already has data that I can kind of build upon, either replicate or expand beyond. And the best way to do that is to search through our OSF registries dashboard. So to do that, you'll click registries and I'm going to cheat and just click enter. And you can easily see how you can scan through all these things. So this is where we kind of play with it just to make sure things are working. But I can see that this registration, which is mine, I'm being great. And I have all my badges and stamps. I'm being a great advocate for open research. This one, I can see that if I just want to look for data, this one doesn't have data, but he does have code. He does have materials. So it's a great opportunity to see exactly which of these research teams, which of these contributors are actually practicing open science to the best of their availability. And those who I can kind of connect with and build upon to really kind of make sure that we have opens, like access to those resources and really streamline scientific progress. So just want to make sure we guys get this little sneak peek about what's coming on down the line. So that way you can either find ways that people implement this within your workflows or see how these may refine some of your workflows. We want to give you guys a little bit of heads up about this and this is slated to be released on August 29th. So not next Monday, but the following Monday. And with that, I'll stop sharing and ask if anyone has any questions. Say, and we don't have any Q and A questions too. So hopefully that's a, that means that it was easy, super helpful and everything else. I would actually like to ask you guys a couple of questions and you don't have to answer them now because I probably end up asking them in the email. But here at the product team, we really want to make sure that we are accomplishing your goals, your needs and best best bit will support you as you want to try to get your research teams to be compliant and practice open research and be able to gather those materials. So some of the questions that you'll be seeing from us is how do badges and these resources potentially affect your, your workflows rather than it is something that's helpful, something that might be a hindrance. We want to know about that so we can best support you. Same thing, what are some of the benefits that you might see of this new feature and potentially also what are some of these concerns. So you may not have to think of something right off the top of your head, but as you start implementing these or you start leveraging some of these, just let us know and we'll be happy to connect. And since we don't have any questions or anything else, I guess we'll, we can go ahead and don't early. So thanks everyone. Really appreciate it. And you'll be hearing from me shortly. Thanks.


And so the way that differentiation is not embedded in people's biology but produced by the systems people live in. And I think that then calls upon us to consider what is justice in the social contract? Rather than assuming it's natural that some people are living in harm's way, as what are the responsibilities of societies when you've got this massive unevenness in the possibility of health and well-being? And I'll again return to it's even harder than we thought. And so you pointed to the intergenerational responsibilities. And now environmental health research makes very clear that your exposures can affect more than one generation. And what does it mean to be just to those? How do the courts respond to a kind of third generation effects? And part of that is because the newest environmental health research sheds light on endocrine disruption and disruption of the hormone system which implicates the reproductive system. And so just the intergenerational cascade of effects we now understand a lot better than we used to. And then we say, well, what are the legal and social responses to that? Thinking about how our system of justice itself reproduces the lack of accountability that produced the injustice in the first place. And there's more and more health outcomes that are connected to environmental exposures than we knew even a decade ago. Diabetes, for example, which was long treated as like a dietary disease and genetic is now they're connecting to plastics exposure. And so once you start recognizing the environmental determinants of disease it just complicates healthcare, health diagnosis, insurance, the whole thing shakes up. I think it's a lot harder for people that make their living kind of in the belly of the beast. It's harder to find opportunities to do good works. I think the most beautiful thing is people having the capacity to collectively evaluate what's going on and to imagine and plan together for increasing and equitably distributed prosperity. So it's not so much that I can imagine a world that's otherwise, but perhaps it's the teacher in me. I can imagine us doing a better job of trying to architecture that world, as you've said. I love that. Architecting, equitably distributed prosperity. I love that. Let's do it. That was beautiful. Someone's opinion may contradict yours. Where's my friend Alan? It's all about your perspective. Who are we and what is the nature of this reality? Five, four, three, two, one. What's up everyone? Welcome to Simulation. I'm your host Alan Sacian. We're on site at the American Anthropological Association's annual meeting for our second partnership with them. We're on site in Vancouver, Canada doing it. We are now gonna be talking about the anthropology of environmental health and much more we have Dr. Kim Forch and joining us on the show, hi Kim. Thanks for coming on the program. Thanks for having me. I'm excited to talk about this with you. Let's start like big picture understanding what is this, is this like humans and the way humans are in our environments, whether it be in the most primordial environments among trees and beaches and in metropolises amongst the crazinesses of potential environmental disasters. Teach us about this. Environmental anthropology has grown and diversified greatly in the last couple of decades. There was a time when it was mostly a study of how people develop ways of living with specific environments, what their food, what food practices were, how they made use of and manage natural resources. I came into the field in the early 90s when anthropology was shifting into the study of complex and urban environments, even industrial environments. So the kind of environmental anthropology I do starts at the fence line of chemical plants when they're sometimes blowing up, always routinely polluting the communities that are nearby. And so the environmental injustice movement or environmental justice movement emerged in that same period in the US and around the world. So communities organizing themselves to make sense of local pollution, respond to it. And so my research has focused on communities exposed to industrial environmental pollution, how they've responded, how the courts have responded, and importantly, how scientists have responded. And so how science has developed to try and understand the problem, how science has changed legal decisions, affected the community's ability to mobilize to improve conditions in their communities. And so there's a lot of moving parts to it and that's certainly just one thread of work in environmental anthropology writ large. But one of the key questions is, how is environmental health unequally distributed across social groups? And so it's a key site for the production of inequality, which is a long running social question that anthropologists have focused on many things come back to. So it seems as though then throughout time we have moved from these like immediate return hunter-gatherer style living to the agricultural era to now the metropolis era. And now in the metropolis era, correct me if I'm wrong, the poorest people usually take on the biggest amount of the environmental hazards that we live with, the most polluted air, the most polluted water, the most polluted environment around them. Most closest to the landfills, this type of stuff. Is this about? Yes. I mean, this is the focus of my work and of many anthropologists now. What's interesting though is that we're now realized that rural spaces are also often hyper contaminated because of agricultural pesticide use, industries in the countryside, land runoff, et cetera. And so the sense that the rural environments are pure and the urban environments are, I mean, that's gotten more complicated. And so there is a, and the traffic between industrial and rural spaces is of course part of freight traffic, for example, that moves agricultural goods into ports and cities. So it is a system of global circuits that produces and spreads pollution. But it is, you're absolutely right. It's a, not new, but it's a form of anthropology that shifted the field away from the traditional society focus, which was its signature for much of the 20th century. It does seem like it really is really close in my heart this symbiosis that humans are with their interconnectedness to not only each other, but their natural environment that they're around and that environmental anthropology from that angle being like how do the humans actually engage with their environment that they're in is very beautiful and it feels a natural, but then there's something strange about when you move humans to these metropolises stacked up in these boxes and then having this whole process of like just there's conspicuous consumption happening, there's a bunch of mental health issues happening, we're disconnected from each other and from nature. There's so much that's happening. There's millions of people living in such close proximity to each other. I mean, the just inequality, like we were just talking about, there's so many variables that are being crunched into metropolises, even studying the environmental anthropology of what it's like to be trapped in like a whatever a 200 square meter box for a majority of your time and like never hearing the sound of birds and only hearing buses and how that affects your neurology and physiology. I mean, there's just, how do you figure out how to compute the environmental anthropological variables that actually affect our lives? Well, the panel that I was just part of was focused on the importance of much more intensified interdisciplinary collaborative research because there are lots of variables. Some of them we can get at as anthropologists focused on cultural dynamics. We primarily use qualitative methods, but that can powerfully supplement the kinds of data collected in other fields. But for the most part, we're not yet really bringing those analyses together, but you're right to understand both what health is and if you understand health is determined as much by social environment as biophysical environment, there's a lot of variables and it's of course shaped by what people think their health is, what news waves are telling them what their health is, what pharmaceuticals can research how it affects government regulation. It all is a tangle. And so understanding both what's going on, what's good governance of that phenomena. And I would argue that the governing structures that we have set up now where a department of health is separate from the department of environment, which is separate from the department of transportation and from the department of education. There's functional reasons those are separated out, but certainly that what many people call the silo effect has undercut our ability to understand environmental health. And that's one among many things anthropologists look at is what is the social formation by which we try and understand our own problems? Yeah, this is really interesting. This show is a super multidisciplinary show and so for you to also be seeing data silos and how to eliminate the walls and how to make it so that the data points can actually have pattern analysis happen across all of them to find unique insights. I love that. We talk about that a lot on the program. And so then is that then one of there's solutions for understanding the multivariability and the data points better than there's solutions for just the environmental justice in general, like why is it that the poorest people have to have the poorest, the most health hazards and the poorest health outcomes from the inequality that happens with environmental justice. I mean, you just look at all of the different slums around the world and it's just beyond comprehension, shanty towns, people just not being able to have adequate health and also therefore adequate actualization, like people bringing their best selves into the world, their unique gifts into the world in a social fabric that's conducive for that it just feels like sometimes that multi-millionaires and billionaires, I'd find themselves at the tops of these condos and out in the suburbs and mansions and then poor people are stuck in shanty towns. And so how to actually deal with making a fabric that's most conducive to the flowering of consciousness in general is a very complicated equation as well. So there's like that plus all this data. So yeah, give us these like focuses. Well, I think of, so one kind of answer is to say, I think that we need a deep historical consciousness to really understand why are certain communities predictably living in hazards way? And often it goes back to land use laws a century ago that made it impossible for certain groups to live in certain parts of a city, for example, or access loans so that they could purchase homes in a certain part of the city. And so the way legacy systems affect where people are today because it's amazing how often you get the sense that instead of compassion or a sense of political outrage, it's like, well, why don't those people move? Well, they can't move because poverty produces poverty. And so the way that in the United States, for example, you have African-American and Latinx communities most affected by environmental risk, both catastrophic, fast risk and slow risk. And you say, well, why? Well, it's not only, it's the question of why they live in those places in the first place. And then when generation after generation, they live in those places, they have different bodies. They have different health outcomes. And so the way that differentiation is not embedded in people's biology, but produced by the systems people live in. And I think that then calls upon us to consider what is justice in the social contract? Rather than assuming it's natural that some people are living in harm's way, as what are the responsibilities of societies when you've got this massive unevenness in the possibility of health and wellbeing? Yeah, this is an excellent way to put it, that as though in our most naked form that we are, we are supposed to have a path to bring our greatest gifts into the world, but there are cultural pressures that make it so that rather than being born into a social fabric that enables it, it makes it so that we're born into a social fabric that makes it even more difficult to achieve that actualization and to bring these unique potentials out into the world. And so then what then is it that, is it then like a galvanization of efforts on the scale of governments or private companies or of resource allocation non-profits? What is it that can then make it so that poverty no longer breeds poverty, but that there's avid environmental justice efforts that can happen towards people bringing their gifts forth? Well, some of it is saying no, telling industrial corporations that they can't cite and add to the burden in particular communities. And it's repeatedly communities that have compound disadvantage. They already have very high pollution levels and yet a facility is permitted to come in and add to it. And there's just been recent coverage by the Guardian in Louisiana between New Orleans and Baton Rouge, which is a string of chemical facilities. And I don't quite understand why, but there's all these new facilities coming in. And so, and this is literally the belt where the chemical plants are built on the foundations of the old plantation economies. And so you can literally see the reproduction of injustice. And so questions of, should you disallow companies from citing bait because there's historic injustice in a region, that would be a new question for governance that we've barely taken on. But to complicate it even further, many of the regions that are most affected by the kinds of things I study, industrial facilities are also at great risk because of climate deregulation. So Houston, for example, one of the cities I study has now catastrophic rain events that affect the chemical plants because they lose power. Their cooling systems go down. They start, you know, emitting both routine. Sometimes they catch on fire. And so the way that if we thought we had a governance problem before, we now really have a problem because you've got risk compounding risk, compounding historic disadvantage. So it really is a potted, a boil, a perfect storm, however you wanna think about it. And we have a lot of science telling us that the problem exists, that it's unevenly distributed. We need to do a lot more research to understand it well. But I think the bigger challenge is not the science, but actually being creative about how we govern ourselves where these inequalities and injustices aren't exacerbated as we deal with changing, changes brought by something like climate change. You give the solution of doing something to prevent the further exacerbation of injustices. This is crucial. Another way seems as though that there is, like grassroots efforts, I mean grassroots efforts to prevent the further injustices from happening. There's also just awakening in general that happens, that can be catalyzed. I mean this is something we talk about a lot on the program is that the more that people awaken to the nature of this reality, the more that they are less likely to do injustice upon others. And does that resonate with you, this idea that we are all one? Well it certainly resonates with me and the teacher in me where I think that one of my goals as a university teacher is just to make sure that these very, very rich stories are in people's imaginations because I think a lot of the injustices we're talking about people don't know about. They don't, our standard educational approach doesn't get at the multiple drivers of this kind of reproduced injustice. And so I think these, they're sad stories, but stories that are good to think with about why systems fail, about what makes a community, what gives a community well-being. And there's gonna be hard choices. And just an example, if you've got a community in a high risk zone either because of industrial facility or increased risk of flooding, and they're tied to that, they've lived there for generations, but they're at increasing risk. So are they asked to move? Are they told to move? Are they moved as a community? Are they moved as individuals? Do you need the whole community to agree to make the move? And all of these questions are happening at sites around the world now. And we are really fumbling in the dark because we've generally leaned towards saying, people have a right to stay in place. That's been the progressive position. And there's many reasons for that. Dislocated people, usually it's compounded harm. On the other hand, when you use what is the governance responsibility when people, we know that people, it's not a 500 year storm, but a three year cycle of extreme weather events, for example. So really the kind of way we've thought about even treating people right and taking good care of communities, a lot of our paradigms are really exhausted. And we're gonna need people from, with a lot of different sets of eyes and skill sets, across disciplines, across generation, across social classes and groups, to come together to imagine any different way to do things. And I think anthropology is a key resource, in part because it's the founding of the discipline, values variation in thought and sees variation in thought as a social resource and not as a problem. And so I think that's one part of imagining otherwise and building a different society that anthropology can help with. So this big picture idea is that we have, as we've moved into different circumstances of living and birthing children into the world, that there has been environmental justices that have changed over time, where it's like there's a certain amount of potential for a child to bring themselves fully into the world, given a certain birthing context and given it a completely different one. We can label that as an injustice that the social fabric is not conducive to that child's actualization, whether it be some sort of a problem with their own, like a public health issue in that region, whether it be just any sort of environmental health concern regarding, I like this idea, just this ability, like anthropological gift actualization. So we want the social fabric to be able to unleash people's gifts uniquely into the world as optimally as possible and design around that and eliminate as much of the environmental injustices as possible and make it as conducive towards the actualized processes. And I'll again return to it's even harder than we thought. And so you pointed to the intergenerational responsibilities and now environmental health research makes very clear that your exposures can affect more than one generation and what does it mean to be just to those? How do the courts respond to a kind of third generation effects? And part of that is because the newest environmental health research sheds light on endocrine disruption and disruption of the hormone system which implicates the reproductive system. And so just the intergenerational cascade of effects, we now understand a lot better than we used to. And then we say, well, what are the legal and social responses to that? How did the endocrine system get? Implicated. Implicated. Certain chemicals disrupt the way the endocrine system works and some of the research knows at an incredibly fine level of detail, like if a fetus is exposed in a couple of days and in the 10th week, then there's likely to be certain kind of cascading effects. And so the idea that even before a child is born that you've got environmental health effects, but it even goes farther behind that. The panel I was on this morning, one of the researchers spoke about the crisis or perceived crisis infertility rates and pointed to what they think is about a 10% of couples in China dealing with infertility. And so it's also the conditions in which people even have a choice about having children. Based on what is implicating the endocrine system and causing the downfall of the crisis? When you've got really acute exposures like in factories, there's a very clear connection between exposures and fertility. So what chemicals do we know? A whole lot of them. Sweet of things? Yeah. One of the chemicals that's gotten, or a chemical class that's gotten a lot of attention is BPAs, which is absolutely ubiquitous. It's in the lining of cans, it's in plastic bottles, it's in receipts, the kind of coating on receipts. You can taste something that does not taste like water when you drink water that has been in a plastic bottle that's like in the sun or it's been in the bottle for like six months or a year before you drink it. Like you can taste something that's not just water. Like it tastes like it's absorbed some of the plastic. And if you think about it, we've done, at best, a mediocre job regulating hazardous chemicals that come from what the regulatory regime calls a point source, a factory, amidst a certain pollution. What you're talking about is ubiquitous everywhere, creeping under the doorstep, but to be fair, I mean, this was the focus of Rachel Carson's work in the Herb Book, Silent Spring, which was published in 1962. So it's not entirely new knowledge for sure. I think really we haven't developed a governing response to it. So it's like as we've industrialized, many people have had issues with working inside of factories and having exposure to certain classes of chemicals, but then also there's just on a mass population scale, those that have progressed to, let's say, just advancing the countries into whatever first world countries that they're exposed to BPA and other forms of exposure to endocrine system implication that then costings like infertility. This is all very interesting because there's so many downstream effects that it's hard to measure longitudinally over like 50 years, what it does. I mean, we were just talking about this earlier this episode, just people being jammed into little boxes on top of each other in metropolises. Well, when you don't get that much natural light, when you're not getting that much exposure to fresh air, when you're not getting that much exercise, you're not getting enough sleep because there's just economic machinery pressuring you all the time, you're far away from your family, you're far away from raising children, all this type of stuff. There's many downstream implications that happen, including the onset of cancer and cardiovascular disease and Alzheimer's and all these other things that are very difficult to measure this, the intricacy of the nuanced multivariability, yet it's quite physiologically evident on a moment-to-moment basis when you actually feel like you're divinely at your peak state of performance versus feels like me inhaling the cars exhaust on the street in a breath of air feels like it actually sheds minutes off of downstream my life versus indigeneity, people that are still living in complete symbiosis with nature. They have just a much more cohesive understanding of the interconnectedness of everything plus their environmental anthropological awareness level must be like a 90 on a scale of zero to 100 and ours in metropolis feels like it's 20 or 30. It's disastrous, it feels disastrous. There certainly is what some people have called a cultural disconnect where people in urban environments don't know where their food comes from, don't know where their power, their electric power comes from, don't know where their waste goes and the kind of systems thinking that is needed, you can see how it's been structurally undercut by the way we've organized our governments and organized our educational curriculum for example, but it's also beyond what any individual could make sense of on their own so it's not a matter of getting rid of the silos we certainly need people that specialize in transportation infrastructure or cell biology or so it's a challenge of thinking about the whole but also really learning to leverage very diverse forms of expertise in concert and I think it's the in concert that is really the kind of next generation of challenge and there's a lot of things working against that, things, the rush to kind of make knowledge proprietary, put it behind, paywalls, even among academics there is an enormous pressure to kind of demonstrate individual accomplishment that works against very widely acknowledged need to work across disciplines with the communities that we study and so there is a change in the way we approach knowledge production, a change in the way we use knowledge, one of my own current projects is focused on how cities around the world, we're working in about 12 cities are trying to understand their air pollution problem, building monitors, outfitting citizens with monitors, what all they're doing and then how they're trying to move that knowledge into the governing system. Great, yeah that visualization component is so crucial for them to see their air pollution levels. And in some places the structure of city governance and its history makes a difference in kind of how things move and you easily see that some places are more data rich than others, there also can be a real investment in data almost as a diversion, get more data, get more data and it distracts from actually doing anything with it. So data is not always a solution but trying to, and again understanding variation, none of the cities we look at because we have five cities in India, in the US, we've looked at Beijing, none of them get it right entirely but by understanding comparatively you have a better sense of what are the variables, what are the moments of opportunity or intervention. I mean I think that's again what anthropologists are strong, we can make a strong contribution bringing that comparative knowledge into the mix of trying to imagine both what's going on in the world in a different way of organizing it. Yeah, there's two points there that are so big. The first one is when you push the edge of knowledge are you trying to immediately create intellectual property and hold onto it yourself to try and profiteer on it or reshape rules and regulations or are you trying to democratize, you like make a tool and then democratize it to the world and let hundreds of thousands of scientists continue pushing the edge with it which actually enables eradication of suffering at unprecedented rates plus expansion of human potential faster as well. And I mean that's becoming very clear. And then this other point that you brought up was if you do things like take something as complex as the air pollution and visualize it or if you take something as complex as inequality and also begin to visualize it make it so that like rich people can't just silo themselves off and try and escape off to the next celestial bodies but rather have to actually focus on solving the SDGs and solving the most complex issues that literally disrupt the lives of the people that make less than $2.50 a day on a normal basis around the planet because their health and wellness, I mean at the end of the day do we want a revolution to happen? Do we want rampant inequality to continue? The answer is absolutely not but the solutions that have to come into place are ones that require us to do things like visualize the problems, implement the solutions and then to do things like just on a global level just how can we collaborate better around these biggest pressing challenges? I mean you gave this example about chemical plant disasters you give this example about asthma rates I mean like when we have this phrase in NIMBY it's not in my backyard so I don't give a fuck about it I mean that's literally the worst frame of mind to have you are not separate from other people this is all one planetary organism that we're all a part of and to understand that when someone suffers it doesn't actually increase the pie in your directional favor it actually makes it worse these are your brothers and sisters across the planet that it's our collective responsibility to make it so that they can bring their unique gifts into the world and unleash them like that seems like the root problem would you say that like one of the root problems of our issues that we have like the most you know the most upstream problem of what we face is our tendency to feel separate from each other and separate from nature rather than interconnected? That's certainly a root problem and I think that a global capitalist economic system not only engenders that kind of sense of separate success but rewards and encourages it and so the question of how do we create economic prosperity through a different system that wouldn't you know at the outset presume that or have inequality as a rootinized something that's produced by the system it's just like you can know a factory emits routine everyday pollutants a system a capitalist system produces inequality just something the system does and so I think we're gonna have to go back to really basic questions about how we organize the production of our societies what the kind of ends are and I think that not all people are gonna be persuaded by the empirical documentation of injustice or inequality because that's a question for societal deliberation and so again I mean how do we what do you do if you're at the table so to speak with people who have naturalized inequality as kind of part of the nature of things and I think this is we need a system that allows us to kind of work through that and certainly empirically you can say that everybody starts social that everyone depends on the social fabric to be what they are even if they're the wealthiest people in the world and so there is a way that we can bring analysis into the equation but there is just greed and just political persuasion over system so that people maintain control is an intransigent problem that I would argue is getting worse not easier to deal with. This may be the greatest issue of our time is figuring out how to catalyze feelings of interconnectedness, of unconditional love, of deep presence with each other. That being this most upstream root issue would solve all of the downstream symptoms that sometimes we just go and target solving symptoms. And one example of that from my research that is useful to think about is we pay a lot of attention to catastrophic disasters, people in acute need after a flood or a storm or an earthquake and I think that it's easy to think of it as that's one those are exceptional events not normal events and they can distract attention from the everyday structural violence that happens because people don't have access to clean water or to a healthy food supply or to avenues of governance where they can change their own situation and so we need to be careful that in attention to suffering that it's not seen as exceptional and disaster's a funny word I tend to insist that disaster can be fast and slow because you can have disasters that are not on the surface, they're very quiet. Like this one, this is a slow disaster that we're talking about that's forming. And disaster can be distracting because people think disaster is kind of end, it's like when the fire trucks go home it's over but what does it mean to remain responsible for a disaster in the really long term because people don't recover communities in the social fabric has changed forever and especially if they face more acute disaster more recurrently which is happening but it's harder to recover if the base you're building from is incredibly precarious. And I will also another favorite argument of mine is one way to reduce the precarity is to invest in our educational system so that people can understand the complex systems that are compounding disadvantage and creating harm because it's not surprising that the increase in the meanness in the inattention lack of care for other people corresponds with a divestment from public education. And so there is something about understanding where people are at that engenders the compassion that you're saying is so important. We've been now toying around with this. What could possibly be more important than having the children when they're born into the world have a deep feelings of interconnectedness, unconditional love, presence and having children in school do things like collectively do project-based learning around solving the sustainable development goals. I mean if you can mix together feelings of deep interconnectedness with feelings of trying to tackle the biggest challenges that humanity faces like together, it makes it so that all of the things downstream get solved by that most upstream thing of education. But you also gave this really interesting example it started making me want to actually analyze where the fault is because how do you take billions of people that now live in metropolis as in trying to prescribe variables to the weight of the prescribed weights to the people that have the greatest amount of influence over the sufferings that are being catalyzed by the issues at hand.  And like why not make it more transparent if someone's buying a fifth yacht or a 10th house or a fifth watch or if they're investing money into something that's destroying the environments or indigenous people's lives or reshaping rules and regulations by hiring lobbyists like just like some serious consequences need to be, I mean, we don't want to inflict we're pacifists we don't want to inflict harm onto people but some very serious psychedelics need to be administered into those people's lives. Psychopath delics would be good but one of the questions I have my students debate is whether corporate negligence that leads to harm to workers or communities if people should go to jail for that. I mean we send people to jail really quickly for the kinds of misconduct that poorer people often get kind of caught doing but we rarely, rarely hold corporate CEOs responsible and they make an argument that how could they have known this plant halfway around the world in India was an operating at maximum and in the case where I started my research career which was a chemical plant disaster in India that was owned by an American company Union Carbide and for literally 30 years there was a tug of war over getting the CEO of Union Carbide at the time held criminally accountable in India and the US wouldn't extradite it. Wow. And some people said you can't blame one person for the many and there were many many things that contributed to the disaster happening but it started with plant design which was clearly the responsibility of the parent company in the US had to do with not training workers enough during a time when they were planning to shut the plant down but whose decision was that? And so the question of where do you locate responsibility in these complex systems? Geez. It's in many places but elites are often protected from that responsibility. And so that- Epstein didn't kill himself. Yeah, please continue. But so thinking about how our system of justice itself reproduces the lack of accountability that produced the injustice in the first place. And I think that some of that is the force of law needs to be implemented not restrained. I mean one thing that I harp on is we so often focus on the abuses of law and there are many at the same time there are hugely risky and harmful activities that the law basically doesn't touch and let's go on unregulated. And so we've got both going on at the same time. What an insane example of like trying to like extradite someone that could be viewed as completely at- Responsible. Held responsible for the death of how many? It's debated but 10,000 is a good number to work with. Of deaths? You, yep. There were at least 3,500 in the 24 hours or in the immediate aftermath. Some people argue that there were 10,000 then. It was of course hard to keep up when you had massive body burnings and things. Which chemical plant explosion was this? Union carbide plant in Bhopal, India. And this is the story gets- Union carbide plant in Bhopal. Yes, and it's a very complicated story because it was a plant set up to make pesticides hoping to make India food self-sufficient. So the way trying to do things that are good have these kind of underbelly. But even from the beginning they built the plant with too much capacity because they wanted to corner the market. One reason, you had so much capacity and thus the amount of chemical release when things went badly was huge. 40 tons of toxic gas were released in one night in that city. There was no planning. So people didn't know how to evacuate. They of course didn't trust public authorities as it often happens in disaster scenarios. And what you still see is when you see catastrophic events like this, people acting as though it's a complete surprise. We didn't see this coming even though you've got communities living on the fence line of factories. And it's really counterintuitive to think that you wouldn't have problems in these facilities given their technical complexity. Given the fact that they're not regulated, there was a small, small pesticide, not a pesticide fertilizer facility in Texas that blew up, I believe in 2014 in West Texas, not a complicated production facility but really a mixing facility. When it blew up, it took out essentially the whole town, a middle school across the street. That was, it was after hours so there weren't kids in the school. But in some of the after math reporting, a regulator had not been on site at that facility in like a decade. And so the idea that we're regulating, even when you've got really, and this high risk things being stored. And in this case, it was ammonium nitrate fertilizer which was used in the Oklahoma bombing, the Texas city disaster in the 40s that took out Texas city. It was an ammonium nitrate fertilizer explosion. So again, it's not, we shouldn't be surprised when these things blow. And we need to build our societies either where we design away from the risk. And one of the really exciting areas of work is green chemistry, where you design the products and chemical processes we need but with chemicals where the structure of the chemical itself is not dangerous. So you're not trying to stop things from leaking from the plant. You're trying to design at the front end. And that's really exciting and important work. Most upstream is using green chemicals that could never even cause some sort of massive explosions and killing. I couldn't believe it when you said the numbers were 3,500 at least in the India explosion. That was mind blowing when you said that to me because most people don't think of drastic things like that, causing that much damage. Who's held responsible? How can we mitigate it? You went to the most upstream issue. That's a great one of green chemicals. Another one is like, why are people able to reshape rules and regulations in the favors of avoiding sentences, jail sentences? Or this is a big deal. How do you hold people that are adding zeros to the end of their paychecks that are causing environmental issues and public health issues for other people's lives in the process of adding those zeros to their paychecks? How do you hold them completely responsible? Well, one of the reasons they're not held responsible is because that whole system is seen as kind of natural. Rich people will be rich people. The rich people will have power. They'll influence our political system. And again, an important role of a field like anthropology is we may not have the answers, like how do you fix that? But we can say it doesn't have to be like that. There's a lot of different ways to organize social life in different historical periods and different geographic contexts. And so to denaturalize a system that's so productive of harm is a first step. And I would say this happens at the kind of educational moment way upstream, where the sense that kind of the way things are just have to be. And that sounds ridiculous that any that that would really shape what's possible in a society, but it does. And if you, and I think it's more likely that you'll naturalize the status quo if you don't have educational spaces where people can learn to kind of see in the crevices, see the system patterns, see comparatively. And so it's critical to have that kind of deliberative space in societies. Yeah, the hardcore focus on upstream solving these big challenges is crucial. What was the anthropology of environmental health regarding asthma? Well, asthma rates have skyrocketed in the last number of decades. Some of that's probably a matter of data collection reporting, but asthma isn't as difficult to diagnose as something like autism where you, there's a lot of debates over do the rising rates, or is it just because they're, what they're counting as autism is different. There's clearly been rises in autism too, but asthma is simple comparatively. There is a lot of different kinds of asthma, but you've got soaring rates. And even in the early 90s, there was often a sense it was really treated as an in body disease. You sort of had asthma and you took care of the individual child rather than say, how are ambient conditions like air pollution producing asthmatic conditions? And I think the World Health Organization really started highlighting air quality as a driver of health in the last decade. I mean, because it really dealt with infectious disease before that. And so imagine what a kind of phase transition, an organization like the World Health Organization has to go through to move from infectious disease to air pollution as a driver of morbidity. And there's more and more health outcomes that are connected to environmental exposures than we knew even a decade ago. Diabetes, for example, which was long treated as like a dietary disease and genetic is now they're connecting to plastics exposure. And so once you start recognizing the environmental determinants of disease, it just complicates healthcare, health diagnosis, insurance. The whole thing shakes up. Environmental determinants of disease, interesting. So the World Health Organization only recently 10 years ago put air quality index as a... I wouldn't say it. I don't know when they first did it, but they first started giving real visibility to it and have done, and it's moved the dial. I mean, I think it's changed the discussion because a lot of everyday pollution was seen as just a necessary effect of industrialization and economic prosperity. The idea that the smell of pollution is the smell of money. And I think that even now, though, you have governments arguing that pollution levels don't... They pushed back against the claim that they have deep health outcomes, which are counterintuitive against the science, but there is a deep sense. And some people, I think, genuinely believe that economic development is a more basic mode to prosperity than environmental health is secondary to that. I think that's shifting, but it's still a challenge. Yeah, just a big question on that front in general is just what are we building? What are we building? So many people talk about an artificial general intelligence or digital superintelligence. That's what people are talking about now. That's what we're building. Well, I think that the promise of AI likely extends what it can do for us. On the other hand, I think that the complexity of the problems we've been talking about are going to be data intensive. Like, we're going to have to have massive investments in data infrastructure and data practices and data expertise in order to have any sense. Not only if we don't want to just characterize problems, we want to change them. And I'll give you just an example that's not even planetary in scope, but it's although it's happening all over. So city governments, including Vancouver, are making decisions about whether to allow ride sharing that Uber, should Uber be allowed to come to town? I was super surprised when there was no Uber lift here. And there are massive advantages, particularly in some places. For example, in Indian cities, ride sharing, there's an Indian company called Ola, has given, and Uber is there, have given women increased mobility that seems safe because you can be tracked on your phone, you don't wonder where you're going. So there's many advantages. On the other hand, there's clearly many disadvantages. You displace other transportation providers. The increase in density in vehicles in Indian cities in the same timeframe that you had the development of ride sharing is impressive. So there's just vehicle density and associated air pollution. There's the fair labor for the drivers. I always talk to my Lyft and Uber drivers and often it's not a good, secure way to make a living. It's often they feel duped into it. The other kinds of transport providers get dislocated. So it perturbates the whole city for this to happen. And city officials have the responsibility to say we're going to let them come or not. And they might just say no because the transportation sector is highly organized and say no, but it's even more than that. But to say how do you assess whether this is equitably distributed advantage to this city? What kind of data would you need? And you would need qualitative data about transportation options and the quality of a certain kinds of job. You would need lots of quantitative data about vehicle density and pollution levels and health outcomes from that. And somehow that needs to be aggregated and not overly determined in advance by corporate interests that would benefit from a certain decision. And so just imagining that one single decision that cities already are trying to make is just incredibly complicated. And I think there's a hundred decisions like that that governing officials need to make daily. And so building the infrastructure, the workflows, the expertise, the sensibilities of what's fair and right. I mean, there's just a mangle of things that need to happen together. Yeah, inclusive stakeholders is a very interesting one. So when a new technology gets deployed into a city can it be that there's a social fabric and the social contract that's actually designed where it's not just the investors and the employees of the company that get the most but also the workers that are doing like a gig economy or the customers of that service and the community that that company's located can each gain ownership of that flourishing because they're all technically a part of it. There's stuff like that that's really interesting. There's also just, I think really, again, just going to the most upstream issue just catalyzing feelings of deep interconnectedness, presence, love at young ages, solving these big challenges, getting kids involved in solving these big challenges in like project-based learning environments. I also think don't, I mean, I think it starts there but I also think it's really important that people in various roles in our society, a city engineer that's helping decide if you put in a new metro line, someone that works for a corporation that makes chemicals, people can make a difference by having strong analytic capabilities, a really robust ethical imagination where we don't need to tell them this is wrong, this is not wrong, people need ethical freedom but they need to go into that with a strong understanding of what the implications of their actions are. And so the idea that a certain kind of transportation option has these cascading effects on other people both and going forward inter-generationally. And so that line between how do you mandate compassion is a real paradox but one that I think that we can better, much better prepare people for than we are now. It's like a marriage of both doing it at that grassroots as the child's born into the world and designing the social fabric that way but also like very top-down like have government officials and big owners of corporate companies to have them also dose into these feelings of interconnectedness and have them also partake in that designing and architecting of that next world. I wanna ask you about your own personal experiences with deep feelings of interconnectedness or unity or oneness. How have you connected to those feelings? I think I have a deep sense that my role in the world as a professional, as a researcher and teacher and just as a citizen, I'm a parent that you have responsibilities for people beyond your close circle and that you are responsible for it all, so to speak. And so the sense of putting in a good day's work to kind of keep the world afloat. I think I was deeply socialized towards that and not in a kind of politically, radically family but a sense that you did write to your neighbors, you were mindful of downstream consequences. And so I think it, being a teacher's a good profession because it's a slow route to care and change but it does feel like a route that works, that's important. I think it's a lot harder for people that make their living kind of in the belly of the beast. It's harder to find opportunities to do good works. And so, and I don't think it makes sense to kind of blame them individually. It's like, how do we produce systems where people don't have everyday options to exercise ethical commitment in a kind of systems level way? Yeah, we are all responsible for the outcome of this world and treating it like that's part of all of our unique blueprints as we're birthed into the world is paramount. And we are responsible for each other in this planet as stewards and the future of the environment of it and the next generations of it. The last question that I wanna ask you is, what do you think is the most beautiful thing? Wow, the most beautiful thing. I think the most beautiful thing is people having the capacity to collectively evaluate what's going on and to imagine and plan together for increasing and equitably distributed prosperity. So it's not so much that I can imagine a world that's otherwise, but perhaps it's the teacher in me. I can imagine us doing a better job trying to architecture that world, as you've said. I love that. Architecting equitably distributed prosperity. I love that. Let's do it. That was beautiful. Kim, thanks so much for coming onto the show. Really appreciate you. Thank you, great questions. Thank you, this was super fun. Thanks everyone for tuning in. We greatly appreciate it. We'd love to hear your thoughts in the comments below on the episode. Let us know what you're thinking. Check out the links in the bio below to Kim's work. Also check out the links in the bio below to the American Anthropological Association. Support them. And support the other artists, the entrepreneurs, the leaders around the world that you believe in. Support them and help them grow. You can find all of our links below to our show. You can support us on PayPal, Patreon, Cryptocurrency. You can design cool merch and get paid all those links below. And go and build the future, everyone. Manifest your dreams into the world. We love you very much. Thank you for tuning in and we will see you soon. That's a wrap.


Let me try to get a power cable here. So yeah, I'm going to be talking about Regal, which is a functional abstraction over WebGL to make it easier to write modular, reusable 3D engines and visualization tools. But first, I'll say a little bit about myself. So just to get out of the way, I do live in Hawaii. I live off-grid. And for the last five months, I've basically been living on an active volcanic lava flow trying to survive.  But it's starting to get under control now. So I'm kind of getting back into the flow of things. So anyway, let me say a little bit about Regal. So these are some examples that people have made. So initially, I put Regal out maybe about a year ago. And since then, a lot of people have actually adopted it and started using it in real systems here. So I'm going to show, first of all, a couple of things that people have made with it. So oh yeah, this is our cooperative website, so I should point that out first. So this is a little creative project that's basically using Regal. You can see this here. I don't want to go too much into it, but all the effects are in WebGL. This is CAD company that does finite element analysis, and it runs on your browser, more or less. And this also uses Regal for the visualization. Ricky Roycer has written a bunch of different demos using Regal. Just show a couple of these really quick. So this is like a real-time GPU simulation of erosion on some terrain. Here's another one that he did, which is some kind of n-body simulation with like a million particles, and they're all kind of forming together and making galaxies and stuff. So it's sort of like a little creative sketch. Here's another one that he has, which is a bunch of particles flowing around in 3D. This is one by Greg Tatum. I don't know exactly what these are. They're kind of terrifying, but this is also all in WebGL, and they're really cool-looking, so I'll give them a lot of credit for that. This is a terrain demo by Ry Tyrol, also using Regal. This is a convolutional neural network, so this is also running on the GPU using Regal.  So it works, it's a comnet, and it's in WebGL, so that's kind of cool. This is a visualization from 538 showing gun deaths in America, and it's also using the same framework under the hood. And then also there's a ton of examples in this gallery here, so just pages of this stuff, so you can click on any of these, check it out, and then figure out how it works or look at more of the details there. So okay, with that all out of the way, I can now see that it's a real thing, people are actually using it. So what's it about, why did I create it, and what is it good for? So, at a high level, if you want to do computer graphics like 3D graphics or 2D graphics, there's two big approaches that people consider. So you can either grab some 3D engine out of the box and just configure it with different options and then use that to render your scene or your game. So for example, you could just grab Unreal or Unity or 3JS, and then you just set it up and then maybe you got something that works out of the box and you're all set. Or the other option is you can roll your own and do it yourself, and on the web this makes a lot of sense because you have a limited amount of bandwidth to download stuff so you don't want to burn megabytes of JavaScript loading features you're never going to use, and also you have more control over all of the details. So this can be good if your project has to be maintained over a longer period of time and you need to customize it and add special features to it, but the difficulty with this is that you're then going to be re-implementing a bunch of stuff. So you either have something where you have more control, which might be better for a one-off project, or it might be better for a longer term project that has to live for many years, or you have something where you can basically get something up and running right away, but then maybe down the road you have problems. So this is kind of annoying, right? It would be great if we could do both, right? What we want is something where everyone has the full power to do whatever they want with the 3D engine that they're using. So we want people to be able to get into the shaders in their 3D engine and write their own code with that, should be able to dig into whatever kind of geometry assets are inside the 3D engine and you can then mess with them or just play with that data doing something novel rather than just having some opaque asset format that you can't introspect into. We want reusable components so you can take just tiny pieces of different rendering engines and put them back together, and things should be more explicit rather than just some implicit thing that has a bunch of weird configuration options that you have to know about before you can do that. And then finally it should also be open so that anyone can go in and start adding pieces to it and build exactly the 3D engine that they need for the problem they're trying to solve. So I made some earlier attempts at this goal and the first idea, or the first big approach was this StackGL project. So I worked on this with a variety of different people in the NPM community. And it was marginally successful. So there are sort of three big parts to StackGL. There is a collection of WebGL wrappers which basically take the core WebGL API and then break it into different classes that abstract things like shaders or buffers or different parts of the system. There is GLS-LFI which was a module system for writing shaders and a set of mathematics and geometry library for doing geometry processing. So stuff like surface triangulation, working with higher dimensional arrays and so on. So StackGL was sort of a mixed success. I would actually say that the mathematics and shader logic that came out of StackGL was incredibly successful and it worked very well. The WebGL wrappers had a lot to be desired and I don't think they never fully realized this broader goal of creating a modular system for writing 3D engines. And the reason is that each of these little WebGL wrappers had a ton of coupling because they were just trying to take out little parts of the WebGL API piecemeal and never were able to take some broader, more holistic approach to this thing that could actually solve it. And so there's a lot of coupling between these modules and also because they were fairly complicated and the interfaces were very staple it was hard to test them and there were unclear specifications for how a lot of things needed to work. So it didn't really work that well but I mean at least GLS-LFI worked well and the math stuff is still very useful and lives on in a variety of other projects today. So Regal is an attempt to go back and revisit this and fix some of these mistakes. So the goal is to basically kill all of the shared state that exists in WebGL in the same way that React kills all the shared state that exists in the document object model. And also while doing this to go back and do something that's well documented, well specified, carefully tested and also very low overhead. So reducing the total size of all of the code assets and also reducing any runtime overhead in the system. So just make something that's small, fast and kills all shared state in WebGL. And that's what Regal is about. So what do I mean by reactive or no shared state? Well, we've already seen a couple of talks today about this. The basic idea in a sort of more traditional rendering pipeline, something like 3JS or the document object model is you have this large external graph of objects, right? Usually in some hierarchical structure. And you have your data, which is what you actually care about. And then you have this data binding thing, right? Where basically you wanna update something in your data, then you have to go back and update its representation in that graph and vice versa. So you have this thing where you're constantly trying to keep these two copies of the same data in sync all the time. So it's this sort of dual right problem in a database where if you think you have an index here and you have the actual data in the database, then when you wanna update it, you have to update the stuff in index. And so you're always fighting and making all of this complex stuff happen in your code to try to keep these two copies of what is really the same thing in sync. So that's basically what most things do. And the reason things tend to look like this is that if you're just working in writing a 3D engine, it would be nice if you could only think about the scene graph and not worry about this. But when you're writing an application holistically, you have to consider the entire system. And so this data binding is problematic, right? It creates a lot of friction. So there's another way to do it, right? The other way is now as popularized by React, but going back even further to things like immediate mode, GUIs from Molly Rocket or a variety of other older ideas in a sort of functional rendering system. You just have a single copy of your state and you have a function that transforms this into pixels on the screen. So you don't have this data binding stuff going on. You just have one state. This thing gets updated by whatever means you choose. And then you have some code that you write that turns that state into rendered visualized stuff. So this would be how React and Redux work languages like Elm also do this. There's a variety of examples and it's a very popular and very successful paradigm for creating interactive GUI applications. So this is now where we get to Regal. So Regal is basically this replacement for all the WebGL stuff that was in StackGL with a new functional set of libraries. And I could go on longer about how all this works in more detail. But I'm going to actually do a little live coded demo so then you can actually see for yourself what this is like. And hopefully I don't blow anything up in the process and maybe this will all work. Or it might not, I don't know, whatever. So yeah, so let me kind of move some windows around here because the projector is a different size. So, okay. So can everyone read the text on the screen here? Should I make that bigger? All right, we're all good. Okay, so what I'm going to do here first is just create like a little 3D engine from scratch using this thing. So I'm going to start out by clearing the screen to black. So this Regal module, when I load it, what it does is it basically gives me a constructor. Hopefully I did that right. I may have to go restart the server here because, okay, there we go. So, right. So what this is doing is this require here loads up the constructor for Regal. And then when I call it with no arguments, I just get a single full screen Regal context which I can then basically call different functions on and use that to draw stuff. So by default it comes with this thing called Regal.frame which hooks a callback that gets rendered each frame. And then I can draw different colors over here. So when I do this clear, it clears the draw buffer to some different values. So there, I set it to red, can set it back to black. I can set it to like green or blue, whatever. Or I can even make it flash. So slide up the lepsi warning here. Can do something like that. But I'm not going to do that anymore because that's like kind of annoying. So, right, so that's the basic idea. So now I can draw stuff within this. So in WebGL, you basically have an API for drawing triangles. So I'm going to show you how to draw a triangle. And this will at first seem kind of complicated because drawing a triangle, there's a lot of different pieces to it. But once you can draw one triangle, it's actually not that much more work to draw millions of triangles and some crazy configuration. So what I'm going to write here first is a fragment shader. So what this does is this tells WebGL what color to make each pixel on the triangle. And I'm just going to start it by making them all white. I can change that later. Similarly, I have to give it a vertex shader. And this tells WebGL where to put each of the vertices of the triangle on the screen. And this needs to take in some data. So I'm going to go take in the position of each vertex in 2D right now just to get started. And then I'll just go pass through this to the output position variable, that. And now that'll just put it wherever the input comes from. So I now have a vertex program that's going to run on the GPU in a fragment program. And now I need to give it some data to run in the vertex shader. So I have to give it that position attribute. And then I will just give it these two coordinates. So in WebGL, the coordinate system works where the lower left corner of the screen is negative 1 plus 1. And then the upper left corner is negative 1, negative 1, and the lower right corner is positive 1, positive 1. So this will draw a triangle. I have to tell it how many vertices. And now I can call this function, draw a triangle. And I got a triangle. There we go, right? Great. Let's turn off the blue. Now we can make it move around. So we can do something like this. So in WebGL, you have these things called uniform variables, which you can set to different values. And then they basically get broadcast into the shader. So these are like a global variable that you set outside WebGL, and then they go into WebGL. And so I have this new variable, translate, which is a 2D vector. I'm just going to add that to there. And at the moment, it's 0, so it does nothing. If I make this value 0.5, it shifts it over there. Negative 0.5 shifts it over there. And I can even do something like this. I can actually read in the current tick. And I can make this a function. And I can just have this do, say, like math.cosign of tick, and now it will oscillate back and forth. But of course, the ticks go really fast. So I need to make it a little bit slower than that. It's still kind of fast. We'll make it like that. Now it's OK, like maybe a more moderate thing. Now, this is cool if I just want to have it go into some fixed loop back and forth, but I can also take in data from other sources, like, for example, the mouse. So I have a little module here called mouse change that just listens for mouse changes. It just gives you some state info about that. And then now what I can do is I can call this function here with the data from the mouse. So I'm going to actually give it this vector. We'll call it translate here. And we'll take in the x component of the mouse and the y component of the mouse. Of course, these numbers are going to be very large, because they're in pixel coordinates. So I'm just going to eyeball and divide by 1,000. It could do something more precise. I could show that in a moment. But now here's what I'll do. So rather than reading a function there, I'm going to read in this prop that I'm passing in, which I call translate. Oops. And now when I move my mouse around, it should translate this thing, roughly, although the y is flipped. So I'll go switch that around. Now moving my mouse kind of drives the triangle around. And so what's happening here is basically it's reading the state of the mouse from this module. I get these variables in. This is just some arbitrary blob of state somewhere. And then I'm passing this into the WebGL context through this uniform variable called translate. And then that's popping out on the screen and giving me this moving triangle. So OK, so that's kind of cool. So I'm going to skip a few steps in the interest of time. And we're going to do something in 3D now. So I'm going to need a camera. So this is basically a thing that tells WebGL. This is basically a module that handles all of the details around creating a 3D viewport for basically doing the matrix math and everything around that. So I have this camera. And I'm going to go read in a test object, which is going to be a model of a bunny. And instead of calling this thing drawTriangle, I'm going to switch it to call it drawMesh. So we're going to draw a mesh. And actually, let's just call this bunny thing. Let's just call this mesh. That'll be maybe a little more descriptive. So the attribute data, I now want to draw the stuff from the mesh. So I'm going to do mesh.Positions. I'm not going to use that anymore. And then I need to draw all the faces. So the elements here is a special keyword in regal that basically reads the cells. So let me go back up a little bit. So what is this mesh that I just loaded? So I'm going to pop open a little node window here. Make this really big. And I'll just say, mesh equals requireBunny. I mean, all this stuff also works in node, by the way. There's nothing special about JavaScript. So if I look at the mesh.Positions, this is basically an array of tuples of points. And if I look at the mesh.Cells, this is basically the triangles of the mesh. So this is an array of indexes of those things. So this is just like some data. That's it. There's nothing fancy going on there. I mean, it's just plain old data. So now what I'm going to do is I'm going to use that camera module. I'm going to call drawMesh. At the moment, it's just going to do nothing interesting because I'm still using this uniform variable here. But I will now say, UniformMetForProjection in view. And these are basically the state of the camera. And I will set the position value to basically be the projection matrix times the view matrix times the position variable from the mesh, or the position attribute. So if I do this, and assuming I didn't make a mistake, which I guess I did. So I have a syntax error here. Oops. Wrong file. But line 22. Wait. Hold on. Here we go. All right, let's load this. Wait, where did I do the typo? Attribute position. Vec3, Vec4, where did I put that? What? Where, right here? Vec4? No, it should be a Vec3 position, not Vec4. Oops. Which line did I do this wrong on? All right, let me. Hold on, let me comment this out. Oh, I know why. All right, OK, it should be this. Let's try that. There we go. Phew, OK, that was kind of weird. The reason it gave me a bad error is because I was running this babelify thing. OK, quick recovery on that one. I'm still jet lagged. It's like six hours time delay or whatever, so it's kind of a long time. So OK, I got this opaque looking thing. It's not that interesting. So let's color it. So I'm going to take this module here called angle normals. And we're going to go compute the normals, the mesh.cells, mesh.positions. And if we do that, we now have this normal value, which isn't doing anything. So we have to actually pass it through to the fragment shader. So we do that using varying variable. So we have this varying variable, which we'll call color. And we'll set the color equal to the normal vector. So we'll do 0.5 times 1 plus the normal. And now we have this varying color. So this is just a three tuple for the RGB components of the color vector. We put that out. Assuming it didn't typo anything. Yeah, now we got a little sort of shaded bouncy bunny thing here or whatever. And we can do some stuff, too. So we got this normal value. We can make the bunny get fatter. We can do 0.1 times the normal. Blah. Now it's like a fatter rabbit. We can make it skinnier. We can subtract normal from this thing. It could even skinnier than that. Let's make it. Now it's really kind of messed up looking and deformed. And we could even do something like this. We could take a uniform float t. And we'll just multiply t times the normal. And we'll set t to be, I don't know, say, math.cosine times tick, 0.1 times tick. Let's see what happens with that. Whoa. It's now kind of oscillating, doing some crazy stuff. And we could even do something like this. We can do, say, cosine of position dot y plus t. And this will now do something even weirder. Make it kind of go in some strange oscillatory pattern. I don't even know what's going on anymore. Whatever. OK, so you get the idea, right? So this is just the basic stuff. So now I got a bunny over there. But all right, that's fine and all well and good. Let's do something with some real data, right? So OK, I got some stuff here. And I got some time. So I think this should be fine. So we're going to create this. We're going to abstract this a little bit. We're going to create a function called process mesh. And instead of taking the bunny as input, we're just going to take an arbitrary mesh. And we're going to basically read this mesh as some data. And then we're going to return the output of that. So this is just kind of like refactoring the code a little bit here. So now the mesh comes as an input here. And then we basically compute all this stuff. And then we return some resulting function, which we can then call as a command. So we're going to say this process mesh bunny. And this should still work, right? So I didn't really change anything. All I did was refactor it. So let's make sure I then break something there. Oh, two S's. All right, forward. Oh, bunny is not defined. I called it mesh. All right, there we go. All right, so I'm still doing the same thing as before. Nothing has changed. So let's now actually load something. So I'm going to use this module ND array, which is basically this module for working with multi-dimensional arrays in JavaScript. And I'm now going to load some data. So what I'll do is I'm going to use this other module here called resl, which is short for resource loader. This sort of works well with Regal. And I have to give it some resources. So this is going to basically do an XML HTTP request to go pull in some data. So I only have five minutes. I'm just going to do this really fast. Binary. So this is basically the data I'm going to work with here. This is some neuron data from a mouse brain. This was scanned at the Howard Hughes Medical Institute using a microscope that shoots photons in them or something. I don't know. The mice have these little things that go on top of their brains and you can do it while they're alive. I saw it. It was twisted. All right. And I think the size of this thing. So I'm basically going to load in a 3D volume set of data. So I'm going to make a 3D volume viewer. They charge $15,000 for this stuff. And I'm just going to do it right here, the same thing more or less. So now I've got this neuron data loaded. I'm going to go copy that thing and put it in this onDone loop. And now what I've got to do is I need to extract an isosurface from this. I'll just use another module here. So this is a module I wrote called Surface Nets. It basically extracts a level set from an nd array. This works in 2D and 3D. And it also works in 4D. I haven't tested it in anything higher than 5, though. So I don't know if it works in those dimensions. I wouldn't recommend that. So I'm going to call process mesh. Well, first I need to get the mesh, right? So I'm going to go basically say the mesh is going to be Surface Nets. And I'll take neurons. And I'm going to use the level set 200. I think that one looks pretty good. I could adjust it later. And then what I'm going to do is basically update the positions of the mesh. So I'm going to do positions.4 each. I'm just going to mutate this in place, because whatever. So I'll need another module here. 3 equals require glvec3. All right. And then we'll do vec3 divide pvp neurons dot shape. This is just like in a sci-pi where you have a shape variable. And then we're going to pass that mesh in. And so assuming everything is good, mesh, there we go. All right. And then let's see. OK, yeah. Well, wait. I still have this weird oscillating thing going on. I've got to turn that off. All right. Let's turn. Let's just draw the thing normally. We're not going to do any of this other weird stuff. OK, cool. Yeah, so we got some neurons. But whoa, something's weird. I got to do one other thing here. Because these neurons are actually very large, we have to use 32-bit indices. So I have to do this. This is basically a little feature in WebGL that allows you to use 32-bit indexes for triangles instead of just 16-bit, which is what you get by default. But yeah, now here we go. It worked. So cool. We got a little chunk of neuron data. It's flipped around. That's fine. We can fix that. Here's where we load the data. So we're just going to transpose the first two axes. And now it should do its thing. Yeah, OK. Now there we go. And you can see the different neurons and stuff in there. I don't know. I think those are neurons. I'm pretty sure this is from a mouse. So yeah, and we can do other stuff. We could modify the level set and do some other things. But I've already kind of gone on long enough with this little demo. So I'm just going to go wrap this up really quick. So OK. So right. So that's Regal. The whole point of this thing is I just did this live coding demo here to show you that you can do things very quickly with it. But really, this is meant for longer-lived projects. So you start out with a lot of low-level control. You can build things up from primitives like shaders and vertex buffers and whatever geometry format you want to use. And it has clear, well-specified APIs. And I should also point out that even though I have been living in a lava flow for the last couple of months, like six or so, and there have been a lot of people hammering on this thing and using it in production, commercial applications, in this entire time there has not been a single substantial bug report. There have been patches about the docs and typos over there. But no one has actually found a substantial bug in the code itself, which is good. So I consider this to be sort of a success. So that's great. There's also tools like HeadlessGL, which have been developed in partnership with things like Uber and Mapbox, they've supported some of this. But this allows you to actually run unit tests for Regal and code that you write in Regal in a CI environment, which is great. And also there's a ton of improvements in performance. So I didn't get into the details of this, but the way Regal works under the hood is that when you do have one of these commands that you create, it basically just in time compiles a little blob of code. So if I set a breakpoint right here and I step into this, you'll see, hold on one moment, we get to this. This code here, and this code is actually generated at runtime. And what this does is it actually applies a very minimal diff of this sort of virtual WebGL state from the state that you constructed right there. And so the actual operation that you get with this is very close to zero overhead. And this has been benchmarked. So it's basically on the order of microseconds, the difference between using Regal and writing hand tuned WebGL code. So it's fast. There's also code for profiling, and we do a bunch of different benchmarks, so it's pretty stable. There's a Gitter chat room, which is pretty active.  And I'll conclude by saying that here are some people that were very instrumental in getting this project off the ground. Jeremy Freeman, who definitely helped with financial and moral support and guidance. And also Irkeman, who just came in from nowhere in Sweden, and then did a bunch of work getting a lot of demos together. Thanks to Boku for putting this event together. And then also Ricky Roycer, Greg Tatum, Realizdat, Substack, MK30, all my other friends in the cooperative. And with that, I think I'm basically done.