Hello everyone, I'm Joe. I'm soft engineer from Microsoft and I do most of the work related to web assembly and bring web assembly to the clouds through projects like run wazzy continue the wasn't shames and spider lightning and today I will be presenting virtually with Dan from fastly Dan is a co-inventor of wazen and his original developer of wazzy and he's pretty much everywhere on the wise and wazzy world and Let's first from Dan. So one of the questions we often get when you talk about wazzy in the cloud is Is wazzy just about POSIX? And before we can even answer that question We need to take a few steps back and look at some of the kind of underlying ingredients So we need to have before we can even talk about API's like POSIX We need to start from a place where we have a standards forum We're talking about API is that many different engines will ferment and many different source languages Many different tool chains many different libraries are all going to be sharing And so it's important for us to have a place where these people can come together and have consensus on a set of API's that they'll share and This forum will need to define vocabulary conventions and tools for defining API's And when we have this when we have a common set of vocabulary convention the tools many different people are going to want to Use this they're one of these the same vocabulary convention tools for their own API's That don't necessarily have to be standards And so it's pretty clear that we're end up having to set up here is the basis for an API ecosystem Right now The API system is just getting started. This is a really great time to ask a really fundamental question What do we want of our ecosystem? What do we want this ecosystem that we're going to all share to look like what properties we want to have a Natural way to answer those questions is to look at wasm itself and say what are things we really like about wasm Can we have those things in the API as well? One of the big properties of wasm that makes it really interesting is portability Wasm, of course, is portable across CPU architectures. It can monitor things like x86 and arm and risk 5 and many other different CPU architectures Wasm can also run on different kinds of operating systems When we look at the API space the kind of use case they're stepping up people want this kind of portability But they say when we have this kind of portability actually what we want is more of that kind of portability We won't be able to take portability beyond just like different kinds of desktop computers with different kinds of CPUs and different systems, but we want to have Portability across funding on different kinds of computers So when we look at the cloud we want to have portability between like different kinds of machines running inside the cloud But different kinds of cloud infrastructure And even beyond that we want to have portability beyond cloud between cloud and edge and and cloud and edge and browser and client side and mobile devices and embedded devices Kind of portability across different kinds of environments which requires a greater degree of abstraction That just portability across the instruction set or basic complex system functionality Wasm is across language It can support many different source languages today and it's always adding features if we go forward We're adding more features to support more languages in better ways. That's one of its core strengths And we look at the web-due cases for why is he stepping forward? We see people want to use many different source languages and really importantly They want to have these most if it's also good as we really interoperate We don't want to have to have fragmentation in the ecosystem between people using some languages on this side and other languages on this side We want to have a common ecosystem where maybe we can combine to have the same ecosystem Wasm starts out as sandboxed comes from browsers which have to have a sandbox against hostile code coming from the internet So it has to be robust against this kind of attacks And so we want to preserve this kind of strong sandboxing as we extended the API space But it's important that we don't do sandboxes in a way that we say run the code in a world where I can pretend that it's the only thing that exists We want to want to have code be composable If we look at the core wasm system with modules and imports and exports They kind of apply system where imports could be connected to exports and it suggests a very very composable system We can have many different modules that can be connected together with just their imports and exports because they don't share anything else There's no implicit shared state The realization of all these kind of properties in the API space is the wit idl in that component model So quick overview of the wit idl the vocabulary for defining apis So our core wasm has either the two types which makes sense because it's mainly a CPU abstraction and CPUs Don't have sign unsigned registers. They just have integer registers But it interfaces it's important to talk about sign unsigned values because we need to be able to interpret the meaning of the values So we have a sign unsigned integer types also floating point types and boolean types This interface types also give us Dynanthesize types things like strings and lists and just first-class types. We can just pass through interfaces These are really valuable for being able to define APIs The idl also gives us types for doing records and variants It also has types for result type for error handling and this is really interesting where if you have a Bindings to JavaScript, we can have JavaScript through an exception because that would be the natural way to handle error in JavaScript If we have bindings to Rust, we can have Rust return a result because that would be the natural way to handle an error in Rust If we have bindings to C, C can return a special error number Which is kind of the natural way of handing errors in C So every language can have their own kind of error handling and having a result type in the idl means We can make bindings that are specialized for the different error types The wit idl also defines types for handles and resources which allow us to have Awareness of the outside world limited awareness of the outside world so we can share handles which are essentially pointers To resources which essentially states and we can share these around in a very limited way. That's controlled by APIs and types And in the future the wit idl will be extended to handle async of integrated features for streams and futures This gives us a very powerful API to kind of get a sense of what all these types enable They give us source languages that are unexposed If you have an API that takes a list of string and returns a list of u8 Nothing in the API says and this was implemented by C++ or and this was implemented by JavaScript or and this was implemented by Python It's just list of strings listed u8. These types are source language independent types This means that the ecosystem doesn't have to worry about being frightened along API boundaries because the boundaries of any given API It won't matter what source language you could run in. You could talk to any other language and any other source language Using the bosom model and extending the kind of bosom concept of modules the imports and exports And and linking these things in the kind of module the logic system means there's no global namespace or registries or brokers or buses at runtime And this is one of the key properties that means that interfaces are fully virtualizable We don't need to worry about two things Needing to share a registry or needing to share a broker needing to share a bus Any of the things once we've looked them together can be virtualized when you take that combination and like other things And that combination to be virtualized so any given time after we've done some linking we can take the result and fully virtualize it It also means that features like GC and also any kind of memory management whether it's GC or linear memory It can be compartmentalized so we have individual components can have individual GCs Of course out of the covers and places can be doing lots of different things But it's because I believe the interface level the GCs are not entangled each other So we don't have a common common cycles across interface boundaries Which will be some really interesting properties. We talk about partial failure in the future This is also really important when we look at WASMVC because one of the properties of WASMVC is that it's not inside the edge of space It's not inside the linear memory So if we have API's that are defined in terms of linear memory and pointers GC languages can't talk directly to those things So this avoids us having to have an awkward fragmentation between GC languages on one side and linear memory languages in the other Putting this all together This is the foundation for a very solid WASM native API system an API system built for WASM that takes the properties that make WASM strong and Realizes them with an API as well and we put all these pieces together From the standard body with the WASMVC group to the common vocabulary conventions and tooling To the tooling that preserves the great properties of WASM with the portability and isolation and the cross-language properties and possibility We have the foundations for a WASM native API ecosystem And we have the foundations for a platform where people want to do lots of different things from cloud things to neural network things to cryptography And also POSIX things one of the concerns as we talk about these like greater API's is Do all the engines have to implement all the WASI interfaces and And on the other side we have conservative developers saying like you know WASI has all these APIs in it Do developers need to know which engine support which interfaces it's going to be a convoluted support matrix How do I know what I can use? And so the component model has answered that as well. That's called worlds worlds are a mechanism for defining subsets of APIs that can say we have WASI constant And WASI sockets and environments variables and command line options and we can pull that all together I'd call that a command world Another hand we have WASI messaging and WASI SQL and WASI HTTP and we can put those all together and call it a cloud world So these different worlds are both Independent to each other. They can both define their own APIs and define a set of things you can work with in a particular world Which will directly map to particular set of use cases command line environment programs or set of use cases like cloud programs Want to be portable quite different clouds and with that context when we talk about WASI in the cloud It makes a lot of sense Thanks the past and I'd like to take it further and talk about the world of the cloud First in the foremost, what is cloud? Well, a cloud is a condensed form of vapor of H2O also known as water Floating on the atmosphere you probably can't see because we are inside the building No, sorry. That was wrong definition What I really was asking is what is the cloud the cloud computing Cloud computing is an own-demand delivery of IT infrastructures for hosting your applications At least a very corporate as the cloud evolves more and more features and services being added to it a cloud provider like AWS has over 200 unique services For your applications and they provide things like highly available for tolerant blob storage. They provide fully managed Sharded replicated database to application. They manage your networking. They manage your entire identity platform so your application offset 80 or 90 percent of the features to a Specific cloud provider obviously comes with a cost you have to pay cash to them, but also you have to Know the cost of your mental Developers are facing ever-increasing expectations of building scalable applications and they need to learn a bunch of SDKs round-time environments and a set of API's So not only do they have to understand what features they need to add to the application they also have to ask their question of How much does it cost me when I change my mind? How much does it cost me when I was required to migrate from one platform to another platform? A lot of the technologies like kubernetes service mesh Dapper k-native and many more simplify our life Dapper proves that the concept of abstracting the layer of data plan operations like state management pops up and Config really works and it's really what developers want and I think as we are building a ecosystem for wasn't native API's it's Really important to start standardizing and unifying a set of interfaces for building Distribute applications and this we propose a new world called wazzy cloud core Written wazzy cloud core in the wheat IDL as a world It is made up with smaller worlds like wazzy key value wazzy block store sequel messaging round-time config and the distributed lock service that gives you 80% of the capabilities that your application probably needs and In this world unlike the command world which exposed lower-level API is like sockets Why is it called core owning export a single? HTTP handler so that allows you to do this bursty function serverless way and in your application that Handle HP request you can use key value to access whatever key value Stores you have or blob store or do you transaction execute queries with sequel a repeating theme in this conference and when people talk about wazzy and its portability and Then also mentioned portability is one of the things among other that make wazzy unique I like to take this chance to categorize different layers of portability On the bottom layer we have CPU portability that allows you to have a binary that can port from one CPU Architecture to another like x86 to arm and why the module does exactly like that On the middle layer we have opening system portability Pazix allows any application that use the Pazix system call to run on Pazix compatible opening systems But why is this more than Pazix? I think on the cloud environment for distribution applications We need a even higher layer of portability. We need to isolate your core business logic by abstracting away all the capabilities and this is a Business business logic portability and how do we achieve this level of portability? Well, we take a look at distribution applications. We find common patterns What are some of the services and? API's application needs to use and we found that multiple services like Rathus AWS Dynamo DB or Azure Blob Storage or Azure Cosmos DB They all share a common set of API's for key value store, which is get set delete and exists So if we put them together into an interface called key value read write We get exactly like that. We get a get function that returns a key value Key value pair set function to set your key value pair delete and check if the key exists Any application targeting this interface doesn't have to understand what's the underlying infrastructure that provides your key value capability So that application ideally is extremely portable own different platforms that provide different key value implementations However, however, it comes with a trade-off If you want to use more advanced features like Transactional API's or batch operations on key value store. You don't get it because not so many key value store implement This kind of advanced features and any key value store has their own uniqueness So I think there is a relationship between portability and feature richness and if we draw a diagram We will be a curve like that The more polarity ability you get the less feature you have If we draw that on the upper left side We have YZ HTTP proxy, which is a YZ world that give you a HP handler for Processing HP requests and this world is extremely portable It can be implemented by envoy by any other platforms You can port your application targeting HTTP proxy from on-prem to the cloud To constraint devices to edge to IOT devices On the lower right side, we have a specific provide provider world that is giving you Full set of features from a cloud provider and that's extremely powerful but at the same time not so much portability. I Think there is a sweet spot in this curve Which is on the middle that we want Why is the cloud court we have a set of core set of features That gives you 80 percent of the that satisfy 80 percent of application needs Without sacrificing too much of portability and that's the goal. We want to achieve To recap why is it called core uses high-level APIs and the wheat ideal to define interfaces? It gives you the business logic level of portability Because he uses the tool trans like we bind gen to generate bindings You have you can write less code that needs to be bound always applications uses rich semantics and So you don't have to define your IO types like of opaque types and it is programming language of no state Sorry, let me just replock here. All right. We've been experimenting a whole implementation of why is it called core at the day's lab Microsoft over the last year and we call it slight It embeds wasn't time as the wise and runtime and it uses wheat ideal to define interfaces for why is it called core and when you When you have to build your application when you deploy to production or Environment you have to use a configuration file to bind a specific Capability to the infrastructure for example, you have to say this key value store capability Used by my application. It's really talking to writers and that's in the the deploy state And now I want to give you a demo This is a very simple demo that shows a chat up that uses the messaging capability and it starts a HTTP server and has three simple end points login send and Receive the send will send the message to every people in that group and receive will grab a message to the user so in this Chat up we have a configuration file Called a slide file and currently we are using the messaging capability and they use is the the file system implementation on my local machine and let me just Starts the server and starts the client side. All right, so log in to users and you can say hello and You can say hi back So this very simple chat up and now when I I can simply change the configuration file without recompiling the application to use the net service for messaging capability I Just need to round this again You can see hello from one side and I can say hi back on the other side And this is using that instead of my file system implementation. All right, and I Didn't talk too much about the component mark How this is how everything works and I highly recommend you to take a look the future of component tooling talk by Peter and the guy And KubeCon we have a tutorial workshop So 45 minutes workshop that will do a hands-on with WebAssembly micro services and Kubernetes and will deploy this application to AKS using wrong and We have all the links to each of the YSE proposals and they are all in this back work And we have the implementation of slide here and thank you so much


