Welcome back to Tennis Talk, my name's Cam Williams and we're back for the weekly power rankings and the normal rankings as well And we've just had the Madrid open a massive tournament for both the men and the women and there's a lot of changes Not only to the power rankings, but also the normal rankings Let's go start with the players with one last week because we only had two tournaments It's some big big winners. We're starting with the Madrid open for the women and on Strabo She wins her biggest title of her career winning against Pagula in three sets 75 loves 6-6-2 to lift the biggest trophy of her career Carl Zalcárez finishes the week with the trophy in Madrid massive week for him again Beatings Vera in the final 6-3-6-1 and he is on an absolute role at the moment Let's start with the WTA rankings for this week And we've had a lot of changes as you'd expect but no change up the top Egas Fiontek, even though she didn't play in Madrid She's still at number one, but Dosa she went down to number three allowing Kredgikova to go up to number two again Even though Kredgikova didn't play in Madrid Zachary comes in at number four one-spot higher than last week Kontovate also goes up one-spot as does Pliscova But on Strabo, she goes to number seven in the world after winning in Madrid Three spots higher than last week and like I said earning a lot of points from that victory And Sabalenka last year's Madrid open champion She goes down four spots to number eight so she's dropped down the rankings fair bit Failing to defend her title, Collins also goes down one-spot to number nine And Mugaruta rounds at the top ten one-spot lower than last week Having a look at the race to the finals and no change up the top Fiontek's still number one, but on Strabo, she's gone up to number two after that one victory And earning a thousand points so she's gone up ten-spots higher than last week To number two in the race to the finals pushing Bidosa down to number three And Pagula making the final of Madrid She's gone up seven-spots higher than number four in the race to the finals Pushing a lot of players down, Zachary, she goes down two-spots to number five Collins down to number six two-spots as well Kontovate down two-spots to seven and Kiz goes down two-spots to number eight Zamona Halep, she goes up one-spots to number nine And Bencic is holding on to that top ten-spot But it's two-spots lower than last week Having a look at the ATP rankings and there's a few changes to these rankings as well With Djokovic at number one, still ahead of Medvedev who's at number two We haven't seen Medvedev for a couple weeks That's why we haven't seen too much change up the top Tverov comes in at number three, Rafa stays at four, Sizi passes at five But Alkaraz, he's gone up to number six After winning in Madrid three-spots higher than last week And of course a career high for him Rublev also going up a spot to number seven, one-spot higher than last week Beritini, after not playing in Madrid and losing a lot of points from the final he made last year He's gone down two-spots to number eight FAA, he's gone one-spots to number nine And Caspar Rude, he's gone down three-spots to round out the top ten for this week Having a look at the race to the finals and it's getting really close Up the top there with Rafa staying at number one But Alkaraz, he's jumped into the number two spot Pushing Sizi pass down to number three And he's only a couple of points away from Rafa But of course Alkaraz not playing in Rome this week, Rafa is, so that might change Rublev, he's gone up two-spots to number four Pushing Medvedev down one-spot to number five FAA has also gone up a spot to number six Pushing Fritz down to number seven Which is two-spots lower than last week And Sasha Zverev, he's made his way into the top eight After making the final of Madrid, that's four-spots higher than last week Pushing Caspar Rude down to number nine And who be her catch? He goes up one-spot to number ten Rounding up the top ten for the rest of the finals All right now it's time to check out the power rankings And there are some massive changes to the power rankings As you'd expect after a big tournament like Madrid Starting at number 20 And we have a new entrance with Pagula Heading into the top of the power rankings for the first time ever She's being rewarded after having a really good week in Madrid Making the final and beating some really good players along the way Coming in at number 19 Nemiya Sarka, she's gone down five-spots lower than last week And I know a few weeks ago people were questioning Why she was so high in the power ranks While having a bad loss against a lower ranked player in Tormo So she's gone down five-spots lower than last week Coming in at number 18 We have another new debutante to the power rankings Anissa Mova She beat a couple of really good players along the way In Madrid She gets into that top of the power rankings at number 18 Coming in at number 17 Taylor Fritz Now he's gone up two-spots higher than last week So it's not because he didn't He played very well He actually didn't play in Madrid at all But a lot of the players that are above him had poor weeks So they've dropped down and he's benefited from them Coming in at number 16 is Ketch Manovich He's gone down five-spots lower than last week So after a rocketing couple of weeks He's just gone down the power rankings the last few weeks He did lose the Rafa Nadal So it's not like he had a bad loss But still, a lot of players did a lot better than him And that's why he got pushed down for the most part Coming in at number 15 is Maria Zachary Now she goes down six-spots lower than last week After failing to make it past the second round So losing to Kazakina in that second round really cost her She's gone down at number 15 in the power ranks Coming in at number 14 is Annette Contavate She's gone down one-spot lower Now she didn't play last week And as a result of not playing A lot of players did well last week and pushed her down So she's gone down one-spot Then on Medvedev he comes in at 13 Same reason as Contavate didn't play last week So he got pushed down because other players played well Coming in at number 12 in the power rankings is Hooby Hercatch He's gone up six-spots higher than last week Trying to push towards that top 10 of the power ranks And he might be able to do that If he does play well in Rome next week He made it all the way to the quarter-finals Beating Makina along the way And then of course losing to Djokovic in the end Which is not a bad loss So he's gone up six-spots Really, really good week for him Coming in at number 11 is Paula Badasso Now she's gone down three-spots lower than last week And only a few weeks ago she was number four in the power ranks So she's really dropping down quickly in those power ranks Of course lost to Simone Halleb in the second round And that's not a bad loss because Halleb You'll find out as soon as in the power rankings as well But because she only made the second round She didn't really add to any points And so she dropped down Other players did better than her And she was pushed out of the top 10 Speaking of Simone Halleb Coming in at number 10 is Simone Halleb She's gone up 10-spots higher than last week Of course beating Badasso Goff along the way Making the quarter-finals of Madrid Really, really benefited her So she's gone up 10-spots higher than last week And of course beating someone in the power rankings Is always going to give you a massive boost Coming in at number nine is Alexandros Verov He's gone up six-spots higher than last week's power rankings Of course making the final of Madrid Beating players like Oje Eliasim and Sitzipas along the way And the Sitzipas win was a big, big win for him Because of course Sitzipas has been in the power rankings For a while now And beating someone in the power rankings Will give you a massive boost Coming in at number eight is Belinda Benchich She's gone down one-spot lower than last week She lost in the third round to the eventual champion Jebors That's not a bad loss But because she didn't do as well as other players She got pushed down Coming in at number seven is Yannick Sinner He's gone down one-spot as well Same reason to Benchich Didn't have a bad week He lost to Oje Eliasim in the third round But again, other players did better than him So he got pushed down Coming in at number six is Andrei Rublev He's gone down two-spots lower than last week And again, he made the quarter-finals Losing to Sitzipas in the end It's not a bad result But of course other players did much better than him So again, he got pushed down as a result of that Coming in at number five is Stefano Sitzipas He doesn't move a spot He stays at the same spot he was this time last week After making the semifinals of Madrid So Sitzipas is a steady top-five power rank player And coming in at number four After her win in Madrid on Stjabor She's gone up ten-spots Higher than last week into number four Beating a lot of good players along the way Of course, beat Bencic, Helip and Pagula in the finals So some really big wins there And if you do win a tournament You are going to get benefited in the power rankings We're starting to find that out That the players that win tournaments get a massive boost So she wins a big tournament And also beats a lot of good players along the way And fellow power rank players So she gets a massive boost Goes up to number four Now out of the top three of the power ranks And we actually have a change this week To the top three Number three is Rafa Nadal He's gone down one-spot lower than last week Because of course he lost in the quarterfinals But it wasn't about where he lost It's who he lost to He lost to someone who's in the top of the power rankings Speaking of Number two in the power rankings Carlos Alcárez Of course, beating everybody to get the Madrid title Beating Rafa Which helped him get over Rafa in these power ranks He of course beat Djokovic as well And Zverev in the final Also beaten Nori along the way as well Who has been featured in the power rankings Over the last few weeks So massive wins for Alcárez Very close to top spot And maybe if he plays well at the French open And the person who's on top of the rankings Doesn't play so well He might take top spot by the end of the French But the top spot, again The fifth consecutive week is Igor Shryontek She didn't play last week But that doesn't matter She didn't actually lose to anybody last week So she keeps her ranking But she is playing in Rome And by the start of the French open With Alcárez not playing next week If Igor does have a bad loss next week We could get a change at the top So the rankings are very very close up the top there Rafa not too far behind Alcárez But Shryontek and Alcárez battling for top spot Who's going to be in the top of the power rankings By the French open A lot of pressure on Igor this week To maintain that top spot There you have it The power rankings And the normal rankings for another week Massive changes in all of the rankings Of course the power rankings Now we're starting to figure it out a little bit If you win a title Or if you go on an amazing run And you beat a lot of good players Especially players That are also featured in the power ranks You are going to get a massive boost We've got Djabor Alcárez of course winning last week They got a boost He's very good at boost Pagola made it into the top Of the power ranks But let me know down in the comments below Who are you most shocked About not seeing in the power ranks We still don't have Djokovic in the power ranks Of course he hasn't played that much So compared to those 20 players in the top 20 Hasn't played enough But who knows Maybe after Rome You might be able to sneak in there But let me know down in the comments below Who are you shocked about being in the power ranks Or maybe not being in the power ranks


