Well, hello people, we continue in the afternoon talks and now we are going to have a limb talking about reproducible and deployable data science with open source fighters. How are you limb? I'm good. I'm good. Can you hear me okay? Yeah, all perfect. Where are you streaming from? I'm streaming from the office actually. So I went to the office so that I have some private space to this one. Nice. Is this your first Euro Python? Yes, this is my first Euro Python. Very excited to know this as well. Yeah, it will go great. Well, if you are ready, we're going to share your screen and we're going to start with. Good luck. Can you see the slides? All right. Hi everyone. Very excited to be here today to talk to you about reproducible and deployable data science with open source Python. Before I continue, I'm just going to check the chat to see if everything is okay. Yes. Okay. Everyone can see my slides and my screen. That's great. Yeah, my name is Lim. I'm a software engineer. My background is in full stack software engineering. I mostly worked for startups before some example companies I have worked with include delivery and memorize. Right now I'm working in the data domain at Quantum Black Labs. Quantum Black is the advanced analytics consulting arm of McKinsey. And right now I'm building data products for data scientists, data engineer and machine learning engineers to accelerate their projects. I love open source Python. Currently I'm a core contributor on Kedro, one of the open source tools explored in this talk today. I'm lim dodo everywhere on the internet. It means Lim's big head in Vietnam is. So the agenda today is I will be setting the scene in which you need to deploy a realistic Jupiter notebook into production. I will explore some of the challenges that you might face in this journey and how you can move from a notebook environment into a standard Python project with Kedro. Then I will explain how we can use Kedro extensibility to integrate with other tools in the ML Ops ecosystem and a few deployment strategies we can use to deploy the project as well as how do we go from here. From one project to hundreds of projects in the future. So with that in mind, let's imagine this following scenario. A media organization wants to provide media and video recommendations to their users. As we have seen in real life, if done correctly, this can have material impact on the company's bottom line. And this is the organization first attempt in adopting machine learning and data science in their workflow. So one of their very talented data scientists have conducted extensive research into different algorithms and architectures for building recommendation systems. The data scientist has organized her findings as a series of Jupiter notebooks. And a disclaimer is that all of the notebooks and data science code in this presentation adapted from Microsoft recommenders repository where they details best practices in building recommendation system. I cannot recommend it enough. That's a bad joke. Sorry. All right. So when it comes to notebooks, there are a couple of different perspectives. On the one hand, the interactivity fast feedback loop and convenience of a Jupiter notebook is almost unbeatable, especially for exploratory data analysis and rapid experimentation. On the other hand, notebook pose some challenges for reproducibility, maintainability and operationalization. Specifically, notebook actually makes it hard to collaborate between each other in a team member. I know that there are some recent really cool projects that address this issue. But out of the box, Jupiter notebook is essentially a single player game. And then it also make it. It's also quite hard to conduct code review in a notebook format, as well as some of the other code quality controls that we usually enjoy in software engineering are hard to implement, such as writing unit tests, documentation generation, linting, so on and so forth. And notebooks sometimes give you a full sense of security because it cashed the results. When you see the output cell of your notebook and you see that it has the correct results, it might make you think that your code runs without errors, even though the logic has changed. And all of these problems combined cause, I think the biggest issue of the more, which is consistency and reproducibility in your project. So in a very interesting study in 2019, New York University executed 860,000 notebooks they found in GitHub. And they found that only 24% of them ran without error and only 4% of them actually produced the same results. So with that in mind, I'm going to explore some of the strategies we can use to turn a notebook environment into a standard Python project using Kedro. Disclaimer, I'm a core contributor to Kedro, so this talk will be biased. So what is Kedro? It is a framework for you to build reproducible, maintainable and modular data science by applying software engineering best practices, such as separations of concern and versioning into your code. It was created by Guantan Blake from our own battle scars of delivering data science project to our client. It's used at startups, major enterprises in academia, and it's fully open source. But instead of selling you on this tool from the top down, I would like to explore some principles that motivate us to build Kedro in the first place and some of the problems that it is trying to solve. So the first problem is data management. Data management in Jupyter Notebook has a few challenges. Whenever I come into a new notebook, my first instinct was to ask a few questions like, what are the datasets in this notebook? Where are they stored? How are the data loaded? What are the formats? Can I reuse my data loading procedure for the similar datasets? How can I incorporate new datasets if necessary? In our example notebook, you could see that it's actually miles ahead of the curve in which it factor out all of the data loading logic into a reusable library for the movie lens dataset. But it's not quite ideal because it's programmed directly into the specificity of this dataset and it's hard to reuse later on. Later on, if you have more datasets, you will have to build more libraries. So the way that we serve it in Kedro is we provide a declarative data management interface through a YAML API as configuration for you. It separates the what, the where, and the how of data loading. And when you stack all of these datasets together, declarative definition of datasets together in a centralized data catalog, it gives you an instant clarity on which important datasets are used and persisted in your project, even to non-technical team members. It supports a number of features such as interpolation for dynamic values such as environment variables. It also supports changing dataset definitions between different environments, local development staging production and so on and so forth. So a common use case is you would use a smaller dataset in local development for rapid iterations and bigger ones in staging and production. It also supports data versioning, partitioning, incremental loading through different dataset types and configuration. It promotes security best practice by accessing data without leaking credential and it's extensible through custom datasets. So if you find a particular use case that we don't support out of the box, it's very easy for you to write a custom data connector and use it in your project. I think the biggest benefit of declarative data management is it provides a consistent interface between business logic and different IO implementation. So it abstracts the way the differences between different data sources, processing engine data formats, out of the box we support many of them. And it promotes the irreusability of your data connectors as they are separated from your business logic. So you can swap them in and out without changing the data science code. In data science code, parameters and configurations are also important. Parameters including the project parameters as well as the hyperparameters of your model. So in the screenshot here you can see that I have different configurations from different tools that I integrate into my project such as great expectation which we will see in a few minutes, as well as MLflow and Spark all in the same place, as well as my parameters are also managed in the same way in a game file. The trade-off here is that YAML domain-specific language works very well on small and medium-sized projects, but it becomes unruly for massive ones with hundreds of datasets, even with good IDE support. So to me to get these problems, get your support splitting your data catalog into multiple YAML files. It also supports change of templating to avoid repeatability at the expense of readability. And then you can also use some other YAML native features such as reusable code block to improve your configuration. I'm just going to show you a very quick demo of how this looks in real life in our project. So this is our data catalog. It's located under COM base catalog.yaml in my project. And as I mentioned earlier, this is a base environment, but you can also create more environments such as staging and production down here to overwrite your catalog definition in different environments. And I really like a feature in VS Code, the Outlight Editor, where you can see the outline of your catalog. So it's very clear what datasets are used in this project. And to demonstrate the idea that we can swap in and out different datasets, I'm just going to change this into Spark. Spark dataset, I'm going to do file format, CSV, and it will just work the same way with a different processing engine for your code. So this is the data catalog, and it hopes that it gives you some idea on how it can help you with data management in Jupyter Notebook. And the next bit is about how do you manage the code in your project. So the challenges with managing code in Jupyter Notebook is that cells need to be run in a specific order. There are global scope variables that may or may not have been initialized. It's hard to unit test specific cells in isolation. It's still necessary to factor our common logic into pattern utilities outside of Notebook to prevent the Notebook from becoming polluted. So out of the box, Kedro gives you a few simple but powerful coding patterns as well as abstractions to help you manage the code better in a project. So the first thing is that business logic in Kedro are written as pure pattern functions. But that means there are a lot of benefits to this, but one of the biggest ones is you can unit test it in isolation. And then you can use other tools in the pattern ecosystem when it comes to functions such as decorator composition to help you write more modular code. And then these pure pattern function can be connected together to use in a bigger pipeline in a concept that we call Note. And Note is just a thin wrapper around these functions with inputs and outputs, which are dynamically injected at runtime by the declarative data sets and catalogs that you have seen earlier. So the pipeline shapes is always a DAB, which is a directed acyclic graph by design. So there's no cycle in your data flow. And algebraically speaking, it's just a set of node so they can be concatenated together to form bigger pipelines. In this example, you could see that I have three nodes in my data processing pipeline to clean my racing data and movies data and use the outputs of these two nodes at the input of my create model input table node. And this is my data science, sorry, data processing pipeline, and then I could create my data science pipeline the same way. And then in the end, I just concatenate them together because in the end of the day, it's a set of nodes, so it has algebraic properties. And you can build pretty big pipelines this way, iteratively and modularly. So this is a demo that we have online, but I would also like to show you the an example article that one of our users actually wrote on mediums and just want to show you the screenshot of their pipeline, which I think is quite massive. It is at the end. Yeah, so this is a pipeline that this company runs in production. It's one of the biggest telecom company in Indonesia, I think. One thing worth pointing out about the coding patterns in in casual is that the topology of your pipeline is that dictated by the data flow. As we saw before, you need to connect the node using the inputs and outputs. So inherently a casual pipeline is data centric. It's a dark of data. If you're familiar with other workflow engine, such as a flow prefect, the pipeline is a backup tasks and data artifacts. So in a way in casual, you already have a table level secondary lineage of your data for free. And the transformation logic that produces it is not column level image, but it's a good start. So that's the coding patterns that can help you extract the code from Jupyter notebook and then put into a Python project in a maintainable way. And the next big thing that I want to talk about is the development experience in casual, because as we know, the development experience in Jupyter notebook is amazing, especially when it comes to exploratory data analysis and rapid experimentation. It also has really, really great communicative utility, right? For example, I come into this algorithm recommendation system algorithm notebook and then I understand very easily what's going on. So I think this is a great strength of notebook that we try to match with the tooling that we provide in casual. So the first thing is we provide interoperability with Jupyter notebook for exploratory data analysis by allowing you to use schedule constructs inside the notebook. For example, you can use the data catalog to load and save the data within the notebook itself before you move on to writing code in an IDE.  But beyond the notebook environment, we provide a very powerful CLI environment to help you run your project iteratively. There's a run command here that supports running the whole pipeline, running the pipeline in different environments, running different sub-pipelines within the main pipeline, running a single node, overriding parameters at runtime so that you can, for example here, I want to try different hyperparameters for my model. So I can run my pipeline many times with different parameters just to see how it works. And there's a long list of run commands. Most of them are powered by the fact that our pipeline is just a set of nodes so you can filter it in any which way that you like. Beyond our provided command, we also allow people to provide their own CLI commands either through a set of plugins. For example, the visualization tools that you saw earlier is built as a plugin and provided as a command in casual. You will also see another plugin later, which is Airflow, where we will create an Airflow app from the casual pipeline. And finally, you can also create your own commands within your project, as you can see down here, where you create your own run command within the CLI.py in your project. So it's a very extensible way to add more to your development experience in casual. And here are some of the example CLI extensions built by our community. There's a casual MLflow plugin to provide commands to interact with MLflow. There's a casual diff plugin, which is really cool, where it shows you the diff of your pipeline between different git branches. Another tools that come out of the box with casual is a powerful pipeline visualization with casual bits plugin. It helps you develop and communicate your pipeline with fast feedback loop. So in my example here, when I change my pipeline definition, the visualization to what listens for the changes in the file and then automatically refresh itself. So you could actually see that your pipeline shape actually has changed. And it's also being actively worked on to turn into an interactive data science IDE, even though my product manager might kill me when I say this, but stay tuned. Then the last thing is Kedro allows you to scaffold your new projects with standardized project template. It's originally based on cookie data science and it comes with a few tools out of the box such as linting with Flaked and ISO code formatting with black and so on and so forth. It supports more advanced setups such as sparking visualization through a concept of status and it supports custom status to tailor to your project needs such as a specific CICD configuration. So that's it about Kedro. I would like to talk a little bit about how you can use Kedro to integrate with other tools in the MLOps ecosystem. If you think about MLOps, there are many different ways people describe it these days, but one of my favorite one comes from NVIDIA, where they are model MLOps at the lifecycle. And as you could see, Kedro helps you with the collaboration development workflow in the middle and then it provides some tools out of the box to help you with the collection, the injection and the analysis. But what about all of the other responsibilities in the MLOps lifecycle? And instead of trying to become like an on-site fit all kind of tools, Kedro provide a very extensive integration mechanism for you to hook into these different needs in the pipeline lifecycle. For example, how do I run data quality checking after my raw option data is loaded? How do I emit runtime metrics after a node runs so that I can set up a monitoring system so on and so forth? It provides its extensibility mechanism through a concept of hooks, lifecycle hooks that map exactly to the MLOps lifecycle that you saw before. And we have seen it used to integrate Kedro with different tools like Grafana and Prometheus monitoring, MLflow experimentation tracking, so on and so forth. In our example today, we will look at how we can automate data quality checking with great expectation using Kedro hooks. Great expectation is a pattern based open source library for validating, documenting and profiling your data. And the way we do it is that we are going to write a hook before we save our data set to validate the data so that if there is some changes in the data with bad qualities, we want to stop it from propagating down the pipeline. I'm going to show you a live demo of this very quickly. So this is the code editor. This is my data catalog as we saw earlier. In Kedro, you can provide these hooks in a file in your project or hooks.py. So this is my hooks.py file. And then this is my data validation hook using great expectation. When I initialize it, I initialize the data context in great expectation using the configurations located in Confbase. And this is the hook implementations. This uses the same hook mechanism as PyTest uses. In fact, it's powered by the library that PyTest people made for building plug-in architecture. So this hook is called before dataset saved. And the idea is very simple. Before you save a data set, you try to get an expectation suit, which is like a set of validations to run against this dataset. If there is a suit that matches the dataset name, then we will just run it using great expectation. I have configured my project to have one expectation suit to match my clean movie dataset. This is a JSON file, but it also has a Jupyter notebook interface for you to interact with it provided by great expectation. And when I run my pipeline, let me just do this quickly. This hook will be called automatically. And you will see that after the validation runs, we can open what we call a data docs for you to view the validation results.  I'm going to run this again. I think that should work. Yes, the data doc is located under Uncommitted Data Docs and there is an index.html here. I'm going to open this with my browser. This is a great expectation data docs where you can see all of the previous runs of my pipeline and all of the validations come from those runs. If you click on one of them, you will see what expectations will run and then if it fails, then it will tell you why it failed. That is how you can use schedule extensibility to add automated validation checking into your pipeline quite easily with just a few lines of code. Another bit I want to talk about is after all of this development effort as well as putting controls in place to assure that your coding quality as well as your data quality are pristine. Now we need to think about deployment. How do we deploy this pipeline into productions? To this end, get your support of your deployment strategies. If your project fits, if your pipeline can run into a single machine, we support a single machine deployment mode where you can just containerize it using Docker or package it as a wheel file and then install it in your Python environment in production and then just run it as any Python package. But it also supports a distributed deployment mode. If your pipeline cannot run on a single machine, then you will need to split it up and then run it on different nodes in a cluster. And I will demonstrate how it looks today using that principle with Apache airflow. So the idea is very simple. Just convert every node in your pipeline into an airflow task and then the whole pipeline, sorry, into an airflow depth and the whole pipeline each node is converted into a task. As you can see in the screenshot here, my task flow in schedule look exactly the same as my task flow in my airflow depth. If there is time, I will show you a live demo of this in a bit. But a very good question to ask is like why starting with Kedro and then having to convert this into airflow later on if they look exactly the same. So as we saw earlier, starting with Kedro gives you the benefits of rapid development, much closer to that of Jupyter notebook. It focus on data flow, not task flow, and it gives you the flexibility to stay simple. So if single machine deployment works for you, let's do it before you have to go distributed. It gives you the flexibility to choose between different distributed orchestrators. So if you don't have airflow, you can go with Algos, Kedro, Prefect, whatever. The principle is the same.  And then there's a very powerful concept here that I would like to promote. That is your deployed pipeline doesn't need to have the same granularity as your development pipeline. So in development, we want as much details as we can for all different purposes. But in production, sometimes we are constrained mostly by the computing resources as well as the production environment. So we might want a different way to slice the pipeline and then deploy it based on those constraints. So in this example here, I have split my pipeline into just two different tasks in my airflow rack. One do data processing and one does model training. And theoretically speaking, with airflow, you can run these two different tasks in two different workers. And one might support Spark and the other might use GPU if you use deep learning models. And the last thing I want to talk about is how do we go beyond a single project? How does these tools help you to scale from one project to hundreds of projects? And basically it helps you do that by promoting the concept of reusability. So you can reuse your pipelines between projects using an abstraction that we call modular pipelines. I didn't have time to cover this today, but it's in our documentation. It helps you build reusable data connectors, reusable extension hooks. So beyond just great expectation, it can build other hooks, as I mentioned before, to do performance monitoring or experimentation tracking. It help you build reusable CLI commands, help you create scaffolding template with starters. And you can also publish them as open source libraries for the community to use too. And that's it for my presentation today. All of the code for this project is hosted in this repository. And thank you for listening. Thank you so much. It was really nice and well done. So now we have two minutes left. If you want, we can do a bunch of questions that you have. Are you ready? Yeah. So the first question is, does Kedro support pipeline versioning? If yes, how do you drag dependencies? Okay. So as mentioned before, pipeline is constructed as pure code. So you can check it into version control. You would version control your pipeline exactly as you version control pattern code. Maybe Git or if you have other version control system like Mercurial. And then dependencies are also... I suppose you talk about project dependency, not dependency between pipeline. In terms of project dependencies, it's tracked again as any other Python projects with your standard tooling such as requirement files or if you use... Well, we use requirements.txt and bit generally. But I think you can also use Poetry if you are advanced or more trendy. And the next one is, what do you think are the main pros and cons of Kedro with respect to DVC? Yeah. So I think that's a great question. I'm not that familiar with DVC to talk about this. But what I think Kedro helps is it helps with the development workflow. It helps with collaboration. It helps standardize your practice across your organization. So every team uses the same standard so that it's easy to transfer between projects or it's easy to reuse a code later on. Whereas DVC in my limited understanding is specifically concerning version control of your data and your code. And I think these two tools are complementary like they are all forgotten in my opinion. Perfect. Thank you so much, Lim. It's really good for the first time. Thank you. The time is limited. So if people have more questions, please go to the breakout room part. And Lim, you will be there answering questions they have. Thank you. Thank you so much.


