Let us get started. Sorry for the slight delay. Am I audible at the back? Yeah. How many of you were there for the previous sessions? Yeah, I know you. Anybody returning from previous one? Okay, so then in that case I will do a quick recap of what we did in the previous sessions. Yes, we did five parts and all these five were recorded. So our friend Alan has helped us to record this. All the five are available on engineers SG. So you can view the recordings of past all five series in this. So I will quickly go through what we did so far. So that is little bit about me. So since many of you are new, my name is Nilesh. I am a Microsoft Azure MVP and those are my social contacts. So if any one of you wants to connect with me, feel free. In this series so far we did Docker in the first part. We did Docker compose in part 2. We did container orchestration with MiniCube in part 3. Then we moved on to AKS. We deployed a multi-container app which is three containers basically web front end, web API and SQL server 2017 running on Linux, all inside containers. In the part 5 we looked at debugging and monitoring using OMS, the Azure monitoring solution as well as open source solution in Prometheus. So this one is part 6 and we will look at CI CD, continuous integration and continuous deployment of Docker containers and Kubernetes. So this I call bonus because it is not anyway related to the initial five parts. It is more like how can we use Kubernetes and Docker. The concepts that I explain here can be applied to any other project as well. It is not specific to the earlier five parts. So even if you miss the earlier five parts, that is not really a prerequisite for this one. So what we will be doing today is looking at how can we implement continuous integration and continuous deployment process with Docker containers and Kubernetes. Let us start with the state of DevOps report. How many of you have heard about the state of DevOps report? So this one is published yearly by a puppet and they basically try to look at what major companies are doing in terms of DevOps implementation. How are the tools, how are the technologies being used and here are some of the key highlights of this DevOps report which was published this year and they are trying to compare the allied group against the low performance. So we all have heard about companies like Facebook, Netflix doing like thousands of releases a year. We have gone on from let us say one year every two years, one release every two years to like doing multiple releases in a month and even days. So how are people doing these kind of fancy things. So these are some of the factors this report looks at and they try to give different coordinates on different tools and technologies. So as per the latest report we see that companies who are doing like the allied ones 46 times more frequent code deployments.  There are seven times lower change failure rate. So if something goes wrong you can find very quickly that something went wrong with your latest changes and the times to recover. So in case of incidents people are able to recover almost 2600 times faster compared to old times. So I have given a link here. You can go back to that link and find more details about this DevOps state report. This picture tells you what is mainly DevOps. So it is not like different phases. It is a continuous cycle where you build, you plan, you deploy. You do continuous integration which is at the code level.  So you do not just stop at deploy. You look at different matrix when you operate in production and then you incorporate some of these things back into the cycle. So here are some of the most commonly used or popular tools for each of the phase in this pipeline. So I would not be able to go into each one of this as you can see it might probably take months to complete all of them. Instead what I will do is I will show some of these concepts mainly around continuous deployment and continuous integration using Azure DevOps. So some of you might have heard about VSTS Visual Studio Online Services in the past that was the online version of TFS. This has been rebranded and now we have these five main core components which we call it Azure DevOps. So this consists of Azure boards for your planning, tracking. We have the repos. So we can have private repositories as part of Azure repos. Azure pipelines is where we define continuous integration and continuous deployment of the pipelines, how the code flows from your source control all the way to your target deployment environment. Then there are test plans and Azure artifacts. So if you work in like Java we have these different repositories or Go or even Node. They have the NPM or Java has their own repos. So this Azure artifacts is similar to that. So it is like a new get repo where you can store your artifacts of the release. So what we will be doing today is following something similar on the top. We will use Visual Studio Code as a code editor. The code for this particular series is available on GitHub. So I will be pushing a change or multiple changes to GitHub which will trigger a continuous integration. Everything will be built on a dedicated server. So it is not running on my local machine. So this is to make sure whatever I check in works fine on a dedicated continuously integrating machine. That would produce the Docker images for my application and these would get deployed to a Kubernetes cluster. Any questions so far? So let us get started. So what do we need to build a continuous integration pipeline? First thing we need is to connect our GitHub repository to the Azure DevOps. So this is the UI for Azure DevOps. I can do dev.azure.com already logged in. If you are not logged in you will be asked to log in and you will be brought to this screen here. And here I can create a new project. So I have just started a live demo project. So when I create a project I get all those things which I described earlier. So you have the boards where you can build your backlogs, prints, you can build custom queries, repos and the pipelines. And each one of these they have these sub components. So we will be focusing mainly on the pipelines today continuous integration and continuous deployment. So I need to start a build pipeline. So that is continuous CI build. I will first build my code. So to build it I need to define how do I want to build my code. And these are the different steps I define for building my code. So in Azure DevOps rather we have support for various things. It is not just Microsoft specific support. So here if you see for building we can build .NET, Android, Docker, Go, Gulp, there is Java support. So it is really a cross-platform support. And that is why one of the reason why Microsoft changes from VSTS to Azure DevOps. So now we are not just limiting to Microsoft specific products but you can also build other kind of projects apart from .NET and .NET core. And this is various set of tasks which are provided by Azure DevOps. So for testing, for utility, for packaging, these are by default which comes along with the box. And then there are others which are like Sonor Cube. Then for testing there is Hockey Apps. These are marketplace. So these are not provided by default by Microsoft but other players in the market. They provide these tasks and we can create or we can use these tasks in our build cycle. So as part of my build what I want to do is first thing to create those images, Docker images. So first thing is to connect my repository to this build. And here I have established a connection to GitHub. I give my credentials and I select which is the repository. So this is a case learning series and the branch which I want to build. So anytime there is a check-in happening into this branch, it would trigger automated build here. And this will pull the latest version of the source code as part of this agent job. I also define as part of my agent. Where do I want to run? So in the agent pool I can specify what is the agent I want to run my job on. Is it a macOS? Is it Ubuntu? Is it a hosted Visual Studio 2017? In this case, I will be using Ubuntu because I am using the Linux version of Docker images. So I need a Ubuntu machine to build those. And as part of the task, I want to build my images. So I start with, I can go here, add a task and select Docker. And there is a Docker compose task. So in compose, that is what I am using here for build services. I need to tell what kind of container registry I am going to use. So am I going to use Azure container registry or some other third party registry? So in our case, we are going to use a container registry which is Docker hub. And I have created a connection already to Docker hub. Again, same thing like GitHub. I need to give my credentials to connect this service to the Docker hub. And then I provide which is the Docker compose file. So this file resides in my GitHub repository. So this is my base file. And on top of my base file, I have a build file which is kind of separating my build images, the ones that I am building custom images and the ones which I am using from already pre provided images like my Microsoft SQL server image is provided by Microsoft. So as part of my application, I am not building it again. I am just using it. So I do not provide that as part of the build. So in my compose files, I am just giving those images which I am building myself. So the custom images which are part of my application are specified here. And then we specify, I will come to the build tag later. Why do we need it? With these, I can say take this compose file and build my images. Once the images are built. So these are built by taking the latest version of the code on this particular build agent. Images are ready. Once the images are ready, I need to push it to the container registry Docker hub. So I use the same Docker compose task here. And instead of using the build command, so in the first one, if you look at the action, I am using build action, build service images. In the second one, instead of building, I am going to push these images to Docker hub. So the other settings are exactly similar, but I say push. So this one, if the build is successful, it will go and push the images to Docker hub. So let us test this. So I can say save and queue.  So now it has started with the build. And we can see the live build output here. So it checked out the latest version of the code. And now it is using that build, the first task that I specify. So while this is building, let us go on to Docker hub and see what is the current version of the image that we have. So this is one of the image which I am publishing, Tech Talks web. So if we look at the tags, the last push was 33 minutes ago. So once this is successful, we should see a change in that last push version of the image. This takes a bit of time, about three to four minutes to build all those three images and then push them because it downloads the version of the image, base image from Docker hub. In which consist of sort and code, SQL database, SQL client and web API. So front end, middle tier and the back end. Yes. So while this is building, let us go on to the second phase. So assume now this images are built successfully and they are pushed to the Docker hub registry. Then how do we deploy it to Kubernetes or your target environment? So that is where the release pipeline comes into the picture. So I will go to one of the existing release pipeline which I have already built previously. And this again has a similar concept in terms of the interface. So what we do here is, first we take the output of our build. So that is your artifact of the build, which is the input to the deployment stage. So we have already built the image and now we are starting to trigger the deployment. So this is, we can say add artifact and it will ask from where I can select build, which project and what is the source. So this is my build name, the build pipeline name. So the output of that would come as a input here. So these are the artifacts which are available. And then as part of deployment, I will start to deploy. So this is slightly complex version. I will take the simpler one first, v1, which is just deploying plain Kubernetes. So here I am going to use a Kubernetes command, which is a kubectl apply. So I have already created a cluster. Cluster is up and running. So if I go to the dashboard, you can see here in my resource group, I have a Kubernetes cluster running, which is this AKS cluster. So I will be deploying all those images onto this particular cluster. So to deploy to this, I need to connect my build server or this pipeline server to the Kubernetes cluster. And that again is done through the connection. So if I go to the connection here, I need a connection to the resource manager, as a resource manager. So this is again, you just provide the details of your subscription, give a name, which subscription you want to use, and the Kubernetes cluster. So it should be this one. So once you give the subscription, you select which subscription you want to use. In this case, I am using a subscription called Microsoft Azure Sponsorship. And then the resource group. So this resource group is actually the resource group that I have specified in my cluster. So if you look at this, this is the resource group name, which will be populated. So the build server would be actually communicating with this particular resource group. And once I have that, I can connect to the Kubernetes. So for this, I need the configuration, which is again similar. I need the URL of the Kubernetes cluster, which again we can query using get the context. When you try to query the Kubernetes details using kubectl, you will get this server URL and the kube config. Same thing you can get from your code as well. So here, this is the file, which is the kube config. So when you go to a case cluster and get me the credential, it creates a kube config file on your local machine, which contains the cluster configuration. So in my case, I had created multiple clusters. So it has all those cluster details. But for the AKS cluster, if I search for AKS here, so you can find the server URL. This is the URL I need to put in the Kubernetes configuration. And then the contents of this kube file should go as part of this kube config. So this is how your build server would be able to connect to the Kubernetes cluster on Azure. This kube config, this is the contents, the whole content of this file. So this contains your cluster credentials, the certificates which are required, which user. So you can see the context here. You can see as well as the users. So it contains all this information. So this, when you put in the configuration here, it picks that information and uses it to connect to the AKS cluster. No, no, I need to copy and paste it. Yes, entire file. Or you can create another kube config with just the one related to your specific cluster. So the AKS cluster, I can choose only those settings, create a separate file and put the contents of that file in here. And then we can verify that the connection is fine. So now we have the connection to our GitHub repo, the Docker Hub, Azure Resource Manager and Kubernetes. So using this, we can go back to our release pipeline and start pushing the changes to the cluster. So in v1, there is only one task which I am doing. And the settings for this, if you look, I am running the apply command. So this is how we can run the exact kubectl command. So there is create, delete, exact. So if you go and look at the earlier demos that we did, we use kubectl apply. So I am using apply command here and I specify which is the files. So all the manifest files, so these are coming as part of my build output. So I copy all the AKS related files as part of the build output into a drop location and I am giving that location here. So I am saying whatever is there in AKS folder, you run kubectl apply on that. So if I go back to the code, you can find all the manifest files here. The one for Grafana, Prometheus, Web API, TechTalksDB, Web, the namespace. So all this is applied onto the Kubernetes cluster. So how do I get these files as part of the build output? So let us go back to the builds again and we were on. So this is part of the publish artifact. So if your build is successful, if creating of your Docker images is fine, if pushing that to the Docker container registry is fine, I am going to say publish the artifacts. So usually when we do publishing of the artifacts, if you have used TFS in the past, there is a convention that anything which goes as the build output is in the drop folder. You have a folder called drop and you specify what should be the content. So if it is a dot net application, you can put a exe, which is the output of your build or in my previous organization, we used to create MSI files as part of the build output. So this would go into the drop. But in our case, the output is actually the Docker container images which are already pushed to the repository. So we do not need to push those images again, but what we need is some supporting artifacts like the manifest files and that is what I am specifying here. So I am saying in the drop AKS folder, take what is there in this particular directory, AKS and put it as part of the drop. So when this build finished, now it is already done. If we go to the build output, you can see that it did the publishing and then it published the artifacts at this location. So that is how the build is completed. It puts those manifest files into the drop location and then the release pipeline picks it from the drop location and does the deploy. Is it clear? Okay, so let us go to the Docker hub again and see what happened to those images. Since the build was successful, now you can see the latest version was updated about nine minutes ago. That is when our build passed. So now we are able to build the images as part of the build process and also publish them to Docker hub. Now let us look at the cluster where it got deployed. So I am deploying this to a namespace called AKS part 4 and this is where it should have got deployed if the release went fine. So let us see at our release what is happening. So in the releases, we have this remote cluster. So this is the Kubernetes cluster. This is running on Azure. So here, 1851, 15th run. So let us look at the definition of this. It has the continuous deployment trigger enabled. So this is one setting which you can use for continuous deployment. So if you do not want every build to be deployed, you can disable it. So unless and until you come back and enable it again, it will not automatically deploy. It will just build and your release would be ready but deployment would not happen. So I have enabled this, but it did not run. So okay, that is because I created the build on the other project. So this project does not have a release pipeline. I was actually showing you a pre-built release. So there is no release here. Sorry about that. I went to the pre-built release one. So let us do one thing. Now let us go back to the place where I was saying I will do a code change and it goes all through the triggers. So these two pipelines are already configured to work with that trigger. Why do I have two? The first one, if you look at the simple one, v1 kubectl which deploys using a Kubernetes apply, kubectl apply command. There is a slight problem here. So let us look at the way it is doing the deployment. Is it visible at the back or do you want me to increase the font? Okay, little bit bigger. Okay, fine. Okay. So this is the manifest which is going to be deployed as part of that deployment. And if we look at the image, we are saying, take this Tech Talks web and I am not specifying any tag. So it takes the latest version of this image and it will try to deploy. Now kubectl or Kubernetes command line is kind of smart. It already sees that there is the latest version deployed on the cluster. And even if we try to deploy the same version, it says, okay, it is already deployed. We have the latest version. It will not deploy the updated version because it cannot make a difference there. And this is a problem with these kind of manifest files. These are like static files. We cannot dynamically provide a different version of the image if we are using this approach. So what is the solution? Usually what we do is add a specific image tag so that next time when the image is built, we are not just saying latest, we give a specific image number or a tag number. This could be like an incremental number or you could have a convention based on your organization. But it is to say between the two builds, there is a difference and you want to create immutable artifacts for each version of your build. So that is why if you look at the build definition, so I am on the learning series. If I go to the builds and if I look at the build definition, what I am doing as part of, so as part of the build and the push, what I do is I specify additional image tag, which is the build number. So this is unique for each build. And this is what I am adding to the build. So to the tag as an image. So when the image is built, it would have the latest version as well as it will have a build version attached to it. So let us trigger this build and for this, I will just make a small code change. So I have a carousel control here which is commented right now. Let me just uncomment it all this and then go and push this change. So there is one change here. Let us add. So this one is pushed to GitHub and it should be picked up automatically by this build. So you can see this here. So let this build go on and we will look at the second part of that build. So now we have the tag associated with that image. How do we deploy that? The tagged version of the image. So we cannot use kubectl, the command line because it works with the static tags. So this is where a supporting tool comes into the picture which is called as Helm. Around Kubernetes, there are various projects which are quite popular and Helm is one of the most popular when you work with Kubernetes. So my version 2 of the release pipeline, I am using Helm and let us look at the definition. So what Helm does is it acts as a package manager for your Kubernetes application and you can specify what are the contents of your release. Let me show you one of the example of Helm. Helm definition, what it calls as a chart. So in Helm concepts, it calls the artifacts that Helm produces as charts and it gives you templates as well as values. So that is by convention something called as chart.ml which is like what is the application version or API version we are using a brief description name and the service and deployment are similar to what we have in Kubernetes manifest. But this allows us to provide a template. We are not providing fixed values here and it is like if you are using any of the templates like ninja templates, this syntax would look similar to you or even YAML. So all that we are doing here is namespace name instead of hard coding it, we take them from templates. So in Helm, there is a concept of a Helm release. So we are picking those environment kind of variables or release specific variables and we also pick something from chart. We pick something from the values. So what we are doing is we define a template and we provide the values. So for values, we give default values. So these are the default values that it will use if we do not override and this is how we combine. So like image name, I can say use an image tag not just the image name. I can specify the tag here in the values like use the latest tag. That is the default but I do not want to use the default. So as part of my release, what I am going to do is I override that. So I had the Helm definition somewhere. So let me close some of these and go to the releases back. So here the first thing I need to do is to install Helm on my target cluster because Helm is not a default installation as part of Kubernetes. It is a separate project. It has its own installer. So as part of the deployment, we do the installation of Helm on our target AKS cluster. Helm needs initialization. So like Kubernetes init, it does a Helm init and we specify again the connection where we want to connect to what is the namespace we want to use to deploy this and then we start with the deployment. So I am going to deploy the database first Tectox DB. I need to provide what is the namespace. So instead of hard coding the namespace in my manifest file, I can now pass it as part of the Helm task. So that is one dynamic feature I have here. I specify what is the chart name. So again all configurations, I all pick all these items from the build artifacts. So as part of my build along with the Kubernetes manifest, I also publish those Helm charts and complete Helm directory what I have. And in this case, I am going to use the specific chart for database. So if you look at my code in the database folder, I have the template for database deployment. I have the chart for database deployment and I have the default values. So this is what I specify here. I specify a release name. I can specify a set of values as well if I want and then I also specify the build number as part of the overrides. So to keep this demo simple, what I did was since I am updating only the web part, I did not dynamically inject the build number into database and API but I did it for web so that it is faster the deployment. So if you look at this configuration, here we are saying set values image.tag and this would be the build number. So dynamically what would happen here is instead of using the latest one, it would pick what is the build number. It will use that particular build image or docker image with that build tag and it will deploy that. So we have got rid of hard-coded Kubernetes manifest files and overridden this with the build. So the change that I did, let us see if it went through. So this part, the build part was okay. So if you look at the build output, everything succeeded. It published the AKS files as well as all the help charts and then if we go to releases, we can see this release was 1948 started. So just couple of minutes back and it succeeded. So you can see it did the help upgrade of the database API and the tech talks web. So if I go back here and if I switch to the AKS part 6 theme space, I should see for the web part latest release deployed. So you can see here AKS part 6 was deployed about a minute ago and then we can access this and you have the carousel control. So that was the change which I deployed all the way from making the change on my local machine pushing it to GitHub repo and deploying it to the cluster as part of a continuous build and release cycle. Any questions? You are talking about these files, this one. That is the default one. So it is when you install Kubernetes on your local machine, it will create a dot file like a config file and that is what it refers to. So like your DOS files like a profile file, that is the profile for Kubernetes. Yes, so as part of my build output, I am pushing also the, so if you look at this, I am pushing help charts as well. So the complete contents of that help directory whatever I have here, this with the charts for database web and the API is pushed as part of my build artifact. So that goes along with your Docker images, help is one of the build artifact. So this gets pushed into the drop folder and then release looks at it. So if you look at the release pipeline v2 version, it would be picking everything up from, so this is coming from the drop location again. So I choose this help and then database API or web and then the specific chart. I do not need to specify the chart, I just need to specify the root folder itself. That is one of the problem I had initially when I was giving the chart name, there was some problem. So you do not have to go down to the level of chart, you just specify this level. So we went through building the pipeline, connecting all the services GitHub, Azure Resource Manager, Docker Hub, as well as Kubernetes, we built the complete CI build. Then we went through the Kubernetes deployment, Cube CTL apply, which was the version one of our pipeline with the static image tags without the image tag basically. And then to solve that problem with the static image tag, we introduce build ID and help. So help of it is quite an interesting project because as I said, it gives you the ability to version your releases, Kubernetes applications. It also gives you ability to share your charts. So if you have something which is really common, there are repositories for help charts like Elasticsearch, if you are using Prometheus, Grafana, you do not have to build all those help charts yourself. These are publicly available. You can just point your deployment to these existing chart and you can say I want to deploy this chart onto my cluster. So that is a very good feature and it also has features like updates and rollback. So if you want to rollback to another version of the release, previous one, you can do that which is not that easy if you are using vanilla Kubernetes, kubectl command line. So we went through Helm cluster, how to deploy it. So that is like the end of the demo and the talk for me. These are some of the links I have for you. Demo code, it is all in GitHub. I have given links to some example of how to deploy a .NET core application using AKS, the complete tutorial as it develops Helm and the state of develop report. If you are interested in Azure DevOps, there would be an event happening in early January which would cover all those five different broad areas that I showed initially. So we will have the announcement coming out soon. So do look out for that. It is a full day event and again free for the community. We did not have any test case because in my Docker file, I do not have any test. So if you look at my multi-stage Docker file, I just have the build definition. So not Docker compose, I need to go to the individual Docker files here in the source. So that is the web one. So we just have the restore and publish. We do not have a test phase. But if we had a test phase, again as part of that build, we could say run a test task. You can do it as part of the build. Because this Docker file is a definition for packaging the application. Whereas you want to do the build separately. I am not testing automated code. I am just doing the deployment. So this is a very simple pipeline which takes what is delivered or what is packaged as part of Docker image. You can and you should ideally build a pipeline which goes through a test. Only if the test is successful, then create the Docker image. Even after you create the Docker image, you should run like performance test or functional test, automated functional test. And when that is fine, you should go and deploy it to the target environment. In the build, we can specify the different test cases. Yes. That is something you can do as part of the build definition. So here you would add those tasks. So I am doing, sorry, in the builds, not in the release. So in the build definition, you can add all those tasks here. So if I go, I should have a test task and I can pick up one of these test tasks. If I do not have what I find here, I can look at Marketplace. So right now you are running the build within the Docker task. What is the idea to be able to do? And then the test and then running Docker just for the publish. Yes. Any other question? For the publish, sorry, the release pipeline, you are designing this for a multi-stage environment. I mean, I have multiple environments. I would use help and then I would, I would defer the image between the environments because I wanted to run a different tag, for example. How would I store as an environment-specific configuration that I would enter into help? One way would be, you create different values here. So in my help definition, I have the values file, right? So here you can overwrite this for environment. So you can have one for development, one for production, one for QA or UAT environment. Or the other way is, you do the modifications at the time of actually deploying it. So here I am just setting the build tag. You can pass multiple values here. So you can override as part of this stage. Yes, or you can create even variables. So as part of your build and release, you get these variables. So things like secrets, environment secrets and all, you can create them. One way could be to create them as your build and release pipeline variables. Other ways to use a vault like Azure vault or some other vault where you store all these secrets and during the build and release pipeline, you pick those variables and inject into your images. Yes. That is just a proxy. So for that, you have to go to my PowerShell and I have a script called Browse AKS which is actually a Azure CLI command. Azure AKS Browse, I give the resource name and the name of the cluster and it creates a proxy to the actual Kubernetes cluster. You had a question? This is possible to require an Azure DevOps iLi using some kind of server. To use Azure DevOps pipeline using CLI. Yes, there is a CLI support and even here there is in the tasks, you can run some of these things using CLI. So in the build or the release, there is support for AZ. So if I go to the task, I saw somewhere there is CLI. I haven't tried it but I saw a demo last year at the Microsoft by Donovan Brown and he was doing everything on CLI. So it is possible. Any other question? So if not, I will publish the slides at these two speaker deck and slide share. The previous ones are available here and the videos are available as well from the previous five sessions. So thank you. I hope it was useful. Thanks a lot for coming. I've got some stickers.