Get To Know is brought to you by Dr. Tiffany Todd Duncan DMD located on Mall Road in South Williamson. Typically, while on a hunting trip, the goal is to bag a deer. If you happen to harvest the largest out of your friends, you earn bragging rights until the following year. This season, Ricky Workman of Logan gained bragging rights for years to come. While on an annual hunting trip, Workman had to face a few obstacles within the first hour of arrival at deer camp.  While unloading a four-wheeler, Workman's finger became stuck in a winch. His friends immediately rushed him to the emergency room. After being transferred to another hospital, Workman faced surgery, but ultimately lost his finger. I didn't want to mess my buddy's trip up, and like I say, I hadn't had a vacation all year, and when you work every day, you look forward to a vacation. So I thought I could lay around at the house where I could go up with my best friends in the world. And I chose the latter, just went up there and finished my hunt out. And that he did, the day after surgery, Workman harvested a 12-point buck.  The way I look at life is you can stay home and be protected, or you can take a chance and you can live. And me, I would rather live than sit on the couch. Reporting in Logan for EKB News, I'm Shelby Steele.


I like to use different writing assignments to achieve different goals. So for example, in my lower division classes, the main focus is to have them synthesizing material from readings, from the textbook, from classroom discussion, from my lectures. And so the online discussion board provides them a place to start to synthesize those ideas and prepare for exams. So directly linked to the exams in the lower division classes. In the upper division classes I have them reading a lot of pretty heavy theoretical material. And this gives them a chance to start to get their ideas together writing as a way of thinking. Starting to synthesize ideas in their own minds from the readings and some of the images we've been looking at in class. And then come into class already having some ideas that they want to share with the rest of the class. So different goals for different writing assignments. Also using a variety of writing assignments allows me a way to reach different kinds of learners. So I have for example some people really thrive in putting together a research paper and are comfortable with those, some of those procedures and so that's a very comfortable kind of assignment. Working with more creative writing, for example my new assignment in writing historical novella or historical short stories gives students who have more comfort with creative writing a way to integrate that into the way they're thinking about writing. And conversely it gives the students who might be less comfortable with those kinds of assignments a chance to explore and give it another try. Maybe for example if they have less comfort with a research paper assignment they know that that's coming up and that they're going to have to do that and that might not be comfortable for them but in the same class if there's also an assignment that draws more on their creative writing skills then that balances out. What I notice in reading through the entire evaluation is that they will find comfort with one or another writing assignment and I think that that gives them confidence to try something they might be less comfortable with. All of my 400 level classes are writing proficiency so they're expecting to come in and write research papers and sometimes I have a lot of studio majors and design students in my classes along with the art history majors and they're terrified of writing a huge research paper. They haven't taken any kind of writing classes since 101 when they were freshmen or sophomores. For example having writing assignments where they're writing group papers writing different parts of one assignment warming up for the research paper or in some classes not having a huge research paper but having classes where they're writing something journalistic. They're going out and looking at an exhibition and writing about that or writing about objects that will appear in an exhibition so that's a useful kind of writing especially for people in the arts to know how to write specifically about objects for a specific context and that diffuses the tension. They're expecting a huge research paper and they come in and write small wall labels for example wall text for objects and they end up doing a lot of writing and a lot of research but the context is different and so they achieve a level of comfort they might not otherwise.


Hello, supercharges. A few weeks ago, Paul built a router and then enhanced it to store each individual view on the server side. The advantage is that the initial page is smaller, making the app spin up faster. The downside, however, is that on slow connections, each navigation can be painfully slow. Let's simulate a slow network and make every response take something between one and two seconds. So the page loads, and when it's done, the network is idle. Once we click on a link, we need to fetch the data from the server, and we have to show a spinner because it is taking too long. A solution for this problem is resource hints. Resource hints let us take advantage of the idle time on the network to prepare the data we need next by putting link tags in our documents head. These instruct the browser what resources to fetch when it has some time to spare. In our case, we are going to load the other views. Now the browser will load these resources when the network is idle and the user is busy interacting with the page. Even though we still have delay on the network, the views load instantly. You might be asking yourself why I'm not using HTTP Push. With Push, you're forcing the data onto the browser, ignoring if we have any bandwidth to spare or if the resource is maybe already in the browser's cache. With resource hints, we remove all that responsibility to the browser because it knows best when it is idle and has some more time to do stuff. I've updated the code in the repository for you to check out. See the link in the description. Until next time.


