Welcome to the CSS podcast. This season, we're answering your most burning CSS questions. And one thing that we see in nearly every web experience at one point or another are images and other media. But sometimes that media doesn't always look right. It might be distorted or cut off at the edges. And you might be confused about why that's happening. Well, there are a few ways to add images to your websites, and so there are a few different reasons that you might be running into issues with them. So in this episode, we'll talk about foreground images, background images, SVG, and why those images might be distorted. Yeah, they all squished. And I'm like, why? We're here for you. Let's start with foreground images as you called them, which it makes sense you called them foreground images, but I don't know. I never thought of them that way. They're the opposite of background images. That's why I'm like, obviously, they're in the foreground. And these are the ones that are critically part of your content, right?  And you add them with an image tag, which can be within a figure or a picture element. And images have this weird term called a replaced element. And that means that the elements, contents, and size are defined by an external resource, unlike the image in this case, and not the content of the element itself. There's other replaced elements in the web, too. You could go check those out if you're interested in this concept.  But you can style them a few different ways. You can set their height and width directly in the image tag as height and width attributes, which we highly recommend. You can set your height and width in CSS, or it could be a percent width of a parent. But what I often do, which you might do, too, is setting the image to be 100% of its parent width. And if the image is a portrait, its parent is landscape, you might see that it overflows the parent. So that might not be what you want. Now you might also want to set the height to 100%. So it's not just the width of 100%, but also the height of 100%. So it actually fully fits into its parent size, no matter what. But here is where that issue comes in. When you have an image and you set its width and height to 100%, so it takes the size of its parent, you're going to get some distortion. It's either going to shrink or stretch, and it might not be what you want. I can just imagine a box.  And the browser by default just goes, oh, it's easy. I'll just squish it this way and squish it that way. It fits right in. If only packing my luggage could be so simple. If only it was OK for the image to just look however it needed to. Yeah, it's no big deal. We'll just read the alt. You don't need to see anything. Well, here are some solutions, though, to this stretchy, squished, and maybe stressy image that needs to fit into a box. You can use object fit and object position properties to position the image inside of there. So object fit, you can set it to something like cover, which will spread and center the image. And you can use object position or reposition to somewhere else. Like if you want it to be the left aligned or right aligned, maybe you wanted to focus on some sort of content after it sort of did some cropping. Cover will often crop pieces of it unless it's maintained the aspect ratio. You've got object fit contain, where the parent box is the max size, either the width or height, and it'll shrink to fit. And a little FYI here, the default is fill, where it will stretch to fill the parent space. So object fit, the default is fill. This is often why you get a stretch and a value of none, which you can specify, cuts the image off. It basically does nothing, and that is not the default. You can also do something like max inline size of 100%. And this is really common these days as a reset or to normalize styles for your images, which is great for a couple of reasons. So the first is that the image won't ever be larger than the viewport or its container that you've set it to be a max inline size of. And it's also a max size. So it's not going to ruin the aspect ratio of the image, like setting the height and width of 100% can. It also pairs with block size auto, so the height resizes with any constrained width. So you can set max inline size 100% on your base style sheet or your resets to really normalize all of your image or media styles. Yeah, seen that one a bunch of times. It's always like the default, too.  Stop that. Yeah, right. If you don't have any styling on the image by default, it's just going to take the size of the image is intrinsically. So it could be 3,000 pixels by 2,000 pixels, then making the rest of the page break. Because it's a foreground image. It's a foreground image. And OK, so speaking of foreground images and tricky, stretchy image scenarios, they can get even trickier when they're inside of a flex box or grid layout, where that replaced element concept and then the distributed space concepts, they start to compete. And they need additional styles so that they treat these images well. So here's a few different ways to get around that. One of them is you put align items on this container. This can be set on the container to replace the default value of stretch, and you can replace it with something like start or center. So that way it won't stretch the children. It will just use their intrinsic size. You can also, on the image itself, put align self, center or start. So that way, regardless of whatever the parent wants, this image can specify that itself should not stretch. You can also put flex shrink zero on something if it's flex container.  I'm unsqueasable. My value is zero. False is the value. Can I be squeezed or not? And the last one, this is what I did for a long time, was just add a wrapper around the image. And sometimes that's even the picture element or a figure element. So not only does these kind of semantically enhance them or give you an opportunity to, they also disassociate you from being a direct child of that container, which means those stretchy style attributes coming from that container don't apply to you directly. They're going to be on your parent because I'm talking to an image. But yeah, that parent will get that stretch and you'll still be your intrinsic size inside of there. So a couple of tips. Yes. That's a good one. And I like that you mentioned figure or picture element for more semantic enhancing of your media styles. So with figure, you could have additional context in there, multiple images, big captions to caption that image set or individual images. So really good tip there too, whenever you're building interfaces. So those are foreground images or content images, the images that apply on your page and are part of the content flow. But there's also this capability of creating background images in CSS. So background images are applied using the background image property in CSS and not through your HTML like the foreground images that we just talked about and all the different foreground image elements that you can use. And because of this, you should generally only use background images for decorative content since you can't add alt tags, you can't add fig captions, and you can't give them content, meaningful content the same way they can do for foreground images. Right, they work in the same way that they're gonna take up the space that you give them. So if you put them on the background of a card, they'll consume the size of the card. If you put them on the body, they'll be the size of the body, which also means you can run into the same issues as foreground images with object placement. So except with background images, they slot into their parent as a background. So they're not gonna consume or provide space for the page, but they can't get cut off and they can be squeezed. Yeah, they're not gonna make the rest of your content disappear and go off screen unexpectedly because they're taking up the full area because they're backgrounds and they're not going to actually take up that size on the page. But another difference between foreground and background images is while you use object fit in the foreground, you use background size for backgrounds. And they have the same values, there's contain and there's cover where contain will by default repeat your background image. Unlike foreground images, it'll be repeat by default. So you have to set background repeat to no repeat to not have your background image repeating if you just wanna have a single image there. If you do wanna repeat, you can repeat it in a single direction, so X or Y or both. Or setting background repeat to round will actually stretch your image, kind of like setting the height with 100% does with a foreground image to fill the space with background size contain. So for foreground images, you use object position for background, it's background position. So just like you can position things with object position, you can do the same thing with center or top left or positioning things with background position with a specific percentage or pixel value. So all in all, to get a contained image in the center for a background, you need three properties. The first is background size contain, containing that background to its parent that you're applying it in. The second is background repeat, no repeat. So you don't want that background to be repeating in this case to have that perfectly centered background image. And then background position center to actually finally position it within its parent. So a couple of things that we need to do to get that contained image as a background.  And then so what's the deal here? We have like object fit and then we have background fit. Background size. Oh, it's not background fit. It should have been background fit. They did the thing with position. There's just like background. I know. Object position, background position, object fit, background size. Well, background size was first. So they could have done object size. It was first. They could have done object size. I'm with you on that one. Wow, shame. I wonder if that's in the list of, you know, CSS saris. Errors. Or what was it? CSS mistakes. It's like list of CSS regrets. Yeah, mistakes. Sorry, this was fun too. We're sorry. CSS is sorry. OK, well, let's talk about images. Lobby for object size. We could do more repeat. Let's repeat the repeat to not repeat. All right, well, next we have SVG images and issues that might be happening with your SVGs, which I see these all times like a icon button. And you know someone use Flexbox on it because it'll be in a mobile view and all of a sudden the icon's all stretched and you're like, the developer didn't test mobile. Anyway, with SVG images, your image, it could be distorted. And it might be because of the view box. And it's most likely cut off because your image issues, it's been stretched or shrunk. And anyway, there's all sorts of things that could happen with your SVG. Yeah, so with SVG, the vector data might actually be there. But if it's positioned outside of the view box, you might not see it or at least a part of it. So it depends on how you built it, how you're placing it in your UI too. It happens a lot where I'm trying to get clever and customize an inline SVG or just customize my SVG. And I'm like, I'll just change this view box property or something. And so the view box shrinks. And I'm like, yeah, and then all the art is still outside of it. That can be really stinky. One solution, though, you have here, which is nice, is use overflow visible on the SVG. You're like, hi, keep showing those parts, though. Would you? That'd be nice. You can also just adjust the view box like I was saying, but do it in a better way. So instead of clipping content, you can fix it so that it's not clipping anything. And you can do that with some scaling. So the view box has some properties it can take. It has start x. So does the x-axis first, then it does the y-axis, and then you can specify height and widths. When you see those four values in the view box, it's x, y, width, and then height. Yeah, and that's also something to look out for when you are using SVG for a background image too. So you can use SVG in background images. You can inline them, and then you get the same concerns possibly for your SVG images. So be sure to check the size. If it's in Flexbox, then roll back a couple of minutes to the start of this podcast when you talk about image placing that way. And if it's getting cut off, then try some of the other solutions, adjusting the view box, or using overflow visible. So different types of images require different solutions. Yeah, careful for that double position where you've got the position from CSS and then position in the view box or something like that. And maybe that could be really tricky to debug. You're like, where is it? It's gone. Got to figure out which one's going to position it. All right, and then we have a section here called general image tips. I salute general image. General image.  It's a good show. It follows me everywhere I go. All right, so we'll start out with one thing you can do for either foreground or background images is to set an aspect ratio, to maintain a specific ratio on the element with that property called CSS aspect ratio. It's also great to reduce page reflow, like CLS, and improve your core vital scores because the image can hold its space on the initial layout and not wait later to find out what size it needs to be. And that aspect ratio helps that scenario. Yes. And another thing that you can do to, essentially for the same reason, is to explicitly set width and height with HTML of that image. So you could set width and height directly as an attribute. You can do this with the foreground images. For background images, you'll have to use aspect ratio on the element that you want to apply the background within if you want it to take up 100% of its size, to have it be the exact aspect ratio, take up that space. But for foreground images that you're loading in, you could have width and height set directly as attributes. I feel like at first it feels like I had anxiety around setting width and height on images because I was like, well, what if my CSS needs to resize them to something else? And so just so you all know, these height and width attributes on the image are pretty much the starting place and they're the weakest of all of them. And so your CSS can still come in and override it. You could have 3,000 pixels width and 1,000 pixels tall, which would be like a three by one image in its ratio so that the browser will see that those two height and widths determine an aspect ratio.  So it's always good to have these attributes on there for many, many reasons. But that is kind of like, I always thought that was confusing. I was like, if I put these in there, what happens to that? Anyway, so CSS will win, which is kind of nice. You can use source set and sizes attributes in conjunction with width and height attributes. And this has additional perfect advantages of allowing you to serve different sized images to different devices.  And you can get that with the source set and sizes attributes. So lots of tools there for you to create responsive images, the different image sizes, improve the performance of your images, make sure that those images look right. But DevTools also has some great image tools in Chrome which show you the rendered size, the rendered aspect ratio, which can help you determine the aspect ratio values that you want to use to display that media. It shows you the file size, the current source, and it can help you make decisions about image optimization and also sizing, aspect ratios, all those things. So definitely check out DevTools for images, what you do is essentially just hover over the image and you get all the information in a nice neat box overlay. Yeah, a little image tool tip, great tip there. And the tip here is be prepared to write block size or height depending on what you're writing. Auto, so specifying an auto value for these is nice on any images that you've given a responsive width to. So like half of the image stretching problems are from setting a width or height on an image and not complimenting it with the other side. And the other half are coming from layouts. So sometimes it's a layout stretching its width and if it doesn't have height auto, it's not gonna snap its height to kind of match its aspect ratio. So be prepared to write height auto or block size auto. Yeah, good call. And our last little image tip is to test on mobile layouts because often the issue is not actually large viewport sizes but image issues and layout issues because of images start to peek out in the constrained layout scenarios of smaller viewports. And this happens with icons, this happens with overflowed areas. Avatar images. Yes, avatars, even like hero images, it's more than likely on a mobile layout or a smaller viewport than a larger viewport. So be sure you're testing and be sure you're testing cross browser. SVG is a big one that has cross browser compatibility differences still. And I run into this with SVG more than any other image type in terms of browser compatibility. So be sure to do that. All right, well, thanks for joining us so that we could de-distort your image troubles. If you have any CSS questions, we would love to answer them on the show. You can tweet at us with the hashtag CSS podcast. I'm at Yuna on X. Oh man, that sounds really catchy. Actually, it's a super catchy mod. I'm also on X space site. It's still called tweeting. It's still, all right. We're still tweeting on this new place called whatever, and I'm Argyling there at Argyling.  It can help a lot of people, really. And if you like the show, please give us a review on whatever podcast after you're using or share this podcast with a friend, a mentee, another developer on your team. Those reviews help other people discover our show. And that means that we have more time to make shows and deliver better content for you. Yeah, all right, thanks y'all. Look forward to your questions.