Welcome to Spotlight. I'm Liz Wade. And I'm Colin Lover. Spotlight uses a special English method of broadcasting. It is easier for people to understand no matter where in the world they live. 1700 years ago, in the city of Rome, a man was put in prison. He was a Christian believer, and he had not obeyed the emperor. He was sentenced to be executed. While this man was in prison, he met a young woman. She was the daughter of the prison guard. She visited this man's prison cell often. They could not always talk together, so he and the woman began to pass notes to each other through the prison bars. They fell in love with each other. When it was time for the prison to execute the man, he sent her one last letter. The last note he sent to her was a love note. He ended it from your Valentine. Some people believe that this is the story that started the holiday we now know as Valentine's Day. All around the world, people celebrate this holiday on February 14th. They celebrate it in many different ways, but the message is the same everywhere. Love. Today's spotlight is on Valentine's Day. No one really knows if this story about the man named Valentine and the prison guard's daughter is true. The holiday is actually named after at least two men, both named Valentine. Historians, people who study history, have little information about either of these men. Both men died because of their Christian faith. One died in 197, and one in 269. Historians believe that both men died on February 14th. Later, the Christian Church recognized these men as saints, people of strong faith, and February 14th became St. Valentine's Day. Historical documents show that originally Valentine's Day had little to do with love. A recorded link between Valentine's Day and love did not appear until about 1200 years later. In 1382, Geoffrey Chaucer wrote a poem about love. He was a famous English poet. The poem told about birds coming together halfway through the second month of the year. The birds met on Valentine's Day to mate. The poem influenced many people, and soon after, other writers began to use these ideas in their own writing. The link between Valentine's Day and love became common. By the 17th century, Valentine's Day was celebrated all over Great Britain. About a hundred years later, people began to exchange small gifts or notes on Valentine's Day. These gifts were an expression of love between family, friends, and lovers. Today, many people still celebrate Valentine's Day in this way. They send a greeting card. These are usually just a simple paper note that expresses love or devotion. A person can send a Valentine's Day greeting card to his lover, his parents, his co-worker, or even his doctor. In fact, the greeting card association says that worldwide, people send over one billion greeting cards every Valentine's Day. People in Canada, Mexico, the United States, the United Kingdom, France, and Australia all celebrate Valentine's Day this way. But greeting cards are not the only thing people give or do. People may go out to a special dinner. They may buy each other a present or just some good tasting candy or chocolate. Other countries do different things. On Valentine's Day in Japan, women give sweet candy, chocolate, or flowers to people they like. They call this chocolate Giri Choco. In Japanese, the word giri means obligation or something someone must do. And choco is a short form of the word for chocolate. A woman may also give honmei choco to a person she loves or is in a relationship with, or she can give tomo choco to her friends. This may seem nice for the men, but men who received honmei choco must also give the woman a present. This happens on White Day, one month later. On that day, a man must give the woman a present worth two to three times more than the present he got. Sora News 24 is a Japanese news site. It shared results of a survey about this tradition. Most men do not like it. In the survey, one Japanese man wrote, I like getting the chocolates, but I hate having to buy every girl something in return. Honmei choco is even worse, because you have to buy something super expensive on White Day. In Finland, they celebrate Friends Day on February 14. This is not only a day for people in love, but it is a day for celebrating and remembering your friends. Some places do not celebrate Valentine's Day at all, but they do celebrate a different day for love. People living in Brazil celebrate Boyfriend or Girlfriend Day. On June 12, people in love exchange gifts like chocolates, cards, flowers and even special clothes. Some women even use this day to perform special customs. They believe these customs will help them find a good boyfriend or husband. Colombians celebrate Love and Friendship Day on the third Friday and Saturday in September. And many groups of people join in a popular tradition called Amigo Secreto or Secret Friend. Each member of the group chooses another member's name by chance. He gives the person he chose a gift on this day. So people in different places celebrate a day like Valentine's Day. They may celebrate it at a different time of the year. They may give gifts or greeting cards. They may write a special note to many people or to only one person. But there is a common idea in all of these actions. Valentine's Day is a time to think about the people around you. It is a time to think about the people you love. It is important for people to feel loved. But often we do not express our love for the people around us. So Valentine's Day offers people the perfect chance to tell other people how much you value them.  Tell your parents or children how wonderful they are. Tell your friends how much you like to see them. Do you love someone? You should tell them. Then tell us about what makes them so wonderful. You can leave a comment on our website or email us at radio at radioenglish.net. You can also comment on Facebook at facebook.com slash spotlight radio. The writers of this program were Liz Wade and Adam Novus. The producer was Michio Ozaki. The voices you heard were from the United States and the United Kingdom. All quotes were adapted for this program and voiced by Spotlight. You can listen to this program again and read it on the internet at www.radioenglish.net. This program is called Valentine's Day All About Love. Look for our listening app in the Google Play Store and in iTunes. We hope you can join us again for the next Spotlight program. Goodbye.