Yeah, we're three minutes, but we're live. Good. Thank you. Wow. Good room. Let's go because I have a full list of slides. So pitch me in the graph, most of all with gremlin. Anyone has been using writing already? One? Okay, so you're all beginners. You start from nothing, right? Good. I can tell you anything and okay, I seem to have a very young audience. If you want one of them, I can sacrifice one. But anyway, so, let me talk about gremlin, which is one of the languages to actually go into a graph and learn and extract data from it. So that's exactly what's on the agenda. I'm going to start working on presenting the graph itself, at least how we organize closer to the graph. I don't know. Okay, we're still live, right? Okay, anyway. So first part of the talk, where I'm going to tell you about the, well, if I have slides, I guess. Oh, that's the best here. We talk about, well, discovery of the graph, presentation of the graph itself. So you have the basis of the element. That's going to be very easy. There are two elements. There are notes and there are edges or however you call them. And then we're going to dwell on to the most interesting part, which is how to traverse, how to handle this big blob of data. Okay, it's not going to be like SQL where everything is nice and clean. Okay, column values and everything is understood in it, right? Everyone does that, right? Okay, here's the big mess. So we're going to see how to move like that. And I will finish by Graham and PHP itself, meaning that whatever I'm going to present you now, well, if you want to use it from PHP, of course, well, you need the link at the end. And I'll just show you at the end. So we skip the installation and the dirty, greasy details for the for the end. For those of you who don't know me, I'm the proud owner of the first elephant ever. That's my main achievement in life. I just, you know, I haven't torn it. I've been doing PHP for since the last century. And I'm probably the most, I would say, negative of a Belgium. That's possible. Yeah, I, I don't speak French. It's very, very badly, but whatever. And I give out to the country. So probably you take me, put it in a, you know, photo booth. And then I get you get a Belgium guy. So just a country. Anyway, how come do I do I end up with working with granny? Just because of that, I do for living static analysis. So I don't even run the code you plan to run. But before that, I actually tried to review it.  I realized it was way too much. Okay. Currently, it's like three o'clock. So I probably have already reviewed 12, two million lines of code since this morning. The machine is working for that on all the time. So basically it takes, it takes a piece of PHP, just break it into tokens and rebuilds the links there is between the lines of code and what's really happening. And you think about a little bit about it. It's more, it's not a table. You can put, you know, every if in one table and the switch in another one that the method calls in a third one, that's going to be a mess. You need relations between all those elements, whatever artificial they may be, and you want them into something that you can query. So that's exactly the experience. So one thing we're going to work on, and that's why we're going to, you're going to hear me listen and mention WordPress a lot, is that we're going to work on a very simple graph, which is the WordPress called graph. Okay. I chose WordPress because it's mostly functions. So you understand it's kind of easy. We take, you take one function, the function has a name. So that's what I'm going to collect. And from there, I know what are the other PHP functions that are being called. Okay. No namespaces. So that makes the wall of it very simple by itself. Most of the PHP function has been removed. So we won't have anything that's alone like that. Okay. Anyone understands what we're working on? Right? Okay. So if you understand what you're working on, then you're going to understand that because what I've shown you before that this concept of linking a function and its function called on the definition will end you up with that. So it's very easy. You can see there are nodes. And there are links. But there are a little bit. So that's actually the usual experience I have. Okay. I think about turning a network into something that I can understand. So I collect that. And the collection is usually kind of easy because here, what do I need? I need to tokenize PHP code. So there is the tokenizer extension for that. I collect the strings. I put that in. I just select the one that are important. And I put that in a dot format. And that's it. And then I try to understand what's there. And I don't know, right? I don't even know what to start with. Okay. It may be arbitrary, but when you look at a table, then you start at the top. I zero ID one, something like that. Here you don't have that. Where is it? Where is the number zero? I don't know. So we need a traversing language. And that's actually the definition for that. Traversal language, something that helps you navigate through the maids of the graph and will actually provide you with interesting data. That's what we want to end up with. Okay. And the one I discovered when I stopped looking for something that was not as well to support my static auditing was Gremlin. It was, I don't know, like four, five years ago, something like that. It was in version two. And we're going to work only on version three today, which is the current version since a year or something. So what is important? So first it's a domain-specific language, so it's going to work only for graph. Okay. You can apply that to something else. We will actually see how the concept can actually ooze into PHP. That will be the conclusion. It's a programming language. Again, I'm going to compare that with SQL. It is not something where you feel you have templates and you just feel a few keywords and you get some data. No, no. We're going to work. We can have variables. We can maybe not declare classes. That's going to be over here, I guess. But we can do lots of things. We can have loops.  So that's the important part. It's open source. The code is online. It's actually an Apache incubator at the moment, so you can go and download it. It's vendor agnostic, so also we do not depend on one database. Okay. It's more standard as for that as SQL. You can apply that to many different databases. There's a list of them at the end, so when it's important to know that, you'll have the list. So the letters are here. G is V and E. They're actually the first thing that is actually kind of stressing when you start is that the vocabulary is not the same. Okay. So when we talk with Grammarine, we have graph for G, E for edges, and V for vertices. Simple enough. Vertex, if there's one. Okay. It seems like it's some kind of Roman language. And edges. You may also have people talk about nodes, links, and the data sets, or also objects and relations, and the data set again. Okay. So suddenly, two, three different words for the same reality. Okay. Be ready for that. It's not the same in the only situation where you'll end up with the same concept applied to different realities. So be ready. We'll try to stick with this one, although I've been learning that myself on my own, so I usually mix them. Please switch them from one to the other. First actor we have, well, we use the G here. That will be a recurring gag. G for graph, maybe for Grammarine. I don't want to exactly know which way it represents. Okay. But it's the default one we have. So we'll always start the query with that. And the first one are the vertices, which are the nodes. The object itself that are in the database. The big dot, red dot, no, black dot. You've seen in the first earlier cloud. That's it. We have that. What can we say from that? First, you get it. The full list of them is access release method. And if you just want one of them, every single node has an ID. So just like databases, all of them get one. Okay. The edges will get another one. But you start with that. If you ask for it, well, you get it and you don't get anything back. Okay. What you see here is really a method call. Okay. I have a first object, which is kind of special. We're not going to go into it any moment. We'll just wait for the rest. The rest are methods. And we're going to call methods. Each method are going to be linked with a preceding one. So a method will probably return an object vertex by itself. No details yet. Of course, we're going to be able to go into the details, but that's what you want at the beginning, the first one. If you want to go inside an object, well, the graph, most of the graphs are stimulus. Okay. So you can put anything you want inside an object in terms of properties. So if you ask for the object, of course, you get the object itself. If you want to go inside the properties, they're called values. And you can have the usual suspects in terms of value type. So strings, bullions, integers, reels, arrays, which is nice. So we can store full arrays in there in them. Arrays of arrays. Again, that can be interesting to have. But you can have them and you don't care if they find somewhere or not. Okay. You can always create one, destroy one. If it does not exist, it will return no. So in the time you end up with a no, then you're probably going to stop the whole query anywhere. So for example, if view one does not exist, then it's a no. The rest will be done and we end up with a no. Easy enough to do that. Nothing surprising, right? Okay. So let's move on. If you want to do some discovery, and again, when you're a beginner, that's a really useful tool, value map. Okay. You've seen that values will give you all the values itself. As long as you know the name, if you don't know, you want to discover what's inside the graph, then value map is going to return you everything in this format. Is it? Yeah. No. I don't know. Anyway, in an array here, it's interesting. Here, I move to another value. You can get the wall list or even just one of them like that. So in terms of discovery, when you don't know what's in there, you can start with a value map. That's an important. Our second concrete here, the edges. Okay. So we have the object. We now have to link them. That will be the work of the edges. They are stored conveniently into the big E method. You can access any edges by its ID, which also has an ID, and the two of them are separated. We actually won't care about that later. But they are too separated to them. They're two separated sets. And the only thing that's special about edges is that they always, well, they're free things. They can have properties just like we've seen for the objects. Okay. Same stuff. Properties, same values. So when you're crawling on the space, you can always, you know, check something along the edge. They have an ID. They have a start and they have an end, which are integers, which are the previous IDs of the nodes we've seen previously. Okay. And they also have a label. So that's why I put here calls. That's the one we're going to use. They always have a label. Okay. Our nodes can have a label, but it's not compulsory. They can have the same label for everyone. That's good. If they have different labels, then they will be, you know, probably indexed differently, but that depends on the lower underlying server. So up to now, it's okay. Nodes, we are okay. Labels, on the other hand, they're always, always, shall we put them together? Yeah. Yeah, of course we need that. At some point we'll have to do that. So edge discovery works exactly the same. On top of that, ID. So values for everything except for IDs and labels which are used by the language itself. Okay. They get a special method by themselves. Otherwise, when you get an E like that, it's an edge. If you get a V, it's a vertex. If you get a null, it's nothing. And otherwise you get an error. So shall we put that together? Yeah. Now we have the edges. Now we have the object. The main, the meat of Gremlin is, of course, to navigate through the network itself. So here is a very complex network. Okay. So then we have, we have like four objects and three links. I use the different IDs here so you can, we make the difference. I don't want to say, oh, this is H1 and this is linking the vertex one. They're all different, but they're probably, if you do that on your own, they will probably have one, two, three, four and one, two, three. Okay. That's normal. So from the edge, we said we have, we know the outgoing link. So we can, we can ask for out V, meaning I want the outgoing link and I need the vertex and we end up on two. So we say E5. E5 is this, this link. The outgoing is the one there. Okay. The ongoing, that will be the, the, the start. It will be on the, on the other side. Okay. This is called a directed graph. By default, all the Gremlin graphs are directed, meaning that they're always a starting point and an ending point. Okay. In general, you can have directed or indirect graph. So if you don't care, well, you just use, you know, out just as, as you like. We'll see another one, another one to, to do the movement in a moment. And there is a way to do the migration, the movement from any side. So the graph is good, but just information in it. So on top of that, following, following from an edge. So we've seen how to reach the, the edges of, well, the limits of an edge. If you are working from a node, then you will start with a V and instead of out V and in V, you'll get directly out. Out and in will just say, okay, if you follow the link that's are going from this link, then you'll go, tell me, tell me the list. You can see here from G1, G1, the incoming link, the incoming nodes from to one are only four. So I just get one result. Is it easy? Yeah. I like to see loading heads. On the other hand, you can have several layers, right? So if you want the out ones from V, coming from V and going outside, now we have two and three. And if you want all of them, you use both. Fair enough. And then you can get the list. If you really want to go inside the link and make some checks, then you can also mention the E. Remember when we go inside the E, and we want to go to a V, we have out V and out in V. Now if we are in V and we want to go to reach an E, then you just, just turns it in here. Okay. Now I think that's, that's probably an epiphany when I, when I was starting to work on that, that's the training. Then remember, I told you that, well, G is the start. That's bringing us a node. That's bringing us another node. So actually we could start chaining them. Okay. So let's say we want from the H2 and we want to see what is the ID of something that is in and in again. Okay. The first GV, I start with the ID. Then I go one way and I go another one. And I end up with the number four. And I can chain. And I can go one, two, out V, both, explode and start counting. Okay. I end up with a number. Okay. So I mentioned this is the graph. This is a number. This is a vertex, another, another. I end up with a number, with a number because here ID will say, okay, at that node, once I have found a node at that point of the traversal, I stop and I look into the node and I get a number. I cannot go on with another in at that point. Because it's a number. I am stuck. I'm in a property. There's nothing more I can do. Okay. We'll see later how we can extract something along the way. Yes. Here. Oh, it's just an example. We're going to move to something that is a little more, I would say, business like. Okay. We're going to move inside the database, the WordPress database. That's going to be more interesting. There you can stop thinking. That's more example. Yeah. It's going to be different. So remember you want to have a schema. Okay. It's schema less because we don't have any properties. If you want to remember the WordPress call graph, that's what it's going to look like. And actually on top of that, I should remove one of the function, right? Okay. Because actually we have only function types and this link. Very simple. So how come do we end up with that? Okay. I think I got 4,400 function definitions and I got something like 55,000 calls on the current version. Does that make sense? Yeah. For the current version, does it make sense? Like 4,400 functions in WordPress. Yeah. It's a pretty large piece of software, right? Including all the functions, I mean, all the inclusions they have, all the external libraries kind of make sense. They're using roughly each function as a means used 11 times. Okay. So can we find something interesting in that? So first, if we just convert, no, not one call. You don't use all of them all the time, right? Hopefully. Well, come to me. I'm going to reconfigure it. So the first, yeah, this. This if we start going, yeah. For example, yeah. It could be. It could be the function is still here. What press itself do not use it. But it's still there because they have previous version for which they want to provide backward compatibility. And that's it. How, well, it's way too early for me to answer that. Let me think. When I, when I reach the point where you can understand and so that, I'll ask you the query. Okay. Just a question. Yeah. So in WordPress, because you actually subscribed hooks and put the functions like strings. Yeah. No, no. For this example, no. No. Okay. Yes, that should be. I'm after me here. I needed a base with enough data so it could be fun and interesting. In the same time, I didn't check all the PHP special cases. So yes, you're right. And that was actually my first slide. There is one where they say, okay, apply filter and there is a name of a function. This is not taken in case here. But we're not going to, we're going to use it to navigate. Okay. So the simple version, if we, if we make it really large and just take a few elements, then we have one functions which are incoming calls. So those are the functions may call this function and they may, this function in its term may call something else. Okay. So if we want to just, you know, have a look at that form on this exact example, again, I start with an ID. I'm still stuck with that, but that will go away. I go out one, two, and I get the name. So I get those function names and I can call the incoming, the incoming functions on the other way. I'm not using out because this is directed graph. So I know which way they're calling one function is calling the other or the function is being called. I can know all the functions are calling VP set password, for example, by using the other one. Okay. Just application of what we've seen. Okay. So now question, would you imagine that WordPress? Okay. Yeah, let's move. I don't know what you're talking about. Now we're there. Now we're there. You know what? Please take over. That's good. Can we detect the number of WordPress functions that are actually recursive? What is a recursive function in our graph? In and out is the same. So that's interesting. We can start there. Get parent link. It calls get parents. Good. But this is not the same. So that's not a recursive function. Same stuff from the other way. What do we need here? We need to find a function that calls itself. Okay. At that point, you know how to move along the graph. You know you're able to go very far, but you don't know how to stop. So we need a little few more functions. Here are two of them. What I have on top, you know, well, GV is okay. Out is okay. Values are okay. What you need is two of them, which is as and retain. So the one we actually need directly is retain. Retain means that I will only let things go if it's the value that is provided here. Okay. So this is a filter that says if you give me a list of elements, I will only let those pass. And here I need to tell it which elements have to be passing. So I first name my element. So I start with something, for example, I start with this one. So, okay, that's myself.  No, it's not myself because I name this one and I can understand that. And that's not the same. So I stop. Okay. Let's start again. I go there. Start 30. Okay. This is this one. I go out here. It's not myself. Here it's myself. So I can go on and I end up here. Then I got my name and I display the name. Does that answer the question? Okay. I don't remember how many exactly I found. Five or six. Does it make sense to have recursive function in WordPress? Why not? Of course. First, why not? There's no reason to be just a little surprising. Get parent, get category parents. This is for menu. Yeah, menu. Typical usage of things that we call each other. Well, the submenus we call the parent and the function is the same. Yeah. Come on. You've talked together, right? Wait for a slide. Because in between I have to show you that. The one we have done here, we said, okay, we start with this. We follow the call and we end up there. But it's a directed graph and we can move on the graph the way we want. Okay. If we can do that, then we can actually rewrite the same query and build it the same way, actually, but go it with the in instead of the out. Here is the same. Okay.  That's the same. Now you have this question. Could you find what I call ping-pong table functions? Okay. It's like, hey, oh, I have that. Hey, send you that. Oh, that's interesting, but hey, that's for you. Okay. Ping-pong function. How can we do that? We need an extra word. We need an extra filter that will actually filter things that are not ourselves. Okay. From what we've seen already, we know everything except, except. Oh, that's a bad transition. Thank you. Two of you are following. So we still have the retain. So what we want to do, we stop somewhere, we call and we don't want a recursive function. Okay. A ping-pong function is something, our two functions that are sending them each other probably the same value. Hopefully not the same, but they are calling each other. Hopefully they will stop at some point, right? But we want the first one not to be himself and on the other way, on the way back, we want it to be the same. Okay. So the first one we stop is 47. We call it, so we know what, what to compare it with. God, not me. Again, out again, me, and then I know my, my, my answer. And this will give me directly at least two answers. If there are none of them, that would be zero. Otherwise, I will get two of them. Well, actually not starting back with that. Okay. Anyway, if we don't start with the 47, then we'll get two of them because if this called that, then the contrary is good. So third guy, next question. So ping-pong, ping-pong function, so I actually found, found some. If we go on, we can do that with three, right? Yeah, yeah, that's what's easy to guess. I can do that with four. And I can do that a long time before you get fed up, right? So what do we need there? We just, we're just four. Yeah, it's fine, it's fine. I got two of them like that. So we can actually chain again, right? The first one, we don't want it. The second one, if we don't want it. The third one, maybe we could actually name the intermediate one so we don't end up with recursive functions. That could be an extra thing, but that will probably go out of the slide. So we go on, we go on. That could be nice to have a loop. So yes, there are loops. There are loops in Gremlin, which are commonly called repeat. They work with a subquery. So we are going to put between the parenthesis something that we want to repeat. We mentioned times. So we know how many times we want to repeat that here, three times. We can also have an until, until some condition is met. This is nice. So this is this first rule that really shrunks the size of the query. The other thing we have here is the emit. Emit itself will just emit anything that path through. So as long as I can run into that, the repeat will repeat itself. When it's done, the emit will say, okay, this value has been found once. I give it to you. If you put in it, in the emit, another filter except myself, while it's already there, but we could put except myself and not emit the thing. So we can do something in the loop. So the body of the loop may be complex. And when we end up at the end of the loop, we can have another condition for the emitting. Like, we don't, we just want the end of the loop or we want to emit anything we want, we find in between. That's interesting. And you can also put emit here or before. Then it will start immediately emitting. So it will emit the first one, like a do while. And otherwise, it will just repeat it once. No, that's a contrary. It will be a while, right? And otherwise, you can put it behind and it will just repeat that after or at least running it once. That's convenient, right? Can you do that as well? No. Yeah. So what have you, what have we seen up to now? Well, we've seen the node on the vertices we've seen in and out, which is the backbone of your navigation. You're going to use that a lot. We've seen a few filters except retain, in, without the label that's going to come, and the first loops. So now we're going to move to something more interesting. I'm still waiting for your question, right? But basically, traversing the graph is architecture around that. We're going to say, if I follow those, okay, I follow one, one, I start with a node, I follow that, that, that, that, that. And when I end up there, the whole story, if it's matching, then that will be my query. And I want to extract some data from that. That's exactly the chain I want to find, okay? I want to find one query that calls each other, okay, that calls itself, okay? That's exactly what we're doing. We just follow the path and then at some point make filters. If anything's end up at the end of the query, that's our result. So filtering, we've seen a few of them. Something, another one that is really convenient, I think, and I really like that is that you can actually add the extra label in the, in the edge you're moving on, okay? The example is not built for that because I only have one example, which is one edge, which is cool, okay? Imagine that you have classes instead of functions, okay? There will be classes instantiating, there will be inheritance, there will be extensions, extents and implements, for example. So different relations between all those tools, okay? And we can put all of them into those and say, okay, I want to follow and find an interface. I'm just going to follow implements, not extents, except if I start with a node, which itself is an interface, because interface has to be extended by another, extending another interface, while classes will be implemented in an interface. Two different behaviors, okay? That's a good one. If you have more than one, then you can put them just in a row that will work also, just the same. I'm going to use that alone, so that's kind of needed. Hello, internet. So if you want to filter on vertices, there is the as function. The first one says, does this vertex has a name? Whatever it is, is it defined? Is it not null? If it's not null, then it will pass, okay? If it's a null, then it will not pass, so it's not defined. Otherwise, you can put one value. You can ask it for it not to be the value. And those NEQ, you're going to see a few of them, or what they call predicate. They look like functions, and you can apply them. So here, not equal. There is another one which is equal. There is smaller, larger, things like that, all those operators. Strangely enough, there is, there's supposed to be a regx one, if you want that. But I've never seen it on Neo4j. For example, it depends on the server, on the underlying server. So there's a few of them, but not all of them. Within or without? You have a long list of elements. You can say, okay, if the name is in this list, then it works. But that's, that will be filtering, that will be filtering our nodes. Let's say, let's say we want to look for dying functions, functions that may end up calling VP die, okay? What do we get here? So notice that we don't know which are the functions. So we start with V. I don't put any ID anymore, okay? ID was initially good because I wanted to start from a point of view that you understand. Now we just say, okay, in the war graph, any of the, any of the verges, you follow one, and it must end up on the function that is called VP die. And then you show me the name. What do we get? Yeah, VP die, of course. What is important here? Basically, the query looks like that. I start with something, anything, everything in the, in the data sets are stopped. I flow something and I end up with, with VP die. And then there I say, okay, I want the name. But the name that I really want is the one that that beginning, not at the end, right? So the processing is important. Okay. Since we're changing things, start things are flowing through the pipeline and the wall, the wall query them. Yeah, we have to be careful. So how do we do that? Yeah, we run the other the opposite way. So we start with the function that is called VP die. Then we go inside and then we find the name of the function. And there we have a list of interesting things. Okay. So the graph is going one way, but we don't care. We are all the means we need to do it the way we want. Okay. So let's, let's use it this way. Okay. Actually, here for this example, it's kind of simple. You could actually end up with, you could end up with that situation. Initially, I use that and I didn't really care about the, the order of the query. Okay. So here we have the two of them and I introduce you with your good friend count, which makes sandwiches as you all know, right? So it's counting the number of units. And I say, I stopped with the God call, end up with VP die count for 84. If I do the other one the other way, I also get 84 because count just ended up counting the number of things that go through it. So we don't care if it's several at the same time. Okay. We, we, we, it was laughing, laughable for us to end up with all the names because they were all the same. But there are actually different results. We found another way to end up on VP die. And that's how we need to count. So at that point, one thing you want to make, if you want to make the difference is by adding dead up. Now did up, can you guess? Day duplicates. Yeah. I have no idea why the hell they only decided to have this one as abbreviated name. Usually they have long, you know, human rebel name. Okay. And the first time I got that like did up. It's like, what this is. Okay. Yeah. They duplication. So we have, I think there's another unique. Okay. I'll answer that. Okay. I think we'll see that later. There will, there is a little problem for that. Maybe the duplicate will be the same origin. I don't know. But this is the only one that's that has an abbreviation. So here I say, okay, got a function, you follow, you end up on VP die, you did up. So you only allow one instance of an object that has been reached, that has reached this point. And then you count. And of course, we end up with one. Okay. So no variety. On the other hand, if we do the same with several of them, then you have 84. I wonder if the usage of did up as a really ugly name is not made for one good reason here. It's a beautiful name. Is that your name, maybe? No? Okay. That happens. Here, what happens is that we scan everything, we follow, we end up on die. We actually end up with 84 elements and we just say, okay, I just want one. So we do a lot of work. We, we, we, we find everything and then we end up on that. On this one, it's a lot more streamlined because we just find the one we want, follow once and the first heat gives us directly all the results we want. We, we don't need the did up. It's completely useless. And we just manipulated 84 data. Here, if you have a million line, a million line to analyze, that's going to be a lot longer. So anytime you start using did up, what? You have to be faster. So on top of that, we, we've seen counting. So here is the, the count.  Okay. Like in SQL range is the SQL limit, but with the beginning and the end. Okay. So you can get a number, tail for just the end. So that's interesting. There is coin also, which is nice. Just going to make a sample of that, just completely arbitrary and random. Okay. The number you have here is a percentage. So we get basically a percent of the elements, which means that you can, you can make, you want to test a query. You don't want to run it on the whole database directly coin. It will just make a number of them. Like once in a while, just going to give you a few data. So dying functions, back to the start. What do we need? Just rewrote it to introduce you with my good friend, select. We've seen again the, the, the as, remember? Okay. So I still use the out because it's interesting. What happens is I give a name of the element that's interesting me. I go out, do some checks. When I'm done, wherever I end up in the graph, then I say, okay, select, start. If you reach that point, if from there you can go out, find a way with IP die, then when you're done, stop, come back and get the thing called start by name. Okay. So the keyword here is select. Select will actually, at any point in the query, will move the, the cursor. If we call that, move it again to a place that has been made, a place you've been there. So you can, you know, go, find a, find an interesting node, go one way, come back, go another way, come back, do a third way, and then end up there. And in the same time, collect lots of interesting information. Okay. By here is not actually a functions. It depends on the previous method. Select, and there are a few others which may not mention by heart now, but select will say, first name will be displayed by name. So I mentioned a property, you display that property. I can actually say, start, start, mention two of them, and have two different properties selected from there. Or I could select several values, give them different names, and each time select, okay, the first one by name, the second one by ID, the third one by, I don't know, extension, whatever, whatever that means. So select and ask actually work a lot better than that we've seen. Okay. But yeah, that's exactly what I'm explaining. So let's imagine 10 minutes. Okay, let's finish with this one, the sub queries. Okay, here he's getting a little strange. I'm trying to look for functions that are calling both escape HTML and VP die. So someone that probably preparing some error messages, and then we'll actually push that to VP die, something like that. So since we have from what we've seen, okay, we start with the name, we go on, the first one has no constant, but that will be our result. So we'd name it. Okay, we don't care about what's a little bit that that's on our way. We go out, check the other function call, and then we select the results. So we know exactly the one we get from the middle, right? The order of processing is from here because we start initially with the VP die. And when we end up, we end up with the escape escape, right? So we do not, we do not start from where we want. And we do not end up again from where we want. We just have to use select to put to move everything back to the right place. Unless, of course, you use higher level, there is another function called where, which allows you to do sub queries. So you moved on the main, on the main graph. And at that point, you don't want to divert and have Gremlin go somewhere. We just want to do a little check on the side. Okay, that's exactly where he where say stop and go out, find a call if there is a VP die. Okay, if you find something where anything, a number, a node, an edge, VP, where we'll be happy, it will be considered a true. If it doesn't find anything and end up with a null, that it will be a false and will stop. Okay, so basically, I can now start from anywhere here, do a side, go to VP die. Oh, I found it, so I go back. And of course, we can do the same for the other one. Okay. And that will now look like that. Oh, and that's a miss. That should be a in, right? That should be a in. Why the hell do I have to add that? And that will be answering the question about did up, possibly. For out, actually, that's another typo. I just start with out and that goes, that goes. While on the other hand, when I start here, I have to start with underscore underscore underscore, represent the current node. Okay, which could make sense here. I could use underscore underscore, but here as a sugar syntax, I don't need it here. And that's, that's really puzzling when you really see that initially. Is that because, well, that should be in here. In is actually a keyword for Groovy.  Yeah, I mean, did I mention that up to now? Yeah, you have to show me another five minutes, right? Yeah. Actually, this, this engine is written on Groovy. So most of the code we have here, we have a programming language will be based on Groovy and Groovy as a keyword which is in. So we cannot start directly with in. It doesn't have a keyword called out. So starting with out is okay. But starting with in is not possible. So we have to underscore, use underscore underscore. This is there where we start, you know, seeing the limit between the, the language, the programming language and the underlying. There will be, I think they just published a C implementation of Gremlin. So possibly in this C explanation, in will not be a keyword and that will flow. So suddenly the standard is not exactly the same for everyone. Let's finish. If you want, oh yeah, our good friend count. So if you want to use aware and end up with something that is a negative, negative assertion, then use count and you make it equal to zero. And that's probably another type of. So let's finish with that. That's the full idea when you're writing a query with this language. You think about the way you want to traverse, then you think about the different conditions you have. It may be on the north, it may be on the side, it may be a little back trip, a side trip. And in the end, you mark in red the one you want reported. And that's how you end up with a, with a Gremlin query. So to finish, I'm sorry, I'm going to jump that. There's a filter which we see, we start using actually groovy code, okay? In the closures and there's a very interesting group count, group by, just the same as in SQL, but there's a group count. What I really enjoy with that is that you can have several group counts in the same query. Because actually the group count is just a counter. Just, okay, I get a node. I get a specification in it. I know what I want. I want to count the names of the function. So I collect that and I put that in an array. But I can do something with that, right? So I just show that to the next one. And the next one is another group count, which is now counting the number of times this function is being called. And I end up with one result and two different group count at the same time. That's interesting. So PHP and Gremlin, okay? Well, first of all, you can see that PHP is a lot better at logos than them. PHP for Gremlin, there is POM vert. Do not mistake that with POM. It's completely different, right? Yeah, yeah, yeah, great, great. So this one is POM vert. Gremlin PHP, it's on the Composer. So, okay, Composer install, you have it. There's a lot of old stuff for Gremlin 2. Make sure you start working Gremlin 3. Gremlin 2 is completely dead. But there's lots of servers running with it. So make sure that the one you choose is the one running. For example, OriomDB, which I will mention in a moment, is still running Gremlin 2. This is not what I've shown here. And they are going to move to Gremlin 3. It's on the way, but it's not done, okay? So just make sure when you make your choice that Gremlin 3 is the one that is being supported. Otherwise, from Neo4j, there's a plugin which uses REST API. How does that look like? Require once, use connection with the host and the graph being used, open, send, get the results, close. Someone hasn't understood? Okay, so that's very simple. From PHP point of view, it's very simple. I say that the meat of running the queries, rebuilding them, okay? Maybe fetching a number of information from your own PHP before putting that in the query with the usual injection problems, unless, well, no one knows how to use a Gremlin. So maybe we're safe for a moment. But that will happen, okay? So here, the version is 3. There is Gremlin initially, I think it was, there's one of those projects. It was initially 1, 2, 3, 4, 5 projects, okay? 5 different projects that were processing different parts of the graph and they most, they're from version 0 to version 3. You skip the 10 minutes, thank you. So each iteration, one of the project was merged into and finally it's only Gremlin. So just look for Gremlin or you can call that, it's currently called TinkerPop, okay? It's an incubator on Apache. You will find the information there. Now, I like say, Gremlin runs on different databases. I don't know if Maestro Mario Dibilla done it. The guy who wrote, Gremlin wrote Titan, so the integration is pretty tight. That's a good one. The stable ones I use for Gremlin, Neo4j, but Neo4j is running this, the show with Cypher. So initially, when I came, Gremlin and Neo4j were very good friends and that's, it was easy to set up, okay? I have to admit that I came to them with that. Nowadays, more and more, they're separated, so it's getting more and more difficult to use Neo4j from Gremlin and vice versa. But it still works, so it's okay. StarDog, I don't know, TinkerPop as a server by themselves and Rexter is the old server from Gremlin too, okay? One thing you have to understand, there is a server, the server itself may be the one that installs the underlying servers, okay? So there's a Gremlin server that you will tell it, okay, install TitanDB and you will be using TitanDB. At the beginning, it's a little confusing. I'm expecting to be Gremlin on top of that, but it's not the contrary. There's a Gremlin server which turns the query into something that's the underlying server understand. That's the way it works, okay? So basically you have to download the server, the console which you will be using to input your data and the server itself will run. There is an easy install from them all in common line and you have to use this common line, okay? And there it is. Well, thank you for staying with me. Yeah, that's me. I'm staying, well, I have to go, right? Yeah, three minutes for questions, but I'm staying here so if you want some more answers, I'll be able to answer. Yeah. Okay, I'm going to say no. I'm going to say no. The reason is Gremlin is the top-level language and it's actually relaying on the server to do the actual performance thing. So let me give you an example. Any time, do I have a query somewhere? That's not in Z1. Okay, anytime I start with that, for example, based on Neo4j, for example, just behind, instead of in and out, I make a label check. I check if my node is of a certain type. I have different types of that. The thing is, the Gremlin do not do any optimization for that. So we just say, okay, as label, good. And it shows that to Neo4j. Neo4j on the other hand, the first time he sees the label, he says, oh, do I have an index for that? Yes. Then a check. I have no way to create the index using Gremlin because Gremlin do not understand the index concept. I actually have to rely on Cypher. So when I set up the database, I call Cypher to build the index and then it will be used. But from Gremlin, though, there is no tool that will tell you, okay, you should do this way or you can do another one. The other trick I use is, as usual with databases, the less amount of data I manipulate, the better it is, okay? So after the GV, for example, or first check, I put a counter. I mentioned that you can include closure, okay? Groovy. So I use a little side effects. I didn't show that, but there's side effect. So I run a little counter and when I'm done at the end, I end up with another counter saying, okay, here is the number of data I processed. Here is the number of data that I have in the end. When I have too many of them, then I usually go back and say, okay, is there a way that I can make that faster? But at that point, no. This is the problem of the separation of this standard and the implementation. Sorry for the long answer.