So before I start, I'll just quickly show you a pencil. Who have used Docker before? So not many people have used Docker before. So OK, that's OK.   So the good points about this is that you get the best performance you can get based off your machine. But the only problem is dependency health. If you want to move this application to, say, another machine, you have to install tons of things. And if you have very complicated dependency, it makes things worse.  So it's kind of nicer because you can move your whole virtual machine to another machine. But the only problem is you suffer in terms of performance. So now we have a new, not really new, but new thing called containers, where you can run your applications and dependencies sandboxed together, separate from your OS. And you don't lose any performance. It's all as good as your bare metal performance. How do we do this? It's basically using some of the features of a Linux kernel. So there are two containers technology I will talk about, namely Lexi and Docker, which is the main point of this talk. Lexi is, OK, before I do that, let me talk about CHroot first, which is the original idea to want to virtualize your runtime environment. CHroot basically changes so you can CHroot a process, and then the process will think your root directly somewhere else instead of your actual root. So let me show you an example.  For example, I want to run bash at the ls command inside a CHroot jail. So before I can do that, I need to copy the bash binary and all these dependent libraries into a root into a jail directory, which I've created at the top, which is home slash jail. As you can see, it's not very user-friendly. And then after that, I can finally CHroot. So I run sudo chroot to my jail directory, and I run bash. As you can see, if you do a PWD, it thinks you're at root. And if you do an ls, it's only all these things and nothing else. But it's very easy to tell you in a CHroot because if you do an echo of your current PID, some rather big number, and you can actually escape, you can jailbreak out of CHroot relatively easily with this C program. So how it works is first, it needs to set the UID to 0, which is the root user. And then, this is basically how it works. You have to create a temp directory, and then you seed it into the temp directory. I CHroot into the temp directory. And before that, you open a handle to your original root because when you CHroot, file descriptors are not closed. So you can just jump out to the previous root. And at this point, you've already escaped from the jail.   And then you can do RMRF. And that's the end of it. So I think if I play this here, you can see this in action. I hope you can oh, goodness, it can't really read. Can you see the text? So anyway, this is the jail directory that I've created. And now I CHroot. And then if you do else AL, it's just the root stuff. And you do PWD, it is that root. I will run that C program that I showed you just now. And then it's still at root, but it's now the actual root of my system. It's no longer the jail of the process in. See, all the mindfulness kernel, everything's there. So this is the beginning of the first step into virtualization. So now I'm ready to talk about Lexi. So Lexi is basically, you can think of it as a virtual machine, but without emulating another hardware layer.  And then you write applications. And it behaves as though it's another virtual machine, but it doesn't need to emulate a hardware layer. How does it do that? It makes use of all these Linux counter features, which today I'll be talking about namespaces and control groups, the rest, and CHroot, which I've said something about before. The only problem with Lexi is that it's quite difficult to use the documentation. It's rather terrible if you go to the Lexi website. And it's because it's developed by Canonica. So it only works with Ubuntu first. And if you're using Red Hat, good luck. You have to figure it out for yourself. Which is why it hasn't been as popular as Docker, which more people have heard about. So first I'll talk about namespaces. There's a bunch of links that you can read out. Namespaces is a kernel feature where it allows you to place your processes in another namespace where you get a copy of all these things that the kernel provides, like UTS, all these. I won't go too much into details about that because it's quite dry. But I'll show you, I'll demonstrate primarily the PID namespace and the mount namespace. So PID is processes and mount is like mount points file systems. So yes. Yeah, also like to find out what namespace your process is in, you can just do a LSAO for slash procs, slash self, slash NS. You can replace self with any PID and then you can see all this. These are all the namespaces that this process belongs to. A namespace is just a number, an ID. It doesn't have a name. So it's a nameless namespace of sorts. Yeah. So here's a demonstration for the PID namespace. So at the start, I'll just show my own PID which is some rather big number. And then if I do a tree of the proc self NS, you can see all the various namespace that this process belongs to. And then there's a small C program that just spawns a new process with a new PID namespace and then run the best shell after that. And you have to do it with pseudo because you need the sys admin capability which a root user will have. So as you can see, this is the PID of the parent and this is the PID of a child from the perspective of the parent. But from the perspective of a child, it's now PID one because it has its own set of PIDs now. It's in another namespace. So if you do a tree of proc, slash self slash namespace, you can see all this part. You can't really tell what the difference is. So I'm going to div them all up and the PID is one. So I got to div the tree between the parent and the child. You can look, you can see the div there. They now belong to different PID namespaces. The rest of the namespaces are the same. But something curious is going to happen. I'm going to run top which display the processes running on my machine. How come the child can still see all the processes running on the machine, even though it's in another PID namespace? The answer is simple because top reads from the slash probe mount point to look for all the processes that are running on your machine. And because we haven't created another mount namespace for this process, therefore we can still see all the processes running on your machine. So in the next demonstration, it's going to start a batch shell in a new PID and a mount namespace. So yeah, this is the top from parent. You can see all these things running. And then I'm going to run another C program to start it in a different namespace. As you can see, the PID is now one and I run top. They can only see the batch shell and top and nothing else because I've mounted in another mount namespace. So yeah, that's about, that's it for namespace for me. If I have time, I'll talk more about the different namespace times but there's quite a few. I don't think we have enough time now. Yeah, so the next thing I'm going to talk about is control group or C groups. So throughout the history of UNIX and there's been like a desire by OS developers to be able to classify processes based on hierarchy like process one has a child process two, et cetera, and by organizational purposes like this is a shell process, this is a demon process, et cetera. And as you can tell from this already, process can belong to more than one hierarchy. So how do we do that easily? So the Linux kernel developer scheme of the concept of C groups which allows you to classify, not classify, but put processes in multiple hierarchies. So a C group is also known as a hierarchy. They use these two terms interchangeably and it's primarily used by the Linux kernel subsystems which I will talk about later on. So what's the difference between a process and a C group? In a Linux OS, when you boot up your machine, there will be a process called the init process which is started by the kernel and most commonly nowadays, we use something called system D which is rather controversial if you look it up. So system D will have the PID number one and it has a very special responsibility. It is responsible for spawning everything else your Linux kernel runs and it also has the additional responsibility of grouping processes. So why is grouping a process? So when a process spawns a child, and the parent process dies, the kernel will automatically re-parent the child process to PID one. And then the PID one now has the responsibility of ensuring that the child process dies normally. So in a Linux, a Linux world, before a process can die, the parent process must wait for its return code and some other statistic. Otherwise you will live on in the kernel as a zombie process. So if you run, if you do ps, grab, set, you will see some zombie processes hanging around. Those processes haven't been reclaimed by your init process. So yeah, so that's the special responsibility of the init process. This will become important later on when I talk about Docker, who? What happened? Yeah, so a process can only have one parent but a process can be multiple C groups or hierarchies and both are hierarchical in nature. So how the C group works by a virtual file system which is mounted by system D at this part and everything like adding a process to a C group, removing a C group, creating a C group is done by creating a folder in this mount point or editing a file. Yeah, and because this is a virtual file system is, well this virtual file system is lost upon a reboot.  So these, most of them are created by the sub, Linux sub system, except for this one which is created by the system D init process. And if you look at the system D C group, you can see all these files. The red bolded text are folders, the rest are all files, are hierarchies. So these files, the hierarchies are basically child C groups because a C group can have children as well. And the task file is just a text file with a list of PID that belongs to it. And the C group is a list of thread group PID. So the difference between a PID and a thread group PID is that in Linux, every thread has a PID. So yeah, and then a thread group ID just says like this process parents, is this PID? And then the rest of the files are probably specific to the sub system and generally not interesting. So yeah, you can see the type of subsystems you have on your machine by running this command. So you can see, these are all the subsystems of my machine. Yeah, I won't go too much into the details of the subsystems because they are quite dry. Yeah, and you can see the C group and subsystem for a process by running this command. So yeah, in Linux 4.4, all these bunch of subsystems, each subsystem will create a C group and then you'll place processes inside the C group based on its hierarchy. So some subsystems don't really do much. They just collect data like CPU accounting. It just collects how much CPU time you have spent. And some subsystems impose controls like how much CPU time you can use, how much memory you can allocate. And some subsystems do freezing and thawing of processes like the freezer subsystem. Some subsystems make use of the entire hierarchy of the C group, some they just don't bother. So C group is basically just a generalized hierarchy of processes that subsystems may or may not want to use feature. Yeah, so if you've seen a previous slide, I say V1. So there's a V2 now. I don't think any, at least Ubuntu is not using V2 at the moment. So because as you see, V1 has many, many C groups for many, many subsystems. So there's a wish for them to unify all that over that into one single hierarchy. So you can only have one hierarchy, which is what V2 is supposed to do. But there is not much use for it yet. So all these, these two features of the Linux kernel are basically what powers Docker. It allows them to run processes in its own little sandbox and doesn't allow you to affect the rest of your OS. The difference between Docker and Lexi is that Lexi is supposed to run sort of like a version machine without the hardware emulation overhead, whereas Docker is supposed to let you run one single application inside a container. So also by default, Docker doesn't do storage persistence unless you change some commands. So here's a diagram about the key differences between Lexi and Docker. As you can see, Lexi is designed for running a VM without the hardware emulation whereas Docker is meant to run applications. So Docker used to use Lexi as its containerizing driver of sorts, but in recent times, the authors of Docker have abstracted this onto something called LIT container, which still uses Lexi on Linux to run its containers. But the hope is that in the future, if someone wants to run Docker or Windows, someone can write an execution driver for that. So these are the features of the Linux kernel that Lexi uses. So how does Docker deal with data? It uses a bunch of layers that are all read-only and then it stacks them up together to give you a unified view of your file system. So when you run a container, it creates a thin container area that is read and write for you to change your data, which is then thrown away when the container is removed and below the container is a read-only image like this Ubuntu 1504 image, which all the layers are read-only and they are addressed by cryptographic content passions. So as you can see, the system works with a copy-and-write algorithm. So if you want to modify a file, you copy a version of that file all the way to the top layer and you modify it there. So if you want to create a layer based off the Ubuntu-based image and you change some files, only the changed files will exist in this top layer, whereas the rest of it unchanged. It's basically reusing the same layers.  AUFS stands for Advanced Multi-Layered Unification File System. I think it used to stand for another Union file system, but now they thought it's not cool enough. So AUFS was the first driver that Docker used. So you can see that it basically maps one-to-one with the Docker image layering feature. So at the top of it, you access the AUFS system using something called Union Malfoying, which shows you a unified view of all these different layers. AUFS calls these layers branches. So yeah, these are all, each branch basically corresponds to a directory on your actual file system. So what happens when you want to modify a file? Say I want to modify file for at this layer. So basically I just copy it up and then I modify it. What if I want to modify it at the container layer? I just copy it up again and I modify it. And the AUFS file system will just go down from the top layer to the bottom and find the first file that it sees, and that there will be the version of the file you see. The only problem is, what if I delete a file? So AUFS uses something called Wipe Out File to say that this file is no longer existing. So like the container wants to delete this file, just puts out a Wipe Out File and then AUFS will report that the file is no longer there. So the only problem with Docker is that it makes running some applications needlessly complicated. And the first one is the zombie reaping issue because by the way, well, the idea for Docker is that you want one single process inside your container. But as we know that there are many processes born of the child processes like Nginx, for example. And if the parent process that is born of receives a zombie child, it probably doesn't know that it needs to reap it. Otherwise, the zombie child will linger around in the kernel as a zombie and it will never be reclaimed by the kernel because the kernel doesn't do it automatically. And so the good guys at Fusion has come up with this base image Docker which helps you deal with it with 100 line plus Python script. And I'm going to demonstrate later about how complicated, how many containers you need to spin up just to run a simple Rails application with Nginx reverse proxy and SSL certificate. Yeah. So you expect complicated why still use Docker? Yeah, the problem is, the whole is Docker has been quite marketed heavily and it's generally, it's definitely nicer to use Docker to contain all your dependencies rather than installing dependencies manually on your machines. It's definitely nicer. It's once that better. It's just that it's still quite complicated. It's quite painful to use. So ideally I would like to use Lexi, but Lexi is even worse than Docker to use because the documentation is terrible and the command lines are not that great as well. So we solved one problem but created another problem. Yeah, I know. Okay. Yeah, so you can see how complicated the Docker run command is. It's not even showing everything yet because... Yeah, so you see the help is so much. So yeah, it's not very fun. So I'm going to demo how to run a very quick Ruby on Rails application inside Docker container with Nginx reverse proxy and a let's include TLS certificate. So yeah, make a simple Rails application using Postgres database. And then I write the Docker file which will build that application inside an image. I can go through this later on if you can ask me in person, but that's the file. And then the first step, I need to create a network for my Ruby on Rails application and I need to build the Rails application. Then I need to start the containers using all these things. So what happens if you want to really pull this on another computer? You're not gonna write a shell script to do this, are you? Because it's kind of painful. So here comes Docker Compose. So Docker Compose allows you to write all those things that are written just now in one single email file. And it also allows you to declare a dependency tree between your container so that it will start container one before container two. Like you start a DB before you start a Rails app. The, yeah. And then you can just start the containers with the single Docker Compose app. So everything I'll show you just now can be written in this gmail file. What's next? Okay, this diagram is how I'm gonna set up the NGX Reversed Proxy with the Rails application and a Let's Encrypt Certificate. So I've shown you those two containers just now, a Postgres database and a Rails container. These two containers live inside this virtual private network which I've created. Let us just call it Rails. And then I have a separate setup which will live under the NGX network, private network on your machine. These are all on your host machine. So I need to start three containers. First is the NGX container. And I need to mount all these directories inside the NGX container onto your host as a volume so that other containers can access it as well. And then I need something called a NGX Generator Container. So this container is some script that someone wrote that will, okay, wait, before I do that. So Docker, the Docker demon runs, provides a REST API mounted on the Docker socket which is this path. It's a unique socket that the Docker client which is the Docker command it's not just now will talk to interact with Docker demo and machine. So it provides a REST API. You can even write your own Docker client if you want but the default Docker client will talk to this socket. So this NGX Gen container will listen on the Docker socket for new containers joining, they are being run on your host to see, oh, this container says I want to be reverse profit by NGX. When it sees a new container like that, it will write the various configuration files for NGX and then it will signal the NGX container to restart itself to use the new configuration. So similarly, we have a Let's Encrypt bot that runs here that will listen for new containers to say I want a new Let's Encrypt certificate. Then you will generate the certificate and you handle all the protocol challenges that NGX Encrypt issues it and then you will write the configuration file, you'll save the certificate there and then you will signal NGX to restart itself. So that's this entire setup about how you can do it. And yeah, of course this NGX container needs to expose the pod or pods to the rest of the world. As you can see from this diagram I know none of these containers are accessible from the internet. Only the NGX container is accessible from the internet because they are all on their host's private network. So yeah, to set up the NGX containers, you need to use this pretty long double-composed file and I'm gonna show you how it works now. So the first demo is just the Rails application running of the Rails server without any reverse proxy using double-composed. So this is the double-composed file, which I'll show you just now.  And I'm gonna use a text-based browser to show you that it works. But notice that I still have to use pod 3000 because it's a, yeah, that's it. That's the first one, simple. This is the second demo I'm gonna show you running the Rails application via reverse proxy, NGX reverse proxy. So yeah, the difference, oh, wait, oh yeah, this is just to show you the NGX setup that I've done just now and that it's the same file that I've shown you just now. And then I'm gonna just show you that it's actually running right now using this component. Yeah, and then I have to use a slightly modified compose file. Actually, I removed this time, but it's okay. So to tell the NGX Gen container that this container wants to be reverse-proxy by you, I simply add this environment variable to the container and the rest of the stuff are the same. Oh yeah, I also have to ask it to join the NGX network and then I just run this and I'm gonna open the text-based browser again to show you that it works. This time round without the 3000 in the back. Yeah, it works. Okay, the next one, which is what I promised in the title, which is to run the Rails application with let's include. So this time round, I have to add new stuff to the double compose file again. Yeah, which is these three new environment variables. This one is the host name, but you have to give let's include email address. And I said this is true because I don't want to use an extra cell, I want to use a tested, but normally if you run this in production, you will not have this line and everything else is the same. And then I just do double compose up. I can explain more if you ask me later for more details. So notice that I visit the site without the HTTPS in front and NGX reverse-proxy will automatically redirect you to the HTTPS version. Yeah, as you can see, there you are, it's HTTPS in front. Let me quit the browser. I want to show you the extra certificate itself. Sorry, I was copying and pasting a comma. Yeah, so this is the extra certificate. You can see it's a fake CA because it's a test certificate. These are just the hashes, blah, blah, blah. And then, yeah, you can see it's by, somewhere it says it's by let's include. Yeah, see the CN, let's include. Yeah, that's it. Just to show that it's actually by let's include. So yeah, can we have simpler containers? There's something called LexD, which is basically LexC with nicer tools. They built on top of LexC with a nicer REST API and nicer command line tools to make it easier for you to use LexC. And then someone wrote something called Bokker, which is just docker in 100 lines of batch. If you look at the source code, it's basically just setting our new main space, new C groups and executing them. So you just try to demonstrate that whatever you can do with docker, you can do it easily with batch. But of course, docker does some nicer things where you like create networks where you can create like overlay storage devices and the layering system there. So it's just a framework of sorts. It's like rails for building website, but in this case it's for running containers. And there are many, many other efforts to do this. So yeah, that's the end of my talk. Before I go, I need to talk about this briefly. So basically we are trialling this, I think it's better for me to show you the site than talking about it. Is it F? Wow, it doesn't work. Can a Mac user please help? Click on it. Okay, anyway, it's this page. So basically, we are testing our new platform for you to make a quick buck by building for these tasks, which are just like simple programming tasks for you to earn some quick cash. So if you want to find out more, please talk to us after this. There's some ideas there. It's not really ideas though, it's our own stuff. Yeah, okay, thank you. Does anyone have any questions for your awkward about the stock? If not, then we're done for today. Yeah, just wondering, right? Why don't you put every single application into one container? Because how Docker is designed is that it's meant to run one. Can you refresh your question? Do you mean like, why don't I put everything inside Docker containers? Okay, is it possible? Not really possible because Docker is designed to run one process. So there are many applications like the Hadoop world of data processing, right? They expect you to run many processes together to do the one thing, like Spark is terrible for this. I tried to put Spark inside a container and it just ends up with thousands of zombie processes because the main Java process doesn't know how to read the children. And it's just not ready for it yet. So in this case, I think Lexi and Lexi will be better. I've not tried it yet, but yeah, still we are trying it. So Docker isn't really good at killing zombies? No, Docker doesn't care about a zombie.  Yeah, that's right. Like you mentioned, you could include that in your system and try your Docker. You don't really want to run a unit system inside Docker because it makes it really heavy. So there's this, in my slide, there's this base image that Fusion has created that will help you, where is it? There's this base image that includes a script that helps you deal with the, it's not an unit system, but it will help you read the children if necessary. Yeah. Okay, thank you. Does anyone have any more questions? So you say that we cannot run Spark on Docker. You mean that Spark has a very complex dependency? It's not a dependency issue, it's the fact that Spark doesn't have a client server model, at least for the old version. There's a new version with a client server model because you want to run a client inside the container and then your hard to cluster will be the server so that you can call the Spark server to run whatever jobs it needs to do. Currently, with the stable version, it's not really very well. So I had to package the entire Spark binary inside the container and it makes the container really fat. It's like a few gigabytes, not very user friendly. And then like I said, there were a lot of zombie processes that results from it. Yeah.  Oh, what's your take on that? I don't know what happens. I haven't heard of that. Yeah. Can you tell me some background? So one of the, it's speculated that one of the founders of Docker wanted to call Docker and come it off as a new base. Why? Because of internal issues. Oh, okay. I've not heard about that. I don't know. I'm sorry. In practice, how do you supervise all these containers because if you don't, you can't handle it? I mean, Docker daemon has an API for you to, I think there are some tools that help you do this. And Docker has, everything that you run is like, oh, this spits out a lot so you can supervise it from that. So you just have to do the tooling? Yeah. It doesn't provide it by itself, which is why it's paid Docker to do it for you. They have a paid solution. Or you can build it yourself, yeah. Can we look at Kubernetes? You can use Kubernetes. I, yeah. Yeah, Kubernetes is another one. I've not had the chance to mess with Kubernetes yet. So there are two, I guess, competing, Kubernetes and Docker swarm. Docker swarm is by Docker. So the API is more familiar, I guess. Whereas Kubernetes is different. I've not really tried both yet so I can't say much. Find the popular networking, there's a solution for networking quite handy. Yeah, there's some legacy behavior they try to preserve and they want to break back the compatibility. So yeah. Any more questions? If not, thanks, government. Okay, bye. Taking a break for next...