Alrighty. So this is going to be a bit of a different video today. I'm getting ultra serious and I'm going to ask for your help. So there's going to be a link down below in the comment section and the description of this video. And I'm going to kindly ask that you please share this video, like this video, comment on this video, and then also share the petition down below. It's an important petition and I'm going to explain in this video exactly why I'm doing what I'm doing. So for a lot of you, you may not have even noticed that Canada's Wonderland hasn't opened for its regular season this year. Neither has Calypso, Wet and Wild, Marine Land, but there are other places that are open. And congratulations! By the way, we were the ones that posted this original video of the overcrowding at Niagara Falls and yes, we were and still are extremely upset with the company that runs that place in the mayor of Niagara Falls. But we do want places like this open. Our goal isn't to shut down places like this. Our goal is to have safe operations and bring attention to a company that maybe needs to change its practices. If you have an attraction like this open, and there's been zero change or action since this video.  Nothing has changed. The people with the yellow shirts that they promised are working the rides. They're not walking about. They have one guy in a yellow shirt that mans the Tim Horton's washroom. That's about it. No one's handing out masks. Nothing's changed. But again, back to the video. I just wanted to bring a little attention to that. If this place can open, why can't Wonderland? And a lot of you, when I say or I bring up Canada's Wonderland opening, think immediately to Wonderland's regular season and go absolutely not. That's so much germs. That's so many touch points. How no, that's not what Wonderland is going to do if they open. If Wonderland opens, they're going to be limiting it to about 10 to 15,000 people in that very massive plot of land. There are stickers already laid down on all the queue lines and around the park, they have directional flows inside the park. They have an app that will track guest flow and alert security to break up overcrowding. On top of that, they have sanitation on the rides and trains and all touch points. Someone will be walking through the queue cleaning the queue lines. And it's just so much more. They've spaced out all the seating. They have a reservation system so people arrive at different times. They're going to check your temperature upon getting there. No one's checking your temperature at Niagara Falls. No one's checking your temperature before you walk through a haunted house at Niagara Falls or get into a cabin on that ferris wheel. No, nothing's going on there except them giving you gloves. And now masks are required after our video. Masks were not required in Niagara Falls before our video, but because of our video, they are required now. But before then, it was open. No masks required. Just gloves. That's all. You could go in the haunted house with just gloves on. And there were scare actors in there. But a place like Marine Land, Canada's Wonderland, Calypso and Wet and Wild and Santa's Village, they can't open. Not even with strict health guidelines, stricter than places that are open. If you go to the high ropes course in Niagara Falls, hardly any sanitation practices going on. Social distancing isn't taking place up there. Bottle necks of people from different families meeting at poles as they bottle neck up together. But again, Canada's Wonderland can't open. So why the petition? The petition is to showcase why these places, if they can't open, should receive government funding. And a lot of you might question me on this. I got this in my DMs. Well, why should a billion dollar company like Cedar Fair that owns Canada's Wonderland receive government funding for not opening? Well, they're a billion dollar company when all their parks are operational and producing growth in attendance. They're not a billion dollar company anymore right now. They're not. It doesn't work that way. In fact, they're probably just surviving. And when you replace that Canada's Wonderland and you employ people, and by the way, they were supposed to be a part of Stage 3 and then something suddenly changed. And they were told they were a part of Stage 3. They got the park ready. They planted all of their landscaping. They brought in all their maintenance workers. They trained all their ride ops. And now suddenly all the rides are just sitting there. The landscaping is beautifully done. They got all the plexiglass installed. They ordered all the PPE. They got in all their food supplies. And now it's just all sitting there. They spent all that money. And for those of you that don't know business, they spent a fortune getting ready to open this year. And now they've been basically left on red for when I understand. No one's communicating to Wonderland, anything. They've just been left in the dark. Yet a place like, look Niagara Falls, it's open. You can go play arcade games, high touch points beyond belief, go into an enclosed haunted house, high touch points and people screaming and all that. You can ride the Frankencoaster on top of the thing, like zero social distancing on that train unlike Wonderland, which would space the row. So one row would be filled, then there would be an empty row.  It makes zero sense, is my argument. So my petition is to draw awareness to the fact that Wonderland employees anywhere from 4,000 to 5,000 employees through the season. And then you got Winterfest. You have people that actually dedicate their lives to getting dressed up and playing a character that rely on that as a job. 4 to 5,000 people working at Wonderland just alone, suddenly not employed. And the government is telling them, there's jobs out there. No, there isn't jobs out there right now. There really isn't. If you could see my DMs, people are messaging me trying to figure out where to get a job. I've been trying to help, but there's just been an overwhelming amount of people looking for jobs. There's not jobs out there. Yeah, there's a few. But you're talking about thousands of people who suddenly don't have work. And on top of that, you're talking about a company that literally put land, didn't give it to the city, but they sold land because the city wanted it to build a hotel, not a hotel, a hospital. Wonderland also gave land for a transit hub. A lot of you don't know about that, but it's coming. There's a transit hub being built in the employee parking lot at Canada's Wonderland. Wonderland has always been there working with the government, employing people. One of the largest employers in Ontario. It literally provides an economic boost to all the businesses around in hotels. It makes zero sense. La Ronde in Montreal has been open through this pandemic over the last month or two. And there's been no outbreaks reported at that amusement park. It's pretty much the same in the United States as well. There was one park that had a few employees get it and the employees quarantined and then everyone else was tested and it didn't spread and they're still operating and everything's been dandy. It's not as dangerous as the media and some people are painting it out to be. If you're not going to allow these theme parks and water parks to open, and unfortunately it's too late for a lot of these businesses to open, we're in September, there needs to be funding. You can't just expect a place at Canada's Wonderland that probably produces hundreds and hundreds of millions of dollars in a season to suddenly not produce that amount of money and stay in business. They have massive amounts of bills to pay.  They had new rides that they were investing in hoping that they would bring in new attendance and yes, unfortunately things happen and it's unfortunate. But again, the government gave money to the Ontario Lottery Association. So if you're going to sit here and point out why does a company that makes money need money, the Lottery Association got money. The Science Centre got money. So what is different? Wonderland, it boosts the economy much more than the Science Centre. No matter how you look at it, it's more important for the economy than the Science Centre. Marine land is extremely important for the Niagara region. It draws in a lot of tourists. It really doesn't make sense to me. And yeah, there are people again that think Wonderland being open. It's going to be too crowded. No, it doesn't operate like that. Look at any theme park that's open right now. Go look at Laurent. It does not operate like that. They are very strict. It is super safe. Masks are going to be required everywhere unlike some businesses. Shade Niagara Falls. So I'm going to ask you guys, you need to look at the bigger picture here. This isn't about riding roller coasters. I can happily go a year without riding roller coasters. This is about people's jobs. This is about the economic impact. This is about a country that already has next to no theme parks unlike America. Theme parks in Canada have had a history of just closing down and disappearing. Not saying that's going to happen to Canada's Wonderland, but you don't know what's going to happen to Santa's Village. Calypso has already said that they need government funding. Wet and Wild had a past of struggling. So who knows if that water park is going to struggle as well. So what are we going to be a country or a province with no water parks? No theme parks? Our country is already boring. I don't care what anyone says. Compared to the United States, yeah, our country is doing much better. But we need things to do. We are a very boring country. And I know any millennial or teenager or young adult in here knows exactly what I'm talking about. Especially come winter. It is so boring to be a Canadian. And in summer, it's literally just partying, beaches, cottages. You need that theme park no matter your opinion on Canada's Wonderland. We all know deep down that going to Canada's Wonderland with a group of friends is one of the most fun things that makes up your summer just like the C&E. It makes up your summer. So why isn't Canada's Wonderland receiving answers from the government? Why aren't they being allowed to open under any circumstances? Why aren't they receiving funding? Same for Marine Land, same for Calypso, same for Santa's Village, same for the Toronto Islands. Imagine an Ontario with no theme parks. That's not an Ontario I want to live in. It's not a country I want to live in. We already have no theme parks. It's boring. That's my two cents. Take into consideration the employment of those four to five thousand people at that one park, Canada's Wonderland alone, and then add in all these other parks and water parks I'm talking about, the economic impact of the area, the effect on the actual business. Will they go under? What is the answer now? How can a place like Niagara Falls be open under extreme overcrowding and hardly any social distancing whatsoever? Yet a place like Canada's Wonderland and Marine Land are told, nah, you can't open, but the roller coasters over at Niagara Falls can. Just not Wonderland. Yeah, sounds fair to me. Anyways, all I'm asking is please get this message out there. Sign the petition in the description and the comment section down below. Share it please. I need your help. Get this message out there. We'll be organising a peaceful gathering, we're not going to call it a protest, gathering, because again, a lot of people think I'm attacking Doug Ford and I'll let, no, I really appreciate how he's handled everything. I really do. I appreciate how safe our country has, but now it's not fair. No matter where you sit on this matter, if Niagara Falls Clifton Hill can open, it makes no sense as to why these places can't and you cannot argue otherwise. You cannot justify why Clifton Hill in Niagara Falls can be open and Canada's Wonderland cannot. You cannot justify that or do not care. Thank you so much for listening to my rant. I really hope you take the time five minutes out of your day to sign that petition, share it, share this video, comment and like this video as well. Let's get this message out there. You know that I am on the right side of this subject. You know it. Deep down, this is not fair. Thank you so much for taking your time to listen and watch this video. I honestly do mean that. Have a great day and or night, whatever you're watching this video. And yeah, don't forget to hit that subscribe button to stay connected or follow us on Instagram, Amusement Insiders for more updates on the gathering and the petition as well. Thank you so much guys. Have a good one. Bye.


