Welcome back to St. Tech. This is transitional justice, and we're going to talk about the brave women of Bangladesh. They are heroines, but it was almost 50 years ago. And we need to know more about what happened there because we really haven't paid adequate attention. And Mahun Qazi of Project Expedite Justice has been working on this, and she's going to tell us more about what happened and what we are doing about it now all these decades later. Welcome to the show, Mahun. Thank you. We're excited to be here. So tell us your role at Project Expedite Justice. What are you doing for them and how does it connect with the genocide in 1971 in Bangladesh? So currently I'm working as a communications assistant at Project Expedite Justice. So really helping out with the social media and kind of just little other things here and there. But I was kind of drawn to PEJ because of their role working with survivors of mass atrocities today. And I found that really interesting because I've worked closely looking at the testimonies of survivors of mass atrocities, specifically of 1971 for the last almost three years now. So I found that their mission to be really inspiring. Yeah, it is inspiring. Unfortunately, the world has not paid sufficient attention to it because the genocide at the very least should be a lesson to the following generations. We need to learn and figure out the human condition over any genocide. So, Mahun, your family is from Pakistan.  What qualifies you to do this investigation? So, well, I guess I can talk a little bit first about what intrigued me to do this investigation, which was the fact that my mother was born around kind of the same time as this war, this genocide was taking place. And she didn't actually find out about it until 40 years later when she was living in the US, well established here. And of course, they'd always known there was a war, but they didn't know the specifics of it. So that conversations with her kind of prompted it. And then conversations with the Bangladeshi friends at some points in my life, when I was as young as seven, they were like, Oh, our countries used to be one country, and I had no idea of this either. And then eventually this just became something that I thought like I needed to hold other Pakistanis, Pakistani diaspora, specifically people accountable for this, because we say never again so often. And I feel like that just kind of gets lost at some point. And yeah, then I applied for my master's at Columbia University, and I got my master's in Middle Eastern, South Asian and African studies, but I concentrated specifically on modern South Asian history from 1857 to modern day. And I focused a lot on 1971 and this genocide specifically. Now, did you realize when you selected that topic for your master's that you would be in great demand over the years that followed? People really need to know more about Middle Eastern and what are they called Middle Eastern, North African, North African studies to understand what's going on these days. So you have a tremendous benefit there to have that under your belt. Don't you agree? Yeah, I would hope so. Yeah. Yeah. So I mean, but you come at it from at least a historical point of view of a Muslim whose mother was in Pakistan. But I recall reading that this genocide was Pakistan that is in East Pakistan, now known as Bangladesh, largely against the Hindu people in what is now known as Bangladesh. I mean, are you biased in any way? I don't think so because I think I also find it important to make the distinction that it wasn't necessarily a Hindus versus Muslim thing. The reason a lot of the justification behind it was a Hindu versus Muslim thing. That's what the Pakistani army told their soldiers, a lot of the higher ups told this is the language of justification that they used was, okay, well, we have the memory of 1947 of the partition of South Asia, fresh in our minds. And that was a time of, I think, great pain for everyone, right? It's a time of celebration that we're free from British rule. We have these two separate countries. But at the same time, there was all this pain that came about because of that. And it made a lot of rivalries, obviously, between Hindus, Muslims, whoever have you. So then going into 1971, where there's still kind of this disdain between Muslims and Hindus, they kind of use this language to rile everyone up. And there are a lot of soldier testimonies of when they found out, like later, that they had been lied to, and that they were killing other Muslims, because Bangladesh at the time did have a lot of Hindus. It had more Hindus, or East Pakistan, I guess, at the time had a lot more Hindus than were in West Pakistan. But a lot of the people living in East Pakistan, now Bangladesh, they were also Muslim. So when some of the soldiers had found out that they were killing other fellow Muslim brothers and sisters, they were extremely devastated by this. And there's this saying within, I guess, specifically within this field of like a few different authors who have studied this really closely. And they talk about how a lot of the testimonies of these soldiers, they talk about the loss of Insania. And Insania most closely means humanity. So 1971 was a period of great loss of humanity in South Asia, specifically. Well, let's get the basic history. So 1947, India gained independence from Britain. All right. Okay, that followed this big, I guess it's mostly religious argument between the Muslims in Pakistan. And Pakistan was in two separate places, West Pakistan, now known as the current Pakistan, and East Pakistan, now known as Bangladesh. What a geographical mess that is. And it was not a happy time because there was a lot of war going on. And there was a lot of resentment between India, which was largely Hindu, right? And the Pakistan, which is large in both sides, largely Muslim. So query, when did when did East Pakistan become Bangladesh? Well, East Pakistan after nine months of war became Bangladesh in 1971. So after this long war, but they were, as you said, they kind of these two territories of what was then West Pakistan and now, and then East Pakistan, they're over 1000 kilometers away. And it was very interestingly divided up like that. It should not have been divided like that. And you have the kind of the bureaucratic center in West Pakistan. And then you have a lot more of the population being in East Pakistan. So it was kind of a mess at that time. Yeah. I mean, did they, you know, I know people who are, they treat themselves as Indian, but they were born in West Pakistan. And when, you know, Pakistan was separated from India, they moved back into India proper. But but they see themselves as part of the original territory of Pakistan. It's really interesting that this separation is not quite not quite yet complete. Kind of people are integrated in their own way. So now, now we talk about women and we talk about the heroic women of Bangladesh. And we need to know more about that. We need to know what your mother discovered 40 years later. What exactly happened to the women in the course of this war that ultimately resulted in, you know, the change from East Pakistan to Bangladesh, 1971? Yeah. So in the kind of nine months of where the genocide was taking place. And there's been, I think the figures are really disputed. So anywhere from 30,000 to 3 million people were killed, like mostly Bangladeshi individuals, Bengali individuals during this time. And the numbers of women who were assaulted, sexually assaulted, raped, violated during this time also kind of ranges from like anywhere from like the lower thousands to 400,000. And these women in the light of Bangladesh becoming a new, its own country, Sheikh Mojib Irhan, the founder of Bangladesh, he basically gave them the term heroic women or birangona. So birangona means brave women, right, were war heroines, so to speak. And that means heroic Bangladeshi women, right? Yes, heroic Bangladeshi women. And it was basically to honor these women who kind of had maybe in their eyes and like the eyes of like this new nation building effort, it was like, okay, like, we need to kind of give them a place in our memory as well. We need to honor them in some way. So while it was done in a kind of, in a way to honor these women, I think it ended up a little bit backfiring. Yes, these women still ended up being ostracized in the new nation under the premise of like honor and all of this stuff. Wow. You know, I'm just to jump forward for a minute and we'll cover the, you know, the events of the interim, but a U.S. representative in Congress introduced a resolution in 2022, I think probably about a year ago, recognizing the genocide and, you know, making it a part of recognized Asian history. And I'm not sure that it ever passed. And what you have, and I'm sure you've, you've studied this, what you have is a failure to recognize what happened. It wasn't just that your mother didn't hear about it. You said it wasn't publicized. It just happened within the context of India and Pakistan and Bangladesh. And these are really troubling events. But they never got covered. You really have to do research to find out what happened. Am I right? Yeah, you're completely right. Not only just in Pakistan because in the period after the genocide under Ziyal Haq, there was a lot of censorship under that regime. And what I specifically studied was public memory and how textbook education kind of affects that in post genocide, Bangladesh and Pakistan and liberated Bangladesh and Pakistan. But in the U.S. as well, which is interesting when you break up the point about the current resolution and not being passed because there are records of, I believe it was President Nixon at the time. And when, I guess like the White House found out that these, this killing, these killings were happening, they were pretty indifferent to it at the time. So, and this also all was happening during kinds of the Cold War era. So I don't know, maybe contextualizing it, but it's interesting that like there's now 52 years, or I guess maybe it might, it's going to be 53 years later now, almost. Now there's finally an effort to kind of break that silence. And it's a huge step forward. And there have been efforts in Pakistan as well to kind of to break that silence, but it's kind of a slow awakening. Well, you know, it troubles me as a part of genocide. And this happened in the Ukraine war. It happened with Hamas is rape. In fact, you know, it's deeply built into the firmament of human history.  It's not appreciated at all.  But, query, why, why so much rape?  And I don't understand why this happens. Is it a cultural thing? Is it a political thing? Is it a religious thing? Is it part of genocide? Wholesale rape really offends the sensibilities, don't you think? I think particularly placing rape or sexual violence in the context of what was happening in 1971 for like the, I guess the Pakistani government or the Pakistani military specifically at that time, it was rape was used as a kind of a tool of cleansing the improper, impure Hindu, more Hindu Bengalis because, because of colonial remnants that the, the, the Pakistani government or the Pakistani military took over after 1947. And when Pakistan in a different way became the colonial administrators for Bangladesh, Bangladesh again being East Pakistan at the time, there was kind of this idea that was portrayed where Bengalis were, they were darker, they were, you know, they had all these qualities that kind of made them subservient in the eyes of Pakistanis, whereas Pakistanis specifically the Punjabi military elite, they were lighter skinned, they were taller, they were more suited for war and they were suited for those kinds of things. And that's why a lot of them in specifically under British colonial rule, a lot of them were part of the military and things like that. So when that kind of carried over, the army decided that, okay, this is going to be a project that we need to cleanse these women's wombs and we need to create a pure Pakistan, right? So by doing this, we'll be able to create a new nation of people who will be pure just like us. So in this case, not that all rapes that happened during, during the war were by the Pakistanis to Bengali women, because there are instances of neighbors, like Bengali neighbors raping like the Bengali women, there were so many different instances of like Bihari women, Bihari women being a specifically or those speaking ethnic minority group in Bangladesh, them being raped by Bengalis as well. Just there was, it was happening to everyone, unfortunately, or it was happening to the various different ethnic groups. But in, I guess in the general narrative, it was happening as a tool of kind of control of the population, which again goes back to what you were saying about raping used as a tool of genocide and ethnic cleansing. Yeah. Okay. I want to explore that just a little more. If I find that a given group is impure and you know, at a lesser level somehow, and I, and I wound up having my army rape them. Oh, and you include in every culture in the world, the rape is an embarrassment.  So if I go and rape large numbers of women, I am embracing them. I am humiliating them. I am not improving their lives. I am not endearing them to my culture at all. I'm making them hate me. It creates widespread hate for sure and resentment that goes on and on and on. So that's one aspect of it. But you suggest another aspect.  I want these women to have babies that include my seed. I want to change their DNA. Is that part of this? I want to make them, make their children, make their society more like mine. I want to create a new race or a race that's closer to my race. But which of it, which of those things is happening here? I think both to some degree. But because there was the whole thing of embarrassment and shame and is that or respect or honor is a big part of, you know, like South Asian, different like communities in South Asia. Like is that the really big thing? So specifically, the rape then of the Birangona women was understood to some degree as also the rape of the entirety of Bangladesh, right? This was an embarrassment for the entirety of Bangladesh. Like how could this have happened to us, right? And then these women were then ostracized and there were all these different issues. But also in order to, you know, with the project of, you know, making these impure women have pure children, there was another issue of a lot of these women who after the war were left with these children, they were forced to have abortions by the Bangladesh State Mother Teresa's Foundation also carried out some of those abortions. Or they kind of lost the opportunity to be not in all cases, of course, not this isn't a blanket statement, but in some cases, they also lost the opportunity to be mothers to these children. So a lot of these babies were put up for adoption. There's a few different cases of this. And one of the books that it's really insightful on this whole topic is called Amir Birangona Bolchi or The War Hero and I Speak. And that was written by an author, or it was written by Nelima Ibrahim, and it was translated by Nusrat Rabi. And that book kind of goes into more detail of different accounts of like war heroines actually speaking. So in, I would say since the 90s, there's been an effort kind of of these war heroines to come forward and tell their stories. Well, that's interesting that, you know, if a lot of women were raped in 1971, and they could not afford, didn't have the availability of an abortion, and they gave birth, then you have a whole generation of children who are a product of that rape. It reminds me of Vietnam. You know, the GIs who went to Vietnam, they had children by the Vietnamese women, and they were called Hossoi, and nobody liked them because they were neither Vietnamese nor American. So what happened to this generation of all the children that were born of this large number of rapes in and around 1971? Are they identifiable? Can you call them up and can you talk to them? Will they tell you who they are? Is there an organization of them? Because right now, they must be, what, 40 plus 50, almost 50 years old, these people, and there must be plenty of them, no? I would assume so, but also I think it's very contextual because some of the accounts of this, some of the women, you know, are like a lot of them are urban, some of them are in villages, and so they're spread out all across different districts of Bangladesh. So I don't think there's really a unifying factor for this generation, or in some cases, some of the women actually, after Bangladesh's liberation, they went to Pakistan to find the people who had assaulted them, and try to, like, say, this is your child, and this is one of the stories, I believe, in Amoebira and Guanambulchi, where one of the women goes to Pakistan, and then she's kind of forced to, like, live there in private, but it does create this whole problem of, okay, now you have this whole group of people who are neither here nor there, like you were saying, especially for, like, how can they pledge allegiance to one country or the other, but I don't think that's as prominent necessarily as a thing in this case specifically. Yes, I mean, it's interesting that somebody went back to try to find the father, I guess, that's an interesting story. It sounds like a great movie, actually. All of this sounds like a great movie. I hate to put it in those terms. So why are these women heroes? What did they do in that war and after that war to organize themselves, to deal with those who would attack them, to deal with the Pakistanis who were abusing them? Why are they heroes? So the term hero or hero in this context was more so just a name given to them. Besides being called war heroines, they weren't really afforded necessarily any sort of respect in the main society. The term birangona was also in some levels of society misconstrued as barangona. I'm also not entirely sure of the pronunciation of that because that's a term I've only ever read on paper. I've never heard said out loud. And barangona means prostitute. So it was also used as kind of a demeaning term to denote them afterwards. In terms of them being honored as heroes or heroines in the larger context, if they had gotten any recognition for it or anything like that, their absence is really visible from the public memory of bangladeshis. Of course, everyone in bangladeshis, they're very aware of it. But at the same time, if you go to the there's a one of the biggest memorials or war museums in bangladesh in Dhaka, I believe, they have they're honoring a like female fighters like freedom fighters. And there's a small number of freedom fighters that are actually honored. But at the same time, the war heroines who are also deemed this award, they're kind of absent from those walls. So there's that. And then besides that, there's a large effort to rehabilitate these women after the war on the bangladesh government. They tried paying men to marry these women so that they could, you know, just like they could enter into marriages, they would not have to face that shame anymore. They would be okay with this. And it'd be fine. A lot of the times the men were like the men in their lives were paid. So either sometimes it was their husbands, or they would try to find a husband for them, pay the husband. Sometimes they would try to pay their brothers. They would bribe them with cars. They would with all these different things. Or in other cases, they started different like rehabilitation centers where they could train them in different areas and then let them be of use to the larger society. Well, that's very constructive, actually. Now, did they keep the children? So when you find them a husband back in the 70s, did they come along with a child as a product of the right? I think it was, again, very dependent on each case because some children did end up in adoption centers. Some women just did not want to.  But a lot of the women just the idea of the fact that they had to get married and honored to be in order to be respected in the society. After, you know, what had happened to them was not obviously their choice. It was no one's choice. But the perpetrators and a very terrible one, of course, at that. But yeah, they it was very, I think all of these cases are very context dependent because the other thing to keep in mind with this is you don't have as many women kind of speaking out about it. Like the kind of the accounts like you'll hear are very few and far between just because not a lot of people want to come forward even almost 53 years later now. Yeah, even now. Yeah. Well, there's not the kind of thing you want to talk about publicly, but it sounds like from what you say that the country, the people, the population, you know, is in touch with us. They remember it. Even if the people in Pakistan don't remember it, don't never knew about it. The people here in Bangladesh, they remember, am I right? This has got to be part of their heritage. I hate to use that word, but they're historical experience now. And they are very proud of it. And rightfully so, they should be proud of the fact that not the fact of these women, but they should be proud of the fact that they had this liberation where they were successful in gaining victory. But I do have several Bengali friends, one of whom told me like accounts of going to his grandmother's village and seeing the bullet holes in the walls that are still there again, 45, 50 years later. So this is very prevalent in their memories to this day. That same friend, his father's friend saw his friends killed in front of his eyes. So this isn't even like this is these are people from who could be off my father's generation, my grandfather's generation, if I really want to put it that way, like, it's very, very, very fresh still. Did these women, the ones who we treat as heroes, did they fight? In some cases, yes. In some cases, no. Again, very context dependent. I saw a photograph of a troop of women, Bangladeshi women, marching down the street. Looks like they were ready. They were participating in the military action to deal with Pakistani attackers. But I don't know. I don't know exactly where or when or to what degree. So here we are in 2023. And you are investigating in project expedite justice investigates these things. And you take statements and, you know, we've talked to a lot of people from PHA. And usually the atrocities happened within recent memory. In this case, it's not within recent memory. In this case, people are people involved getting older. They're dying. They or they simply have rejected this part of their own personal history. They don't want to talk about it. So it's a project for you to go out and get a statement from somebody. How do you do that? That's my first question. My second question is going to be, what do you do with it? But let's talk about getting the statements because it sounds like that is very difficult. Getting the statements is really extremely difficult. In my time while I was getting my master or working towards my master's thesis specifically, I was never able to get a statement from anyone themselves. I had to rely on the works of different authors who worked more closely with this, like Nainika Mukherjee, Yasmin Sekia. These are people who actually went and lived in Bangladesh in some cases and gained the trust of these women in order to get statements from them. I highly doubt that someone like me could go and get statements from people. I could get statements about the war. I could get statements about the genocide, but specifically from war heroines. That would be extremely difficult. But there are artists in recent years, especially in the UK, who have been making more of an effort to kind of document these things, whether through plays, through movies. There's a lot of different efforts now, which is I think it's good that the silence is being broken in the way it is. Well, I think that's true. You don't need to have a lot of statements. You don't need thousands of people to make statements to find out what happened or to make a movie or to write a book or an article. So there's a value in getting only just a few to find out what happened. And when do you put those statements? It's not like the international court is going to do anything with those statements. What do you do with them? Do you bind them up and propagate them somewhere? Do you write a book, an article, make a movie? What do you do with those so the world learns? I think the best course of action that authors, so many authors that I was able to learn from their works during the time that I was working on this, their best word of advice was just to make sure these women's voices are heard and make sure their memories aren't forgotten. And that's why maybe I also feel like my duty as a Pakistani woman is to learn their stories because this is something that my country kind of did against these women. So it's my duty to learn this and it's my duty to educate other people. And that's the only thing we can do because there was a commission that was started. I think when Bangladesh was freshly liberated and everything, there was an effort to kind of get these survivors justice. But that died out because a lot as time kept going on, a lot of the perpetrators were dying or they were rehabilitated into different into Pakistani society and Bangladesh society, but quietly or they were rehabilitated into politics, which kind of coerced these women again into silence. So from a political or maybe a geopolitical point of view, how is the relationship now knowing what we do know between Bangladesh and Pakistan? Have we had a denouement there? Is it friendly or do people hold these events between the two countries? I think in recent years, there have been more efforts from Pakistani specifically or Pakistan is in Pakistan specifically in academic spaces to speak out about these things. But there is still a lot of censorship going on in some different ways. I think because of everything going on in Pakistan right now, the political situation, more and more people are inclined to learn and more and more people are apologizing about the fact that the genocide happened or the fact that they didn't know that it happened. So I think the two countries are on relatively good terms right now. There isn't necessarily a huge amount of hatred, but at the same time, I think there is still, especially from a Pakistani standpoint, there is still this like, don't ask, don't tell a kind of thing, like they'd rather enjoy the silence than you don't have to confront these uncomfortable realities. Uncomfortable realities indeed. So has there been accountability? Has accountability, has there been accountability in Pakistan with the people who did this? Or has there been accountability in Bangladesh with the people who maybe somehow participated in it? Or has there been no accountability on either side? What do you think? I think if there has been any accountability, it's been very, very little to a degree where it probably wouldn't be noticed, like notable at all. And again, a lot of them, a lot of the perpetrators were kind of just rehabilitated into society at large. Like it never really was a widespread thing that, okay, we need to go after them. They were in a lot of cases, specifically, I want to say, in Yasmeen Sekia's book, Nayanika Mukherjee's book, and Nileema Ibrahim's book, these perpetrators kind of just like, you know, were able to live comfortably. They couldn't maybe talk about it. I know a few of these authors actually traveled to Pakistan to talk to some of the perpetrators there, and they also talked to some perpetrators in Bangladesh.  There was never really any movement for that. So here's my final area I want to ask you about. We do this. We study it. We write about it. We take statements and we somehow, we use that as raw material in order to find out what happened. But also, it seems to me that we do this for another reason. We do this to find out what motivated people to do this, what motivated the world not to intervene, which is troubling, but motivated the United States to turn its back on what was happening in 1971. And I guess what the question is, and I put it to you, you must be thinking about it. What have we learned from this? What can we learn from this? What should we learn from this? Because, you know, honestly, my home, it keeps on happening. This genocidal thing, a mass rape thing, it keeps on happening. We have simply got to stop that from happening. I don't know if the UN is the right organization for it. I don't know if the International Court is the right, you know, tribunal for it. I don't know if universal jurisdiction you know, counts. But it happened in Ukraine. It happened on October 7th. It's going to continue to happen. You know, we say never again, never again like 1971. And yet, it happens again. What should we do? What should we learn? How can we stop this from happening? How can we make it clear that this is not acceptable conduct? That's a really good question, I think. I would not know how to answer that, honestly. Because, as you said, saying never again is nearly never enough because you can see it kind of happening today in, you know, different parts of the world. You can see it happening whenever there's conflict taking place. And it just, I guess, it's part of conflict and fortunately it shouldn't be. But you're right, like what organization can you really even take this to in order for there to be like reparations or there to be any sort of, you know, punishment or like any sort of way to move past this stuff. I would just hope that one day we are able to live in a world where we don't have to hear about this stuff continuously happening. But I wouldn't know how to, when people are still too uncomfortable to speak about certain silences, then I don't think they could ever be kind of confronted with, again, these uncomfortable realities. So I think it will take maybe a long time for things to change. Well, let me answer that question, my own question in part. Okay. It's to make the world aware of what happened, of the horror of what happened, to make the world aware that this is horrible atrocity and has terrible effects on people and communities and cultures. And so what you're doing has value right there, what you're doing here today on ThinkTech has value. And I would say that that resolution in Congress has value. I hope it gets passed. So to make it known as value.  But I think that is something that's doable. And it's not, you know, there's no great barrier to do it. So keep on doing your work, my own. Okay. Thank you very much for joining us today. It's been great to learn from you. And I really appreciate what you were saying and what you are studying and what you are doing. No, thank you so much for having me. It was great to talk about everything I've learned over the last three years. Yeah. Thanks for doing that. Aloha.


