So and then the disclaimer that I'm not a Python programmer, you know, I could write Python programs, but if you ask me which Python function to call for two, like for like these data frames and parallel programming, that sort of things, I would know on top of my mind. So Radawan might, will help me during this, when I call certain functions, for example, for examples. So we start with the dependency management. So the first part is motivation about dependency and how, how it could bite you back, you know, if you don't do it properly. So this section I will actually demonstrate with an example from, from a user support case that I was handling sometime back. After that, we'll go for the exercise. We go for the exercises in the wake up rooms, 15 minutes. After that, we'll come back here. Then I will motivate a little bit about package management. Mainly the material shown here. But during that package management, I will purposefully try to set things wrong and show you certain pitfalls. And I will, I will, I will make the case by showing, you know, how bad it can go wrong, for example. And I will try to have a critical eye on this. Yes, yes. So if you see something that I, sorry, that I, so if you see something going wrong, that's because purposefully I'm doing that, not because it went wrong. So I have a slight go to the answer. So excuse me there. And the exercise two that I will do at this demonstration, not the, like we'll not go for the breakout rooms and also the same with the exercise three, because they are, I want to emphasize certain pitfalls as well. These exercises you could do after the course, like not, it's not, not like, like coding here. Then for the, the recording dependency part I'll do introduction. And then we'll go for the exercises in the breakout rooms. And then we'll have a discussion. So everything goes well. We could end this by 950 and have like 10 minutes discussion before we go to a break. Does that sound good, Radwan? Sounds great. Yeah. So let me adjust my terminal a little bit. Can you have the, the teaching material available for you when you have it, because I'm going to share my terminal now. So I might ask certain things. Yeah. So I have the open and I also want people to open. So on one half of your screen, you can watch the other half or maybe have the material open and that's what I have on my side as well. Yes. Thank you. So I was thinking, Radwan, that when I, when I start this, I would just make my vanilla terminal ready, that, you know, some, something that's perfectly made for the demonstration. But then I thought it doesn't make sense. Like we have to, we have to show what real life is. So I have certain setups in my terminal that I will unset first in order to come for the vanilla. So, so these things that I'm going to do, you don't have to follow or like, like don't type along, because this is very specific to my laptop that I didn't want to hide anything. Right, Radwan? So don't type along. Sounds good to me. I should clarify what is meant by vanilla. Vanilla means no configuration. Thank you very much. Yes. So, so I'm going to activate. So I have this top and bottom terminals because if you see that certain terminals when you open up, it'll start with a Konda prompt or, you know, some Python activated. So in my laptop, I make sure that nothing is activated when it is starting up. So I'm going to start a Konda environment here. I have this file I created. You can have a look at that file later on, but it is. So it just activated my Konda. So it doesn't automatically get activated whenever I started. So, Radwan, do you have your Konda activated always in your terminal or is it that something you would explicitly do?  I don't have it activated every time because actually I prefer to have different environments for different projects. And maybe we will say something about that later. So I also say as you, when I open my tunnel, nothing is there. And then I actively activate the environment that I need. And in this case, you are activating an environment called base. So that's the base environment. And later one can create different environments for different projects. Can we comment on the whole philosophy? So you're doing stuff from the shell here, which is changing different properties of the shell, the environment variables, that will activate or deactivate different environments. And here an environment is the Python environment. So the Python version and all the packages that are installed. Is that the summary here? Yeah, so more or less. So as you see that, if you notice what I was typing, maybe a little fast, I would apologize for that. What I'm trying to do is I'm trying to have two NumPy versions on two terminals to show you something. So here I typed Konda. I missed one of these, this activate part, which will come later. So that's why this error is... Okay. So is that the main point here? So you're trying to show that you can have two different NumPy versions. Exactly, Richard. On the same laptop. Got it. And then all the details, I guess, we'll learn later. But that's not the main point right now. That's also a very good point. And thank you for reminding me that. So these things I'm just typing along, like typing a little faster, we'll come back to in the second half. Okay. So then this PS1 and that sort of things that I usually do before the course, but here, what I'm doing is, I'm sort of shrinking my prompt so you can see better. So there's no magic, there's no Python magic involved in that part. So now I have two NumPy versions. And as I said, rather than before that, that I start, so I'll make the form a little bit better here with the space. And I'm going to clear the screen. So I have two NumPy versions, 1.15 and 1.21 on the bottom. So what I'm going to do is, I'm going to execute a small script that I pre-created in my directory. So I will open that. NumPy. So this is some broad card shape script. I have no idea what it does, but I know it do something. Do you have any idea of what would this do? Well, I should have paid better attention at the NumPy lesson, but I think Richard knows. Yes. So, well, it does something, but I see that it doesn't work. So I guess whatever it is, it's designed to show that NumPy doesn't support this function. Not exactly, Richard. So NumPy 1.15 doesn't support this function, but 1.21 does. So this function, let's say if it is in your program, a script that you've distributed with your publication, when the user, when the end user or somebody wants to reproduce this, want to run this, it will catastrophically fail, like in the top case, with the long stack trace. Like here it's very clear because I'm focusing on a specific, I'm triggering something very specific. So the error is very clear, which says that attribute is not defined in NumPy. But if it is inside something, something else, inside something else, it will be a long stack trace hard to detect. So what we're trying to do in this lesson is to prevent this from happening by telling the user or the end user or your friend, or especially, especially, especially your future self, that this script is designed for this version. Attach that information like some metadata. In addition to your script, you tell that in order for this to work, you need this NumPy version. And here's a way for you to get this unambiguously. Does that make sense? That's something we're going to show you. It makes sense. And I think we all need that sooner or later because, I mean, the software evolves, but at some point, our projects, they stop evolving. I mean, then we switch to different projects, but we still want them to work on the same computer or in future. And then we need to worry about the dependencies. So that's why we show these tools. Yes. So having said that, so those things are more described with more examples here, but I thought like showing you a real case that I have encountered before. Actually, I had to mention that I have stripped this down. So this was part of a long track test, but when I was doing system support, I stripped it down so the, so the error is more clear. But if it, if I ran the exact program that I actually encountered, it will be a long track test, very hard to debug. So, so rather one and Richard, now what we do is with that in mind, we go to this excise one, which is 15 minutes excise, go to your breakout rooms and discuss among, sorry, yes. Since many people are watching either in small groups or independently, should we take a few minutes and have people write in HackMD while we go on? Yeah, sounds fine. Do you want me to explain the excise a little bit? Yeah, if you talk, I will prepare it. Yeah, very good. So in breakout rooms, how do you yourself install packages like this that you use in your work? Do you use this pipey, which I'll show you a little later, or you use something like Konda or assist admin? I will have like a small demo later on. You can use system package management like app kit or you even, right? And how do you do this? And have you any experience that a project needed a different version of Python library than one your computer has? How would you sort of do that gymnastic I did in the morning? How would you do it when you do it? So this is a discussion, there's no right and wrong answers. So there are different points of view. And if you know what the requirement dot text at the government Yamal is, try to discuss that as well. But that will come back in a later on session. And so the goal is that we now kind of discuss all together in HackMD. I mean, some people are in working groups, and then you can discuss the within groups, but we can assume that I mean, many, many learners are watching via Twitch and I'm not really inside any breakout room. And then you can discuss here on HackMD. It can be interesting to see what other people write. It's not a problem if you've never heard of three requirements of text or environmental general or a condom or pipeline. No problem at all. But I think we all sooner or later have some sort of horror stories of things going wrong on our computer or the computers of our colleagues. Yeah, sounds fine. Then Richard, can you take the screen for me for the HackMD? Yeah, it's there. Yeah, see you. Can you place the time answer exactly in 15 minutes? So you'll not I think 15 minutes is too long. So we're getting some, I mean, even 10, I think is quite long. Should we, I think we can basically take a few minutes while we are watching it live here. So we see many pips and condos, some with the operating system. Brew's a good idea. Yeah. Tracking dependencies. I must say until maybe five-ish years ago, I didn't track dependencies well myself. So that's definitely understandable. So Radoan, do you have any experience with this poetry that is mentioned here? Yes, a little bit of experience. I think it's nice. Nice project. I'm not using it myself, but yeah, nice project to solve actually a couple of issues. It can do both dependency tracking, but it's also for packaging. So it's also relevant in the third lesson of the day. I'm using something else for packaging, but not because it's better, it's just personal preference. I have a real example. So in fact, last night, or no, it was yesterday morning, I was trying to update the course webpage, and then there was an error from the thing that built it and it wasn't working. So I searched the error message and eventually find that Jupiter had changed something, which made it somehow incompatible. And then Jupiter made some change that was incompatible with some versions of Python, so read.dox was failing to build the ski comp.alto.v website. So then I had to update our requirement.txt file so that way it could build. And yeah, I mean, I have to say the number of times I've done this is perhaps a little bit surprising. Maybe also surprising how little I've had to do it. Yeah, these days when I get a Python project from somebody else, one of the first things I do is to look at the requirements, the text on environment level, and then I think about, okay, how can I set up an environment for this? And it also comes back to what Richard mentioned yesterday. I think we talked about versions and pinning versions already yesterday somewhere. And if I have different projects on my computer and they both pin, so they refer to a very specific version, but the version is simply different, then we need a mechanism so that both projects work on my laptop somehow. And so now this is the point of this lesson. Yeah. So how is the HackMDA Richard? Is there any questions there for us to answer? There's a lot of good comments here about different ways people do things. Yeah, I think so far no question that needs to be addressed here. I'm trying to have an eye on this. Yeah. Should we carry on then? Are you ready for the next part? Let me, let me prepare my screen again. Okay. I'll give you the next up in a moment. Maybe I can kind of raise one thing from the HackMDA, but maybe we'll discuss it later. So I could write the dependencies, I could write them into really, or I could write them into requirements or text, or I could write them into environment. So what could be the advantage of using these files instead of writing them somewhere? Although I have to say that writing them somewhere is already really, really better than not writing them down at all. But maybe we'll come back to that. Yeah. So the thing is at the end I will try to come back to that. But if you, if I forget that, please remind me because it's at the end of the lesson, because I'm going to bypass this bind and the packaging thing. So we could discuss that later. So Richard, my screen, is it shared now? There you go. Okay. So the next part we're going to do is about this conda and PP or whatever you call it, P by PI. How do you pronounce it around yourself? PI PI because it's the Python package index. So that thing. So I'm going to install the same because there are different packages. So why we have these different things? The main thing with the conda is that it incorporates additional non-Python code and dependence libraries and system-level libraries and even something called glibc, which is sort of low-level system related alongside the packages. And they distribute pre-compiled binaries. Do you know what a pre-compiled binary is, Richard? Yeah. So well, other than exactly what it says, I guess it basically means that your computer doesn't need the development tools in order to prepare the code for use. And it's done before you get it. Yeah. Okay. So I'm going to do that magic I did before because I want to make sure that my conda is not always activated. So in conda and I have on the bottom, I have a Python 3, let's see what version it is. So I have 3.5, 8 Python system by install. And on top, I have a conda activated. So I'm going to install install. I'm going to use this flag user, which is to install on my local home directory. But in the latest Python versions, they actually check where they have root access, then they will fall back. But I see this has like a good practice when I do that. So do you know, rather one that we are used to equal science when you do this numpy installation? Okay, it's already installed. So I'm going to remove that. But as I said before, this is not a type along, because I will do certain things wrong. So don't type along, I'm going to remove something from my home directory. If you do this one, you will lose your thing. But I'm on like a safer environment that I could do this very, like without breaking my computer itself. Yeah, I'm getting really stressed about looking at something. Yeah. So one part of some things that I'll show is how to break your system. So not to try at home. Why are you deleting this now? Just to understand. So this was in my side some preparation mistake that I already tried installing it before coming here. So when I installed it, it said numpy is already installed. So if it is already installed, I can't show the mistakes I'm going to show. And can I just ask you, are you going to later also show how to install it into a virtual environment? Yes, I do. Because I can say that what you do now here, I normally don't do. But maybe this is the point. Yes, yes. Okay, good. Yeah, okay. And I'm going to install that. And I'm going to here, first I'll do a Konda search, right? Numpy 1.21. Here it's installed, you see the rather one here, it says a wheel file, it installed a wheel file. That is sort of like a self-contained zip file, archive file, which everything inside. So it does these binaries and everything incorporated. So here if you see, I'm sorry, my screen is a little bit too much to show you here. Let's see if I can scroll up. There are different versions of Numpy in Konda, if you see. So here the IP, the PIP didn't complain. It went check my architecture, it checked my operating system and got the proper wheel down. Here the Konda Numpy has different versions. So what this means is, so this Numpy is for Python 3.7. This is for 3.8. This is for 3.9. So they have provided different versions. And what follows is a hash, which is very specific, which is in, which says that there are very specific version, maybe there's a bigger set of dependencies that will meet this specific version. So to make sure that I install the correct one, I'm going to do, do you know, if I do this, what will happen? Numpy 1.21.2. And I'm going to install this one. So this is a very specific version. So this is something that you will encounter the Kondais, people say Kondais very slow. So Kondais slow, if you don't ask it to install something very specific. So I'm going to install this, but don't do that either. So this is also something you shouldn't do. So what will do, this happen is that it will go and modify your base Kondai environment with this Numpy. So every time you install other packages, it has to go and make sure it doesn't conflict with this thing. So I'm going to do that anyway. So I need two things that you shouldn't normally do. One thing is modify your base Kondai environment. And the other thing is, you know, rely on your base for the, for like the user for installing the packages. Here you see this sold environment or failed. The reason for that is, if you remember before, I had a specific Python version, which is 3.8. Now I'm asking you to install 3.9. So it has to think, it has to think a lot. It has to go through some matching and it has to find out. So let's, I'm going to cancel that. Let's try a 3.8 version. And also in this case, we don't do equal equal, we do just one equal, right? Because Kondai is a bit different than in this case. That's a good point that I forgot to mention. Yes. So it'll go and it'll do this. And again, it's not the specific version. So it'll think. So eventually it'll go and install, I think. But let's see what it's trying to install at least. Here it didn't do anything because everything that's supposed to be installed is packaged and the PIP detected my architecture and everything and it got the correct thing downloaded. So while this is working, can I ask you a question from Kondai? Yes. The question is, are we going to see how we can deal with this solving environment failed? Yes. Good. Yes. For this one, so until this goes on thinking about, because I purposely made the installation slow, I'm going to cancel this. So instead of that, let me do create name. The name I'm typing here may not match exactly the name in your example, but don't worry about course you could select whatever name you want here. So now we're making a new content environment, which will have its own completely separate set of installed software with exactly what we need. Yes. And we called it NumPy. We called it NumPy. And it failed because I, you see this red one that I specified a name and I said NumPy here again something something here. So that was the reason for that. And I'm going to remove the, I'm going to remove the specific Python version as well. So it's just going to create. Let's see how this time, do you see how fast it was? It was not thinking at all. So then I want to also focus here for the Konda, not like just the bee. It was installing the NumPy base. It was installing the open SSL libraries. It was installing the math kernel libraries for mathematical calculations. So it pulled down everything. And if you see here, you will see certain like earlier for NumPy, you had Python 3.9, 3.6, here we have HE H51. So I want to discuss in the, in the, I can be like, not now, but if you know what it is, please mention that. So here you have 3.9, but some of, some of them do not have Python associated. Can I just explain that now we got lots of packages that we didn't ask for. So where do they come from? They are dependencies of NumPy. So we wanted NumPy, but we got a lot more because NumPy depends on other things, which may depend on other things. Yes. That's, that's very true. So do you remember the other one that I did this very bad because you forceful removal of my home directory things? Yes, I remember that. Yes. So how would you avoid that from it is using virtual environment as you mentioned before. So instead of doing these things, if you have a virtual environment prepared for that, it's easier to remove and activate and uninstall. Because when you do this in your home directory, it will be always NumPy 2.1. So here, if you remember this example I showed before, instead of that, I'm just going to print the version of NumPy here and where it is loading from. So rather one, sorry that I don't go inside this Python prompt, because sys admins, they don't have time for that. So they use this one liners. So in the material, I have included this one liner and I have to apologize because we have a very high standard of, I know this code refiner, we keep a very high standard when it comes to teaching material. So the example I included is not code highlighted. So it might be hard to find, I'll show you later. So I'm going to find, so it says that it's loading from this location and it's even Python 2.7. And then let's say if I ask Python 3, you see there's another location.  So I also installed Python 2 just to make sure that how these things could be ambiguous. But I think we couldn't need some explanation here. So we see these two terminals and it might not be so clear how they differ. So on top, we have one way of dealing with dependencies and the way is conduct and I think it's perfectly fine. And on the bottom we show a different way of dealing with it, right? Correct. So this is with pipe, a pip. It is another way of installing this. I'm doing the same thing in two different ways. So then let's see how there's a scratch directory. You can do something like for the same sort of like isolation that you did for the Konda. You can ask Python, create a Vim with numpy 2.21.2. So this is, so then you do this, you'll have this environment. You can activate it. But do you think, Radovan, if I just activate it, I would have numpy already because I already called it numpy. Let's see. So again it's loading from my scratch init numpy. That is actually unexpected, is it? So when I have this installed, so I have this numpy 2.21 I created, then now when I'm, I've activated that. So I'm loading the numpy, but it's not loading from there. It should be, you see this difference here. It should be loading from this place. So I have to install numpy there. Install by 2.21.2. So even after you have this environment, you might have different setups in your computer. So this is a one-liner I always use to make sure that numpy, so it's still, it's still not using this. But let's say if I use Python now, it's still using the numpy version that is actually, that's something that I didn't want. So is there any idea that how can I like use the Python numpy version from this specific version? Mm-hmm. You see the CD, here, around one. So there I had a pitfall made when Python loads, it's also checks your current directory where you have installed something. So it gave priority to what I already had. So I had to move out of that directory even though I had a virtual environment. So that thing doesn't happen with Konda. So when you have the Konda, it's what you get. So activate that. Can I ask something before we continue here? Just to take a step back, because one question that came up, which I think many, many people have this question is, okay, so there's Konda and it can do, it can solve all these problems. And there is PIP, which can also solve almost all of these problems. So which one should we use? How do they differ? Why are there two solutions to this problem? So if you have, so when you have PIP, the libraries that you could install are distributed Python packages and APIs for other like C libraries, for example, but not system level libraries. If you remember that SSL library that I showed you, I'm not sure it's still here. For example, MKL and also this SSL, there was a SSL library that was here. So let's say if you try to use this package NumPy on your system and if I install it, if you don't have SSL installed as a package manager, like as a system wide, this package will complain. So in a place where you don't have root access, point HPC system or shared resources, without relying on the system admin, you can include everything in your Konda. So in a environment, in a shared environment, Konda makes sense because then you don't have to rely on system level, like RPM insulations. Yeah, maybe that's for such as an additional explanation is that what PyPI traditionally, PyPI is for Python packages. There are many projects that are actually not, it doesn't have to be pure Python, but it's all the packages on PyPI, they have a Python interface. And for many most packages, it's totally fine to use PyPI. Konda was created, it's more general because it's not only for Python, you can distribute C++ packages on Konda and packages written in our languages. So for some projects and for some communities, it's easier to use Konda. I would say it depends a bit on the project and depends on the community. There are projects which distribute on both and it doesn't matter. For some projects, it's a lot easier to use Konda. For many projects, it's totally fine to use PyPI a little bit of personal preference. So I often start with virtual environment and if that somehow doesn't work, then I switch to Konda, but that's just me. Yes. So again, Radon, that's a good point because I see that in our survey, there are some biology people from biology as well. So there are things in Konda that, for example, sequence assembly, for example, this will fail, but we'll see what it will fail with. This will say that it's not found. Just so you know, we have, according to the schedule, we have 18 minutes left for this part for this lesson. We do have extra time to go over at the end, but thought I would let you know so you can strategically use it. Yeah, I think I will be done by 10 minutes. Next one I'm going to show is the requirement. So this is a channel, Radon and Richard. So there are different channels that distribute different packages. So you can go to this BioKonda channel by specifying a dash C and get you these tools which are not necessarily Python. So that advantage is there for reuse. Konda, but this thing you can't do with it. So before, yes, so the next section I'm going to do that. So these two exercises I did with sort of like an example. So I didn't follow exactly the steps, but I gave you the general idea. Please go ahead and try it out later on. But there's this thing I want to show that actually failed and I thought it was nice thing to fail. Let's see. I'm going to clear this and exit my window and bring out a new one very quickly because I want something very clean. Yeah, let me, sorry about that. It's my screen again. Okay, Richard. So this virtual environment I'm going to create here. That's a good point. In Python 2, we have this venv. So I always get this because I resort to versions just to show you certain things. I'm going to check my version and show you something another pitfall because this is not recommended to do in your homes. Remember, I don't have the Python version and I'm going to copy paste something from the printing material itself. Oh, first before I need to activate it. And I'm going to do this one. What will happen now? Let's say it failed. Do you know why it failed here? The example I just copy pasted, but why it failed? I'm not sure why it failed. Yes. So that's something like very interesting answer. That the answer for that was in here in the pit pipey oak, NumPy. I'll go to this NumPy version, which is the latest, you know, Radhan, then I have this release history and I'm going to find 1.3.1 that I just installed. So it was quite old. It says that there's a new version available. And I'm going to say download files. And if I look closely, if you remember, Radhan and Richard that I showed you about this Python 3.7 binaries and 3.9. So there are specific binaries that you make the build files attached to a certain Python version. So if I go here, there's Python 3.14, like macOS, so my one is unique. So you have Python 2.7, Python 3.4, Python 3.6, but there's nothing for Python 3.8. So when people go to install, it will go and check what is the best, compatible version for me. What is the Python I have? It's not going to install Python. What is the architecture? It's going to pull. So if you don't have this, it will go through the zip file, which is the source code for NumPy, and it will try to build from source code. So that way it failed because I don't have certain things that I need to sort of build it. So if this happened, what you should do is, first you could do a condi environment with Python 3.6. You would build a condi environment with Python 3.6 and then NumPy 1.3.1, which you can't here, without modifying your system Python, here you can't do it. That you have to go for by a condi. Good point. So that's easy in condi. In condi, I have different versions. Yes. So when you make the event, it picks up the Python already available for you in your system. So that might fail there. Then we have another exercise that we could have a discussion around it. How would you record these things? Python 1.3.1 with Python 3.6. NumPy this version. Pandas this version. How would you specify this? So there are two ways to do this. One way for the condi and one for the div, but more or less same procedure. What you do is you create a text file, a YAML file for condi and a text file for div. And when you install the condi, you would say, create my environment with this name. Use this file. Instead of NumPy, you will specify that. I'll quickly show it in the next five minutes, a short example. And the format of this file is given here. Sorry, not there. Here. So here on the one, you could also specify and read that the versions. So it could be very specific or you could be more general. But in condi, yeah. So here, did you try to say anything around where you started to say something? Yeah, so I think this is very important. So these files, they have these specific names. And it's, of course, you can call them differently, but I recommend to use these names because other tools understand these names. And we will, like later after the break, we will actually see a tool that will read these files and use them. And about, should we specify versions or not? There was a bit of a discussion yesterday. I think it depends when, if you want to archive your project and you want to make it reproducible for the next five to 10 years and you don't intend to really modify it much, I think it's good to specify the versions. On the other hand, if you create a tool that you want to be used by other tools and it's evolving, maybe it's good to keep it a little bit more relaxed. Yes. But it depends on, sorry, like how specific you want to be. So this might install in a certain computer, but let's say this NumPy 1.19 is bound to Python 3.8, and the user's computer has Python 3.9, for example, like the NumPy example that I showed you that failed, that might create issues. So this is less confinement, there's more freedom, but it might break your code. Here, you specify more, this might not install in user's computer. So because normally the consumers of your code may not be system admins, or know a lot about why it failed. For example, why that NumPy failed, they might not go investigate. They might just not use the software because this is red errors, this is too much, like it's overwhelming when you see this, right? So it's a compromise that you want to make between being very specific and make it difficult or making more relaxed and break your code. So you have to think, I think there's more coming about Python packaging later on, the setuppy, and we are going to talk about bind as well. Yes. I would like to come to one question in HackMD, but maybe you can keep this open. You showed this one command, if you scroll a little bit, what was it, a little bit down or up? No, in the material, you showed that you can install condom or virtual environment from a file somewhere you showed that. Can you just scroll to this? Yes. I just want to say that this is something that I do. So when I install packages, what I actually do is I edit the file first and then I install from a file because then I have the advantage to have it documented at the same time. And I want to connect that to a question in HackMD that in this environment.yml, you can also specify channels. So you can have channels in there. You can give the environment a name. You can give which packages with versions. So one way of kind of remembering what channels did I install it from is to edit the file first and then install from the file. One thing I don't know is whether you can have multiple channels in the same environment.yml. I don't have to answer because I'm more of a virtual environment person. Yes. So you could have multiple environments in your channel, multiple channels in the environment in condom. Yes, you could do that. Answers, yes. So this is all the material that I'm going to show, but because of that question, I'm going to show something very quickly in the next two minutes. The recommendation here is to write down the text file alongside without installing them directly. So when you want numpy, pandas, mathpotlib, sidepy, you write them down in the file and then install it. So Python, yeah, for the pip, it's okay. But in condom, as practically it's very difficult to go to the specific version. So what I do is for condom, I install the condom environment first, then let's say, and then I do a condom, I don't get the command exact command first in my export, maybe. And yeah, so you could do a condom in export and have this that specific hashes that I mentioned before. And this file is already created. So here the default channel, here you can have bio condom, whatever you want. Maybe I can show that as well, deactivate. So that is to come out of an environment, you have to use this condom deactivate, you don't have to mention the name. I'm going to create another environment, condom create stem tools, get bio condom as the channel. Yes. So Richard, is there anything that in the HackMD that we would mention? Well, a good question was, it got some answers, but I think it's still a good question. So what to do if the environment broke? Like we did something and it's broken. What is a good strategy there? And I mean, I can just have one answer that I wrote there is that it will happen sometime, but to keep, like what I do is that I actually don't install anything into the base environment. I consider that as a read-only thing. I create a new environment for each project because then I'm less afraid of breaking things. And if something breaks, well, I just delete it and recreate it because it's just for the fun project. It's not my whole system. That is a very good answer, Radwan, because when you have this isolation, system isolation, conda package environments, then it's easier to delete and rebuild. If you do system-wide, it's very difficult. Your system will break. So this example I did to install this bio condom to show that how to specify multiple channels. So you could specify multiple channels on this. So after do this, you can actually export this to a file, let's say requirement once.yaml. There's some type order. Yes. Requirements. Oh, yeah. And it should be requirements of text, not the yaml. For the, for the condom. Yes, for the environment. Okay. So by the way, Radwan, the name doesn't, the name actually doesn't matter here. So it's just, you have to specify, but it's good to use the same name in order to be, for example, consistent with the material. Here, then you have the environmental file, then you can actually version control this and head. So version control this alongside your code. So that's the best practice. And in addition to that, let's say I did this, but it also showed me all the dependence. So this will be like a self-contained, fully self-sufficient requirement file. But let's say if you want to do, I think this is the command, but if I not, I will do a little googling. If you go from history, it will tell you what you explicitly said. So this is sort of that the relaxed version that we're talking about, not to confine the user a lot. So if you just want to see what explicitly you asked, you could use the from history, or you could say the complete thing. So we have two minutes left before the break. I wanted to clarify one thing because you said you could version control this file. This may not be so clear to everybody. So what version control itself is a little bit outside of this course, but what we absolutely recommend is to keep this file in the same folder, in the same repository, the same project as all the code. So it's a very good practice to keep the requirements of text or environmental demo in the same folder where you have your Python code in the same repository, not in a different place. Very, very good point, Radoan. So I will also add like your documentation, your requirement file and your code, if they're in the same repository, then the users, especially your future self, will be happy with you.  So Richard, that's all I wanted to present. And I think this nice arrangement that you're going on, and I would like to thank for your effort in organizing these things and all the instructors and the helpers who are helping out and the people who answered in the HACMD and also people who are participating. And I wish you a good life further. Thanks. What do you like more time to do anything else? Unless there's a specific question, I don't want to dig into anything deep because showing something really fast doesn't help unless I explain that. I guess if we have more questions, we can use the buffer time at the end and come back to special topics. Okay, so with that being the case, I guess we will go to the break.