You're sticking me up? You've got to get, sir. No way, man. I worked for this money 10, 12 hours a day.   I said no, man. This is my money. Stop it. Stop being crazy. And no, no. I said no. You're getting nothing. I'll use this. Not a sign. I'll use this. I'll use this. Jim. Jim, run, call cops. Oh, I'm Detective Merle Carnar of the Robbery Prevention Unit of the Seattle Police Department. What you have just seen is a worst case scenario of a late night retail robbery. And what you have seen did not have to happen. To comply with the safety codes of the state of Washington, each retailer must have in place a formal accident prevention program. And part of that program deals with the late night workers crime protection code. This code provides employees with the knowledge and skills needed to prevent or diffuse violent situations like the one you've just seen. Your personal safety and the safety of your co-workers and customers might someday depend on how carefully you listen to what we're talking about here. First thing we need to discuss are the steps you can take before you are victimized to help prevent violence or a robbery. Let's start with the appearance of the store. Fortunately, stores that are attractive to customers are usually unattractive to robbers. Remove clutter and signage that block windows. Give your establishment a fishbowl appearance with the cash registers in plain view through the windows so you can see out and passers-by and police patrols can see in. And keep the front of the store free of merchandise displays a robber could hide behind. Keep the store and parking lot brightly lit, replacing burned-out bulbs or fixtures immediately. Keep the shelves well stocked and the premises neat and clean with the aisles free of clutter or boxes. Familiarize yourself with possible hiding places outside the store, such as phone booths and dark corners. Take note of possible escape routes from the store. When you're working at night, if there are no customers in the store, get away from the sales counter and busy yourself by dusting, sweeping, or stocking shelves. A robbery is much more difficult if the victim is away from the till. When customers enter the store, make eye contact and greet them in a friendly manner. Ask them if they need your help finding anything. Customers appreciate this, robbers don't. Keep an eye on the parking lot in front of the store through those unobstructed windows. Look for anyone who may be watching this store or loitering nearby. If the phone booth in your lot invites loitering, you might want to ask the phone company to remove it. Keep a pair of binoculars with an easy reach, preset to focus on a license plate in the lot. Use those binoculars and jot down the license number of any suspicious vehicle. Police and emergency numbers should be posted by the phone along with the address of the store. In a moment of crisis, it's sometimes hard to remember these things. In any suspicious situation, don't hesitate to call 911, describe the situation, and ask for a police car to patrol the area. A large mirror, mounted to show what is going on in the back of the store, provides an excellent way to keep an eye on all corners of the premises. Statistics prove that the biggest deterrent of late night robberies is keeping a minimal amount of available cash on the premises and posting that fact in a prominent place. Signs like this should be posted both on the door and near the cash register. A maximum of $50 in fives, ones, and change is adequate for normal operations in most establishments. The fact that the safe has limited access should also be posted. As $10 and larger bills are received, use a time lock drop box or comparable limited access safe for them. And explain why you're doing so in the presence of the customers who negotiate those bills with you. Word gets around. After dark, use only one cash register. Empty registers should be left open with their cash drawers tilted upward. And above all, don't keep any weapons or firearms on the premises. Statistics show over and over again that your chances of avoiding violence during a robbery are much better if you do nothing to escalate the conflict. All these precautions greatly decrease the likelihood that your store will become a target for a late night robbery. Nevertheless, as we've seen, robberies still do happen. Let's see how careful preparation could have prevented the violence we witnessed earlier. Money in the till, man. Hand it over and nobody gets hurt to get that. The first thing to remember is that the robber is probably even more scared and nervous than you are.  In about half the cases, he has a drug habit, and he needs those drugs. He doesn't want any trouble, and he doesn't really want to hurt anybody. He just wants the money, and then he wants to get away. Cooperate fully with him. Your life is worth a whole lot more than that $50 in the till. I understand. I need to get the behind the counter to the cash register. I'll walk very slowly, OK? No funny stuff. Don't make any sudden or unexpected moves. Don't argue, fight, or provide any resistance. In fact, you should try to treat the robbery as you would any other customer transaction, courteously and professionally, getting this customer out of the store with what he came for, as quickly and smoothly as possible. Come on, come on, move! Use positive words of agreement and reassuring body language. Move slowly, and explain every move you're going to make and why. OK, I'll give you everything in the drawer. I just need to open it, OK? It's going to make a ringing noise when I hit this key, OK? Let the robber know in advance of any surprises. If there's anyone else on the premises, warn the robber of the possibility that someone might appear. No alarms and no funny stuff. Right. There's a guy in the back room doing inventory. If he comes out, I'll handle it and make sure he cooperates, OK? OK, stop stalling. The cash, moving. Right, I'm just going to press this button, and then I'm going to move way back when money is inside. Yeah, go for it! At this point, give the robber plenty of free space to operate, no unexpected moves or resistance, no arguments or heroics. Again, be courteous and treat this customer and this transaction in the same manner you would treat any other. Don't try to stop or pursue the robber. Stay put. Don't follow me, and don't touch a phone for five minutes.  George, is everything OK out there? I'll handle it. Jim, stay calm and stay back. Everything is under control here. Nobody's going to get hurt. Just stand still and do exactly as he tells you to. Everything's under control. No calls, nobody's going to follow you, everything's all right. Once you're sure the robber is gone, lock the door. Good, lock the door. Be careful not to touch any evidence that might carry fingerprints and call the police. Yeah, this is George Herrera calling from the Deli Mard over at 1219 Riverside Boulevard. We just got robbed at gunpoint. Stay on the line. Give the police all the particulars about who you are, where you are, and what the robber looked like. No, we're OK. Yeah, we locked the door. Caucasian male, maybe 6'1", late 20s, close crop dark hair, Levi's t-shirt, dark t-shirt, black leather jacket, on foot heading north. Some kind of handgun. OK, OK, we'll be waiting for you. I've got some bad news for you. We just got robbed out there. After contacting the authorities, call the manager or owner of your store and explain that there's been a robbery. The police will want to know every detail you can remember about your assailant. Clothing, accents, hair and eye color, age, height, weight, distinguishing marks or characteristics. What kind of weapon did he have? In which direction did he leave? By car, on foot? While you're waiting for help, write down everything you can remember about the robbery. If you've handled the situation according to these proven guidelines, your chances of avoiding violence and surviving an armed robbery are excellent. To make certain you're clear about the important details, let's briefly review what we've learned. First, make your store unattractive to robbers. Give your store a fishbowl appearance by removing clutter and signage that could block the windows. Keep the store and the parking lot brightly lit. Keep premises clean, uncluttered and well stocked. Keep an eye on what's going on outside the store and report anything suspicious to the police. When there are no customers in the store, busy yourself with other tasks away from the cash drawer. Make eye contact with customers entering the store and greet them in a friendly manner. Post emergency numbers in the store's address by the phone. A ceiling-mounted mirror helps you keep an eye on even the hidden corners of the store. Post signs that inform your customers you have a limited amount of cash on hand. Limit accessible cash to $50 or less in fives, ones and change. Use only one register after dark, leaving unused registers open with empty cash drawers tilted up. And use a time access safe or drop box for bills larger than $5, depositing them as they are received. If you are robbed at gunpoint, stay calm, be courteous and cooperative. Don't argue, don't fight, offer no resistance whatsoever and never, ever pull a weapon. Such actions only increase your chances of getting hurt or killed. Move slowly, explain each move to the assailant before you make it and warn him of any possible surprises by customers or coworkers. Speak in a soothing and cooperative tone. Your life is worth a lot more than those few dollars in the till. Make no attempt to follow or chase the robber. Stay where you are until you're certain he has left the area. Then lock the doors and call the police immediately. Don't touch anything the robber has handled. Telephone your store manager or owner as soon as possible. Write down everything you can remember about the robber and the robbery. And don't open the door to anyone until the police arrive. Following these common sense rules for late night retail violence prevention can spell the difference between an unpleasant incident and a tragedy. Play it safe, play it calm, play it smart. We're concerned about your safety. What you have seen here covers the basics you need to know to prevent and deal with late night retail robberies. If you haven't already done so, you should immediately incorporate these concepts into your store's formal safety and health program. If you need help, the Washington State Department of Labor and Industry stands ready to assist you. Your local police department is also available with additional information and advice. If you need help from any of us, don't hesitate to ask. Making your job easier and safer is the reason we're here. This program was developed by the State of Washington Department of Labor and Industries, Division of Industrial Safety and Health. It is one of the many programs the division has to offer employers and employees to help them establish a safe and helpful workplace. For further information about this subject, call your local Washington State Department of Labor and Industries, Division of Industrial Safety and Health, Consultation Services.