eight secret steps to create high converting CTA buttons. Now this is part one of two. So you're gonna wanna watch this and then go to video two, which I'll have a link below in. Hey, CTA buttons. At the end of this series, there's two videos. You're gonna be well versed in CTA buttons. But more importantly, you're gonna be able to create CTA buttons that get real results. And I tell you, you've probably heard it over and over again, but CTA buttons are incredibly important. And the reason you've probably heard it over and over and over again is because they're so very important. So if you keep hearing this, you might as well learn how to do good ones, right? Well, in this video, I'm gonna show you examples of bad ones and good ones so you know exactly what to do. If you haven't subscribed yet, please do so. Hit that subscribe button down there. Turn it from red to gray. Don't forget to ring the bell. Turn on all bell notifications so you're notified each and every single time I go live. Now, I want to first talk about CTA buttons, what they are and what they're not. They're not a link. They're not a gift. They're not artwork. They're none of those things. They're buttons and understand that and you'll do fine. But if you try to make it into something else, it could really hurt your conversions. Now, I've already said how important CTA buttons are, but if it's the only thing your website's got going for or your landing page's got going for it, then it's not gonna be that helpful. But if you've got all your other components, all your other information on the page and all your bullet points, and you've got a great headline and all that, then your CTA button can work wonders for you. Now, let's talk about what a CTA button is now that we know what it isn't. A CTA button is nothing more than some text with maybe a little artwork, maybe a box or something like that around it. And the purpose of a CTA button is to bridge the gap between their interest in your page or your company or your brand and getting some higher value, going further into the funnel of purchase. So that's why it's so important. Now, why is it so important that we improve our CTA buttons? Well, a CTA button is something that you want somebody to do and some small tweaks to it can really have enormous results on your bottom line, on your signups, on your opt-ins, whatever it is you're trying to do. So first off, let's take a look at one by Optimizely and kind of see what they've done. As you can see, the highlighted button is just a typical example of a call-to-action button you'd see on a normal landing page. It has some copy around it. It's got a place for the visitor to input some information. You can't get more basic than that. So I want to give you some advice that makes it extraordinary. And to do that, we want to evoke emotion in our audience. According to marketing experiments, consumers go through a six-step process before clicking a CTA on an email or landing page. Let's take a look at each one of them. The first one, arrest attention. So we want to have attention. Number two, build connection. Number three, build problem. Number four, build interest. Number five, build suspense. And number six, transfer momentum. Those are the six steps they go through. Now like I said earlier in this video, don't try to make a CTA button something it is not, okay? So we want to stick with real basic things here. We want to have that call-to-action on the button to let them know what's going to happen when they click that button. And we don't want to try to make it into something it's not. We do have some basic characteristics though of all good CTA buttons. Generally on the page, they have a different shape and border than what's going on on that page. In addition to that, they're going to have a different color than what else is on that page too. We don't want it to blend in. You don't want to use that color any place else on the page. And of course, they're going to have text on them explaining what happens when you click that button. Now some main characteristics is they don't have to be rectangles, but they normally are. They could have rounded corners and you may change them up a little bit. But I want you to keep in mind the brain, the human brain, likes familiarity. So if there's a certain type of button on a lot of websites and they see it, they understand it and they're going to probably move forward. If you make yours really different from everybody else's, it may confuse the brain a little bit and they may not click. I don't play around with this too much. You want to make it really easy for the visitor on your site to find the button and to understand what's going to happen when they click on a button. Once again, our brain craves familiarity and if you make it difficult for them to find that button, well, you're going to lose all those conversions. You're going to lose all those clicks. So don't make it too tiny to where they've got to search for it. Buttons should be big. And I don't know if there's a maximum size for that, but a big button, they seem to work better. Let's take a look at a opt-in from Optimizely and kind of see what they're doing. Okay, so it says here the number one landing page conversion software. Is it wildly original? Well, no, but it is clear what they want the users to do. They want them to click, yes. At this point, buttons are so established as an element of design that when you don't use them, you risk confusing your visitors. For example, let's take a look at an agency's landing page and pay-per-click for a PPC ad targeting the keyword social media services. This is a tough one right here, isn't it? Now put yourself in a mindset of a business owner looking for social media management services. Let's say you already know you want to hire an agency to run your Facebook account and you're at the point where you're evaluating different options. Where would you click on this page? How would you get in touch with somebody to learn more about the services? There is no right or wrong answer to this question because there's no obvious button on the page. In fact, it feels less like a landing page than it does a mashup of just general content. It's not good. Okay, let's take a look at another example here. It's safe to assume that since they're using this as a PPC landing page, they want to drive conversions. But what kind of conversions are they aiming for here? The answer is really ambiguous because the page doesn't even contain a single button. So if your landing pages look like either of these examples, you got some work to do. Your visitors need buttons. Now let's take a look at an example from constant contact and understand constant contact needs people to opt in. They need them to create accounts. Let's take a look at their page. Here we go. The button is big, okay? And it's blue and it's very clearly a button. There's no room for confusion as to how to take action or what exactly that action is. The landing page from get response, I'm gonna put that up right now, is kind of similar. And it says the giant try it free button attracts attention and tells users what to do as soon as they land on the page. They have a compelling copy. Now let's take a look at some more effective CTA button examples. Now keep in mind on your webpage, it's expensive real estate, okay? So you don't have time to beat around the bush. You need to get to the point. Let's take a look at a button that's on HootSuite's account and see what they're doing. Now this button here is a great site in a great example of a straightforward action-oriented approach. What would you expect to happen if you clicked on the button? The answer is obvious. You'd be taken to a page with information about company's business plans. So if you were a potential customer who wanted to learn more about what that company had to offer, clicking this button would be clear choice to accomplish that goal. If the copy surrounding your button includes directives, however, you can also get away with more concise copy on the button itself. So an example may be do it. You may put do it on the button if everything around it already explains where they're going and what's gonna happen. Now according to Wishpond, there's a few words that you can put on your button that really work very well. Start, stop, build, join, learn, discover. All of these are action words that make people click. Now the third thing I wanna talk about is Fitt's Law. What is Fitt's Law? Fitt's Law says that the further away something is, the smaller it is, and the closer it is, the bigger it seems. And our eyes get drawn to those objects. So how would that work on a webpage? Let's look at this one webpage here and see how that works out, okay? So this page here, the basic idea is that you need to place your CTA buttons in the direction path of your users. This is an essential part of user design, but it's also important to consider when placing CTA buttons on your page. For example, let's say you arrive on the page in this screenshot right here and your attention is immediately drawn to the company's logo. From there, it's easy to move to the page target CTA. They make it super simple. The basic idea here is that you need to place your CTA buttons in the direct path of your users. Now let's take a look at another simple example. In this case here, I've added the arrow to draw your attention to the fact that the sidebar tracks a user's read path from top to bottom, culminating in the CTA button at the what? At the bottom. This is a logical placement for the button because it's in the direct path that a user would follow while consuming the page's content. So as you determine where to place your buttons, keep in mind that your readers will follow a normal path that almost every single reader's going to do. Here's another one here that has logical placement, right? It's a loan calculator where you put in your information and you click calculate. That's a logical placement right there. Number four is the best converting buttons have a contrasting color, which means it's different from everything on the page. Now some marketers will spend days and weeks and months trying to research what exact color to put on a button that's not necessary. What's necessary is that it's a contrasting color. Let's take a look at one from Crazy Egg real quick. Now, what's the first thing you notice when you look at the body? You're gonna notice the bright yellow button. It's extremely eye catching because it's different from everything else. So that's important. You can never do this effectively with buttons if you don't have a contrasting color. So those are the first four elements of creating more effective buttons. And I wanna give you the other four that's gonna be in video two. That's part two of two. You'll see a link down in the description where you can click on it and go to that video. So I hope you enjoyed this. If you did, put some comments in there. Give me a thumbs up if you don't mind. And also subscribe, hit that subscribe button. Turn it from red to gray. If it's red right now, it's warning you. It's saying you need to subscribe. But once you've done that, a bell is gonna pop up magically right next to it. And you'll wanna click that bell. Turn on all bell notifications so you're notified each and every single time I go live. I wanna thank you so much for watching this video and I'm gonna see you over in video two.


