I will start with a quick introduction, I am Sunit, I work as an application developer in ThoughtWorks. I am with me. I am Girish, I am also an application developer in ThoughtWorks. So this kind of a little bit advanced topic on the container world, most of you I think must be having some sort of experiences working with the containers and all that. So what we are talking today is, I will just give you the quick overview first, we are trying something different, we will start from spinning up the cluster, so it is like zero and how we can get up and running in within the session itself, which gives you the feel of how easy or difficult it is to get all of this working in your environment, right. So we will start with spinning up the cluster on Google Cloud, by the time the cluster comes up and all that, we will go through why we need ServiceMesh, what is ServiceMesh, a setup, then we will do the second step, since the cluster is fresh new, we have to setup Istio and everything inside it. So we will setup Istio and ServiceMesh inside the Kubernetes cluster and then we will have, we will go through the Istio architecture, we will look at the different demos of all the possibilities or the solutions that we can put in the ServiceMesh, right. And then the demos at the end, right. Now, so to start with, yeah, so we have too many demos, so please bear with us if you go wrong somewhere, so, yeah, fingers crossed. Cool, so we will be setting up a Kubernetes cluster, to setup Kubernetes cluster, I, we went a little bit jazzy, we did not want to use a normal CLI, so we created a chatbot, so that with the help of which we will spin up a cluster now. So I will invoke this chatbot, okay Google, can you talk to Peter Griffin? Okay, let's get the test version of Peter Griffin. Hello master, what can I do for you today? Can you create a Kubernetes cluster for me? Okay master, how many machines would you like to have in your cluster? I would like to have three machines in the cluster. I have created a cluster demo cluster with three nodes. Thank you. Who is it? But you are the one who created me, master, have a nice workshop, bye-bye. Cool, so let's refresh the GCP page and let's see if Peter is telling the truth, yeah. So we have a demo cluster being in a creation stage, so it has three nodes. So let's go back to the slides till then, till it is up. So I think we got the cluster setup part done which is as easy as like you have a visual interface as well as command line also is just automated with the chatbot there, right. Now, once we have a Kubernetes cluster, I think how many of you are using microservice architecture or have worked on the microservice? Fair, I think now the next slides of things that I am going to talk about will I think you will be able to resume it well, right. How many challenges we face? I think when we start the journey for implementation of microservice architecture, I think there are many, many different things that we have to go through. So there are many cross cutting concerns that we have to implement, right. Starting from the simplest one is the service discovery, right. People can imagine, right, how easy or complex it can be, right. There are many ways and the most complex part is getting the client side discovery done. Otherwise every time when you are to make one service call to another service, you go via some gateway which is increasing the hop and increasing the latency, right. So if you have to take care of that right, otherwise your simple call on monolith will take milliseconds, here it will go into seconds, right. It is just there because we are calling too many services internally, correct. Now this is like getting it right is very important, right. Traffic management, throttling, right. This is also one of the key requirement that we have which is like, okay, one service is bombarding the other service and bringing down services for everybody else, right. So you have to make sure that you have certain throttling implemented, right. If one service goes bad, it is okay that is the only one culprit that will get affected. Then resiliency, circuit breakers, health checks, fault injection, all that is like, yes we have to do that, right. Going ahead with more security, very important, right. Zero trust, I do not want one service to trust other service by default. There should be some authentication mechanism, right. Authorization, all that has to be in place. They should be talking over SSL, right. Secure connections. I do not want to keep it open on HTTP, correct. All that needs to be taken care. Monitoring, again, how much response time that each service is producing, which can give me a ability to know that if I have a problem in my user experience, I can go and find out where actual bottleneck is, correct. And testability, if I want to deploy another version of a service, then it is important that I am able to test it before I roll it out to everyone, right. So AB testing, Kennedy testing, all that has to be done.  I always feel like I really want to do microservice or should I stick to my old ways of getting stuff done, right. These are the challenges. How many of you resonate with this kind of challenges that you have faced, right. It is important to get this right. Now, this is a scary thing, right. Because once you have too many services, you have large number of inter-service connections, right. The first time when I was doing this, after some time, I did not have any clue with services talking to with service. And then started creating diagrams, okay. Let us have some repository somewhere to make sure that we know who is talking to which service. Again, zero trust, authentication, all that is to be in place, right. Multiple point of failure, again. Standard applications, I can just fail my application and I know it failed. Now here I have to monitor like hundreds of microservices. One can go down and that can have a bad experience on the user, right. So this is all very critical in terms of implementing the microservices, right. But we have tools, right, which are even my obviously Netflix most of the time. We have many tools. We have a tool to take care of a problem, right. How many of you have used most of these tools? Yes, right, right. Now have you noticed this kind of, I am taking one of this example from the problems. Have you noticed this kind of a problem there, right, timeouts. One service to another, another service to another, another service to like that, it just goes on, right. Where do we keep all this configuration? We have to configure it, right. Where? Where.config which is inside your application, right. Now each application knows about this. One person changes it in one application. It can have a ripple effect over all the services, right. I am just creating the problem statement right now in the first part, right. Now this is where my all configs are, which is in the application. And this is where the challenge is. Now for each problem I have a tool that I have to use, right. Now for 10 types of different problems I will be using 10 different tools. Every time I have to go and research which tool is right. Is there any newer better tool available, right. So Uber is also publishing nowadays all the tools, right. As like Netflix, which one I choose. I have to make a choice. Then I have to implement it in each of the application. I have to go and make sure that each of the 30 services are using those tools, right. And the right versions that is also important, right. If they are not backward compatible it is going to bomb, right. I think it will not have the overall objective achieved. Again challenging, challenges that upgrading these tools. Or changing this tool toward your better tool. Now 30 services. One service nobody is touching from last 6 months because they are stable and running. That itself becomes a project. Oh we have to change this. Netflix, Zipkin 2, Uber, Yagato. Now let's take it as a project. Now that's kind of problem we start facing once we are into this world. The solution is service mesh where it can help to connect, secure and observe our services. So now on the application code side we have our microservice. This is a standard where we have our business logic. And along with the business logic we have our all the cross cutting requirements, right. As we talked about all the configs are stored within the microservice, right. All my configs of the timeouts and the libraries. They all reside in the same application code base. So in a way I am polluting my code base with all this knowledge, right. What could be better is if we have a part which is again a Kubernetes world definition. A microservice and a proxy. Now proxy replaces all this cross cutting concerns that I have to implement for the application. So let's say I have a two pod running. Each pod is having a microservice and a sidecar proxy. Now to talk outside it has to go through proxy. And even the incoming traffic that comes in is via proxy. So all incoming and outgoing traffic are via the sidecar proxy. Now that proxy is going to do the magic for us. And that's what the in nutshell is service measure all about, right. So it's like how many of you have used AOP in the Java world, right. It's like AOP of the Java world, right. On top of my service I have a proxy or alongside my service I have a proxy which is taking care of all these communication challenges, right. So with this proxy what I can do? I can do traffic control, bring resiliency, real drives, monitoring, observability, telemetry information and also bring in security. Service to service communication side proxy to proxy can be a secure connection because that's the outside of my pod, right. My actual service is talking to my proxy internally. Right, is this clear? Yeah, this is the main concept of the whole service mesh all about. Now on technology that are this has been on to assess from November 2018. We'll jump into the history of it now. So is there is an open source implementation of service mesh? It is created by Google, Lyft and IBM. So it allows you to connect, secure your microservices. You can do a lot of things like load balancing, observability, telemetry, authentication, authorization without changing any single piece of code. So that's where it is so much powerful. So before we deep dive into Istio, let's set up Istio first in our newly created cluster. So to do that we have Istio is available as a Helm chart. Helm is a package manager for Kubernetes. So it's just as simple as doing Helm install Istio. So there are a couple of steps which I need to do. First I need to set up my Kubernetes CLI so that I can connect to my newly created cluster. So for that I have already created a script which I can just invoke now. So it will get my Google account and get the configuration and put it in my cube config and my cube CTL should be connected to the newly created cluster in GCP. So if I now do cube CTL get nodes I should be able to see three nodes. So to set up Istio, so first we need to initialize the Helm in the cluster and then we can just say Helm install Istio. So let's do this, set up Istio. So this is going to take some time till then we can go back to the slides and talk a bit more about Istio's architecture. So Istio's architecture is very similar to how Kubernetes is designed. So there is a data plane and a control plane. The data plane basically consists of NY proxies. So NY proxies as Sunith mentioned they live as a sidecar next to your container. So inside a Kubernetes pod you will have an NY proxy and your application sitting here. All the communication between to service to service will happen via this proxy only. So this NY proxy was written by Lyft, a US based company. It's a very lightweight proxy written in C++ just 8 MB in size. The control plane basically consists of three components. The first component is pilot. The role of the pilot is to dynamically configure your invoice with the rules that you provide. So if I want to do any traffic based routing which we will see, we'll send those requests to pilot. Pilot will add the runtime configure those NY proxies. No restarts required. The next component is Citadel. Citadel manages all the certificates like TLS certificates in the cluster. It will keep on periodically also rotating the certificates as well. The third and the important component is mixer. Mixer talks to NY and collects all the telemetry data that is flowing inside the cluster. It will also make sure that the policy checks are enforced in the cluster as well. So we have a and yeah the communication between NY to another NY can be with or without TLS. So for demo purposes we have a book info application and Sunith will talk about it. So this is a book info application provided by the SPO people only for demoing their capability and everything right. Now in this book info application, it is simple micro service architecture again, there are multiple services and the one UI service or application learning. So this is the main product page from where it makes different calls. So one call goes to the product detail service. The another call goes to the review. I'll come to that. And review makes a call to rating. Now on review side we have three versions deployed V1, V2 and V3. V1 is simple without rating. V2 is rating in black color with stars and V3 is rating in red color right. Now these are the three versions available and V2 and V3 talks to rating to get the actual rating data right. So this is how the setup is done. Now with the SPO we will have the whole setup where we have every part running a service alongside a cycle proxy right. So each of this is having that and a ingress controller to start incoming requests. So to install this book info application we already have the YAML files that are Kubernetes YAML files ready with us. So basically these are the four YAML files, details, product page, ratings and reviews. What they will basically do is create a deployment object and create a service object correspondingly. So let's install book info application. It still is setup. So I am going to just say kubectl apply minus F the whole book info folder. So it will create service objects for four microservice and deployment objects as well. So now if I say kubectl get pods I see there is details product page ratings and there are three pods for reviews running because we have three versions and if you can see here Istio has injected a sidecar container automatically. So there are two containers that would be running for each pod. So if I refresh do kubectl get pods again. So I see each application now has two container up and running. So what Istio requires is that all the communication should all the requests should be incoming through its ingress gateway. We just need to configure the gateway. So people who have worked with HA proxies nginx will relate to this. So this is how you configure a gateway. You basically say this gateway will listen on these three hosts on port 80. That's we put in server blocks in an nginx config file. And then we do some pathways routing. We basically say any request coming from bookinfo.com if it has these URLs then read and then direct that request to a product page host on port 9080. Now this product page host is nothing but a kubernetes service. So we already created a kubernetes service with the name product page. This product page is registered as a DNS in the kubernetes cluster. So we are basically saying if the request is coming as bookinfo.com demo.com slash product page go to product page service. So let's install this gateway. So now if I go to my browser and go to bookinfo.demo.com slash product page we all we have our application up and running. So if I now review fresh you will notice the ratings are changing. Look at this part changing right. So no rating red color these are the three services. We're going in ground rubbing default way to each of the service as a simple contribution set up. So by default this is load balancing in a round robin fashion to v1, v2, v3. Now let's imagine a scenario that we want to control this traffic. Let's imagine a use case where we have rating service under development. It is not ready for production use case. We want to control we don't want any request going to rating service. So basically what I need is I want every user coming to my application should only see reviews version v1. No request should go to reviews v2 or v3. So how I can do that is so basically what I will say is I will divide my traffic into three subsets. I will say a traffic coming for reviews consists of three subsets v1, v2 and v3. v1 subset consists of the parts which have a label version v1. v2 subset consists of the parts which have label version v2. And similarly v3 subset consists of the parts which have version as v3. Now what I need to do is I want to say whenever there is a request coming for reviews, route it to reviews but only to subset v1. So I will not change any of the application code. I will not uninstall reviews v2, v3. Reviews v2, v3 will be running there. I will just apply this traffic route so that all the traffic now goes to reviews v1 only. Let's see this. So now if I refresh the page, I do not see any rating. And in n number of times I refresh, every time the request is going to v1. So that's where Istio comes into picture. You can control the traffic, any traffic routing you can do. Now let's imagine a second scenario. We have these ratings now developed but we do not want to roll it out to everyone. We want to do a canary release. We have a special user called Peter. I have already signed in as Peter. I will sign out. So I have a special user Peter. So when Peter signs in, he should only see the ratings. Nobody else should see the ratings. Just a canary release. So how we can achieve this with Istio is so we can do a header based content routing. We can basically say if the request is coming for reviews and the header contains Peter then route it to v2 subset otherwise route it to v1 subset. I do not change any application code. Just configure my envoy to direct the traffic to v2 when the header contains Peter. Similarly, you can imagine use cases using user agents. You can say if the request is coming from an iPhone or from an Android or from a Google Chrome, from Mozilla Firefox, you can direct traffic correspondingly. So let's apply this. So as a normal user, I still do not see ratings. Now when I sign in as Peter, I see ratings in black color. I refresh the page. I see the ratings in black. So I have basically canary release this feature to Peter. So similarly, we can also do weight based routings. So we can say if I want to now roll out ratings to everyone, but I want to say 80 percent of the request still should go to v1, but 20 percent of the request should go to v2. So that I tested how my rating service is behaving. So I can say route 80 percent of the request to v1, weight 20 to v2. So in this way, you can configure these traffic routes. So let's say our rating service is developed. It is ready for production. We want to roll out to everyone. So I will say I want to route it to everyone. So I just need to configure my route accordingly. So I say whenever the request is coming to reviews, just route it to v2 with no clause of headers and anything. So I will just apply it. So now if as a normal user, I refresh the page, normal user sees ratings. Now let's imagine a use case where I want to test fault tolerance of my application. I want to say, I want to test how resilient my microservices are. If one of the microservices is down, how my UI behaves. So for that as well, Istio provides us some traffic routes, rules. So you can say if the request is coming for ratings and Peter is the user, then abort that request with 500 status. But for every other user, just proceed normally. So you can do this kind of testing in production as well with production test users. So you can do some rejects matching here. You can inject delays as well here to test how the timeouts and your delays are working. So here we are just aborting the request for ratings for Peter with a 500 error. So let's apply this. I think this fault injection is very powerful and I think it's very helpful for doing all the testing specifically in case of worst case scenarios. So right now for the normal user, everything is working fine. Now let's say Peter signs in. This is the rating service is currently unavailable. So basically the UI has handled this scenario gracefully. So I can see my application is working correctly if there is any fault to rating service. I am displaying at exact error accordingly. So you can handle gracefully whatever you want. You can test it now. Otherwise, bringing down a service and testing is a very difficult task in production. Yes, there is a round robbing happening. You need to have more pods for a V1 node and you can have automated scale up and scale down for each pod cluster. You have to use the deployment for that purpose. It's not possible to be honest specifically. And there are work arounds that you have to do which will not give you this kind of flexibility without downtime and all that. And you have to do a lot of work arounds like you cannot release also is possible, but it's difficult. I think we'll continue and take the question answer in the end. We have a lot of things still to cover and to show you there are really good stuff there. So we looked at the demos like we looked at the service discovery that is happening. We looked at the A, B testing, canary release and all that stuff. We looked at the fault injection as well. These are just tip of the iceberg. You can use many, many more use cases that you can come. The most important part that Girish mentioned is the header based routings and header based fault injection. If you put your architecture in place where you have a good amount of information which you want to control in the HTTP headers, your job is done. So yeah, let's look at how it internally works little bit very high level from the 100 feet not going to the actual level. So I say that there is a Istio and Kubernetes as one part and then services. So as soon as your services are up, I think the services register themselves to the Kubernetes masters and it is available as a endpoints in the service. Similar way Istio is also there and all this information is fed back to the Envoy proxy which is similar to the Kube proxy which is running on your actual nodes. Now Envoy proxy has all the knowledge about all the services and endpoints and all so that it can achieve the client-side routing. Now if you have a traffic rules that you have applied like Girish was doing that fault injection and everything as soon as the traffic rules are applied, they are pushed to the Envoy proxy again. So that's how the control plane is coming to the picture of the Istio and pushing all the details to proxy. Now when actual request if service A wants to talk to service B, it makes a all outgoing traffic through Envoy. In some cases Envoy needs to talk to Istio for getting the telemetry data constantly if you have the percentage based routing because it could have happened that another part somewhere else is also making these calls and all this telemetry data has to be centralized somewhere. That's where the mixer comes into the picture and again percentage based routing also can be achieved. Now if you do the user based routing or the header based routing specifically, now this is very classical problem. Lot of time we want to have a different services to be in place for Android and to be in place for iPhone. Now this is very classical use case that I have used in multiple projects where you can just have the user agent on the header and then have the traffic going into the different actual implementations. Now without anywhere in the code getting polluted all this can be achieved. Now let's look at, so this is the use case how you can do all the configurations in the Istio. Let's look at some telemetry. So as we said mixer is collecting all the telemetry data, any request flowing to Envoy is registered as a metric in mixer. So when you set up Istio, Istio by default installs Prometheus, Grafana and Yegar for you. So let's see what metrics we have already in the cluster. Here you will have just the data of last 10 minutes because our cluster is fresh new, just created just now. So we have a backup cluster running. So I'll just show the metrics there. So these dashboards in Grafana just come out of the box. We haven't installed anything ourselves. So if I just see the data for last three hours, I made some request. Yeah, monitoring is done. So now the all telemetry data is also collected and then configured to send to the Prometheus Grafana setup for the monitoring purpose. And Yegar for the distributed tracing. So those who have used Zupkin will be able to relate to the distributed tracing easily. Now this is as good as this is like beauty of combination of Docker containers, Kubernetes and on top of that it's the service mesh. All these are working together to make and give you this kind of a output. Yeah, so these all dashboards come out of the box when you install Istio. So you can see a request flowing in out what is the response time per response code you can also see. The most important tool is Yegar. So with Yegar it lets you do distributed tracing of the request. So let's say I select product page and I do find traces. So I can see how each request went to which service. So now let's say this is one of the request. So you can say first then request came through ingress gateway then it went to product page product page called details product page also made a request to reviews then reviews made a request to ratings. Now I can also see that the details service took 8 milliseconds rating service took 1.48 milliseconds and overall the whole request took 66 milliseconds. So you can just trace each of the request going through each of the microservice and see where it is failing where it is lagging where there is latency. See this one was the fault injection that we added right and this is running on the cluster that we have set up latest. So there is no nothing back up there right. So now all this is in place I think the one question that comes in everybody's mind is that what about performance what about scaling and all right and this is like some people says that okay this is like kind of proven some people will say that no no this is very new to the very new to the game what we do right. So I think some metrics that we have understood why it helps some to convince ourselves that it will not be a problem. First is that the size of the envoy proxy or any other proxy that you choose like there are many more implementation available. Inginx has its own proxy linker d and all they are all about in the range of 10 MBs size and they are doing and working very hard to reduce every MB into it. I have heard that there is one proxy which is less than 5 MB also right. So now your side curve proxy which is getting injected into every part right. You have to think about it right if you think that it is a 200 MB what the little like it will multiply right. So now it matters right and they are working very hard. So it is less than 10 MB so that way we are covered in a way and they are working hard to reduce this further right. Performance also since running in the local host itself and not a hop outside or going outside it has some overhead involved which is but less than single digit milliseconds that is what I have observed. Sometimes this performance becomes heavy when we try to do load testing and it is not about proxy the performance that I have observed or we have observed is all about telemetry because it is collecting so much of data around right. By default it collects all the data and we have observed that that creates little bit of overhead in terms of collecting. So header based routing works very fine because it is just the same request you do not have to go and do anything there. But if you have to do percentage based routing and all that it has to keep collecting that data every time right and it could be that there are tens of nodes running right. All of them have to collect that data it is just not about one node which is making a call to another service right. So that is where it gets little bit tricky and have a overhead of performance going high. Also you have seen the architecture of service mesh it is similar to the Kubernetes master which is like control plane and data plane which is like your nodes right. In Kubernetes you know that if master goes down even though my application will keep running right. Same architecture same principles if my control plane goes down I cannot deploy new rules I might not be able to collect that elementary information. However my system can still continue to work right similar principle. So you have a scalability resiliency all that available in the architecture. When I was reading more about it there is one specific proxiesilium they claim to be lower than the nomroxy. I have to read more and understand why and all that but yeah there are lot of things going on in this space. Yeah that is all we had any questions anything and we will make our code available on github vgirish ajailindia.io project okay. You can take a photograph of this so that it is easy for you to remember if you want all the code. We will make it available mostly today or by tomorrow morning you will have it. Yeah we are done and any questions we have kept 5-10 minutes for it. We are good on time. COM and AWS it is a hop right it is a separate outside. So when you have an incoming traffic from public COM is the right choice there. Now this is inter service communication. Now you have 30 services you will not go to COM every time to make one service call to another right and that is what I was talking about. Client site service discovery is very important. I do not want to have a central API gateway it does not answer your question. Yeah it is a different use case right that is bringing resiliency for a service. So if so if you look at the review service we have 3 review services version 1, version 2, version 3. In version 1 if I deploy 10 pods if one goes down kubernetes is going to bring that up not istio. Now istio or kubernetes does not help you to have the routing based on rules.  Actually it is not even Istio it is about the proxies who are having the actual information about what to do right and how to make all the calls internal. It takes good amount of storage it is telemetry data yeah what all you want you can reduce the telemetry data and that is where I was talking about right istio by default does not take too much of resources and all that stuff yeah yes yes so you have multiple options in prometheus it is a prometheus feature it is not a istio feature okay istio just sends the data right and the whole architecture prometheus is a tool where you can reduce your granularity as your day passes like you can say that up to 7 days I want granular data from 7 to 30 days I want granular at every 15 minutes from 30 days to one year I want at one hour yes it is like. So it basically exposes slash matrix and points and prometheus is scraping those and points basically. So you can use another tool also with this so if you are comfortable with any other tool for monitoring and not prometheus yeah it can be plugged in uh Kibana is a visualization yeah you have to use some tool to send data to elastic search yeah yes it can be I think this architecture is all pluggable you can pull out the components and use other components also so all these so istio sorry if the proxy supports HTTP, HTTPS, GRPC and TCP all that is supported that is for HTTP yes yes so all that is possible through proxy however there will be some features which will be available some features won't be available so like this feature that we showed is HTTP header based right which is specific to HTTP. So it will work in case of when you have HTTP services talking with each other it might not work in case of TCP but in TCP you can have another ways to inject the faults the conflict changes that cool yes I have seen console and kubernetes it supports uh I am not sure with docker swarm they have support may might be they might be working console and kubernetes I am sure. So Istio right now mostly in kubernetes world works seamless like you have seen that we started a cluster and we had a everything up and running up to distributed tracing right in that same new cluster which was set up and that's the beauty of the whole kubernetes world also it's not just about Istio it's about kubernetes helm chart there are many tools which are used cool good thank you thank you thank you