Thanks everybody for for joining me today. This is a great venue. This is like I mean normally we're in a hotel like conference room or a ballroom or something and it's like the most stale environment ever like this is this is a really nice change of pace and thanks again to Johnny for putting this all together and PJ and in the people that seem to be doing the most amount of work which is Johnny's family so thanks to them too and I was telling some of these other guys that like literally Girl Scouts can come to my house twice a day and I'm gonna buy cookies like every single time so like thanks for having the cookies here it actually was really I mean those little shortbread cookies are just I mean they're the bomb so all right yeah so thanks everybody this is a presentation I'm calling a deep dive into Hex so Hex is a tool that I bet everyone or almost everyone in this room has used but probably not too many of you have given a whole lot of thought to it my alternate title was wait it's more than mixed-depth get and laugh come on man all right tough crowd but oh yeah get that in post okay so yeah for most of us like mixed-depth get is about the closest we get to Hex and we we take advantage of the fact that Hex is just gonna do its thing and it's always gonna work and I think that's one of the the parts of Hex as a package manager that that excites me is the fact that it really just does its thing and it doesn't really make a nuisance of itself so introduce myself my name is Todd Resodec I'm a senior software engineer at Weedmaps we're a primarily elixir operation at this point although we still have some ruby stuff and and we are currently hiring so if anybody's interested let one of us know I think there's six of us here today so we're looking for people with experience in elixir and some people that maybe don't have a lot of production experience or any but have an interest in it so just let us know talk to us and you know we'll give you some more information online you can find me at super simple or some derivative thereof like on Twitter with no vowels so and you know by all means like find me on online or find me like after the conference or after the talk I like to meet new people and you know this is a good crowd of people so so yeah let's let's be friends all right so what is Hex so let's define it first so Hex is the package manager for the Erlang ecosystem so it's analogous to what Ruby gems is for Ruby or crates is for Rust or npm for node all right where did it come from it came from Sweden this guy Eric Meadows Johnson is the is the author of it and it was released in December of 2013 so you know a little bit after Jose released the first version of elixir so how how would we compare it to some of those other package managers so one way would be the amount of libraries that are available so Hex has right now about 6,000 packages available Ruby gems has about 9,200 and let's see crates is about 14,000 which if anybody's interested in crates come find me after this because I think that's actually a really great piece of software too and npm yeah I like I feel like I should comment on that number but like everybody sees that and realizes how ridiculous that is so the only thing I'll say about that is suffice it to say that quantity and quality aren't always the same thing sometimes they're mutually exclusive in fact so I'm sure there are 6,000 really good npm packages so and just to give you some idea of like where these like where the growth is happening so since hex hit the 5,000 mark so in the in the time that hex gained 1,000 packages Ruby gems gained about 400 packages and so I've been tracking this for about the last year and definitely seen what looks like and people may be moving over to you know evidence of people moving over to hex or maybe just maybe just 9,200 is like the magic number of valuable libraries in Ruby gems and and hex is still catching up but so why why would you want to know more about hex basically so some ideas would be to work faster to prevent issues from happening or to debug a little bit easier and I'll explain on those a little bit later so here's the anatomy of a hex package and you'll notice it looks a lot like any other mixed project the one thing I would say is is maybe a little bit different is the license markdown file and you won't find that in every hex package but just keep in mind that like one of the the rules of hex is that if you release your package under a specific open-source license that you have to include this file in there with the complete text of that license so just keep that in mind if anybody's like thinking about making a hex package everybody can read that right all right just kidding so the this is the mix file for a common hex package so you know it's gonna look again like most other mixed projects I just want to point out a couple things so the version versioning is required to be semantic which you know hopefully you're doing that anyway but just keep that in mind that hex requires semantic versioning the description which is in there this is a really important piece of data for a hex package because this is one of the two fields that's actually searchable so if somebody's looking for a package that does a certain thing or has a certain name this is one of the the two places where that text can exist and it's gonna come up in search results it's also what everybody's gonna see on hex PM so when they go there and they try to figure out is this the package that I need to use this description is really what's you know make it or break it on that the depths which this is kind of like inception because this is a package requiring packages and this isn't hex specific but I think there's some things in here that relate to hex that a lot of people especially newer people don't know and that's the fact that you can load these dependencies from a bunch of different sources so probably the most commonly it is to load it right from hex but if you can see like on the second one that's loading in from github so that's instead of going out to hex PM and retrieving that package it's going right to a github URL for that or you can include a path and so that just points to your local system so the reasons why you'd want to do that would be a it's a library that you don't think is very useful to anybody else or it contains proprietary information that you don't want to open source and put out into the world or be maybe you're developing a hex package and you want to test it locally as a dependency so you don't have to push it up to hex as an you know unfinished or untested package you can load it in as under the path flag and and test it from your local the package so this package section of the the mixed file is for hex and the important thing to look at here is the name so that's the other form of data that's searchable on hex and that's essentially what your package is called so when people say you know I downloaded the cowboy package if you look in there the package name on that is literally just cowboy and sorry the last one which is you may see or you may not see sometimes is the organization and is anybody here have a hex organization set up like raise your hand or we got we got one I know we we maps we do so a couple so organizations are private repositories so it's like hex PM that's sheltered from the rest of the world so if you're pulling in your package or you're publishing your package to a private repo this organization will set and that's going to tell it what organization it belongs to all right package naming so I want to read this verbatim there's only one rule in hex about naming your packages and it's this avoid using offensive or harassing package names nicknames or other identifiers that might detract from a friendly safe and welcoming environment for all and I want to read that verbatim just because I think it is really important and you can probably think of other ecosystems where the maybe the main contributors or they're just the community in general is not very inclusive and you know it turns into this flame war 4chan sort of a thing and I think elixir Jose and Eric in this case have done a really have been really proactive about making sure that everything that happens in our community is made to be really friendly and you know if you've ever looked at the pull request that people make on elixir on the elixir lane repo you know Jose's always putting unicorn emojis and hearts and stuff in there it's never like hey you're a beginner or noob like this is totally wrong it's always meant to be really encouraging and and so again like this follows along that same theme and again I just want to reiterate it because I think it's really important that we keep our community as inclusive as possible Jeff thank you I mean it really it is it can't be understated the fact that like we might have this great programming language but if the community devolves you know we're gonna lose smart people new people and it's I mean it's eventually he's just gonna atrophy so so yeah now there's only one hard rule for naming but there are conventions and so one of them is when you're adding functionality to an existing package use that package's name in your package name so for instance if you're building an authorization tool that goes on top of plug you'd want to name your your package something like plug off so that people know that like this is an addition to plug you know just so that's very clear so and in this case you'd want to avoid namespace conflicts so if you're if you are making plug off for instance your modules shouldn't be called plug dot off because that's encroaching into plugs namespace so call it plug off camel case that should be the namespace that that you use for your package and this this one I think Johnny disagrees with this one but I think it's kind of the convention is when when porting a library from another ecosystem it's typical that you're gonna add ex to the name so for instance like the faker gem is I think it's called ex faker but you'll commonly see like if it's a sorry hex package so you commonly look for like a ruby gem that you know of by name it's gonna have that same name underscore ex or ex underscore that name and that's just a kind of a common indicator that this is functionality that you're used to in this other ecosystem but this is version is an elixir and names are first come first serve so there's no preference given to trademark holders on names so for instance if you if you decide hey look Spotify doesn't have an API wrapper available on hex I'm gonna write one you're totally able to call your package Spotify you don't have to change the name or you know spot if the cater whatever there's no mandate from the hex community that that you give deference to the trademark holder having said that name squatting isn't allowed in hex so we for instance if take the Spotify example if you say like oh I'm gonna build that Spotify API like tomorrow so I'm just gonna put up some trivial package now to sort of stake my claim on the name you know how that goes like tomorrow turns into next week and then that's next month and then it's six months from now and you still haven't really built the Spotify package so in those cases if there's anything trivial if there's a package that's deemed to be trivial the administrators of hex will just take it down alright so what hex commands should you know and this is the first section which I call works on my machine and I this is what I always tell our QA team and they which they love so the first one is mix hex info and most of these I'm gonna go over a mix tasks so I might just leave off the mix but hex info just type that into your terminal it's gonna tell you what version of hex you have installed what version of elixir which version of OTP and then it's gonna tell you what it was built with and then also at the bottom it's gonna tell you if there's a newer version available so why would you want to know that let's say if you're having a problem but your co-worker isn't having that problem with the dependency it may be that you're on different versions so maybe that a conflict exists or a bug exists in your version but not in their version so this would be maybe the first step to diagnose that now if you add a hack package name to it so hex info and then package name you're gonna get the most recent description for that package you're gonna get the most recent releases so up to eight of them if there's more than eight it'll show an ellipsis and you'll see it like on this one the first one is 2.0 RC1 the last one is 010 and that's in yellow and it's marked as retired I'll talk about retired packages towards the end of this but that's useful information to know and then the config line is what hex recommends you put in your depths so in this case you'll see that it says it recommends the 1.0 in in your depths so you say like why not the latest version the 2.0 hex looks at the version numbers and when it sees that dash at the end regardless of what comes after it it assumes that's a pre-release version so in this the which you'll commonly see is RC which would be a release candidate or you'll see pre after that but it can literally be anything the internals of facts just look for a dash and so in this case hex isn't gonna recommend you install a pre-release or release candidate as a dependency for obvious reasons so it'll show you the latest stable version and that happens in a few place in hex so just keep that in mind and going further one step further if you add a release number so hex info package then version it's gonna give you specifics about that particular release in this case it includes the dependencies that that package has and so this could be really useful for figuring out why maybe your lock file isn't updating so maybe you have a conflicting requirement on a common dependency so you might say like why can't you know hackney is locked at one one here let's say that you have another package that uses hackney to which I don't think exists but let's just say it does requires hackney to and you'll do your mix steps update you'll find out like why isn't updating to hackney to well this is why you have a dependency in there that in your dependency tree that's locked at at the one one point version all right section two learning all right so now you want to learn more about hex packages so you can just go in your CLI just type in hex search and then a search term and it's gonna bring up right there it's gonna bring up packages that match that result so in this case the search is always limited to a hundred results usually you're gonna get just a handful back that match the version number that's shown there is the latest stable version so it doesn't show pre doesn't show release candidates you can do a multi word search by using a plus and joining joining the words with a plus but just keep in mind right now that's an inclusive search or sorry it's yes it's an inclusive search meaning that it will match on either term not something that matches both terms and behind the scenes this is just a logical and or join on a postgres I like and so there are plans in the repo to put in a more robust search system like an elastic search or react something like that that can maybe do a little bit more but for right now this is this is what hex does all right this is the cool stuff so hex docs online and then a package the this section I'm gonna show you is only available in 0.17.4 so right now unless you're on master you're probably not running that yet but since it's coming out really soon I I wanted to focus on the changes that are in 17 for rather than give this talk today and then next week have it be made obsolete so hex docs online and then package is going to load up the documentation on hex docs for that package the exceptions or some caveats in this is that if the package that you that you're asking for is one of these in this list it's going to look at the version that matches your current elixir version so by default it's gonna give you the latest latest docs or the latest release docs but if you're let's say if you're running elixir 1.5 for instance if you type in hex docs online elixir it's going to bring up the docs for 1.5 not the newest version which I think is 1.62 so and the so if you're in in the context of a mix app and you type this in if that package is included as one of your dependencies it's going to open up the version that you have installed so again like another package it's not just going to give you the latest it's going to be smart it's going to look into your your project see that you're using xyz version and it's going to load the docs up for that automatically and if none of those neither of those things is true it's just going to default to the latest version and I mean this is basically what you're going to see is the hex docs website with the you know the documentation that you're used to so if you if you add a version to that so hex docs online package version then it is going to pick up just that version of it so a corollary to that is hex docs fetch this is actually in 17.3 so you could use this right away what this does is let's say you have a commute coming up let's say you're on a train where you don't get internet access or you're taking a plane but you want to read documentation for this new package that you're checking out or possibly a package that is installed in your system that you just want to learn more about use hex docs fetch it's going to go out to it's going to go out to hex docs and pull down all the documentation files for that and install it on your computer so if you don't include a package name on this right now it's going to download all the docs for all the dependencies in your project so in the context of a mix project let's say you have a hundred dependencies in there in your dependency tree you type in hex docs fetch it's going to go ahead and download all 100 of those put those on your local system so you have them you can archive them you can you know read them offline whatever you want to do with them and so if it's called outside of an app without a package name this is just going to raise an error so you can see like this is one that I did on one of my projects and you could just see it's downloading all these packages there's a if it runs into one where there's no documentation exists so like cowboy for instance publishes their documentation in a different place so that's one of those that you're not going to be able to download documentation for but in this case fetch will just skip over those and move on to the next one so if you add the package name it's going to download the documentation to your home folder your hex home folder so if you look right now in your in your home there's a dot hex directory if you have hex installed and inside there's going to be a bunch of files so one of those is the docs directory so anytime you do a fetch all that stuff is going to go into there so here we go hex docs offline package this is kind of the machination of online and fetch at the same time so what this is going to do is look in your hex home folder for any downloaded documentation if it's there it's going to open up in a browser and serve it up from your file system no internet required if it's not there it's going to download it from hex docs and then open it up in your browser being served from your local file system so obviously you have to download it once but in this case it does the fetch and they open at the same time and then then you have it in perpetuity on your on your computer if you add the latest flag to any of those it's going to skip all those other rules and just give you the latest version you can add that to the fetch offline or the online tasks and like I said it overrides any of that other logic that I talked about all right section three get ready I'm gonna let this run because this is like one of the best all day all right all right this is sort of a more than mundane stuff about hex so I'm gonna go through it kind of quickly but it's important to do because some of the features of hex can't be done until you do this stuff so hex user register so you just type that in to your CLI or to your to your terminal and you're gonna get a few prompts so it's gonna ask you to set a username it's gonna ask you for a unique email address and then to sound set your account password you're gonna need that to do like I said do a few of the things that are available on hacks it's gonna require you to establish a user and once you do this it's gonna send you an email to confirm that address so before it'll work check your email box the only rules to this the username must be at least three characters in length and it can contain letters numbers and a limited number of symbols so underscores hyphens periods and parenz only so reset password local so in hex there's two passwords and kind of two accounts there's one on your local system that's encrypted and one that's on in the hex online system so hex PM those are two separate accounts with two separate passwords same username so reset password local it's gonna give you a prompt to reset your local password that's actually stored in this file here so in your hex home hex dot config file as encrypted key that's the name of it it's encrypted using a 256 cbc algorithm but there's plans as soon as OTP 17 support is dropped it's gonna jump to a 256 gcm which admittedly I know very little about but I think it's better I mean why would they switch it's not better so so yeah reset password account that's gonna send you an email so this is your your hex PM user this is gonna send you an email to reset it's gonna give you a link to the hex PM website to do all there the setting of new passwords when you do this it may invalidate all of your locally stored API keys and so you can see those if you type in hex user key dash dash list it's gonna show you all the the API keys that you have set up on your local user so in this case I have my local user super simple I've got my personal organization and I've got weed maps organization set up so if you ever want to revoke one of those get rid of those keys hex user key revoke and then the key name it's gonna just get rid of one of those keys so if you you know kill your organization if you leave the company whatever you know you can just take that housekeeping clean that up if you do dash dash revoke all it's gonna remove all those so like I was saying when you reset your password on hex PM it is going to or may invalidate all those keys keys that you have stored so generally when you reset your password you're gonna do this you're gonna revoke all clear them all out so that you can refresh them and you do that with hex user auth hex user auth is going to regenerate all the locally stored API keys so rebuild hex config so since I mentioned it your your password is stored in here also some particular configurations that you have if you want to modify how hex works on your system so if you look in that file hex dot config you're gonna see this well something like this and it doesn't make a whole lot of sense but just keep in mind that's where your hex config exists so if you're having problems related to config it may be this file got corrupted or it got lost or something like that so you can technically add any config key you want to that file and it will save it but hex will just ignore it basically so mix hex config key will show you what the value of that that config is and the so you like I said you can use any key you want but the ones that hex looks at are these eight and the one that I think most of these are used if you're gonna set up your own private hex repository so outside of the hex and hex p.m. organizations most of these are our settings that you use for that the one I'd say that is possibly useful to the rest of us is the HTTP concurrency hex is designed right now to concurrently go out and fetch eight eight or send eight requests at a time so when you do a fetch it's gonna send out eight calls basically at once if you find that you're getting like race condition type issues or maybe you have a billion dependencies and it's going too slow you can increase or decrease that number I think you know do that at your own risk basically at the default is eight and that seems to work well for most people but I'd say again just keep in mind that it's there so and again like if you add a value to the end so hex config key value it's gonna set or reset that particular config key or dash dash delete it's gonna remove an existing key alright this section I call defense and so this is this is kind of defending your app so hex that outdated and what this is is basically an audit of your dependencies and this is gonna look at it's gonna list all your primary dependencies what version they're currently on what version is the latest and then if there's an upgrade path available so in this case I'm on 010 which is deprecated the latest version is 103 update is not possible on that it's a major version change however on earmark I'm only a patch version behind so get the big green yes so that means you know it's totally safe to upgrade that dependency and in this case x docs is up to date so green light on that if you add the dash dash all flag to this it's gonna search the entire dependency tree so just because you see three dependencies here each of these three dependencies might have three dependencies of their own and so on and so forth so you may end up with you know 15 or 18 dependencies in your dependency tree if you want to check all of them dash dash all will work and if you the latest version there like I said before is gonna be the latest stable version if you're willing to use pre-releases you can add a dash dash pre flag and that will show you the latest version including pre-releases release candidates and so add a package name to that hex dash outdated or hex that outdated package it'll show all the dependencies that that particular package has so that branch of the tree and and if there's upgrades available and the next part of being defensive about your application is to do an audit so you probably or if you're a ruby programmer you've probably done like a bundle audit before something like that and this is similar to that so hex dot audit is gonna show you any retired packages that you have installed so in this case it found one it tells you the reason for that as well so this is a you know housekeeping thing to keep your dependencies up to date so they're more reliable I'll get into a little bit more about retirement in just a second all right contributing Lil Lil Lil something Lil Wayne right Lil Wayne yeah okay whoo get them confused all right they're all little I don't know all right hex published is anybody here just shout it out if you've ever published a hex package before yeah all right cool so that's great so a couple of things it requires you to be a registered hex user so we talked about registering a user so hex dot publish the command generates and publishes your documents by default if you add a dash dash organization flag it will publish those to the private organization that's not necessary if you put organization in your mix file so if you put organization in your mix file it automatically does this if you don't you can add the flag this way and don't one other caveat to mention about this is watch out for pre-release dependencies so when you go to publish a package it's gonna get rejected if you have any dependencies in your package that are pre-release and the exceptions to that would be if you're publishing it to a private organization they'll let you get away with it or if the version that you're publishing is also a pre-release or a release candidate then your dependencies can be release candidates as well typo squatting another great security feature of hex so we talked about name squatting typo squatting also good so whenever you publish a package on the backend hex looks at the name of that package compares it to every other known package name and does a Levenstein distance calculation on it so the distance right now according to Eric is two so if the if your Levenstein distance is two or less it's gonna send out emails to the hex admins as sort of raising a flag for them they're gonna look at it and determine if it's a bona fide name so maybe it's just happens to be a short name or maybe it's it's it's bona fide and these two things just happen to be very similarly named but it's also a just a really good opportunity for them to take advantage of or protect you against typo squatters so if they say like no this is totally illegitimate it's really just taking advantage of people who misspelled XYZ they're gonna remove it from the pet from the repository the exception to this if you're publishing to an organization hex doesn't check for Levenstein distance so it's organization is your little world you do whatever you want with it okay so let's say you just published something and you realize oh man I totally forgot this or you know I forgot oh it didn't compile well or whatever reason you can do hex stop publish revert dash dash revert and then the version and it's gonna unrelease it for you now this is only available within the first hour of publishing and you know there what this is a really nice security feature so I'm gonna just say left pad and watch everybody cringe and basically this is the response to left pad so once a publish is packaged in our once a package is published in hex it's basically immutable that release exists in that state in perpetuity as long as it's been there for at least an hour and so there can't be a left pad issue where all of a sudden somebody pulled this dependency down and you're trying to build your system and what what the heck happened so hex protects us against that make sure that something like that can never happen now if you if you notice an error in your documentation don't worry about it that is that follows a different set of rules so the immutability is only applies to the compiled package itself so if you type in mix dot publish docs it's only gonna publish the docs in that that case and so if you if you had to make a change in your documentation if you noticed an error you can do this anytime after the package has been released and so there's no limit one-hour limitation on that and yeah so I mean that should encourage you to not have to push out a new release just to push out better documentation so hopefully encourage you to to make your documentation better all right hex dot retire so you have a package and you no longer support it let's say you're just not interested in that project anymore you're not supporting it let's say there's a particular release that relied on you know one dependency and you've taken that out or you don't want to support elixir 1 3 anymore you can retire that package and that doesn't change that immutability law it's still gonna be available in perpetuity but what's it get what it's going to do is raise a flag anytime somebody uses that that you've just required a dependency that's been retired there's five valid reasons that I shouldn't say that there's five reasons that you'd be retiring a package so one would be renamed so when you when you retire a package formally what you'll do is mix hex dot retire package version reason and then message so in this case the reason would be you've renamed it and in which case you should include the new name of the package in the message you've deprecated it if there's a replacement include that in the message security so you found a security vulnerability it's invalid meaning usually means it doesn't compile or other so other is everything else and obviously you want to use the message to to clarify like what the reason is for that so here's an example of retiring and you can also on retire packages so like Michael Jordan on retire and then retire again bad idea all right organizations so and organizations were added in 0 17 1 which was just released not even six months ago it's still in private beta so you can sign up for it on the hex PM website it's generally available as just not really advertised I guess and it was supposed to be released this quarter so it should be released pretty soon in in in earnest and you should expect there be a pricing per user on that so the last price I saw being floated around is about $8 a user and I think I've described this pretty well already but organizations are like your own private firewalled version of hex PM so stuff that just you and your team can see this is the example interface so if you go to hex PM right now if you have an organization like this is what you're gonna see you can add people from your team to your organization you can add packages to your organization and when you join an organization you just have to type this command in hex organization auth and then the name it's gonna authorize your local user for that organization so when you go to pull dependencies it's gonna see that you validated for that it's gonna allow you to pull dependencies from that organization hex organization list is gonna just show all the organizations that you are currently authorized for all right finally join in so I mean hex really is it's an open-source project so it really wouldn't be anything without the people that are working on it and so you know get involved with it so you star or follow the repo on github submit an issue if you think of a feature if you find a bug submit an issue on there so we can work on it or open a pull request to fix a current issue so I know you know I've done a few of these Ivan's Ivan here Ivan has done a lot of work on the hex PM side of things so those are two separate repos and the team behind that Voightek and Eric are you know like Jose they're really really nice people so they appreciate the fact I mean you can imagine there's these people that are willing to build my software for free from all over the world so they're they're really really polite about it and you know if there's something that you're not doing well or if you're just learning elixir their comments are usually really friendly and you know they're willing to help you go in the right direction and that's it so I want to think weed maps they're the people that pay me to be here and elixir days again and if you're interested that's the github for hex thanks everybody