you can follow along with this presentation using printed slides from the nano hub visit www.nano hub.org and download the PDF file containing the slides for this presentation print them out and turn each page when you hear the following sound enjoy the show this is lecture 30 on heterojunction bipolar transistor I'll have two lectures and this is the first one now this is some of the materials taken from Professor Mark Lundstrom's previous lecture on this topic he has worked a lot on this particular problem for many years so it's sort of from both of us together we'll start with an introduction that what is this heterojunction bipolar transistor you probably have some idea already and then again new device start with equilibrium solution draw the band diagram first don't worry about how it works band diagram number one we'll talk today about types of heterojunction for equilibrium condition the electronic transport problem that how electron flows what the gain is and those types of things we'll talk about in the next class but today you will see that there are much more variation in heterojunction bipolar transistors and then you will have in a classical silicon transistor and then we'll conclude now there are not too many great references you can this first reference heterojunction fund after study fundamentals this is posted on the web and also Harvard Cromer who won Nobel Prize for this he also has a great paper but I had primarily asked you to follow the lecture and not go around looking for too much new material because that is probably not necessary now as I as you remember the topic we are discussing is the dilemma of a engineer who is trying to build a great bipolar transistor and till 1980s people used to do it by all silicon silicon or for emitter base and collector all silicon transistors and you could manipulate the doping the emitter doping higher than the base doping the collector doping a little lower you could manipulate the doping to get great gain and subsequently people tried with poly silicon transistors right poly silicon suppresses the base current and therefore you have good gain but at the end as I have mentioned to you in the last class that at the end of course the poly silicon can only limit the current to b sub s the last term and on the denominator which is the sort of thus recombination velocity or effective recombination velocity to the poly silicon which suppresses the gain but it can only suppress the current base current only by a certain factor and the problem is that as you keep making your base smaller and smaller and smaller eventually you have that v thermal velocity limiting your transport or gain so at that point you really do not have any other options but to look the only and the sole remaining factor which is this intrinsic carrier concentration ni squared in the base and ni squared in the emitter this immediately gives you an idea that how to make a better transistor so for example if you could make somehow somehow if you could make the emitter band gap larger then you realize that on the denominator the blue ni squared at that will have a n c and n v you know these are effective density of state that's what quantum mechanics hides and all those things but the main point is the main factor is e to the power band gap multiplied by beta which is kt 1 over kt now the band gap for beta a band gap for the emitter is e sub g comma e and correspondingly you will write out the one for the base right you'll write out one for the base but you can see that effective density of state well more or less they're about the same 10 to the power 22 or so let's say now so the only remaining factor and the big factor at that is the difference in the band gap and you can immediately see if if the emitter band gap is larger then the blue factor will be larger than the rate factor in terms of the band gap and you will have an exponential increase in the game because of the increase in the band gap now this is an idealized case we'll see that reaching this limit is not really that easy so do you remember that essentially these devices are all vertical we take a one-dimensional cut rotate it 90 degrees and generally plot it out this way and then the emitter region I have indicated in red that the band gap of region 1 which is emitter is larger than band gap of region 2 which is the base now in this particular case we have the band gap for the base and the collector are the same you see e g2 and e g2 what does it mean it means the emitter is of different material but the base and the collector are made of the same material however there is something called a double hetero junction bipolar transistor where the emitter base and collector band gaps all three are different the problem with the previous version or the band of the single hetero junction bipolar transistor is that for the collector many times if you keep the band gap small then when you apply a large bias then the collector generally breaks it through impact ionization so there is a loss of control of charge so what people generally do is on the collector side they again uses larger band gap material such that even when you apply a large bias it doesn't break so easily break meaning through impact ionization the transistor doesn't lose control at easily but this again brings in additional fabrication difficulties as well as conceptual problems that we will see now most of the transistor of course doesn't look like this none of them the actual transistors with look something like this you will see it looks like a mesa you start with a semi insulating substrate semi insulating substrate means that this is made of semiconductor but you have so many defects that you intentionally introduce that the Fermi level is pinned in the mid-gap so it's almost like a insulating material so it's called a semi insulating material why do you need it because semi insulating material have very low conductance as a result because this transistors will be used in extreme high frequency do you remember in the last class we said that if you have too many junction capacitances that reduces the f t of the transistor do you remember that the junction capacitances must be suppressed and by using a semi insulating substrate to begin with you reduce the capacitance so therefore it will be go to a very high frequency you can see the n plus collector n plus sub collector which is the red and n collector and p plus base and then n these are essentially you h quarter you start with a larger device you sequentially h to define this various regions now there are many applications of course first of all in optical fiber communication this is when I was in Lucent I worked on 40 gigabit system so many of this very high performance systems are actually made of HBT's now of course there are a to D converters and mostly these days these are military applications for very high frequency very high frequency equipment and these days people are talking about even a Terahertz transistors but all based on HBT so if you go and take a job if any of the defense contractors this is what they will have you work start working on so they're having a Terahertz power gain cutoff frequency FT remember oh no this is power gain so power gain what was the factor there was one was FT and another was you remember F beta I don't remember I just I'm losing it for a second but I will come back to that so on that one it's a power gain not the normal gain of the current itself so there was a second definition and so that is the second cutoff frequency that one has to define so you can see how a actual transistor looks like let's focus on the left looks like the one of those Mexican temples right you see subsequent measures defined one top one top of each other and you can also see you can see emitter base and a collector and you can see that the emitter and the collector and base the contacts are coming in like a flying serpent right it's like a and the reason is of course reducing capacitance is everything because in by removing the material from underneath you are removing the line capacitance because unless you remove the line capacitance at these high frequencies before the signal comes to your device most of them will bypass and will return back to the source and will not reach and will not be amplified by this transistor and you remember I mentioned it few times that chroma on Nobel Prize for defining the concepts of by of HBT of course the original concept is still due to shockly shockly did everything he was of course a genius of the highest order and but the actual potential of how to use it and wide variety of ingenious techniques are all due to chroma and the chroma is essentially worked out all the details and so he is primarily credited with this technology so after all these interesting stories get getting back to business of equilibrium solution so the first thing is that we'll have to grow material one top of each other right for example we might have an aluminum gallium arsenide emitter and the base could be gallium arsenide or we could have indium phosphide as the emitter indium gallium arsenide could be the base so these are different materials now you cannot simply take a material and put another material on top of it because as soon as you try to put another material this there will be defects forming unless their lattice constants are about the same for example the aluminum gallium arsenide emitter gallium arsenide base look at this you see aluminum gallium arsenide that has a certain band gap band gap let's say about 2.12 something like that and then then you have gallium arsenide over there both having on the x-axis a lattice constant which is about something between 5.65 or so since they both have the same lattice constant when you grow aluminum gallium arsenide on top of gallium arsenide they essentially nicely match up there there's atoms nicely match up and so there's no strain and no defect generation so therefore these you can use for making an HBT now many times you would also like to use let's say indium phosphide do you see in the middle indium phosphide is right in the middle with the lattice constant of about about maybe 5.9 a little less and band gap of 1.3 or so let's say now in that case if you want to have another material right underneath for the base the right one would be a combination of let's say indium arsenide and gallium arsenide do you see the bow shape line and the rate point sort of sitting in between so you'll have to take a combination of right combination of indium arsenide and gallium arsenide mix them and then have a material whose lattice constant is just about right for indium phosphide and then on top of it grow indium phosphide this is why we studied remember all the lattices we studied the lattice constant in the beginning of the semester this is why we studied this because without this many of the technological features would be impossible right so lattice and the lattice type and structure is very important to define a particular technology now these days there are wide variety of combinations for for various materials for transistors for solid-state lighting and all sorts of things so this would be an indium phosphide indium gallium arsenide transistor so let's solve the Poisson equation by this graphical method and that's the band diagram and rules are exactly the same I cannot remind you too many times that you draw the draw the Fermi level one side is n the larger bandgap side let's say on the emitter is n so you put the larger bangers the bandgap side as n and let's say for this particular case aluminum gallium arsenide this is 1.8 eb let's say you will put the vacuum level with chi one similarly you draw than the other side you can see that this other side is this other side is p type and also has smaller bandgap remember this is going to be the base and base must have smaller gangap compared to the blue emitter so I'm putting this red as a smaller bandgap p type chi 2 of course you have a certain work function depending on the material whatever material you have gallium arsenide you will have certain chi 2 that you will read off from the book and then it will make this whole thing continuous copy them down and that completes your band diagram that's it now you see I have written a word called type one this is a type one heterostructure what it means that the bandgap of the small one fits right inside the bandgap of the large ones so therefore you can see there is a drop from coming from emitter to the base from the n type to p type the electron going down and similarly coming from the n type to p type the holes also there is a positive delta ev there's a change in delta ec and delta ev so the bandgap of one is fitting right inside the other one this is called type one hetero junction because soon soon we will see if each cases where the one bandgap and the other bandgap will stagger such that in one case the delta ec is positive but the delta ev is actually negative so those will be other types that you can see there are possibilities here that homo junction transistor silicon transistor of course wouldn't have so okay so you know how to draw band diagram then and these would be called abrupt hetero junction transistor because one material abruptly stops emitter stops and then another material begins the composition of the material doesn't change as a function of position what is the composition you can see on the top that 30% of the gallium atoms in gallium arsenide has been replaced by aluminum so that's what it says aluminum 0.3 gallium 0.7 and arsenic that's for the emitter region and that's 1.8 now again the first thing you do with these things is VBI you calculate VBI right I'm doing the same thing over and over again there should be no mystery how do you do VBI no rocket science again delta 1 plus chi 1 plus q VBI is equal to EG the bandgap on the second side right on the red plus chi 2 and you have sort of gone over so you have to take out minus delta 2 you know this minus delta 2 business and you know this delta 1 and delta 2 how do you calculate that you know the doping and so therefore you can easily calculate the how much the delta 1 and delta 2 are going to be so this is very easy actually you put in the values for delta 1 and delta 2 and remember the two sides do not have the same effective density of state right two different material so how you don't have the different you you'd have different effective density of state you can see Nv2 and NC1 and so on so forth EG2 and that's second care of and chi 1 and chi 2 of course you read it from your table or from a book from that material this is tabulated how do they get chi 1 and chi 2 by the way these are all this photoelectric experimentry remember which allows electrons to be pumped up into the free region so that it can be collected so from the first part of the course okay so you know QVBI if you know QVBI then the rest of the things are easy do I remind you one more time that if you have two different material then you have this kappa 1 and kappa 2 and electric field is not continuous right electric field is not continuous what is continuous displacement D the displacement is continuous displacement is continuous only by the way and specially in a conjunction bipolar transistor if you do not have any interfacial charge if you have charge between base and the emitter let's say the defective layer you have have not been able to grow it very well a defective layer then D1 minus D2 right will be equal to the charge that you have in the interface if you do not have any charge then these are the relationships that's what you're assuming okay these we have done so many times we should be experts now you again realize that NB XN and NA XP which is the depletion on the two sides are inversely related to the doping on the two sides so we know that right so you can we always like this and you see this first relationship is essentially charged conservation relationship it really doesn't care about whether you have kappa 1 one side kappa 2 on the other side it really doesn't care but on the second one it does so when you have VBI then in order to have VBI you have to have the area under those triangles for the electric field right for the for the blue line and the red line and correspondingly you have this electric field at 0 minus multiplied by XN and electric field at 0 plus multiplied by XP divided by 2 is a triangle and so you can correspondingly calculate insert the values of the electric field you can get the expression for VBI two unknowns two equations well you have done it many times you know how to do it XN is only the same expression as before except you see this two relative dielectric constants sitting there does it look about right had it been the same material had both sides been silicon then the two kappa should have been the same right on the emitter and base do you see if the kappa had been the same on the numerator you would have been kappa square on the denominator you would have pulled out a kappa get rid of one of the kappa old result for silicon that is how it should be and then correspondingly you can get a value for XP and therefore now you can correspondingly find the depression reason one thing you realize because I have this gain through band gap difference I'm no longer constrained with having the base doping lower than the emitter doping because now emitter doping could be lower than the base doping but so therefore in general the gain could have been less than one but because I have this band gap difference that is giving me so much that I can spend it for inverting the doping sequence right and that is the whole point about a conjunction by puller transistor I do not have any problem anymore with early effect because my doping base doping is large so no problem with that and correspondingly my carc effect is also suppressed because now I can raise the collector doping so all those problems are gone because I can take advantage of the gain get a lot of gain by the band gap difference you see that is the central point why we do this okay so few more types fights of hetero junctions and then we will be done what is the difference between the picture that I just draw a few minutes ago and this one the same aluminum gallium arsenide gallium arsenide system except it looks very different why does it look so different because it is actually P type for the emitter and N type for the base do you see that you see that the green is again the flat Fermi level and on the base side do you see that it is on the on the N side and gallium arsenide side the conduction band is very close to the Fermi level you see that and correspondingly balance band is very close to the Fermi level on the N side by the way one comment about the symbol anytime you see a capital P that means that's a larger band gap region because otherwise you know many times just from the material given unless you look up in a book you didn't know what the band gap is right so that indicates to you that the larger band gap is whatever has this larger capital symbol that has the larger band gap now it's again you can see the delta EC and delta EV both are positive of course this is the original combination of materials and therefore it's still of course type 1 junction now let's talk about type 2 type 2 junction this is another lots of places there are various applications so again I'm doing an n type on the emitter same rules but this time you see the band gap does something like this now that's a type 2 because you can see the red one is not fitting inside it's not fitting inside the blue one but rather delta EV is negative the going the other way delta EC is positive just like the previous type one type one transistor okay that's fine now the homo junction hetero junction transistors also allows you to do isotype isotype meaning N and N you know previously in silicon if you had N and N that would be very interesting right it's a bunch it's a sort of uniformly dope material if you had a little bit of doping change maybe this is slight variation not too much but for hetero junction transistor even the isotype meaning both sides N could be interesting you can see here both side is N type and you could also correspondingly have both sides as p type and correspondingly draw band diagram now I'm not stepping through the steps to create this band diagram right but when you are in your home you should check to see whether you can draw these band diagrams yourself now one thing you realize on this band diagram that although this both sides are N type but in one side you have a depletion region right because charges have been pushed back in one side so you have a depletion charge however on the other side you have accumulation on this little notch you will have electrons and this therefore you cannot use the depletion approximation we used to calculate the calculate this XN and XP remember those are supposed to be purely space charge that the mobile charges have been pushed away only the donors have been exposed and the acceptors have been exposed and in that case we could calculate those charges here however on one side yes charges have been pushed back and so therefore on the larger bandgap side yes you can have this depletion charge but look at the other side in fact charges have come in because this has gotten closer to the Fermi level the rate Fermi level so therefore I cannot use my standard standard depletion approximation QVBI and all those formulas now how do you calculate it well that will be another course where you will learn how to do this but for the time being you can either you just understand it and if you do numerical simulation you know through nano hub they will do all these things automatically so you don't have to worry about it now by the way one thing people often say that if you have two metals this is a exam problem I often give that if you have two metals do you have a barrier and most people say well I have one metal another metal lots of electrons no barrier not really because of course metal similarly have different work functions and when you bring two metals in you will have correspondingly a corresponding discontinuity that's how you make thermoelectric coolers or because you have many times two metals that comes in you know your picnic coolers sometimes you take to picnic in order to keep it cool many of the junctions thermocouples for example two metals coming in you heat one junction cool another junction by passing current through it that happens only because when you put two metals in they do not have the same same band line up so when the electron goes over from one metal to another it can lose energy or it can gain energy through that notch so it's a very practical thing that you see and use all the time now there is a type 3 also and type 3 is really bizarre let's let's look at it so this time that you can have a band gap like this range so let's say I have this gallium antimunide and indium arsenide this two I have so I'm drawing the same band diagram and you'll have to sort of put it in same continuity of the valence band sorry vacuum level you can do that and when you do you see that this again is let's say p type on the n p type on the emitter side and n type on the base side let's say do you see now the band gap through two sides band gaps even are not inside each other at all it has been completely shifted out and you can correspondingly see that in this region very strange things are happening there's no depletion region per se on both sides carriers have accumulated on one side what has accumulated on the left side left side of the junction a bunch of holes a huge amount of holes have accumulated on the right hand side what has accumulated electrons because look at the Fermi level the green Fermi level has gotten inside the back that means that this is now has become degenerate so yes you always have that balance of charge on the you have p charge on one side the holes and n charge on the other side the electrons you have the balance of charge you have the junction but these charges are not space charges these are mobile charges and so therefore this behaves in a very different way than corresponding to a normal junction a norm quote unquote normal junctions that we that we know about so let me conclude on this part so we are talk we talked about hetero junction transistor and it offers the solution to the gain problem associated with polysilicon transistor with extremely short base because you see we got stuck we couldn't get any gain and the base doping if I needed to the base doping to be lower than the emitter doping we were in trouble so therefore we got out of the trouble by manipulating ni square and that gave me a lot of gain that I could trade off against other thing and steel could have a fantastic game now equilibrium solution of HBT of course this is just like normal BJTs bipolar junction transistor but of course I have much many more options type one type two type three depending on how the bands been what materials you have now if you do not follow the rules right there's no hope that you will get this band diagrams right because this is complicated enough that you can never memorize these things if I give you a combination of material from let's say pick something up from one of the papers in the literature if you don't follow the rules of these things consistently which takes a few more minutes then just memorizing it then you will be in trouble so let's follow the rules now as I said three different types of hetero junctions the first one is type one where the larger band gap material completely nestles the smaller band gap material the other one is staggered where the valence band is out of alignment but the conduction band is still inside but it could go the other way or so valence bands could be inside the conduction might could go outside that's all type 2 and type 3 well they don't even talk to each other they are essentially completely misaligned now for type 2 and type 3 we wouldn't use the classical depletion approximation in order to get the band band liner now we haven't talked at all about current transport the gain and all other things that we will do in the next class


