Hello, everyone. My name is James Faulkner. I'm a technical marketing for Red Hat, focusing on app servers and developer tools. Today, we're going to talk about fat jars.  So we'll look at Spring Boot, Eclipse Vertex, Drop Wizard, and Wildfly Swarm. So how many of you have heard of fat jars before? OK, good. Well done. So fat jars, I probably need this slide. They're easily portable. They're easily runnable, especially in IDEs. You specify the main class, and it loads it up in the JVM, and off you go. And you have all your dependencies inside the jar file. You have no downloads. You have no initialization of app containers. It just runs. Everybody supports it. It's been supported actually since about 2011. Drop Wizard was the first. A lot of people think that Spring Boot kind of popularized the use of fat jars, but actually Drop Wizard was first. So kudos to them. Yes, thank you, Ver. So essentially, everything is packaged in a single jar. All your dependencies are resolved at build time so that at runtime, you have no resolution required. Everything's there. It starts up relatively quickly, and you can't run into problems where, oh, it can't find this jar file or this other dependency somewhere else, and the thing fails at runtime. That's the last thing that you want in production. If you're using Linux containers, like for example, Docker, everything in the fat jar is in a single container layer, because it's actually in a single file put into the Docker container layer using your Docker file that you build.  So one prime example of this is a company called HubSpot. They do marketing automation. HubSpot started building fat jars. They have over 100 developers doing a number of commits per day, probably a couple of hundred pushes to production, and they were using fat jars.   This resulted with one to 2,000 builds per day and a couple of hundred production pushes per day, they were generating around 100 gigabytes of new bits per day. Now you can imagine 100 gigabytes times the cost of storing, computing, and transferring that across the network resulted in a huge AWS bill. So they started to look at some alternatives and started to get away from fat jars. And they came up with a homegrown solution where they built their dependencies independent of the application itself, pushed those dependencies out to Amazon, to S3, and then when the application was deployed to production, it would pull those dependencies and cache them locally so that all the applications deployed on that particular node could reuse those same dependencies locally and not have to pull those dependencies down. So they essentially created a homegrown solution of what Spring Boot, Wildfly Swarm, Vertex, and DropWizard do today. So I'm gonna show you some of the standard tools that you can use to kind of essentially recreate what HubSpot has done using supported technologies from Red Hat. Okay, so in a typical Docker container, if you're not using containers, this doesn't apply to you, but for Docker containers, they are built up by a number of layers. So when you build a container image, the first thing you do is you add an operating system, the user land bits from the operating system. And you can see that down here, this is using CentOS, it's around 190, almost 200 megabytes. The next layer up is Java. So the JDK or the Java runtime environment with all of its dependencies, all of its tooling, all of its compilers, all of the things that you need to run a Java application is in that next layer up. That comes out to be around 200 megabytes or so. Then the top layers are some, so in this case for you, this is an S2I build of a Java EE application. S2I is a technology in Red Hat OpenShift for doing source to image, that's what it stands for, for taking your source code, combining it with a runtime and then packaging that up as a Linux container image. So this is an S2I build. There are a couple of very small build scripts, essentially negligible in size. And then the last layer at the top there you can see is around 209 megabytes. That is the app server, in this case it was JBoss EAP, along with the application itself. So the app server was around 150 megabytes, something like that, and the app was around 50 megabytes. So this is something you typically see in a Java EE app server Docker image. Compare and contrast that with, say, Spring Boot, and its Fat Jar technology. So in this case, we still have the same kind of layers, we have an OS, we have Java, and we have the app, but they're much smaller. The operating system is Alpine Linux, it's a very, very small, very highly optimized for running in containers. Java is still pretty sizable. It's been minimized somewhat in this image, but it's around 100 megabytes. But then the application itself, this is the Fat Jar, it's around 14 megabytes. So that's a little bit of an improvement. So let's take another example. So Wildfly Swarm, Wildfly Swarm is a Java microservice framework for Java developers. Traditionally, Java EE developers have had access to a number of functionalities in Java EE app servers. Wildfly Swarm makes those same functionalities available, but allows you to package it into just enough app server. So only the bits that you need from the app server along with your application. So, and the result is, again, a Fat Jar. So this is the same exact application except it's built with a Wildfly Swarm. It's essentially the same, so we still have the same small operating system, the same smallish Java. But then we have two other layers here. And in the demo, you'll see how these are constructed. But there's a, what we call a hollow jar, that's the Wildfly Swarm runtime. And then the application sits on top of that. So it's very similar to the Spring Boot example, except in the Spring Boot example, everything is packaged in one. We, in the Wildfly Swarm example, there are two different layers. There's a nuance of why that difference is, but it actually turns out it's not all that important when talking about Fat Jar. So you see the very, very small application. This is literally only the bits that you type into your IDE is two kilobytes, right, really small. So the benefit here with Linux containers is if you change any of the layers at the bottom, every single layer above it has to be rebuilt and redeployed and transferred across the network. If all you change is the top layer, that's the only thing that needs to actually participate in a build. Everything else is cached. You don't need to pull those other layers down when you want to deploy this to production. So putting small things at the top layer and the very fast changing things, the things that you change every single day in the highest layers is very, very beneficial in the world of Linux containers and container orchestration platforms like OpenShift. Okay, so let's look at the Fat Jar kind of Hello World plus one library. So keep in mind this application that I built and then generate these numbers from this is not a real world application, right? This is a Hello World app. It has Jaxrs in the case of Wi-Fi Swarm and Spring. It's a very, very simple application that just outputs one line of code, nothing you'd ever seen production. It's very instructive to look at that because that is where you kind of filter out all of the noise from real world applications to get to the technology itself and to compare them and contrast them and show how you can build them in different ways. So you can see the sizes of this Hello World Fat Jar across the different technologies here. So Wi-Fi Swarm comes in at around 45 megabytes, Spring Boot 17, Drop Wizard 15 and Vertex at a very attractive four megabyte. Again, for Fat Jar, this ICE difference is actually important, right? Because you're transferring more bits over the network every time you rebuild the Fat Jar. These technologies come with additional features that people may not know about. Moving from the Fat Jar to away from Fat Jar makes a lot of sense in the containerized world because of the layering and because of the amount of change that goes into building applications, say microservice applications, they're built and deployed hundreds of times per day in a real scaled production environment. So again, getting those bits at the topmost layer is super important. So let's see about how we can do that. So before doing that, I want to explain some of the technology I've been using like hollow and skinny and fat and thin. We all know what Fat Jar is, right? That's everything. It includes the application runtime. It includes the application's dependencies and the application itself. So the application itself, the red box, this is the bits that you type into your IDE and you compile and they turn into dot class files in the Java world. The application dependencies, the direct application dependencies are things that your app needs that the app runtime doesn't supply. So things like database drivers or some library you may be using. In this case, in my Hello World example, I had a time library that made sense of the crazy Java dot util dot date fiasco in the previous JDKs or Java versions. And then finally, the app runtime are the things that are necessary, kind of the final mile or final kilometer to get the application running on the JVM. So in the traditional Java EE world, this would be the app server. This would be the thing that Java EE, either JBOS, EAP or WebLogic or WebSphere or whatever. So all of those combined is the Fat Jar. The thin jar or thin ward, depending on the technology you're using, that contains the app and app dependencies but not the application runtime. The thin war or jar is not runnable on its own. You cannot run it without this other glue to actually make it run. If you try and run it, it's gonna fail with some class not found exception. And then the skinny package, this is the app itself. This is a two kilobyte example in the wildfire swarm. Again, not runnable on its own but also not runnable without its dependencies and with the runtime that it needs to run. Okay, so that's Fat, Skinny and Thin. And then the term hollow, that's essentially the application runtime itself. So in a traditional sense, the hollow application is the app server, is the Java EE app server, right? That's the app server.  It needs applications to make actual business sense. But packaging it on its own has a lot of value, especially in the world of Linux containers. It's had value in the past because now you have this prepackaged thing from a vendor like Red Hat. You can ship it around, you can patch it independently of the applications themselves. So it makes a lot of sense to be able to package that separately for a number of reasons. Okay, so here's the grid of supported options. And after this slide, we'll do a demo. So everybody supports Fat. That's been around forever and that's a well-known. It's very easy to understand for developers and for IT operators. The ability to separate the application from the application runtime is what we call Thin. Those are also supported by all four of these technologies via different mechanisms. So in the Spring Boot case, there's a thing called Spring Boot Thin Launcher. This is an experimental library written by some of the Spring Boot engineers. I hope hopefully we'll see that actually supported and put into the next version of Spring Boot, next major version of Spring Boot, which is Spring Boot 2, which is I think coming out, I heard later this year or sometime in the very near future. Wildfly Swarm actually, because of its Java EE heritage, Wildfly Swarm supports Thin jars or Thin Warfiles natively. This is kind of the default way you create applications in Java EE. When you build a Java EE application, the output is a Warfile, which is generally pretty small. It doesn't include the app server itself. That's exactly what Wildfly Swarm does as well. And you'll see that in the demo. Vertex and DropWizard don't have kind of first-class support for Thin, the ability to separate them out, but it is possible to do that via some Maven plugins and some Maven support. So Maven has the ability to just generate the dependencies for the app and put them in a separate directory. Then you can use Docker to kind of build those layers independently and do it yourself. So Vertex and DropWizard don't necessarily have first-class knowledge or support for it, but you can certainly do it. Then the Skinny Hollow is kind of a super-efficient packaging mechanism. And again, Boot, Swarm, and Vertex all support this via different technologies. So for Boot and Vertex, they support it through essentially Docker itself, being able to create a Docker layer image with the dependencies separated because Spring Boot and Vertex both know how to separate their dependencies. They just don't know how to package them up. So they use Docker to do that. Swarm has a packaging mechanism within it called Fractions. Via Fractions, you can separate the application from its direct dependencies, from the application runtime itself, and truly create all three of those layers independently with first-class knowledge in the tooling for the technology. You could do all of this with Swarm without Docker, for example. So it knows about Thin, it knows about Skinny, and Hollow. These concepts are built into the project. Let's do the demo. So what we're gonna do is basically just walk through all of these technologies that I just kind of gave an outline for and show you how it works in the real world. Okay, so I have a number of projects here. Apologies if this is a bit small on the left, but these are just a list of a number of projects I created to demonstrate this stuff. So let's start with Fat Jar. Everyone knows Fat Jar. We'll start with Wildfly Swarm here. I have a very simple application. So it's a RESTful application. It has an endpoint, which essentially just outputs that. So if I build that, Maven Clean Package, so what this is gonna do is invoke Wildfly Swarm. It's gonna look at, find all the dependencies, package them all up into a single Fat Jar. Okay, so it's up here now. Hopefully a little big enough to read. So if I look at the result of that build, I see my Fat Jar here. Wait-1.0-swarm.jar, if I run it, Java-jar-target-wait-1.0-swarm.jar. It'll essentially run this very basic service and I can hit it with API slash hello. So, curl, HTTP, PS, or local host, if I can type, 880, API, hello. Right, very simple. It's also using that time library, which I'll be using in a moment to show you how to separate the dependencies from the app itself. But there's a basic, yeah, so this is local date.now.getstring. This is that Jota time library that I was telling you about. So a dependency separate from the app, but not part of the app server. Okay, so that's the Fat version of a Wildfly swarm app. So let's take a look at DropWizard. So DropWizard, I also have a very simple application here. It's, I think it's on API saying, so if we build that, so let's go to DropWizard, Maven Clean package. So that built and the resulting Fat Jar, as you can see here, is about 15 megabytes if I run it. So Java-jar, oops. That's jar, if I can type again. I got to kill this one first because it's sitting on the same board. Target, target slash, blah, blah. Oh, I got to run it this way. It has a bit of a different way to start it up, but it's essentially the same thing, right? Fat Jar from DropWizard, very well-known technology again, the first to do Fat Jars. And if I run it here, I can just do curl, I should be local, host, maybe 80. I think it's greeting. Yeah, so there's the Fat Jar from DropWizard. Again, about 15 megabytes, right? Much smaller than the Swarm version, but let's keep going. So after DropWizard, let's look at Spring Boot. So Spring Boot, very popular. Actually, kind of the Docker of Fat Jars, right? Docker made Linux containers really cool. Spring Boot made Fat Jars really cool, although again, they weren't first. So I have a very simple application here. It is sitting on, I believe, on the root, okay. Or maybe it's greeting, I don't know. So let's build that one, we can stop this one. So let's go ahead and build the Spring Boot Fat Jar. Spring Boot, Fats, Maven Clean Package. So there's my Spring Boot Fat Jar, it's about 14 megabytes. And if I run that, Java.shar.target.bat. So that comes up, and I can hit that as well. Local host, I believe it's local host. Yeah, it's just on the root. So there's my Spring Boot Fat Jar, again, about 14 megabytes. And then the last one is Vertex. So let's take a look at Vertex. So I have a very simple vertical here, just basically just outputs again, a very simple message. So let's build that one. So Vertex, Fats, Maven Clean Package. So there's my Vertex Fat Jar coming in at a very small size, about almost four megabytes. So Java.shar.target.bat. So it's up and running, and I can hit that with, I believe it's also on the root, right here. So that's our application. Okay, so that's the easy stuff, right? Now let's look at the more interesting things. So let's look at the Thin War, or Thin Jar. So this is the ability to separate the application, bits you type in from the application runtime. So here, again, with Wildfly Swarm, we'll start with Wildfly Swarm. Actually there's nothing to do with Wildfly Swarm because, as I mentioned, it already natively creates that Thin Jar file, or War file. So you can see here, it's already created this weight-1.0.war, right? This is the Thin app. It only contains the application. It also contains the application's dependencies. So if we look at what's inside of that, I only, it's like a three line application, but it's still about 500 and something kilobytes. So what takes up the space? Well, in this case, it's the Jota Time Library, right? It's sitting in there, although I've created my Fat Jar and it's less than a megabyte, it's still way bigger than it really should be because I only typed in one line of code, yet I have a huge file that's gonna be uploaded. Every single time I push that, every single time I change that one line in the code, it's gonna repush those bits. So we'll take a look at what we can do to separate that in a moment. So, but that's the concept of Thin in Wildfly Swarm. So what is the difference? What is the concept of Thin in, say, Spring Boot? So I have, again, an application, a simple Spring Boot application with, it just outputs, it's exactly the same application, but it's built slightly differently. So let me build it and I'll show you what happens here. So Maven Clean Package. So again, it's building the application with Spring Boot, but it's doing it in a slightly different way. And if we take a look before I show you the application, or the result, if we take a look at the POM file in the Thin version of Spring Boot, let me make this a bit bigger here. So we have the traditional dependencies for Spring Boot. We have, we pull in the starters that we need, we have the web starter here, we have our JotaTime library there. We also have the Spring Boot Maven plugin, but we also have a dependency within that Spring Boot Maven plugin, which creates what's known as a new layout for the resulting application using what we call the Spring Boot Thin layout, or Spring Boot Thin plugin. So that's essentially all I've added to my POM file. And so what happened when I built that, if we go into the directory where the thing is created, you can see I now have a Thin JAR file, I don't have the Fat JAR file. It's about 11 kilobytes. The dependencies themselves are actually in a directory here called Thin. What this actually is is a Maven repository, a local Maven repository. So if you look at what's in that directory, it's essentially a Maven repository with all of its dependencies from the application itself. So if I run this Java-JAR greeting Spring Boot Thin, it's a runnable Thin JAR, right, which is slightly different from Wildfly Swarm. Oh, I think I have something already on running here. I gotta kill that one, try that again. So it's actually resolving its dependencies from that local Maven repository that was created as part of this plugin. So the application runs, I can hit it on Curl, I can show you that, but I assume you believe me by now. But it's resolved those dependencies. So what you can do is to create a Docker image is take that Thin layer, combine it with the application itself, Docker in a Docker file. So I have a Docker file here, which is very simple. It basically adds two files to the Docker image. It adds the dependencies from this Thin directory, and then it adds the application itself. So if I Docker build this, Docker, say Docker build, I'll call it Spring Docker build. So you can see it actually, because I haven't actually made any changes to the application, it used the cached version of the dependencies. So the Docker build was very fast. The only thing that was added to the directory here was my actual application itself. If I make a change to this application, say from Java one, save that and rebuild it, Maven clean package, rebuild the application, which rebuilds everything, the dependencies and the application. But then when I rebuild the Docker image, it goes very fast. And the only thing that was added, that was not cached, was the application itself. The dependencies haven't changed. It was able to use the cache within the Docker registry and then rebuild it very quickly. And then I can run it using run-p8080 to expose the port. It's like run this within the Docker image and then essentially do the, we'll do exactly the same thing. It'll expose that on a port and I can hit that on local host 8080. And I get my Spring Boot Thinjar. Did I change the wrong file here? Yes. Okay. I believe that I changed the wrong file. Yeah, this is the one I needed to change from Java one. So that was the default. Yeah. Let me rebuild this Spring Boot Thin. Docker build, rebuilds and then I'll rerun it. Hopefully and I will get the message I was expecting which has the Java one string in it. I just changed the wrong file here. So let's hit it again and it didn't work. Okay. So what did I not do right here? Spring Boot Thin, Docker build, Docker run. Oh, I didn't rebuild it. That would help. So you actually have to build the application itself to compile the bytecode into the Thin layer and then rebuild the Docker image and then rerun it. Okay, let's see if this works. This doesn't work, then I'll give up. Okay, so there's the image. So essentially I made a one line change to the file. It only resulted in about 11 kilobytes of change instead of the 15 or 16 megabytes of change that would have resulted if I was building a fat jar. So very, very powerful mechanism for saving a lot of sanity in IT departments. Okay, so that's Spring Boot Thin. Now let's take a look at Vertex Thin and then we'll go get to Wildfly Swarm which is a very interesting use case. Okay, so for Vertex Thin, so if you remember from the graph, Vertex Thin is actually supported through Docker. So what that means is I actually have a Docker file which is pulling from a pre-built Docker image. This is a Docker image that the Vertex project makes available to me. This is essentially representing the app runtime, right? This is Vertex Core plus a couple of other dependencies. This is how I get the notion of a Thin application in Vertex. So when I built this, I just built it, the actual application itself is only about four kilobytes or three kilobytes, very small. The fat jar again, if you recall, is four megabytes. So there's a pretty significant order of magnitude difference between the Thin jar of my application and the fat jar in Vertex World. So to realize this with Docker, again, I have this Docker file. It essentially just adds the vertical. Because it's getting Vertex from the base image, it's only adding the jar file itself, the application itself. So if I then build this one, Docker build, HT, Vertex, latest, dot. So again, it's just adding my application here. Then I can run that, Docker run dash IT dash P 8080. And then I got something running. So I still have my Spring Boot app running.  So it's already up and running. It's super fast. Vertex is one of the fastest starting applications in the world in my opinion. Then if I can hit it on local hosts, so there's my Vertex Thin jar application. Again, if I were to make a single line change to the application and rebuild it, the exact same thing from Spring Boot would happen. I would only get a couple of kilobytes of change in the Docker layer. Everything else would be cached and saving me network compute and storage and saving my AWS bill. Okay, so that's Vertex. So let's take a look at, the last one we're gonna look at is a wildfire swarm. So we already talked about wildfire swarm fat jars. That's pretty clear. We talked about wildfire swarm Thin wars, which is essentially coming from its Java EE heritage. So let's talk about skinny and hollow. So in the wildfire swarm case, it has this concept of fractions. So if you recall from the earlier discussion, in the, when I built the Thin jar, or the Thin war of wildfire swarm, it contained 500 kilobytes of bits. That's way too big, right? This should be very small, .0, .jar. Oops, jar. So target. So there's, oh man, let me try that again. There. Okay, so here's my Thin application in wildfire swarm, right? Here's my application itself, which is like one kilobyte. And then here's this humongous library, 630 kilobytes, right? That's pretty expensive when you scale to the scale of HubSpot or Google, who does two billion deploys per week. That adds up quickly. Not only that, this is a hello world application.  In the HubSpot case, they're fat jars. Real world application, right?  That's one of the reasons why their bill was so huge.  It makes a lot of sense for developers, but it is a death knell to, yeah, two minutes. All right, cool. So it's bad for IT departments. So with swarm, what we can do is do what's called a skinny. So let me build it and just describe what's happening here. So actually, in order to get rid of that library and all the libraries that I eventually add, I need to create a fraction. This is a first-class citizen in swarm. So I actually created a fraction for this JodaTime library. So I do Maven clean package install, and while it's building, I'll quickly show you what it looks like. It's a very simple, it's got very little code in it. In fact, it has almost no code in it. It has a single kind of class that tells, well, if I swarm that this is a fraction, it sends from this fraction class, and then it has a module file which describes its class dependencies itself. This is a JBoss module. This is a technology coming from the JBoss world, brought into while if I swarm, makes it possible to create these fractions. So if I look at the, if I then, so I've built my fraction, I've installed it, now I want to go ahead and build the application using that fraction. So I have a skinny application here. If we look at the POM file, it's got a dependency on my Joda fraction that I created. This is separate from my application. It's not built with the application. It's brought in as part of the swarm runtime. So let's go ahead and build that. So if I go to skinny, maven, clean package, what I'm gonna get is I'm gonna get that hollow jar file. It's runnable, but it doesn't do anything on its own. So I just built it. Now you can see I have this hollow swarm file. This is the original, this is the, this is the wild fly swarm minus the application, but adds that Joda fraction that I talked about. So now I've packaged all of my apps dependencies plus the runtime into this hollow swarm file. I can then run this, this tiny, tiny, tiny application. This is the bits that I've typed into my IDE. That's only two kilobytes, right? I've now separated them out. So now I can then, again, with Docker, I can build Jchefs swarm latest. I can then put, oh boy, Docker build dash T. I can then put those separate bits into separate layers. So here you can see the hollow swarm was added as one layer and then my application itself was added as a separate layer. When I make a one line change to the application, that is the only thing that's gonna change. Nothing else will change. The application runtime, wild fly swarm in this case, will not change. It will not be re-downloaded, it will not be redeployed. It will always be cached and you save a ton of money on network compute and disk again. So last thing, I'll just run it. Actually, let me go ahead and run it real quick and then we'll finish up. Docker run dash IT dash P, 8080, 8080. Okay, I got something else running.  Oops, I just built it again. Okay, last one here. This is the money shot here. So it's running a wild fly swarm but then bringing in that application separately because the application is now split from the application runtime. By then curl it, API hello. So it's there. This is the skinny jar using that externalized library put into a separate Docker layer and it's very powerful. So that's kind of the rundown. Last thing is the kind of packaging recommendations.  People understand those. For small applications it makes sense but you very quickly, if you're building a real world application at scale, you're gonna get into a situation where you have 100 megabytes of a fat jar. That multiplied by the number of nodes that you have and the resulting storage necessary and network transfers costs a lot of money. So that's when you're gonna start wanting to consider splitting the application out of a fat jar into a thin or hollow jar or war file and separating those into separate layers so that you can save money. HubSpot is a great example of this. They actually did their homegrown solution but with wild fly swarm and spring boot and Verdex and Drop Wizard, you have kind of options in the projects themselves, supported options from the projects and in Red Hat's case, we're supporting these through the Red Hat OpenShift application runtimes. You can do this on your own using support from a vendor like Red Hat. So that's it. Thanks for hanging out. If you have any questions, I'll be around. But thank you.


