So, as most of you hopefully know by now, Shahid Butar and Nancy Pelosi's primary opponent has advanced to the general election in November. So California has a top two primary system to where Democrats and Republicans all basically compete in the same open primary and the top two candidates with the highest vote totals advanced to the general election. Shahid Butar is facing off against Nancy Pelosi and I will admit this is going to be a really tough race to beat. But is it impossible? No, I don't think it's impossible. But still, even though she has one of the most serious primary challenges she's had in decades, she's not taking it seriously and this isn't necessarily something that is uncommon. Usually if a Democrat incumbent is facing a primary challenger who's actually really strong, you know, they choose to not debate them or even acknowledge their existence unless their internal polls show that they're kind of in trouble. You know, it's why Joe Crowley back in 2018 finally chose to acknowledge Alexandria Ocasio-Cortez's existence and debate her because the numbers didn't look too good for him and it scared him. And Nancy Pelosi currently is in the phase of this campaign where she just pretends like he doesn't exist. But regardless if her internal poll numbers show her beating him or not, it shouldn't matter. Like if you are facing a primary challenge, you have to debate your primary opponent, right? Nancy absolutely destroyed her primary opponent, but she still debated her because that's what you have to do in a democracy, right? You're not entitled to your seat in Congress. You have to allow your constituents to hear alternative voices. I don't care if it's someone who I support or not. I mean, Ro Khanna, AOC, Ilhan Omar, Bernie Sanders, if you have a primary opponent, you should be required to at least debate them three times. But that's not what we get. You have to basically twist their arms to get them to agree to a debate. And the fact that we even have to do this in a democracy is infuriating. But here we are. Now, Shea Hidbutar is trying to get Nancy Pelosi to agree to a debate and he tweeted out, San Francisco deserves a real representation in Congress. At the very least, Nancy Pelosi should show up for a debate. It's been 30 years since her last one. And he also links to a sprout petition that you can sign. It has over 2000 signatures where you can kind of maybe put a little bit of pressure on Nancy Pelosi to debate. But again, I will say that it's preposterous that we have to do this. There needs to be some type of requirement or law to where if you're facing a primary opponent that reaches a certain threshold, if they're a serious challenge to you, then you have to debate them, especially in these top two primary states. There's no excuse. In Washington state, in California, if you have a top two primary system and one of two candidates will win in a general election, they should be required to debate. It doesn't matter if it's two Democrats or a Democrat versus a Republican. A debate should be mandatory. It shouldn't be based on whether or not an incumbent will agree to it because that's absurd. That's not democratic. So I would encourage you to sign that petition. I think that petitions can be useful. But more importantly, you have to tweet to Nancy Pelosi, call her office, actually put real pressure on her because if she has an option to just ignore Shea Hidbutar, then she will. So the point is we have to do what we can to help Shea Hidbutar. I mean, like, this is going to be a hard race, but it's worthwhile because Shea Hid is a phenomenal candidate. Like, putting Nancy Pelosi aside, Shea Hidbutar alone is someone who we desperately need in Congress because unlike a lot of the elites like Nancy Pelosi who you see in Congress, he's a normal person. He's a normal person who has dealt with struggle, right? Who has actually faced adversity in life and wasn't handed everything with a silver spoon. And to kind of show you that, he put out an ad in March which really speaks to the world of difference that we see between him and Nancy Pelosi.  So take a look at this ad and we'll talk a little bit more about him when we come back. If you've always had a roof over your head and you know it's going to be there, it's really frankly, I think impossible to relate to people who've had to be exposed to the elements. Just the struggle not to be exposed to the rain, the cold, the sleet, what have you. That in itself is an all-consuming endeavor. I thankfully haven't had to deal with that for large chunks of my life. When I was 17 to 19, I had a taste of it and I know that that's, yeah, I wouldn't wish that experience on anybody. I thought everything was fine until I was 16 and my parents informed me we were losing the home to foreclosure. It felt like my world crumbling. It was losing my friends because I wouldn't be around them anymore. I was losing the place that I knew. It was putting all of my worldly belongings in boxes and frankly losing most of them. I still wonder occasionally about my high school yearbooks and whatever happened to them. It also was the beginning of what for me became having to leave college the first time. Smile shot, I'm just taking pictures of your school. I had all the student aid that I could get because my parents had lost their house and weren't able to really contribute anything. I couldn't make the expected contribution for the fall semester. The first message from the university was don't worry about it, we'll figure it out. But I love you. I want you desperately in school. By the middle of the semester it was, okay, this isn't gonna work. But by that point I'd been in the dorms for half the semester so I ended up on the hook to the University of Chicago for $10,000 on top of my student loans as I was losing that place to live. I have friends that I'm very grateful for sheltering me from the most brutal aspects of being unhoused.  I had a couple friends in the dorms who had let me in. I stayed on people's couches. This one particularly died, I couldn't get in. I do remember there's snow on the ground. You know, I wasn't quite dressed for it. I had a coat but it's not like I definitely wasn't like layered up to be out all night, you know.  It gave me opportunities to understand what desperation is like and what people go through. I see here in San Francisco people grapple with being unhoused and having inhabited very briefly that experience, I know how quickly it could crack someone's psyche. I lost my hope as a young person on the South Side of Chicago and frankly, I think of it as a stroke of remarkable fortune that I was able to get back into a position where I could be not only secure with a roof over my head but secure with job opportunities, learning opportunities. I think that in the past, there's been this presumption in the United States that if you're unhoused or if you're unsuccessful, somehow it's your fault. That's never been true and it's particularly untrue as wealth gets siphoned up to the 0.1%. More and more Americans are in a position where even if they have a roof over, they're not sure if it's gonna stay there. They're not sure how to keep it. We have plenty of housing for everybody and the fact that we let apartments go empty so that they aren't available for people to live in, I think that that's just a foolish choice. In my mind, making sure that everybody has housing isn't just serving the people who are unhoused. It isn't just serving the people who are housing insecure. It serves our communities because it means that our communities and our country can benefit from all of the contributions that everyone has to offer. And the idea that we have made housing such a market-driven commodity instead of a human right is just a reflection of our mislead priorities as a society. It's one of the things I wanna help correct. That is a powerful ad. And Shea Hadbutar is a phenomenal candidate. Now, what I usually say is in these types of races, I think that the insurgent lefty candidate is going to win so long as enough people hear about him or her. But in this instance, I think that name recognition is important. But Nancy Pelosi almost has this cult of personality around her where you have these resistance liberals just so infatuated with her because they think that she's effective fighting against Donald Trump's agenda when she's not at all. Clapping at Donald Trump sarcastically or tearing up his speech or whatever, that is not something that actually affects meaningful change. Actually allowing progressive policies to be voted on, challenging him in a meaningful way, it's more than this type of political theater that amounts to nothing. And you have to try to break the hold and break this type of trance that centrists are in this infatuation that they have with establishment Democrats. So even if people know about the option in Shea Hadbutar, I still think a lot of them would opt for Nancy Pelosi specifically because they kind of worship her and see her as the anti-lefty, anti-progressive who's just holding the center because that's what she said she has to do. So this race I think requires an extra effort to the left. That's the point. Not to discourage you, that's not why I'm bringing this up, but it requires us to go beyond like the traditional primary race where we can't just phone bank and canvas for Shea Hadbutar, even though that's crucial, but we actually have to do a little bit more to change hearts and minds because anytime you're going after this type of political behemoth like Nancy Pelosi or Joe Crowley, it requires a lot. And having extended conversations with people in that district who will be casting a vote in November, that is absolutely crucial. So if you live in that district, you have to get out and do everything in your power to elect Shea Hadbutar. And those of us who don't live in that district, we can still phone bank, but we have to donate to Shea Hadbutar and support efforts like this where we sign petitions and spread the word about what he's trying to do because this is a really difficult race to achieve. And if we're gonna be successful, which is possible, we have to fight like we've never fought before, fight harder than we fought for Bernie Sanders. So that's all I'll say. She's got to debate him. And I think that the more pressure that we put on her, the better off we'll be at ousting her. The better and more stronger a candidate Shea Hadbutar will be if he knows that we have his back. So I'll leave that there. This is an important race and we have to watch everything that is happening here and try to bolster the message that Shea Had is trying to get across. The Humanist Report is fake news. Mike only cares about crazy Bernie and his wacky socialist ideas. Sad, very sad. I'm unsubscribing.