Bruh.  Yeah. Is that your fake YouTube voice? Yep. Hey, what's up guys?   That's my reality. Oh, I wanted to open this. Shit. Can you hold this? Okay. This just got here today. It says Steel City Collectibles are on it, which means I know this is NFL cards. Should I just stab right through it? Absolutely. This is insane. Oh boy. This Bailey, and everyone watching, is Panini Immaculate. Inside this $1,000 box. Is this a sandwich? No. Like trading cards. I've really never heard of that.  Okay. Okay, you know those trading card openings, the IRL openings I was doing? Yeah. With like the real rookie autographs and stuff? Yes. This is $1,000. There's only six cards in here. Six. That box is $1,000? This box is $1,000. Expensive sandwich. There's only six cards in there. Waman ship. Look at this. This is the same thing. The different kinds. Different kind of meat and cheese. Someone take the camera because we ran out.  Super hot fire. Cut. No, what the fuck? Why did you do that?  Little seasoning. This is how white people season their meat. Dog. If you need Madden's 21 coins for anything, make sure to go to buymockcoins.com. It's cheap and reliable and my code MMG is 20% off. Ladies and gentlemen, what's good? Welcome back. I'm in the exact same outfit and everything from last episode because every single time I lose a wheel of mud, I'm so fired up. I'm so ready to go. I'm so geeked to get a dub that I just like roll straight into the next one. It happens every single time. I can't just get up and walk away after Jake from just, ah, you know, I kind of sold a little bit too. I didn't play incredibly. But Jake from sold and I want him gone. All right. Nothing can pull my mood down. Okay. It's the merry creamy wheel. Whatever I get here, it has to replace Jake from. And then I can go get the fattest dub of all. Oh my God. So what I'm supposed to do is the four times the 50 bundle, which is 6,000 Madden cash. That doesn't exist. So what I'm going to do instead is the zero chill bundle. Also, look, if I go to buy it, there's no points offers. EA won't take my money. That's hilarious. It's nine zero chill packs, one 85 plus overall zero chill player and 5,000 snow. So starting out with John Hannah. I don't mind a left guard. Can I get a quarterback? Russell Wilson. Yes, dude. Oh my God. That's so good. I get a Cooper cup here. I will take it. Tyreek Hill, 81. I will take it. This is so cool. Which I knew that's so bad. We're getting really lucky to get in packs this early. T.Y. Hilton is back. Literally just lost that guy for playing so poorly. This is the equivalent of our bundle top. Or it is one 85 plus. Give it a 93 baby. Come on. Come on. Oh, oh my team. I really just rebuilt my team from last episode. Did I get a better corner? Did I get a new corner? Yeah, I did. I got Taryn Johnson, right? So Taryn Johnson can come in. Definitely got some linebackers out of all that. I had to have, yeah. Zach Cunningham. That was one for sure. Bud Dupree was another. So we'll go Bud Dupree here. Who I really like actually as far as gold to go. Zach Cunningham down the middle. Then MLB2. Who is that going to be? London Fletcher. Sure. Why not? All right. Now that leaves us to deck out offense. Russell Wilson, dude. I'm so happy you're here. Wide receiver. I must have gotten some. Yeah. Oh yeah. I got T.Y. back. I also got the Rams wide receivers. I got Cooper Cup. I got Robert Wood. I am not going to put Robert Woods in though. Offensive line got really juiced too actually. Because Cody White here. And then there's John Hanna who could probably put left tackle. Yup.  This team just got good. Time upgrades here boys. An 84 overall team. And I have a real quarterback. You got a way better shot than last game. Absolutely. All right. So the team's already got what we need. We're spinning the wheel right now. And it's gonna come on. I need like something really, really good gaunt. Oh my God. I got this from playing that huge Madden video. I played every single Madden game in one video starting with Madden 14. And there's a gauntlet in all the ones that I was playing. And it was really fun. So I'm actually going to hop out here. And I'm going to hop into. I guess I could kind of choose. I'm going to go do Madden 16 gauntlet. Every round that I get through I get 5,000 coins. Let's get the challenge wheel out of the way before I absolutely fumble back while Madden 16 loads up. Our challenge for today's video is to hold my opponent to 10 points or less. No point. That's a field goal and a touchdown. I think it's Jamal. Is it Jamal Charles on the Chiefs here? I think this is Jamal Charles. I'm going to run the Chiefs. I'm going to go all Madden so that you guys know it's at least as difficult as I could make it. Welcome to the gauntlet. Each rep is a different challenge. And after six fails, your turn ends. I can fumble the bag six times. That's very new. Finesse moves. Is that with A or X? I don't actually remember. Okay, it's A. Let's go. Come here, Mariota! Oh, I get an extra life. The ball carrier needs to pass through a hot spot on the play to pass the rep. So he's got to... Wait, so he's got to come back? Wait, what?  That was high key one of the dumbest things I think I've ever done on camera.   College education right there, ladies and gentlemen. Wow, I'm such a clown. I didn't see the... I didn't see the hot spot.  That has to go in the video, too. I'm so embarrassed. 3 out of 3 offense. It is Jamal Charles, though, which I'm glad about, because that man has wheels. Outside zone great. Blocking, gentlemen. The super wind field goal. Um, I think I hit it. I think I hit it. Oh, it's a success. That was not a success. I shit-doinked. That was not a success. Ah, he's getting through. Damn. All right, we're losing a life there, but that's okay. Okay. I didn't even get to controlling. All right, toss those blocks. That's how it should look. Go ahead, gentlemen. Ooh, I don't even know what the challenge is here. Is it to make the read? Pass was not completed. What are you smoking, Ro? From the slant? Yeah. What do you mean complete the pass?  I did complete the pass. Okay, that time I didn't. I obviously made the bad read. All right, let me actually read it this time. Okay, please. Thank you. I only have two lives left. I'm on level eight. That's only 40k. Prevent a first down. I have no control over this. Oh, okay. Yes, I do.  Let's go. We got to get to like level 20 at least, bro. Oh, boss. Oh, Teraj, this one's tough. We got to let those blocks set up. Let them set. Use those wheels. Use those wheels. Jamal Adams. Yes, sir. Give me one more black cat. It's Kelsey. Let's go. That's what I needed. Is it just complete a pass again? All right. Let's make the read here. Should be B right across the middle. All right. Good. Easy. Great catch. No directional. Shit. Use LS to lead the pass down the receiver and complete the catch. Fuck. I need to like read this shit, bro. Okay. 100% did that time. I have one life left. I'm on level 14. And now I'm getting a boss. Make sure to use special moves. I'm pretty sure I can just run around everybody if I learned anything from the last video. Pretty sure they're just... Oh, damn. He's kind of fast. And the juke didn't work. I'm not going to lie. That was an embarrassing run of the gauntlet. Now I'm going to get punished here because I only get 5k. So I get 70,000 coins to spend on one player. When that easily could have had like 120, 130. I see. Good thing, though, the markets really crashed. Everyone's trying to get presents. So 70k is still going to get me a really good player. I think what I'm going to get is an elite corner to go with prime time. Right now, I do not like the cornerback situation. Dante Jackson, Cortland Finnegan, AJ Terrell. Denzel Ward? I can get Denzel Ward? Let's get Denzel Ward. That'll be sick. I also can probably afford his power up. So I have 70k. Denzel Ward is 54k. 3,500 coins for his power up. I'll just quick sell all of the other players from that bundle to power this Denzel Ward up. So we're going to have a powered up Denzel Ward. This just became a very, very big game. A lot bigger than last game, to be honest. Last game would have been nice to win, but this is looking a little more important here. All right, so Denzel Ward is up to a 91 overall. Brown's fans, you're welcome. That is awesome. Denzel Ward ran 84 overall. We can definitely play some defense. We can definitely play some offense, too. I think we're ready to hop into this game. Let's do it. Stefan Diggs, Fletcher Cox, Kyler Murray. I'm looking for that. Dude, plus now, if we ever spin Pack A Bunch on the wheel, I can get that most feared, Russell Wilson. And I'll finally have an escape artist QB back on the squad. Whoa, I'm looking at a lot of X-Factors. Edge Threats, Secure Tackler, Inside Stuff, Reach Elite, Secure Tacklers. Wow, lots of Secure Tacklers. This man has gotten his ankles broken one too many times. That's actually kind of smart with Secure Tackler, because I want to run inside zone here. But I'm kind of scared that they're just going to bully me. Okay, yeah, pull those. Ah! Okay. Oh, good, Delvin. That's the first down, baby. Second and 10. I want to see if one of our speed demons can just hit a seam, maybe. Super sketchy.   I understand. Let's just start out with a blitz and let's see what he does. He's going to run right side. Great tackle. Okay, so a screen pass that he absolutely cannot throw. Okay. User Playmakers, that was genius. Good for you. Wait, no. Oh, oh, oh! What are you doing? That's the only place you couldn't throw. Throw. What was he doing? The worst place to throw that. I'm going to try and like fake him out with Deon. Hopefully he doesn't see this slip screen. He doesn't see it. He does not see it at all. We got big time room. Oh, we got flagged down. Third and one. Are they backing up? Can I get this? Oh my God. It's fourth and one. Fourth and one. Yup. Easy throw to Firkser. Let's just keep chewing this clock, maybe. My optimal score for this game is 14 to 7. Hey, what's up? Good. I think it's possible. Really unfortunate time. But it's all working out here. Oh, Alexander! Bad bull! I got scored on and out of a touchdown. Oh, and that four minute phone call. I'm so sorry, but I had to take that phone call. Yeah, I kind of figured he'd do that. I've ran this enough times in my life to know how it works. All right, we're going to blitz here. Oh, hit possession, code it.  Fourth and nine. This is huge, boys. This is huge. I just got to stop 14 here. Yup. I tried to throw on Denzel Ward. I think that was Denzel Ward. Yeah, we got him in a box right now. I do not know if half back stretch is going to work here. First and 10. He does have, ugh. They're getting off at everything. He doesn't have secure tackler. That's like the one dude, honestly, who doesn't have secure tackler. They got out to the edge with him. Screen pass works really well last time, right? He's not on the right side anyway. Come on!  Stay there! Just block him. I'm not even in field goal range, so this is pretty big. This might be Dion Santor's touchdown territory. Yup! Yup! In this game, baby. I'm still completing my challenge. I got to box him one more time. I can light up a field goal, and that's it. Oh, is it touch pass? Yes, it is. Ooh, that's got a lot of room. Hey, what's up? How you doing? Yeah, of course. I'll talk to you. Fourth and six. Huge down. What do you got here? Oh, he does that out route again. He's so good at that out route. About second and two, he goes with the read option!  That was so, so savage. And that just lost my challenge. That play right there.  We can say that.  That's the name. It's bra panda. All right, first and ten, maybe I just go for a massive bomb. Ooh, okay. Just a little easy one. Well, easy one to re-kill. I'm just going to inside zone it. It might not work. Oh, it does! It does! Booch play call right there. We're still chewing clock. He might expect me to do it again. Ah, he just pulled off. Let's go! Maybe it's my first rodeo. Do you think I don't know how clock management works? All right, now with no fumbles, this is going to take us down to about 40 seconds on this clock. We're going to snap it. He kind of... Do I take this? No. At this point, I almost just want to take it, no matter how I get it. Although at this point, I don't know if I'm really going to get it. Okay, I'll take it. I'll take it right there. Really good clock management. We burnt a timeout. There's 30 seconds on the clock. With the way he's been running his offense, that's going to be tough for him, dude. He throws a lot of passes right into the middle of the field for about five, six, seven yards. I'm going to go on Kwan Alexander. Okay, so he's going to throw an out route here. He stays in bounds. He's got to use one of his timeouts there. I kind of expect an out route over here. Okay. Yeah, that's what I mean. That's the middle of the field.  He's now out of timeouts with 26 seconds left. A field goal does him virtually no good. Out route? Oh, he gets out of bounds. Damn, good play. I need to lock that up. Does he go for the exact same thing? Yup, there it is. I got the out route covered. Now he's thrown in the middle of the field. He's got to swipe this ball. He's got no time on this clock. He's got to go end zone. Five seconds left in the ball game. I think we go pre-vet, right? We need people all in the end zone, right? They didn't even get it. It's so hard for him to score here, but I just still feel like he's going to somehow do it. We're playing over the top.  That's actually a genius play. Luckily, our brand-new Denzel Ward step-step makes that tackle. 14 to 21, we hang on. All right, boys. 84 overall team. We got a win under our bell. That's all we need, baby. Hey, I'll see you guys in the next episode. Thanks for watching as always. Peace.