Huh Brandon you can see it. They there's two Excel files Well, I guess you know if we mute our microphone. I think it defaults to your screen, so Okay, I don't know what else to do in my and I'm sharing and it shows I'm sharing on my end Samira can you see it? Yeah, I can see that I can't really read it, but I can see I mean as you point I mean All right, I'm gonna I can zoom in Yes, I was able to see it when I clicked on it and clicked on you on the bottom Right-hand corner. All right, I'm gonna give you a clue here and then I think y'all can work it from there Can y'all see this now Brandy, can you see it? Yes, okay, this is a just a piece of this of the worksheet now I think it'll tell you what you need to do the the problem gave you the demand and I Someone asked the question. I forget who it was so I clarified that that that's total demand that's what I meant it to be and the company Charlie company gets a share of that and So if you take their share of the total demand that's how many units That they sold and then based on their price they get a revenue And then from the revenue they subtract their costs and they've got four types of costs there and Once you subtract all four of those costs you get a profit or a loss That's really all the spreadsheet is and then you just replicate that over five years using those growth factors that I gave you and That's really how it goes together does that make sense Yeah, what I'm saying for example that you know the first year their share was 20% and then I think there's a second I don't know where I can find the actual wording of the problem, but There's a growth rate that we predict. That's where we get the the simulation You know, we estimate that the growth is going to be between two numbers over each of those subsequent four years and So you just say well, what are my what's my share going to be in year two? Well, that's sharing year one plus the growth, right now you Are you using okay, so you got total demand you got five fifteen and twenty percent You know a range So are you using like a rand like function for Excel or are you doing everything in The CB well what what you do you go ahead and build your model in Excel just the way you normally would in Excel so Well shucks, I'll give you this much so you can see there I'm giving you this problem. So you get a little something for attending The the Demand had a growth factor and You put that percent growth in this cell And then you go to crystal ball and you define that assumption with whatever that distribution is and then that Demand up here You can see that. It's just equal to the original years demand And I use is number of ways you can calculate that I like to use one plus the percent So that would be the second year is a hundred and fifteen percent of the first year And you just propagate that on through year three four and five And then you do the same thing for the share the share has a growth that we simulate It's got a distribution. I don't remember what the at the distributions triangular uniform or normal Okay, but whatever that distribution is you You know set this up as you know to be to be Modeled to be simulated and then again that percent share is just the first year plus in the way I do it one plus the percent and You you just go across that way and if it's a decrease then it's one minus the percent That that's just about as simple as I can make it and what I like to do I like to break everything out Separately before I start summing up That that's the best way of doing it I've done this so many times that it you know at the bottom. I will go ahead and Just use one formula to add everything up But you can break that into pieces You could just you know total up your revenue Total up your cost and then subtract the cost and the revenue, you know one number to get the profit Might be a safer way to build it if you don't you know if you haven't built many of these models but anyway, you just define these things as a variable and Then you decide you define the bottom number here the profit as a forecast that's what you want to see you know you're studying and You do that for your whole model Then once you get it built together you just click on run and that's all all there is to it Yeah, that makes sense. So I guess what I was you know, I can't Seem to get My brain out of the long-handed Excel formulas So I was trying to figure out, you know using the CB to try and change those variables To me that I was imagining that I had to figure that out first and then put it into CB so I mean I I don't know I these these additional programs. They're all I mean now Figured out problem one with first of all, at least I think I have no idea. I'm pretty sure I did it right, but Yeah, coming up coming up with that with it. It's a it's a pretty unique program Well, it just it just can do this so quickly. I've built this thing manually Use using the Excel functions for random and then I created a triangular distribution and made a macro Which is not that hard to do So, you know, so I could build these kinds of things without using crystal ball except it takes a lot longer to do it manually and You know, my simple version doesn't have the fancy reports that crystal ball gives you The you know, I can produce a curve and I can produce all the data Manually but crystal ball makes it so much easier to do all this if you're going to do this thing over and over again And I guess, you know, our intent with this course is to introduce you to let you know these kind of tools around there So, you know, if your company most individuals can't afford to spend about a thousand bucks for crystal ball But a lot of companies can if they do this a lot But you know, just so when you get on the business world, you know I don't have to build everything from scratch and Excel Decision tree is out there pH status out there crystal ball is out there You know, all these these add-ins are out there somewhere free some few hundred bucks But if you do this a lot or you have a lot of people doing it that you know, it makes sense for the company to buy that add-in and That's really the sense, but you can do this. I've done this this problem step-by-step just using Excel functions Is you can do it. It's just a lot of work Right. I think that was my problem trying to disconnect and figure out where Where Excel stops And crystal ball takes over, you know, for me, that's just it's been very confusing and and taxing on the brain In the little time that I actually do have to do any kind of Yeah, I can understand that and it um I hear you. I know what it's like to work a full-time job and do this if y'all, you know If you look at just let me look at this other example that's in that comes with crystal ball This is a simple simple simple, you know model there again. It's just the rental times the rent times the monthly expenses and They call them assumptions. I call them variables and you can see there the first one is a A uniform distribution with a min and a max And this one is a normal distribution with a mean and standard deviation And of course that's the forecast and all you need to do is just click start Let me run it again And of course it this one populates 16 zillion graphs out there Whoops that's running mine. I'm sorry. It just ran mine. You didn't see all these I'll be doggone. I forgot it It runs, you know when when you've got I've got two two instances of um Excel crystal ball out there and crystal ball doesn't know that so when you click run it runs every active window That's why we got all those other charts popping up there But this is the I think this is the one for this little simple model And it gives you a histogram. It ran 1000 trials. You can set the number of trials right there and um This is the the histogram of you know, which is a normal distribution since the the major Expense item was normally distributed then it would make sense that the output is going to pretty well parallel that that variable and it shows it goes from Losing $2,000 to earning about $7,500 And you can look at statistics Which you know shows you how many trials and it shows the mean out of all those trials Medium and mode you don't need all those things But it gives you a lot of information there and with a standard error down here if you remember standard errors With a standard error you can calculate a confidence interval If you you know your boss wants to know what what is the confidence interval around this mean You just take the standard error and multiply it times the critical value of t or z. This would be z and For alpha over two and that would give you the confidence interval around that Let me go back here to this chart and to answer some of these questions The the way I like to remember it If I'm asking a left tail question I put whatever value I'm interested in in the left tail and if you remember the the chart I I posted earlier in the course less than or equal or less than points to the left so that would be Uh, zero if we were interested, what's the probability? I would make zero money Just put zero in there and click enter And it shows there's a 91 chance. I'm going to break even On this model And you can also just drag these pointers So I could drag it to zero and get about the same thing If I want to know what's the likelihood that I'll make more than 4,000 You got it then just click enter It shows that Um I did it backwards again But anyway, it shows you that there's a 70s 8 chance you'll make less than 4,000 So that would be a 22 chance you'll make more than 4,000 And and it gives you a graphic there and you can just use these pointers drag it there and The it there's about a 51 chance it'll be between $1100 and $4,000 So you can answer a lot of those questions just by either keying into these areas or dragging the pointers to um As I wanted and you can drag a lot of different ways there, but Let me try and 80 percent. There's roughly 80 percent So there'll be an 80 percent chance it'd be between 300 and $5,000 I'm dragging it back and forth if you're asked What's the chance it'll be between 500 And 6,000 Key it in that way and you'll get the exact answer. There's a 81 chance it'll be between that range Remember those old Normal distribution problems, you know when we're doing hypothesis tests. That's really all this is doing for you It it um, but it gives you a quick way to answer these questions The other thing you can Let's see if I can find it on here Is it up there? I clicked out of crystal ball women Where are the views? I don't use crystal ball. There it is Is that gonna work? Well, I'm clicking the wrong buttons here I don't do this enough There's a way you can you can create a sensitivity chart and for some reason it's not coming up This is a lot like spss. I'm trying to remember There it is so many other screen I don't know what spss is spss is a statistical Software that is used by a lot of people I used it in my doctor program IBM bought them about three years ago and they've really started adding on a lot of tools when I use sps It didn't have these Monte Carlo simulations built in but now you can you can do all this stuff In in spss and it's actually cheaper by a long shot than buying crystal ball You can buy an annual subscription sps for about 80 bucks Versus I think this is not a question. Pardon I'm sorry. I have a question my kids were screaming and I was yelling at them. Okay. Are we supposed to do this? for the homework This part right here Well, what what you would do is You know once you build your model you run it And you will get for both both, you know the problem one and problem two You run it and you will get a histogram like this one You run it again And of course see it's running it's running all these histograms for the second model Remember in the second model you've got You know, you'll have each of the five years And here you can see the histogram for year two your three your four and your five And there's the histogram for the cumulative and I think there's there's there's a question about what happens in year two And then there's a question about you know, how much money do we make in the cumulative? And so you would use that particular histogram To you know answer the questions um So you get a little speak sneak so that The those Assumptions or variables are created per year Yeah Okay, so that's how you come up with the multiple histograms Or instead of going like straight across you created an individual Assumptions for each of those with the same um Characteristics or you know plus or minus values, correct exactly