And we whistle our way through this day, all right? We whistle our way through. You know, joy comes from within you. It is you to give yourself the joy and the peace and the love that you want to get. Just whistle your way through your morning as you tune in and watch the Why in the Morning show, right here on Y254. For those who are joining us, this is Why in the Morning. My name is Ram Magukko. Thank you very much for keeping us company from the time we started till now. I'm seeing so many tweets, so many comments on our Facebook platform, Y254. And on our Twitter platform, at Y254 channel, the hashtag is Why in the Morning. For those who have not sent in their comments and their thoughts on the different stories that have made headlines this morning. Remember, we have the death of the former governor, former senator of Garisa that is Yusuf Haji. So many people are sending in their comments in regards to that. So make sure that you tell us your thoughts about what you think about Haji the man himself. Okay, now we put a question online on our Facebook page, says, who are the best and the worst people to have around at your workplaces? I'm seeing so many people are already giving in their comments. Head over to Facebook, Y254, and drop in your thoughts. We shall sample them up later on during the career discussion segment with Sarah Mooney, who are the best and the worst people to have around our workplace. So many comments there, we shall sample them up later on. Head over to our Facebook page, Y254, drop in your thoughts in regards to that as we shall discuss career. But before that, this morning, let's talk about politics, youth and politics. What has taken center stage in the political arena? I'm joined by Daniel Orogo, political analyst and Christine Kendi, at the center, who is also political analyst. Garibusana Kendi and Dan. Thank you very much. Before we touch on politics, let's talk about Governor and Senator Yusuf Haji. Not a little bit. He passed on this morning, quite sad indeed after a long illness. Christine, what are your thoughts in regards to the former senator of Garisa? It's really sad. And I mean, he passed on when something that he had just started, the BBI, which he was chairing, is on the way to taking off. So it's really sad. I think he would have wanted to see BBI being implemented. And I hope we shall implement in his memory. And I hope we shall implement in his memory. If you look at the footsteps that he has left, Dan, what do you remember there for his senator for? Well, I think, first of all, he's just to also convey my heartfelt colonelist to the family, friends and relatives and the people of Garisa for losing a public servant, a stint public servant who is well-enowned for his role in public service. We vividly remember the late senator for a number of reasons. One is his role in peace processes in northeastern Kenya. Yeah, the Al-Shabaab issue. The Al-Shabaab issue, when the nation was in a state of confusion, in a state of panic as a result of the insurgency. Senator, by then, I think Defense Minister, you remember, he stood up to his ground and never shielded the sympathizers of Al-Shabaab militants. And as a result of that, I think his purpose in duty and his honesty in public service helped the country to deal with the insurgency that was raising havoc in northeastern Kenya. One of the issues that we also remember, the late, is of course what my colleague just talked about, is he didn't stop at his backyard only. But of course, he served and make sure that these peace processes are enrolled throughout the country. As a public servant who served different regimes, I think it bequits him to understand that the Building Bridges Initiative was well needed in this country, I think, to his own understanding from his own experience. And therefore, he never shied away from even dutifully serving as the co-chair of the Building Bridges Initiative. So we pass the condolences mentioned. And I think Kenyans have lost our personality and has lost a figure that we will well miss throughout. And the story needs to be told for the generations to come. Speaking of generations to come, Yusuf Hajji is one man who has left quite a legacy. I'm looking at still on what he has said. He has left eight children. And here we're talking about the DPP, Nudin Hajji, and Abdul Hajji, who is amongst many others, the time of his passing, a person who is 80 years, looking at he has left leaders in the country. What do you think about the legacy that he's living behind, those that he has helped raise, those that he has also put, or helped put on the limelight to become leaders in the country that are changing the nation? Christine, Kelly? His shoes are big to fill. They will be very difficult to fill. But he's done one thing most leaders don't do. And it is one thing that defines leadership, that is bringing other people up, that when you're gone, you will not leave a vacuum. Even from his family alone, we can see that he has left leaders in the country. He raised leaders, which is not easy to do. And he's not a person who only shined in the public, but a person who also shined in his family. You know that bringing up a family of people like the DPP, the likes of DPP. I mean, people with integrity is not an easy thing. So we shall miss him. And we hope that the vacuum will be impossible to fill, but we hope that it can be filled. You talked about the legacy. It wasn't that, the legacy that he's leaving behind. Yeah. I think it's so progressive because as a family man and as a leader, the intricate balance between being a servant leader and making sure that you leave the footprints, establish footprints in both a family in both community and in a country at large, that's what's really always become very difficult in leaders. One of the issues that we really understand is that what can we glean on as a generation of young people who would want to send you to leadership position, minus character, minus value, and minus a well-read in terms of arming ourselves with history and content. So I think one of the issues that I would add is the footprints the senator has led behind and the legendary legacy that he has laid down. It bequeath a generation of ours to, first of all, do not really be reactive about his, but also to be proactive by reading, by assimilation, and by understanding that this was a man of the soil who toiled so much to ensure that he has a well-balanced family, but he has a well-peaceful society in his neighborhood, but also extended his service beyond the borders of his origins and served as a country at large. And like my colleague mentioned, the only reward of which the proponents of Building Bridges Initiative would give it to him is to make sure that what he stood for, to see a country that is moving from blood ties to a country of ideals, realized, and that is the Building Bridges Initiative that we have. And there are lessons that especially the youth can pick from such a leader, like Senator Yusuf Hajji. May he always in eternal peace, someone who served as the chair of the Building Bridges Initiative Task Force after being appointed by the president himself, leaving a big legacy. His shoes we may not fit, nor may fit into the shoes that he has left. But regardless, we need to pick leadership qualities from him and replicate on ourselves. We should learn from our elders, like Yusuf Hajji, may he rest in peace. Now, let's move on to the next story of the day. And this is in regards to Jubilee Party. We have seen what happened in the past one week a lot. And I realize a week is a long time, especially in politics. One week is a very long time, even a day. Now, let me start with you, Christine. These rungles that are taking place within Jubilee Party, the rift, do you see this shift growing even further? You know, it's a shame that all this is happening in Jubilee and in state of Jubilee taking responsibility, they're blaming other parties. And in every party, they are conflict resolving mechanism, which we call them the oppositions in Jubilee, or they have already taken over to become the official opposition with the party. No, they have the National Management Committee that talks about it. They also have the party disciplinary committee. Yes, there are so many conflict resolution mechanisms in the party. With this party, where people can sit down and resolve all the issues. But it's because no one wants to resolve the issues. People want to leave the party, but they do not want to. They still want to have their cake and eat it. You want to be in a position, but still enjoy the parks of being in the ruling party.  And in as much as they keep blaming the former PM, Rayla Odinga, we have to know that Rayla Odinga is not in government. Rayla Odinga is not the deputy president of this republic. He is an opposition leader who sat with the president to resolve for the sake of peace in this country. Dispute resolution. Yes. And the political parties act allows it. It allows for the opposition and the ruling party. For the sake of the country, because the country is bigger than any other person. And then the people who have been suspended or expelled, they haven't been expelled already, it's a shame. When you are a nominated member of parliament, you have never represented the group that you nominate. Let's start with Isaac Maura, for example. He represents the disabled. I would have expected this. There's a day I was near Kencom, and I was watching a guy on a wheelchair being carried into the bus. That is because he don't even have ramps on our buses. What was Isaac Maura doing in parliament? Who was he representing in parliament? When in a country like Kenya, in 2021, a disabled person has to be carried by a conductor and passengers for him to get into a bus. And his wheelchair folded up and put in his in the car. What happens during the rush hour? When it's a kilo, what happens to this person on a wheelchair? He cannot get into that bus. What happens when the conductor is a rude person who doesn't care about this person? It does not happen. When we have traffic lights that don't even, they're supposed to be vocal with an audio, something audio where when the light turns green, it says the light has turned green. For the sake of the deaf, what has Isaac Maura been doing in parliament, claiming that he was representing the disabled? Even if it wasn't for the party's suspensions, I think the disabled should have come up and challenged for his suspension, because that person has never represented them. We have people like Millie St. Omanga representing women. I am a woman. This is a time. You don't feel like she represented you in parliament? I should not represent me. This is a time when we had a woman give birth in Pangani Hospital, outside the hospital. And the best those women could do is carry basins and sanitary towels to the hospital, as if the woman had been denied entry, because she did not have sanitary. So in other words, what you're saying is that these senators or members of parliament that have either faced the acts or you're saying they deserve it? They deserve it. They never. But you're bringing the whole blame on that particular individual, yet they have participated in parliament. No, let me tell you, this is a political party. You were nominated by a political party. It wasn't a wedding you were going to attend. You know when you are nominated, you represent two things. The people you were nominated to represent, because you do not have a constituency, and the party. So when you go in parliament, you are supposed to vote according to the party lines. Any other domestics you have with the party, you resolve them during a party meeting in an internal party meeting, using the internal party conflict resolution mechanisms. Do you agree that they deserve whatever they are going through? And that they have failed those who they represent in parliament? Well, I think first of all, our constitution envisions institutions of political party to be institutionalized in terms of democracy within. That any representative would be in opposition as they represent the people that they elected, or people that nominated them. They should be some leeway of expressing a decent view within that would build a political party. Let me begin from there. I also admit that the political parties act also restrict the nominated representative within any political party within the time that they serve in those political parties, not to advance ideologies of a party that they represent. And to that effect, the Jubilee party was right to take legal actions. I call them legal action because that then violates the Constitution of Kenya. That is an upfront to the political parties act. Politically, the actions might not be popular. And I'm holding that view for a number of times. It might be legal advancement, but not politically correct. When you look at the performance of Jubilee party as a governing party, beginning with a structure of leadership of Jubilee party, it is a failed political party from the beginning because this is a governing party that seed power with a well-crafted contract between the citizens of Kenya and the political party who is in a position to govern. I would refer you, and is in the public domain, the party leader.