Hi, my name is Shlomo Shapiro, and I'm working at Immobilien Scout 24, which is Germany's leading real estate listing portal So if you live in Germany, you probably already found a new home through our website. If not, come and check it out We have lots to offer but here I'm more to talk about DevOps and especially what happens if you already do DevOps for quite some time like we do and how to deal with the risks that Probably are now different than in the times before you were doing DevOps Let's start from a question who is doing DevOps here, okay Very interesting not everybody So I hope that this talk will help those who don't do DevOps to maybe get yet another argument for their bosses Why it would be interesting to check out how to do things the DevOps way Well, this is probably common wisdom if you take software from planning through Development testing and into production then of course errors happen and need to be fixed and The cost of fixing these errors of course changes Fixing an error here is much cheaper than actually fixing it there That's why it pays off to try to fix all errors early on in design and those of you who run old software old meaning older than 12 month probably already thought about a redesign or were upset about the initial design and Older company like ours a mobile scout is now more than 15 years old is running code That is partially also 15 years old So a lot of the design decisions which we made early on are not valid anymore So we suffer from that one of the learnings we have is that we try to fix errors as early and not as late as possible and DevOps doesn't make this easier because if you look at the Development cycle of software in software development. That's how it looks at least in our company you have a rather long time of planning and designing and user experience and wire frames and what else after that you have a shorter development time and after that you have test and in evil shorter production time this works quite well and I think that this Helps the developers actually to reduce design errors In operations, we also do software development and everybody who's doing operations is actually doing software development Even if you don't call it that The difference is that usually we have an idea over coffee and then we start hacking right and Then we put it in production and call it testing and then we run it and Then we're often afraid to touch it because we know that if you touch it is probably gonna break and I have a long history in operations. So I know what I'm talking about If you look at these two things in comparison The first thing I would notice is that actually operations seem to be more risky than development because in operations we spend less time on planning and designing and we spend less time on the cheap fixing area so to say and in production we much much faster go into production and then Fixing errors, especially fixing design errors is really costly Why does that matter? Well as a company you obviously don't earn money on broken stuff so if you look at Typical outages at least typical in our kind of business, which is running a website You can ask yourself. Okay. Who's guilty for those outages? Who did the initial error who should have done something different and We all know that the blame game doesn't help but in the end it helps to understand what to do different the next time you go there and If you look at these I'm not gonna go into detail I'm sure everybody can find themselves somewhere here Me too included I did almost all of them already. So I'm not ashamed to show them So what about DevOps? DevOps in the nutshell is respect and learning in my opinion and It goes both ways both sides developers and admins have to respect each other and have to learn from each other and The devs the developers can learn from ops a lot about Operability how to optimize software so that it's not only nice to develop but also nice to run it and If you look at software development cycles in some cases you develop it for let's say half a year and then you run it for 10 years So why not optimize a little bit better for how to run it for 10 years and not only for how to program it The admins of course also can learn a lot from the developers for example incremental improvement Start small do a minimum viable product and see how it develops improve it further on or Coding instead of hacking and let's not go into that Test driven is a big thing from development Which is already really established in development and in operations. We're slowly learning how to do test driven and Actually, this talk is also about how to do test driven in infrastructure development. A very nice thing is code quality Who is a developer and cares about code quality hands up? Okay Who is an admin and care cares about code quality? Okay, why the difference? Why is code quality in operations different from code quality in development? It's all about craftsmanship about Writing code to be read later right for reading not right for it works Don't do comments do readable code. All this stuff is code quality So that stuff which really works well in development and it works even better in operations Actually, I believe that the reason is that the stuff which we develop in Operations is more complex which the than the stuff being developed in development Because we instrument systems and landscapes of systems and very complex things that need to play together and That are often very difficult to test in a sandbox That's why I think that the challenge of development in infrastructure is actually at least As high as the challenge of development in pure software development and my favorite of course test automation and Yes, test automation is the only way how to solve this problem Because this is a big truth untested means broken And another big truth is No tests means legacy Because if there are no tests, you don't know how to touch this code You have to be afraid of touching this code and the only way how to fight this fear is by having tests and test automation and In our world, this is true untested means broken and there's a very nice example for which I can tell you we recently did a complete rewrite of our System authentication layer like how the Linux systems authenticate users when they log in and of course we did that test driven and Of course, we forgot one use case and when the original servers LDAP were switched off and Only the new servers active directory state available, of course nothing worked anymore Because we forgot about this little use case which was necessary there And we looked into the code and said well, where's the test? There's no test. So obviously it won't work Right, it's simple. It's something a developer would always do but in operations. We also do that no test no work So then we wrote a test we fixed the code and it worked again. The problem was of course that our Pam patching code didn't expect that the Pam LDAP module was missing Which from a which just happens if you set up a server without Pam LDAP and then our hook for patching The file was missing. So no patching happens. So no login was possible Actually simple but again no test no work. So what is this thing about tests? there are a lot of books about tests and what you can do with tests and how to write tests and I Think for us guys in operations The simple version is enough the simple version is that there are two types of tests number one is unit tests and a unit test tests the smallest possible component in an artificial environment So try to think how to cut down everything that is not needed to test a single feature a single aspect a single function in Development this is much more complex and you do unit testing on all kind of levels But in operations that is okay try to think how to cut it down how to strip it down And if stripping down means setting up a server and running something that can be a unit test In development you say unit test doesn't have any external dependencies on so on but in operations You have to see what fits the problem The other test you need is the opposite. It's the system test The system test has the job of testing the entire application in a realistic environment and Also testing it with other applications together because you need to test the Corporation the inter operation between different applications before you roll a change into production That's all you need to get into test-driven development in infrastructure So a little overview typical things for unit tests are they built a part of the build process early on and They have quick feedback cycles a Unit test should give you an answer with mere seconds So you can run it after every save of a file after after every code change a single line changed You run the test it tells you yes or no. That's a unit test Also very important syntax checks Sounds stupid sounds silly, but hey How many failures that you have due to a missing semicolon or other stuff happens to everyone so easy to fix by the test and The other side system tests usually start from installing something on a test server because you want to test your code in a realistic environment, so you have to install it on a realistic test server that behaves like the real thing and Very important you run tests from outside Because usually use servers from outside you use their services.  Of course remove the network from inside and rsh is a very useful tool for that Because in that scenario you don't need the super duper security.  It doesn't cost much. You do it from inside sudo reboot You wait a moment you run the standard test from outside and you know if it's good And if it doesn't work, then you know you have to fix it and That actually will save you once getting up at night or Save you buying your admin colleagues a crate of beer Few examples from the real world those who know us they already heard that we use RPMs for everything Software configuration doesn't matter what everything that goes on our servers has to be packaged in an RPM package and RPM packages have spec files as their master plan. This is a typical spec file Tests like some preparation installation installing into some fake chain shoot environment and Some files that are then shipped as part of the package And the most simple thing you can do as a unit test is a syntax check as part of the build phase of your package Or whatever other tool you use to ship stuff to servers And if you use sudo and you ship sudoers, please syntax check them like that Because if you don't you'll cut off the tree you're sitting on Because if you have a syntax error in the sudoers file, sudo will refuse cooperation Even if the rule you would be using is in a different file the complete sudo stops to work Another typical example you can find in hundreds of packages in our source repository is this Syntax check bash syntax check python syntax check yaml very important if you have configuration tested before deployment because configuration is also code and Configuration can break your server just the same like code can break your server So the more you test configuration at least for obvious errors like configure like syntax errors The more robust your world will be and the more resilient your deployments will be Because that means if it doesn't work it won't build and if it won't build it can't harm my system There are lots of more examples if you look on my home page. You'll see another talk about this topic which has a few more The more interesting part of course are system tests Like in this example a system test tests the entire system in a realistic environment Same when you have a car checked every two years They don't take off the wheels to check them They check the wheels on the car as it runs on the street and they put a fake street under it So that it's easier to handle the then stationary car That's the important thing about system tests The important thing is how to mock away the things that are irrelevant for the test and This is a perfect example for mocking Right the car feels like driving on the street It behaves like driving on the street, but it's actually stationary in the garage where the test is being run on these wheels So everything is real and Everything that's irrelevant for the test is mocked away with these little two wheels here and That allows this test to run anywhere anytime under Stable conditions and actually we have trailers with the setup driving around the countryside So that people can check their brakes and the same about unit tests about system tests in IT You want the system test to be exactly so that your code runs as expected Without depending too much on external environments, which you cannot provide together with the test a little bit about build automation Of course, nobody runs these tests manually because then you would be busy testing instead of coding So in our world the build automation looks like that. We have a source repository like everybody else We have a central build automation tool in our case team city. Many people use Jenkins, but there are others Even a sophisticated bash script could be enough for that purpose If a change happens it gets checked out on a build server which runs unit tests creates an RPM package and Uploads it into a dev yum repository So far so easy The next step is deploying that package onto a test server and running system tests Now this takes maybe 20 seconds this can take several minutes But if the unit tests fail, I don't need to run the system test because it's irrelevant That's the thing about quick feedback slower feedback small test big test If the test was successful The same RPM package is moved to a production yum repository and from there It's deployed by the same build automation to our production servers and That way we basically instrument our entire platform and any change goes this way From source code to production and that's actually how DevOps works because DevOps in our case means devs and ops can provide commits into these source repositories and it doesn't matter if the source code is Turned into our Whatever billing application or into our OS provisioning Everybody can Contribute to both of them If they're there if they know if they ask their colleagues for a code review and so on but they can And that's the big change in DevOps. They can if they want to just go do it and We have test automation. So if you break it, it won't build don't be afraid just try it out And that's the important thing to learn here It's not enough to allow people to Change code you have to help people to overcome their fears to overcome their kind of natural resistance To work in fields where they're not really proficient Because many improvements are small improvement. Oh, I don't like that Provisioning takes five minutes, but look I see there a simple solution to fix it. Okay one minute saved But maybe nobody in production had time for that. Maybe the developer who was Testing the provisioning including the setup of a software if it runs in this initial kind of border case condition He was sitting then waiting for machines to boot and install and boot install and got annoyed. So he fixed it a Few more examples from the system testing world and yes, they are ops related Who uses persistent storage Okay, everybody else what do you do? I mean you have to store stuff somewhere So in our world each virtual machine has one or two hard disks One hard disk is the system disk and we always wipe it and format it and install it from fresh And if you store stuff on the system disk, you know that it will be gone eventually If you need persistent storage in a virtual machine, you have to add a persistent storage disk For those who use AWS EBS is the key word here But the idea is the same you have a system and you have a persistent storage Now, how does the persistence storage get configured into the system where to mount it were to format it and so on in our case we wrote a service for that design mount service, which Uses certain Algorithms to determine what to do like oh, I have one extra disk or it has a file system label persist something. Let's mount that Actually not difficult about 200 lines of bash But if that service fails then in all our platform the persistence storage will be gone So, how do we protect ourselves against this risk? We write a test in this case we write a test that runs through all possible permutations of actions that this service could do including error scenarios and We use mocking So that we don't have to connect real storage, but we use a low setup to provide an image file as a persistent disk And this is very convenient because I can also simulate different scenarios I can add two or three disks and see what happens and so on and I test of course service start-stop that the service mounts and unmounts my persistent storage as required and now I have a Delivery chain with a source code sign mount service and as part of that a virtual machine gets provisioned and set up with a Little bit of fake storage and all the tests run and now I can tell everybody you don't like the persistence storage handling fix it And they can fix it and I can be sure that if the test run it will work in production the important thing is always what to mock away and what not and Linux provides you such a huge basket with little tools and tricks how to mock stuff you can use routing or Firewalling to fake network problems It might actually you should be doing both because if you set a route to deaf now it behaves different than if you drop packages and You might test your software against those two scenarios Another example who's using a proxy for their servers to access the internet Okay, who's allowing direct connection from web servers to the internet? Okay impressive Because we don't trust our web servers web servers can be hacked and hacked web servers can download additional stuff So we use a web proxy squid in this case as an application layer of firewall for outgoing HTTP traffic Again, if a configuration change in the proxy service Would go wrong then all our platform would not be able to talk with the internet and Then a lot of additional value services on our platform would stop to work So we wanted to cover the entire proxy configuration with tests Not the proxy code the proxy code is quit and it's from upstream and we never touch it But for us the configuration of the proxy service is also code that can break the platform And we wanted to cover that with tests and the way how we do that is We run each configuration change through a big set of system tests For that we set up a test squid server Load the configuration there and then for each function group, which is in our world kind of a role We do at least one test to make sure that the most important HTTP call for that function group goes through this configuration set and we use for example x forwarded for headers to spoof the source address So that on our build server We can set let's this request comes from function group 5 and The rule set will think it's function group 5 and then we check for access denied messages Because of course the test server doesn't have internet access. You don't want your test calls To go against the production servers of your partners That might make them upset and that might cost your money if it's a billable service So obviously the test server doesn't have any internet access Which leads to a very funny result if I have a request and this is the Server that should be allowed to do the request to an external URL In the good case I get a bad gateway error because the squid on the test server allowed the request But it can't go to the internet If the rule is wrong or if I have an error there Then I get a forbidden from the rule set in the squid and error access denied and this in the test case Would mean test failed So this is completely upside down like bad gateway is good forbidden is bad But the test was successful and this is again about mocking you need to know what you mock and then when you know What to mock you know how to write the test that reacts to the right triggers from your mocking environment last example VM provisioning we also have service in our data center which we need to provision and Every morning we have a Test set up running for 15 minutes and setting up various virtual machines Some of them broken some of them good and we check that the broken ones are not allowed to work And the good ones are allowed to work and that on the good ones actually the automatic and automated environment will set up a working Linux operating system All that happens every night so that we know okay We can still provision new systems and that's a very huge system test, but it's also very valuable Because they're about I don't know 20 software packages that go into this automated provisioning setup Which we have for virtual machines and for hardware This is actually open source and you can go there and find all the code for the system test and so on if you do that for your platform and You get different release cycles for different software packages and each release software package goes its own way from development production and In the end they all meet somewhere in production and you know that they work together because of your tests We call it continuous life deployment. That's our way how to maintain Stably maintain always changing platform and The general rule is we deploy applications when they're ready and we automate the delivery chains from source to production The end result is low risk lots of fun And that's the whole thing about DevOps risk mitigation. You have all the fun from DevOps from doing stuff together But you have a low risk and you're not afraid to do stuff together You'll find the slides here plus a few more links and other talks about this topic I'm at the end of my talk needless to say we're hiring So if you have a passion for automation and for keeping things simple, please talk to the people who have our logo on the back Thank you very much and we have 50 minutes for questions So any questions from anyone? So first thanks for a really interesting talk And one of your examples actually the last one testing the proxy You kind of showed how you would use our conditions because you don't want to rely on external services And I wonder if you could compare this to to actually mocking it by like recording and replaying Responses or stuff like this. Why did you not choose it or what your opinions on this? Okay, it's a good question and I Think that's exactly a question about dev or ops So as a dev person I would think how can I mock away the internet? As an ops person I say I don't need to mock the internet. I just need to deal with it and This code has been written by an ops development team And so the solution is let's take a server Let's let it do what it usually does because setting up a server with a proxy and the configuration It's just standard. You say a new server type proxy go go go done So there's nothing needed to do for that The only thing that we had to do for the mocking Actually was to set up the test server in our dev environment, which in general doesn't have internet access So in this case, I would say the answer is it was the easiest thing to do Like the cheapest in terms of effort and in terms of changing the system The only other change which we did to the proxy configuration was To allow the build servers that run the tests to use the x forwarded for header to simulate the actual originating IP That's the only real change to the configuration which we did we use load balances internally So normally only the load balances are allowed to use x forwarded for and nobody else and For the system test to work, of course the build agent that runs the script that runs through all that Needs also to be allowed to use x forwarded for but that's all except everything else is the original production configuration and Maybe I didn't say that in this case the entire proxy configuration Resides in a software RPM package So we have a source repository and there we have all the proxy configuration and the test cases and Each time somebody needs to change the proxy configuration. We just do a new release of the proxy configuration RPM And that RPM goes first on the test server it runs for all the tests and Then the same RPM is installed on the production proxy servers, and then we know for sure that that set of configuration works and The end result is that now developers add proxy configuration to their function groups if your developer and you set up a new software Then you go into this software package that contains the proxy configuration and add your own proxy configuration for the calls you need to make Plus one few test cases and you're done. You just wait ten minutes, and then it's life in production and that's how we play DevOps and that's how we bring Dev and ops together in improving our platform and Reducing turnover cycles development cycles and so on So you had this chart about automation and automation automation is great because we are all lazy, right?  So what's your? Your politics there everything goes live as soon as I committed and it passes the tests or yes Anything else? Well depends on the team and on the software product More and more teams put more trust in their tests than in the ability of the product manager to push the release button but the ideal situation is you trust your tests because the tests are documented knowledge about your platform and The manager putting pushing the release button is just believe I believe this will be good push Yes So in the setup that you've described here, how would you typically deal with? replicating say your production database onto the test server would you fully replicate it or try to do something partial because one of the things that we find Most dangerous when we're deploying is things like schema changes that are very difficult to test against fully well in our world everything has to be a package and Everything that acts has to be a service Like any acting part in our platform has to be a service that can be started stopped and that has a status so database changes also have to be a service and We have services that do database changes as needed when they detect a new database schema And that also happens for example here because together with that package comes a new database schema the Services here say oh your database schema. Let's update the database and The task of reducing data from production to test Belongs to the developer who's creating the data or whose software is creating the data and for each software one of the tasks on the checklist for Production ready is did you write something that will create a test database from production and Then the reduction of the data anonymization removal of personal information of people information It's all their problem because they created the database And that's the only way how you can scale to hundreds of roles or function groups otherwise you have a team which just runs behind the others and Always needs to adapt their changes into the Conversion process. I wouldn't want to work in that team So you described how you cover your ops code with tests Do you also do it in test driven way like in a narrow sense writing test first doing baby steps Refactoring doesn't make sense in this scenario. Yes, we do that. We have a lot of Python code in operations what I mentioned initially the example I mentioned about the Authentication code It's managed by a Python script that does all the patching on the Linux configuration file level and that has full test coverage with Python unit tests and Yes, we write in this case. We first wrote the test and then the code that does the patches and That's why in the end The feature for which we didn't write a test also didn't have the code Yes test first It doesn't mean that it's easy test first by the way Especially in operations where sometimes testing means setting up a lot of stuff, but yes, we do that You describe a Boolean automation workflow that actually tests lots of RPMs Well, what about when you are testing things like a configuration management puppet chef All that kind of systems. How do you have those kind of changes also included in your workflow? Well, as I said, all configuration is in packages. We don't have puppet. We don't you don't use that We don't need puppet because puppet solves problems, which we don't have Okay, fine. Fair enough. So sorry But if you would go to a puppet conference you would find out that Making puppet recipes testable is a really big problem And the reason it's a big problem is that puppet combines code and configuration in a very nasty way Well, I mean, okay, it's fine leaving puppet outside if you would try to do testing some kinds of things like Duplications or Stuff like that you need to set up, but I really really complex and networking setup And that's go way beyond just getting VM It's less it's like getting two or three VMs that you have to cut networking with between them and Try to check stuff like that. It's not so easy like just running a Actually, it's Here I mentioned one package, but our automation can easily handle an arbitrary number of packages which I involved in this change because the system tests running here Trigger the propagation of the packages and we of course have a hook that Actually propagates the packages that were installed on the test server. So in the test in the job here I say five packages are relevant for this Feature and then it will propagate all these five RPMs if they're here and installed on the test server to the production Repository which is fine for deployment whatever what happens when you have to just like my SQL It's not responding and your slave is a way beyond whatever it should be How do you test that your the rest of your system is coping with that? Well, we Just I'm just looking for what's the framework you use to automate that kind of tasks We use the framework called keep it simple Keep it simple means that the average developer doesn't take too long to write his first piece of useful code in many cases that means we have some part on the build server which runs the job that will RSH into the test server and Do some nasty manipulation before running a test? And we use RSH because in RSH you can just say well this IP range is allowed And you don't need to bother about faking away SSH keys So basically you have to write the logic into the spec files the logic which is mostly included in puppet No these spec files provide a Simplified way of doing the same thing we separate configuration files depending on how they change and That's why we get away with a lot less patching than you usually do in a puppet world Puppet is good at patching stuff, but we lay out configuration so that it doesn't need to be patched That's why I said puppet solves a problem, which we don't have All right I just wanted to add that the puppet situation about testing and testable code is much better than it used to be there is beaker And there are some other tools to deal with that. I know the community has been active because there was a big problem But but the end I think what I'm saying is that you need unit tests and system tests regardless of the tooling you use And even if you use puppet chef, whatever tooling you still need unit tests and system tests And the unit test will still test something small and the system test will test something big The question is always how do you express it? How do you abstract it and so on and how do you make sure that the stuff you test it goes unchanged into production? In our case, it's simple because the rpm is created once and we never Create rpms again after successful test That's evil. You deploy in production that what you tested and not something else And if you have a world where you test something and then you create something else to deploy in production You'll always have this little gap that can go wrong and you'll for sure find a smart hacker who will be happy to use that gap for his own purposes Okay, I have to ask for a detail because it just sounds too great what you are saying We were discussing the migrations and the continuous deployment Do you manage to do migrations without service interruptions because when we do migrations we have to At least partially shut down services and we can't do that just because somebody said push to the repository Well, there are several layers on which this question needs to be answered The first layer is can your application handle The situation where the old and the new version runs alongside Because if the application can't handle that then the deployment won't help So first make your application so that version 5 and version 6 can work together on the same database Make it so that the database upgrade From version 5 to 6 will not harm the version 5 code using that same database That's the first step on the application level Then you can go to the operations level and say okay I have 20 web servers and I want to have a rolling upgrade going through these web servers So that there's no external impact and yes, we're doing that in our world It's very simple any server is allowed to install the young pet the rpm packages presented to it through the various yum repositories attached and We have a tooling called yet shell Which does the rolling upgrade including load balancer on off monitoring on off Services down packages upgrade services up Monitoring on load balancer on checking next server. Yes, we do that. We do it actually in an automated fashion team city in our case does trigger this kind of waves and If there's any problem the wave just stops and we go and check what happened I think we've got time for just one more question Hi, so a lot of teams when they're deploying to a large set of servers and Do the so-called canarying so first you deploy to a server handling 1% of traffic or one tenth of percent of traffic Let it work with this small person of traffic for a while See if there are memory leaks, etc. Then to 1% 10% and finally Fulfill it do you do such a thing? We do that in a few cases in most cases. We don't Do it so far. We are on the process of getting there Our yet tooling can for example do exponential deployments It can like deploy one then can deploy five and then can deploy the remaining and if we But the thing is here Yum repositories represent the target state in our world So this time of deployment. It's kind of a fuzzy gray zone and in our world It's always okay to deploy the latest updates. It's never wrong never nobody can be punished for doing yum upgrade so how do you because if I understand correctly your Comet to deploy cycle is around minutes. Maybe our right So how do you deal with bugs that show up after like few hours of work or few millions of requests? Like I'm leaking four bytes of memory per request Well as a developer, it's your responsibility to think about the potential danger of your change and If you have stuff that could go wrong in that way Then you need to deal with it already on the development side and not expect the deployment to solve your problems and If you want to have a longer lasting state of different versions, then in our world you create yum repositories for that you create for example our big core application Creates a new yum repository for each build and in that yum repository are a few hundred rpm packages with a few gigabytes of stuff and In that case, we can always take a few servers Hook them up to the yum repository of the next version Upgrade them all and wait a little bit And even if you would reinstall one of the cannery servers, it will automatically get the N plus one version. It's supposed to be running and We do a lot of state management Like you mentioned in with the help of yum repositories for just creating special yum repositories and putting packages there Okay, I think that's time. So thank you very much