Tuesday morning to you. My name is Hilda Wadidi and you are watching Enterpreneurship Tuesday. As you know, this is the show that lets you know how young people out here are making ends meet, how they're enjoying themselves and still getting some checks. So now our first interview for the day on Enterpreneurship Tuesday is a focus on photography. So if you do want to participate in the conversation, do make sure you slide into our DM at Y254 channel on Twitter. The hashtag is Enterpreneurship Tuesday on Facebook at Y254 on Instagram at Y254 underscore channel and on DSTB Bear channel 376. So make sure you do participate. So it's about time I introduced a gentleman with me in studio. So focus on photography. Focus photography is here. I know the plan is twisted. Focus, focus, focus. But anyway, let them say good morning to you first. Hi, my name is Steven Gerald. Focus photography, media and publicity. Okay. Yep. My name is Rohan Cherry, founder of Focus Photography. So let's go back to the basics. When did you guys find your passion in photography? And why did you decide to pick this particular line of work? I think it found us, if I can say that. It's one of those things that I was always curious personally when I was growing up. My dad would kind of buy cameras and maybe like a week later that camera's gone because I'm busy messing with it or whatever. So it kind of came to me that way. And I just always had a fascination with it from then on. So for how long have you been doing it? Professionally. Maybe going into our 10th year now. 10 years. Yeah. But I've used to mess around with cameras since we were kids. And yeah, so it's been a really long time. Okay. So what about you, Steven? It's a pop photographer. I've always loved art in general. Growing up, my big sisters and brothers were always artistic. My mom is very artistic. And later on, meeting up with Rohan, we always used to do video work but love photography. And I think that's when we decided also to start doing it professionally. But my background is artistic. Your background is very artistic. Okay. So let me ask you, did you train yourself to do it or did you go somewhere where you needed to train? How to do it professionally? I think that's our question. Most young people tend to ask themselves, do I need to train? And where did you guys train? Most of it is actually self-taught. Personally, I went to film school and I think that's where I kind of developed my skills a bit. You went to film school? Which one? The New York Film Academy. Okay. So that's kind of where I developed my understanding of film and photography. But the basics were already kind of ready there. I'd already started. So you can do it yourself. You can sort of start it from just a basic, just having a phone and kind of teach yourself from there. So it's just passion. You like it, you just teach yourself. Exactly. What about you, Steven? My undergrad is in communication. Back in the day, kind of old. We didn't have a film like we do now. So my background was in communication. But again, my diploma was really hands-on because back when I did my diploma, we were actually doing photography with film and you know, that's back in the day kind of photography. You had to finish the film before you start a new one. So my background is a bit different because of the basics that I went through. But yes, to answer your question, I think if it's a field that you feel you want to get into, it's also good to get the books so that you can be what we now call a professional. You can back it up with the paperwork and you do it practically. Okay, interesting. So I like the fact that you mentioned that back in the day things were done very differently. Technology has really changed from back then until now. How have you guys been able to keep up with it? To keep up with the new technology, to use their new equipment, their new software because now everything went digital. How did you guys transition and manage to stay afloat for almost 10 years? It's a constant transition. You have to keep up with everything that comes. You have to be knowledgeable with the latest equipment, the latest software just to stay competitive. Yes, you can be niche and I've seen these photographers who still use film and that's fantastic, but you'll have maybe a few headaches trying to process film and all that stuff. But to stay, I think to stay competitive you have to keep up with what's happening now. So we're kind of old, we had dinosaurs in a bit, but so we had to kind of like... The dinosaurs! Yeah, but we had to evolve and be like, no, we have to do this otherwise we'll be just left behind. Okay, so let me ask a question that most people tend to ask specific photographers because I think it's different for all of you. What do you call, what do you categorize as a good picture? What factors do you look for for you to say now this is a good picture? That is such a tricky question. I mean you could say things like composition and lighting, but I've also realized, I've come to realize that everyone's taste is different. Something that I find compositionally fantastic, someone else could just find completely nothing, you know, like then it doesn't attract them, it doesn't draw them in and vice versa, you know, something else that's maybe underexposed, someone might think that's fantastic, but to my I'm like, well, so I think it's completely subjective, but they are fundamental that of composition and lighting that make a good picture technically. What about you, Steven? What do you believe makes a good picture, considering you're the superb photographer? I think it's again subjective, but it depends on what you're doing the picture for. If it sends the message that you wanted it to send. So for you it's about the cause? It's about the cause, yes, because as he said, you do something different for something and someone wants a low exposed photo because of a certain reason and someone wants a good exposure photo because of a certain reason. So for me, at the end of the day, it tells the message because a picture is supposed to say more than a thousand words. So if it does that for you, whichever method you can achieve, then that's a good photo. Well before, I think we'll go back to that because when we look at some of your work, I think when you explain how you took some of the pictures, you'll be able to see some of those aspects being brought out. But in the space of entrepreneurship Tuesday and trying to promote the young people that are trying to get into this, as a photographer, what is it that I must have? What should I have? Like for the basics, the basics, if I wanted to become a photographer today, what tools do I need? Basic, basic, the most basic. Drive and passion. Drive and passion. What about a quick-med camera? If you've got a phone, I would say most young people might probably have a phone and which has a camera, you can get started. So the equipment is not, that's not what I think you should be worrying about at the beginning. As long as you have the drive and the passion for it, that's a good place to start. Steven, do you feel like you want to add on that drive and passion? No, because at the end of the day, what I've also come to realize after these many years in photography, I also tend to believe it's not the equipment that you have, it's the idea. Because many people don't have lights and flash, speed lights and different type of lenses, but if you have the idea in your head, you'll find a way of achieving it, even using the sun. So at the end of the day, as I said, it's what you have in your mind, trying to bring it out. The equipment comes to help you do that. Okay, so I want to understand how you two meet. That's something else that people are curious about. How did you guys meet? Where did this union begin? It's not something I wanted, but it just happened, I guess. No, we used to work together at a company called Blackstar, which was an events company, but we used to do TV shows and various things. So I had joined in 208 working on a TV show, and I think he came just a few years later, and then we just clicked. And yeah, from there, just... And you decided to start Focus Photography? Yeah, well actually, I started Focus with another friend of mine who I've known since I was born, basically, with family friends. But we didn't realize that we both liked photography until much later, and when we did, we're like, well, why don't we come together and start something new? And so we did, and then yeah, and then Steve came over, a little later. Tell me about the process of forming the meme. Focus, focus. I can tell, photo, focus. Like I said, we're old, right? So in the 90s, there was this whole thing about pH, fat, like you say, that's fat, and it was pH. So yeah, my partner was like, well, it should be focused on the pH, and I'm like, sure, yeah, why not? And you just ran with it? And we just ran with it, yeah. I think also it's kind of laziness, because at that point, when we're going through so many memes, you know, focus is fine. You had given up and it came to look you for a name. Okay, interesting.  How did you get your presence online? I think that's a story you would like to hear. I like how you talk about online. We were way before. Yeah, then I saw you. Yeah, exactly. I think when we started, it was with those words of mouth, basically. I mean, I think our first wedding was for free. And then the next person kind of saw a photo. We build a website. Oh, you did a few pro bonos? Yeah. When we started, it was mostly pro bono. So then, yeah, that's when we started using Facebook and our website to kind of promote our work a little bit. And it took a couple of months. I didn't even say almost a year before we actually started getting paid on a regular basis. Almost a year? Oh, so the things require patience? Yeah, a lot of patience. You forgot to mention that in the requirement. Because maybe I'm just going to go out there and immediately start earning money. Like, you know, it takes a lot of work. And I wish, like I wish I'd done maybe a mentorship before that. I never had that chance. Because we just went straight into it. But I think that's something that's really important that's kind of missing these days. Back in the day, if you're getting into photography, you'd kind of be under the tutelage of a professional photographer who kind of show you the ropes and then you kind of learn that way. So that's another way, which is, I think, is being lost, but kind of should come back as well. The apprenticeship. Apprenticeship. Apprenticeship. So one of them. It's been a long time. Anyway, Steven, let's talk about you. I think, are we supposed to mention that we had a company before? There's no problem. Say it all. Again, also about the photography, we also had a company before that was called Why Not. That's why my Instagram handle is Steve Why Not. Why Not? Yes, because that was a company back then. So again, even then, we were still doing a lot of photography. And I think it also kind of helped because we had material from way back. We just didn't open focus photography and begin from scratch. We've been doing photography from way back when. So when the digital platform came on, we started uploading. And it also helped apart from word of mouth. Apart from word of mouth. Wow.  So opportunities need to find you ready as well. Yeah, basically. Okay, so let's look at some of your pictures and then we can talk about your style and the techniques when it comes to that. So I think if we can have it on the screen, it would be really good to have some of the pictures. Yes, yes, yes, yes. Now we have this one. Who took this one and what was happening? This was an engagement shoot for this lovely couple. And they just wanted something very natural and just out in the open and in nature. So fortunately, we found this place in Karen. Yeah, and they were like, I think one of our favorite clients, they were very relaxed, very chill, open to suggestions. They were natural themselves. Very natural. Yeah, very natural. I can see one Sarah Hassan. Yes, Sarah Hassan. The Queen of Plan B. Yeah, so this was at Sovereign Suits in Nemuru. It was actually for a pilot for a TV show. So I was just doing the kind of behind the scenes photos and yeah, there was this window and I just thought, well, I don't want any extra light from it. Just had this lovely light coming from the window. Because you can see the darkness. Yeah, the shadows are really loved it. Yeah, that's another friend of ours. She's actually a makeup artist and she kind of did makeup on herself. Oh, so now you had to take a close up. Yes, I really wanted to get the detail and stuff. So yeah, so yeah, that was that one. She's also a photographer. She's also a photographer herself. What is happening here? This was for blankets and wine. I think it was like sometime last year. Yeah, and he was one of the performers and we just wanted to try something different, just minimal light. I think it's just one light on that one. Yeah, so we just wanted to play around with the shadows and yeah, keep it simple basically. I can see the way the light was just focused on his heart.  What do you call that? What technique is that? What do you call it? It's just a raw thing. It's just a focused thing, I guess. Okay, so let's talk about things. What is happening in the field? Tia, she was a musician. I think she's more into makeup now. Yeah, so she needed some promo pics, which a lot of artists come and they constantly need to update their catalog and their photos that they can use for the next couple of months or a year or whatever. So yeah, she needed some promo pics. So we really wanted to focus on like just a close-up of her face. Why? What is the story when you focus on someone? For me, it's always about the eyes. So I always want to capture as close to the eyes as possible and keep the eyes, because that's the first thing as humans you're drawn to.  So for me, that's my biggest focus. How do you get babies to focus? So I can say you have a baby over here. This is maybe one of hundreds of photos. Yeah, so you just have to be ready for the moment. Yeah, babies, you can't really tell them anything. So you just have to be ready for them, basically. They're not going to wait for you. So you have to be the one who is the time being proper, your timing has to be correct. That is my sister. So this was their pre-wedding shoots. Very randomly, I just had this idea as you're driving down towards Naivasha, this forest. And we ran down there first thing in the morning. Now that's the thing. So there's a guy where she stopped as we had parked and he's like, what are you doing? And we're like, oh, we're taking photos. He's like, don't do that here. So we did this very quickly and ran off. But it was lovely. There's another one where it was foggy and it was really nice. I can see a superstar here, Adele Nyango. So she's been taking photos with us for the longest time. So every year or so, she updates her photos and she always comes by and has amazing fun. What is this technique? What is this tree? What was the story here? What was the story? What was the cause? Steven, you're big on causes. What was happening here? As I said, the picture is speaking to you. It's working. But it's a fun technique to try out as a photographer. We wouldn't reveal our technique because whoever wants to try it, of course, it's very simple to do. But you just need a little patience. And I have to say, having a good client like Adele who's willing to experiment, you know, you tell them, I've got this idea. And they're like, yeah, okay, fine, yeah. It's always fun to work with people like that. They allow you to be creative. So that's, that's always fun. So some of your clients, they were assistive. Oh, yeah. Yeah, yeah, yeah. Absolutely. Yeah. I can see another love scene. Yeah. It's a cute little wedding scene. We like shiny, happy people. So yeah, it's always fun. It's more fun to capture, you know, people like having fun. I have thought something like wildlife on your own. Yeah, we do that as well. Yeah, yeah. I can imagine. Is there a difference? Like, can you take us through that big difference when it comes to taking pictures of humans and taking pictures of wildlife? The difference is you just have to be ready.  You just have to be ready. But funnily enough, that's what I initially wanted to do when I first started out. And I, I don't know why I haven't had it for a really long time, but actually, yeah, I'm going to get back into that. Well, babies are kind of the same. Yeah, mostly. You've got life and baby. David, you've not shown the babies nicely, right? I have a small baby. Yeah. And he can attest. I don't have pictures of her like for four months because she's always running around. It's hard to get it. You need the patience. Yeah. Okay, let's talk about something that you've talked about, which is dealing with people. I can imagine in your industry, you have, like I can say, both interact with a lot of celebrities. How do you deal with that difficult client? Or you take photos and they're like, no, I don't like this. Do this. Actually, we've been super lucky actually. We've never had a difficult client. They're usually very open to our ideas and we always want to hear what they bring to the table. I can't think of anyone who has been. Don't know that you mentioned them. Generally, I cannot think of anyone who is like difficult. They're all pretty decent people. Yeah, yeah, pretty easy to work with. So the superb photography, is your story, they say? I think the thing is, if you meet with your client and you have your pre-planned shoot and you know what you're going to do, and you deliver what you say you're going to do, then it becomes a bit hard to get an irate company. Yeah, and I also think it's nice to have a rapport. Like, even before you started shooting, it's good to talk and just get to know each other a little bit and see if it's a good fit.  So it makes it a lot easier on the shoot. Okay, so how do you retain your friendships, your customer relationships? What do you do? What do you do? Is it that you do hang out with them? Do you make a personal point of knowing like maybe their lives? What do you guys do to keep up with them? We pay them once in a while. You pay them? I keep coming back. Your models. No, I mean, again, it goes back to having a rapport with them. A lot of these guys, we end up just being friends and yeah, we can hang out with them after work. But when it's professional, we keep it professional. But we kind of know your boundaries as well. You know, you don't just start calling people out for no reason. It's like, okay, we took photos of you, but we're not actually best friends now. So you have to keep a professional kind of relationship and yeah. I can imagine, that's interesting. I can imagine you come, as much as you've been in the industry for a minute, the market has now become saturated. Now we have so many photographers coming up. All over the place, all over the country, all over the world. Everybody is now taking photos. How do you deal with the competition? How do you manage to stay afloat? I think one is that the word professionalism for me has been misused a lot.  And that's where the difference comes in. And once you even in your own life work with a professional, you'll always find the difference between the two. And it goes to anything as simple as even going to a couch. You can go to a couch on the roadside and he treats you professionally like he doesn't pinch money from somewhere, your car. And that's what the difference is. So even if the market is saturated, whenever you encounter a professional, you'll always know the difference between a professional and someone who bought a nice camera and has nice equipment and has a big name on social media. But it's even as simple as keeping time. And that's for me. Oh, as simple as keeping time. Yeah, just as simple as keeping time. And as something also as simple as if I meet and tell you this is what I'll do. And I do it. I deliver it on time. Those simple things will keep you very different from someone else. Yeah. And also, this might sound weird, but don't get comfortable. You can't get comfortable in this industry. Yes, you might have been doing this for 10 years and your name is out there. But every single day, there's another 10 new photographers. So you cannot get comfortable. They are now coming up. So you have to like keep trying to outpace them. Yeah. You can't just sit back and say, well, people know me now. So that's the end of that.  Okay, interesting. So let's talk about some of the challenges and the changes you would like to make when it comes to the photography industry. Oh, should I call the new industry industry? We will be not specifically photography. Are there any trends or changes that you think the government can make to make your life easier? The government? Yes. Even just generally, even just the environment, like what can be done better, even in our country in terms of the laws and rules, that would make your lives easier. Is there any encounters that you've had that have been very disturbing? Like, yes, like I said, the one you talked about when you went to take the picture in the bush. Yeah, security. Yeah, let's talk about that. Which is weird because that day, I mean, a guy literally stopped him, like he was heading to wherever and he still had to stop us and be like, just be careful because of security. But there was another day we were shooting in town and city council were on us like that, you know, and they were willing to take me to jail. And I'm like, one like on the street, we're kind of off to the side. And I mean, I think they just wanted something, something. But those are the kind of things I wish were better addressed by our government. But that's that's a personal thing. Steven, head of publicity. Please, can you say something? I'd like to speak on more the photographers. I think many people have always tried to form something so that like when we do photography, you can tell who the professional photographers are and who the not so professional photographers are so that clients who need to work in can kind of like distinguish who's who for me that that would be good like a database. Yeah, so that kind of like the guys who are doing good stuff are separate from the people who are not to be categorized. Because there are so many factors, like someone would come and tell you, I want to take a picture for a hundred. And someone else will charge you a thousand. You'll see the difference at the end. But when you walk in, of course, you want to pay 100. And that's why I want to put that kind of like professionalism different from walk-ins and people who are not yet there yet. Yeah, so that you can also grow the ones who are coming up and just distinguish between the two. But I think that might kind of stifle the industry or at least the amateurs because they might never get jobs because of something like that. You know, like if there's a net under the wing. Yeah, so it goes back to apprenticeship. It might work. Yeah, it might work. It's also in the area of apprenticeship, I would so to speak. It's about time we conclude this interview. But I'd like as a parting shot for you four photographers out there. I know you've seen a lot, even a lot of knowledge already. But as a parting shot, aside from drive and passion and patience, what else can you tell someone at home who is interested in this? Get started now. If you, again, you've got a camera in your pocket. There's nothing limiting you. That's a great thing about photography. If you've got the sun, a bit of light and a camera, I can't see any like too many limitations to your passion and there shouldn't be. And you have to start from somewhere. We didn't just wake up with cameras in our hands and we have to start from somewhere. So don't be afraid to experiment as well. Don't be afraid to, just because you're seeing this person doing that and you're like, I can never get to that level. You do your thing. People will gravitate to you. It's, that's the great thing about photography and art in general. People will gravitate to your art, to your truth and be happy with what you do first and then worry about the rest later. So get started and explore and the universe will do its thing. Okay, what about you, Steven? I want to say again, if you're trying to do it as a profession, where you want to do photography and make money out of it, be professional. Yeah, just read what it needs to be a professional and do it. If it goes, if it means getting the paperwork and after you get the paperwork, when you start working, be professional.  Yes. I can also see patients hidden somewhere inside. All the tenants of being a professional. Okay, can you please let the fans know your social media handles as well, where they can reach you in case they wanted to. Yeah, on IG, yeah, on IG were focus underscore photo, so focus ph, ph fat. Focus for fair. Yeah, our website focusphoto.co.ke and Facebook we are focused photography. Yeah. All right, thank you guys so much for coming to the studio. Have a beautiful day. Yes, you've been talking to the gentleman from Focus Photography. We've had Steven Gerro and Juan Roy Cherry. Thank you so much, gentlemen. Please do not go anywhere. It's Entrepreneurship Tuesday. We've been talking about photography. If you wanted to get in the industry and you've just tuned in right now and you missed it, don't worry at two o'clock. We are coming back. So make sure you do follow up and also on YouTube at Y24 channel. My name is Hilda Aditi. One more time, please. Descend by for one very most