a very good morning to everyone. I'm so glad all of you could join today for this session but I'm going to review, I'm going to provide a short review of literature and critique the late cadillain enhancement quantification techniques on cardiac MR. Focus a little bit on quantification or fibrosis quantification in patients with myocarditis and their outcomes and also present a discussion of our study that I presented at the SCMR 2021 meeting last year on the COVID vaccine related myocarditis study. To begin, late cadillain enhancement cardiac MR imaging is an outstanding method to identify fibrosis in patients with ischemic and non-ischemic cardiomyopathies. The amount of fibrosis correlates with the risk of major adverse cardiovascular events. This is a publication in Jack that looked into the prognostic value of cardiac MR tissue characterization in risk stratifying patients with suspected myocarditis and they reported that the presence of LGE was associated with a more than a doubling risk for major adverse cardiovascular events. When accounting for other variables, LGE presence still maintained a significant association with MACE and the hazards ratios found to be 1.72. The major adverse cardiovascular events were pertaining to either all cause death or heart failure, decompensated heart failure requiring hospitalizations or patients needing heart transplantations or patients who had a documented sustained ventricular arrhythmia or patients who developed recurrent acute myocarditis based on elevated labs or absence of coronary artery disease and the presence of myocarditis based on the CMR criteria. To quantify LGE, several methods have been proposed such as the full width at half maximum thresholding based on 2, 3, 4, 5, 6, 8 standard deviation above the removed myocardium or a manual contouring of the enhanced myocardium which is the most variable where the thresholds will also vary per patient. Earlier an older publication in Jack again looked into the techniques for quantification of the myocardial scar in patients with ischemic and non-ischemic cardiomyopathy. The cohort consisted of hypertrophic cardiomyopathy in the non-ischemic cohort and acute and chronic myocardial infarctions in this chemico heart. The reported that out of all the techniques the reproducibility was worse in non-ischemic cardiomyopathies and ischemic cardiomyopathies. Full width by half maximum technique was the most reproducible even in the HCM patients however the intra-class correlation with this technique was reported as moderate of 0.7. This is another landmark paper in the journal of cardiovascular magnetic resonance where it was reported that the amount of LGE outperforms the current guideline recommended criteria in identifying patients of HCM that are at a risk of sudden cardiac death. The method used in this paper was 6 standard deviation as compared to the previous paper where it was full width by half maximum that was proposed to be more accurate. Scar was quantified into subcategories and it is universally known that higher the scar about more than 15% as a cutoff. These patients would definitely need intervention and placement of defibrillators since they are at a risk of sudden cardiac death. The paper we would like to focus today is again published in the journal of cardiovascular magnetic resonance where the comparison is performed for myocardial fibrosis quantification methods on cardiac MR to risk stratify patients with suspected myocarditis by granitone. This was a retrospective analysis of 670 patients with suspected myocarditis. All the various methods for quantification were applied on the images available. Late gadolinium enhancement for the visual presence score was also assessed and the strength of association of all these LGE results with major adverse cardiovascular events was determined. Inclusion criteria for these patients where when they had a suspected myocarditis and with signs and symptoms as either acute chest pain syndrome with a symptom onset less than two weeks before the cardiac MR or a sub-acute onset of symptoms of dyspnea or LV dysfunction or ventricular arrhythmias or an abnormal ECG. Exclusion criteria was a presence of a coronary artery disease or other non-ischemic cardiomyopathies such as HCM, ARVC, sacroid, amyloidosis, tachyzobocardiomyopathy, constructive pericarditis and so on and so forth. Now this is an interesting image we should focus on. The image A shows a faint sub-epicardial scar in the anterior antroceptum in the antrolateral segment and the inferior and the infroceptal segment. For the standard deviation techniques, the ROI is placed in a remote myocardium that is a non-enhanced normal myocardium. This was a lateral wall in this patient. For the full width half maximum, the ROI is placed in the enhanced fibrosis region. If you look carefully into the analysis, the amount of fibrosis is highest in two standard deviation that is significantly higher as compared to three standard deviation or the full width half maximum technique and these three methods have a higher scar as compared to four standard deviation. The amount of fibrosis declines for the around five, six and seven standard deviation. So on a single image there's so much of variability in quantification. When analyzing across the patients, it was mentioned that the greatest amount of LGE was measured with two standard deviation and leased with seven standard deviation technique. When you look into the values, the full width by half maximum technique, which is usually the most reproducible method, seems to be closer to the quantification to three standard deviation. Two standard deviation definitely has a higher amount of scar on an average. When we looked into the image quality parameters in these patients, it was reported that about 80% of these patients had good to excellent quality of their images. So on the results, 98 patients experienced major adverse cardiac events on a follow-up of about five years and association with the base was found with full width half maximum, two standard deviation and three standard deviation techniques with a hazards ratio of 1.05. Presence of the LGE also had an association with MACE and the hazards ratios 1.09. Four, five, six, seven standard deviation methods did not read significant association. But based on my previous discussion, the amount of scar was highest in two, three standard deviation and the full width half maximum technique in these patients. So it wouldn't be very surprising that a higher amount of scar was associated with more amount of adverse events in these group of patients and these values had a significant association. When a multivariable model was used and adjusted for 8 sex BMI and LB ejection fraction, full width half maximum technique, two standard deviation and the presence of LGE were associated with MACE and the three standard deviation technique was not reported. Highest degree of intrarator reproducibility and intraclass correlation was found for full width half maximum method that's already known in the literature. Coming to the discussion in this paper, it was mentioned that different LGE extent quantification methods result in different extent of myocardial fibrosis and that these methods are not interchangeable. The thresholds that use lower standard deviation cutoff may overestimate the extent of LGE. So it's not accurate. As we saw in the paper, there was no manual analysis of the scar. So there was no understanding of what was the accurate amount of scar because we know in patients with myocarditis, there'll be presence of edema as well. There'll be presence of T2 shine through and all those things that can lead to all these semi automatic quantification methods to give different to throw different amounts of scar to radiologists who is reading these images. It was also mentioned that if it's a patient of myocardial infarctions, LGE when is bright, apart from full width half maximum techniques, higher standard deviations are going to be accurate to estimate the amount of scar rather than fight to standard deviation. However, in patients with myocarditis, lower standard deviation methods may be able to capture edema fibrosis and diffuse fain scar that may not be visible in general to the naked eye. Again, it's was mentioned that the manual contouring of the late cadolinium enhancement extent may be less consistent than the semi automatic quantitative methods in sizing the LGE of patients with myocarditis. And at the end, image quality parameters have to be considered with selecting methods for LGE quantification. So to understand what are these image quality parameters that you need to know while you're trying to establish the amount of LGE on cardiac MR. So these include the signal to noise ratio contrast to noise ratio and the signal enhancement percentage. The formulas are pretty simple. You need a source image, a magnitude image. You place your ROI in the air to understand the noise. You place ROI on the remote myocardium and you place a region of interest on the enhanced myocardium to understand what are the image quality parameters and then analyze your image quality. Now, these are my cases where we have tried to identify, analyze fibrosis in different sets of patients, ischemic and non-ischemic. There's a patient with hypertrophic cardiomyopathy. We analyze the image quality to be having a low contrast to noise ratio and low signal enhancement percent. In this patient, five standard deviation was more closer to manual quantification of the scar, full with tough maximum underestimated the scar. This is an example of an ischemic cardiomyopathy patient. One set on the right on the left is having a higher better image quality, higher signal enhancement percent and higher contrast to noise ratio. Images here on the right, they have a lower signal enhancement percentage and the lower contrast to noise ratio. On the semi-quantitative analysis, it was found that if you have a higher or a better image quality, full width by half maximum technique is going to be more accurate and closer to the manual analysis of the scar. If the images are not so high in quantity, the five standard deviation method, as in this example, was able to perform very well and have a better correlation with the manual contouring of the scar and not so much for full width half maximum technique, which underestimated the scar. So to summarize, the five to six standard deviation methods will perform well when the images have low signal enhancement percent or contrast to noise ratio. This analysis may be able to, we will be able to replicate in patients with myocarditis and also able to understand their outcomes related to means. Full width half maximum technique can be used when as it relies on the scar being bright and then can be used to delineate scar accurately in such patients. It can underestimate the scar if you do not consider image quality parameters. It may be inaccurate in case of faint scar. The limitations for all the studies that we have seen in the literature is that a gold standard is lacking. There is no histopathological confirmation to the amount of fibrosis and what the cardiac MR quantification techniques are being able to show us. So our take home message from this exercise is that we need to be cautious when quantifying myocardial scar in any group of patient, whether it's chemic or non-schemic, and the assessment should always be guided on the basis of image quality parameters. Now, based on this discussion, we move forward and look into the study that we presented at the Society of Cardiovascular Magnetic Resonance this year in 2021, where we compared the clinical and the cardiac MR biomarkers in children presenting with acute chest pain and elevated troponins diagnosed as atypical myocarditis in the pre-COVID era, comparing them to post-COVID vaccine-associated myocarditis. It's been known that myocarditis or atypical myocarditis, which is presenting as acute chest pain with elevated troponins in children who were previously asymptomatic, is quite rare. However, recently in the last two years, it has been reported in association, I'm sorry, with the COVID-19 vaccine with a Pfizer or Moderna. The Center for Disease Control and Prevention, this is reviewed on November 9, 2021. It was mentioned that there has been an increased cases of myocarditis and pericarditis in the United States after the mRNA vaccination with Pfizer or Moderna. This was more prevalent in adolescents and young males. This paper in the New England Journal of Medicine reported the incidence of such myocarditis as 2.13 cases per 100,000 people. Highest incidence was amongst male between the age of 16 to 29 years. We aim to compare our clinical biomarkers and cardiac MR imaging features in children with isolated chest pain with elevated troponin, representing atypical myocarditis in the pre-COVID era with those who developed vaccine-associated myocarditis after receiving the COVID vaccine. Now, this was a single center retrospective study. Clinical and baseline, 1.5 Tesla cardiac MR data was acquired within 30 days of symptoms and five months of follow-up was also available. CMR analysis was performed using circle CVI software. In both the groups, the age of the patient did not differ significantly and it was on an average of 15 years. Most of the patients were males. The body surface area was found to be higher in patients with COVID vaccine-associated myocarditis and ECG anomalies and the troponin values did not differ significantly in these patients. The highest troponin values in the atypical myocarditis in the pre-COVID era patients was about 12 nanograms per ml. It was about 9.2 nanograms per ml in the vaccine-associated myocarditis patients. Brain atrialitic peptide representing dilated cardiomyopathy or decompensated heart failure was higher in patients in the pre-COVID era with atypical myocarditis. This difference was statistically significant in between the groups. The image quality of our cohort, majority of the patients had either a low to moderate contrast to noise ratio and signal enhancement percent. On the base of our image quality and on base of a small pilot study, we analyzed the late gadolinium enhancement in these patients using the five standard deviation technique. Coming to our results, the cardiac MR that was available in 21 patients in the atypical pre-COVID myocarditis group was obtained from 2012 to 2019. That was a longer duration. In patients that had a COVID vaccine-associated myocarditis, the data was acquired in like three months. End-astolic volumes were higher in the pre-COVID era patients with myocarditis and the ejection fraction did not differ significantly or the LV ejection fraction did not differ significantly in these patients. Edema was present in all of them. Most of the patient had a normal ejection fraction in both the groups. The characteristic site for late gadolinium enhancement was sub-epicardial in both the groups. Some of the patients also had mid-myocardial to sub-epicardial enhancement. Some of the patients had a characteristic pericardial enhancement. The percent of late gadolinium enhancement or the amount of fibrosis quantified on CMR was higher in patients with a pre-COVID atypical myocarditis group of about 25% and on an average 10% in patients that had a vaccine related myocarditis. Native T1 mapping values were elevated in both the groups and it was higher in the pre-COVID atypical myocarditis group although the difference was not statistically significant. The extracellular volumes were also higher in the pre-COVID atypical myocarditis group and the difference was statistically significant. T2 mapping was available only in the vaccine related myocarditis group and it was higher in these patients. Strain analysis on cardiac MRs also performed and all the strain parameters were abnormal when compared to normal strail assessments on the same scanner with the 150 patients cohort. The abnormal values did not differ significantly in between both the myocarditis groups. Now coming to the cases, so this is an example of a pre-COVID atypical myocarditis patient. This was a 17-year-old male presented to the emergency in the pre-COVID pandemic with acute chest pain, elevated troponins and non-specific ECQ findings. Image A and B is the first acquisition, C and D is the follow-up acquisition. Cardiac MR showed sub-epicardial enhancement in the lateral and the inferior walls that amounted to 22% of fibrosis. The LV ejection fraction was normal. Native T1 values were significantly elevated and the extracellular volume was not so much, only mildly elevated in this patient. Patient was treated with IV neuroglobulins and steroids and there was a significant resolution of the LGE six months later as you see. This is another case but this is a patient who developed post-COVID vaccine associated myocarditis, again a 17-year-old male patient. He presented two days after receiving the COVID vaccine with acute chest pain, elevated troponins and ECG ST elevations. On cardiac MR, the amount of LGE was found to be 7.8%. The pattern of LGE was against sub-epicardial location in the inferior and the lateral walls from base to apex. Strain analysis was also performed. It was abnormal in this patient. Native T1 values was elevated. This was the first acquisition. This is the follow-up acquisition image D, E and F. On the follow-up cardiac MR, this was after three months. There was a near complete resolution of the late gadolinium enhancement and the LV ejection fraction also improved mildly from 51 to 54%. This is another case with a more severe or more significant amount of enhancement after receiving COVID vaccine. This was a 16-year-old male patient. Again presented with chest pain, elevated troponins, ST elevation lateral leads. He received a Pfizer COVID vaccine and he presented three days after receiving the vaccine. On cardiac MR, this sub-epicardial LGE quantification, the LGE was present in the sub-epicardial to mid-myocardial location in the inferior and the infralateral wall. The quantification analysis was 26% for presence of fibrosis. LV ejection fraction was okay. Native T1 values were mildly elevated. ECB was not so much elevated. T2 values were significantly elevated to 64 milliseconds. A follow-up cardiac MR, the lower images are of the follow-up cardiac MR and the LGE did show a decline, which can also be found just on visual assessment. This was four months later. The LV ejection fraction was stable. This is an example of how a strain measurement is performed. You usually perform it on the two-chamber view, four-chamber view, and the short axis view. This two-chamber view is showing you a longitudinal strain. In this patient, the strain analysis was abnormal on the first acquisition and it improved mildly on follow-up. We also analyzed the follow-up data and we found that the LGE was present after a follow-up of about 18 months in the first group and about three months in the second group. LGE was present in about 60% to 70% of the patients. But whenever it was present, it did show a decline in all of them. A quantitative analysis was also available later on, but I have not included in the slides, but I know it did show a decrease in all of them. Ejection fraction was okay in most of the patients on initial examination on follow-up. The coming to the limitation of the study, the cardiac MRs that were acquired in the pre-COVID era were most likely to be limited to patients who had a severe disease with higher late-cadolinium enhancement who were not responding to NSAIDs. Again, we have a small size of the patients and there's a limited follow-up and we need longer follow-up to conclude more on the basis of this study and other previous studies that are present in the literature. We conclude that in patients with post-COVID vaccine-related myocarditis, a low threshold exists for performing cardiac MR because they are less edema, less late-cadolinium enhancement, and less effect on the cardiac size and function. And we concluded that no significant differences in demographics, troponine, and the cardiac MR parameters were present in this pre-COVID atypical myocarditis when compared to the post-COVID vaccine-related myocarditis in the adolescent males. The future prospects include we need a long-term multi-center study to see if there are these smaller elevations in T-22 and the lab markers. The return of the LV ejection fraction and disappearance of LGE in follow-up cases occurred that could suggest a more benign course in children post-COVID vaccine as compared to those who had an atypical myocarditis in the pre-COVID era. We certainly need follow-up cardiac MR for predicting long-term outcomes in any of these groups. Thank you for your attention. I am open to questions. Thank you Dr. Avanti for taking us to an interesting article that was excellent really. No questions currently but I'm sure people can reach out to you if they have any queries. Absolutely. So we have the entire session available for y'all on the Indian Radiologist YouTube channel as well so y'all can go back and review the article again. Also the link for today's article has been shared in the chat box so you can go ahead and please access that. And the detailed question for the Oncoimaging update in April as well as other masterclass events has also been provided in the chat box. If you do have any questions regarding today's article you can reach out to me Dr. Mithusha or Dr. Avanti. There are a couple of positive and praises coming in for you in the chat box. Excellent presentation. So thank you Avanti for making time for us and being here with me today. And yeah feel free to reach out to me, email me on my UW account or my Gmail account. I'm always there if you had any queries and if you need to understand more on the quantification. Dr. Avanti I think if you could leave your email in the chat box. Okay the details for registration for the events is available on the ideologist channel website as well. Before we move on I would once again like to thank our entire team at Indian Radiologist Dr. Patkarsar, Dr. Manisa, Dr. Shalendra Singh and Dr. Jignesh Thakur for giving us this platform. My colleagues Dr. Mithusha Verma, Mamta Ma'am, Dr. Amit Poonkar for always being there. Avanti for joining us today and joining our team of the Radiology Masterclass for the Radiology Journal Club events. Thank you all once again and big thank you to our educational partners, Bayers and Phantom Healthcare. Thank you everyone and we'll see you all next month with another Journal Club. Dr. Amit I think we can have the sponsor videos once more. Thank you. We are Phantom Healthcare, one of the leading third-party dealers of refurbished MRI and city scan machines. We have achieved the highest customer satisfaction rate over the years with our highly experienced and exceptionally qualified leadership. We have become a trustworthy organization in the industry. We have one of the most reliable service and support teams in the industry. Our highly skilled technicians and service staff are present all over the India working 24-7 to serve the best to our customers. Machines have advanced medical imaging applications like Sven, Categorym, Enhanced 3D Delta Flow, Enhanced Inflow IR, Lava Flix, Ideal, Vibrant, Enhanced 3D Velocity and 3D Artificial Spin Labeling. Our flagship products range from 1.5 Tesla to 3 Tesla MRI machines. Our topmost model of GE Sigma 750 MRI is the most advanced application equipment for medical scanning. Various models of MRI machines are available in 8 channels and 16 channels to match suitable clinical functions. Mid-range models in 1.5 Tesla are also available to fulfill basic and low-end imaging requirements. We have successful installations all over the country with satisfied and happy clients. Our warehouse has the largest inventory of MRI parts and upgrades. Our sales and service teams work in coordination for smooth planning and executions. Our strong network of support and service staff is expanded all over India and is always ready to help and serve. Thank you all for patiently listening to us.


