It's all the great things, and it's something that you can celebrate and you can find the text that all comes together with the song. Yeah, it's just... And then, you know, that would be the best thing about this. And I don't feel the need to keep, but then you can throw it through the radio, and you can do it outside, and it's pretty cool. It's like this. Oh my god. I think I just... I changed the example which... I don't know if you've heard of it, but I love it. It's changed. It's here with the GDZ. Not any of them. It's... Thank you. Thank you so much. Without the representation of the GDZ, I don't know how to illustrate it. Alright, go ahead. So, I'll turn it off here. Great. Yes. Nice. It's great. It's a great site. Yeah, I think that the flying child... I don't know. You're really... She'll sit in that very screen, but I think... We'll see how consistent we're tomorrow. We're well tomorrow, probably. So, he's coming. He's coming, but not to the developers. I don't know. I don't feel the need. Yeah, she is... I don't know. What's that in front of you? Uh, yeah. So, can you tell her to be there? I'm not sure. I don't know. So, if there are flight preparations... She'll just go leave to the next year. She'll be here sometime tomorrow. I don't know. She'll just leave then. She'll just leave then. She'll just leave. She'll just leave then. She'll just leave then. She'll just leave then. She'll just leave then. She'll just leave then. She'll just leave then. Hey, let's get started. Everyone. We've got a read department at the Wiki Media Foundation. It's talked to you about the Wiki Data Query Service with Stas. Stas is going to give us a quick five minute demo of what the Wiki Data Query Service is and what it can do. And then, we'd like to hear your ideas about how the service can be improved. A lot of the users of the service are developers like yourselves. So, getting my feedback would be very helpful. So, I'll hand over to Stas. You probably need to stand here for the microphone. Stas. I was told anywhere kind of in front of it was fine. So, like there would probably be okay. But then you run from the projector. I'll stand right here. That should be fine. So, Wiki Data Query Service. So, what it does basically is how the Wiki Data is how the GUI for the service looks like. Basically, the service has several parts to see and kind of work with as a human is the GUI which allows you to run the queries. So, let's look how the queries look like and run them. So, this is the most the first and the famous query. It gives us the list of cats in Wiki Data. So... Zoom in? Zoom in. Yeah. Okay. So, what we can see here is several things. First of all, we see that it refers to Wiki Data elements. It refers to labels and we can have different languages. So, let's see if we have something more interesting. Yeah, we can also have different languages here as we see. So, if you notice here at the corner we have data updated. So, what this thing means is that it's like data from Wiki Data meaning that if something is updated from Wiki Data within a few seconds as it says here it's available for users. Next thing, what we can do with it we can download the data set of course. That's the last thing we see. More interesting is that we can have visualizations. So, we have a bunch of visualizations here. I'm not going to demo them all because that will take very long time but I will show a couple of them. Basically, this is the way to kind of see the data beyond the tabular format. For example, we have maps. So, let's see if we have some interesting maps for us. Yeah, so this is the map of Berlin subway station. So, we see that we have data points that have coordinates. We can see them on the map. Other visualizations that we have we can have images. This one has images. You know it has images. Yeah, so this one has images for sure. Yeah, so we can have images directly from comments. We can also have all kinds of graphs and charts and so on. We also have a graph builder that allows you to build your own graphs. It's kind of simplistic but you can build simple graphs and import them into Wikipedia. So, that's the part that you see the most when you go to the GUI. There are other parts that you see less but also available for people to use for... There are news right now on Wikipedia. That's bots that use Wikidata data to generate lists. So, there are tools like Listeria that generate lists and other bots that use these data to control basically for quality control for finding out all kinds of problems within Wikidata and even within Wikibedias like lanes and so on and hopefully correct them. Basically what we have right now for this and other things that I haven't shown that we kind of have here is we can try to explain basically what this query means. So, there is an explanation here. Basically it says that we're finding instead of this kind of obscure numbers. We have an explanation that says what we're finding and what we showing. This is also by now very simplistic but we are working on extending it so it will be smarter and can explain more complex queries. There is no chance it will be able to explain all queries but it might be able to explain as simple ones and allow you to modify and adjust them. That's kind of all for short intro into what the query service does. So now basically what is the purpose of this all session and basically we would like to hear from you what you would like the service to do for you what you would like to use it for, what capabilities you would like to add and there's no promise we actually will do all of that but we really wanted to hear what are the needs and kind of interests to develop this further. Yes. A quick question on the display types. It's a graph. It's a graph. Can you repeat the question or was the graph visualization what kind of graph it means? Yeah, it's kind of not clear so I'll show you what kind of graph there is. So this is the graph that is in the visualizations. So this is the graph that's what it means so you have the kind of nodes and this is the way you can visualize all kinds of networks. This is the network of descendants of Chilis Khan so you can browse this and so on and you can also browse this now and open those nodes and kind of explore those networks in the GUI. So that's, we also have another kind of graphs which is graph builder which is different kind of graph despite what. And that's the charts and so on. So that's how you build the charts and the visualizations like that. Okay, so that's pretty much it for me talking so I guess we need to get it's okay. I think we're going to have to sort of register the interaction type but I have to register that in a way so that the graph can be a little harder. So protein A and protein B and there's aren't just a little bit of A and B. Oh you mean like, okay so then you'll have probably you'll have a property that in Wicked Data that says that and we don't need to do anything special but you'll just get it as a part of the part of what it is. Okay, we're also going to do anything special to make sure that when you write this graph builder so that at the beginning you can define which there are additional issues and then there are some in it Yes, so my interest is federated queries where you can take information from Wicked Data to something in data and other Wicked Data instances for context I'm I believe Wicked Data is that it takes basically information as far as you can tell for Wicked Data and just that is the only thing you don't want anything necessarily in Wicked Data necessarily so I'd like to be able to have my own Wicked Data and then use Wicked Data to fill out the gaps. Okay, so you want basically Wicked Data so it's to be able to read from your Wicked Data or your Wicked Data to read from? Okay, so does your Wicked Data have a Sparkland point? Yes. Yes, okay. So I think your Sparkland point should be already able to read the Wicked Data's endpoint but we're also thinking about allowing Wicked Data endpoints to integrate other Sparkland points and right now we're trying to figure out exactly how to get the list of endpoints so please watch the project spaces and we will be running a survey zone that we will ask people to nominate basically endpoints that they want to have and have the processes how to nominate 8 points basically it will be kind of similar probably process that people nominate properties maybe even simpler because there's not much space for objection there except if endpoints is really like broken or something so yeah, so we'll just let people tell, okay I have this endpoint please somebody add it and somebody will look at it and say yellow is good and that's it. Since others are interested in this what's the process for mapping my own entities with Wicked Data and do you think that it will work? Great question I have no idea that's the same that we will need to look at so we are fixing the same situation where it's more of a macro and our plan is to that's how we can manually generate a lot so that's a very good point that we need to look at how generally since we control a code for Wicked Data endpoint we might have some way to assist and make automatic translation but for that we need to really know what we're talking about in the country we're talking about I have more than a question which is we have this interface which is a software interface that's basically a translator to Sparkle you can put in a query and you get nice visualization of data but I think the great strength of a service like Wicked Data service would be to be able to expose a simplified API not just you have to stamp your own Sparkle query for third-party use I mean if you think about it a lot of web services that you find around that are not free are based on knowledge graphs like this one and this one is the biggest knowledge graph at the screen that we have in the world and it would be very important to allow everybody to be able to query even as a third-party not inside our cluster let's say or our project directly I don't think it's viable the way it's now to be a general purpose instrument for people outside of our projects do we have any plan to build an API that simplifies a little bit how so what that API would do not exposing directly on the Sparkle because of course I mean you could just expose the Sparkle to the world and save people just throw me an HTTP request we'll probably not go and we do that that's not viable in the long term of course because people could hear the query that brings up a service or whatever we probably I mean I think we should advertise the service to third parties to be outside the world but we have to instrument it a little bit roughly I mean create a simplified view limits so we had a bunch of when we started we had something we talked about it and we didn't find any way to define what simplified API looks like and the way to do it that we'll get to it I think that all of this to find good abstractions or simplifications that are still general enough to be generally useful I can very well mention the API that would allow you to run simple theories in a simple way so give me an instance of X right? something like that and the question is should we specialise both for 5 or 15 of these use cases and I don't know having something like that defined on the that kind of if you find that you reach these placeholders like you have the status of the scale or something like that that might be the way I don't have it yet if I had to choose honestly I would ask for everything and the processer translates that whole language to we could do that but I know it's not simple basically what Google does the decision to put it in the dust that's all it asks for it's a source you can use already that it applies to analyze the text and build a query upon that and you can see why they're some days very hard especially when you have special cases and I can imagine how it will work with genes or something I'd suggest to the government in that direction but not to bring you a query service or a new API but just make it similar to for those partners I think the government was quite asked for but it was a feedback from students that wanted to somehow harvest you to write your own query so maybe you guys have to sort of learn it on time to write your own partners I think that would be as hard for us as in the API so there are two things one is getting into your own programmers you have to be able to post your own query and there I think you certainly don't know what this is you don't know what this is and I think next up there is seeing what the outcome of your research project is that's analyzing the current query and finding out to basically see what project where people do it and from there go okay the other thing is making it easier for people to post queries articles is one of them that would make them come to form of others by their time to make gammies as well to give kind of joys for the relationship project there is a very useful tutorial on this you can find it in the top menu that I can swap all in for part of our tutorial yes so my case is that I often have a bunch of pages just want to know all the you I don't know what this is but I want to use it as a filter I think it should be possible with the older WDQ thing and I was wondering whether I can then post 10,000 to 100,000 and get a filter and it will get okay so you say you would like some kind of batch processing yeah so it's not currently possible to do that well it's kind of possible within limits of of like Gert Jorls and the query service probably the Gert Jorls so more complex queries it would also be a bit of a query complexity that if we give too much throw data to match against it it might just be small but yeah you can write a script that's what I I've been doing several times for our internal states just by this thing that does the invention that would be useful for because I just did it for special states so it's not very useful outside of those states yeah so anybody else so getting back to my question I wasn't sure at least I found you again I remember when you were working on the query service I was thinking about it Google ads it's only in PI which is kind of similar on a state that uses Sparkle directly something like that was my idea of an API for developers then I think even for users that should be something like that but I mean it could even be a provided user honestly I see so many applications special to mobile and also necessary in our applications that I direct with weak applications but even for clients that yeah we are forced to use these private personal whilst information like the Google Nomad Engine and I think it's it would be important to have a free alternative to that one thing we could think of that has been discussed time and time again by absolute reason the idea is basically finding our own query language so we have specialized what we have and basically just providing a view of that Sparkle I mean the original we did query language that I must define it's kind of an idea of the platform for that and it could hide a lot of questions of Sparkle by having an ecosystem language that is found on our table I don't know whether that would make things simple enough I think it would make it easier for me to understand query language I'm not a Sparkle I need to write things instead of query language and we've made a lot easier to understand that that would not be called like the average viewer but for us many help is so that would need help from community in two senses from community of developers and from community of users to actually define such language because I can like sit where we can define the language but it probably would be useful for me and not anybody else yeah we need to kind of have some discussion about what this language should look like but just hitting the time out so I'll see that it doesn't affect from a very complicated query maybe it would be worth having some kind of system like a job view where you can submit a really complicated query and have a much older object but it would be small so that's an interesting idea that's an interesting idea yes but one thing is it's kind of I see the use case and I also see the potential for use because people just say you know what this query takes half a year so I just put it in the job queue and let it be somebody else's problem yeah instead of writing this query the right way so it takes half a second people just to the job queue because it's easier so yeah so we still will need some controls but yeah but in general having some kind of offline capability well you kind of have it with bots but yeah having it without having your own bot probably would be useful yeah that's an exciting idea you kind of forgot that we've been looking at using like we had information to say all big apps and things like that pretty absolute response time have to be like a lot lower than we know it would be the game would actually be 5-8 seconds and is there going to be any push to like kind of get that down like a sub second so it depends what kind of queries you do so if you have predefined queries so that means you know like I think for now you have to know the whole query basically so it's a static query we can we can do it we can ensure that it's basically will be there a sub second but if it's arbitrary query I don't think right now we have a way to guarantee anything because some queries are just far so so predefined like so you would have that's what one of the things that we discussed like you would define somehow query on wiki data as a thing that you kind of predefined and say this is my query and then you'll have the idea that says okay I want to resolve this query and you will get it I think one major aspect of this is caching basically if you want to have a complex full query and you want up to the queries to the second that's not going to work so you have either one or the other either you have only very simple queries or you want to do a stable data I think this goes back to the developer because we don't need arbitrary queries that's my point I need to know all the categories and articles like in this rotation is it something what the knowledge that would do basically so maybe we kind of relax the thing with exact query way maybe we can have query template let's say you have query and we can substitute this one parameter and it still would work I think that might be possible I'm another simplified idea this is something I feel strongly about I think it would help a lot if wiki data enables the time the domains especially also the range would be nice too especially the domain of each property so the number is just a country can have a capital but a dog can't have a capital that sort of thing and that chain would enable various GUIs nothing else to enable easier browsing and I think it could also potentially enable easier investor I thought that I agree with you but I don't think it's a query question it's more like wiki data question but then say anything wrong in the end the way we've been thinking about this is always that are animals very open and the software is not going to prevent the dog from having a capital just as it's not going to give a capital B mayor which actually happens so so but you cannot of course specify these constraints on the properties of what we do that and software can make use of these assumptions it just means that you do as well you have to ignore some things that are in the focus and from the perspective that belongs to others or something you need some of these constraints that have some lines so it's not something that we have found but I couldn't imagine a very relevant software we can use some of the awkwardness for some of the real organizations I think it does potentially also tie into querying but that would be a problem probably because we are all enforcing constraints and there will be probably doubts we have constraints it's just not many people look at them and even less people do anything about them so it plays a role but we already have the querying part we need the social part to kind of approach people more to actually pay attention to constraints my question was in doing a like a sparkle dialect is there a tool that actually includes the query you want to have I like to distinguish that in the visual things that allow you to rank it I don't think that it's just a simplified interface that just doesn't expose all the possibilities you have but just find this kind of entity like you have let's take what Luke is doing as an example I'm not saying we can just comment with that as an example because a lot of people who mobile apps use that they have a pretty fine set of entities basically that you can query and when you have a schema for those entities and you can query those entities for you can for example search music loop as two guitarists for example because those are entities in the schema of the music loop entity those kind of abstraction on top of what we have with the data is probably for party applications or even power of applications would need this kind of kind of abstraction like building some form of a schema on top of the data that's much more articulated than we have it's different from the approach that the original we did query language it's it's two sides of the same story basically something like this is going to be easier to optimize for example for these things that Claude was coming on I think you have to distinguish two layers of abstraction and two layers and one layer here one is the base data model so entities, statements, references sidelines, these things that's basically the idea of a quick base that includes a lot of the dimensions of the language that could be possible and I think that's a spark I think it would be at least enough to be different from the original and then you have the modeling of the problem that's happening quickly that's something like that that's something that that's a little bit more and you could build a specializing interface from that but I don't see that how that could be made in the software and except for some very, very different cases like okay that's kind of what I'm thinking about for the sub class that's something that we should wrap up that could be very specialized things that work but they're very specialized city very applications perhaps I think it would be useful to allow for parties even internally it says that I imagine like a subset of entities would probably have a lot of like buildings, animals, cities like all the basic nouns and if we had that almost like a pre-defined entity that I know would go along with that and we could always add more along the way so I feel like we already probably have some data that we can use to look at what various people are making and you know like character loading through right away and that's a base already those users are a lot happier and they're not necessarily good that's okay okay so I have kind of a couple of proposals for topics that are in the cover yet one first one is so we talked about this query service it has the data from WikiData so is there some data from somewhere in the Wiki universe that is not that you wanted to query and it's not in the query service like structured data or well, yeah hopefully, yeah we won't be passing with the test that's not going to happen but if it's some data that is available in some form that is not that requires complex processing, yeah is there any data that you want to get into? okay, okay so question on actually is there any time to what kind of metadata time created or something like that yeah so we the answer is that we didn't consider it the reason is not because we there's kind of some prohibition against it even though there might be kind of some privacy aspects but let's say we overcome it we just didn't talk about it because there was no request but yeah that's a nothing to think about so in general any data that is available in the structure format might be available in the graph so yeah so that in theory that's possible a practice we just never talked about it so that's a new new thing for us that was just going to be a some benefit already not for all sightings or something yeah, yeah, yeah there's a couple of things but not that's why I'm asking we kind of started this topic with small steps so we want to know if we need to go more there or it's enough revisions is kind of tricky because unlike the keys a query service leaves only in the present it doesn't keep any history yeah, but we don't need to just so we kind of can do a mind trick and say okay it's a present state of the of the history so we can kind of define it as a present even though it's the past so yeah we can work around it but we shouldn't expect the same like time frame as a wiki color step basically you can see everything through all the timeline that would probably not be possible and you think there is a way to come about so it's actually performance wise because that's what I think because there will be huge amount of work so yeah, so performance it's kind of tricky because it depends a lot about how you are in because let's say if we just double the database it won't be that that big a deal because it would be just sitting there the question is how you query if you query the whole database then of course it will be slower if you query just the part that you added separately from the part that already exists it won't matter that much it might be required like we might get a little more hardware to kind of have a caching be on top of it but it won't matter that much it won't be like nothing works anymore but it depends a lot of what you query for this if you have done a change on big B this probably should be a number it's like this, you want to say all pages or all items which hasn't been changed since that date someone's made it come from really with EPI some of this this is a very good question which we kind of consider making Wiki API available that's one of the data that is not on Wiki and we might want to make it available so here I would be interested to know which APIs would so when you do it query basically if you ever done it there was a thing called service so basically it allows you to run some code that or something like the example of services that if you noticed when I did the cat's example there was a service closed that extracts labels on different languages so you can do a lot of stuff with service and one of the stuff you can do is extract stuff from a Wiki API so the question is which API and having service service can be useful so you basically do a service style switch of the data and then you just work on to that's on the to-do list that's on the to-do that I hope it would be done this on next quarter depends on various things that are outside my control but it's really I really hope that it will be possible I'm trying to set some statistics on how much some items and properties are used by the queries for example when you have templates there are some statistics how often the template is constituted then so if you have queries using a certain property or a certain value then you would have a big effect by changing one value with the data and it would cause a lot of change in queries like whether you get x or a query result no so we actually have a marcus with his students do no marcus approach yeah so we have him doing now a research on the the WikiData logs and query logs that covers topics like this like what the queries are and so on so I guess when they are done we might also if they are a little bit okay we can actually open the tools we can make some kind of components so we will see how how it goes yeah there is a lot of interesting statistics the problem is kind of how to process all this data it takes time so people are working on it hopefully when they are done we can also use those results okay so so the next topic I wanted to ask about is getting so we have this nice query data but they leave kind of the side you go to GUI or you go to API you get a picture of Jason so now if you want to use auto-wiki how would you do this like if you want to re-use basically the query query from Wiki so we have this list generator this list tier box that generates lists so that's the obvious case do you have any other kind of needs or ideas how would you use query solvers to basically generate content on Wiki where is the canonical example with the info boxes info boxes okay so yeah that's already being walked on so info boxes yeah that's kind of starting so we will keep what else we will do to kind of make this data actually so we have a group another guy a while ago on a generic JavaScript library that takes in structured data and displays it in different ways like charts or yeah that's you this visualization library yes sorry then you are working on yeah that's the graph and visualization library yeah that's I'm not sure how widely it's used because you need to kind of design this graph and it's right now it's not super easy you need to know more Sparrow and Mega language but if you're invested in it and kind of do it then you can do it yeah we have some nice visualization examples that you can do with this and they have totally data driven so they are updated is that much like this timeouts so I think that's a pain point for a lot of people and also the fact that some ways to optimize your query and then they suddenly don't time out but if you do certain mistakes then it's likely to time out and do we have some strategy also like to provide information to upstream so the public can optimize their Spark Optimizer for Blazepark or that's kind of hard because like so almost Blazepark has very optimized it and which tries to do the best sometimes it works, sometimes it doesn't so I don't believe we can do better here than they did there so we can of course and we do hypervisor in different bounds and say it works well this way but not this way and optimize on this query and so on and so forth and it's ongoing thing because it's hard but I don't think we kind of can optimize query beyond what they do just because they they have much more information than we do about how that works can we or do we expose profiling information to tell the developer to tell us what part of the query is there I guess a lot so you can't see you can't see the query profiling information unless you know very good place graphic terminals it's not going to be useful for it and I mean like it's useful to me as a person working on this for three years and like one solo cases I just dump it and send it to them because I cannot make a thousand out of it so for like random person it would be just probably more of text that is incomprehensible unfortunately we don't have anything right now that can be comprehensible can we build it I don't know maybe that's an interesting thought to consider because this data is automatically generated maybe some part of it might be extractable I just don't know maybe if we kind of if I really squinted it I can find something that can be useful for people to but generally if it's time out then you have to rewrite it usually yes so actually we're going to ask that this is a problem that comes up every now and then and I mean there's a process when we want to optimize the existing queries so they fall under the limit and the other side is increasing the limit how feasible do you think it is to actually exist at this time we can increase the limit the thing is so the thing is we don't know which limit is good and which is bad we just kind of we just chose 30 seconds because it sounds kind of not too short and not too long so yeah so we might double it and see what happens so there might be two things happening first thing nothing happens everybody's happy second thing somebody runs a query and then brings down the server and of course it happens at 3 am and I have to wake up and restart it so we could try it the problem is there would be again two types of queries there's the query that is just under the limit and there are totally such queries and I actually so there is a way to run a query without the limit which you cannot do but I can so yeah so I sometimes I check and see how much under the limit so there are a lot of queries that take a minute instead of but there are queries that just don't finish and I think it's ok to have queries that will just never yeah so for those kind of that means that for 30 seconds we cut the losses at 30 seconds if we double it then the losses would be doubled so it will be hogging the server so I think once we get the third server we probably might might try it on two servers I'm kind of still kind of scared a lot of doing it because if one goes down we basically run on single server and then we are kind of one step off total failure so on three it's kind of more if we have this monitoring so by the time it allots us we still have two servers live and we have the time to kind of bump the query and see what's going on there's another way there in the making the case for more hardware is difficult when you're vague about what you need it for but if you can say hey there's all these awesome things that we can do with it we can't do right now because we don't have enough hardware send me all those yeah so and your planning is happening soon I would say I'm not sure I will be telling completely to Ruth when I say it because like yet another server would suddenly run makes system perform better overall but for single query performance it wouldn't do anything so from that point we will be more safe from these queries but it won't change anything for the individual query so we need to just say consideration enough to run more hardware because I would be happy to have more hardware my experience is that especially when you use labels and queries often time out especially when you're using the servers for the labels it's like mostly times out it's there yeah yeah there's a reason why that happens because and actually there was time to open to it that it requires a bit messing with kind of hard source rules but maybe there's a way to make it faster it's a bit slow just because it seems it doesn't and just looks at the labels on the full language and we have like 600 languages so it might be just a bit complex what it does and it doesn't really use optimizations because we basically don't operate with optimizers so we might try to do that so maybe we can fix it I'll look into it and see if it's yeah I figured out that if you suck please then if you like just like pull the labels in the last step that helps because as I said we're not cooperating with optimizers we have to separate the part that optimizer can work and the part that it cannot and then the optimizer can do much better than the part that it can so software is sometimes not always what that might be one of the things that happens okay so yeah so maybe this is already documented somewhere but is there a document on making your queries more optimal there is something here it's kind of unofficial maybe we should review it and make it more official yeah that might be possible that you kind of make that like a kind of topic and then we can receive information and then maybe we have a plan to handle that yeah so one thing now we have this help portal so we have a place where we can link things so maybe we should review that and kind of bring it to the at least semi-official status and then maybe official status and link it from that portal I could have a question about like we've been talking a lot about like performance and like time out and things like that I know Dan like on Discovery you guys are thinking about justin stuff right like in the series there should be wiki data like how does this plan together is that like a long term strategy for like period of service something serious is that like just special use cases or like what's the relationship or how between elastic search on the wiki and the like what are some yeah because I just I know you're solving special use cases right or what's the I don't know you speak more like what that plan is like how Discovery would work with that I don't know that we have a specific plan honestly things that mostly we don't on a case by case basis the things that for example giving articles within x miles x kilometers on a specific location or a specific thing theoretically you could do something like that but I don't know what we have a specific strategy so one of the things that we plan to do soon as I mentioned is integrating between the query service and plastic so how that relates to question is that it might also help to use the cases that are covered by elastic better than query service obvious cases full-time search risk query service doesn't do right now elastic excel then but not only there might be other for example coordinate some cases of coordinates maybe better or maybe elastic has some plugin that does I don't know what does it excellently so we would use it this way generally the big distinction there is that serious only does single documents so whatever you're doing like you can't inspect your graph the way that the query service can so that's kind of where the separation there happens so it's a very good filter on one or more documents but considered as a single document so you can't explore links between them but if you need to find documents that have specific property then it's pretty good it's basically like one level of query maybe this is already possible with info boxes or templates but I'd like to be able to embed a graph view of a certain query in the article maybe so you mean like visualization not possible right now but there might be possible in the future if we gather it so we are thinking right now about making some visualizations kind of exportable so there's actually two ideas of how to do it the simpler way is to make it exportable as an image which is more like if you write an article and want to put it there basically a glorified screenshot the more complex is to make it exportable as a template for what the user is doing and that will require some work but yeah that's an idea that we are looking at we currently currently embed image maps as like a nested set of about 7 templates under wiki articles that include links to other wiki articles to show the interactions between proteins for example from one protein article and with the wiki data it is theoretically possible so there is no I don't see at least the technical reason why it won't be possible it requires work but we are thinking about is that something I can contribute to is that a common project something but if there won't be we'll publish it on the project space I'm not sure graphic extension actually can do that it's an interesting part I mean you are just putting text and if you put the graphic extension then it will come out with content there's no wiki text maybe maybe it's solidly possible I'm not sure but maybe maybe it's solidly possible maybe it's too soon to ask this question but maybe I was wondering if you have any early thoughts on integrating with the content that we worked on for the comments well we are thinking about it so basically I think the plan is to by the time it actually there to have some concept of you doing quite a bit too I'm not sure how it would look like like if it would be the same database to different databases I don't know yet but one thing I think we can already say is that for the comments editors who will want to search because it's based on specific criteria we probably don't want that to be forced to write spot queries so we will need to have some nice interface for them to say or show me pictures like this it's possible that we could do that using the last state search anything single document filtering is really amazing if you need that stuff to go well like what we just said if you need the documents just filtered by certain criteria Elastic is very good at it if you need any graph navigation Elastic is not good at it it's a long game sorry no question I don't know maybe somebody already asked this and I missed it but what about the reverse of integrating search results into integrated queries what about integrating some integrated query results into on-weekly searches like what Google does I mean if somebody types into on-weekly in the search box on a search page something that looks easy to process as a on-weekly data query like somebody writes cats famous cats in California and something could notice that there's a lot of categories that are on on-weekly data and there's an easy way to link those and for a little graph box on the surface also in on-weekly crazy, crazy product type idea we have this last product service that supplies the process that the language input just have a little job search that takes a 3-8% of the product so if there's any useful output it doesn't have to be integrating a service or when we use itself anything just with a job search could have just as a product type for people who don't know how much it costs because it's going to be like 100% as much as you can and maybe some something just crazy product type idea we've been talking about 100 queries a second yeah, so we have two yeah, two barriers basically to encounter the process performance barrier because the queries that we have there's no way Sparkle can handle that much queries especially a kind of web queries like maybe there's something that is called cats and maybe there's something that is called how many and maybe they're combined in some way that can produce some results this is very hard queries that take a lot of time that's one thing the second thing is just conceptually don't you know which queries look like they might work so I think we need more experience on that before we can do something useful but yeah that's definitely on our minds I just wouldn't expect it in the next couple of years to have something work there's also the potential to misunderstanding like I asked Platypus where is Germany and one of the answers was in the middle of Sweden where is Germany and there's two Germany's inside Germany and there's one inside Sweden so you really have a mission to Germany though that's what it sounds like so but it's a really awesome idea it just needs a bit of work so I would try everything that starts with the question mark who, where, how many or anything that is with the question mark we use the number and yeah we just need to look at it because it would be very hard to get the sparkle to perform on the level that can process a lot of queries but it also kind of relates to the design of how there are page right now works so we have no concept of kind of staging results so we cannot give one result and then deliver another result a bit later so that means if sparkle takes a lot of time the whole search page takes a lot of time so if we design it so we could split-load it that would be much more viable to actually deliver such results so we're out of time I think if anyone has any questions feel free to ask, stop the ride thank you yes please yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes Yes yes yes yes yes yes yes