The Georgian War of 2008 was an important event in global politics for many reasons. It represented a major turning point in the global power balance, and altered the direction of both the security interests of the Western NATO Alliance and the Russian Federation. Today, I will explain why this war happened, how it happened, and the reasons for its lingering importance into today's world. But before I do that, I want to announce an invention of mine, MacCon. YouTube makes it difficult for me to contact my fans since I haven't reached 10,000 subscribers yet. Because of this, I'm opening a group chat on my official Instagram page, the link to which is in the description, where I can notify you all when a new video is out and you can give me suggestions on what video I should make next. I think it's important to engage my community in the video-making process so the Mad Lad Army can keep growing. Now back to the video. The Caucasus Mountain Region has been home to a diverse range of peoples for thousands of years. Long story short, the mountains separated peoples, allowing different distinct groups to show up right next to each other. Within Georgia, four major ethno-linguistic groups exist, Circassians represented by Abkhazians, Indo-Europeans represented by Iranic Ossetians and Armenians, Turks by Aziris, and Kartvelians by Georgians and other minor related groups. Skipping ahead to the Soviet era, some of the more ethnically diverse Soviet republics had designated regions for minority groups, called Autonomous Soviet Socialist Republics. Russia had a lot of these, which were succeeded by the republics, a topic that I have reviewed in a few videos. Georgia had three of these, Abkhazia, South Ossetia, and Ajara, the last of which has not really caused major problems for Georgia since as a whole the Ajarans are very similar to Georgians. By the time Georgia achieved independence on the 9th of April 1991, it had already been in the midst of inter-ethnic conflict. Abkhazians had been fighting the Georgians since 1989, and the Ossetians had also been fighting against Georgia since 1991. This time in history was turbulent for Georgia, as they also faced a bloody coup d'etat in 1991, and a civil war that lasted until the very end of 1993, which in turn led to continued political and economic instability for the rest of the decade. The Abkhazian and Ossetians were able to control most of their ethnic territory in the aftermath of the violence. Though the violence in Abkhazia has mainly stalled up to the present day, the violence in South Ossetia was temporarily frozen but not yet complete, and would lead to the war in 2008. The Russo-Georgian War in 2008, though the shortest conflict that I will discuss, was the most impactful for both regional and international politics. As I have just mentioned, one of the main reasons for the conflict was the inter-ethnic violence between the Georgian majority and the Abkhazian and to greater extent the Ossetian minority who wanted independence. But there were also other internal and external forces at play. The NATO alliance, which I have also explained in a previous video, was expanding eastward into former Soviet-Block states in the early 2000s. Within Georgia, a push for democratic reforms in integration with the West, called the Rose Revolution, occurred in late 2003, and saw Mikhail Sakashvili rise to power in the country. This revolution was also coupled with the Orange Revolution in Ukraine in 2005, which pushed for similar reforms. Both countries attended the Bucharest NATO summit in Romania in 2008, where both Ukraine and Georgia were promised future NATO membership. Unsurprisingly, this revelation was a shock to Russia and its security interests. Three former SSRs, Estonia, Latvia and Lithuania, had already joined NATO, and to have two more bordering nations be part of the alliance would further threaten Russian military and security interests. At this particular time, conflict in Ukraine was not really warranted, and Georgia was a much more plausible option for Russia to project its power and influence in. The hope was to incite a regime change in Georgia against Sakashvili, and deter the country's integration with NATO. Russian troops entered the South Ossetia conflict zone on August 7th, and subsequently accused Georgia of aggression against South Ossetia. Sakashvili, as a result, sent Georgia into brief conflict, despite the Western warnings against it, in hopes of regaining lost territory against the separatist movements in the country's north. The conflict ended on August 12th, as a result of a ceasefire brokered by France. The conflict was a strategic loss for Georgia, as they lost control of the entirety of Abkhazia and South Ossetia, both of which were now under Russian protection. On the other hand, Russia benefited greatly from the conflict, now having some influence over Georgian foreign policy due to the presence of the aforementioned territories. Though this goal was accomplished, Russia was not able to stir a regime change in Georgia, and the country remained strongly pro-NATO to this day. The conflict has several implications in today's world. Georgia will now have a much harder time exceeding to the NATO alliance, as members of the alliance would not be willing to enter into conflict with Russia due to the nation's accession. Russia's former Prime Minister Miedvedev has stated that Georgia's accession could provoke a horrible conflict, something other NATO countries would not be willing to partake in. This war also proved Russia's ability to project power in former Soviet republics, which can be seen in the subsequent Donbass conflict in Ukraine beginning in 2014. Ukraine stands to be a strongly pro-Western nation, though its geographic proximity to Russia and its large ethnic Russian populations hold it back from entering Western alliances as well. With the Georgian war, Russia proved itself to be a major player in global politics, though its influence is not able to spread too far beyond its borders. The nation has expressed concern for the accession of Balkan nations like Montenegro joining the NATO alliance, though its ability to project any serious backlash against the accession was extremely limited. So yes, as you have learned, a five-day war really has caused a lot of geopolitical implications in today's world, and despite its challenges, Georgia has still managed to become a relatively successful country, implementing democratic reforms and having an increased quality of life over the past decade. All the nation's foreign policy remains a tricky subject, as Russia has some influence over what it can do, especially concerning its integration with the West. Thank you all for watching. Be sure to like, subscribe, and share this video with all of your friends. I will be starting a Patreon soon, so be sure to look out for that in the coming weeks. Also, we get closer to every day to 1000 subscribers, so every way you can help share my content is greatly appreciated. Thanks again and I'll see you next time.