Good morning it's 7 a.m. here in Jerusalem and I'm getting ready for today's event which is we the Shem Shon Eats Jerusalem team are recording episode three of Shem Shon Lashinsky's new YouTube series available exclusively here on YouTube in a dramatic twist to events Jerusalem's most enigmatic viral food celebrity Shem Shon Lashinsky last night posted on secret Jerusalem essentially inviting the entire city or at least a Facebook group of almost a hundred thousand people to attend so that's added a logistical complication so we've thrown together a quick promotion there is an event up on event bright we're not entirely sure that this is legal but you know a Shem Shon so we can pull this off and we're going to be meeting our attendees in a few hours and I'm going to be meeting today another Jerusalem guy interested in cameras who the SEJ production team is mushrooming today to four people and super excited we're hopefully going to have a lot of fun on the way and now I'm going to taxi to meet Shinshiki 25 minutes till one o'clock hopefully we have our people gathering for we can call it a tour it's a joint expedition through Binyon Klal the Shem Shon Eats Jerusalem crew is going from one namely me to two potentially some photographers too so exciting times okay we are here recording we're in Binyon Klal with the whole crew here we're in our crew of three for Shem Shon Eats Jerusalem our YouTube series we've got a second videographer I mean a big guy's a camera but whatever and we've got a still photographer Shem Shon has put together an amazing and prompty tour with about 40 people coming at 10 hours notice to check out Binyon Klal which he's very very ably guiding a tour of I always talk about my camera gear and what I'm bringing at the moment what I have here with me today is the Canon Vixia HF-R800 I have a Saramana camera plus as one microphone and I'm using the zoom H1N for second capture so it's been fun to be on the tour and uh sign up for more video this is Dana or Shem Shon Eats Jerusalem still photographer how do you feel how do you feel being part of the crew this is fun I just have to go to my other job but this is awesome I love it Marcus do you want to say anything about working on the crew Shem Shon Eats Jerusalem oh this is just an absolute blast never adult it's nine o'clock now local time I've been editing this video for a few hours at this point slightly more complicated than my usual editing process because I had the footage of another camera person so that's my b-roll folder somewhere here I had us in Caden live which is kind of the main video editing tool in Ubuntu Linux which is what I use for my computing needs and this video is somewhat complicated we've got the background music and we've got the two cameras and in some places we're using audio that was picked up with a voice recorder as well this is my preview window and a few effects and that's pretty much it taking all the footage and trying to make it into something interesting for people to watch okay it's about 9 30 now and I've just finished exporting the first edit of this video and according to YouTube there is 33 minutes left until this uploads I have a like four megabit per second internet connection which is painfully slow and you're working in videos of any size I've done a few different versions of this already I canceled two uploads I'm trying to get the audio normalization right that's what the minus 23 LUFS means and hopefully this will sound okay when it goes up to YouTube