Thank you, Rahul Gandhi. The women whom I talk to in the videos, they are the Rajdoos of China. Tension, Simran Rajasthan's video has now emerged of Rahul Gandhi's party, reportedly in Kathmandu as the party collapses. Rahul Gandhi's foreign nightclub videos have gone viral. Megapolitical eruption over Rahul Gandhi's nightclub videos caught on camera, partying abroad. This is Indian news television, right? I can't show you because of copyright issues, copyright strikes might take place, but I'm going to show you a very quick montage of what Indian news channels have been covering and I'm sure you have also watched it as well. Well, as tension, Simran Rajasthan's video has now emerged of Rahul Gandhi's party, Megapolitical eruption over Rahul Gandhi's nightclub videos caught on camera, partying abroad. The women whom I talk to in the videos, they are the Rajdoos of China. This is what India's national media thinks is news, the private life of a politician. It would make British tabloid press extremely proud. Of course, television channels have taken this up only after it has already spread to that prestigious WhatsApp university. After that, there have been some devious twists which have now moved on to social media. And at the same time, it comes on national media as prime time debate. Take this particular case, Rahul Gandhi is supposedly was alleged to be at a nightclub in Kathmandu with the Chinese ambassador to Nepal. Now, what should a news channel do? What should journalists do? It is extremely easy to find out whether that really is the Chinese ambassador. It is extremely easy to find out whether Rahul Gandhi was at a nightclub in Kathmandu or not and what he was doing and who that person it. And this vicious cycle of misinformation, disinformation, fake news actually works very cleverly because it starts with something that has really happened. In this case, Rahul Gandhi in a nightclub in Kathmandu with a friend of a friend. But then the context is removed, it is twisted and a question is asked is Rahul Gandhi with the Chinese ambassador. This is pushed out on social media and also on private WhatsApp groups where people comment on it, talk about it, it is further spread. It comes back on national media as a question, cleverly as a question. Was he there? This is the allegation. No need to find out. And then once the national media has raised those questions what happens? It comes right back as 100% verified on WhatsApp. He will send all news articles but these news articles will all start with a message 100% verified news. Solid, right? Now Rahul Gandhi is only one of the targets and probably one of the biggest targets in India right now of disinformation and trolling. But there are others on the other side of the divide on the right as well who also face this kind of trolling and targeting and public figures often journalists and actors and people who have spoken up against the government or against power in general or against a particular political party they are targeted, trolled, harangued in the internet and lies are spread about them. Now I am not saying that this messaging is only about fake news and disinformation I am not saying that this digital highway which is now the most important medium through which messages move to people is only about lies it is also a positive space where political parties push and promote their policies their ideology and also they also turn their leaders into giants and that is where the congress party is particularly bad. And if there is one area where our opponents outdo us it is in communication. They have much more money than us and they are better at communication than we are. The problem is that the congress party doesn't take this digital highway seriously it doesn't take television seriously and that starts straight from the top from Rahul Gandhi himself. I am not going to show it but you can go onto the internet and go to YouTube and look up the video of Rahul Gandhi at the nightclub it is a hazy video but from what it looks like Rahul Gandhi is clean shaven he is dressed up for the occasion as anyone should at a wedding but when he turns up at the congress party's Udaipur Chintan Shivid to speak to the congress workers and congress leaders he has a stubble. He looks like he hasn't slept he looks unkempt, he looks distant he has no animation, no passion this is someone who clearly does not believe that he needs to perform for the camera this is in stark contrast to Prime Minister Modi whether you like him or not whether you oppose him or support him you have to give it that Narendra Modi takes television presence extremely seriously and this is extremely important in a country like India because India has a very wide number of people who are watching videos all day because data is cheap and people have prioritized buying data as part of their life's expenses and a lot of these videos are actually things which contain information often false information and most of it goes through WhatsApp and then is taken to be gospel truth it is time for the congress party to understand just as the BJP understood almost a decade ago the visual medium especially video is a very strange medium because it effaces itself, it disappears it makes you believe that you are there it makes you say that I saw it with my own eyes it has to be true you do not realize that what you saw was actually an edited packet you saw what a camera lens caught you don't know what was happening to the left of the right or top or bottom of that frame but because you see it, you believe it the BJP understands this extremely well it understands that in a country like India when people even when they are literate can read and write their name and write a few sentences they take time to read so video visual images are the greatest and easiest way to pass on a message the right in India in fact the global right has very skilled practitioners of the visual arts the modern digital visual arts whether it is photoshopping, whether it is memes whether it is quick, smart videos and what they do is that they release it into the bloodstream of public discourse and it flows through that it reaches every part of the social body and through the repetition of themes it manages to create certain truths produce certain truths which everyone starts believing and repeating when Prashant Kishore gave certain suggestions to the congress party it included creating WhatsApp groups in every single village it included promoting YouTube channels promoting local channels creating thousands of memes this is not rocket science and it is not something that only the congress party needs to do every party needs to do that in contemporary politics and the BJP does it and it does it extremely well this importance of visual medium importance of social media importance of television has come to India about 10 years ago the BJP was ahead in the game and it managed to make the most of it the congress party simply doesn't understand that these are essential elements of messaging message is not just a few words message is not a speech it is an entire format the congress needs to understand that it can't just emulate or imitate the BJP and hope to succeed it can't just replicate that model because those in the center those who are liberal secular they will want a different language and it is the congress party's job to look for it it has wasted 8 years trying to find that language or maybe never tried to find that language it has woken up now but it is Rahul Gandhi who needs to start right from the top that's the show today keep watching news click like us share our videos and do subscribe to the channel