The Comptroller-General of Customs, Hamid Ali, has told the House of Representatives Committee on Finance probing MDA's compliance remittances to the federal government that claims of daily subsidy payment of 98 million litres of fuel by NNPC was not tenable. The customs boss disputed the figure by the Nigerian oil giant when he appeared before the committee. The deputy chairman of the committee, Saidu Abdelahi, in his ruling said it takes the political will of government to bring subsidy to hold as it is not sustainable. So how do we get to 60 million every day? So these are my issues, my problems. So the question of smuggling, Mr. Chairman, if you say this petrol is smuggled, if you release 98 million litres and then in actual you have released 98 million litres and then we use 60 million litres. The balance of the 38 million litres. How many trucks will carry 38 million litres? Every day there's almost 500. Which road are they following? Where are they carrying this thing to? Without missing words, we owe it to this country, we owe it to the people of this country to do what we think is right for this country. We're talking about 60 million that are going to subsidy payment that almost doesn't exist. If we, you did mention we talked about 38 million litres, that will amount to about 500 trucks leaving our shores on daily basis. We have investment in night concert. Has there been any time that our satellite capture image or images of trucks leaving our shore? So the question is, I think it's a very clear question. What is required is the political will to bring a hold to this. Please do subscribe to our YouTube channel and don't forget to hit the notification button so you get notified about fresh news updates.