consider, in other words, prepaid expenses, we are going through a purchase process within the prepayment process. And therefore, when we audit the prepayment cycle, we should be auditing the prepaid expenses as well, the same kind of controls that are going to be in place. So this is another area, of course, as we construct the audit process, there will be overlap when we consider these different types of accounts. We need to consider where that overlap will be, so that we could do the enough testing that we need, but a minimal amount of testing in order to make the audit process efficient. Then we have the substantive procedures, we're going to say related to prepaid insurance in this case, so we have the substantive procedures, we have the inherent risk, the detection risk, then we have the inherent risk and the control risk, then setting the detection risk, then considering the substantive procedures, the actual testing items that we would be doing within the audit. Test of details of prepaid insurance accounts. Step one is to get a schedule of the prepaid insurance account. So obviously, we're going to need a schedule. We're going to not want to know when the payments we're going to be made. We're probably also going to need the policy. So those are the two things we're typically going to need. If we get the GL account or the trial balance, if we get the trial balance, we're going to look at prepaid, we're going to say we need the GL account now. Most of the time, the company will be posting their payments to the GL account of prepaid insurance. And then they should be, if they're a publicly traded company, doing the month end reconciliation, and then we should just have to basically review that. So if you have questions about that, you want to go to financial accounting, think about the year end adjusting entry, if you're talking about publicly traded companies, they should have completed the adjusting entry, which means they would be posting their items when they make the payment to insurance to prepaid expenses and asset, not a liability. Then at the end of a time period, typically a month, they would make the adjustment to adjust the amount that has expired and the amount that has not been expired, the amount that remains in prepaid expense, the amount that is not. Now if you're auditing a very small company or doing a review or a compilation or something like that, quite possible that they didn't do the period end adjustment. And you may actually have to look at that period end adjustment, which is basically just an adjusting entry, or it could be possible that instead of posting the transactions to prepaid insurance, they're posting it to prepaid to insurance expense. And in that case, of course, you would just basically do the reverse of the adjusting entry instead of adjusting it out of prepaid insurance. You would be saying, okay, now prepaid expenses overstated, you'd have to reduce that. Again, publicly traded company, that adjusting entry, you would think had been taken place. And we just need to basically test to see if it was done properly. Assertions related to prepaid insurance includes valuation, calculate portion of the policy that is not expired and portion that is. So with regard to valuation, we're going to get the policy, we're going to say, okay, how much time period does policy cover? And then we're going to consider how much of the policy has expired and how much of the policy has not been expired. So the assumption here, we have the policy policy has been paid for, we can see that the policy has been paid for, then we consider the policy that has been paid for, how much of it has expired, how much of it has not expired, the amount that has not expired then should be still reported as prepaid insurance. The amount that has expired should be expense rights and obligations, confirm policy beneficiary. So we want to make sure that we know who the beneficiary is of the policy, inquire the insurance broker. So it's useful to be able to talk to the insurance broker because the insurance broker is outside of the organization. So it gives us a little bit more confirmation or assurance, a little bit better evidence that we can compile to give us assurance about prepaid insurance existence and completeness. So with the assertion of existence and completeness, confirm policy with the insurance broker. So again, we could talk to the insurance broker about that outside of the company, bit more assurance, examine supporting source documents. So we can consider the source documents as well. And then we have classification. So classification assertion determine the correctness of classifications to accounts. We want to make sure that the accounts are being properly classified or the amounts are being properly classified to the proper classes.