Welcome back to the breakfast here on PLOS TV Africa. It's now time for Off The Press, where we have, of course, our review of the major stories making headlines across the country this morning. We will be speaking with our analyst, Mr. Ambrose Buke, who's joining us of our Zoom. Good morning. Thanks for joining us, sir. Good morning. Thanks for having me today. Let's kick off with stories from the Daily Independent this morning. It should be on your screen in just a few seconds. As you have it, it says here, Nigeria heading for bankruptcy, PDP governors raise the alarm, reject federal government's reason for Twitter ban. Also 2023, no vacancy in Lagos government house, APC leaders tell Badabia Mila, Hamzat and others. Customers dump POS, return to banks, ATM and other channels. La Long charges community and surveillance as government killed 12 in Joss. South-South leaders berate Buhari over a dot-in-circle remark against Southeast. End terrorism in Yoruba land, pan-Yoruba groups tell federal government. And also how my successor will emerge, that's from the kind of state governor, Ganduji. Wale Shoynka, beg your pardon, says that Buhari should start talking like a leader. And of course, moving to the South, it says here, open grazing is buried in southern Nigeria, that's from Clark. Condemns federal government's northern elders silence over Jihadists automate them to Delta. Robo-youth leaders vow to enforce open grazing ban, give her as 48 hours to quit Delta. And also a lead diversion of 61.1 billion naira, Senate probes, NSITF. Those are the stories on the daily independent. And moving on now to the next newspaper, we're looking at the punch. The headline reads, Buhari regime borrows $2.02 billion from China. $719.61 million used to service Chinese loans since inception in 2015. BDP governor's Lampoon-Buhari over huge debt profile, CBN's operations. Terminal operators to join planned Aparaport reconstruction, that's according to the federal government. Naira tumbles by 51.95% despite CBN defense measures. 12 states battle IDP crisis, communities, firms, deserted. Bandits going round design for our farms to prevent planting. And 113 towns deserted. Also 1 million displaced in Benway, 8th local governments face humanitarian crisis in camps. NSITF chiefs appear in Senate today, over alleged 61 billion naira diversion.  Also on the punch newspaper, two more suspects arrested over Oshun female teenager killed by a ritualist. Pandef and Men says will respond appropriately to a full attack on Delta. How monarchs, elites, aides, herdsmen, atrocities, Iqiti farmers. Outrage as federal government demolishes 12 Lagos churches on alleged illegal plots. Okoji attacks Buhari regime, says Anaki looms in Nigeria. And lastly on the punch newspaper, Umahi defends Buhari's appointments, says South is governor's youth meet on Sunday. The Nigerian Tribune comes up next. Food prizes soar, push more Nigerians into poverty. Democracy Day Buhari's speech exposed him as one not serving Nigeria's interests. Ok, I think we're going to skip the Tribune. Let's move over to the Daily Sun instead. Of course, once again talking about Professor Waleh showing how the Daily Sun is showing how wands of lumen break up recommends decentralization as remedy kicks against open grazing. One killed, six abducted as headsmen attack integral community. Headsmen kill 13, injure others in platoon, acquire them. PDP governors raise alarm over federal government's rise in debt. And a boy has no land to give headers for ranching, says Governor Umahi. Democracy Day, nothing to celebrate, says Norton Khan. Men, SMDLF and Clark promise full Anijihadists fire for fire, vow to protect zone from attack by killer headsmen. And also, second, the Syracuse Udom Others Dom Calabar issue Ayadeh quit notice. Those are the stories on the Daily Sun. And lastly, I'd like to capture the headlines on the Guardian newspaper. Nigeria on suicide slide may not see another June 12 showing cow wands. Urges presidents to stop excluding false, exuding false confidence, listen to citizens restructure the country. Many governors decry FG's excessive borrowing, NNPC's opera operations, once Twitter banned reviewed in nation's interest. Also on the Guardian, inflation devaluation pushed millennials away from 20 trillion Naira stock market. Panyurba Group's Sikh end to terrorism supports self-determination. Senate's probes NSICF were alleged 61.1 billion Naira diversion. COVID-19 shot in Africa's blood banks by 17%. 17 people killed in fresh plateau attack. Outrage as 600 NNPC applicants lament exclusion two years after exercise. I think those are the stories we're looking at this morning. A warm welcome again to you. Let me say it will create public affairs analyst. Yeah, thank you very much. It will be, please. Yes, it will be. On the different newspapers have seen this morning, there's a warning here by Srinagar saying that Nigeria may not see another June 12th and that the country is on a suicide slide. Do you agree with this perspective? Yeah, to deliver the Nobel laureates, we have had this kind of warnings too many times, and at the end of the day, it doesn't come to fruition. I remember that in 2014 when Nigeria's amalgamation was 100 years old, we are being told between 2012 and 2013 that the contract for amalgamation of Nigeria was 100 years and that by January 1st, 2014, it could be 100 years and that Nigeria would cease and each nationality can go their way. We are still here, almost seven years later. So what is happening now is that, I would add that to the line of Bishop Hassan Fuka in his book, one of his books, he said that the unity of Nigeria is like a Catholic marriage. It may not be happy, but it doesn't break up. That is what we have been experiencing over the years. It's just a policy shift of the government. One policy shift of the government is to make things come back to normal. If we go the right path, for example, the latest incident that is hitting the polity hard is the headers killer activities, burning farmland, destroying crops, looting, raping women, killing belief, sucking the hope that ladies are modern people. If that policy, and that is because they are being allowed to do it freely, if they are confronted and decimated by the military, then Nigeria will go back to peace and prosperity. So just one policy shift that will make Nigeria better. But Nigerians have a way of coming back and bouncing back after all the crisis. Imagine 1993, between 1993 and 1994, it was a very big crisis in Nigeria. The universities were shut down. Nadeco was there. June 12 crisis, everything. I remember that the universities missed one year. It was a very rough period. Yes, we came out of that. So I'm not enthusiastic about that comment. We have said so many times before and nothing happened. Alright. I was supposed to get your thoughts on the southern leaders. And of course, Edwin Clark, mostly in the papers this morning, saying that the president's call for grazing roots would not be accepted by southern Nigeria. And the ban on open grazing stands has also been some groups in the Niger Delta making similar stands. So let's get your views on the president still pushing for grazing roots across the country and the reaction from southern leaders. I think Nigeria has gone beyond that. I mean a law of 1964, a gazette of 1964 cannot apply anything to one. It's not possible. Even some I've argued that the land use act that was enacted in 1976 or 1978 has also in a way advocated that gazette and that other acts of parliament over the years, I mean we had the 1979 Democratic rule. We have the 1991 to 1993 experiment. Then we, since 1999 to now, we have had acts and other things. So that it doesn't apply anymore in the modern realities of Nigeria. People are going to ranch now. So it is very clear that it's not going to work. Whose land are you going to take for grazing roots? When they were talking about grazing roots, both Nigeria's population were just restricted and the access was just there. I mean, this was almost, we are talking about more than 60 years ago. So it doesn't apply in modern era. The modern era of capillary is ranching. So that Jikaemon gained from the ancillary and offshoot services that come with ranching. For example, the dairy part of it, the mix processing part of it. And the way you have ranching, you can properly plan along the value chain and the offshoots of capillary. The manure that you get from the mix processing, the packaging, the standardization. You are talking about the dairy aspects and all the things that come from dairy. So we have to look forward to ranching as a very serious business. Ranching is not cultural. It is a business. So we should stop painting it as if it is a culture of a particular group of people. Anybody can go into cultural land. So it's pure business. And in 2021, it's not a time to reactivate grazing roots. But why do you think the president is still pushing for grazing roots? Even, of course, seeing the crisis this is causing across the country. What I think is that there are some people around the president who are not being fair to the president, who are giving him ill advice and who don't mean well for the president and the country. Because from the statements that emanate from his lieutenants, you'll find out that that is their mindset. And these are the kind of things that feed the president with. So we have to look critically also at those who are, for example, the attorney general. I mean, for him to be comparing, look at the comparison, indeed, with the spare parts sellers the other time. And so these are the kind of political advice the president gets. And it is unfortunate that the people around him are not doing him any good. Okay, I want us to turn to the punch newspaper now to see a review that he put of the past six years to say, Buhari regime borrows $2.02 billion from China. And when we compare this to the Zambian experience where, you know, the international airports of the country, their broadcasting cooperation, their power cooperation as well, you know, had to be used to settle debts to China. How can we use that to make comments about Nigeria's status, you know, and how it borrows huge sums in the billions of dollars from China? Well, first of all, there are two issues raised here. One is borrowing and the other one is borrowing from China. Now we have been borrowing over the years. We have been borrowing from the Paris Club. We have been borrowing from different IMF, different award bank and different agencies. And now as particular conditions. Now, China is pushing to take over Africa in terms of investment, in terms of loans. From my little research, I found out that China offers very little interest in its loan, very, very little interest. And so that is why a lot of people are going for it. Now, what are the terms? The terms in Zambia may not be the same terms in Nigeria. I have not seen the Nigerian terms of the loans. But if Zambia is taking its national assets for the loan as collateral, that is Zambia's own issue. But for Nigeria, I have not heard that we speak to a national asset to debt the loan. For example, the... Mr Eroke, are you still there? Okay, we hope we get back to him soon because I think that's even the major challenge here. The agreements between Nigeria and China to borrow, it's not in public domain. So because we don't even know what the agreement stipulated, it's even hard for us to begin to say what exactly is at stake. Are we putting our national assets at stake like was done in Zambia? So these issues really need to be dissected to find out what Nigeria stands to lose all gain from borrowing so much from China as a stand. Mr Ambrose Eroke, are you still there? I will say that on the other parts, on the loan parts, on the loan part itself, that I remember the presentation of a passenger, which is called Jewala, wiped out our debts from the Paris Club and a lot of agencies and were on clean slate. Over the years, we went back to borrowing. And now the debt that was hanging on us is so fast that I think we are in serious economic trouble. Remember that the governor of those states, Governor Vasekeli, told us last time that we have started printing money. And that is to show you that that is why the inflation is so, it's very big. Then the agricultural revolution that we are thinking that will help us as a point is being threatened by insecurity. People cannot longer go to their farms and a lot is happening. So how do we pay back this loan? Is there any caveat that you say we cannot pay that we start mortgaging our national assets? So it is time for, I think, the media, the journalists and the rest to start doing investigative reporting to find out what are the terms, what are the conditions, what are the things. Investigative journalism is almost very Nigeria. It's a sad commentary on what the media has become in the first last few years, they have become just events, reportage going on everywhere, press releases and all those kind of things. What has happened to scoop? What has happened to all those kind of things? So the public should not be grappling for information. I mean, there should be exclusive investigative reporting. And that is what the press holds in Nigeria society. And unless we do that, we'll continue to be in the dark because we don't know what is happening. So all these things we group, we ask for, these things can be found out. So I challenge the press, which is our own forte, to do more. Especially the people in journalism, to do more than what we are currently doing. Because right now, the press itself, I would rather say it's not performing to standard in trying to unravel all this kind of mysteries that declared our economy and all that aspects of our national life. Yes, Mr Ebuke, we can definitely do better. And still talking about insecurity all across the papers. We're seeing a Headsman Q13 in Plateau in Aqai Bomb. And we're seeing here in the Ponchi newspaper, 12 states battle IDP crisis about towns that are also deserted, local governments deserted. You turn to the Guardian newspaper, still stories about insecurity on the daily independence as well. Gondmen Q12 in Joss. Really, what's your commentary regarding the state of our security and how it seems like routine now to see stories about deaths and killings in every part of the country? Just a couple of years ago, we read stories about what happened in Afghanistan. We read stories about what happened to Yemen. Stories about what happened to Syria and sometimes in Pakistan and Palestine. We never thought that Nigeria would suffer from this. And now it has become a daily occurrence for us.  Even the President is tired of wishing statements. If I wanted to talk about the issue statement, those days of Jonathan, the issue statement given the current presidency issue statement. Now, we don't even hear statements anymore. So that becomes a part of our lives. It's just like somebody saying the issue statement when you eat. So this is where we have actually died. I mean, we have descended. We are killing of our fellow citizens, killing of our people have become a normal thing. That is the sad reality of our current existence in Nigeria. Alright, finally. I think you could just quickly speak on the story on the Daily Independent. It says South-South leaders berate Buhari over dots in circle remark against the Southeast. Do you think that might also be taken out of context or their rights to say what they are saying? Well, sometimes when I see reactions between groups and the presidency and the rest, I start wondering what has happened to back-end channels in diplomacy and the governmental relations. Is that missing? Are the people in the presidency restricting or obstructing people from having access to the president? What is really happening? Because some of the things you see in the newspaper are some of the things that you could group as, you know, elite groups like that or statesmen like that could actually go up to the president or have a chat with the president and say, look at this, look at this, sit behind closed doors, come out with policies and then, you know, implement. If that is not happening, then there's a problem between the communication between the presidency and the citizens. And when citizens resort to this kind of rhetoric, then that means there is a problem. Therefore, the handlers of the presidency should be able to open up communication channels between, you know, civil groups like this, between cultural groups like this, between religious organizations or between every stakeholder that has something to say to be able to have access at least to communicate with the president and discuss issues. Because some of these issues are not issues that I would support within the newspaper. A lot of also conflicts and crises happen in other countries. But there's the way that, you know, they're both behind the channel. There are lobby groups, there are pressure groups that are discussed and there are representatives of groups that we go and, you know, have discussions behind closed doors and they're sorted out. So as a public relations consultant myself, I find it very, very worrisome that little things that could have been discussed behind closed doors and they've ironed out between the presidency and the citizens are left to be bandied around the newspapers and being given press conferences, left, right and center. So if it is the handlers of the presidency that are actually blocking people from having access to the president, they are not doing the president any good. They should open up their channel so that if he's our president, it's not their president. So he's our president. So when they want to take ownership of the president, it's not fair on Nigeria. We voted for him. He's our president. So we should have access to him. And so those groups, you don't have access to him. And in that way, some of these things that you hear that is closely within this paper can actually be ironed out easily and then diplomatically and then solutions can be brought so that we all can see his actions that will lead to a peaceful Nigeria that will ultimately put prosperity for the country and the citizens. Alright. I'm Rossi Bokeh. Thank you so much for your time. Thanks for speaking with us this morning. And we wish you a great Tuesday ahead. Thank you. Thank you for having me. Okay. Stay with us. Short break when we come back. What happened on this day many, many years ago. I'm going back to the year 2012 to tell you about a really, really risky feat that, of course, broke world records. And a very sad incident in the history of our country in 2014.