Hello, everyone. My name is Miguel Sena. I work for Microsoft. And so this talk is about script execution tool. A work I started working on a few years ago with my first employer, the French Silvestri Agency, which is still going on. Initial scripts are very useful to do a lot of stuff. And they're also useful to attackers. They can be used for a lot of things. And sometimes it might not be worth it to develop a complex exploit, but just to execute, well, upload and execute a script. So along with a series of vulnerabilities, take issues, let's say, for scripts. Initial, well, for instance, well, you cannot trust the environment, the environment variables, and so on. So it might be a risk to execute interested scripts. Initial, the issue is summarized here. There is two ways to execute scripts, either to ask the kernel to execute a path. So it's the first way here, dot slash script dot s h. And the other way is to ask the script interpreter to execute the script. From the user point of view, it's the same. But from the kernel point of view, it is not the same. The first one goes through an executive VUC scroll. And the kernel can, well, execute the scripts, can kind of the same way, it could execute an elf binary. And in a second way, the kernel only executes the interpreter. And then the interpreter opens the file, the script, and interprets the script. So the main difference from the kernel point of view, and especially for all access control systems in the kernel, is that the first way to execute a script is OK because, again, sees everything and knows the intent of the user. And the other way, the second one, the kernel doesn't know what is going on. It just knows that the user want to execute the s h binary. And then this s h binary wants to open a file in a read-only way. So what we like to do here is to let the kernel, and with the kernel to let everything which is behind, so every access control types, including doc, mark, integrity systems, and everything that we can think of to be able to allow or deny such a script execution. OK, the Sved model is, well, first prerequisites. Well, if you want to have a secure system, well, you need to have an access control system in place, enforced, and well configured. But as I explained earlier, well, articles can easily upload scripts as it can do with any binaries and so on. Constraining binary execution is possible. Constraining script execution is not always possible. But here, we want to address this part. So from global point of view, if you want to add a secure system, you may want to enforce execution permissions, execution permissions on the memory, on executable binaries, and so on scripts. So here, we want to address the third point. We want to give the users, the sysadmin, the Linux distros the ability to control script execution, not to deny everything, but to be able to enforce an access control system on that. The same way we can do on everything else. But for this to be, well, practical to work in real life, we need to be able to configure it. Because, well, kernel script interpreters don't ask the canal for such permission. So just open a file, a script, read it, interpret it, and kind of execute it in the own environment, the own process. Here, we want to be able to give the tools to sysadmin to configure in an incremental way the system to be able to control script execution. Because to give you some example, if you're using a new distro, there's a lot of stuff going on, a lot of scripts, and probably multiple script interpreters, like Python, Shell, Dash, Bash, and so on. And well, with one update, you might not have all these script interpreters patched at the same time. So you need to be able to hold these updates and configure your system bit after bit. Another thing to keep in mind is that not all scripts are equals. There's multiple kind of scripts. Scripts is mainly something which is executable from the user point of view, but not from the canal point of view. So this might include, well, for instance, Python scripts, which are really powerful. They can do whatever they want. There's a lot of libraries. There's also Shell scripts, which might be a bit more restricted because it's not designed to do same things. For instance, they cannot directly call CS calls, which might not be a good thing from the attacker point of view. So Python is a good attacker tool, for instance. And we're going to also think about other kind of scripts like JavaScript and WebAssembly, whatever you can find in your web browsers. But these are most of the time already well sandboxed. So different policies and different risks. The first proposal, which was sent some years ago, is called Omega Exec. So the design for this patch series was to enhance the open CS call. First, to give you a bit of background, this was used in a really custom and tailored security distro called ClipOS. And the main policy of this distro was to enforce write the execute policy. So either on the kernel side, on the memory side, on the executable side, on the Linux, well, the main points, partitions, and also the scripts exception. So the idea was to add a new way to open a file. So you can add, for instance, a append, or read only, or write, and so on. So options to pass to the open CS call to open a file in different ways. With this new Omega Exec flag, the idea was to tell the kernel, well, I am a scripting operator, and I want to bend this script to execute it. So the kernel will then go through, well, kind of a common access check on this file. But it will also take care to check that this file was in no exec or executable mount points. So it is interesting because it is really, well, it is not too difficult to configure a system with correct no exec mount options. So it's easy to have, for instance, a slash user with an executable point, but the slash home and slash var as no exec point. And this way, it was kind of the first way to configure this security policy. Internally, using the Omega Exec flag will set the f-mod exec flag, which is an internal flag, which is propagated to other security system in the kernel. And so I implemented a way to configure this from a system point of view, thanks to a CCTL. So two flags for the CCTL, the first one to enforce the no exec, well, investment, or to handle the five-parmesan check. So without any configuration, by default, it will not change anything. So it was a flag that would not do anything if it wasn't configured, which is, in fact, what we want to have. Because if you, well, push this kind of update to generate this row, well, it could break. And that's not a good thing. So by default, it should not do anything. But the idea was to let the sysadmin to configure that and kind of harden their own installation. So at first, for instance, to handle the mounts no execution. And at second time, to make sure that all the scripts have the executable permission, which might not be the case. So these configurations went from using Yama and then creating a new exec LSM. And then finally putting it in the core can. The idea is, well, this should be kind of in mainline, enable, well, possibly enable by default for everyone. It's a long term. So it should not be part of an LSM. Pros and cons. Well, this new flag, the good thing is it's configurable, easily configurable. It can handle, well, notification with the FAN open exec flag, for instance. So you can use FAN notify to get notification of something which is a script, which is being requested to be executed. There's no resignation by design because you open a file. And at the same time, the check is performed. And some things that might be a bit weird at first, that this flag could match either a file, but also directories. And that was kind of an easy or lazy way, at first, to handle specific interpreters to make sure that a whole directory could be executable. So in this case, it was used, well, to patch IST, so Java video machine. The cons. Well, one of the advantage and cons is that open modes, well, this kind of flag, adding a new one, it's not a mode, it's an option, actually, but easy note. So if you use new open option on a whole kernel or a new kernel, we accept that. Accept that in new kernel, it could, in this case, have a different behavior. So that was kind of a good thing and bad thing. The good thing is, well, you don't want to change what already works, but the bad thing is, well, you don't know if it will be enforced or not. So that was considered not a good thing. And there was no way to check already open files. So that might be an issue too. Second proposal was, instead of focus on the open Cisco, focus on the access family of Cisco's. So we added a new AT interpreted flag this time. The same way there is an AT access flag, which is a way to kind of tweak the access check, which is performed with the access Cisco, access at Cisco, or F access at to Cisco. So the AT interpreted flag was kind of transformed to an x-OK mode, which is to check if a file can be executed. So this was kind of hack. So not very good, but still good ATs. Well, we were using an x-ink Cisco, which is, in general, good. But yeah, too much issues. And also maybe a bit too much focus on LSM issues, or LSM problems. The third proposal was to implement a new Cisco. It was kind of made more generic to be able to handle more than only script execution. So the name was chosen after a different backshedding. To name it, trust it for, the idea was to, for use space, to be able to ask the candle, can I trust this file descriptor for this use case? Kind of generic, maybe too much. And the first use case was, can I trust this file descriptor, the content of this file descriptor to be executed? Yeah, so you took five descriptors, good things. And at first, you're able to ask if file descriptor should be executed or not, according to the global security policy. So new standard SQL, quite simple. Flexible, but it's a bit too flexible, and not enough, with not enough specification. And could only handle file descriptors. So that might be an issue for some use cases. We'll see that later. Yeah, something might be not clear enough. It is kind of a different point of view. And it was told that the access kind of families was, in fact, maybe the best solution. So here I come with a new proposal. It is not cemented yet. I started working on it, but there's still some issues. And most importantly, I would like to get some feedback from this audience. So any Kail manors, SM manors, Linux users, system manors, and so on. So the idea is to have two things. First one, exhibit OK, which is a new mode. So when you call the f-axis up to syscall, for instance, or only the access syscall, you either pass f-OK to ask if the file exists, error OK to ask if the file is readable, w-OK if it is writable, or x-OK if it is exitable. Here, the idea is to add a new mode, which is exhibit OK. So quite close to the x-OK mode. But that's not what it's saying. It's kind of a superset of the x-OK mode. The main differences are it's set. So it is the same as x-OK. But it also adds what's set in the penalty f-mode exec, which can be then forwarded to other access control systems, such as LSMs. And it can also be used by the notification system to know that something is about to be executed. And the idea is to improve that by passing three existing flags to LSMs, which already pass when you're executing a binary. So with the exit v-syscall, the different LSM gets these flags and can then take enlightened actions according to safety or not of this potential execution. So as you can see, the idea with exit v-OK is not to only check access control system, to not only check the access control, the permission from the current process to do an execution of a specific file, but to do that also with the context of the current process and to kind of forward more metadata to the current. And yeah, in the case of script execution, well, most of the time you write to use also the R-OK mode, because well, you want to read the content of script to be able to execute it. What about LSMs? Well, it's a different kind of LSM, mainly for access control or for integrity, which is kind of an access control, but not really. So the idea is for them to be able to get the same or almost the same information as when something is about to be executed for a wheel. So they will get the F1 exec. And also, as we just talked about, the LSM and save flags. And they could also be able to differentiate between an exec v native call and such an access call. With the may access flag, which is an internal kind of flag, pass through all the access layers of the kernel. But there's still some commentary changes. Well, once you change your space, you need to go bit by bit. Well, you need to modify script interpreters. It's kind of already done, well, in some ways, for Python, but only for Windows. But the framework is kind of ready. And other interpreters, other script languages would like to be part of this too. Once you have one or two script interpreters updated and ready to transfer this information to ask the kernel for execution, you also need to have, well, you need this to take these script interpreters and also make them compatible with the scripts provided by the distro. And you also need to have the system in to be sure that and date and installation of the system will perform well with the specific scripts that he could put on the system or that developer or user can use for their own use cases. So we cannot do just, we cannot just add a switch on and off. But the idea here is to make it a bit more flexible than the previous proposals and to still rely on a CCTL. But to make the CCTL paramount namespace, the idea is, well, when you do moon points, you do them kind of paramount namespace. So I think it makes sense to be able to configure a namespace to add more restrictions. For instance, you would like to say, you could say, well, for this container, you want to run either no script, well, no entrusted script. So no script coming from a TMP directory, working directory, and so on, but only from read-only sections provided by the container itself, the container image. So that could work. But at the same time, you would work on your script as a developer. So well, on your main namespace or your work namespace, you will not have these kind of restrictions because, well, you would like on your home directory to have script and use them. So JD is, as a first proposal, to be able to reinforce or not either the mount no exact option or end the file permissions. So do we need to have these scripts to have the execution permission? But the difference with this approach, with the previous approaches and this one, is that it is kind of split it in two. For this compatibility to be taken in account, the idea is to add a new access to flags, not mode, but flags. The same way, we can add the at 80 access flags that change the semantic of checking execution, read, or write permissions. So with this flag, it will be possible to rely on the CCTL configuration per namespace instead of, well, enforcing everything at once. So same configuration here. But, yeah, so the idea is for generic script interpreters to use this flag because they will not, well, such developers cannot know where the script interpreters will be used. But if you're developing a Linux tail or a Linux distro for an appliance or something like that, well, this kind of flag would not be required because you'll be able to control everything. Quick list of present guns. With this approach, with the access c-scroll approach, you can either handle five descriptors or path. Paths might be a good or bad thing. Well, one use case that was explained is that you might think about your shell to be able to check the content of the pass variable to know if this file or another file can be executed. So, for instance, if you have a script in your pass environment, well, your shell might check with a name, not a file descriptor, if your script could be part of the completion, for instance. But most of the case, you want to use file descriptors because it is much more safer. And, well, it avoids race conditions, mainly time check and time use race conditions. This approach, I think, is well-defined. I think the most we can do. We can still rely on paramount configuration with the mount no exact option. There's no implicit use of other mode. It is a new dedicated mode, which is kind of a superset of the XOK mode. And this kind of check can be used by LSM to enforce the same restriction as it do for any execution. But also, to log such a terms, for example, for instance, if you're trying to execute something, but you don't want to execute it really, the LSM, like AC Linux does, could log such a term with a specific flag indicating that it is not a real execution, but it is an attempt to execute something. And according to the color, it could know, well, it is a script interpreter, so it might be legitimate or not, and log such a term. So some remaining questions, well, there's questions just after that. But one issue might be, but it is kind of the same for every new interface, is that, well, you can and might not support execv, OK, of course. But it is really easy to check for that. If you set the mode and the Cisco return e and val, well, it is not supported, so you script interpreters can just ignore that. And with the access family Cisco, well, you can use pass too, which might be risky, but it's still possible. So some open questions. First, the name, is it OK? Is it OK? Is it OK to have such a name? I don't like it very much, but I didn't find something better to express such semantic. So any suggestion if you have, feel free to chat. Other questions might be about such ID binaries. So what should happen if either the script, the set ready permission, which is not a good thing, which should not be a good thing and should be noted anyway. And what should happen if the script interpreters is running as set ready, which is also not a good idea, but might happen? And we also need to check and be sure that using such f-mode exec will not trigger unexpected canal behavior. Because it is kind of a new way for use space to set this flag, which wasn't directly available before, only with the regular exec vc score. And yeah, finally, well, we cannot do the exact same checks and enforce the, well, to have the exact same guarantees than when you're executing something for real. Because when you're executing something for real, the current process can be locked. And this will just last for a few milliseconds, I guess. But when the script interpreters do such check, or want to do such check on a file descriptor, you cannot lock anything, really. So that's a limitation. I'll go back to this slide if there's some ideas. Some lesson learned, nothing really new here. But still, well, we should encourage everyone to use file descriptors. But there is some legitimate use cases to not use them. Defining clear goal is really important, especially when you're defining new interface and incoming interface. So it might be good to be flexible enough, but not to be unspecified enough. And yeah, if you want to extend something, that's good. But there's a balance to find between extending or adding a new interface, adding a new Cisco for instance. Well, to wrap up, be able to control script execution is really important. It is not done, really, nowadays, but it should. And one thing to keep in mind is that we don't want to just block script execution. We want to be able to control stuff, like we do with other stuff. And yeah, we'll need some script interpreters changes, but light ones. So that should not be too much of an issue. But one thing to keep in mind is that if you want to have a robust script interpreter, for instance, a restricted bash, well, there's a lot of things to keep in mind, especially to not load any modules, Python modules, for instance, to, most of the time, ignore the path variable, to ignore the LDP load variable, and so on. So you might find some similarities with saturated binaries protections. Next step, well, it's to submit this 19th version for script proposal and get reviews. And well, for future works, there's some ideas to extend these execution restrictions to the kernel, but that will be in the talk for tomorrow. Thank you. You talked a little bit about Python. Are you thinking that the Python interpreter would set this bit on all imported modules, or you're thinking no Python modules? Yeah, so there's already an implementation in the Python interpreter, which was designed for Windows, because they're the same, definitely the same use case for Windows, and, well, Windows has these nice targets for attackers, because it's for end users. There are two kind of same version for PowerShell, for the same ID, same use case behind. For this kind of script interpreters, either you want your user to execute whatever he wants, because he's a developer, a sysadmin that knows what he's doing, I hope so. And in the case of regular users, which are not developers, no sysadmin, no, should execute a script, yes, you should restrict the input that the script interpreter takes, the module that the script editor can load with arguments, dash m, and so on, and you should restrict a lot of things, and yeah, that's implemented in Python, it was wild since I took a look, but yes. Okay, and since you asked for feedback, I think it's ugly to set a new flag via access n. Yeah, well, yeah, just to add something, if you want to enforce that, of course, it should be a build configuration, so you might have two script interpreters, one which is restricted for every user, and then there's one which is only accessible to developers, sysadmin, and so on, but that can be enforced with a regular access control system. Okay, so another question, I think there are some other applications for this other than just executable files, so I think on a system you have configuration files, which can be really critical, and in a way, you could say a configuration file is almost kind of like an executable, it will change the execution behavior of a, also if you have a web service starting up, for example, and I thought, initially, I thought that this would be generalized enough that you could use it for non-executable things, but I'm just wondering if that needs to be taken into consideration if it's gonna be to exec execution focused, and I think there's a possible another application which is reading private keys and utilizing them again, you have these, the behavior can change dramatically based on input, so I just wonder if this is gonna be generic enough or whether that needs to be considered in the naming and the design. Yeah, good question. So that was part of the idea to create a new syscall, trusted for syscall, which was kind of flexible, but maybe a bit too flexible. So yeah, taking into account configuration, configuration is, might be as critical as scripts, but so one thing to keep in mind is that if your script interpreters can take arbitrary configuration, well, it's kind of not your script interpreter anymore, so you should only take confusion from trusted sources, and that can, most of the time, be kind of hard-coded and so works, but in some other cases, it might not be the case. I think it could be possible to extend if access at syscall with other modes, but that will need to be very well-defined, and the issue might be, well, the kernel, it is not only part of the kernel semantic. The kernels really don't know and don't care, but if you're reading a confusion file, if you're reading a sensitive file, if you're reading a picture or whatever, you just care that you're reading something, and the access control system, the current one, or the main ones, only care about reading stuff, not tying, not extending this read permission, splitting this read permission into more granularity, with more semantic, so I think it will not be part, well, it will definitely not be part of these batteries, and it might be worse, creating a new dedicated interface, but that will be changing. Yeah, I think, though, when you have a script interpreter, again, the kernel, from the kernel's point of view, all that's happening is you have a process is opening a file and reading it. It doesn't know that the script interpreter's executing it, so I think that there may be too much semantics already in the kernel around this being for execution, so I'm sort of pushing back towards the trial, it's more like trusted, and let's not get into executable JPEG files. Yeah, so the main pushback from Linus was the semantic needs to be really well defined, and for this to be really well defined needs to be already defined in the kernel, so the idea with a new proposal is to add an interface to expose to user space the kernel semantic, which is already implemented. Yeah, I think the main problem is that we already have the access control for read and write and everything, but the execution, like the access control for execute is hidden in the kernel and has multiple weird side effects that were not, you couldn't query it in any way, whereas everything else, you do a read access check and you'll pass through all the LSMs, like you'll get a real result, but that wasn't true for this. Personally, I'd like to really push back on Linus's suggestion that maybe we should include paths in this because why create a modern interface to something that has, that exposes a time of check, time of use flaw? Like, don't. Yeah, if you're modifying your script interpreter already to do the right thing to check for this, just open the file descriptor first and use it as a file descriptor, and just don't expose something that could get misused. There's no reason to do that. We already have to change user space to use the API, so it should use modern APIs to do these things as opposed to all the race conditions, and that's, I mean, we're still getting hit with these kinds of, and now we swap out the sim link right between the check, so I'd really push back on the path name part of that. For the set UID thing, which is one of the things Linus had said, hey, I don't really care which way this goes, I just want it discussed. He was talking about, well, you could end up doing sort of emulation of execution in user space if you could expose all this stuff, and I don't know if we want like, you know, exec v okay and exec v no suid okay, where you're actually saying, yes, I would like to examine the suid behavior here, or no, I don't care about it, or defining that we'll never go do suid type things, and just declare that interpreters don't have a suid mode anymore, we'll pretend Perl never had suid Perl, and move forward. Yeah, about this set UID stuff, so it's mostly about the no suid mount up. So I think the most safe for word and simple approach would be to just do the same check as a kind of dose when you're executing something, just that and just mix the semantic because it is what we want, but not let the user ask for a specific use case the same way the user doesn't ask for either this passion is in an no exec one point or not, just ask, well, if I do an interview with that, will it work or not? Right, I think the issue is that we might end on a situation where it's not just will it work or not, but will it work and be suid or not? Right now if you try to run, actually run a program that's set UID marked, like the say UID bit is set, but you're in a no suid mount, it just runs without the bit. So if you've got suid Perl trying to do a check, you'll come back with, yeah, you can execute it, it shouldn't be suid though, and then it'll look at the file system and say, oh, I have the bit, so I should do the bit. So I think there needs to be some sort of specific description of if the bits are set and it would be allowed to do this, if we do this, like actually lay it out what the logic should be for that. But personally, I think it should be no suid at all ever. Yeah, so the question might be, if a script interpreter is run as set UID, would that be simpler to just check that this process is running as set UID and then just exit? That could work too. Hi, apologies if you perhaps mentioned this during Trusted 4, suppose I missed it. Have you given any consideration to script interpreters that can take their script via standard in? Because I mean, you could stop somebody with a new flag from running shscript.sh all you want, that person could then just run cat script.sh pipe to sh. Yeah, good question. So that was part and still part of the part series. To, well, yeah, so first I should recheck. So, yeah, so yeah, to summarize, we could call Python with slash dev slash TTY, for instance. Then you could pass stuff inside that. But the question is, is this device executable? Is this file executable? Is this pipe executable? And I think it could be solved quite simply with that. So I would caution you against making this a property of the mount namespace out of concerns about the implications of that in terms of it's being able to escape from that by creating your username space and mount namespaces. Yeah, so in the code I'm writing, the idea is to, when a new namespace is created, it initiates the previous limitations, restrictions, and can only add new ones. But, yeah, that might not be good for everyone, but I think it's much better than a global stem policy that would limit a lot such adoption. So if there's any other idea, I will be interesting to hear. All right, thank you.