This is Coach Mack. We're going beneath the surface, powered by Microsoft Surface. Alright, we're in the first quarter here, 11-44, third and tenth. What you're going to see here, this is a zone coverage, and it's going to be a four-man rush. But this is a picture-perfect example of what we call a cage rush.  Danico Autry, left tackle, watch the right tackle, collapse the pocket pack. Danico Autry steps up into it, collapses, and then wraps around. And as he wraps around, because the cage rush is so perfectly set, the zone coverage on third and tenth has taken away all throwing possibilities. And then Danico Autry makes a big sack, huge play in this ballgame. Now what you're going to look at, it's second and tenth. Now, watch the Titans bogey their front, line up in a four-man front, shift down from the left to the right, and they've completely confused the quarterback. Watch what happens here as they do this, and then Molden is playing this corner at the slot up to the top of the left. This is a slot pressure. You can see him coming after the line is shift. And as they start to it again, doesn't that not quite sure what he's seeing now? Because the front and the coverage has changed on him from pre-snap to post-snap. He goes to throw, and now we've got an icy wet day at Nissan Stadium. The ball completely slips out of his hand. Watch everybody race to the football. Big scrum for the football, but Molden, the one that was coming off the pressure from the slot, ends up with the football. Big, big takeaway for the Titans in this instance. We're now moving on to the second quarter. Titans have been hammering away in a very stout Miami defensive front all day. This is a really great job by the offensive line. Watch the right side get complete knockback on the left side of the Miami defense. And then watch the second level. Watch them climb to the second level. Take a look at what Forman does in the backfield. As he starts, he takes a little dip to the left to set up the blocks at the second level and then hits the hole extremely hard. Watch the receiver throw a key block downfield. This is a 21-yard touchdown run, 17-3 now, Titans. We now move to the fourth quarter. Titans now have been running the football so well that now Miami is really, really trying to gear down to stop the run. This is a three-layer bootleg action going to the offensive right. It's blocked very, very well. Watch the right side of the offensive line completely cave down all the contain elements. Tannehill has now got great depth. He's got great vision. And look at the three layers of the receivers he has to throw to and to choose from. The motion man has come across going behind the line of scrimmage. He's the first layer, second layer deep, third layer. Watch him throw the ball. Firkshire is wide open. Miami completely confused, but the Titans have all set this up by a great run game and now the play-action pass is working to perfection. Final play we're going to look at here is the fourth quarter. The Miami Dolphins are in a must-throw situation. Tua drops back. First of all, zone coverage. The two outside receivers are covered. Watch your two inside elements here on defense. Take a great directional delivery key. This is textbook right here and then a very athletic interception by David Long. You get the race to the football by everybody. This is another takeaway for a big, big Titans win. Now on to bigger things with the Texans game next week.