Good to go. Okay We'll continue with the rest of the tutorial After having a couple of beers, so it will be more entertaining now sure So to go back we were talking about the github integration that we have an easy build to Automate the workflow of contributing back There's some stuff under the covers. There's this check github option That we found out the hard way that we really need to make sure that people have things configured correctly that the github Token is in place that get Python is there That you actually have a fork to push to that the pushing works with the token you give it and so on So based on the checks it does here It will tell you what is supported so from PR you can basically always use You don't need to use a github token for that. It will just pull it from github And as soon as you don't or as long as you don't do like 20 of these in an hour, you'll be fine But at some point github will start complaining at you're doing things too frequently If you have a github token that will not happen for new PR and update PR You need to push rights to your repositories. So then you really need a token. There's no other way Review PR is also read-only so you can get away with not having a token and uploading a test report needs permissions to create gists and To add comments to pull requests. So you need a token for that as well Now ideally if you have things configured correctly, you should get an okay for all of these and then you're good to go to use all these features so The big feature or the new feature that was added is Adding support to the easy build to the eb commands to create new pull requests from the command line. So It basically takes care of the whole workflow for you So you just run this command and at the end you get a pull request with your easy config file Now how the easy config file is named. It doesn't really care because it will rename it and put it in the right place as a part of the Of what it does. So you get one single eb command no git commands no clicking on github. It does everything for you And it tells you what it's doing It will pull in the develop branch from the central repository and then create a branch on top of that So it's showing you here. It has created this branch. It uses the software name and version to come up with a sensible branch name and it uses the date and timestamp to Ensure there's a unique branch name pretty much So if you run this multiple times, you'll get a different branch name every time It renames and relocates the easy config file so it puts it in the right directory gives it the right name Based on the tool chain the version suffix the version and so on so you don't have to do the renaming manually It will target the develop branch of the central repository by default But you can actually use the same thing to target your own repository Like for css for example who has a central repo of their own they could use this as well if they want to it will Auto format or auto generate a title for the pull request which makes sense according to what we Try to get people to do so module class tool chain software name software version And it will mention the pull and the description and it was created a new PR as its self-promotion kind of thing Shows you the overview of what's included in the branch. So here we're adding one single easy config file with all new lines So we're not changing an existing one And it will open the pull request and give you the link to the PR on github so basically all of this and this is very short if you know what you're doing you can One two three four like seven commands you can do it now. It's just one command very short And you don't have to do all of the renaming and checking and make sure everything is okay That helps a lot. No git interaction. No github interaction Another benefit is it doesn't create it creates a local branch on your system But in a temporary directory and as soon as new PR completes It's cleaned up. So you don't even have a local branch to clean up in your clone of the easy comp is that's very useful and Even for people that are used to get and github it saves a lot of time. It's a single command It does everything for you and less stuff to clean up afterwards very similar updating is an existing pull request Works very similarly you give it the number of the existing pull request the easy company file to add And this may be one that exists already. So you just change a couple of things You give it a sensible commit message or in this case you have to give it the commit message yourself It won't make any guesses of what was changed and it will go ahead and do the whole cycle Checking out the right branch that corresponds to the pull request Pulling in that branch locally in a temporary directory copying the easy company file here into the right location and doing the commit That's copying doing the commit with the message you give it and Then pushing that branch into your fork, which basically updates the pull request So again, all of this all of these commands assuming you know what the branch name is and What kind of get magic magic you have to pull is Is now changed to a single command in eb and there's no mess left around afterwards The other way around sort of pulling in from a pull request. This is mainly for testing contributions you give eb from PR the pull request number it will pull in all the easy company files that were touched In that pull request and it will build them by default or you could dry run on them or Check style or check contribute all these things Just to see if things work on your test system and again, this is all done under slash TMP So once this completes everything is blown away. There's no mess left after This is what we use all the time for testing contributions and in combination with from PR. You can do upload test report. So like this Just combine from PR upload test report go back one slide go back, okay One nifty feature here is that you can specify which easy company you want to right Yeah, so one thing you can do here if it pull request has multiple easy conflicts that it's touching so say it's a big PR with 10 easy conflicts As a part of the command then you can specify one of them and then it will only test that one You want to test one specific one with a particular tool chain or you only care about testing one of the easy conflicts You can do it as well You combine it with upload test report it will do the build fully and then at the end It will upload the test report in a gist on github and add a comment in the PR to mention. There's a test report for it So this looks like this this was me testing one of the pull requests and Adam was testing the same PR, but he was using sent to a six so it was failing for him It was working for me and then this is the link to the gist which has the details about what kind of system what kind of easy build configuration and If something fails, yeah, this is a successful one So it just gives you some metadata about the test environment If it fails for the build that fail it will give you a link to the build log So you can click this and figure out what's going wrong. It the build log is partial here to prevent the gist from Being 100 megabytes or something being uploaded. It's only a partial gist only the last part It's usually enough to figure out what the problem was so a maintainer or Say somebody opens a pull request and maintainer sends a test report that failed if the contributor knows what's going on he can figure it out by himself fix it by himself and so that's kind of what we're trying to get to that contributors can figure things out by themselves fix it by Themselves without us telling us telling them how to do it and then one thing that was added later And this is mainly for maintainers, but actually anyone can use it What we're doing here is Comparing a new easy config file with existing easy config files. So say you're adding an easy config file for a new version of CMake that has just been released today You create a new easy config file open a pull request for the new PR a maintainer will use eb review PR with the pull request number and it will just show a diff between Existing easy config files and the new one and it will jump out. This is really a version update Nothing else has changed. So if the test report passes, this should be good to go And this is very hard to do manually because you will have to do the manual visual comparison And it does a diff for you and the detail here is it does a multi diff. So it will Compare one easy config file with multiple others So say you have CMake version 4 and There's existing easy complex for easy complex for version 3 and 2 already It will do a multi diff and so show in the version 4 the version has changed from 3 or 2 to 4 So this gives a nice overview This is not something that github can do because this is an easy build aware diffing So if you don't know what easy config files are you cannot make this by yourself or github cannot do this and Later on we also figured out this is actually also useful for contributors So they can do a preview of a pull request and just run it so you can review on an existing pull request Or preview on an easy config file that will show you a diff view like this. So here with chewing This new easy config file you're adding BAM tools this version The closest one I could find was this older version of BAM tools and the only difference is the version in the Jackson Nothing else is different. Yeah