I'm Christina Morales, Housing Division Manager with the City of Hayward and thank you for having me here today. I was motivated to participate in the Eviction Prevention Learning Lab because we have a recently adopted rent stabilization ordinance and trying to help community members understand their rights under the ordinance we found challenging and the Eviction Prevention Learning Lab would use that could provide us the support we need to better help us understand how to reach out to those individuals. Specifically for the housing loss data tool when we had updated our, we recently updated our ordinance. There was a constant conversation about needing more data from our council members from the community, from people who wanted housing policy changes to groups that didn't want it to change. And there was just a complete lack of data. And what we were hearing from the community was a plea for help that the housing prices were too high they were facing eviction. And what we're hearing from the landlord groups is that they needed to be able to support the properties have sufficient revenue to cover their costs, and they had a right to a fair return. And what was happening is the conversation was turning to one where it was a conversation about having isolated tenant incidents, incidents from the landlord groups and losing that plea for help. So we really needed data that would demonstrate that there was a pervasive problem that needed a legislative response to help with.


Thank you, Firstfultor, Neville and Ofer, for inviting me to come and talk today. Thanks everyone for coming along. It's a really fascinating event. I've been struck so far by how unwar like lots of the images we've seen so far have been. In that vein, I present to you my image of a potato. I chose this image in particular because I think it captures the idea of translating conflict particularly well. This is a photograph taken by an official Islamic State propagandist, a photographer, a photojournalist, if you like, in Iraq in 2015. It's a photograph of a potato, but it's also much more than that. I'm going to try and convince you, explain to you why it is much more than that. I think if we walk back a little bit and look at the overall output of the Islamic State in the last few years, obviously there's lots of iconic images, possibly more iconic images to have come from this group than any other before it, whether it's the headings, whether it's a guy dressed in black standing over a man who's about to kill wearing orange, or whether it's the big mushroom cloud that you see after a suicide operation, or indeed a convoy in Libya with a big black flag of the Islamic State flying in the background. All of those things, yes, they are the Islamic State. All of this is the Islamic State. But so too are images like this one, which was drawn from a photo report which tells a broader story, kind of a piece of documentary about agriculture in this particular part of Iraq in this particular time of the year. Now, I'm going to break down the image and try and walk you through it to try and kind of disaggregate some of the meaning within it. I think a useful way to do this is to start with the caption. All Islamic State images have captions like this one. This one in particular reads, and that translates roughly to collecting the fruits of the potato harvest in Zawba. Now, Zawba, I checked it this morning, is one hour and three minutes outside of the centre of Baghdad. It's in a place that was controlled by the Islamic State for about eight months or so, somewhere that it puts quite a lot of effort into doing the whole bureaucracy thing, playing it being a state. And this was one of many photo reports to emerge from there where it was saying, look, this is the Islamic State, this is what we're doing. We're not just a fighting organisation, we are an organisation that is providing. It's probably also relevant to note that the word janni there, it's also got some chronic connotations as well. It refers to the Surat Ar-Rahman, the 53rd verse in that, where an individual is describing how Allah, how God essentially created fruits for mankind, created vegetables, created everything for mankind for the purpose of mankind, for the purpose of this chosen community. So, again, by describing this in this way, the Islamic State isn't just saying, look, here's a potato, it's saying, look, here's a potato that is growing in this particular way, in this particular season of divine abundance, and it is for you, the chosen people, you supporters of the Islamic State. Now, just to the right of that, you'll see a little logo, a calligraphic logo, and then, underneath that, al-janub. This denotes that this is from the Waleh til Janub, so the Janub province, south Baghdad province of the Islamic State. Now, there's lots of different provinces, they do all sorts of different things, but all provinces have their logos done in this particular calligraphic script, and it's interesting, because the script itself is called jelly diwani, no, jelly diwani, and jelly diwani of the many calligraphic scripts that there are is particularly interesting in this context, because it was developed, conceived of under the great Ottoman sultan Salomon the Magnificent, the guy who captured Constantinople, the guy who beat the Romans. This is a guy who the Islamic State really, really wants to emulate, and this is an individual that they're trying to capture the essence of. I mean, obviously, this is just a logo, but it's also part of this broader, very strategic take that the Islamic State has on all of its branding operations. Now, the photo itself. As I said, it's part of a broader photo report about all sorts of different agriculture. I mean, this is not unique to Zalba, it's not unique to Waleh til Janub, not by any stretch of the imagination. I mean, just in the last six months we've had apple farms in Sinai, big sweeping vistas of Somalia, Snowfall in Afghanistan, this kind of very utopian, blissful idea of what it is to be in the Islamic State. It still comes out today, but nowhere near as much as it did in 2014-2015. But the image itself, if we go back to this specific image, what I like about it in particular is the guy's glove. When I first saw it, I kind of thought, ah, this must be a soldier or something like that, the glove, the fingerless glove, just immediately said something military to me, but of course it's not. This individual, I think, is probably the farmer, either that or a propagandist, but it looks like the photographer has just stood behind him just to the right to capture this particular image of a potato that has been very painstakingly removed of all its dirt, so you can see it in all of its potato-y glory. But the image itself, again, going back to the broader context of the image and what it does, it frames the Islamic State in a way that we don't often think about. It frames the Islamic State as a provider, as an organisation that isn't just fighting, isn't just killing, isn't just trying to change, well, not just change the world, but a revolution. It's also an organisation which is thinking about the people over which it is ruling, and that may be counterintuitive, given what we know about it, but it's been happening for a very long time and it's still happening today. What's going to be particularly interesting moving forward is how images like this translate in the coming months and years, now that Mosul has fallen, Raqqa has fallen, Nadine, Albu Kamal, Caim, all of these places that were of great importance to the Islamic State when it was in its heyday 2014-2015, when the state was, well, it really kind of looked like a state. Now, though, the whole propaganda operation has kind of shifted, it's recalibrated, no more is the Islamic State spending quite so much time on potatoes, it's much more focused on suicide bombing kind of skirmishes, the kind of stuff that you would expect to see. But that doesn't mean that this is no longer representative of the Islamic State as an idea. I think it actually becomes almost more important to it because what I'm seeing now, and I spend a lot of time not just on official Islamic State channels, so looking at what they're officially saying, but looking at what the supporters are saying as well, so how they're trying to navigate themselves through this terrible time. And images like this, they pop up again and again, not as formal things, but kind of organically. This is supporters of the Islamic State almost trying to paint the period of 2014-2015 as a golden age of the Islamic State, a new golden age of Islam. I mean, that's how audacious they are willing to go. So it's interesting. This image of a potato, I think, is going to be one of the keys to the Islamic State legacy in months and years to come, and we ignore this potato at our peril. Thank you very much.