We are starting off our technical program right now, and our first speaker is my fellow Ruby Rogue Afdiegrim. He was in Pennsylvania. He did a really great e-book in the last year called Exceptional Ruby. He did some talks in that last year. I started doing that talk at RubyMales and decided I wanted to speak here because he has a way. So this morning he's going to be showing you lots of ins and outs of Ruby with a talk entitled Code to Joining. Welcome Afdiegrim. People schedule appointments with me and with them. And I get to pair up sometimes multiple times a day with people from all kinds of different levels of experience and with different problems in front of them. And I have the privilege of getting to hear this. A lot. That's so cool. I didn't know you could do that. I love this. I love it. It's so great to be able to bring that to people. Ruby makes me happy. This programming language is designed to make programmers happy. And after all these years of using it, it still finds ways of making me smile. Something else that makes me happy. Postcards make me happy. So I'm writing this book called Confident Ruby. And I decided to do something a little different this time around. I decided you could pay me 25 bucks for the book or you could send me a postcard. And so I have postcards now from all over the world. And I love this. And the stuff that people write on them is just amazing. It just floors me. And so postcards make me very happy as well. So here's the plan for the next 28 minutes. I thought we'd take a random walk through the Ruby language and standard libraries and talk about some of the idioms and tools in there that bring a smile to my face. And since I suck at coming up with illustrations for talks, I thought I would just throw in some of the postcards that people would send me instead. Let's talk about splats. The splat operator, the star, the asterisk in Ruby. If you have something, a method that returns multiple values, returns an array of values like process.way2 returns both the process ID and the process status. And if you want to sort of destructure those into two different variables, you can use the splat operator and it just, you know, it splats it out, it structures it out into the two separate variables. It's very convenient and it's almost like having multiple return values. And there's actually, for some cases, there's implicit splatting.  So I'm not even going to make you put the star there. I know what you're doing and it works. It's great. Let's say we have a method, we'll call it sendRequest, which we want to return multiple values from. We've got both a status code and a message. Now, we have some client code, which would like to use this as a multiple return value kind of method. It wants to immediately splat it out into separate variables and use those. But we have other client code, which would like to use the return value as an object, which it can maybe pass around to other methods easily. And use those result values as attributes on the object. Well, how can we satisfy both of these? Turns out it's not that hard. What we can do is first we can create a struct for those return values. We've got our code, our message, and the struct. We can instantiate an instance of this struct with the values. And of course, as a struct, we can access those as attributes. Code, R.code, R.message. But we can also splat that struct out. And it just works. It splats out into separate variables. Now, there's one little problem. Remember the implicit splatting from before? Well, this does not support the implicit splatting out of the box. When we try to do that, it doesn't quite work. If we go into that struct definition, and we alias 2A, it already has a 2A. And we alias that's a 2-ary, which it didn't have a 2-ary before. The 2-ary, turns out, is a signal to Ruby that implicit splatting is possible. So once we do that, we can instantiate this response object. We can splat it out into multiple variables. It just works. So in our similar question method, we return a response object that we create from the code and message. Now the client code that wants to splat that out immediately into multiple variables can do it. The client code that wants to pass it around as an object can do it, can have that too. So this gives us a way to have multiple return values from a method or a single result object from the same line of code. Magic. It makes me happy. Who knows about YAML Store? Raise your hand. Cool. I'm going to be introducing a lot of people to this today. YAML Store is part of the standard library. It is a very simple file-based persistence mechanism that Ruby provides for you. And here's how you use it. You instantiate a repository. You give it a file name. Then you open up a transaction block.  It has keys and values. And what I'm doing here is I've got some post objects, because everything's a blog example in Ruby. And I've got a post key, and I'm putting an array in there and I'm appending some posts to this repository. When we look at the data that puts out, that puts in that blog.yml file, it says really readable YAML, which very clearly reflects the structure of the objects that we put in there. Now what if we have a slightly more complex object structure? So let's introduce a category to these blog posts. And we're going to have two blog posts now that are both part of the food category. What's that going to do in the output? So here's the output that's generated. We can see a lot of the data is the same. We've got our two posts in there. In the first post, we've got a category object nested under it. And it's got that funny ID in front of it. And then it's got the information about the category. Then in the second post, it's got a category as well, but it doesn't repeat the category object. It just has a reference to that previous category object. So it's very smart about dealing with objects that reference other objects. It's not going to write an object more than once. It'll just put the references back. So objects can reference each other. It works out very well. So this is pretty awesome. But it's also pretty slow because it's reading and writing YAML all the time. And it turns out that there's another library called Pstore, which actually YAML store is based on Pstore. Pstore came first. Pstore uses Ruby's binary marshalling format. So if you have trouble with the performance of YAML store, you can just drop Pstore in its place and use that. You won't have nice readable output, but in some very important measurements I did, it turns out to be much, much faster. So this is not something that you're going to be putting on your web server and serving out pages on. But if you have some kind of like local command line application, this is great. It gives you an incredibly simple hash-like persistence mechanism that you barely have to think about. It supports complex object trees. And oh yeah, one more thing. It's almost equal. This method is very simple. It just yields a series of names one after another. This is a straight line method. There's no moving or anything involved here. So a straight line method. We can call two enum on that and give it the method name. And we get this enumerator thingy back. If we call two a on that enumerator, what do we get? We get an array of the values that this method yielded. So what this enumerator did was it turned our method that yields into an iterable object problem recently. I had a program that had config files. And I wanted to treat them kind of like rake treats its config files. So I had these files called .rc. And I wanted it to like rake. I wanted to search up the current directory hierarchy. So if it didn't find one config file in the current directory, it would find one in the parent directory or in the grand parent directory. But not only that, I wanted it not just to find one, but I wanted to find all of them all the way up to the root and then basically merge them together. Turns out there's a method in the standard library that got me most of the way there. The path name library has a method called ascend. So you can call ascend on a directory. And it yields once for the current directory and then once for the parent directory and grand parent directory and so on up to the root. So this was great. It got me most of the way there. But this wasn't exactly the way I wanted to iterate because I kind of wanted to collect an array along the way if I found one of those config files. So here's what I did. And we'll go through this line by line. I took that current directory. And rather than just saying got ascend, I turned the ascend method into an enumerator. So now I had an unhitterable object over the ancestor tree of this or the ancestor path of this directory. And now that I had an enumerator, I had all these wonderful enumerable methods available to me. And the one that I wanted to use was each with object. So I said each with object, I passed in an empty array and then I went through that, I iterated through that ancestor tree path and at each point I checked to see if the config file was there and if it was, I added it to the array. And then this whole log returned the array, it worked out great. So an enumerator and two enum, you can turn any method that yields into an iterable series and it makes all the power of the enumerable available to that series. This is awesome. It makes me happy. Let's talk about break. What can we say about break? It's a key word. It breaks out of loops. What do you do? Well, let's take a look at that method we introduced earlier again. Remember, just a straight line method, no looping or anything, it's just yielding names one after another. What if we introduce, what if we use that method and we pass it a block which will break after two names? So you can see the output at the bottom, it gets two names and then it's done. What if we just do this? Let's take a look at that. We started going down, executing this straight line method. We got down two lines into the method and then we forced an early exit from this method and we did it without a return, a throw, or a raise. Might raise a question in your mind. That's kind of interesting, but it kind of sounds kind of dangerous too because what if that method had some important clean-up that it needed to do at the end in an inshore block? Does that mean it would just be front of way, it would just be ignored? Let's try it. Here's a version that has an inshore block which always puts out a last name. Put the exact same block into it, now our output has three names. So what just happened? We forced an early exit from that method in the right and middle, but then Ruby jumped down to the inshore block, executed that, and then finished breaking out of the method. And this is pretty cool because what this means to me is that Ruby has my back, even if I'm doing weird things with break, it still has my back. It's going to make sure that stuff that I put in place to clean up after myself is going to be called. What if we wanted to capture a particular name out of this iteration? So we have a regular expression. We want to capture the name, the first name that begins with s. And we could do it like this. We could set up a result variable that starts out as nil and then we could pass this thing into our block and when we find a match, we assign name to the result and then we break out. And this works, but it's kind of flunky. Another way to do it. It's different here. I am, this time, I'm passing a value to the break keyword. How many people know that you can pass a value to break? A good amount of people, that's awesome. What does this do? Not only does it break out in the middle of execution, it effectively overrides the method's return value. So I have forced this method to return the thing that I'm interested in, not the thing that it's interested in returning. Or they return by default. Let's take a look at maybe a more useful example. Let's say we want to search through the lines of a file for a particular string. When we find that string, we return it. We find the matching string, we return it. And then we're done. And this is a classic application of, you know, you typically use, like, a detect for this. But there's another requirement here. We also don't want to do this forever. If it's a really long file, we don't want to just keep searching through it. We want to give up after the first hundred lines. Here's a way we can do it, using a break with a value. We take that file, we get an enumerator over its lines, like a length of lines, then we call detect. And at the bottom of the detect block, we have our usual detect logic where we say, you know, here's the test of whether the line is matched. And if the line is matched, then it'll return the mapping line, which is what we expect of detect. We'll also have this break line in there, which checks the line number count and breaks out early with this special line not found value if we pass that max line count. And as a result, we go through the file, if it doesn't find that matching string in the first hundred lines, rather than having to have some logic later to replace, you know, the nil that we got out of detect, we've forced that default to be this special string line not found that we wanted to use. Let's talk about subclassing modules. Let's take the example of a really basic role of that game. We've got characters and they've got character class. They've got a character race. But here we're setting up a particular character who is a human wizard. So we've got a human race character, a wizard class. And here's what we'd like to happen. We'd like the character to have some attributes of its own. We'd like it to then delegate attributes that it doesn't have defined on itself to either its class or its race. Here's one way we can do it. Use forwardable. We can say we could extend our character class with forwardable. And then we can define some delegators. So we delegate the string to race. We delegate charisma to the character class. This works fine. But then one day we decide we want to add a new attribute to the race. And then after we add that, we have to go back into our character class and add constitution to the list of delegators for race. And we realize that every time we add a new attribute to either a character class or a character race, we're going to have to add another delegator. And that kind of sucks because that's repeating ourselves. That's knowledge in two places of the same thing. Every change has to be made twice. We might briefly consider using symbol-delegator because symbol-delegator delegates any missing message to a delegate object. The problem here is that it's just one delegate object and we have two things that we want to possibly delegate to, either the race or the class. So here's the way we can solve this. We create a new kind of module by subclassing the module class. We give it a custom initializer. It's going to take the attribute of the object that it should be delegating to. And we're going to save that off in an instance variable. Then we're going to call the base initializer for module, which if you've ever done module.new, you know it takes a block, which is the implementation of the module, and that didn't all fit on this slide, so you're going to go to the next slide where we are defining a method missing in that body. Let's go through that bit by bit. First we find a target of our delegation. So we send that attribute name, like race or class, to self. And that gives us a concrete delegation target object. Then we ask that target if it responds to the missing message. If it does, we forward that message on to the target along with its arguments. If it doesn't, we just pass it on up. For general readability, we also add a nice 2s message to this. So to use this, we go back to our character class and we include instantiations of this new kind of module. So we are creating modules on the fly here and one of them is a delegator module to race and one of them is a delegator module to character class. And if we take a look at the player's class ancestors, we can see very clearly what's going on here now because we have defined that nice 2s method. The message, when a message is sent to this object, it's going to start out looking at itself, character, its own class. And then it's going to look at the delegate module for character class. And then it's going to look at the delegate module for race and then it's going to go on up the chain to the other ancestors. And here's how it works in practice. We have our player character. It has its own attribute name when we call strength on it that's delegated to a race when we call charisma on it that's delegated to the class. And we've defined kind of a chain of responsibility here. We start with self, then we start with, then we go to one attribute, check if that attribute supports it, we go to another attribute, check if that attribute supports it, and then we go on up the chain. And so we have basically defined a new kind of delegation mechanism here. But we hooked it into the Ruby, the standard Ruby message searching system. So by subclassing module, we can create a new kind of module, we can add state to the new modules that we created. And this, as I said, this enables us to do crazy things like enable completely new types of message delegation. This is awesome. This is the kind of thing that when I realize I can do this, it just makes me grin. Now my favorite idiom of all in Ruby is minus one, maths is nice, so we are nice. Sometimes we're not so nice. Sometimes we're not so happy. Maybe technical debt is getting down. Maybe community drama or a passionate community, any kind of passionate community of craters is going to have drama. Maybe the drama is blowing you out a bit. What do you do? What do you do? I say to balance out that negativity is essential to practice joyful coding. Well there's no metric for joyful code. The only thing that makes code joyful, the only thing that makes it delightful is the fact that it is shared with someone else. So if you want to feel good about your craft again, because you're feeling down and you want to pick me up about the thing that you do every day, pick one person, one person that maybe knows a little bit less than you do about some area and give them a wow moment. Show them something awesome. I promise you will feel better. So I want to thank you for allowing me to increase my joy by sharing these items with you. And I hope that I've inspired you to turn around and increase somebody else's joy the same way. Thank you very much. Great job by the way. So a question where when you return a keyword, a value after break, what happens if you have a rescue also in the same piece of code? Will the value that you pass to break return or can you change the behavior by in the rescue close returning something else? Well, it's going to ignore the rescue clause because it's not an exceptional return. So it's going to pass by the rescue clause because you would have to raise an exception that matches that rescue clause in order to... Rescue? I mean, ensure? No, and ensure. Okay, so I believe... It's a great question. If you just have a value in that ensure clause, I believe the break should override it. However, don't quote me on that if you put an explicit return in your insured clause. And this is sort of something that's a whole other area that I got into in my exceptional talk. Do not do put an explicit return in insure. Weird things happen. It's a good way to accidentally throw away exceptions. Could you go over why you used to find method in your method-missing thing in the magic methods? Why did I use define method? I used define method because I had some state... So I saved off the attribute name in the initializer, but it turns out it's somewhere between hard and impossible to actually get at the modules, instance variables from methods defined in that module. Modules, you know, it's got plenty of access to the instance variables of whatever object it's included in, whatever class it's included in. But try to get at the instance variables of the module as another story. So I happen to have... I happen to have that attribute as a parameter of a method, and so I'm basically closing over that. I'm making a closure over that variable and keeping it around that way. That's how I get access to the attribute name inside that attribute. KeyStore and YAMLStore are really awesome and cool tools. Have you ever came across a simple story that lets you do a range on the keys?  There's really no... Are you talking about querying? Yes.  There's no provision for querying built into YAMLStore. It's just... Here's a tree of objects. You can go through it any way you want. Actually, one thing you could potentially do is you could actually... Since anything can be a key in a Ruby, anything can be a key in the hash. You could make a range. You could make last week one of your keys and this week one of your keys. I don't know. You could do some crazy stuff, but I'm not sure how well it would work. This is awesome stuff, but it seems like we're playing in exactly the area that Charles was addressing yesterday as being painful to optimize around. Yes. Yes, that was one of my goals, giving Charles anything. Okay. That's basically the main question is are you giving Charles on speaking terms? Possibly not anymore. Because the module subclass that you showed looks exactly like HyperCard's containment style chain responsibility delegation, so I just looked at it and said, oh yeah, cool. Only vaguely related to that. I know we talked about the self system in the past, and if anybody can show me an elegant way to do something like this only to get self-style delegation where self is always self, which I don't know a better way of explaining it. When you delegate to another object, self is still the same object instead of that other object. I would love to see it because I still haven't come up with a clean way to do that. Okay, we're done with questions. We're going to do a break and we'll be back. Thanks everyone.