Let us start by looking at waves on a cylindrical base state geometry. This particular problem is also known as the Rayleigh Plateau Capillary Instability Problem and is named after the two people Rayleigh and Plateau who were the first to study it. So, what we find here or what we are considering here is an infinitely long, it is modeled as an infinitely long cylindrical column made of fluid. So, you can see that in the base state the column is infinitely long, it is made of some fluid. We will ignore the effect of the gaseous medium around it. So, we will set the pressure to be 0 there.  So, in this case if we find waves the restoring force will be due to surface tension alone. So, you can see that in the base state the fluid is quiescent like before. So, no velocity anywhere, but pressure in the base state is not 0 and that is because the base state has a curvature. This is unlike what we have done until now where in the base state the interface was flat and did not have any curvature. If the surface tension coefficient is t then the base state pressure is given by t by r naught where r naught is the radius of the cylinder, the unperturbed radius of the cylinder. So, this is r naught, this is the center line and now what we are going to do is we are going to introduce perturbations on the surface of this cylinder and we are going to ask the question do these perturbations oscillate or do they grow in time. In this particular case we will find that there are some perturbations which oscillate and pleat two waves. We will look for waves of the standing wave form and you will find that there are other perturbations which do not oscillate, but grow in time. Those are the unstable modes. So, let us begin our analysis. So, once again like usual we will use the Laplace equation to represent the perturbation velocity potential, then the pressure in air is assumed to be 0. We are also going to make the approximation that my perturbations are axisymmetric. So, all derivatives with respect to theta are going to be 0. Note that I am using a cylindrical coordinate system here, this is my radial coordinate and the horizontal direction is my axial coordinate along the length of the cylinder or along the axis of the unperturbed cylinder. In the azimuthal direction the angle is measured as theta and we are saying that del by del theta is equal to 0. So, all my quantities will be independent of theta. Now with that approximation we have to write down our Laplace equation. So, you can see the Laplace equation in a cylindrical coordinate system, in a cylindrical coordinate system is given by del square phi by del r square plus 1 by r del phi by del r plus del square phi by del z square is equal to 0. We are going to introduce surface perturbations and the surface perturbation is measured by this quantity eta. You can see like before that eta is measured from the base state. So, eta is the difference between the perturbation, the local perturbation, the height of it compared to the base state. So, this is eta and you can see that eta is a function of z and t. So, as you go along the axis of the cylinder eta varies. So, eta is a function of z and t, it is not a function of theta because of the axis symmetric approximation. So, eta and phi are not functions of theta. Now, we will have to solve the Laplace equation. We have done this before. So, we will do this quickly. So, we are going to say that phi of r z t is some Eigen mode r z into e to the power i omega t that is my normal mode approximation eta is just a function of r and t and this is some e of z into e to the power i omega t. That is the usual thing that we do. If I plug this in into the Laplace equation, the e to the power i omega t does not matter and I get an equation for phi. Now, again I am going to use variable separation. So, I am going to say that this is some function of small r and some function of small z. If we substitute into this equation and separate the small r dependence from the small z dependence, the way we have done it until now, then we will find the following equations. So, I am skipping one or two steps here because we have done this a few times before. So, I am separating all the small r dependence. Everything that depends on small r is on the left hand side. Everything which depends on small z is on the right hand side of this equality and I have chosen the separation constant is equal to plus k square. You can think why I am doing this. Now, if I like usual, if I solve this equation, these lead me to two equations, two ordinary differential equations, both of them are linear for capital R and capital Z. The equation for capital R turns out to be, the equation for capital Z similarly turns out to be, let us work on the R equation first. So, like before what we do is we introduce a non-dimensional quantity which is kr. So, I will call this r bar. So, I will write this as r square.  Now, note that this is not the Bessel's equation that we have seen earlier. This is related to the Bessel's equation, but this is not exactly the Bessel's equation because there earlier we had a positive sign here. Now, we have a negative sign. So, now this is known as what is known as the modified Bessel's equation. You can show very easily. You can convert this into in terms of r bar. So, this becomes in terms of r bar and this has the form of a modified Bessel's equation. You can look up modified Bessel's equation on the internet. In particular, this is a modified. So, the solutions to this equation will be the modified Bessel function which are given by k0 of r bar and i0 of r bar. Those are the two symbols that are used. This is a linear second order ordinary differential equation. It is not exactly the Bessel's equation. It is the modified Bessel's equation. The 0 here comes because in general, there is a n square present in the modified Bessel's equation. Please look it up on the internet and you will find it that there is an n square in the modified Bessel's equation and we have to put n equal to 0 in order to recover this equation. This n is related to the axisymmetric approximation because we are not making the, we are not looking for three-dimensional perturbations. So, we have put, we are only putting axisymmetric perturbations. If we had done the three-dimensional exercise, then we would have put cos m theta in the azimuthal direction and so this corresponds to choosing m is equal to 0. So, that is why these 0 comes from the axisymmetric approximation. So, what do the modified Bessel functions look like? So, I am just going to plot them qualitatively. So, I0 of r bar as a function of r bar, argument is non-dimensional, looks like this. 0th order modified Bessel function of the first kind, I0. It diverges as r bar goes to infinity, starts from 1. K0 of r bar has a singularity or it diverges as r equal to 0 and it decays at large r, at large r bar. You can immediately see what are the consequences. We are going to express the solution to this, to this equation in terms of linear combination of K0 and I0. There will be two pre-factors sitting which are the constants of integration because our domain extends from r equal to 0 to our domain extends from small r equal to 0 to small r is equal to the radius of the filament unperturbed plus some perturbation. So, any function that diverges at r equal to 0 is not going to be acceptable to us. You can see that this K0 of r has a divergence at small r and so we have to set the pre-factor of K0 of r bar to be 0 that will just leave us with I0 of r bar. This is a very similar exercise compared to what we did earlier when we had the Bessel function. There we had J0 and Y0 and we eliminated Y0. Here we are eliminating K0. So, we with usual arguments we find that our velocity potential is capital phi of r, z into e to the power i omega t and capital phi of r, z is has something which depends on small r and something which depends on small z. We have already found out the r dependence. We need to find the z dependence. You can the z dependence is governed by this equation very easy to solve. You can see that it is a linear combination of cos kz and sin kz and we will retain both because none of them diverged as z goes from minus infinity to plus infinity. So, I can write down the general form for phi and eta from whatever we have done so far. The general form of phi will be some A cos kz plus B sin kz into a linear combination of K0 and I0. I will eliminate K0 by setting the prefactor to 0. So, we are left with only i0. Similarly, eta is equal to I will put some different constants these are in general complex cos kz plus f sin kz into once again i0 of sorry this is there is no r dependence here. So, this is e to the power i omega t and of course, we have to remember that we have to add the complex conjugates. So, now let us proceed with these forms. Our boundary conditions remain the same. We have a kinematic boundary condition and we have a Bernoulli equation applied at the free surface. Let us work on the Bernoulli equation first because that involves computing some unit normals and computing the divergence of the unit normal. So, here let us find out what is the unit normal first. So, we define a function capital F like before whose value is constant on the on the perturbed surface. We have perturbed our surface in the form r is equal to r0 plus eta which is a function of z and t. So, you can see that here that my yellow line represents the perturbed surface. That perturbed surface is given by small r is equal to capital R naught plus eta as a function of z comma t. So, we have to construct a function which will be constant on that yellow surface like before. So, as we did earlier we will construct a function whose value is 0 on the surface and that function is defined as r minus r0 minus eta of z comma t. So, because the equation of the surface is given by this, so F is 0 on the perturbed surface at all time. Small n will point vertically outward if we define it as grad F by mod grad F. So, this is our definition for the unit normal. We will use this when we will have to calculate Bernoulli equation at the surface. Let us come to the kinematic boundary condition. The kinematic boundary condition we have seen says that dF by dt is equal to 0. The surface is a material surface and so the value of F capital D by dt of that value is always 0. We have seen this also earlier. All we have to do is apply this capital D by dt operator to the cylindrical coordinate system that we have. Let us do that. So, this is true at the surface which is given by r0 plus eta. So, I have del by del t plus grad phi dot grad. This is my d by dt operator and this is r minus r0 minus eta of z comma t r is equal to r0 plus eta is equal to 0. If we work on that, then we get the del by del t operator operates only on this quantity because the other two are not functions of time. So, I get a del minus del eta by del t and then I have del phi by del r that is coming from the grad of phi into del by del del r of small r. So, I am doing del by del r of small r, that is just 1. So, this is just 1 and then we have del by del z, eta is the only quantity which is a function of z and so we have minus del phi by del z into del eta by is equal to 0. You can immediately see that this is a non-linear term. Phi is a perturbation velocity potential, eta is also perturbation quantity. If you have non-dimensionalized this, each of them would be epsilon times some order 1 quantity. So, the product of these two terms would be an order epsilon square quantity. We want to do a linear analysis and so this is neglected. So, this is small. So, at leading order our equation just becomes del eta by del t is equal to del phi by del r at r is equal to r naught plus eta. I do not have to worry about r is equal to r naught plus eta on the left hand side because eta by definition is just a function of z. So, eta does not depend on r. So, this r is equal to r naught plus z operates only on the applies only to the right hand side. So, this is my kinematic boundary condition linearized. Let us work come back to the Bernoulli equation. So, the Bernoulli equation says p by rho plus the total pressure by density divided by the total velocity potential and I am doing Bernoulli equation at the surface. So, this is r is equal to r naught plus eta is equal to until now we have put the Bernoulli constant to be 0. Here we have to be more careful because until now we have looked at base state where the interface was flat. So, whether we were looking at capillary waves or whether we were looking at surface gravity waves, the interface in the base state was flat and so in the base state the pressure at the interface was 0. In this case our interface in the base state has a curvature. It is actually a part of a cylinder and there is a curvature on the cylinder. So, we have to calculate the Bernoulli constant by applying the Bernoulli equation in the base state. In the base state there is no velocity because the fluid is quiescent and so the only term which survives is p b by rho. So, that is the Bernoulli constant and so in the perturbed state we have the left hand side and that must be equal to the same equation applied to the base state. So, this determines the Bernoulli constant for us. So, pay attention that this is total pressure base state plus perturbation. This is also total velocity potential but in this case because there is no contribution to velocity potential in the base state as the fluid is quiescent. So, this can be thought of as perturbation velocity potential. So, now let us proceed from here. The pressure jump condition like before is given by p at r equal to r 0 plus eta and this p is again the total pressure is equal to surface tension times divergence of the unit normal which we have just described. Now, the unit normal is grad F by mod grad F. F we had defined earlier as r minus r 0 minus eta of which is a function of 7. In a linear as approximation we do not have to worry about the mod grad F because this will involve non-linear terms. So, this is approximately equal to grad F. So, we just have to compute gradient of F in a cylindrical coordinate system. So, this basically has three components because we are under the axisymmetric approximation this is 0 and so we are left with two components del F by del z which is just minus del eta by del z comma del F by del r which is just 1. So, this is the linearized approximation to the unit normal to the perturbed interface. This is my r component of this is my z component of n and this is my r component of n. What is the formula for the divergence? We have to compute the divergence del dot n. So, del dot n is given by 1 by r del by del r of r nr. nr is the r component of n plus del nz by del z. We already know what are the r and the z components of n. We just have to substitute it into this formula.  So, the this reduces to 1 by r minus del square eta by del z square. So, that is my expression for divergence of the unit normal. What we really need is the divergence of the unit normal calculated at the perturbed interface r is equal to r0 plus eta. So, let us do that. So, we need divergence of the unit normal calculated at r is equal to r0 plus eta which in this case is 1 by small r and small r has to be evaluated at r0 plus eta minus del square eta by del z square. Recall that we had written eta is equal to e cos kz plus f sin kz multiplied by e to the power i omega t and then we had a complex conjugate. So, now we are in a position to calculate this. I am going to work on this term. So, I am going to pull out r0 and write this as 1 by eta plus r0 because there will be some linearization involved in this term and the second term can be calculated directly from this formula. So, this just becomes, so this will become plus k square into the same thing e cos kz plus f sin kz into e to the power i omega t and now I need to work on this term. So, I will write it as in a linearized approximation we only retain terms which are power unity in eta. So, I will just have this and the second term remains the same. So, this becomes 1 by r0 minus 1 by r0 square into e cos kz plus f sin kz this has a e to the power i omega t and then there is k square into the same thing. So, now I have an expression for divergence of the unit normal calculated at the perturbed interface. We have to go back and substitute this in the pressure boundary condition. The pressure boundary condition was p at r is equal to r0 plus eta is surface tension times the divergence calculated at the perturbed interface. This is recall I told you was the total pressure. So, this is a sum of base plus perturbation. In the base state filament or the fluid is in the shape of a cylinder. So, the radius is constant everywhere and it is just r is equal to r0. In the perturbed state this will apply at r0 plus eta. And so, this becomes t of divergence of n r is equal to r0 plus eta. We are going to use this expression that we have derived for divergence of unit normal computed at r0 plus eta. On the right hand side of this expression you will see that some terms cancel out because there is a base state term here and this term and some term on the right hand side will cancel out because the base state satisfies pb is equal to t by r0. And then we will recover an expression for the perturbation pressure. We will take this perturbation pressure and we will go back to the Bernoulli equation, linearized Bernoulli equation applied at the free surface and substitute it there and that will give us an equation for which will lead us to the dispersion equation.