Hi everyone, should I reduce the volume? It's fine. So hi everyone. Welcome back for the last set of the talks So I'm Kiran and I work as a freelancer and I also organize reactors Bangalore I hope most of you here are front-end developers So in my opinion, there are two main areas in front-end one is UI What I mean by UI is How how app looks or how the app behaves right things like Styling, you know animations those sort of things and React does pretty good job with this thing, right? So react is primarily a UI framework and the API and simplicity of react works very well for us So the second important challenge in front-end applications is state management So what I meant by state management is like how we fetch data from the server, how we manage it on the front-end You know, how do we do? How we implement business logic, how we keep our server in sync with the front-end those kind of things So there are quite a few Unfortunately react does support Some sort of state management, but it's not meant solely for that things like contest might help But not for very large applications So there are quite a few libraries like Redux, Mobets and There are quite a few others as well But still even by using these libraries like Redux and Mobets, right? Still we have to Implement a lot of logic on our own, right? Even getting state management right with all these libraries is still hard So this is where GraphQL helps, you know, so GraphQL has much more Structured back-end, right compared to REST, which is kind of you know, not very strict GraphQL has much more structured back-end, right? Especially things like Type system in the GraphQL and features like introspection GraphQL supports These are my two favorite features of GraphQL features like type system and introspection Help us build a lot of tools, right? And which will Help us build better applications with less code, right? Apollo is one such tool which leverages the features of GraphQL and And Apollo is by far the most popular GraphQL client library So GraphQL is something that runs on the server and because of its unique features, right? We can build client-side libraries which leverage the functionality of GraphQL and make our life easy So In this talk, I'll talk more about GraphQL, Apollo and how it helps, right? Even with Apollo, it has, it simplifies, it's much better than Redux or Mobius-based applications But it still has its own challenges and I will explain how to walk on those things Yeah, so in GraphQL or in any Back-end-based applications like we have three concepts, one is queries, mutations and Subscriptions. Queries are used to read data from the server which is equal to get in HTTP and Mutations are to send, to modify data on the server which is equivalent to post with the HTTP and Subscriptions are for real-time updates. So if you are building any real-time applications, you might be using, you might be familiar with sockets, right? So subscriptions are built on top of sockets, right? To provide real-time applications So let's start with queries and see how Apollo helped in this So this is a simple GraphQL query. Here you can see In this query, we are asking for users with And within users, we want properties like ID and first name, right? So this is a typical GraphQL query So GraphQL is quite different from the REST in the sense in the GraphQL Clients ask for what they need. In REST, we just hit an endpoint and we get the data back But in GraphQL, the client's request for what properties it need. For example, the user's database might have like 10 more properties But the server doesn't return those properties. The server returns just the users with ID and first name because that's what GraphQL client asks for. So this is a simple GraphQL query and to use it in our Applications, we can wrap this with GQL. So GQL is a helper function Which takes a string GraphQL query and converts into a JavaScript object, which we can use it Apollo or any other library So how can we use this query and fetch data from the server and pass it to our components? So there are a couple of ways and So using higher-order component is one way. So we can import GraphQL from React Apollo and UserList is a simple React component which just renders which gets a list of users and renders the Users and it's a user list is simple React component and We use a higher-order component called GraphQL and we will wrap our user list component with GraphQL higher-order component and pass user query Pass user query Right and so this is the only line of logic We have to write and Apollo takes care of the rest of the things Apollo makes a API call to the server gets the data and Pass it to the server Like if you are doing the same with Redux or anything So you have to implement using some sort of at your surface You have to make an API call get the response, you know implement You know error handling and you know storing the data in the cache so on so forth Right. So those things we need not do with Apollo. So like Because of the previous step, you know In addition to giving getting the fetching the data from the server and passing it to our components We also get loading state and errors, right? And So for example, while the request is happening the loading will be true So if you want to show some spinners or something we can do that or if the request fails you know, we get a rest we can handle the errors as well and if the Request is successful will get the users data and we can use that to render the company, right? So you can see that, you know without writing much code, right? We were able to get data from the server and you know use it You know, we are not writing any additional code for you know managing the loading state or handling errors Are fetching the data, you know Apollo is taking care of that Automatically all we have to do is write a GraphQL query and wrap our React components with GraphQL queries and Apollo also caches the data in the sense, you know once Apollo makes a request and it stores in the cache and When we render the same component again, Apollo doesn't send the same request again, right? And so we need not implement that kind of logical So Apollo takes care of itself and Apollo stores the data very efficiently for example Let's say when we when we fetch when we made a request for the users we got two user objects, right and it is storing it with reference to user one and user two, right and It shows that user one and user two objects separately so that you know if some other queries Faches the same data, you know, we need not duplicate data. So this is called data normalization, right? So it stores efficiently and avoid any data duplication also if because of some other Query if one of these objects are modified, you know, the data will be sink across all the components So there won't be any data inconsistencies So if your application is read heavy for example, if you are working on some media applications or some content based applications where you read different sort of data and render it on applications then GraphQL and Apollo works great So as you can see we haven't written much code, right? We are writing queries and you know Wrapping our components with that. So if you if you are building dashboards or if you are building content based applications, you know This fits very well So the next part is the mutations where you know, we are making edits and you know sending So some of the applications where mutations will be heavily used is some sort of CRM based applications where you know User enters data and the data is saved into the backend applications So let's see how you know Apollo fares with this So to send uh data to make changes to the server, right? Again, we write queries These are called mutation queries in this case. We are writing update user And to this update user field. We are passing arguments, right? So GraphQL query language is quite extensive in the sense, you know, it has augments. It has variables You know, it's quite extensive. So in this case, we are using um variables like like augments like id and first name and In response, we are we want to mutate the server with id one and first name first name is called johnny And once this mutation is once the server got updated, we want to get the response back In the response, we want id and first name ideally the data will be the same so This is a typical mutation Query Or as you can see in this query, we hard-quoted, you know, id and first name But in real applications, we don't want to do that, right? So we want to use some sort of parameterization So for that, we can use uh things like GraphQL variables in the sense, you know, we have one more layer where, you know, after mutation we can give an operation name And in the operation name, right, we can specify the Augment types in the sense, for example, we can say id is of type int And first name is of type string, right?  So this query is almost same as the before except that in this case instead of hard-quoting the id and first name We are using parameters So the how how can we call that query? There are several ways to do that. So this is one of my favorite way where we will Directly call mutate on the client, right? So how how we get this Apollo client? It's doing the setup page. Uh, we will uh Use the Apollo client library and, you know, give the cache and so on so forth augments And finally we'll get a client library Apollo client and that we can directly call mutate and for that we can pass the mutation Which is a query which we wrote earlier and pass the variables So these variables will be passed to the query and it will be evaluated on the server And once this mutation is executed We get the response from the server in some sort of dispassion like we get the data inside that we have update user Because the mutation field which we sent is update user So in the response object also we get the update user and inside that we have id first name Right because that's what we ask for and in addition to that we have underscore underscore type name As you can see in my previous cache diagram, right? So apollo is storing with as references like user one, right? So so these Cache keys are very important because whenever Apollo sees some response from the server and if it finds underscore underscore type name and id Right it immediately maps with the cache and updates it So we need not write any code in the sense, you know We got some response from the graphical server apollo automatically understands that okay This data should be updated at that particular location and updates it. Right? We need not write any logic so again, uh, this is very helpful and It also supports something called optimistic response. Let's say for example, if you are implementing Chart application and you entered something, right? You want to see that message immediately even before that message Went to server and come back, right? It takes some few milliseconds before even getting response from the server We want to show that response immediately for that. We can use this optimistic response In most of the cases we know how the response for example when we are sending a message, we know What the message will be right even before coming from the server So we can give you a mock response Based on our assumption in this case, you know, for example update user We are sending id and first name, but that's the same response. We are going to get back So we can give you a mock response as an optimistic response So what apollo does with this thing is it renders the react components twice Once before getting the response from the server and once after getting the response from the server So that where that's where you see the instant response in the sense, you know You type some you enter something you immediately see the response You made it before even before getting the response from the server and once the actual response comes Comes from the server, you know apollo re-renders again and you know Does it correctly? So this gives you know pursued better performance As you can see it looks good in the sense, you know, we are not writing any additional logic to update cache or anything But still it seems quite a verbose, right? All we want to do is update first name, but for that we have to write a query and you know We have to call that mutation function. So it it seems verbose, right? What if we have a function like update record, right? And for that we'll say I want to update record for the type name user and id one And this is the data I want to save it to the database And this update record method can be used for n number of fields. For example, your application might be Having like the three tables and you can use this method to update any Uh any table and any property, right? So, uh, we can do that, you know, apollo doesn't provide this method, but we can implement our own on our own, right? We can write a generic function, right? We can use this three information like type name id and data And generate the query the query, which I have mentioned before, right? Which essentially contains this information, right? We can take this information Write a function which generates that query automatically, right? And call the mutate function So with the with the help of that function We can have a cleaner API like this instead of writing the mutation query for every single update We'll write a generic function and use that function everywhere Right? So this reduces the boilerplate code So far we are looking at the good parts of the apollo, right? So we have seen how fetching the data from the server with apollo is very easy And you know how it provides loading status errors, you know, how it's providing cash Right and how we can handle updates Uh, we have discussed that, you know, uh, updating is slightly verbose But it's handling the cash well, but it's slightly verbose But we were easily able to write a simple function called update record and remove that verbosity So the so far we are good with apollo So these are the hard parts of apollo, you know, creating and deleting objects and you know, subscriptions So these two things require a lot more effort than the previous cases I'll explain why this requires more effort Let's say you want to delete a user, right?  And in return, you just get an id, right? But apollo don't know what to do with that, you know We send a mutation to delete user and you got the id back What should apollo do with that? But in previous case, you know update it can update the cash But in the delete case that Particular object might be referred from several other places, right? So apollo can't Guess where it has to delete So it's our responsibility to give us more guidance So this way things get complex in the sense, you know, in addition to the passing the mutation and variables, right? We have to write implement a method called update, right? And in this update have three steps like first Again, apollo cash Stores the data in a separate format. We can't directly read the data, right? The only way to read the cash is reading the query. So to read the cash will pass a query, right? And We'll use cash that read query and pass a query and we get the users data And we want to delete a user, right? So we'll filter, we'll run, we'll iterate over the users and delete the user which we don't want Now we get new set of users and we'll write it back Right, so we have three steps And this is a simple case, right Things can get complex let's say you have A role-based application where, you know, you have users who have who have Rows like admin super user and user, right? And we have different queries To get this data the moment you use you delete a user You have to update these queries as well So the previous query the previous logic which I have shown is for one one query Let's say you have to Implement the same logic for three more queries, right? So you can see it's already 20 lines of code and it it can be A hard tedious and it can be error prone as well. For example, let's say Someone else is adding a new feature, right and they added a new query They might get they might forgot to add update method in the world features, right? And it cause a lot of problems and inconsistencies so manually implementing The other way of doing instead of implementing the update method is refetching all the queries, right? Again manually specifying which queries to refetch is also tedious and it has the same problems as this right So can we automate it right instead of manually implementing the update method which we have seen is quite verbose can we automate it So again previously I have shown an update record method where we are passing type name id and data and that API looks good, right? and Can we have the similar API for this when I want to delete some some particular object All I want to call is like call some function like delete record Pass the type name and id that's all I want to do, right? So the rest of the logic should be taken care by the delete record method But Apollo doesn't provide it can we implement on on our one so If we if we can find out all the queries which are related to user So I'll show you a demo so You can see here, right? currently there are two users right and when when I add a new user right and I assign a role as admin you can see The the moment I add a role as admin here this list got updated and if I go ahead here And change the role to user you can see this this particular section of the UI got updated right and if I delete something Right, you can see that you know the user from this section got deleted. So the the UI is interlink And to implement this we have like four queries One query is to fetch the users from the server and we have three queries here One query is to get the list of admin users one query is to get the list of super users and one query is to get the list of users right, so How can we do that? As we discussed so till now like doing that manually manually specifying the update method are manually specifying which queries to refresh Is tds and error prone. So how can we do that automatically? So we wake today morning and discuss the word ast, right? So we can use some tools like ast traversal traversal and graphical schema introspection right we these are the Some of the features of the graphical and we can use these to automatically identify which queries need to be automatically updated So So this is a simple graphical query, right? So the entire query is called a document right and inside if you see whenever you see a curly braces, it's called a selection set right Anything within the curly braces is called list of selections And the first one is called the field again. It goes on. So it has a predictable structure, right? And this is very basic query the ast of that particular simple query Look something like this. It looks daunting, but it has very predictable structure. So that's what that's what ast is for right, it takes the ast is Takes the human readable code and converts into a much more complex structure But these complex structures are friendly for programming, right? So today morning we have seen how we have described how we can use the ast is to write babel plugins and yes lint plugins The same concept applies here As you can see for the previous queries, we have selection set inside that we have selections inside that we have field called users, right? so So the next part is like schema introspection, right? so So this is the query which can you which can be used to get the data related to the schema, right? And so in this case, you know We can get the list of the fields and the the types of those fields, right? We can combine these two things to automatically find the queries which are which are related to users And in addition to that apollo tracks all the queries in the app, for example As you are using the app apollo keeps fetching the data from the server and it also tracks those queries which it has already executed so apollo has a list of the watched queries and Let's say you want to delete an user So from the list of all the queries, we have to filter out the queries related to the user, right? So we can use the ast concept iterate all the queries find the queries which has field users, right? If we have any confusion related to the type of the fields, we can use the result from the introspection Once we have the list of queries related to the user, we can implement a generic update method, right? We can iterate all the those queries and implement the three-step process which we have done read the cache Do the whatever modifications we have to do and write it back, right? We can automate it The challenging part is finding the queries related to user for that we can use the ast and introspection So the same the same problem happens for create also, right when we're creating, right? It will have some side effects, right? Those those things also should be updated for that also we can implement the same logic similar to delete record So the next part is subscriptions Subscriptions is a little bit hard to implement Subscriptions are used for real-time updates It it has like a lot of moving parts like you know Whenever you change something on the server with mutations If you want to implement subscriptions, we have to publish those changes Like let's say you added in user, you publish that, right? And you have to implement a subscription resolver in the in that resolver implement Authorization so on so forth, right? On the front end, you'll write a subscription query, right? And again, this subscription has the same challenges which I described for the delete and update, right? This subscription will get the real-time updates from the server But once it gets the real-time updates from the server, Apollo don't know what to do it If a new user got added, what should Apollo do? It doesn't know, right? So here also the challenge of you know, implementing the update method happens But you know we can we can use some of the methods which we have developed But still it's verbose, right? And it requires a lot of effort to implement these subscriptions And you know it also causes performance for example in our application We have 33 tables and for each table we have three subscriptions One for delete one for update and one for creating a new item Like if you have 90 subscriptions, the performance of the app will grow high The more than number of subscriptions we have, the bad the performance of the app will be Right? So there's an alternate proposal called live queries, right? So the idea with the live queries is we have a regular graphical query And we'll mark that as an iterate live, right? So without implementing any logic, the library which we are using Should take care of keeping this data in sync with the server If something changes on the server, client should automatically get updated Right? Without writing any code That's the idea or algae So this is still in the proposal phase, which is not yet confirmed Or there are no implementations available But in our applications we had to implement it on our own Because you know we have a big application And subscriptions are not working out for us So we went ahead and you know started implementing our own live query system So the implementation will look something like this You know whenever the clients are querying the data from the server We wrote an extension which keeps track of all the objects which are sent to the clients We'll store that in the send redis When the clients are sending the mutations We'll use database trigger to identify those changes that are happening So we'll use this to information like the objects which are stored in the redis And the triggers And based on this we will write an efficient subscription Single subscription to keep the data in sync So the beauty of this architecture is We have decoupled our data-syncing logic from our business logic So it's kind of a one-time effort We'll implement just a single subscription Instead of having like hundreds of subscriptions We'll have a single very generic subscription called onchange Which will get the data action This action could be either an update, delete or create So it can be one of these three actions And data is the actual data which is changing And type name and ID So with this just single subscription We can keep our entire front end in sync with the back end Again Yeah So Apollo is mostly good Things like mutations and subscriptions are a little bit hard But we welcome them with implementing our own systems Like update record and live queries Yeah So that's all I have So if you have any questions you can reach out to me at kirana-buri Do you have any time for questions? Okay