Hi guys and welcome back to my latest video today I want to talk about should you rent or should you buy nursing textbooks? I get this question quite frankly. I say that in all my videos. All these video topics are things I thought of inspired by you guys and things that you guys ask. So renting or buying nursing school textbooks. So my personal thoughts, experiences, opinions and all that is I rented all of my nursing school textbooks. My school kind of did this cool package deal where I just rented the online version of the textbooks and like you would pay a certain amount each semester for those books and the access codes online. But through your account you could have I think like two or three different people access it. So what I did with a couple of my friends is we just split the cost of all the books and shared one online account and then when we were done with nursing school we shared our portion I guess you could say for someone else to use that account and login and use the nursing school books. My personal opinion I recommend renting nursing school textbooks whether it's the online version or the paper version or whatever you're using. I just in all honesty I have not even had the urge to go back and look in my nursing textbook since being done with nursing school. If there's anything I need to look up I look it up online or in find a reputable resource to look up that information. I have never had a desire like oh I really wish I had my nursing school textbooks to look things up but I know a lot of people that just like to have them whether it's like a memory that keepsake for them or they just feel like they're gonna use them in the future and maybe they do maybe they don't. Information just changes so often and things get updated and I feel like in 10, 20 years stuff that's in your nursing school textbooks is gonna be varied or different than what the current information is at the future time. So whatever you want to do it's completely up to you personally for me it's cheaper to rent you don't get to keep the books in the end but you're not really gonna need them in my opinion. So that's my opinion that's my two cents. Let me know your thoughts down below and what you recommend or have done and yeah I will see you guys in my next video. Bye.