Hello and welcome back to The Craft Box. My name's Brent and today we're in episode 71 of the 101 Death Walkthrough. Last episode if you haven't checked it out already, we made it over to the Forum and we read some crystals. Let us talk to Vidore. You surely come from a long line of warriors. He still do nicely. Let us get to work. This is a great day indeed to see this cold forge lit hot once more. Place the coal hearts and the flame sacks within the forge so that it will heat enough for us to make your Drake's armor. Okay, so basically at this point we are trying to make the armor for our Drake that we also hatched last episode, I believe. You place the coal hearts and- That's how to do it! Now ignite the forge and it will begin to heat up- You ignite the forge. It burns brightly and gets very hot. Very hot. That's how to do it. Okay, great England there. Yeah, so we're basically making armor. I'm proud to see that forge burning once more. Careful not to touch it. It'll burn you. Now that the forge is burning bright, you'll need metal to make the armor with. Unfortunately, all of the metal we had here was stolen by the Draconians. They took our metal, tried to make armor after our fashion, but it is our poor imitation. You must go defeat some Draconians and take from them their armor so that we might melt it down and forge new Drake armor. Okay, there's three of theirs. I will be back once I have defeated these three Draconians, hopefully three. Could be more. Okay, I am back. From the looks of this armor, you gave those Draconians quite the thrashing. Good work. Yay. I've examined the inferior armor that the Draconians made, and I see why it isn't as tough as proper Drake armor. They forgot to use brimstone in the process of armor forging. As a result, the armor isn't resistant to fire. I think you know what comes next. I need you to go and find us some brimstone. Don't worry, young wizard. You don't have to defeat anyone. Just gather it there, it may have collected on the walls or ground. Okay, let us collect some brimstone, which is all over the place.  That is very scary. Don't even know what that dialogue was in fact, but you know what, that doesn't matter because we are just going to find some brimstone. Only three, which isn't too many. There's not one here. What are these? Blighted fire free router. Weird things. Weird, weird, weird. You scraped some brimstone off the floor. Why does that not have the dialogue thing? Game, what are you doing? Why are you broken? This game is broken or disconfirmed. There we go. Okay, brimstone is collected. Yes, good job Brent, you did well. Congrats. Thanks team, thanks guys. Much appreciated. Okay, let us head on back to him. Can we go down here? Yeah we can. We'll go down here, it's easy.  They're almost ready. Now if we can smelt the base metal we will use to forge your Drake's armor. Go ahead and add the brimstone and those pieces of Braconian armor to the board. Be careful not to splash yourself with any molten metal. It will leave a nasty burn. Okay, well it's gone smutless. This is great. Look at this. Here we go. Carefully you add the pieces of Draconian armor and the brimstone to the forge. The metal begins to melt. Okay, let's go back to Vidor. I'm actually really excited. You're doing well. I didn't know better. I think you were a blacksmith, not a wizard. Did he say F? Did he say F? Weird. I will now forge the armor from the elements you have provided. This armor will be strong and will protect your Drake from harm. It is best that you leave this place while I work. As the secrets of Drake's smithing cannot be shared, there is one last service you can perform for me. The helmet must be lined with the scales of a Father Drake. The Draconians speak fearfully about Father Drake holding out in the lowest reaches of the dungeon. You must go there at once. There are many Draconians who will bar the way. When you reach the Father Drake, ask him for his loose scales to make a new set of Drake armor. He should give you them without pause. Okay, seems like this is the last gauntlet. I didn't know if I said this at the start, but this is the second last episode. The next episode is the last episode of Dragon's Fire, which is crazy. This is the last gauntlet, I believe, which is great. Okay, don't you dare do that. That would be bad. Um, yeah, let us hit on over to death. Ugh, God. Don't say we need to fight death people. That would be bad. Oh, God, what are they doing? Jesus. Jesus, man, what are they doing? Why you do, fam? Why you doing? Can use that Deliberta. Oh, well, man. Oh, well, it's fine. We'll just run all the way over there. It's fine. I don't even know where we're going, to be honest. I'm going over this way. Nope, we're going over this way. Here we go! And here... You're about to enter a dungeon. 50... 30 minutes. Oh my gosh. Okay, let's head on and then... Okay. Let's do this. Oh, easy battle to start with. Just a fangtooth lava spinner. Well, we'll do a couple of levels just because we haven't actually done any fighting in this whole episode. I mean, this game is basically just fight mobs. So, I mean, if you don't fight anything, is it really possible to walk through? Nope. So yeah, let us do a couple of these. Probably two or three. Depends how long they take. We'll probably just go straight for a wraith when we can. Hopefully we have one. We do have one.  Okay, we will pass. Okay, and what are we up to now? We are up to this, so we will do another pass. We didn't get any power flips, which is slightly annoying. Um, wraith. There we go. There we go. Perfect. Amazing. Sweet. And we'll do this one as well. These guys aren't too hard. I don't think. Hopefully not. Are they hard? Let's see how much I don't actually think we've fought any of these guys. What are they? 1,100. Okay, they're not too bad. We'll do the same as last time then. And then I think after this battle we will probably not do anything else just because... It's kind of just the same thing. Okay, um, let's do this. Okay, here we go. And a nice wee wraith. Let's do this. Did he die? Did he have 1,105? He may not have died. He didn't die. That's awkward. That is awkward. Uh-oh. We need to one-hit them. Hopefully I didn't discard too many one-hits. Um, I mean we could always vampire as fine. Ah, that's not good. That ain't good. Uh-oh. Uh-oh. This could be bad. Okay. Hit me. Okay. Um, we're going to discard you. Um, in fact we might not know what we're just going to draw. Oh, there's a wraith. We will just cut a vampire. Don't need to. Might help. Oh well. Oh well, that's fine. Okay, he's dead. He dead, man. He dead. He very dead. Whoa, he dead. And a weakness, of course. Thank you for that. Nice wee weakness. We will now do a faint. Just because he weakness, mate. Um, and hopefully we will play it again. That's even better. And wraith, hopefully we kill. We've got a weakness. We've got a blade. We've got a blade and we've got a faint. Hopefully this kills. Hopefully. Never know. The game may hate me. We'll find out in just a sec. Does the game hate me? Does the game hate me? Does the game hate me? The game does not hate me. That is good. There we go. Perfect. Okay, um, I'll be back after I've finished the rest of these battles. Okay, I made it to the Father Drake. You fought bravely to have reached me in this place. Many draconians stood between you wish for my scales. For a new suit of Drake armor. I am most pleased to give these to you. Ride with glory and honor.  More than you need. Mm-hmm. Let us head back down to Vidor. Um, that wasn't too long. I think it was two battles or one battle? It wasn't, well, I think it was like one battle or two battles. We did most of it on camera, which is good. Um, so yeah, don't worry about that, man. Um, what we are gonna do is we are gonna do... the teleporter because teleporters are fantastic and it's right over there, so why not? Um, yep. Let us teleport over to him. And head back to Vidor. Hello. That's plenty. The Father Drake must have liked you. You have given you so many. Let me see here. He attaches the Father Drake scales inside the helmet of the Drake armor. I'm finished now. This is the finest suit of Drake armor I have ever made. The armor is forged. No armor has had such a story of courage before it was even formed. Take it now to the Mother Drake in the hatchery so that she might armor the new Drake in such fine protection. Okay, um, back to the Drake hatchery. Yay, perfect. We lift them up. Thank you, past Brent. Um, okay, let us go back to the Mother. Mother. Load, please. Load. We are right at the Mother. The armor. Is it ready now? You give the Mother Drake the armor. She looks at it appreciatively. This is the finest suit of Drake armor I have yet seen. It is only fitting for so great a ta- The newborn Drake has been made ready for you now. There is one launching pad left in the academy. And once armored, he will take wing and meet you there. Go and speak with Ashley, the firetree. She will provide the last bit of guidance. Good luck, young dragonrider. All our hopes go with you. Okay, let's go and head over to Ashley. And, um, yeah, we're about to... I can't... I actually can't believe that next episode will be the end of Dragonspire. We've defeated Melastir. Like, I can't... I just can't believe that. Like, it's... Oh my god, it was like just the day we were in Mushu. Like, whoa. She's kind of cool. Okay. Let's go and talk to Ashley. Oh, he's already there. Hello. Dun-dun-dun-dun-dun-dun-dun-dun. Whoo-hoo-hoo-hoo-hoo. Duh-dune-dune-dun-dun-dun-dun-dun. Hello, Ashley. It's unbelievable. A new Drake has arrived at the last landing platform. I'm so excited. excited are you ready to face Malistair all that's left to do is to go to the landing platform and ride your drake up to the entrance of the great volcano if you have friends you can summon to aid you you will need them once there you can make your way up to the headmaster's office Malister should be there see you coming so you will need to be on guard I'm so afraid I can't believe it but a chill just ran down my branches go and face Malistair be the hero you've shown us you are okay they say summon friends but what happens if you don't have any that's been unlucky didn't think about that one did they nope let's go and use the young dreaded bit dredel break yep dredel break that's great England young battle drake hello let's go the drake mothers tell me how much you've done to help me I owe you a life debt for that service though I can't leave dragon spire I will always be your friend and ally unfortunately time is short you have much to do I will take you where you must go pop on my back okay this is a really cool thing so we're gonna watch it you mount the drake with a leathery snap it spreads its wings and takes flight so cool just going up the volcano it's actually such a really good oh I love this so much it's so good it's so good amazing oh hello there we are nope okay here you are all of our hopes go with you we're in the Great Spire we are in the Great Spire we are up the top we are up the top up so yeah basically next episode we're just gonna go full force and defeat Malistair so thank you for watching remember to leave a like and subscribe and if you've already subscribed press the little bell so you know exactly when I post the next episode so yeah we're just I'm gonna try to find the thing the thingy my Bob do Hicka what's it that is good and that is called the stone rose but I can't quite remember off the top of my head where it is I know it's somewhere around here we're gonna find it we're not ending the episode until we do actually might because I don't know where it is maybe it's at this front let's go find it oh there it is hello found you okay so thank you for watching remember to leave a like and subscribe if you've already subscribed press the little bell so you know exactly when I post another video and remember craft outside the box