ac mae'r next presentation will be given by John Garbert. It's on open software in astronomy. John, if you please. Thank you very much. Good afternoon everybody, my name is John Garbert and I just want to quickly introduce myself. I'm a principal engineer currently working at StackHBC. I've been working since about December 2010 on and off on OpenStack and about the last 18 months or so I've been with StackHBC looking at particularly at high performance computing and OpenStack and how to get all those working together. One of the major projects we've been working on at StackHBC is a square kilometre array and various things around that area. So today I'm going to start talking about that. So first place to start is what is the SKA? Here I've got two artist impressions. Hopefully it's vaguely visible. The left hand time, night time is quite night time but that's fine. So to start with it's a radio telescope. So looking at the sky trying to take better pictures of the sky. It's currently coming towards the end of the design phase hoping to start construction in April 2020 I believe. The first thing to note is there's two locations. There's one which is mostly to do with mid frequency. So that's the left hand side. This is called SKA1 mid. This is planned to be in South Africa and the surrounding area. There's about 200 of those dishes I believe planned roughly speaking. And they all get joined together to form one radio telescope in South Africa. And there's a second instrument SKA1 low which is on your right hand side. And that's here the thing that looks like a field full of metal Christmas trees. They're about my height-ish in a field. Then the little discs of them. This is the aperture array of low frequency. So why the square kilometre array? Really it's about taking better pictures. These are some infographics from the square kilometre array project. I should say I'm talking on behalf of StackHPC. I don't actually work for the square kilometre array project. I work as a subcontractor for Cambridge University on technologies related to it. This is where we're looking at things. So really it's about taking better pictures to the sky. How do we define better in terms of these pictures? Well I have no idea so I asked the scientists on this. The infographics says the resolution, the sensitivity and the speed of the pictures that they can take. Effectively the square kilometre array both in the mid frequencies and the low frequencies are making a huge step forward in this. Now from the computing challenge of this. Those of you that have been ignoring what I've been saying and reading the rest of the slide will notice that that bigger picture, better view of the sky, basically means a crazy turn amount of data going around the place. These are data rates that are pretty damn scary, particularly when you start thinking about the idea of 24-7 operation trying to get the most money at these telescopes always looking at bits of the sky. This is a radio telescope so it can kind of see virtually from horizon to horizon. So you've got very long observations happening. So the main problem I want to talk about is how do we actually do some science with all of this data that's flowing around? So I'm going to talk about three things. The first thing I want to look about is the science data processor architecture. So this is the part of the square kilometre array that's actually doing the number crunching. So each of these telescopes, the SK1 mid and the SK1 low, will both have their own dedicated supercomputer to process the data coming from the telescope. So the basic idea is the radio telescope is an area of radio silence. So that would be a kind of awkward place to build a supercomputer. So then there's a very long cable that goes to the data centre where all the computing happens. So you've got loads of effectively what's planned. There's lots of 100 gigabit ethernet links with UDP coming into the data centre, and then we need to do something with that inside the science data processor. So step one is the data is coming in to the switches, lots of UDP coming in. The overall approach here is to try and use a very large parallel file system, a buffer, to try and allow a... to try and disconnect the ingest of the data with the processing of the data. The rates at which these need to happen need to be different. So the best way is to try and buffer between those two things. So the first part is really to ingest all this data and get it into a buffer so that we can then later take that data out of the buffer and reduce it down to the data product, which effectively means that you're doing Fourier transforms and averagings to get pictures of the sky. So you've got the UDP coming in, get to the disk, try and create the sky pictures. You're trying to deliver those to the scientists across the globe that process them and find interesting things in them. And that's the general plan. So let's zoom down a little bit further into the detail of the problem here. So what does this look like in each of the sites? So for each site, you've got the data, as I said, coming in from the telescope. Certainly for the SK low, there's a central signal processor. And effectively, that takes the voltages and things from the telescopes. So the data rate coming in to the science data processor is about one terabyte a second, roughly speaking. There's a lot of UDP not to drop on the floor, to be fair. The next step is, as we've said, to try and get that ingested. So if we take a little zoom further down, we've got the data coming in, and we've got these sets of real-time processes to ingest the UDP. They're roughly writing into this tiered buffer system about one terabyte a second, and they're reading out for the batch processing order of magnitude between four to 10 terabytes a second. And for the output, the data products is on order of magnitude smaller. These are all estimates based on what we think the processing to be... that will happen, but the processing... these science workflows are not yet decided. Things may change between now and when the telescope actually comes online. So just estimates about the data processing. So from the batch processing to the data products, it's expected to be about 10 gigabytes a second-ish, such that you can then push that all out to the regional data centres using a 100 gigabit link and try and keep all of this... and again, the challenge is to try and keep all of this running 24-7. Okay, so this is a massive eye chart of architecture, and I'm not really trying to go through this apart from to say... I've been talking really about the main visibilities that are flowing through the system, as the scientists would call them, the main data, but really the buffer is trying to be this general purpose storage component within the system. There's lots of different places that have to use this. So when you read out the long-term storage before you actually deliver the product to the regional centre, you're trying to use the parts of the buffer for that as well. So just to say, the sizes of these buffers are going to be quite variable. So the buffer component, what it's actually trying to present to the system is this abstraction of a data island. So as you'd imagine, the data island is just trying to define... it has certain characteristics such as... do I need this data to be able to read very fast? Do I need to have it to be a particular level of resiliency? Do I need to do replication on this or do I just need it to be fast right now? So the idea is that different components define their needs as a data island, and then that can be scheduled to decide exactly which resources within the system you're going to consume. Okay, so let's go over just quickly like the key challenges here. The main one is the massive data rates. How do we get a parallel file system that can actually sustain these data rates? How can we estimate its cost so that we can start to do budgeting? The second thing is here we've got a lot of control plane activity beyond the data rates. There's a lot of different size buffers that are needed at different times and needs to be copying between the tiers of buffers if that's what the budget basically means that you can't just throw the most expensive storage hardware, network hardware at this problem. You need to be a much better efficient use of resources. So we need to have a tiered buffer so we need to deal with that modelling. Going back to keeping the budgets right, the idea here is to size the system for average load. What I mean by that is when you go back to the observations that are happening, depending on which bit of the sky you're looking at, your observations will be for different lengths of time, just because you physically can't see that bit of the sky for 24 hours because the earth moves. Well, you know what I mean. So for different observations, there'll be a different size buffer because the longer you're looking at it, the more data you're going to come in. We need to try and slice and dice the system in a way that that works, but still keeping that sustained data rate. Okay, so the next two parts of this talk are going to talk about how do we actually go about prototyping the system and exploring the problems better? So the first part of this is what I call the design supercomputer. What we've built is the system we've called Alaska, ala SKA, which is a performance prototype platform. This is two racks of hardware hosted by Cambridge University, and this is where a lot of the stack HBC work has been focusing. This we've turned into a bare metal open stack cloud, and this is allowed us to slice and dice the system to actually explore some of these problems, and let me try and dive into how this has helped. So the hardware itself is trying to model a small fraction of what the final system could be. The core part of it is in the 25 gig ethernet here, we're trying to mirror this idea of this is trying to be the network that the UDP comes in. So the telescopes would be sending to the top of rack switches at 100 gigosecond, and then you get the UDP packets coming into the nodes. So right now this has been running, the simulators for the telescopes run on one rack, and that generates all the packets that go across to the other rack, where they try and simulate the ingest nodes, and there's ingest nodes trying to use high speed networks such as InfiniBand to connect disparate storage systems to disparate compute systems to try and deal with some of this dynamism. So when I say software-defined supercomputer, what do I actually mean? What I'm trying to say is how do we build up reusable pieces that people can share when building up their workflows? These workflows will evolve over time, and a lot of this work has been about working with the scientists to see how well existing systems could be packaged up in this way, so we can basically allow the scientists to do their thing, while the network engineers and the compute engineers optimizing other bits and pieces can go on doing their thing and grease the reels of innovation. So in an open stack world, none of this is particularly new, but this is just applying it to the science world, so the idea of just trying to package up applications using containers and Ansible and just make these pieces that we can slot together. So one example I wanted to pick up on was some work we did with the Kubernetes Cloud Provider OpenStack. So I spoke about this abstraction of a data island and we were trying to look at whether we can actually use the idea of the Kubernetes abstraction of volumes to map to this data island concept and how all this thing could glue together and what it actually means. So this is a big diagram with lots of boxes that have millions of moving parts inside. Let me try and describe what's going on here. If you would like to see a recorded live demo of this, I will put a link on the presentation to something I did at the OpenStack Summit in Berlin. Where we demo this working. But what we've got is we've got OpenStack Magnum that we're using to create the Kubernetes cluster. So Magnum can resize the cluster depending on the size it's required. So you state how many physical nodes you need and that stamped out the Kubernetes cluster is actually using Ironic underneath so you get the whole bare metal machine. There's no hypervisor in between. So that gives you a set of machines. You've got raw access to the compute and use Kubernetes in the usual way to create the containers that you need and connect them between your machines. But these particular containers are backed by the Cloud Provider OpenStack's OpenStack Minilla-Seph native plugin. Let me go through that a second. So what happens when you create the volume in Kubernetes is it talks to the Cloud Provider OpenStack code which creates a share of the appropriate size within Minilla. In this particular case we're using Minilla's CephFS back-end. So actually what it was doing was creating share quotas and namespaces within CephFS and then exposing them appropriately into Kubernetes. But what this has given us is a way in which the scientists today working on the workflows can actually start using this model and saying this is the size of the volume you need, this is where it needs to be connected and because it's using Ceph as a back-end this is attached in multiple places in multiple writer, multiple reader mode. So this is exactly the kind of thing you need here. One particular aspect of this to look at is the name shares. So when you create your volume you can say I want to use this particular share in Minilla. So you reference particular share in Minilla. That share in Minilla may have a particular frequency band of the information you need. If you need to attach to several different frequency bands the idea is that you can create those set of abstractions that are saying I need to connect to all these different frequency bands together on one machine. And this is one of the problems with the placement that we have to deal with in the system is that while you can have an element of ensuring that you have the data local to your compute at some point in these algorithms you need to join up in many of the algorithms at least you need to actually join up all the different parts of the sky if you've divided the sky up or you need to go across all the frequency channels more likely. And so in those cases you need to actually go between racks where you've let me try and describe that better in one second. So in some cases you can't just put all the compute local to the storage in some cases for one particular observation you kind of need to see across the whole for one particular workflow you need to see across the whole buffer in particular cases. So if you go back to this data island picture most of these prototypes most of this prototyping work has really been can we join all these pieces together? Can we do the dynamic provisioning of slicing and dicing this piece up? Does the set of abstractions work for us and working through those issues? The big risk we haven't addressed so far is how do we deal with these data rates? Do we deal with it while you're laptop locking up? It would seem awesome. Second? Well, it's happy now. Okay, so the second well, this third part the second piece of work on prototyping I want to talk about is the Cambridge Data Accelerator project and this is where we're we've been working on a project where while it's not directly targeting the SKA it's a resource for testing these very high data results or testing these very high data rates parallel file systems and how to explore some of this slicing and dicing. So the basis of this project has been using Cambridge University's cluster which their supercomputer that they're currently calling the Cumulus UK Science Cloud it's really got there's kind of two key parts of it it's the cumulus the cumulus part which is a mix of Intel Xeon nodes and KNL nodes and there's a a second side which is the GPU side for this particular project we've been focusing more on just the the Omnipath part of the network which is on the the Xeon and KNL but the main thing is the storage offerings so this is quite a traditional in the sense that they've got a global luster system that's servicing most of their users they've got more and more users where they've got workloads that are IO bound their luster file system works great for the general purpose needs but for the users with big simulation runs where they've got loads of small files the metadata servers are creaking and for when they're really pushing lots of data through you really want something that's more dedicated so the data accelerator project is trying to how can we address those users' needs better so just to highlight the size of the system if you look at the top 500 list of supercomputers because of the two networks it's kind of the system's got two entries for the two different halves number 87 on the top 500 in November 2018 was the cumulus side it's about 12,000 sorry, 1200 machines right now and it walks to GPU clusters on the other side just to a side so how did this how did the data accelerator project go? it's actually got two entries for the IO 500 so we're using the IO 500 benchmark to see how we could get for the whole all of the hardware and the data accelerator using Luster we're able to get number 3 on this IO 500 list and number 7 using BGFS so we tried the two different file systems on the same hardware it's not quite the same client count it's pretty pretty impressive from what what we're able to do and I'll go through that in more detail I should say at this point that the IO 500 doesn't currently have 500 entries so it's a little bit unfair saying that number 3 is the third in the world there's not that many more entries if you scroll down that list but it's a good benchmark that's starting to gain traction so what is the system? it's actually it's currently targeting about half a petabyte currently that's spread across 24 machines each of the 24 machines have two Intel Omnipath adapters and I'm going to go through what interface do we give the end user with this system from looking back at the original data rates if you do a marketing trick of changing bytes to bits it looks like it meets the requirements it's the best bit of marketing I've done but you know I'm an engineer so I tell you about it so yeah it's close the bit I was talking about the data islands and it means it's almost it's certainly good enough to do one data island of what the SK is wanting and I want to sort of go through a few interesting stories about the benchmarking I had some sort of conversations about this and people said it's really interesting benchmarking is very tricksy just a few things when we were looking at this benchmarking of the system we were having very unpredictable results between the different runs we were actually using the production cluster so it's picking at random different compute nodes and running on them and trying to just do sort of you know how can we get one node maxed out it turns out that this setup the IOPS even running Luster and BGFS basically the network turned out to be the bottleneck very quickly even with the the two Omnipath adapters on the box so what we actually found was this Omnipath network is a factory network so effectively you've got lots of switches with lots of 100 gig links so that if you look at the top of RAC one switch has it's a 2 to 1 over subscription so you've got two cables going to the course where you've got two cables going to your compute nodes and one cable going to the course switch all of the cables in the switch and this core switching area was effectively where we were seeing saturation because the routing algorithms weren't adaptive enough for the network load so you're actually able to saturate some of your network cables so it's actually ended up testing some of the network routing much more than we were anticipating there's a lot of stress on the network another thing we found was using these particular SSDs the P4600 they remind me a lot of my son trying to walk towards me and bear with me with this analogy they're very optimistic to start with you're like wow these are most amazing things ever they're way better than the spec sheet and then they sort of trip over and fall and then get going again and sort of crawl towards you and then keep going all the way around the house and run loops around you what we found was is that it's effectively reading around the accounting on the way your block is stored you hit that sort of you seem to hit the next it's almost like the data structures have got extra levels that are appearing in the data structures and it just gets that little bit slower so you have to be very careful about getting that steady state of the system to say that that's the that's what the system is going to do in real production and doing a a secure erase of the disk gets you back to it sort of very happy peppy wanting to run about all over the place self which is really interesting well at least it meant we could actually repeat the experiments we saw the repeatable results but yeah it was interesting okay so the how we're actually exposing this to users for this particular cumulus system right now right now I'm taking a subset of the system we're trying to get to open stack on top of it so we can have stuff other than slurm on the system so we're trying to do the same bare metal slash hypervisor trick from the p3 system but right now the majority of users are accessing the system via slurm slurm has a concept of a burst buffer within it it's already all in production in several sites the only working driver for the slurm burst buffer right now is the Cray DataWalk driver because of that that's the one we decided to integrate with what that actually does is it talks to a CLI tool so slurm just shells out to a CLI tool telling the CLI tool this is what the user has requested here you go by the way now I know this is the compute node please mount it on the compute node so you've actually got a contract with slurm what we've done here is done a little bit of integration work with some go code just to basically take those commands from slurm and then update a a data model and then basically try and distribute that between the burst buffer nodes where it just shells out to ansible to go and create the correct file systems let me talk about the that's going to really mind me if it keeps saying this we're going to talk about the data flow between all the different bits of this maybe it's just my keyboard that's gone anyway so in terms of informing the control flow for the SK work the hot tier cold tier sort of tiered buffer system has exactly the same properties that we're trying to fix and trying to sort out you've clearly got a setup phase you've got a tear down phase at the end where you release the if you sort of read both ends together it's sort of easier to understand the system you've got the setup and tear down you've also got the data staging in and out so users can basically say um please create me this burst buffer of this particular size please get this data ready for me within the burst buffer for when my job starts so that means for a particular user you're not wasting valuable CPU time um copying data about the data is already ready in the burst buffer for when the CPU nodes are chosen and then assigned to that particular job so right now if people try to copy that themselves you'd actually be charging them CPU time while they do that copy which may be a significant amount of time so this system actually uses the the burst buffer nodes themselves to copy from the existing filing systems to the high speed one that gets it already there for the job what the user actually gets in terms of their environment in slurm is they get environment variables telling them where the burst buffer has appeared so if you've requested um to attach to several persistent burst buffers or one per job burst buffer you get different environment variables telling you what's happening so what does it actually look like from the user perspective so if we think of the user requesting a per job burst buffer and they're requesting it to have the global namespace and the private namespace they might have their code running on this host one and host two and there'll be a set of environment variables that point to those top two locations one is a share you know one is basically a simlink to a shared space in the filing system and each of the hosts have their own private spaces and really this is just to avoid contention another thing that actually this can be used for is to try and simulate high memory nodes so one of the things we want to try particularly well for the SK work is how well some of the codes that need to have the whole of the sky model in memory at any one time if we can actually use disaggregated storage in this way to a swap if that's actually fast enough for those needs for some for some codes it may well be the testing is currently a bit inconclusive haven't really got the actual results on that yet trying to see if we can use this for swap as well okay so I just wanted to review where we've got to how we try and what things are we doing here so the SK buffer is trying to fix these problems really it's trying to have a flexible architecture and the flexibility in this sense what I mean is allowing for the different sizes and different jobs by slicing and dicing the buffer into different sizes and having that the ability to say that this data and this compute is close or this is the one case where we need to see data no matter where it happens to be trying to express those requirements appropriately so that you can do the right optimisations we looked at some of the control flow prototypes the Kubernetes the Kubernetes work where it ties into Manila so you can try and use these abstractions to give the storage in the different parceling ups that it's needed and try to look at the prototypes to get the data rate as close as we can to what the SK is needing so how to get involved a lot of this work we've been talking about in the scientific open stack SIG it's quite an interesting group of folks get together a lot of the open stack summits there will be a group of different talks and interesting conversations about people focusing open stack usage on HBC in that kind of environment also if you wanted to have an overview of how open stack can be used within these kind of areas there is a sort of miniature book PDF that you can read through on what's going on that's a great way of saying hello to people doing similar work for the that go piece of code for integration I was hoping to be able to give you the repo to the open get lab well you know the get repository haven't quite got there yet to get that sorted I'm hoping that will be really soon which is annoying but close but we've been having conversations about this project within the SIG and that will certainly be one way of communicating out what's happening so yeah thank you very much for your time and thank you to all the people supporting the project this can be done without loads of help from folks across the SK project different people at Cambridge Dell and Intel have certainly helped with a lot of the work on the data accelerator but yeah thank you all very much and if yeah thank you now we've got time for questions I hope if people got questions I'm hopeful a microphone might be able to get to you any questions oh sorry there's a question here or maybe shout and I repeat your question yeah you showed this connection between Islam and Dettawar from Craig so that the ACD was actually use the Ansible to help the hardware why you need that I mean you already have the Kubernetes and then you already have the hardware there so why you need Ansible to deliver the hardware I didn't understand that so let's talk about your, let me paraphrase that you're saying here why use Ansible so in this particular case this is on the system so there is no Kubernetes running here no no no my hope is this system so basically you've got the Ansible here is running on the storage nodes so the data accelerator nodes is where you're running the Ansible and that's effectively when you're doing the provisioning it does the provisioning of the Ansible across the machines and the tear down in the same way my hope was that I would use pre-existing Ansible to do that in the end it's actually home cooked but the idea is it's just an easier way of extending the system is rather than trying to re-implement what Ansible does we just shell out to Ansible to do the appropriate thing for the appropriate file system so BGFS versus LOSDA it's the same inventory same set of variables and you just sort of well you flip the play but basically cool well, thank you very much I'll be down here if people want to have a chat so that's great, thank you