All right, I just want to make one thing clear from the very beginning. Overrated and bad are two different words. Okay, they have two different definitions. They're not synonyms They don't mean the same thing not even close. Overrated means overrated and bad means bad. That out of the way the name of the wind is extremely overrated. This is the introduction song It's not very good, but it's not too long So I've been hearing about this book for several years now and I mean Honestly, I don't get what the hype is all about Like usually with books that I'm not super into I can at least see the appeal of it like like the powder mage trilogy I didn't particularly like the first book in that But I get why other people like it this one. I'm just I'm kind of at a loss So with this review I'm gonna do a non-spoiler section and then a spoiler section partially because people have been asking me to do that for a little while and Partially because I feel that this book kind of needs it in order to properly talk about it So I'll start with the non-spoiler section now this book is about this guy named Kovoth and at the beginning of the book He is hiding out. He's just an innkeeper in a small town and apparently he was some sort of legendary hero before this but something happened, we don't know what even by the end of the book and so he just decided to fake his death and move away and Then this guy called the chronicler comes along and he runs into Kovoth and he's like hey You're Kovoth. He recognizes him and he wants his story. He wants to get his story and eventually Kovoth agrees to it And so the majority of the rest of the book is just Kovoth telling the story of his life To the chronicler and telling the story of how he became such a legendary hero and Kovoth's childhood the main story starts off with he is just a kid in a traveling theater troupe And apparently he's some sort of like genius and he actually learns the basics of magic and you know yada yada yada It's actually kind of tedious for a little while, but then these weird Demon things come along and kill his entire troupe But he manages to escape and that the demons are called Chandrian and so most of the rest of his childhood arc is about him Just trying to find information on the Chandrian so that he can find them and kill them for revenge So the plot of this book is simultaneously the best part and the worst part because it oscillates between being really really interesting and Also the framing of it is really great. The only issue I have with the framing is that it kind of robs certain scenes of tension because you know We know Kovoth is gonna survive.  We already know it's not gonna happen But beyond that I think that actually seeing this sort of story through the eyes of the main hero is really neat And it's not something we see in the fantasy genre very often at least not something I've seen But also at the same time the plot just jumps between being Really kind of interesting and kind of cool like every time Kovoth is searching for information on the Chandrian It's really neat, but there's also just so much shit that we don't need. It's so tedious There's a lot of nothing going on and I'll get a little bit more in-depth on that in the spoiler section But I mean there's just so many parts of this book where I'm thinking I don't care Okay, when Kovoth is at university that there's so much that just doesn't matter there Okay, he's not really forming particularly interesting relationships with his friends He has a very brief romance, which I'll talk about you know a little bit But that's I mean that's okay, but that's not very interesting. He has a rivalry with another student and one of the professors But a lot of it is just there's nothing happening. Hell it takes a hundred and thirty pages to get to the point Where the Chandrian kill his theater troupe. I mean There's so much nothing in this book and it's a long-ass book So having all of that in there is a huge huge detriment another thing in this book that is Simultaneously pretty good and also really really terrible is Kovoth himself because Kovoth is Well, okay at the beginning it really seems like Kovoth is just a huge Gigantic insufferable Mary Sue.  He almost never screws up anything He just it is really really insufferable But at the same time he does have actual personality and he does have some actual flaws So it's not the end of the it's not the biggest deal in the world And you also remember that it's possible that Kovoth is an unreliable narrator in this story It's possible. He's talking himself up. He's trying to make himself look better and I will get more into that in the spoiler section as well but suffice to say Later on in the book his character didn't bother me nearly as much as it did at the beginning because at the beginning It really really is insufferable to just not only hear him talk himself up and talk about how yeah I did this thing and it was really cool and I did this other thing and it was really cool And I learned magic in like two days, but also to hear other characters Talk about him as though. He's just the most impressive genius ever. It's just God dude stop please and then there's his romantic relationship with this girl named Denna and that one It also starts off kind of cringy and stupid, but as time goes on They do have they do develop actual chemistry and you can tell that okay Yeah, these two are friends and you can see why they might like each other But the thing is it's not exactly a healthy relationship at least not in this book It certainly doesn't seem that way. It seems more like He's just kind of obsessive over her and she's very deep dismissive of him But it could have been a hell of a lot worse So that wound up not bothering me too much and again you got to remember this is cavo telling the story Years later, so he's gonna talk about denna as though she is the most beautiful most amazing woman ever And since I'm me I can't have this sort of review without talking about the world building a little bit I think it is Generally pretty solid. I mean, it's not like super expansive or super deep in any particular area But it does have two separate magic systems one of which is actually really hard magic Which is very well explained and very neat and very unique and I really liked it the second one is more of a soft system and that's the one about Finding out the names of objects like the true names of them and then when you know that you can control them and Like the name of the wind is supposedly a really big deal in this world's Mythology and in their magic system because once you know the name of the wind you can use it to fly and shit So that is where you know, that's where the title comes from and so both of those are really really cool And the book also goes into a whole lot of detail about The coin system believe it or not That's and that's I liked that just because it's not something that often gets a lot of detail in these sorts of books It's just like here. Here's gold like gold coins. That's it But in this one you have like a very detailed very complex hierarchy of like what different coins are worth and how they Merge into one another things like that. It's I liked it. It was really cool And of course I can't talk about this book without mentioning that the pros is just absolutely phenomenal I mean this that's not something I care about very often Except when it's either particularly good or particularly bad in this case It is really really amazing because almost every line in here.  You really just have to read it to see what I mean for yourself but I heard that this was Patrick Rothfuss's first book and He really just wrote it and rewrote it a whole bunch of different times So it does feel like he has polished it to a sheen at least in that regard because I've already mentioned my issues with the plot and everything But the actual way it's written does feel polished and perfected in just the best way possible. So In that regard this book is just absolutely amazing So I guess if someone is just reading it for that reason then sure I guess I could see why they love it so much. So I think that's about it for the spoiler section Would I recommend this book? I Man that I really don't know I sat here for like two minutes trying to think like what I recommend this book And who would I recommend it to? I guess if you're someone that just really likes Like poetic great pros, then I guess this will be for you if you're someone that doesn't care about that then well that probably won't make a difference obviously and I guess if you want to hear sort of a Heroic fantasy story that's told from the perspective of that hero and like if that appeals to you then you'll probably Probably enjoy this a lot But if you're not someone that's into that then I don't know if there's much here for you because again the plot It goes on for a very long time and there's not much tension in it And there's not a whole lot of stuff to actually care about and I mean the main character is actually okay But he doesn't have that much development. He doesn't have any real neat relationships There aren't really any other characters that play huge roles that are particularly interesting I mean there's not a whole lot here for you So I don't know if I can really recommend this to Fans of fantasy or just fans of epic fantasy or regular heroic fantasy Unless you're looking for something very specific now on to the spoilers section So if you haven't read the book you should probably leave now Okay, so first and foremost Kavoth is Definitely definitely definitely an unreliable narrator. Okay.  It's not exactly subtle Okay, that was just Patrick Rothfuss talking directly to the audience and so once I accepted that That really did make Kavoth's character a lot less insufferable because you know, okay He's talking himself up and so I can imagine a little bit Okay, so this probably didn't go quite as well for him People probably weren't quite as enthralled with him and he's intelligent.  He realizes. Oh, hey Chandrian. Well, I should probably go after them I think I'm gonna go to the to the university so that I can do research on them and Like what is the point of any of that? Like he doesn't really learn anything particularly important on the streets as far as I remember If he doesn't use any of the skills he learned there in order to help him out later in the story Like all the skills he uses like riding a horse and everything those were all learned back when he was a kid in the theater troupe So I really for the life of me cannot figure out why that decided to go on for so long And I know Kavoth at certain points mentions that like oh, I'm giving context to this Well, we don't need that much context We really really don't and then there's the university and the university 90% of the stuff that happens there is just Kavoth trying to show off how smart he is or how talented he is and I mean, I get that some of it is also explaining how magic works and everything but Good God, it goes on longer than his life as a street rat in Tarbin and Almost nothing important or interesting happens at all like think about there's just him showing off to his professors Him impressing some of his students there's him getting kicked out of the archives and he spends pretty much the entire rest of the book wanting to go back in so that He can research the Chandrian like You could probably describe that in like a paragraph. Okay, you really could it was hey I got kicked out of the archives for doing this and then eventually I was able to find a way to sneak in and Then I found what I needed like we really did not need several hundred pages of shit in between that those two events We really did not and I guess that some people like the university because to them it might feel like a more Adult version of Harry Potter or something But the thing about Harry Potter is that the university was the focus of the story in that one Okay, Hogwarts was this magical land far away from our Muggle world Where the main characters went to like have adventures and make friends and shit the university seems Kind of boring and in a lot of ways it seems miserable at least to devote because you know, there's constant politics and battles between various factions at the school and not like actual physical battles just people being Dicks to each other mostly and so it doesn't feel like an adult Harry Potter It feels like an actual University filled with a bunch of obnoxious assholes and so all the stuff with the university is just Just why what why is that even there and then there's some of covots relationships with women other than Denna Like the moneylender who is very clearly flirting with him and he doesn't quite figure it out or the other student fella Who's very clearly flirting with him and he doesn't realize it until later like a lot of that just feels like Cove oath the older one again trying to show off only in this case. It's a little more cringy Or it's just him trying to show that like okay you know all these bitches were Crawling all over me, but you know, I love denna so much that I wasn't gonna do that and Again, I guess if that's what they're going for that could work But I just it was pretty cringy for a lot of the points that or a lot of it was cringy Okay, I'm just leaving it at that and then there's the climax of the book So what happens there is that covote hears about the chandry and attacking another town and killing a whole bunch of people there And so he immediately runs off like he goes really really far away from the university for several days In order to investigate and while he's there All he really finds out is that the chandrian are killing people in order to Prevent information about themselves from me from spreading. Okay. He doesn't actually see them again while he's there He just finds that little bit of information out. So he knows why they killed his parents sort of and I mean again that's really the only bit of information we get throughout this entire book about the chandry and like we We don't know anything else about them and kivoth gets no closer to finding out where they are or how to defeat them and So I just felt like this book was kind of a waste of my time in that regard But even setting that aside while kivoth is there.  You know, he goes out of his way to try and stop this thing and So okay. Yeah, that does make kivoth look better, but Really It's what what purpose does it play in the overall story? Like does it make kivoth More famous. Is that the beginning of him as a hero? I guess so but I Again, we could have gotten it in so much less time than we wound up getting it and so If you take nothing else from this review just take that this book is padded, okay It's my copy is over 700 pages long and most of them were unnecessary Most of them were kind of boring most of them were tedious and so at the end of the day I Just I didn't like the name of the winds that much. I don't think it's terrible. I think it's decent But that's really all I can say about it. So if you are someone that really likes this book Could you please explain to me why you like it? Could you explain to me what you see in it? What's great about it? And also if you have spoilers, please mark them in the comments, but for real I am I am curious to see what you guys think about this But now that's all I have to say. So if you could please rate this video comment subscribe Go to my patreon page. Give me just give me money, please and Well, I think that's all the stuff that we're supposed to say at the end of our videos So, you know, just just do all that and we'll be square