Father, after you left me, Father, trials fell on me. O Father, O Muhammad, your absence burns an arrow. Does this detachment not ask of your daughter, do you know? O lights of my eyes and ears, from these eyes endless tears flow, he who abides in heavens, I'm in the house of sorrow. Father, do you recall me, Father, trials fell on me? I came to your grave with wounds that devils see as delight, wounds that if my husband saw, he teared down the day and night. Yet whilst tears rests in his eyes, for your speech still I await, must I be slapped once again? Two words from your grave ignite, Father, rise and defend me, Father, trials fell on me.  Know that for you, when I'd weep, one thousand angels would weep. Your city sleepers complain. Your city sleepers complain from my weeping they can't sleep. We built a house of sorrow and its tears, angels, they sweep. Father, do you need me? Father, do you heed me? Father, trials fell on me. Bismillah ar-Rahman ar-Raheem. In his final moments, the Prophet spoke to his daughter, she began to cry. Then she began to smile and laugh. The Prophet told her he will be leaving this world soon, but she will be the first to join him. After the death of the Prophet, she continually wore the scarf of mourning on her head, possessing crying eyes and a burning heart. She would cry so much that people complained to Imam A.S. She cries in the day we can't work, she cries at night we can't sleep. Please ask her to do one or the other. Imam A.S. made a little hut for her just outside the city gates, where she was free to mourn and weep without disturbing others. She would say, Father, oh Father, after you, I feel lonely. I have remained perplexed and deprived, my mouth is inclined to silence and my back is broken, and the wholesome water of life has become bitter to my taste. On an occasion, Um Salama says, when I went to see the lady of Islam, Fatimzal A.S., after the death of the Prophet, and asked her how she was, in reply, these meaningful sentences were spoken by her. She said, why are you asking me how I am, Um Salama? When I am caught in the middle of much sadness and suffering, on the one hand I have lost my Father, the Prophet, and on the other hand I see with my own eyes that there has been injustice done to his successor, Ali ibn Abi Talib. I swear to God that they have torn the curtain of his reverence, but I know that these are the grudges of Badr and the revenges of Uhud that were hidden in the hearts of the hypocrites. She was hurt. She was hurt. She was hurt so much that Fatimzahra A.S., even when she would leave the city, she would be scared to go alone. So she had to be accompanied by Imam Hassan and Imam Al Hussain, A.S. She was hurt so much that before she passed away, the people that persecuted her, the people that attacked her, tried to seek her apology. She sat with her back facing to them and said, you, O people, when the Prophet was around, when the Prophet was alive, you would tell him of your allegiance, you would tell him that your love for the family is great, but the Prophet has revealed the verse of the Qur'an. I don't ask of you anything other than love for my family. And this is how you treat the family of the Prophet. From your voice, Father, I'd learn my voice shook thrones of tyrants. This voice, once so sweet to you, shook their crowns and their garments. The moon itself fears my voice and shows me with its crescents. Known with my speech to my heart, I throw to you its remnants. Father, accept this from me. Father, trials fell on me. Once daily with every dawn, my house would yearn your presence. Father, this house daily cries, yet it's met by your silence. Father, the scent of fire replace its once sweet fragrance. And between the door and the wall, it crushed me in its grievance. Father, it complains to me. Father, after you left me, Father, I bring my child. Father, I bring my child still born to you I present. Yet I do not hear a voice from you. Why remain silent? I just hear its sweet voice ask, for what sin was my torment? If of me you do not ask, for my son do you lament? Father, I bring my child still born to you I present. Yet I do not hear a voice from you. Why remain silent? I just hear its sweet voice ask, for what sin was my torment? If of me you do not ask, for my son do you lament? Father, your absence pains me. Father, trials fell on the way.