Good morning from the Frankfurt office of CMC markets and welcome to the new trading week and good luck to everyone I am looking for the trader who still thinks that the monetary policy of central banks is still a good thing on the long run Actually, I realize that I do not know anybody anymore who is no longer skeptical in this regard Please post your comments below of this YouTube video The reason I'm asking is that I realized that we have an equities rally that nobody really believes in The latest Reuters survey shows equity holdings of global funds Reached their lowest reading in the history of the survey which dates back to before the year 2000 in addition to this Begin to Markets begin to do the opposite of what central banks are intending to achieve This can clearly be seen in the Japanese yen strength after the Bank of Japan Expanded its monetary policy measures once again now Rumors around a new QE program by the ECB are starting to circulate and if markets are being beginning to pick this up There might be a strong catch-up rally in European stocks which lag behind their US counterparts in the past weeks on the heels of Brexit and banking stability fears watched also the S&P 500 index today Which has been consolidating for the good part of the second half of July It could break out of a bullish formation it formed which could mean you record highs for US stocks There will be non-found payrolls numbers out this week alongside supply managers and services Service there was one survey out of China the kayaks in purchasing manager index which managed to rise above 50 again Which means at least I not a contraction anymore Which is a good news and Asian stocks this morning are at a one-year high So that might pose well for the trading day today in UK and US and European stocks Yeah, and if you look at the US stocks They have been as I said consolidating and if the economic data is right this week There could be a breakout to the upside and there could be new record highs and wall street So keep that in mind and on your watch list other than stocks watch WTI and print prices this week as they Tested their 200-day moving averages on Friday and bounced off this major support after dropping 20% There could be 20% in the past weeks oil has been dropping 20% in the past weeks after that There could be some leeway for a recovery should inventory and economic numbers this week support such a move