Welcome to the session on TCP timers. In that first we will discuss in this video about the first TCP timer that is a retransmission timer. Learning outcome at the end of the session students will be able to describe the concept of TCP timers and they are also able to find the value of RTOs about content about TCP timer types of TCP timers. TCP timers, these topics will come under TCP protocol. In this there are different timers are there, we will study about the different timers. First to perform its operation smoothly, most TCP implementation uses at least four different types of timers. First one is retransmission timer, second one is a persistent timer, third one is a keep alive timer and fourth one is a time and wait timer. These are the different timers are there. In this video we will discuss about the first TCP timer that is retransmission timer. Retransmission timer, to retransmit loss segment in TCP, TCP employs one retransmission timer that handles the retransmission timeout. In upcoming slides we will use the RTO. What is RTO? It means retransmission timeout. The waiting time for an acknowledgement of a segment is an RTO. To perform this one we have to use some different rules that are first one is a when TCP sends a segment in front of the sending queue it starts the timer, when the second rule is when the timer expires TCP resends the first segment in front of the queue and restart the timer. When a segments are cumulatively acknowledged the segments are purged from the queue. Last one is if the queue is emptying the TCP start stop the timer otherwise it can TCP restart the timer. These are the different rules how to use in a retransmission of the timer. In that round trip time that is RTT, RTT is a round trip time to calculate the RTO that is a retransmission timeout we first need to calculate the RTT that is round trip time. However the calculating RTT in TCP is an involved process that we explain step by step with the help of some examples. Now, next point is a major RTT, RTT is a retransmission round trip time in that RTT is a round trip time RTTM indicates a major round trip time. In TCP there can be only one RTT measurement in progress at any time. If we need to find how long it takes to send a segment and receive an acknowledgement for it this is the measured RTT what is mean by measured RTT it means how long it can takes to send a segment and receive an acknowledgement from the receiver side that we can call it as a measured RTT, measured RTT the measured round trip time for a segment is the time required for a segment to reach the destination can be acknowledged in TCP only one RTT measured can be in progress at any time. This means that if an RTT measures is started no other measurement starts until the value of this RTT is finalized ok. We can use notations RTTM to stand to stand for measured RTT ok in the measured RTT how we how to send the data and how much time it will takes to reach the data to the destination if the user has started sending the data they how to wait until to get the acknowledgement ok. Smooth RTT that is the RTTS is a smooth round trip time. The measured RTT RTTM is likely to change for each round trip ok. The function is too high in today's internet that a single measurement alone cannot be used for retransmission time out purpose ok. This is simple example how we how to find out the smooth RTT initially we do not have any values that is no values and after first transmission that is RTTS is equals to RTTM. RTTS is a round trip time or smooth round trip time is equals to measured round trip time after first measurement both are equal and then after each measurement then we have to use this formula that is RTTS is a smooth round trip time is equals to 1 minus alpha into RTTS plus alpha into RTTM ok. What is mean by alpha in this one that is value of alpha is implementation dependent that is depends upon the type of implementation we are using the value of alpha we have to use ok. Most implementation uses smooth RTT called RTTS which is a weighted average of RTTM and previous RTTS ok here. If we want to find out the RTT in upcoming slides we will find out the value of RTTS RTTM and RTOS RTT deviation. The most implementation do not just use RTTS they also calculate the RTT deviation called RTT ok. First we have to find out the RTTO and RTTS and then we can go to the RTT ok RTT D that is deviation RTT deviation ok. Retransmission timeout we have to find out the value of retransmission timeout the value of RTO is based on the smooth round trip time and its deviation. How we have to find out this one it means originally or initially we do not have any values after that after any measurement then RTO is equals to RTTS into plus 4 into RTT ok. This formula we have to use to find the value of RTO that is RTO is equals to RTTS that is smooth round trip time plus 4 into RTT round trip time ok. Most implementation uses the following formula to find out to calculate the value of RTO. Now we can go to the think and write now it can contain one question that is when a synchronization plus acknowledgement segment arrives RTTM is measured and is equal to 1.5 seconds. Find the value of RTTM, RTTS, RTD and RTO ok by using this one just you have to find out the value of RTTM, RTTS, RTD and RTO. Now pass the video and find the value of this one you can go to the answer. Now first solution is already the how given the synchronization plus acknowledgement segment error is in 1.5 seconds that is RTTM, RTTM that is measured round trip time is 1.5 is equals to RTTS though after first measurement both RTTM as well as RTTS as equals. So RTTM is in 1.5 as well as RTTS is also 1.5 RTTD that is deviation we have to find out they have given the RTTD that is 1.5 divided by 2 is equals to 0.75. So RTO is equals to RTTS plus 4 into RTD then we have to use this formula that is the RTO value is 4.5. This formulas we have already discussed in the previous PPT that is in the RTO as well RTTD, RTTES and RTTM ok in this one the applications of TCP timers the TCP timers can be used while transmitting the data from different users before transmitting any data the user how to check out the TCP timers how they how to transfer the data and how they how to wait for the acknowledgement in the main point in the TCP protocol how we how to find out the values and how we how to make the changes before transmitting any data then if the user is transmitting one data then they how to wait for the acknowledgement then after transmitting first data the client how to wait until to get the acknowledgement ok how they can send the acknowledgement and all those things it is they have given the applications of TCP timers there are different applications are there first one is time wait timer ok time wait timer it means first they will send the data then they can wait for the acknowledgement if the user is transmitting 2 or more than 2 segments then first they will transfer the first segment then they how to wait then while sending the first packet they how to start the timer then how much delay time they will mention then the current user how to wait until whatever the delay time they have mentioned then after reaching the data to the destination site then once again the user can or client can resend the next packet that is time wait timer it means first they how to wait after passing the first data that is used to use during TCP connection termination ok if the user want to terminate the connection first they will check out the start timer of the TCP then they will find out the time how much time they have taken ok second one is the timer starts after sending the last acknowledgement for second termination and closing the connection then how we how to start it means first they will start the timer then they can send the data ok after TCP connection is closed it is possible for datagram that are still making their ways through the network to attempt to access the closed port ok here how we how to send the data TCP connection is closed it means if any one user do not want to communicate with each other it means they can go to the termination phase this the termination phase we have already discussed in the TCP types types of TCP connections in that they we have to use this FIN command to terminate the connection in TCP ok this is the reference I use to prepare the above PPT. Thank you.