Mr. Speaker, the journey to where we are at this point started a long time ago. Mr. Speaker, I just want to pay tribute and to, as I've done before, to pay tribute to the young men and some women who were prosecuted and jailed for the use of small quantities of alcohol. The number of young men I meet in my constituency and they say to me they have police records because they were caught in a stick of marijuana. Some others were jailed, etc. I think in paying tribute to all the partners, including Mr. Dikaris and the attorney, I think we should remember them and also pay some tribute to them for what they went through at that time. The journey to where we are today, and I know the members of the show there will one day try to chastise me when I stood in this honourable house and I decided and I told the honourable house that we were introducing legislation to decriminalize marijuana and also to expand some of the records of people who had convictions. For small communities of marijuana, I saw him very insent and he said I was not giving credit, credit was new Mr. Speaker. But he started that work, he started that work Mr. Speaker but there were reasons why he couldn't follow it through Mr. Speaker because what we were doing, we needed to have courage. Because it really is something that people don't understand Mr. Speaker. There is a particular pastor in a church who a friend of mine said to him that he wants to pray for me because I would introduce young people to smoking marijuana and cannabis. So there are a lot of people who still have that belief. So when we took that position, there wasn't a position to allow people to wantonly smoke in public etc. Because I always say to the guys that smoking in public is still an offence. Smoking marijuana in public is still an offence etc. I just want to urge to calm the expectations that are rising out of this cannabis situation. There are some people who believe that the expectations and the country's economy will change overnight and that is the way to go. It's a way to diversify the resources of the country but it's not a magic one. It will not overnight create economic growth and economic development. It will help, it will assist, structure, organize and I speak to my colleagues who in the countries they have gone that way and it's taking time. It's taking a lot of time. The returns take time Mr. Speaker. But there is one thing that we must deal with and it is something that really oaks me as Prime Minister. The double standards that exist as far as cannabis is concerned and as far as many other things are concerned including economic policy. Up to now proceeds from the sale of cannabis cannot go through the normal banking system. Up to today you can't go through the swift etc. You can't go through the system. They call it illegal. They say it's money launching etc. Up to today. But in cities, in some of the major countries, there are cannabis cafes, people go in and smoke and sell and trade and put the money in the same bank that they say we can't pass our money through if we sell it. It's a kind of hypocrisy that really oaks me and then you know in several other aspects of life. In sugar cane, in bananas, in tourism, in financial services, in citizens by the investment program, any economic venture that we seem to be going into that may cause us to have genuine independence, there is some pullback. There is a pushback.  I would not like to go into at this moment but there are several things and that is why it is necessary that the people of the country get adequately educated so they can defend and they can protect the countries when these attacks come and when these situations arise. Apart from the politics, the red and yellow politics, there are several things that we need to stand up as a nation and fight for. We need to stand up as a nation and defend and protect Mr. Speaker because these islands are falling prey to circumstances that may lead us to a place where we do not want to go with Mr. Speaker. We speak about climate change and next week we are going to cut. Zee developed world made a pledge years ago to help these islands in terms of their adaptation Mr. Speaker. Years ago they made these pledges up to the day not a cent. Up to the not a cent they have not made these pledges and hurricanes and natural disasters affect us more than anything else. Up to today Mr. Speaker the adaptation pledges that they made to keep the temperature and the temperature increase to less than 1.5 degrees centigrade they have not made these pledges Mr. Speaker. But all kinds of control, all kinds of understanding to do is some of our own professionals, some of our own professionals get carried away and instead of defending they promote. Some of our own people stop defending and that is where sometimes I question a few things. We have not developed an alternative economic policy to deal with some of the issues that we have to deal with and that is because we have remained divided. We have not looked at our region starting from Cuba, Venezuela, Jamaica, Ghana, the wealth of resources that exist in that region. You can imagine if that region had a serious economic integration that would cause us to deal with our own development, how we would be, where we would be Mr. Speaker. But these are things that you have to think of but the reality is every day we are faced with higher unemployment, we are faced with climate change, things that we have no control over but we have to deal with it. Every morning I get up, I look at the weather forecast because these days there is no seasons, you know hurricane season.  Then they talk about high indebtedness, all the debts, most of the debts we have incurred is because we have to rebuild after a natural disaster. Most of the debts that we have incurred is because of high indebtedness. And with that high indebtedness you must cut back on social policy. So Mr. Speaker it is really a situation where sometimes you feel like going round and round and round Mr. Speaker. Then you speak about implementation, rate of implementation. Then rate of implementation you have procurement policies. How can you increase the rate of implementation if your procurement policies are so tied, so tied by circumstances that are beyond us but we have to follow these procurement policies. Then so Mr. Speaker this bill is a step in the right direction but I'm not sure whether the powers that be and I'm not speaking about the local powers. The powers that be will allow us to have the benefits, the full benefits of a cannabis industry. I'm not sure, it concerns you Mr. Speaker because I see barriers set up in everything we do. In tourism you have, what do you call it? In tourism, the barriers, in tourism. When you see that you can't visit us again because of travel advisories. In tourism you have travel advisories. You know any time in financial services you have blacklisting. In CIP you have concerns about the shengen visa. Then in banking you have the risk. And Mr. Speaker is very clear, the fear of the risk. Banks are afraid to take action because they are afraid of the risk. And the risk means that your credit card becomes useless. Somebody said it was your party money but it becomes useless. You would not be able to use it Mr. Speaker. And there are some islands already where the government had to put money in a helicopter and carry it to my army, to the US to say. Because the country, there was the risk. These are things that the people of the country must be told about the risk and the pressure of being small, the pressure of being underdeveloped and the pressure of being another thing which I will not say. So Mr. Speaker, I support the minister, I support the panniers but I just want to temper expectations that that is the cure or for the solutions economic problems. Thank you Mr. Speaker.