Footage shared on social media showed destroyed homes and debris scattered across a village in Myanmar's western Rakhine state on May 17, after cyclone Moka struck over the weekend. Hundreds of people, including Rohingya Muslims, were feared dead after the massive storm hit residents and aid groups set on Tuesday, with rescue efforts hampered by damage to infrastructure. Reuters was not able to independently verify the death toll. The impoverished Rakhine state, or the brunt of the cyclone, during which winds of up to 210 km per hour ripped roofs off homes and brought a storm surge that inundated the state capital Sitwe. A United Nations official said 5.4 million people were expected to have been in the storm's path, the majority of whom were considered vulnerable.


and I just make sure that everyone is what they need to do their job for the day. We have what we call the farm, which is land-based. Basically what they do over there is they make sure that they look up at the parent stock, the bull stock. They condition the parent stock so that they are ready to breed. We collect the eggs, we disinfect the eggs and they go to the hatchery and then they go to the section called Grow Out, so until they are about one gram to four grams. They do it in boxes, they use tractors and they use oxygen to get the fish onto the lake. And then from two grams, the fish stay on the water for anything from six to nine months and then they grow up to three to six hundred grams or eight hundred grams depending on what the customer might require. And now once the lake has gotten the fish to the correct size that's required, they then interface with the next section, which is the factory. But the biggest issue for any tilapia farmer is feed. So feed constitutes sixty percent of your cost of production. When I entered into the tilapia farming, I thought it was an easy thing to do. Especially when we started on the construction of ponds, I thought we can just use our pigs, our wows to make the ponds. But later on I discovered that there was need for bigger machinery like excavators. With my family, we work together almost every day. It's like we're a puzzle. Some will be feeding and some they wake up as early as four a.m. to check the temperatures, checking if everything is okay. I'm facing challenges of skills. People who know tilapia, to farm tilapia, there are very few. My dream is to make this place a training hub for all those who wish to do aquaculture in Zimbabwe. In Zimbabwe there's a great demand of tilapia fish. So I hope by the next five years we'll be talking about 100 metric tons coming from this farm. Fish farming is a special people. You need to have a passion for fish farming. To understand the vagaries of the business and also how the fish behaves. And to understand what to do when something goes wrong. So I like that team spirit, that family units that pull them together. That's what I enjoy the most.