Hey guys, welcome back to my YouTube channel. This is Daniel Rose who will be bringing you this video today from Cinema City in Jerusalem as the name suggests. This area is usually used as a cinema with a few food restaurants as well and what we're witnessing at the moment is a large scale mobilization of Israeli society, people coming out helping in all respects this country to come together after the atrocities that were committed on October 7th. So what this farmer's market here is specifically selling produce from what's called the Otef. Explain what that means as well as different parts of Israel. The Otef is the communities around the Gaza Strip. So on October 7th when the Hamas terrorists broke into Israel, those communities, those little agricultural kibbutzim, their members were either butchered or managed to flee to other parts of Israel for their safety as well as foreign workers who were actually picking the crops and that's left basically a lot of produce on the ground at risk of spoilage. So two great initiatives have been happening, firstly volunteer pickers have been mobilizing from all over Israel, not just in the Otef, also in communities on the northern border that are threatened by the Hamas rocket fire and they're setting up these little pop-up markets in any space that can really accommodate them like this one in Cinema City in Jerusalem in order to sell the produce to support the livelihoods that have been often decimated by those farmers in the south which haven't had government support yet. So this is Cinema City in Jerusalem, they're selling stuff, helping the livelihoods of the farmers and hopefully many more initiatives like this will take place as the Israeli economy continues to recover from the devastating effects of this war.