My name is Lindsay Lumby. I'm from P&G. I've been studying at the Australian National University in Canberra and I've been doing a degree in Development Studies. The best thing about studying at the Australian National University is being able to study amongst the world's best experts in the field of development and also getting to meet people from varied cultures. Studying at the Australian National University helped me build a lot of networks, especially in my field in development. I've had the opportunity to become a member to a particular organization here, which actually built my links back into the development sector in Papua, New Guinea. The main motivation for me coming here and studying in Australia was the fact that I get to study amongst some of the world's best experts in the field of development, especially in the Pacific region, and being able to study amongst them would give me that opportunity to take back home that experience and share it amongst my own people. Having an Australian degree on my resume back home is very sensual. It's very, very important for me. It gives me the opportunity to actually get into some of the world's largest development agencies that are working in Papua, New Guinea and be able to contribute effectively into P&G's development. Overall, my experiences of studying in Australia has given me the opportunity to see the world from a wider perspective, especially in terms of development back in my own country. I would definitely recommend to my other P&G friends to come and study here basically because of the experience. Coming to Australia and studying in some of the world-class facilities here gives you the opportunity to see the world at the wider perspective compared to studying just in your own country.


Welcome back everyone. We're now going to look at IBM and GitLab working together use case number two This is where GitLab CICD is going to be driving the pipeline of the deployment To IBM cloud. Okay. Give a little context here before we begin So we have a GitLab project. This is a Node.js project Just so you know IBM cloud was recently was called BlueMix So it's recently remained for the next IBM cloud. So you will see no mix especially all within IBM cloud Here's our CICD the GitLab We'll actually using GitLab we both they Apple be sitting the Node.js app will be sitting in GitLab. We'll build it We'll have the next stage where we'll go through a collection of concurrent tasks And I will run a Java doc for some documentation and then when we deploy we'll deploy it to the IBM cloud So let's look at this live Here's that BlueMix Node.js project. We're talking about and you can see here We have pipeline. Let's look at our pipeline quickly To do the build the concurrent test we're looking at from functional to SAS some basic code coverage documentation staging eventually to IBM cloud and we'll look at this in much more detail Just to give you a little idea how this was done using Travis CI open source DPL in that you can see here There's a bunch of cloud providers supported. We are just focused on one of these another one would be something like OpenShift So and let's go see how this is done There's a manifest the on the file that we'll be using this will define a domain my domain on IBM cloud This will be the app the name will call it actually is tested called to EST within GitLab as we build it but as we move it to IBM cloud we'll rename it to this name and put it on this host My domain my blue mix that met here's the GitLab that CI-CI YAML file You can see here's what we built the test that Node.js file Then here's where we deploy it using Travis CI DPL and all of my IBM cloud credentials and we'll actually walk through that in detail But for now, let's go look at the app itself. So, you know what it is before and after here It is sitting in my VM cloud dashboard. I got it running and We can actually look at the app We can see it's got this bright red background in this nice calm cool and great Lettering we're gonna flip that we'll have a nice great background and then Bright red text house that Okay Let's go make some changes here that I Want to know the web IDE? We have a nice little feature now command P. I can look at my style sheets pretty quickly try to it And we just want to change our background from this red to a nice gray. Let's do that And let's change our Little color right out here to text if you read fair enough. We'll do a commit We can stage now multiple files and one commit. Let's commit. I can go in here. Just make it that color change And we'll just go to for a master reality. We've done this in a You know using merge request, but for demo purposes, I'll just commit that right to branch Once we do that what's gonna happen is They get lab CID CD will take precedence here and start working on our pipeline And you'll see that that's not one This will take a few minutes and then we'll come back so you can see the build is Almost finished with the staging phase here. I'm gonna walk through some of this little more detail We'll drive into the actual build here And you can see we're pulling down a doctor in me to installing And then to install the actual energy s app and here you can see where we've installed it the absence test and test was successful Next we're doing some functional testing some statistics analysis sass some simple coverage And over here, we're looking at just using simple Java diaries of documentation. Well, this is all really nice concurrent Running together you'll save some time, but where you really save time is more in the collaborative Capabilities of that all working together in that one merger process. I showed you earlier in the I2P demo Let's drop look in the staging now. This is where we're going in and we're actually Using DPL Travis CI. Here's my creds for IBM cloud so I can get it and you can see this is where I actually logged in I can authenticate in You can see here later on a little further down it's going to Upload and now we're going to use this as the app name that test the Node.js and I'll be pushed into Everybody over here at IBM cloud and you can see here the app will start it and it looks like it succeeded And we now have an app sitting there ready for us to look at so let's do that So the type line was done. It was completed at all past and We can now go to IBM cloud and let's go to our dashboard Yeah, we can see there's our uc2 Node.js app and we can go visit that and what we should see now is a nice gray background of the red So we did a push it was completed and that concludes our Get lab and IBM IBM cloud working together. This was use case number two. We'll get that CICD was used through IBM cloud


Welcome to the Argos Toy Unboxing. Today we're looking at the new Nerf Modular System. Open the box and you can see the slick blaster with all of its accessories. There's a sight, a scope, a drop grip attached, an extender barrel, stock and 10 darts. You can build 30 different blaster combinations right out of the box. In addition, there are 4 different upgrade kits available so you can now build over a thousand different blaster combinations. You can dominate the battlefield with a long range upgrade kit with a distance scope for precision targeting, a folding bipod to steady your long shots and a long barrel to increase your distance accuracy. If you're into undercover operations, you need the Stealth Ops upgrade kit. This kit includes a red dot sight and a proximity barrel for precision targeting and a pivot grip for a steadier shot. The Strike and Defend upgrade kit is perfect for battle, including a blaster stock to steady your shot and a blast shield for extra defense on the battlefield. And last but not least is the Flip Clip upgrade kit. With this kit, you can fire a fully loaded 24 dart round without reloading. Serious Nerf warriors need plenty of ammo and speed. This Flip Clip is Nerf's highest capacity clip available yet. We hope you've loved this Argos unboxing with the Nerf Modular System and upgrade kits, which allow you to build your ultimate blaster with over a thousand different combinations. We know you're just desperate to get started. Ready? Aim. Fire.