What's up everybody? Jason here for jasperjasecasebricks.com. Just sold out a quick one-pack sell-out break of 17-18 prism sell-out basketball This is a random teams break number 20 On this sell-out pack you're having an opportunity to win a chance at NT pelicans or grizzlies So we're selling spots For a chance to get one of those two big teams and other teams in a little team random For NT basketball that's releasing on Friday, which is $900 a spot. You're guaranteed a team and it could be I Think pelicans a $8,000 team grizzlies a couple thousand for $900 But you can win a spot in that break here for as low as $31 and 99 cents or 32 bucks So again, the way this works is we're gonna randomize the customer names and teams that bought in Open up the sell-out pack distribute the hits out of this break and then at the end of this break We'll get a new dice roller and randomized for the customer names and number one out of the 30 at the end of the Randomizer will win that spot in the $900 team random for picketing number one of NT basketball So let's do the break first guys. Good luck. Let's roll the dice and it's a two and a four six times One two three four five and six James done a chap. All right six times around the teams one two three four five Six All right, James, you have the water show the bulls matter the paces child with the 76ers around with the cell six James Of the bugs around with the raptors child with the heat Kevin with the Suns around with the T-wills Kevin M With the Knicks James with the pelicans around with the magic Steven with the Wizards Jason with the Lakers child with the Kings Chad right that's Joseph EW with the thunder Matthew with the Cavs James with the Nets Kevin Mendoza with the Dallas Mavericks Jason are with the grizzlies Matthew with the Jazz Josh with the Rockets Blazers James with the Hornets around with the Nuggets We'll see it with the Hawks Joseph EW with the Spurs Quinn with the Pistons and Chad with the Clippers So here you go. I'm gonna close the trailer because no one really trades in this stuff Good luck guys any Frank Jackson silver rookie for the pelicans James green Schroeder Silver Emon Shumper and your red white and blues Lower your market. There you go. Now let's switch teams again with that one spot of the team random Let's roll it and we got a one and a three four times. Good luck One two three and four Four times good luck Ryan Shackleton there you go. Congratulations after four times You just want a spot in the picker team team random number one of NT basketball dropping on Friday Congratulations, and again guys, there's more ways to win. We uploaded another pack break Right here. And again, if you guys just want to buy it straight up We're down to eight left Guaranteed a team and you have a 60% chance of it being the pelicans of the grizzlies Again from the pelicans all the way down to the Kings guys. Appreciate it. Jaspy's casebricks.com


advantage of the opportunity. It's a groove thing as a back cross so you just know I'm like you might not get that chance again so you know you just gotta go out and just look at it at that point, that point of view man, just go out there and have your business. Four days later getting the call again. Yeah it was definitely useless like I wasn't expecting it. But you know I looked at it again as the opportunity you know I just counted my blessings and went with it. What was the challenge? The same, same music thing. In the sense that the first one was more like a turner, why is it came back exactly when it actually did, more running back style. Yeah so the way the team operates, you go out and show them what you can do, the F that you put in, you get rewarded by your play. That's how you do it. How would you think you could maybe benefit from having the first leg to the game of football. Like it's always good to have first leg to go out and play faster. And without all the bumps and bruises it's always a big one. Yeah one year track. My best for that believe, that was a while ago. I think it was a 4-4-1 and a 4-3-9. I have no idea. That's all that matter gets to them is all. Donnie was talking about the running success overall you guys had, but you know obviously all everything's a part of that. Did you guys feel like you found some chemistry or some timing in that game? Yeah the old line they do a wonderful job man. Like whoever's back there they have full complete trust and confidence in them and they show it you know get back there and just do what they do to confidence they have. Constantly building with each other and just get that that trust level and what it needs to be.