This is Witchbase news for Friday the 10th of March 2023 I'm CMDR Buur In Elite Dangerous news this week there's an ED James Bond style spoof launching tomorrow Elite Dangerous developer Darren Hallil moves on to new adventures and did we get a glimpse of the object at the center of the maelstrom If you enjoy our videos be sure to subscribe and click the little bell to be certain you see all our Elite Dangerous content and community posts here on YouTube and if you want to directly support our work by joining our Patreon you'll find links to that and everything else below We start this week with news that the latest James Bond style epic from CMDR Spatula 007 entitled Dangers Finger is set to premiere on Saturday March the 11th at 1800 hours UTC There's a full trailer for the 27 minute epic spoof comedy movie which will feature explosions car chases fistfights and some amazing celebrity voice impersonations all set to an equally impressive score from the Elite Dangerous community's own mohecon musical maestro CMDR Takoso to view the trailer and get a notification for the YouTube premiere of the movie you'll find a link in the description below this video Deran Halil senior game designer and one of the architects of the systems driving the Thargoid war as well as being a popular live stream semi-regular for Frontier announced this week that after seven years of working on Elite Dangerous he is moving on in his seven years at Frontier and on Elite Dangerous Deran has touched almost every system in the game and has become a regular feature in the social media of anyone watching and following all things Elite Dangerous often plying those feeds with cryptic encoded messages and inferences he's also become a regular cheeky lurker in the chat windows of many streamers and YouTubers whilst he's moving away from Elite it's fantastic to hear that he will be staying at Frontier working instead on other projects within the Cambridge Development House seven years is a huge amount of time to be working in the games industry on one property and we look forward to hearing about what he's next directed his talents into away from Thargoids and spaceships oh seven Deran and genuine huge heartfelt thanks for everything from myself Rene and everyone here at the Burpit Elite is quite often a game of smoke and mirrors and more than a little tin foil that is doubly true when it comes to all things Thargoid in nature predominantly because so little is actually really known about our slightly killy galactic neighbors what's at the center of the Thargoid maelstrom clouds is for obvious reasons one of the hotter subjects in the elitosphere currently and that inherent curiosity that we feel when trying to peer at what is hidden is compounded when there's something in this case the Thargoids actually trying to stop you seeing there are a number of obstacles currently that prevent players from peering directly into the heart of a maelstrom and slowly but surely we are starting to overcome them most notably just getting past the Thargoids themselves is challenging players are hit with high predictions and multiple interdictions just on the approach to the caustic clouds once inside you'll find caustic cloud generators dotted and roaming throughout the cloud which act almost like anti-ship mines producing huge caustic laden explosions next there are patrolling Thargoid vessels themselves running cautious and cold with some engineering can help deal with those threats if not largely negate them completely the environmental caustic damage coming from the clouds is pretty horrific but hull reinforcements of varying types and flavors can assist with that adding at least some longevity to your stay in the cloud and finally most recently there are caustic sink modules that can now be used when it comes to hanging around in the clouds these can be a complete game changer whilst you still can't stay forever given the weight and volume of caustic damage being dealt the sink modules do definitely make your stay longer and likely much more survivable once you approach the center of the cloud however it's here that we're subjected to the next layer of Thargoid defense whilst you're still subjected to huge amounts of caustic damage watching for patrols and avoiding mines get too close and you are hit with a colossal electromagnetic pulse that damages your hull temporarily knocks the entire ship offline and sends you spinning through the cloud out of control the effect only lasts a few seconds but it is hugely disorientating and of course it prevents you getting any closer to the heart of the cloud and seeing what's there with the advent of the caustic sink module however and the extra layer of survivability we now have it means that commanders are getting more of a look at the EMPulse itself and importantly the area that it's emanating from it's at this point that I need to underline that humans are creatures of pattern recognition and when staring up at clouds in the sky you'll always see shapes reminiscent of telephones cats double decker buses or pots of tea if you look hard enough and honestly we went back and forth this week over whether we should report what we think we've been seeing in the maelstroms for that very reason however ultimately our job here is to bring you the elite dangerous news be it tin foil or not and let you decide if it's valuable and we'd love to see more commanders equip a ship head into the maelstroms and report back on what they find we noticed in a video posted by commander radium io to discord that at the very moment the pulse fires there appeared to be what looked like a silhouette reminiscent of a gigantic thargoid vessel with the pulse emanating from the very center of the petals upon seeing the video we immediately headed into a maelstrom ourselves and triggered the pulse and when we did this is what we saw from the cockpit at the point of the pulse there does indeed appear to be thargoid like petal shapes in the central cloud what you're seeing now is slow-mo footage from rene's external camera during one of several passes at the pulse that we made from varying angles of attack just to be a hundred percent clear here i don't think right now that frontier has a huge thargoid model sitting at the center of the cloud and we just can't see it properly yet because of all the effects around it what i do think is there is a huge nebulous blobby shape that is deliberately very hard for us to decipher and within that blobby shape frontier's developers are perhaps trying to infer a huge thargoid vessel of some sort the obvious go-to for that vessel in established elite law is a thargoid hive ship if indeed that is the case it's likely that some caustic damage and a few patrolling interceptors will be the least of our concerns have you ventured into the maelstroms yet if you have did you manage to set off the em pulse and just what do you see in the clouds at the center of the caustic mess let us know in the comments below that's it for now thanks very much for watching we'll be back later this week with more videos until then oh seven commanders follow the greens on the way out and do keep clear of the toast rack we very much look forward to seeing you next time