Hello everyone. My name is Sridhar and with me I have my colleague Ashwin. We both work for Red Hat. So today we will be talking about hybrid cloud and multi-cluster service discovery. So agenda for today is as follows. We will briefly be going over the Kubernetes networking model, the use cases that motivated us, the problem domain, technologies that we looked into and finally the solution that we actually came across and we found that it is very promising and we intend to contribute to. Some brief introduction about the Kubernetes networking model is like in Kubernetes every pod has a unique IP address and it can talk to other pods and services within the local cluster, regardless of the node on which the pod is scheduled on. Not only that, a pod IP is generally isolated to the outside world and they are well-defined mechanisms like load balancer services, ingress gateways, using which you can make your applications accessible to outside world. So as you can see, Kubernetes mainly focuses on container networking within the local cluster but it does not talk about cross-cluster network connectivity. Imagine multiple clusters, some of your clusters are on-prem and some on public clouds and this is becoming a common deployment scenario these days. In a hybrid cloud kind of environment, some of the use cases that we kind of envision include high availability like you have an application and you want your application to be deployed in multiple clusters in a hybrid cloud and in the unfortunate situation if one of your cluster goes down you still have access to your application from a different cluster in a remote region. The other use case we can think of is like deploying a service mesh kind of application into your hybrid cloud and some implementations of service mesh require pod-to-pod reachability. The next one we can think of is like stretched databases and the next one interesting one is like enabling access to your cluster IP services from remote clusters. Normally as you know, Kubernetes has different types of services, cluster IP being the default and cluster IP service is generally accessible only within your local cluster. So we are looking at some solution wherein you can access the cluster IP service even from a remote cluster so that is something that we are kind of interested in. The next use case is like you have a database on your prem and your application or your front-end on the edge closer to your customers. The next use case we can think of is like deploying some temporary applications on public clouds to make use of the special hardware that is only available on the public clouds and not on your on-prem environment. And this goes on like you know this is not an exhaustive list of all the use cases but these are some of the use cases that we had in our mind when we kind of looked at the hybrid cloud kind of use cases. Now before we talk about the problem domain, some of the goals that we had in our mind is to find a solution that is cloud agnostic, lightweight and also seen agnostic. We just discussed about some of the use cases earlier and some of them require part-to-part reachability even across the clusters. Like you have a cluster in on-prem and you have an application or a pod in your on-prem and you want this pod to be able to talk to a pod in public cloud like AWS or GCP or whatnot. So we envision that this particular problem consists of four main aspects. One is tunnel management, injecting routing rules, multi-cluster network policy and multi-cluster service discovery. Now this is a pictorial representation of the problem domain that we just spoke about. We envision that we would require some kind of orchestrator that is capable of configuring, monitoring and operating the cross cluster connections. Further to that the four main problem domains that I just spoke about can be categorized into two different categories. One is the cluster connectivity and the other one is service connectivity. So let's go back to the four important things and you know let me give you a brief introduction of as to what we think of each of these aspects. One is the tunnel management. It essentially means like when you have your clusters in multiple regions it's like setting up connections between your clusters so that the traffic can actually pass on from one cluster to other cluster. Now tunnel management at the same time could be like what type of tunnel that you intend to use could depend on the location of your clusters. So if you're talking about connecting clusters from on-prem to a public cloud you might want to go with standard space IP sector tunnel. Pretty much most of the public cloud service providers support IP based VPN tunnels. On the other hand if you're talking about connecting clusters that are in your on-prem environment then you can simply go with some kind of overlay mechanisms like VXL and tunnels or an IP IP kind of tunnels because the traffic is not going into your public domain and you want to avoid the overhead of encryption. Injecting routing rules on the other hand is about programming the necessary routing rules into your cluster nodes so that the pods when they're trying to talk to the pods on the remote cluster or the cluster IP service on the remote cluster they are necessary IP routing rules program so that the traffic is appropriately routed into your cluster. Service connectivity is like consists of multi-cluster service discovery. You all know about service discovery so what we're looking at is we want to make a cluster IP service that is available in one of the clusters accessible from a connected cluster in a remote region. Now when I talk about multi-cluster service discovery we're not talking about exposing each and every service that is created in your cluster to a remote cluster but we are looking at exposing services that are marked with some specific annotation so that only the annotated services are made available in the remote regions and the fourth important thing is about multi-cluster network policy. So as you all know network policy is like an access control list using which you can specify the kind of traffic that you want to allow or deny to your pods. We want to kind of enhance this to make it work with even an hybrid cloud kind of environment. With the goals that we had in our mind we started to explore the various solutions which will allow us to you know address these four problem domains we had. We kind of prototype some of them and to evaluate the technical feasibility of them and you know tried it out on vanilla Kubernetes as well as OpenShift and so on. Now while we were doing this some of our team members in parallel they were trying to explore some of the upstream external open source projects and we came across a couple of them like Cilium, Federation, Istio and so on. We found that Cilium is a very promising CNI. It's a full-fledged CNI which was having lots of capabilities and it was addressing most of the use cases that we kind of spoke about. However since one of the goals that we had in our mind was to have a lightweight as well as a CNI agnostic solution we had to park it. The second solution that you know we looked at was Federation. Federation is a controlling protocol that helps you to federate your services across multiple clusters. Federation currently does not set up any tunnels between your clusters but it makes use of publicly accessible load balancer based services when it wants to make one of the services accessible from a different region. Istio on the other hand is a service mesh implementation. You all know that and it has some fancy like very good layer 7 capabilities. However not every customer might be interested in deploying a service mesh kind of application for cross cluster connectivity. So somewhere in the month of April while we were evaluating all these POCs we came across an upstream open source project called Submariner from Rancher Labs. They also gave a demo at that time. So we found that Submariner was very much close to some of the problem domains that we were talking about and it also had some pretty similar goals that we had. Not only that actually the general idea that we had in mind was also very close to what Submariner was trying to implement and address. So we felt that it would be a good step for us to start working with the Submariner community and add any necessary you know missing elements to it. So now Ashwin will talk about Submariner its architecture and some of the internals of Submariner project. Thanks Raider. With that said like let us dive little deep into the Submariner and its architecture and its components. So this is how a typical Submariner deployment looks like. So in the you can see a east cluster and a west cluster and a third cluster that is called as the broker cluster. So the broker cluster now needs to be a third Kubernetes cluster but our plan is to make it to install it in one of the east of the west clusters existing clusters. Now we install Submariner using Helm. So while you are deploying you have to install it in your broker cluster first. After that you can need to get the secrets and with the certificates and you have to use that to deploy the west and east cluster so it can connect to the broker cluster. Submariner defines two CRDs namely the cluster.submariner.iu and the endpoints.submariner.iu. So the cluster.submariner.io CRD contains the cluster information, the service CIDR and the pod CIDR that are available in that cluster whereas the endpoint.submariner.io cluster contains the details about the cluster like the node IP, the gateway node IP. I will tell what that in detail later and other details like whether there is an address required to reach the gateway node. Those informations are stored in the endpoint.submariner.io. So here we require the cluster ID to be unique so that each cluster should be identifiable by a unique ID. If you had it in the earlier session like Shishidara was telling like there is a effort in Kubernetes multi cluster seek to bring in a cluster ID for every cluster that will be unique across clusters. Okay now let us go into one of the clusters like if you see the west cluster there is one node that is marked as the gateway node you can see the same in the east cluster as well. So in every cluster there will be one node that will be elected as the gateway node and this node will connect to the broker cluster and once it connects to the broker cluster it will update its local information basically it was published the both the CIDs it local information with the broker cluster and it will retrieve the information about all the other clusters to the local. Okay and by this way it learns about all the clusters that are available or like that are connected together and it will create an IPsec tunnel to the gateway node of the other clusters if you can see in the figure there is a IPsec tunnel that has been created from the gateway node in the east cluster to the gateway node in the west cluster. Okay so yeah now let us look at look at the submariner components of submariner. So submariner has mainly two components the first is the submariner engine and the second is the submariner route agent which is a demand set. So this submariner engine runs on all gateway nodes so what is the what does this like mean by all gateway nodes so in our deployment we mark some of the nodes as gateway capable nodes say if you go to the previous here say we can mark worker one or worker two as gateway capable so whichever node is marked as gateway capable submariner engine will be running on that. It performs a leader election and one of the submariner if there are multiple nodes that are marked as gateway capable node one of them will be elected as the leader and this leader node is responsible for connecting with the broker cluster and sharing its information and retrieving information about other clusters. It also interfaces with Sharon to create the IPsec tunnels with all the gateway nodes of all the other clusters that are connected. Okay now the next component is the submariner route agent so this will be running in all the clusters all the nodes in a cluster and this is aware about who is the current leader okay so in the node that is the gateway node it will sit idle it does not do anything. In all the other nodes there are not the gateway nodes in a cluster it is responsible for injecting the routing rules so that all the packets that are addressed to a different cluster will be sent to the gateway nodes and one more thing about submariner engine is like whichever in whichever node that is not a gateway node the submariner engine will be idle in that nodes okay. Now let us see how the gateway node election happens so if you see in the west cluster there is four worker nodes and if you can see from the diagram like worker 1, 3 and 4 in the west cluster and worker 2, 3 and 4 in the east cluster are marked as the label or like they will participate in the gateway node election. So submariner uses Kubernetes simple leader election and one of them will be elected as the leader. So if you see in the west cluster so it was the worker 4 that got elected as the leader and similarly in the east it is worker 3 that got elected. Now worker 4 once it is like elected as the leader it will connect to the worker cluster and it will like as I mentioned earlier it will update the information its local information and tries to retrieve the information about the other clusters. So every other gateway node tries this and learns about the all the clusters that are connected. So as you see as you can see once the election has election happened and the gateway nodes are elected IPsec tunnel will be created. So here you can see from the worker 4 in the west cluster to the worker 3 who are the leaders in their respective clusters and IPsec tunnel was created. Now as you see from the figure like every other traffic to the other clusters the traffic from worker 4 worker 2 or worker 3 to the work any other node in the east cluster has to flow through the gateway node so there is a single point of failure. So we have a high availability framework built in so this ensures that if gateway nodes in an event like if the gateway nodes goes down a new gateway node is selected and the roles are reprogrammed. So if you see in the figure assume that the worker 4 in the west cluster which was the earlier leader went down due to some reason. Now a new leader election happens so whichever nodes are remaining nodes which are labeled participates in the election. So worker 1 and worker 3 here and one of them will get elected as the leader. So here worker 1 got elected as a leader so worker 1 now updates the broker that okay there is a leader change and these are my details. So now in the work the west cluster there will be submeniere outage and component that I mentioned earlier that will also be notified about this new leader change so it reprograms it routing rules which were earlier pointing to worker 4 to the worker 1 so that the traffic to the cluster it will use worker 1. Similarly since the broker is updated about the leader change east cluster also learns about this okay there is a leader change. So what it does is it changes it or like reprograms is IP text tunnel to point it to the newly elected worker node that is the worker 1 okay. Now let us go back to the earlier problem domain that Sridhar explained. So he mentioned about two things broadly like that you can divide the problem domains into service connectivity and cluster connectivity. So what works today is the cluster connectivity part of this of the problem domain. So first thing you mentioned was like the tunnel management as we saw in the previous architecture diagram the tunnels are IPsec tunnels are created and they are created between the gateway nodes and through this IP tech tunnel you can reach all the other clusters and second part is the routing rules. So the once submeniere engine learns about other clusters it will program routing rules in the gateway nodes to reach other clusters say for this CIDR you can go to the east cluster for this CIDR it is available in the north cluster. So these routing rules will be injected by the submeniere engine. Now in the all the other nodes there are not gateway nodes as I mentioned the submeniere route agent will program the rule that could send the packet to the gateway node from the gateway node the rules that are programmed by the submeniere engine will take it to the other cluster. Sridhar will be showing it in a more detailed way. Now there are some prerequisites for submeniere that we expect for this submeniere to work properly. The first thing is like we need to know about the cluster configuration before deploying the submeniere so that each clusters know how to connect to the broker and how he could retrieve the information about the other clusters. So there should be some knowledge about the cluster configuration. Also submeniere expects the port and service CIDR to be known overlapping. What does mean is like each individual clusters like in our diagram we had east cluster and west cluster the service CIDR as well as the port CIDR needs to be currently known overlapping so that submeniere can work because submeniere just like insert rule based on the CIDR. So for this CIDR you can go to this cluster so the routing rules are inserted in that pattern. So we expect that this needs to be known overlapping. Okay now Sridhar will just go through your life of packet. Thank you Eshwin. So let me take a small example of how a packet traverses in this when you have two clusters. Now imagine you have a west cluster and an east cluster just for sake of simplicity we are trying to use like you know as minimal number of you know nodes in this diagram. So as I mentioned you have two components of submeniere running in your clusters on the worker nodes you have the submeniere route agent and on the gateway node you have the submeniere engine component. So let's assume that you know you have two ports port A which is running on worker one of a west cluster and port B which is running on worker two of your east cluster. Assuming that port A knows the IP address of port B I will quickly take you through how the packet actually traverses. Whenever port A is trying to send a traffic to port B you would have submeniere route agent running on worker one that would have programmed the necessary routing rules to forward the traffic to the local gateway node. Once it reaches the local gateway node traffic would be encapsulated into an IPsec tunnel. Assuming that these two clusters are in like you know connected through IPsec tunnel traffic gets encapsulated in the IPsec tunnel and forwarded to the remote cluster gateway node. After it reaches the remote cluster gateway node it gets decypted and it looks at the destination IP it happens to be the IP address of port B and the respective CNI of your cluster would forward the traffic accordingly to which in this particular case is the worker two which is hosting port B. Now this is how the communication happens from a port in one cluster to other cluster the same thing generally happens when a port is trying to access a cluster IP service. Now coming to the current state like we have a healthy future I mean like lots of work is spending. Submariner in its current stage is like we consider this as a pre-alpha so we don't recommend Submariner to be used in any production kind of environments so please bear that in mind. The other one is like it only supports cluster connectivity part today it doesn't support the service connectivity which includes multi cluster service discovery and network policy however we are actively working on you know getting these features you know integrated as part of Submariner. The next one is support for different types of topologies. Today when you have multiple clusters connected via Submariner there is a full mesh of IPsec tunnels that is created between the gateway nodes of all your participating clusters. We are trying to provide a mechanism wherein after you connect after you actually associate all the clusters we want to make it configurable wherein you can say that out of all the n number of clusters that you have you only want to connect some of them so that you can discover and access only certain cluster IP services out of all the clusters. The next one is support for different types of tunnels. Today with the cluster connectivity part of Submariner you can set up IPsec tunnels between your clusters so it only supports IPsec based tunnels and it generally works in most of the cases because you might be interested in setting up tunnels between an on-prem versus a public cloud kind of environments. However we are looking at adding a plugin-based architecture which in the Submariner terminology we call it as a cable engine. We want to implement a couple of cable engines that allow us to support different types of tunnels like VXLAN, IP and IP and so on. The next important thing is monitoring of the solution which is an important thing and talking to different stakeholders and people we came across that they are also looking at supporting overlapping seeders. So as I mentioned earlier one of the prerequisites today for Submariner is that you need to have the pod CIDRs and service CIDRs of your clusters to be non-overlapping. In a ground field kind of environment this could actually be a little challenging because you might have deployed your clusters with the default configuration where the pod and service CIDRs overlap. So we have a couple of ideas in our mind and maybe going forward we want to depending on the feasibility we want to support even this particular use case and last but not least like leveraging some of the public cloud services wherever possible. You can find the Submariner JIT repo in this particular slide. We meet every Tuesday at 15 hours UTC in Blue Jeans and both the rancher as well as that are working collectively to move the Submariner project which currently is in rancher report to multi cluster SIG. So as we speak there is some active discussion that is going on in the SIG multi cluster mailing group. You can find the link to the email chain that has some interesting conversation. So anybody interested in Submariner we would actually be more than happy to welcome you. We have like bunch of folks working on it and you know we are very open to you know seek your feedback and if you are interested in working with us you know we are happy to help. So come join us it'll be fun if you have any questions. Yeah hi I have one question yeah does the local agent update the route to the leader so that the work and communication is the local gateway right. Okay so you know you you said only host nodes have one agent yeah right yeah you know what's the function of agent is that the agent updates or send a route to the leader and so that and can publish the route to all the nodes and so and the work can communication with the and the local gateway and yeah you know you said that you and the and the private or or public cloud use the IPsec tunnel and how to and work to communication for example and Mr. Castle and work one and how to communication is the Github node you use the what technology that use the another protocol or for example route protocol or you just after the loo with a pie your your managing and software yeah for the most okay I think it's the question like how the packet from work and one reach the gateway node is that the question yeah okay so as I mentioned there are two components one is the Submariner gateway Submariner engine and the Submariner route agent so this route agent knows who is the current leader okay and for all the traffic that is for the remote cluster he will insert a rule in the worker one so that if there is a traffic to a different cluster he'll send that traffic to the gateway node so there is a routing rule added for that so it's yeah so it's like you know from what I understand your question is there are couple of agents there are two main components in the Submariner architecture one if you imagine this this particular diagram let's talk about the west cluster you have worker one one worker two now these are the daemon set ports which Kubernetes ensures that at any point of time you have a port scheduled on the worker node what they do is they constantly monitor the local gateway node so there is another port running on the gateway node which we call as a Submariner engine so these ports will try to be in sync with the local gateway node and the local gateway node will be in sync with the broker cluster so your port seeders service seeders in this particular diagram it's like <IP_ADDRESS> and say <IP_ADDRESS> now this information along with the cluster information which is a cluster identity will be advertised to the broker and it also reconciles that information of the other clusters to itself so the ports which are Submariner route agents running on the worker nodes only have to know who is the local leader so that I can forward all the traffic associated to my remote cluster to my local gateway node sorry I have two questions the first one is about the router here the router is act is just one normal port of this cluster or just one independent device okay yes that's a good question so today if you download Submariner by the which you actually can do so it is something that you can evaluate yourself like if you're interested in this hybrid cloud kind of environment you can just go git clone Submariner and then give it a try there's an interesting video that is done by Chris Kim from Rancher so coming back to your question currently broker is an independent cluster so what we are doing is yeah I just I just suspect about the performance because you created the IPsec tunnels and you know IPsec tunnel will cost a lot of resource yeah okay so right I hope your question is not like here we are using broker mainly as a data store so what happens is the local gateway nodes update the CRDs on the broker about the information of the cluster but for the actual data let's assume that you have a pod on cluster west and it's talking to pod on cluster east that will never go through the broker it actually goes via IPsec tunnel as you said and yes IPsec has its own latencies and all but naturally I think that is anyway inevitable when you are connecting a non-prem cluster with a public cloud so you want to have some kind of encryption into the data so you don't want to just send plain traffic in a public domain so that is one thing so at the same time we have plans to leverage some of the public cloud service providers hardware like for example if you take AWS we have plans to use AWS hardware VPNs wherever possible at least that can help us you know to speed up the traffic and decrease the latency thank you the second question a question is about the multiple interfaces within one pod supporting such as for covenants we have the multi-task CNI or some dam CNI or some other CNIs it can support multiple interfaces within one pod for that case do you plan to improve it uh so are you saying that does this particular solution support pods with multiple interfaces yeah the multis project you're talking about yes okay we haven't evaluated that but we kind of briefly did some kind of demo with multis but not with Submariner so this particular solution today works with the CNIs that are based out of IP tables kind of implementation so we evaluated this on Flannel, Kennel as well as OpenShift so these are the three different CNIs with which we evaluated Submariner so if you have a CNI that is very much aligned with this it might work out of box for you but to be honest we haven't tested each and every CNI but our end goal is to have some kind of driver framework which helps us to uh have capture the CNI specific implementation in that particular driver okay thank you okay hello uh I have one question uh in current architect how do you solve the service disk discovery problem like if you have a pod in west cluster and another pod in east cluster and is a service and client model and you have a service and the east cluster want to visit the west cluster using kubdns like service disk discovery so how do you fix this problem yeah that's that's a very good question and as as we said we don't have a solution yet for that uh we have some use case document wherein we started capturing uh the kind of use cases that we want to address and we are trying to get some feedback from the community so there are some pull requests both for like I think service discovery as well as for network policy uh once we have some kind of you know idea on agreement on the use cases that we intend to solve we have few ideas in our mind saying how we will solve it okay so we don't have a pr for that yet but yeah so visit is the the service is from uh using the pod ip right you okay sorry I think it's time out but we'll be here so what we can do is like you know we can just okay thank you discuss thank you thanks for attending