So high stat armor, a fast and easy way to get it, well this mission for those that do not know has a whole try chance in getting you that high stat armor. How's it going guys, my name's dpj and if you enjoyed this video leaving a like really helps out and if you like what you see and want to see more be sure to subscribe. So just a short but sweet video today showcasing for those that do not know how to get high stat armor which is pretty much guaranteed. So the pit of heresy under moon for those that do not know has a super high chance in dropping amazing stat gear. Now although this won't be pinnacle loot, it is definitely worth your time in trying to get that gear whether for a pve or pvp build because it just drops with crazy high stats. I've done it on all three characters this week and all armor is more or less great. Probably the worst piece I got was on my main character my hunter. Now this high stat loot drops from the boss only of the pit of heresy and I wish you the best of luck in not getting a class item if you do this. Now looking at the armor here you can see on my hunter it drops as a 60 stat roll as standard but it's where points are spent which seems to be great about this loot.  Again on my titan I guess it depends on what build you're going for but this right here is actually great for what I want and have in mind on my titan. And then to my warlock I mean this is just great 64 stat roll as standard mobility and intellect what more do you need. But yeah guys it's something you may as well do if you are after decent high stated gear for pve or pvp as this for sure will help you out so I hope it does for those who don't know about it. So yeah guys the pit of heresy under moon is the place to be get to the boss save the checkpoint by switching characters and do it the easy way. On that note the end of the video has arrived if you enjoyed it leaving a like really helps out and hopefully people I will see you on that next one.