Hello everyone this is Ahmed Daan of Ahmeddaan.com. Today I'll have another episode of Razor review video and I'll be presenting the Rockwell R1 Razor which I have it right here. If this is the first time I repeat visit Thank you for your support. On this channel, I'm always trying new and different ideas. If you're into thinking outside the box You may want to subscribe this channel. If you're looking for more review videos There will be links in the description box below. So this is a white chrome plated Razor and The model is R1 which we have it right here One thing which struck me about this Razor is that this brand is actually a Canadian and I haven't Seen any other Canadian Razor brands. So this is the first time The packaging looks very nice and simple and this is a very you know simplistic eye-catching Packaging and you can see that it's a classic razor for the perfect traditional Wetship and if you take a look on the back, so it has just some more information It looks like they all also gave five Blades which is their own brand and made of Swedish stainless steel Razor blades So this is supposed to be a butterfly opening the easiest and simplest Razor opening so we're going to open this up and take a look at it and then later on I'll share with the razor and give you my opinion. I'll just start from here. It looks like it should be You know fairly simple to open Okay looks like Not that simple. So finally I got it and I'll try to slide it out Okay, so the box is empty and I'll just set it aside and They gave additional five blades Which is a nice thing. So I'll just you know, lift this here and this is our razor Rockwell R1 So let me just you know take this out and This part is empty. So I'll just set it here So this is what we have The first thing I'm noticing that this is not too heavy and Not too light, but it has the metal filling feels cold to touch and it actually the Designing here the knurling it just like you know, it's it gives you a very good grip if you're a Right-hand person, but let me just take a look here Same with left hand. So it looks like you know, you can use both hands and you're going to get a very good grip and Let me just you know, do this which should open the Opening okay, so you can see that This is open now and it's a very shiny chrome designing or chrome Plated razor So I'll just try to close it again and see how smooth it is. Okay, so let's just do it again looks like it's you know working properly and It feels very good to touch but I couldn't Tell anything unless I start, you know shaving with this. So for the next of the video I'm going to you know shave with the razor. Hello, everyone I'm going to start shaving with the Rockwell R1 razor and the shaving cream we have today is the porosso and I'm just going to be using a synthetic omega s brush, which I have it right here. So The first thing I'm just going to you know insert blade in the razor and the blade is going to be the same Which is the Rockwell blade these came with the razor and I'm just going to take this out of the paper and then This is a butterfly Opening so I'm just going to you know gently open the Razor I'm going to insert the blade here So this is the simplest and easiest way to insert blade so you can see that the blade Just popped in and I'm just going to Close this So it likes it looks like you know Nicely closed now one thing I'm noticing right away that you know There's nothing comes out on the side of the razor So I don't remember seeing any other razor like this way So it's very safe on this side that you know you're not going to cut your Hand or fingers or anything. So this these two sides are completely covered And we have the blade coming out on these sides right here So I'll just you know with this blade a little bit blade on the razor and I'll start Forming the cream So I may I'm using a stainless steel shaving soap bowl Okay, looks like I might need a little bit of water Just a little bit not too much and you can see that So I don't have heavy foam or Cream but what I have here, you know, this should be good enough. So I'm just going to apply the Shape form here on my face or leather on my face And I'll just try to do Little bit for so let's apply the leather again. It has a very nice classic barbershop smell I'm happy with the amount of leather. So I'll just leave the foam and Wipe my fingers a little bit and then I'm just going to take the Rockwell R1 and start shaving and I'll just start on this side Okay, so I'll just you know, wash this a little bit now I feel like this is like slightly loose and slippery So it's not, you know, it's kind of like, you know, giving me not giving me a good grip. So just like, you know Wipe this a bit and another thing I noticed that This thing is like a little bit moving here, so maybe I should tighten up a little bit more Okay, so now I'll just try Again, we'll use this side now. So just wash the razor a little bit and then the same thing I'm Having difficulty again. It's kind of like in a blade gets too slippery the handle Okay, so I'll try to do the upper lip part and this is the topless part right under the nose Feels like mild razor, but you know, let me just finish the shaving then I'll give you My insights. Okay, so it looks like I had one cut right here Just right here Okay, so I think one pass is good enough for you know, the review of the razor so I'll just you know wash it a little bit and just Wipe my fingers and you can see that I have a cut here. So it feels like a Mild blade and the blade is okay, you know, I have no complaint about the blade But the razor the difficulty I'm facing this is kind of getting loose when I'm shaving and it looks like you know It gets like, you know very slippery So when you are holding it and you start shaving it and after a few seconds It gets really slippery and you have to keep like you know tightening up So that's an issue, but in terms of like, you know the blade The razor so I have a feeling that this razor is not really mild a bit But it's on the upper mild to lower aggressive side But the blade is okay. The blade is a mild blade, but the razor also you have to be very careful It gets you know when it's wet and then you have to keep tightening up the opening of the butterfly so that could be a concern but So far, I'm you know, not too happy but happy with the product But I wouldn't you know make this my regular razor But definitely this is, you know, a very Inexpensive razor so I cannot complain too much. So based on the price and the Functionality, you know, this seems to be working. Okay, but definitely there are some minor issues or some issues Which are to look for so that's the review of the Rockwell R1 Butterfly opening razor. This is a very inexpensive razor I think my price was $20 around $20 if I'm not mistaken I kind of don't remember exactly right now, but I think it around $20 and This is one of the inexpensive, you know, butterfly Razors and you can see that this is a short handle razor and it looks like, you know I'm liking short handle razors more than long handles more maneuver and easy to control But this razor is you know, it works But I wouldn't make it my everyday razor. So that was the review of the butterfly R1. Thank you for watching this video There'll be more videos coming, so I'll see you shortly