But to me it felt like I was reading one of my A level government and politics essays. I said what I said and I'm not changing on it, okay? And I hope, oh, I sounded really weird there. I don't know what I'm going to end up calling the title to make you want to click on this because I feel like a lot of people won't want to click on this because I'm reading nonfiction. So I don't know how I'm going to law you in but I'm going to do it somehow. For those of you that maybe don't know me or haven't been here long, you may not know that I love reading nonfiction as well. There was a period at the start of like 2018 where I read one fiction, one nonfiction, one fiction, one nonfiction. And whilst it's just not sustainable for me anymore, I'm interested in a lot more fiction books than I am nonfiction. I've still been wanting to read it fairly regularly. There's something about being in lockdown and the situation that we're all in. I just not used to being locked up, I can't take it, too much. Where I think that learning about topics is so important. And so what I decided to do this week is read three feminist books. I'm a feminist. We should all be feminists in the words of our Lord and Savior, to Amanda Ngozi Adichie. First is Invisible Women Exposing Data Bias in a World Design for Men by Caroline Criado Perez. So this is basically looking at how the world is designed for men, how women are statistically disadvantaged in society. And I think what sparked this video and sparked me wanting to read this and more books is I'm doing A Read Along For It with Keras and Britt. I think it's actually gonna be happening, a live show, about an hour after this video is posted. Like literally the same day. And so because this is nonfiction, it's not like there's gonna be any spoilers. So even if you haven't joined us for, you know, reading it, if you're interested in what I speak about in this video, literally go to Keras' channel who's hosting it. I'll put all the links down below. And go watch the live show. And if you're watching this like an hour or more than an hour after I posted the video, then obviously the live show will still be up there. So I'll link it down below. But I'm really excited to talk to Keras and Britt about this. I have heard some mixed things about the author that she can be exclusionary of trans women and stuff in her statistics. And so that's something I definitely want to keep an eye out for when reading this. The statistics that I've already heard from this about how, you know, car crashes are designed for men. So women are much more unsafe during car crashes. Drugs are designed only tested on men and stuff like that. I think it's gonna be really, really interesting. Then we've got Bad Feminist by Roxanne Gay. I've wanted to read some of Roxanne Gay's stuff forever. And I think this is probably her most famous collection of essays. I think this is essentially her looking at what it means to be a feminist in the modern day and trying to examine how her idea of a feminist maybe ties up with that.  You know, like maybe still being too interesting like trashy pop culture. I still, I could name for you every single one of the Kardashian grandchildren if you wanted me to. Probably guess their ages as well. True, just turned two. I don't think so. I don't think I'm allowed. No, I don't, I don't, I don't... No, I'm not allowed. I know I'm not allowed. And then the last book I'm going to be reading, I'm going to be reading between audiobook and ebook.  Does that right? Come, come, come by... I don't know if I said that. I just said it instinctively. Wow. River Collective by Kianga Yamata Taylor. So this is about that collective who were a group of radical black feminists. And I think this is a basic collection by their founding members talking about the legacy of black feminism. I like sometimes to surprise myself. This hasn't been on my radar. This hasn't been on my TBR. I was just kind of scrolling through some feminism, lists of books and scrolling through script. And this is just something that really caught my eye. And I just thought, I'm just going to go for it. I think that's something that's really fun to do sometimes as much as I enjoy taking up people's recommendations. This is kind of the equivalent and what we can do right now of going to the bookstore and picking up a random book. Do you know what I mean? Which is still I think a great thing to do and something I really enjoy. So I can't go to Waterstones right now, but I can scroll through script and pick up a random book. So they're the three books which are going to be reading in this video. I'm going to start Invisible Women first. Hello, hello. I have been tabbing this quite a bit. I never usually tab. I'm just under halfway through. I've been reading it quite slowly, but I felt like I just needed to take a step away from reading for a little bit and just breathe. I'm out of breath. And I just think it's time to breathe, like just breathe. It is just so nice to breathe. What this book is really great at exposing to me is even when we maybe have a statistic that shows how women are disadvantaged. The most obvious one is the pay gap between men and women, but there's many other ones as well. Whenever we see a statistic like that, chances are it's actually much worse because of the gender data gap that we have. Often we do not collect data on women. Often it's standardised by men. And so what this is really exposing to me is how there is a lack of data exposing women and how much worse the situation is than we often realise. It's so good. The only thing is for me, it is kind of all blowing into one. Oh, I really like the section on unpaid work done by women, so like housework, child care, caring for relatives. Globally 75% of unpaid work is done by women who spend between three and six hours per day on it compared to men's average of 30 minutes to two hours. And I also talked about how regardless of whether a man or a woman is in a relationship or whatever, the statistics stay roughly the same, which I found very interesting. Sometimes it is all blowing into one. And I'm finding it a bit difficult to read and I don't think it's because of the topic. I think just the writing style is a bit off. And I think writing style is always a bit difficult to identify in nonfiction. I also often find it much easier to identify whether like the writing styles work in fiction. But I just think the way she writes is just a little bit off to me. I'm not saying it's bad, but me and my brain and it, me and my brain and it, there's three in the party. It doesn't necessarily match up. Do you know what I mean? Like I just don't think the writing style is necessarily for me. And I'm going to try and make a lot of progress on it today because I'm like, I'm taking a bit of a day off from uni work. I think it's like everyone understanding that we all have different priorities and like working is just, it's not my top priority. It's never going to be. In terms of how we get free, I've only read the first chapter, but now I've finished the audiobook I was listening to. I'm going to be listening to the audiobook of that instead. Very interesting. Love the way that's written. So engaging. And like so many interesting things I'm learning about this collective of women, like how they coined the term identity politics. It meant something very different to how we're using it in the modern age. For them, it was like black feminism politically, you know.  And just so many interesting stuff. I can't wait to dive more into that now that I can listen to the audiobook. Visible Women by Caroline Criado Perez. And I think I'm going to give it 3.5 stars. The thing is, I spent like a week and a half reading this book, which is not normal for me. I read quite a lot on fiction. It's not like nonfiction is a genre I'm not comfortable in. I love nonfiction. But something about this book, and I think I've mentioned it a few times, was just her writing style wasn't very engaging to me. I was often forcing myself to read this. And that's really strange to me when it's a topic I'm so passionate about and so interested in. Everything she was saying, I was interested in. It was just the way that it was written. So because I tabbed loads.  Women are so disadvantaged by the data gap and all the different ways in which women across the world, not just taking a UK and USA look, but how women are disadvantaged in so many countries all over the world, how cultural differences and beliefs can impact women's lives completely. It was really interesting she was talking about natural disasters. She was talking about how in Bangladesh a cyclone warnings go off in public spaces where women are not allowed. And women are not allowed to leave the house without a male relative. So often they don't even know the cyclones are coming. They are dependent on a male relative to come back to the house to get them so they can leave, so they can go to escape somewhere. But then even the shelters are just one big room and women are not supposed to be in a room with a man who's not a male relative. And so women just end up dying because of these societally ingrained rules. So I would definitely recommend this book. But to me it felt like I was reading one of my A-level government and politics essays. I said what I said and I'm not changing that, okay? You have to cram in loads of statistics but you're not able to step back and talk about the theory and the implications necessarily behind it if that makes sense, although it is from your implications. I sometimes just wanted to step back and take a bit of a breath. It just felt like it was statistic, artistic, artistic, artistic, and it didn't flow nicely for me. So I would definitely recommend it, based on the topic and the information it gives. But it was just a bit of a strange read. In terms of how we get free audio book, I'm just under halfway through that and I'm loving it. It's essentially just interviews with these women who start this collective and it's like listening to a podcast and them talking about their life. It's so interesting. And I just think they're incredible women. It does feel like a podcast. And I think it is gonna buy the end of it.  I'm not expecting that because I think the format is gonna get a bit repetitive. I wish they had different narrators for each woman because there's something to like blur into one. I think it would help me if they all sound different. But I think it's a great short read, a great short audio book if you're looking for something like that. And it's just so fascinating how much of the work these women did in the 1970s has impacted on our feminism today. I'm gonna pick up Bad Feminist by Roxane Gay and I'm really excited to read these essays after reading Invisible Women because I think this is gonna be a lot more about personal experience, about feelings, about the the phenomenons in society that data can't necessarily articulate. Hello. Today I'm doing nothing but reading.  Hope you like the Tommy Wazosha assigned for anyone who's watched The Room. Hope you like my towels. I'm about 100, just over 100 pages into Bad Feminist by Roxane Gay, obsessed, obsessed. It was a cultural reset. I know I'm just gonna devour this state. It's been a while since I've just wanted to devour a book like this and for it to be non-fiction is so unusual for me. She's speaking about loving point issues in here but my favourite essay has been about her love for Scrabble and like the competition of Scrabble. I could read a whole book of essays about her love for Scrabble. Just the way she writes her, the way she articulates her feelings I'm just in love with. She's touching on a lot of popular culture but also a lot of personal experience and just the way it's all meshing together is incredible. So I'm just gonna devour that today and then whilst I'm listening to my audio book which is How I Get Free, I'm gonna play Animal Crossing. How I Get Free I'm still very much enjoying but it is getting a bit like repetitive. She's asking all of these women very similar questions. Today's just a good day. Today's just a great day. You know when a day is just a good day? Today is that day. I feel so happy and I just wanna look. This is lovely isn't it? Okay so final check in. I, oh hang on the book's really far away from me. I could reach that. I finished Bad Feminist by Roxane Gay and I'm giving it five stars. I loved this. I read it all pretty much in one day. Just the way Roxane Gay writes was so captivating and I love how all-encompassing this book was. It wasn't just a book about gender. It was a book about race. It was a book about politics. And for me that's what feminism should be. It should be all-encompassing. It should be all-encompassing of gender, all-encompassing of race. Like your feminism needs to extend beyond small boundaries that some feminism can. And I just wanna read everything she's written ever. The Scrabble chapter is still arguably my favourite one. However, I didn't know so much to learn from this book and I'm so happy I read it now. And I just think you should all go read it. If you want to learn about the world we're living in, if you want to learn about a black woman's experience living in the world we're living in, it's just perfect. Like she's a perfect writer and I could not wait to read more. There was so much in here I highlighted. I love when she would discuss things like Fifty Shades of Grey or Girls by Nina Dunham. Dunham, I think that's her name. Or Tyler Perry, like stuff like that. And talking about how maybe those things treat black women or women in general or the working class women. It's so interesting. And so yeah, I loved it. How we get free, I ended up giving it three stars. I still really enjoyed it, but I definitely think the format grew tired. I think even just a short bibliography of each of those women or just a bit more of a timeline for the Cumbahee River Collective would have really helped because I was just so lost on what had been happening sometimes. You can see all my toiletries in the back by the way. Sorry, my geodorant. The women did kind of blur into one. The narrator was brilliant and in the last one in particular we got a good sense of her personality just through kind of like her use of language. But I think just a bit of a setting of the scene for each of the women would have really helped and I think I would have enjoyed it a lot more. I think it would have been a four star if that had happened. But still would definitely recommend it. It's a short audio book and I loved learning about these women who I hadn't known about beforehand. So I hope you enjoyed this video. I really enjoyed reading some feminist literature which I haven't done in a long while. Let me know if there's any in these video that you are going to read. If you've joined us for the Read Along for Invisible Women, I can't wait to chat to you about that. Go check out the link below if you want to join in, if you've read the book already. I mean again it's not going to be spoilery so you can come watch the live show if you want to learn a bit more about our thoughts. You know you're not going to get spoiled for anything as a non-fiction book. And yeah thank you very very much for watching this video and I will see you very soon. Bye!