With barely 48 hours till the conduct of the governorship and state houses of assembly elections, the cut of appeal on Wednesday refused to restrain the independent National Electoral Commission from reconfiguring the bimodal voter accreditation system. Machines will discuss the implications of this for the ongoing litigation over the results of the presidential elections in Nigeria. We'll also be looking at the latest from the African under-20 championship when Nigeria's flying eagles have been doing the country proud and then we'll talk about Nigerian women's sport as a world-necked international women's day. And of course we have usual take at the top stories on the front pages of today's National Daily with in-depth analysis coming away all this on the breakfast. All right it's a Friday morning we're here with the ultimate edition of breakfast and of course my name is Kofi Bartels glad to be back don't worry Messi and I are not wearing a uniform this is not maybe children's choir or something. Well it's good to be back on your screen I am Messi Bopu. All right we said to do justice to today's topics very interesting the Beaver's case has been heard we all know what's going on but we still have to talk about it because there's still some more talking points and matters arising we'll discuss as usual and we'll talk sports the flying eagles giving some mixed feelings to people out there in Nigerian football fans but let's start with our top training segment we look at the stories driving conversations in the social space the first one yesterday we broke the news in the morning while we were here an unfortunate incident of an accident involving bus rapid transport vehicle which was being used to convey staff of a legacy government to work in the morning and a train at the PWD junction in Ikeja I hope we can we can have a look at that video and the incidents there of course we can see the the scene of the accident so far so far from that incident we have six people have lost their lives six people have lost their lives and we hear about 102 persons were taken to the hospital by the paramedics right there at the scene and the hospital we're talking about is the Lagos University teaching hospital we hear about 102 victims were taken to the accident scene several persons went to donate blood not just at the Lagos University teaching hospital also we're looking at other hospitals in Lagos state the governor of Lagos state was there to to look at those who were injured and of course the to try and see what they can do to make sure that they are better treated but what we hear is that the bus driver was he was quite how would I put it he was quite she's aggressive and refused to listen to the he the warnings of the the flag man at that PWD Shogun Leaxis where there is a train crossing you know when you get to a point where the train crosses the road you have to stop so this happened yesterday morning we were here on air when we announced it the train was coming from a gig area of Lagos state and met the bus you know on the rail crossing and smashed that bus one of the onlookers said that the incident happened as early as 8 a.m. or just before 8 a.m. and like we said the body count the death toll right now is 6 102 percent rushed to lose yesterday and out of that we have six dead very sad indeed what is the Lagos state emergency management agency saying to put out the statement yesterday saying the incident happened around 738 this morning a train collided with the bus we have activated our emergency effort plan and all key stakeholders that are important to the emergency are on ground is what the last summer legal state emergency management agency said apart from that they also put out a situation report it's quite wrong so I wouldn't I wouldn't read too much into it but they said that they had the agencies LRT at Kapa alongside LRT at C3 LRU paramedics and C3 paramedics only panel Kapa Lassan boss as legal state ambulance service ok Niger police force last month LNSC and the Nigerian army were responders at the scene they also were able to evacuate the bus so that the place could be rearranged and reordered and I think everybody did a yeoman's job yesterday so that's what but to tell you the latest what the the statistics that we have from the legal state university teaching hospital 102 persons were taken there six people dead the legal state governor also took the stats from Lasso and then they put those stats out as well so that's what we we can say mercy well so the reaction from Nigerians first is very unfortunate and I remember when we you know took that breaking story right here yesterday but our heart and our prayers was out to those who have lost their loved ones it's really really unfortunate at this particular time but I like I wish I think that some accidents can be avoided a lot of accidents that we experienced that can be avoided in that case if we were even able to put out the video and if you have seen the video how the driver what what really happened are we not supposed to have barriers or blockade or something you know so you don't have the crossing of another vehicle especially when you have a train track so that would be you know another question and then you know was a driver in the right frame of mind I think that we really need to pay attention to those who are you know handling vehicles whether it's your personal car whether you know it's a foreign organization or what have you or you're into the transport business because one would category I mean categorically look at that and say this probably might just be a suicide you know this driver probably would have been on the suicide mission it's really scary honestly if you saw the video coffee did you see how did the vehicle navigate you know the bus navigates its way to that particular point that's that's a good question how did the bus navigate its way you know if you if you were around at the days of Moloa in Lagos I think you ask yourself the same question how they get sometimes on top of some bridges how they even fly on top of how they will land where they land you know so it's a very very germane question to ask how did how on earth did the guy the bus get to that point you know because you know when you have most times when you have the truck the train coming something has to happen in this case we're told we're told that there was a flag man but the red flag stop stop stop stop so use the word suicide mission or suicide attempt I mean even if you don't intend to kill yourself or kill anyone you can actually be in back of a suicide if you refuse to do the right thing okay well we move before before before we move on I mean you know the the another thing you mentioned which I think it's we need to reiterate it's very important is is having the the right mechanisms to be able to warn drivers vehicles who are on rail crossings because there are a number of them in Lagos and other cities in Nigeria that have rail trains that time a train is coming you know back in the day messy you used to have what do you call them and bells you hear bang bang bang you know you know that this is a train I don't know I don't know I will try to I want to conjecture here but I don't know if if there was a train there was a bell wrong in that place you didn't have that then also in some in some parts of the country I know that we've seen what do you call it again barriers you know so automatically if a train is coming the barrier is gonna it's just gonna fold you know and then we have lights you know so do we have these things the Nigeria Railway Corporation and the managers of the such facilities and so they have to answer they have to tell people what exactly is going on whether we still have those barriers a flag man in loneliness to me is not enough you know you need more you need more okay you need more flag man to me is not enough you need more at the end of the day lives have been lost I mean I so messy the the the victims who were being pulled out they were bleeding life you know this was really really a dangerous incident you know very dangerous incident but another aspect of this which I think you must also look at is the fact that some dust was raised as to how the the victims were being taken care of you know some dust was raised as to how the victims were being taken care of there is a video that was circulated on social media showing the victims being being addressed I'm sorry attended to on the floor on the floor and the the what do you call the the chief press secretary to the governor of Lagos did have to put out the video you know saying that a tweet rather saying that this is a normal way of of I just want to go to his tweets so I can read it but it said there's a normal way of attending to victims of such incidents he called the user word trash you know trash which is an interesting word you know he's the word trash which is an interesting one so I'll just read the tweet of the the chief press secretary to the governor of Lagos state and then maybe we'll look at the tweet of the governor of Lagos state himself boy boy got a castle he is the is the name of the chief press secretary to the governor of Lagos state and this is what he says his attention has been drawn to a video making the rounds about the treatment of the patients who were involved in the early morning accident at lasso and he says for the avoidance of doubt no one is treated on the floor what you see is called a trash it is global standard practice what you see is called a trash it is global standard practice and then he showed the video and that video should people you know lying on the floor you know at last outside in the open space and then he went to say it's global standard practice in the hospital during an emergency of this magnitude a trash is the is a preliminary assessment of patients or casualties in order to determine the urgency of their need for treatment and the nature of treatment required it says Kate Henshaw your auntie Linda occasion others should take notes thank you and and then also we can look at the the statement of the the governor of Lagos state who also put out a tweet saying I was a lasso to understand the condition of the victims of the bus and train accident the governor says the team at lasso expertly set up an outdoor trash center expertly which has contributed in saving lives and speeding up injury level injury level profiling rather and supporting immediate critical attention so of course the the there was an attempt you can see from the governor to quickly let people know that oh if you see people outside on the floor it's a trash is it's not it's the best thing for doctors to do you can see he tried to take charge of the narrative you know to take charge of the narrative and to let people know that this really helped but his chief secretary went on to address those who were worried about that outdoor treatment of but the thing about is this the chief medical director of the legacy university also said something yesterday he said that yes indeed the trash is a is a global standard of best practice thing to do says global press package but he also said something you know he said that they have a 30-bed emergency unit at lasso 30 bed and that the 30 bed emergency unit was was had patients in it already at the time the emergency the victims were brought to the hospital you know and he went on to say that they received 85 patients at once at 8 a.m. now if you look at a 30 bed emergency unit and then you look at the fact that you have to receive 85 patients at once that is what we call a patient surge and they're not prepared for that I mean 30 bed hospital teddy bear emergency unit what are you going to do with 85 and this is what we call a mass casualty incident an MCI and in these mass casualty incidents you have to just do sort of a temporary arrangement you know you know so so that is it but the thing about is that medical practitioners some doctors I spoke to yesterday late last night at this morning told me that them that this is not a way to go about it that where things are done properly when the ambulance services get to the scene what they have to do is they have to do the charge there as this is what doctor in UK told me yesterday that what they're trained to do as far as he knows is that they have to take care of the charge or do the charge at the scene of the accident place them on the floor you know try to see who is who try to sort out the tragic is important to know those who need because they have categories of injury those who are just walking injured they can just clean them up and they go home those who may have broken bones you need to be careful when you're carrying them those who urgently need blood okay those who don't need to want blood just minor treatment so you can know to give priority attention to what he told me was that before you get to the hospital as the ambulance and the paramedics and co are doing their thing they've already sent information to the to the emergency accident emergency people who be on standby with their with their wheelers those beds that have tires under them whatever they call them get so now when they receive them they wheel them directly to the A and to start taking care of them that's what he told me I'm not an expert in this field but what I think we can say for sure is that it is not global standard practice to attend people in the open outside anywhere in the world why messy in the open because you could have a rainfall okay you could have what do they call it again it could have snow right now in in the United Kingdom they said to have the coldest time of the year I don't know if I hear the scene those images images but you said to have the coldest time of the year and if you have the coldest time of the year then you can't be keeping people outside in the cold at least the least you can do what we see in war zones mercy even in war zones earthquake zones they have tents and remember those COVID-19 tents that that we had in Lagos a very beautiful arrangement but that is the kind of thing we ought to see if you want to have a try you will have a massive proper one not canopy messy I mean if you look at the images you see that they had to hire canopies because I saw the name of the rental company so I mean for if the hospital emergency birds they don't have enough bed space how do you then expect them to be able to afford the tent when I mean if you have that resource you probably would have had enough bed space 30,000 or 30 30,000 are we talking about 30,000 here now we're talking about 30 bed space 30 imagine yes no 30 bed space and there are people already there yes okay so so so the thing is if the government you know the hospital cannot afford you know the bed space that they need they just have 30 bird space and at the time the emergency is 85 how do you then handle it so yeah there's no possibility I mean expecting them to have you know the regular tent I mean what's obtainable best practice when we talk about best practices almost like expecting them to give what they don't have because if they had enough bed space they probably won't have need for you know that tent so so so so then then we have to now say therefore that the the issue is not about global best practices that you have to treat the issue is that they did not have enough space exactly that is that is the issue if you come tell me that the the fact that you are treating people out in the open I mean they put to put the mattresses on the floor okay and then you know and I mean kudos to the governor he went there we're giving credit for that he went to look at them went to see them and of course listen to them and when the governor comes everybody everybody all resources will be available to these people all right the Commissioner for Health Professor Trinja Bayumi was there on ground you know even supervising the erection of canopies you know so yeah but what what what it seems messy if you look at the canopies that were erected where the canopies were erected is a bit different from where they were throwing those mattresses when the gambolans his first came it looks like it was almost an afterthought so let's get canopies and they went to rent canopies now if you have a stand by trash in the hospital that's meant to take care of mass casualty incidents then you already have something there not going to rent canopies as an afterthought now messy sorry that this is this is a final one before Lagos is a city of 15 to 20 million people okay and and some medical experts tell me that in order to avoid such overcrowding in when you have MCIs you you distribute the the casualties or the victims to different hospitals in the country they also tell me that you need to have levels of a let and they say there's something you call a blackout that if you can declare this blackout any hospital anywhere in Lagos now this took place in the Queja so the likes of Reddington and Co any hospital that is of high standard can be taken over they have to close down shut down to receive these people private private hospitals at the end of the government will pay the bill so the point is this if we had enough hospitals in in in Lagos state or if they had a an emergency plan in place you know they won't have to have had to take everybody to lose they could have taken some to even private hospitals where they have facilities in big in large enough to attend to mass casualty incident so that's something something to note that's something well this conversation you know we're not and always when we talk about some of these issues we say we hope that the government on the other hand would act you know in terms of implementing but it's like when you constantly have the case reoccurring then it means that we've not learned anything yeah but but also we must not forget to add that the the Lagos state emergency management agency and then the Nigeria Railway Corporation they blame the driver and he's a government driver of of of being complicit in this in this accident and we don't know what his fate his fate will be and that's how we tell our drivers to to drive carefully mercy it was some some months ago I was saying to myself you know that wow these this BRT we thank God oh you know that they haven't gone the way of mold with a government of Lagos has done well to you know to have a system where drivers are professionally trained you know the days of mold where they were flying off the bridges you know flying off the bridges cut up bridge and all you see them hanging you know you're flying through the Lagos lagoon but this time we've not had incidents I think it's it's kudos and them but we need to do more circuit now we'll call the drivers again and without any of the companies you know and sit them down and reoriented them to tell them you need to you need to be careful you know we need to have an investigation into this to find out what was in the mouth what happened to the driver why didn't he stop when he was flucked down so well so next on a top trending is that Nigerian is involved in this particular incident she's been declared wanted I mean the most wanted list in Italy so the federal government has also contributed in extra dieting the suspected human trafficker by the name Joy Jeffy to Italy to face criminal charges she's 48 years old and she's one of the few women on Italy's list of 100 most wanted criminals that was extradited by Nigerian authorities that happened just within the week here now Jeff has been also on that list since 2010 that's according to report after she was accused of playing a leading role in illegal transporting of Nigerian girls to Italy Netherlands and Spain for you know prostitution and of course trafficking however it's also been reported that she runs a cartel where this recruitment is done these women here in Nigeria they are transported to European countries and they are used where you know violence and all of that I mean if you look at the movies you can only imagine what these people are going through now the fact that she's been tried and sentenced 13 years in prison in absentia by the Italian authorities is not you know a joke and that process had started since 2022 that's 2022 June 4th so it feels like it was a big one for you know the Italian government and also the Nigerian government yes indeed yes indeed I'm messy this story and was carried internationally it's a big story really I saw it on Yahoo news I saw it on Australian news websites they had the video everything you know and it was a big story in fact all these news wires news agencies made money from this story was cried all over the world and and it's it seems this lady Joy Jeff or Jeffy Joy which whatever her name is is quite she's very important to the Italians they want to have her they've been trying to have her for a long time and I think the head of the Italian criminal agency was saying that he they enjoyed good cooperation between themselves the Nigerian Nigerian justice system particularly the Ministry of Justice who agreed to this extradition remember how it took a long time for horse puppy no for no husband before abacare you know how it's how long it's taken and the tussle between the Americans and the Nigerian cow bent over the extradition of abacare you know it's been a long-drawn thing and people I was forgetting about it but this particular one it was just them like hot knife through butter you know it took a while but she was taking out of the country I saw you know when she got to Italy she was not working well it was limping and they had to put her in a wheelchair and I saw the care and attention that they gave to her you know even PT in her you know and I said wow that is something we need to learn and I'd even take her even a criminal in you have to treat them with dignity and humanity this is a case of alleged trafficking in girls you know it's a case of alleged taking girls out of country for prosecution a prostitution you know deceiving them and then when you take them there is a case of allegedly using you know cultists criminals and mafia to intimidate these girls and to and to basically force them to engage in prostitution against your will you know threatening their lives and threatening them you know to keep them in bondage so it's a case of alleged forced slavery you know intimidation threat to life you're looking at illegal migration okay human trafficking you want to call it that a whole lot now these are all allegations that the the the Italian legal system will have to prove I'm sure the lady will also have her time to defend herself in court you know then we now know what I need she's guilty as charged or not you know so that is that we won't rush to conclusion yet but this is not the first time we're hearing of a Nigerian sort of mafia in Italy you know or any part of the world particularly in Italy engaging in such acts it's not the first time and we'll watch this case it's a big one it's really big one watch this case to see where it goes but you know we just celebrated international women's day mercy and it's a day where we'll talk about the dignity of women women empowerment and and gender equality and I think that you know the female folk out there the leadership doing their best to not put the fellow women in harm's way because already difficult getting the men to to agree to the fact that women deserve to do that equally you know so women need to stop these things to do and are not helping the cause of gender equality and women's right we're talking about them gender-based violence GBV we're fighting against it because it is wrong to stamp it out of our society and and women should be leading the cause in in fighting gender-based violence but when you have women now victimizing other women girls then it makes it harder now I'm not saying she's guilty we'll wait for the court to you know see how it pants up but we need to move on and that's because we're out of time would definitely you know come through with more interesting top trending stories of course on Monday but when we come back on the other side will be time for us to go through the papers with GD Johnson all things being equal please stay with us