Our next lesson is introduction to bar chords and there isn't really even a song associated with this I just want you to learn how to play bar chords So if you look at the worksheet that you have it really sort of outlines how to read a chord chart or a chord diagram and And then takes you through the process of learning bar chords. Let me take it you through it real briefly here We're going to base our bar chords on an e major chord If you look at the chord diagram, you'll note that your index finger goes on the first fret on the G string Your middle finger second fret on the A string and your ring finger second fret on the A string So the e major chord looks like this and if you strum Now to begin to learn to play bar chords. We are going to keep that same pattern, but we're going to switch fingers Instead now, we're going to put your middle finger on the second fret on the first fret Excuse me middle fret finger on the first fret ring finger on the second fret and Pinky on the second fret same chord E Now I want you to move those fingers up two frets in that position And sound like much but now you're going to lay your index finger on What now is the second fret to get this sound? On up the fingerboard


Welcome to the course! I've been told it's important to be able to see your instructor, so here I am, preserved for all of time. The images behind me represent two ideas you should keep in mind throughout the course. On the left is a representation of a quote by Archimedes. Give me a place to stand at a lever long enough and I can move the world. Math is one of the most important levers that exist, and the math you're learning in this and subsequent courses will help you change the world. The other figure shows an approximate construction for a seven-sided polygon. It's a reminder that a problem exists whether or not we know how to solve it, so sometimes we have to make do with approximate solutions. This video introduces important information about how the course will be run. It's important to keep in mind that learning in an online environment is different from learning in a physical environment, and learning in a synchronous environment is different from learning in a synchronous environment. Success in the course requires adjusting to both the online and asynchronous aspects. So let's take a look. So if you haven't already done so, you should set up a MyOpenMath account. Go to www.myopenmath.com and follow the instructions for registering as a new student. So all of this is pretty standard, but make absolutely sure that your first and last name are those that are listed on your student transcript, and make sure that your email address is one you check regularly. Also in the email, I'll have sent you a course ID and an enrolment key, so you can enter those here. Now some of you might have a MyOpenMath account from a previous course. If you do, you can log in and then add the course by clicking on Enroll in New Class. And again, you'll need to enter in the course ID and the enrolment key that you've been supplied. So now this course should show up under courses you're taking, and you can click on the course to enter it. Now here's a quick note. If you accidentally click on the X, the course will disappear, and what you'll have done is you'll have hidden it. To recover it, click on View Hidden Courses. So let's enter the course. And now welcome to the world of asynchronous learning. While this course has lectures like a traditional course, they are self-paced. And what this means is you can watch them when you want, where you want, and how you want. So this course is perfect for some people. And it's very important that you determine beforehand whether you're one of those people that this is perfect for. So let's talk about how to fail this course. To ensure that you'll have wasted your time and money, take the following steps. Don't watch the lecture videos, wait until the due date to begin the activities, and wait until the due date to take the quizzes. Now you probably don't want to fail the course and waste a lot of money, so let's talk about how to succeed in this and other online courses. To succeed, watch the lecture videos, reviewing them literally as often as necessary, and keep trying until you get 100% on all activities and all quizzes. When you open up the course, you'll see the calendar. If you click on any date, you can scroll down to the bottom of the calendar and see a detailed listing of what's due on that date. There are three main course items. There's the activities, the quizzes, and the exams. So the activities, well let's click on it. So the activity has a time, a points possible, and a due date. The really important part here is the due date. In the real world, if you're going to be unavailable on the date something is due, turn it in early. The due date is an absolute, there are no extensions for any reason. Each activity consists of a lecture followed by a couple of questions. And here's where that activity time came in. This is the total length of all of the lectures. Typically, each lecture is between 5 and 10 minutes, and after you watch the lecture, you can answer a few questions. And once you're done answering, go on to the next page. You can leave and return to an activity anytime up to the due date. So if you only have five minutes to do math, spend five minutes doing an activity, and come back later to finish. You'll need to be able to enter your answers into the MyOpenMath system. The good news is that's pretty easy. The bad news is you are the one who's responsible for making sure that the answers are entered correctly. Fortunately, MyOpenMath has a lot of built-in syntax checking, and if you enter in something it doesn't understand, it will generally ask you about it. So, for example, here we want to enter in an equation. If we don't, then it will say, and if you submit your answer at this point, your answer is wrong. A syntax error is an error. Your answer will be incorrect. Fortunately, we haven't submitted our answer yet, so we can go back and fix it. And if you get 90% of an exam correct, you get an A. But would you fly an airline if 90% of their flights got to the right destination? And so the proper way to think about it is 90% isn't good enough. And with MyOpenMath, you can re-attempt problems in the activities as many times as you want. Strive for 100% in all activities and all quizzes. This course also has quizzes. So again, if you go to any date, the detailed view of what's actually due on that date will show up below the calendar. And you can open up the quiz. So you can start the quiz. And one important difference is that the quiz, in addition to having a due date, also has a time limit. So if you leave for half an hour to get lunch and come back, you will have lost half an hour on the quiz. So don't start the quiz until you're ready to complete it.


Hi. Welcome to ByteScout. In this tutorial, I'll be showing you how to generate a code 128 barcode with ByteScout barcode SDK using C-sharp programming language. Let's start. First, you need to add the ByteScout barcode SDK reference. To add a reference, right-click references then, click Add Reference. After that, search and select ByteScout barcode SDK. Once you're done with the reference, you may now insert your code and run your program. Once the program runs successfully, you will be able to see the generated barcode in the bin folder. That's all for this tutorial. Check out our other tutorials on our YouTube channel. Just search for ByteScout and don't forget to subscribe.