Dear students, in this module, I'll be summarizing the entire scope of this course for you. So to begin with, we looked at the definitions of bioinformatics. So briefly, bioinformatics is the science of managing, organizing, obtaining, analyzing, and processing biological data. The data can be from the experiments or from the instruments. Secondly, we looked at the need for bioinformatics in the modern day. The need for bioinformatics is underlined by the fact that every day we're getting better and better instrumentation. So more and more data is being produced by these next generation instruments, such as the next generation sequencers or mass spectrometers. Therefore, there is a need to do more bioinformatics in order to manage the data that is reported. Within bioinformatics, several areas exist, such as genomics, proteomics, systems biology, personalized medicine, and so on. So we touched on genomics, proteomics, and structural modeling in this course. Some of the interesting angles to bioinformatics included it being an interdisciplinary science. So bioinformatics involves computer science, mathematics, chemistry, biology, and several other disciplines. So bioinformatics lies at the crossroads of each of these disciplines. Of course, as I just mentioned, the requirement produced by the next generation instruments in the form of data manipulation and processing has created a huge demand for bioinformatics. In this course, we specifically focused on three different areas within bioinformatics. So the first one was to compare sequences. So this involves sequence alignment, pairwise sequence alignment, multiple sequence alignment, scoring matrices, and the algorithms, such as dynamic programming. Next, we looked at the comparison of structures. So how structures are formed and how they can be compared. And lastly, we looked at structure prediction using homology, modeling. For each one of these topics, we had three specific interests. The first one was the algorithms that are there for addressing the problem. So we only looked at very simple seminal algorithms for each of these problems. Next, we looked at the databases that are there, which contain the data from each one of these areas in bioinformatics. And lastly, the online tools that are available if you want to quickly perform these tasks. So we studied the basic algorithms for each topic and we try to see how the process works. Of course, now with the modern day algorithms, there are newer versions, faster computing resources, and you can perform the same task in a much shorter time. You might be interested in developing even newer algorithms yourself as well. So with the evolution and growth of bioinformatics, newer algorithms are available, faster computers are available, and this is a rapidly growing field.


Hi everybody it's Sam at Mixed Up Wrath thank you for watching my tutorial today I'm going to be showing you how to make this really sweet swinging card now obviously when I lie it down like this for the camera it is not going to swing so I'm going to edit in a quick video now of me swinging this really cute little sloth. It gives you an idea of how it works and you can see there it all falls flat and I've done it so that it's kind of got little feet because I just thought it was a nice little touch but that goes down and yeah it's just it's just so fun I mean you can kind of see there it just flows really freely and then on the back I've used another one of the images which I'm going to show you and you've got all that space there to be able to you know stump and write your message. It's six by six size you could do this at any size to be fair. I probably know because when it stands up it's fine but I might stick down a few of the ends of the green kind of you know leaves and stuff on the back there just so they don't catch but otherwise it's really good.  Okay so this is the stamps that I use it's by creative stamps and it's the sweet sloths and you've got some nice little sentiments there as well. Nice kind of just outline stamps so they're really plain but that makes them perfect for coloring. I don't like too much kind of black detail and yeah just really enjoyed those ones and I will show you I'll show you a quick little video in a moment of me coloring them but also it comes with the well it doesn't come with it but part of the collection there's some swans and there's these lovely otters and if you've you know subscribed to me for a while you would have seen me use the otters in the water card so if you're new to the channel and you're thinking oh a water card it's really fun and I use actual water in the card click up here and you'll be able to go see how I made that card and yeah it's very very fun and again really really cute lovely images. Then I've just got some circle dyes I'm just using the plain scissor ones these are at the bottom and then just I've gone ahead and die cut all these bits and I've done all the coloring but like I said I'll link in the video but I just use the fern border the bright rosa one but any kind of foliage and things like that but I do go to them a lot because I've just got a nice little mix and I've done two colors so I've got the light and the dark green there so I've done them and then yeah you can see all of my stamped images there so just bring them up. Lovely sweet. I mean you can have them obviously that way he doesn't have to always be upside down but they are very very cute so I'll share the video of me coloring this all in now and to do this on a six by six but once you see how I do it it's very easy to do it on any kind of top folding size card that you want so this is a piece of 12 by 6 and along the 12 inch side you just want to score it six inches and fold in half if you've already got some colored pre-made cards then perfect this is I think 250 but by the time we put the mats and layers on it does become very strong then I have got a piece of well I've got two pieces of white one for the back one for the front it's optional if you want to do the front you might just want to keep you know a colored piece it's up to you again once you see what I do but these are five and three quarters squared and then I've got this piece which is I use this in a card that I shared not too long ago and it's that sky background and I just thought it worked quite well with this so it's the other half of the 12 by 12 sheets I've used one in there and then I've got this one left it's five and seven eighths of an inch because you just want to come in a little bit by five and three quarters but I think that's because it was scrap but you can do five and seven eighths squared will be fine and that's going to go in our background and then this is for the stand I mean it is an optional piece but I think it does help because you've got a tiny little bit of bulk inside here with the mechanism it does kind of want to push the card out so by having that stand it it stops it you know is it's a stopper it stops that card spreading out any further than it needs to so I do recommend it but you know play around see what you think so this is a piece of three by six and along the three inch side you just want to score at half an inch one and a half and two and half it's about say two and three quarters there but it's not say that again half an inch one and a half and two and a half then I've got these pieces here so this is for the little kind of mechanism inside there's two parts to it ish but this one I will show you at the end because you stick it to your stamped image and everybody's is going to be different so the size might vary but this piece you want to keep at half an inch by two and along the two inch side you just want to score at a quarter of an inch and one inch and one and three quarters okay and then just have another piece of white card like a strip for the minute like I said mine's half an inch but I probably will trim that a little bit so that's all the scoring and everything done there okay so first of all we can open up the card and stick our background piece so whatever it is whatever your theme that you're doing and I want mine to be like so I'm going to stick that one on the back and again I'm using my Kalau glue and like I said that will just add that strength to the card I love how it all folds flat and it's easy for someone to understand when they take out the envelope they don't have to do too much with it just kind of open it up so that's going to go inside there okay with this PC you're just going to fold and burnish all the score lines where I was just looking for my other bone folder and then I dropped it and it's down the back of my desk so that's why I'm using that one which I still love it's my bamboo one so you've got something like that and what you're going to do is we're going to once we die cut the front but you're going to stick that in there and then that one there I've done green on this one because it ties in with the green and the jungle kind of theme that one was white which is still fine but probably now in hindsight I probably would have done that green as well but I'm still very happy with that card and then these ones we will stick and die cut in a moment so next you want to grab your circle dies and we're going to cut the aperture the window in the front okay so from this set I'm using the two largest ones okay so I'll give you a rough measurement of mine and you just want to get something you know as close to that really you might want to do square you might want to do a decorative edged one but if you are doing circles mines four and a quarter and this one is three and three quarters so out of those two the three and three quarter one is the one you want to die cut first this one we actually use just to create this ring detail so if you do want to add that in we'll do that in a moment but make sure so I've just stuck that there so you're going to die cut this the front one so just fold it out there and then I'm just going to use some washi tape you want to get this right in the middle unless you want to do something up here don't go too close to the edges you know you want to give yourself a little bit of cardstock so it keeps its stability because otherwise it will start to kind of um well just probably bend so I'm going to go about there and with any kind of washi tapes and even the purple tapes I still find they could lift cardstock so I always stick it on to the the cardstock that I don't want you know I mean if it comes off perfect I'll keep it in my scraps but I'd rather it rip this piece than my actual card so I'm just going to run that through my die machine okay so now I can just take that one off and then what we're going to do is with one of those white pieces so these are your five and three quarters squared we're going to stick one of these well eventually we're going to stick it over the front there with a nice even border so if you flip it over actually I'll do it this way put it on the inside so you've got a nice even border and fold it down okay and then just draw around that circle like so do you make sure get it really lined up get that border perfect okay like I said fold it over I can see my pencil line there and then again with that smaller one line it back up again and just run that through your die machine okay and this is only you only have to do that if you want to have this white piece and a border you know I like a border so I'm just going to take off some of those little feathery bits I find some of my dies mainly actually that's the six one that just leaves like a little there we go come straight off but I just need to get rid of exit box me so now I can just line that back up have to move it around might have been that way there it is you'll find it fit so that's because my circle is probably not bang in the middle so just move it around until you get it back where you were but now you can see I've got that nice even border and it covers my circle so I'm just going to stick that one down and then we can cut our frame and I've got this piece of green card which is the same green that I've used for some of these sprigs here so it just kind of ties everything together and it works well with the color that I've used as well but I'm going to grab the larger one and that one and some washi tape which I've got here and you want to make a little ring again completely optional but it's just these little details that I do like to add to my card so just sit the smaller one inside making sure you've got a nice even gap you know that that kind of ring there that green ring that you can see is the same all the way around or as close as and again just run that through your die machine okay and then you will have this piece and that's what you want these are obviously great keep these because you can use them for toppers and other projects but now with that one I am going to grab my glue and just stick it and if you have got any pink I've got a tiny little bit of pink showing there this will cover that up so um and plus by the time I add all my little um you know flowers and leaves and things you know it's always good when you've got your kind of stamps and embellishments because if there are any areas and you think oh I need to cover that um I said this before in tutorials but it's funny when my mum's made a card and she shows me and I see like a rogue embellishment and I say to her was that one needed she goes yeah it's covering a bit of glue or a pen mark or something it's just it's funny so um we all do it again just take a little bit of that there it is just see little bits there they bug me okay so now the card is ready so I've got that kind of sky cloudy background there and then we've got all this plane but it's I mean you're going to see how it's all going to come together it's going to look so pretty so what I would suggest now is you want to start placing these pieces your background details so if you're going to do any of that I mean you might have like a countryside background you might have some mountains you might have some waves so whatever it is that you want to do and start laying out your pieces and I'm also just thinking it might be worthwhile sticking one part of this in first um just on the back there so I'm going to grab I mean you can sit this down first if you want and then cut this so it completely covers that if you don't want to have any of the frame but you don't really see this when it's inside so I'm not too worried I'm just gonna just spread that glue all out there and then you just want to make sure it's up the right way so you want this edge here to line up with the bottom of the card and it's exactly six inches in width like so let's just think it's a nice little bit of detail I mean you don't have to do that like that you know there's other ways to add little kind of hinges or stoppers whatever you want to call it and I'm just going to burnish that down a minute just so it's kind of out my way but now I can start this is the area that I want to start to create these pieces coming in and just kind of you know do different colors I alternate them I don't want it to look perfect but I don't want it to I don't want to have all the cream like on one side for example all the lighter color on one side you know and some of these are pull off the edges because I don't need them that long but I just want it to look like it's all kind of creeping in on the sloth you know it's a real lush overgrown part of the forest and and just kind of place it all down and once you're happy where it is then just tack it down with a little bit glue you don't need lots you don't want glue kind of oozing out everywhere but just there's a few bits like I said on that one there's the odd leaf that's kind of catching so I just need to make sure that's stuck down because you don't want anything to interfere with the the swing of whatever it is that you've got but um you can see there what I'm doing I'm going to have that one down the bottom here and then I'll have maybe that one there I'll have that one there and then this one there so I'm going to keep them all within that blue he's going to be right in the center of that piece there and when the card obviously then stops he will cover right there in the middle and just you know whatever it is you're having hanging just kind of place you know roughly as well and you can bring this down you know you can see how it's all going to kind of look and then we build up with all these lovely pieces all on the front there and he's going on the back so I used him on that card so I'm using him on the front of this one and he's going to go on the back for some detail there so I'm going to go and get this all stuck down okay so that's all stuck down but I've got little bits that lift so I still want a tiny little bit of dimension there next you want this piece here so you would have scored those three score lines you want to fold these ones so they are mountains and then that middle one as a valley and this whole middle section here we're going to stick together okay so just put some glue on one side and then fold it up so you have these two flaps okay and then you want to might be better actually to put a hole in first now I am using my cropper dial and I'm using the smaller hole if you don't have this you don't want to well I guess actually you could do the larger hole if anything maybe that might still work quite well because it will let the brad really kind of move freely but the small one's still enough room for the brad to move freely as well so you will be okay with the normal size hole punch there actually okay but I am going to if anybody does have the cropper dial I'll just punch this you can see where I've just done that so towards the bottom but make sure you leave kind of the same gap there that you've got on the sides okay you just see where I've put that all right next we're going to add some glue onto these two here and the middle part here needs to line up with the middle score line that's just come under okay so one half is going to stick on this side and one half is going to stick on this side and you want it to be bang in the middle so it might be worth mild because you can cover this straight up grab a pencil and just mark that's at three inches so I'm just going to put a pencil mark there and then I can stick this right over because you want whatever it is hanging to hang obviously right in the center of your circle so make sure it's stuck on one on both sides and as you fold it down push it up into there and then fold that down you can lift it back up again in a minute you just want it to you want to get it in place and I can feel where it is yeah he's going to hang yeah here hang fine you just don't want to end up finding it hanging kind of really far over to one side but now if I open that up can you see where that's stuck make sure it's all glued together as well it should be able to open and close and that piece is there so mine still keeps on sticking in the middle because I need didn't let that dry enough but it's it's fine where it is so I'm just going to close that up for the minute just rest that on top and just let that dry okay this is now secure and you want to do another hole at the end of this piece okay then you want to grab a brad so I am using some smaller ones that I've got here you see that I mean you're not going to see this it doesn't really matter the color but I am also going to cut them just not in half but just cut a little bit off so you just haven't got the tails as long you can just see there just cut them short a little bit and then pop them through pop them pop it through that one and then pop this one on there but when you open up the split pin part you don't want to really push them down tight on this you just want to kind of bend them over I find a pokey tool works with this but if you just push the pokey tool down through the middle it will split them apart and just kind of just just gently see already that's a little bit too tight you don't want to what you might find worth doing is put like a bone folder in there and then fold it and fold it onto the bone folder and then remove the bone folder so you've got a gap and can you see how freely that now moves okay so you can see there so maybe put yeah put like that underneath or something you know just something that gives it a little bit of a gap once you take it away if I just put my ruler there and then I can push down on it it will still all close and flat you know and go in the envelope you see there but now if I was to bring that up again you're not it's only when it stands upright that that completely moves you can just about see it there freely and that's what you want and once we add a bit of weight so this here will weigh it down and also the decoration that I put on there but we will trim this okay now we can stick this piece down because you need it to be all together now really to attach everything and but do make sure that that swings nice and freely before you stick this down because it'd be quite fiddly to get into once it's together so now I'm just going to line that one up like so just hold that there for a minute okay so now I want to get my cute sloth and I want him so that's the middle there I want him to be right in the middle of this circle so I need to trim that bit off there just so it doesn't hang out the bottom and then I'm going to add glue there and then just have him kind of like and then this bit here I'm going to cover with the flowers and the vines because you can see here you just see a little bit there because he was a bit taller like longer but there's a little bit there so it carries on into the image okay so that's what I wanted to to do so next it is now all that decoration he's going to go on the back so we don't need to worry about him but I'm just going to build up a cluster down here and a cluster up here kind of had that one to start there it I cut all these on my scanner cup and that one obviously I didn't see because I didn't look in great detail but it missed that bit cut that chunk off which is amongst here somewhere but I'm just going to start building little clusters and I find my hot glue worked best because it was just quick and just see now I'm just place that one down there and look at these I don't stick everything down because I like to feed things underneath so I keep you know like that's all free it's just the glue there because I like to slot things under so I'm gonna get all that done I'll put this on high speed okay so that is everything stuck down I'm going to finish it with some little embellishments I've got really tiny ones I also went ahead you would have seen me just stick the back down there as well I didn't want to waste any of those little you know the leaves and the flowers there so I thought I'd pop them on the back as well but like I said I can you know stamp that it's still flat enough for me to stamp it or I've got some sentiments I can stick on there as well but it's easy to write on but he does really again can you kind of see you can kind of see him rocking there but like I said if I tilt it back too far then it just won't so yeah finish it with embellishments and a sentiment okay so for the sentiment usually I do this before but because I'm doing a little bit of heat embossing I thought I'd keep it in so I've got a bit of black cardstock here so I'm just going to pop down the bottom here I've got my anti-static powder here you just want to cover that all right don't worry if it dulls the black cardstock you can sort that out afterwards but really make sure that that is covered and you've got you know no greasy marks or sticky fingers or anything like that on it so on that one there I said let's hang out and then on the back I might put as it's your birthday or on your birthday this one here I'm going to have relax on your birthday so I'm going to take that one and that one and just kind of position these if you're ever working with new stamps I always write rub them on my hand and it just gets off any residue you know or give them a wash warm soapy water that might come from the factory I've got so many bits glue I've got all sorts of all the alcohol marker pen on me and everything what I'm going to do is just stick the relax down separately I'm going to stamp this first see where it is and then I can line that one up so because I'm going to use VersaMark on black cardstock you'll be able to see it really well so I'm just going to pick that one up I'm not too worried if it's not straight at the minute because I'm going to trim it a little bit on my trimmer just ink that one up so I can see that perfectly so take that one off and then I can bring in the relax I can get that just so it's got a nice kind of gap the same as everything else keep it nice and straight it might be a little wonky there I think we're okay hey ho don't mind if it's a little bit crooked no I think I think we're all right I'm happy with that so then I have got to use this little bit of scrap card here and I'm using the well in bottom powder and it's the opaque bright white and it's super fine I love this one for whenever I do any sentiments on black cardstock because it just route back it's just lovely it's just a like I said that real crisp white color so what you want to do with this is make sure just tap the back and just brush off any got a massive brush here let me get my smaller one I want to make sure you just get rid of all the little extra bits there all the strays I have a video on how to get perfect embossing heat embossing so I'll link that one because it's a quite a common question that people ask me and then whenever I heat emboss black I tend to heat from the underside up because it won't blow any loose little pieces and you know last thing you want is a ton of white speckles you know sometimes it looks good if you're looking for that effect but if it's not what you want it can be quite frustrating but now I'm happy with that I've got nothing anywhere where it shouldn't be with your heat gun make sure it gets very hot first leave it just go in for about 30 seconds and then heat set it okay so there's my really nice embossed or heat embossed sentiment um what I do is it obviously go underneath and then give it a blast on the front once it's all taken as well but it's warped you can see there but I run it through my dye machine so I tend to put it with a bit of paper over there so you don't get any kind of impression but run that through so you'll see it just becomes a lot flatter once you put something to um you know adhere it to our card with as well that will keep it all flat so now I just want to trim that down a little bit okay I'm happy with that and then I'm just going to trim a couple of strips of some foam and then just stick that on the back and then I'm going to stick this the same as before kind of no it's going to have to go down a little bit further stick this one here there we go relax on your birthday look and then get rid of those I'm just going to pull out it was those ones that I used and I'm just going to stick them all into the centers of the flowers it just gave it a little bit of shine again completely optional but I just use the yellow on the yellow and the pink on the pink and so on I've got some orange there as well so I'm going to go and do that quickly okay so there's that one finished it looks absolutely gorgeous so relax on your birthday and let's hang out I just think they are stunning stunning cards and I love these images so I hope it's inspired you you can have anything hanging here you know you could have some flowers hanging you could have you know make it into a swing there's just all kinds of things that you can do with this so just have a look at your stamps you know and have some fun with it because I really enjoyed this and I love the little addition on the back there as well so I hope it's inspired you I hope you've enjoyed it as always please give me a thumbs up if you have and consider subscribing so you get to see more fun tutorials thanks for watching bye


Hello everyone, my name is Jaime, I'm part of the under 18 as well. Today I'm going to present to you program indicators and legends. For this session we are assuming that you already know program indicators and you have, you know how to create them and have played with them. This is a short presentation. Okay. It will be like five slides, but then I will do a demo. Very similar to the exercise that you have to do. And later, we will give you 15 minutes to do the exercise. Remember, you don't have to finish it today. I think you have more time until next Wednesday, if I'm not wrong. So yeah, let's start. Program indicators in the Android app live in the domain of the track identity instance. Okay. So they are calculated with the, with the data from the day enrollment. So it doesn't make sense for us cohorts group indicators. None of that. Okay. So where can you see the program indicators in the app in the track entities and instant dashboard. When you go to the, your TI, there is a bottom bar, and you will see in the bottom bar, bottom similar to, to this one with the red circle. And if you click there, you will see right here on top, the indicators. And what is quite important that you need to know is that when you are. If you want to display and show your indicators in the Android app. When you are creating them on the server, you need to mark this option. This plain form. If you don't market the indicate you will not see the indicator. Okay. So I will show you later in the demo. And I will go step by step. What are we supporting and what not. So aggregation types are not supported in the, in the context of the TI only the last value. When it comes to that elements and constant. We support all of them and for variables, only the ones that you see in the right image. You can also find this in the documentation. But these are the ones that we support at the moment. For the two functions, we support all of them except relationship town. And analytics periods boundary, we do not support them as they apply to multiple TI and we're talking about the context of a specific TI. So when it comes to legends, well, legends are very useful because you can show them together with the indicators. Let's say, for example, you have an indicator risk patient, and you have like a high risk, medium risk and low risk. And you want to show red color for higher high risk, you want to show yellow color for medium risk and green color for low risk. And you want to show it with a legend and an indicator. There are a couple of things, important things about the legends. When it comes to boundaries and stuff like that, but I will explain it to you specifically later during the demo. So yeah, let me. So this is for now. So I'm going to create an indicator. Okay, and I'm going to go step by step. Okay, can you see this. So in your exercise, don't worry about the details because we will, I will give it to you later, but you will have to log in with your admin account. And then you will have to go to maintenance in indicator section, and you will need to click right here on the top button. So you can create an indicator. I have already created mine. Let's explore it. So the first thing, when you're creating an indicator, again, we are assuming that you know this but just to give you a quick explanation. If you have three sections, you need to fill the indicator details on the expression on the filter. So for the details, you need to choose the program. Okay, so you need to choose your specific program in this case, it will be like ST 00 whatever is yours. COVID-19 case based surveillance. You will need, you will also need to choose a name. Please remember to add your code here, the ST code, because if everyone is going to create an indicator, it's going to be a bit, it's going to be a bit of a mess. So remember that you will also need to put a short name. For analytics types, you can choose enrollment. It was work for him for this exercise. Forget about analytics period boundaries, we don't support them. And right here, you need to click on this plain form. Okay, this is the key. If you don't click here, you will not see the indicator in the Android app. Another thing that you need to do is to assign the legend. You don't need to create a legend for this exercise. We are giving you the legend. I will show you later the legend, but you don't need to create the legend. So you, when you're creating the program indicator, you will see the legend like this, and you assign it. That's all. So that will be for our, so for our indicator details. The next thing is the expression. Okay, so the expression is basically the calculated value as you know, we will give you the expression. I'm going to copy that. And later we can go through the exercise. That's it. So you will copy the, the, you will copy the, the expression here. Let me go through the expression because if maybe some of you have never seen this before it might be a bit tricky. So we are using a D to condition function. This function basically received evaluate has a Boolean expression that written through or false. So in our case, let me go through the expression. Basically, if the age is greater or equal than 65 return to. Now we are nesting another condition, which basically say if the age is greater or equal than 45 written one else written zero. So let me go through the expression again. If the age is greater than 65. It will return to if the age is greater than 45. It will return one else. It will return zero. Okay. It says that the expression is not valid and is not valid because you need to put here your attribute age. So you will be able to find your attribute age just right here in the attribute section. And you have here your, it will show your attribute age you click here. And now you have your attribute age. You can just copy this right here. And you will be able to now you the expression is valid. It does compile. So the finally, you will need to add a filter. In our case, we don't want to filter anything. So you need to put through. If you don't put anything, it will say expression is empty. So we're going to put through. Okay. For some other cases you might want to filter about sex, female male male or anything but for this case and this SSI you won't need to filter anything. Okay. So this is the indicator. Now, as you as you, as I said before. Remember that our indicators can return to one or zero. So, and if you remember also we assign a legend or let the legend risk patient. Okay. So, let me go through the legend. Again, you don't need to create any legend. If you can see the legend has three periods. Okay. This is important. So, one period, which is the first one goes from minus field dot one to zero dot nine. The next period are the end value of a period on the start value of the next period they have to have the same value. Okay. If you don't put the same value, I believe you won't be able to save it in the server. You need to have the same end and start value. One, another important thing is that our indicator can return to one zero. Okay, so two will fall into the red color, which is greater than 65. One will fall into the light green right here, which will be a greater or equal than 45. So, all the remaining cases will fall here, which is zero. So, it's important to know that if at some point you return instead of one, if I return zero dot nine, the Android app won't know what to do. So, it doesn't know if it fall in this in this period or this period so it will be painted in gray color. So, the Android app doesn't know what to do. So, now we have created our indicator with expression. We have our legend. And if you go to the Android app, okay. I can go to my program, just right here. I can just create a TI. Okay. And as you can see, this TI called Ferdi has an attribute age of 66. Okay. If I go back here, remember the bottom bar with this one I click. And now you can see that this patient has is a has red color and has the result of the indicator is two. Okay. Why is to because, as I said before, the age is greater than 65. Therefore, it returns to and therefore it falls into the red category because two is between these two values. So, let me give you an example. Pablo in this case has an age of 46. In this case, you will see the light green. On the last case, which is Jaime, you have an age is Jaime is 30. So, you see the dark green. Okay. So, for this session. Let me go through the exercise. You need to create a program indicator called risk patient. Okay, for your three student program. You need to, you need to assign analytics type enrollment with default boundaries do not touch them please. You need to select display inform. You need to assign the legend that you already have. And after you have filled all the indicator details, you can go to the expression is right here, the same that a copy. You can use that one. And then for filter, you just you through. And another important thing, remember, when you when you create your program indicator, you, you need to check the share settings. Okay, I always forget this. You check the share settings and give permissions. So, let me go back. You need to go to give permission to your, to your user group. Okay, so you can later see in the app. And later, once you think if you're finished. You can just submit to a screenshot screenshots showing the indicator tab with two different colors. Okay. Remember, you don't need to finish it now. You have more days, but yeah, that's from my side. Just give you some time to perform this exercise and if you have any questions you can ask them in a slack or or here in some


Hello and welcome. I hope you watched my previous video where I went over my code Godot first-person shooter. It's just a very basic project with minimal code and scenes to have a third or sorry first-person controls in Godot I'm going to show you how now to import a doom level now if you just go online and Google Doom level whatever and 3d model you can find 3d models of the levels that people have exported from editors Online I have put one online for you. I've downloaded it The main problem with that is a lot of them the scaling was wrong I would have to resize it to fit the game properly and the textures Sometimes we're there sometimes weren't so what I did was I grabbed one of those exports and I compiled it up and I put it up on archive.org now Be aware that the textures and these levels are on the copyright So I don't know how long it's gonna be there There'll be a link in the description to everything we go over today But you can download the models from there You can download my project from my get lab page get lab port slash Melix 1000 Just search for Godot first-person shooter there and then you can just click this and click download the zip file now I'm gonna go through everything pretty quickly here but again, there's notes and actually at the end I'll show you a script I wrote to Get this all going pretty quickly, but here we go. I'm in my shell. I'm gonna move into a directory I have here. There's nothing in this directory So the first thing I'm gonna do is I'm gonna go download My Godot project. So again, if you go to my Godot page, this is the link here And we will download that so now you can see whoops that zip file is there I'm going to unzip that file Which unzips the project next we're gonna grab my Object of the e1 m1 so episode one map one of doom From archive.org. So we're going to download that and put it in a e1 m1 map zip So again, that's from this website again links to everything in the description You can see the 3d view right here when you go to the web page But we'll download the 3d model and all the textures that's scaled properly for my project Once we have that we can unzip it So we're going to unzip the e1 m1 zip file where we're going to put it we're going to put it in the project We're going to put it in the maps folder. So there we go there now. I can open up Godot And open up my project. So you have to have Godot installed So Godot 3 in this case and I'm going to just point it at the project that we just downloaded boom It's going to now import those assets the doom level and textures You can see them under here under map e1 m1 You can see all the textures and then we have two 3d models We have an object file and a dae file dae file is more of a whole scene So I'm going to show you what I mean by that And you can use either one of them, but I'm going to show you the the process for each one So I'm going to click scene new scene. I'm going to say it's a 3d scene and I'm just going to call it e1 m1 At this point. I'm just going to grab my e1 m1 obj. So object a 3d object file I'm going to pull it in here. It's going to import it along with the assets now We want to make sure that centered so we're going to choose that object And then we're going to say transform and they should all be zeros You can set it to all zeros by hitting that refresh button and again I've exported this specifically so that 000 is right at the starter player start position at this point I'm going to choose our e1 m1 here. I'm going to say Instance child scene. I'm going to import my player now if I hit f6 this time It's going to ask us to save it. I'm going to save it under maps. I'll save it as e1 m1 scene It will start up this scene But we will fall through the floor because we haven't set up any collision yet So go ahead and close that what we're going to do is now when you're actually creating a game We'll be a little more tedious when it comes to your collision detections You don't want to have too many because it can slow down the machine But you want to have the proper amount that you don't walk through anything or clip through anything But we're going to do for this. This is a very basic map And we're just going to choose the object here make sure it's the obj object we imported We're going to go to mesh and we're going to create Try mesh and a static body that will create a static body and the collision and set it to Basically wrap around that model now if I hit f6 you can see we are in the game now When I exported this I got most of the textures There's a couple of the textures that didn't quite export for some reason and I did it once or twice just to check And I don't know the the first time I did it I had all the textures and then when I uploaded it and then downloaded again I realized some of the textures were missing So I don't know if they got lost in the upload also doors. This is not I don't this is not a full game. This is just the the first person movements controls and camera in doom Doors are just walls That had been lowered down. So I just deleted the doors for now again This is just you know proof of concept something you play around with but we've got 99 of the level imported as far as the level itself Not all the objects all the enemies and barrels and whatnot. There's another door. I deleted We can go all the way outside here. There's no sky dome. So it just has like a default sky texture there And we can go all the way back up the stairs the stairs a little high for me to walk up So I have to jump up them. That's something you can fix with your collision detections there The exit signs are missing and there's our exit. Of course, we can't click it because it's it's just a wall texture there Okay, I'm going to exit out of that. So that was that one other thing we could do is like if I start this off again Hang f6. I'm facing the wrong way. I can choose my player and I can say transform rotate on the y 180 And now if I hit f6, I'll be facing out The way you would be normally in the doom game Uh, so yeah, so we have that another option. Let's say you wanted to use the dae file Double click it and say new inheritance And there we go. It has imported it. Again, we want to make it give a collision detection So we're going to choose the object within the scene We're going to say mesh and in this case again, I'm just doing the quick try mesh with static body You may or may not want to do that depending on your level. It's something you need to to decide for yourself um, and then we'll also Import the child instance of player And if we get f6, it will ask us to save it. I always call it e1 m1 underscore scene And here we go. It has imported it actually has the textures that we were missing in the room But you'll notice that uh, there's everything's like this shiny glossy Look and that's just got to be a materials thing the way it's uh, was exported or imported um, but uh, not all daes are going to show up like this I'm assuming it's just the way the model had exported And uh, you can mess with materials a little bit more to get rid of that Uh, but I just wanted to show you that you could import the dae file and it will have all the textures there Even though the materials are funky And that's pretty much it now That was too much for you if you if you couldn't follow along Well, you can go back and watch the video and pause it when you need to Whenever someone tells me I go too fast in my videos I wonder why they don't just pause the video But as I said if I'm going to I can quit out of this Let that close, uh, I'll move into This directory where I have a script which I put up online on pastebin I'll put this again in the link in the description Which will go through making a directory moving that directory downloading and exporting everything that we I did in the first steps of this. So I already have that here. I called the script doom in good o.sh We can cat that out and uh, if you download that and make it executable We can do doom in good o That's going to download my project download the 3d model map Extract it all and open the project. So if you already have good o installed and unzip installed There you go. You're done with that now again. You can just uh go to maps or sorry Uh, yeah maps e1 m1 go down to e1 m1 and you either go with the object or just double click the dae give it collision detection and Put in our player Save it and you're good to go. So that's how quick you can get this up and running at least with the dae Or you can again use the obj and get those textures fixed the materials fixed So again, just a little proof of concept something to play with we're gonna get more at uh different ways to import and different models We can import and how to Uh, work on the collision for them and how to design levels in future videos So if you are more interested in this project, uh, be sure to subscribe share comment all that good stuff I thank you for watching. Please visit my site films by chris.com There's a link to that in the description as well as a link to the notes for this project And as always, I hope that you have a great day


We should take our money and take some of the money in the risk-free asset and the rest of the money We should put it in the risky asset. The risky action should be well diversified cheap and That's how we should invest As finance guys we are these days much more empiric or looking into the real world empirical data and us us people were able to To get the data from the US stock market they recalculated back to 1820.  I mean that in enormous number of crisis and That it doesn't matter we always have crisis the only prediction about the crisis We have is the next crisis will come however We don't know but the beauty of the markets that they incorporate the crisis and if you're well diversified There might be a crisis in China. Yeah, that's sort of okay We are we also invested in Netherlands Germany or US and so on so well diversified and having that long term perspective that helps to cover most of the crisis There's so many examples of what people overreact and what people have their opinion on on current Development we know from the psychological literature. How do we make forecast? Basically people may forecast if they take the price today and then adjust it so they take the short-term perspective and adjust it however Why I mean what that's that's not the point and if you look for someone my favorite one these days is the price of gold If you see the price of gold went down from 1900 to basic 1200 Extreme high volatility like two months ago. Everyone says gold will be above 2000 with gold will rise and so now everyone says gold We fall however, just ignore it and keep your initial allocation and Watch it from the sofa But on the other hand, there is so much money involved in the financial markets Maybe too much money that yeah, but then I also quite a number of people So the money is sort of distributed and we need to have that money in order to save for the retirement like they are basically two ways for the retirement the one is I Mean if you think of conceptually the one thing is you invest in human capital that means our kid pay for us or you invest in In stocks and other things so that the capital is paying for us and we have both in earlier days It was just human capital our kids paid for us. Then it was the whole human capital That's what the the current retirement system is and it will be no more that we take the markets in addition to it And these are huge amounts of money, but it's good. So we need to live on that once we get even older You see a big difference between let's say Germany or England in the United States. I Mean taking locally. I don't see a big difference between Netherlands and Germany and not so much in England in the US They are more for a longer time experience through the the market movement and so on so they might in some way take it Easier in Germany We have a tradition unfortunately to invest in single stocks to advertising for single stocks. So we should have more the We should learn more to invest wisely broadly more diversified, but I hope that we we come to it


That's right, in this video we're going to be talking about the best, the best mental health philosophy of all time. What is up everybody? This is Chris from the Rewired Soul where we talk about the problem, but focus on the solution. And if you're new to my channel, my channel is all about mental health and what I like to do. I like to pull different topics from the YouTube community to teach you how to improve your mental and emotional well-being. So if you're into that stuff, make sure you subscribe and ring that notification bell. And I want to just thank everybody again. I know I tweeted it and put it up on Instagram, but everybody who came out this morning for our first of many monthly charity live streams where we were donating money to Project Beauty Share, which that Taylor is donating to. Like, thank you all for coming out and donating. We raised over $400 for the first live stream, pretty freaking sweet. And look how beautiful I looked. Hello. But yeah, anyways, let's jump into this topic. All right. So this one's going to be a little bit different. Sit back, relax.  All right.  Well, yeah, kind of long ago, before I was born, 1920s-ish. All right. And by the way, everything I'm about to tell you, feel free to go Google it. It's all true. All right. Because I was a huge like pessimist. I'm like, I don't, I don't really think you guys are telling me the truth about this. But anyways, back in the 1920s, addiction was an issue, right? Remember prohibition and all those things, right? Well, anyways, one of the things was is that nobody knew how to treat addiction. OK, like back then they didn't even have typical rehabs like you see today. You know, there's like detox facilities, therapists, psychologists, psychiatrists and all that kind of stuff. And they like give you like evidence-based treatment, like cognitive behavioral therapy and all that stuff. Back in those times, like if you were an addict or alcoholic, you were pretty much screwed. OK, like if you went in there, basically what they would do is get you medically stable and they're like, good luck.  OK, they said one of the three things that's going to happen in any of you who listen to Macklemore, you've probably heard this. It's going to be jails, institutions or death. Right.  Like people who were struggling with alcoholism or addiction, they would tell them like you need to hire like a bodyguard to keep an eye on you. Twenty four seven, right. And anybody who's in recovery from addiction, like, you know, you know what they mean, like people with addictions, they want to use even when they or they use even when they don't want to use. They drink when they don't want to drink. Like that was the story of my life for many, many, many years. So anyways, like I said, this was back in the 1920s and so many people just didn't know what to do. So basically what happened was there was these two guys, there was these two guys who, quote unquote, recovered from addiction.  Like, think about that real quick. Now there are people who have been sober since before I was born. Back then they thought three months was a long time. So there was two guys and what they ended up doing was they would travel around to these different, you know, what they had is rehab centers back then and they would go in and they say, hey, do you have any alcoholics or addicts that we can talk to and maybe help out, right. And they would start going in and they would start talking to people and they would just share their story. They would share their story about how they were covered. And all of a sudden you started seeing people stay sober and you're like, wait, what, right. Like doctors were even baffled by this, but it kind of made sense. It kind of made sense. So a lot of us, no matter if you're struggling with addiction or mental health issues, a lot of us aren't 100 percent honest with doctors or even psychologists or therapists. Like, come on, let's be honest right now. How many of you have seen a doctor or therapist and you lied to them or you didn't tell them the whole truth? Like me, for example, like how much do you drink? Oh, not that much. You know what I mean? Are you taking any other drugs?  Oh, I'm fine.  We don't open up. And one of it is, is this fear of being judged, right. But what they found was that even though the patients weren't opening up to doctors or psychologists or anything like that, when these guys would go in and start talking to somebody who had these issues, you would see the person open up, right? Just open up completely. Like what we often find is we might not open up completely to our friends, to our family members, to professionals and all those things, right. But when we find someone who's been through what we've been through, all of a sudden we just open right up. And one of the reasons is because they get it, right. There's something about that openness that they share, that insanity that they've gone through, sharing about the crazy thoughts that have gone through their head, but they're doing better now. Something about that where we just naturally open up. So anyways, those of you who don't know this story, it is actually the story of how Alcoholics Anonymous was created. So I know a lot of people have different opinions and stuff like that on Alcoholics Anonymous and other 12 step programs. I have my own and everything like that. But we know, we know even to this day that they develop one of the best mental health philosophies of all time, okay. Which is somebody who's been through something and is now doing well is some of the best help you can find for somebody else, all right. And this is why support groups are so, so, so crucial. All right. This is why when AA started there were the only people on the block, right. But now you have NA, Narcotics Anonymous, Gambler's Anonymous, you know, all the other Anonymouses. There's even like Sex and Love Anonymous, you know, all sorts of things, but it doesn't even stop with different forms of addiction, like Overeaters Anonymous. This is where, you know, different mental health scientists and professionals got the idea for support groups, okay. There are mental health support groups all over the place. Like you probably have mental health support groups. Like there's like grief and loss support groups. Think about the VA, like veterans getting together, working in treatment. I know that first responders, they prefer to be together because even in a treatment setting, you have people from different walks of life. This is why there's LGBTQ groups and all of that because it's a lot easier to open up to somebody else when you know that they get it, right. It's just part of our human nature is opening up to people who understand, okay. So no matter what you think about 12 step programs, it has been proven time and time and time again that it is a lot easier to open up to somebody who's been through it. And like I mentioned in a video not that long ago, if you want what they have, you gotta do what they do. So no matter what you're trying to overcome, whether it's anxiety, depression, trauma, you know, an eating disorder or whatever, it is very beneficial to talk to somebody who has been through it.  I always tell you to go see a professional, all right. Go see you a professional. But even in this book, this is something that I read to my clients all the time. It's on page 133 if any of you happen to have this book right here, but it says this. But this does not mean that we disregard human health measures. God has abundantly supplied this world with fine doctors, psychologists and practitioners of various kinds. Do not hesitate to take your mental health problems to such persons. Most of them give freely of themselves that their fellows may enjoy sound mind and bodies. Try to remember that though God has brought miracles among us, we should never be little a doctor or psychiatrist. Their services are often indispensable in treating a newcomer and then following his case afterwards. Basically that is what that saying is do both, do both. Individual therapy, group therapy, right? Individual therapy, support groups, whatever it is. Do both, okay? You have options, take advantage of all of them, all right? That is why it's so important. But for anybody who's in a 12 step program and just real quick, I've heard of people, you know not really liking the vibe in there because some people are against like you taking mental health medications. Like for example, my sponsor, he was not happy with me taking Lexa Pro which is an anti-depressant and anti-anxiety medication. Even though it's a non-narcotic, right? But even here in this book, it says to never disregard, you know these professional mental health measures, all right? So if you have the resources, make sure that you are seeing a professional.  So that might be something that can help you. But we ain't over yet. So let's talk about depression specifically and depression and anxiety tie in a lot together, okay? Because for some people, anti-depressants actually don't work the best. And this is something that I've talked about in many, many, many, many videos, okay? Anti-depressants are not the cure all. Studies have actually proven that anti-depressants only help about this much. So I am on an anti-depressant but I know there's a lot more work that has to go into it. So anyways, this guy on the screen right now he might look familiar to some of you. This is Johann Hari, okay? So in his book, Lost Connections, which I have recommended to all of you a million times, I even did a giveaway of some, I think five free copies of Lost Connections not that long ago, like best book on depression you can ever read. But anyways, what he talks about is he tells a story about this psychologist I believe he was, he went to Cambodia, okay? He went to Cambodia and he went to this village and he was talking to them about anti-depressants. And there's not really a word in Cambodian for anti-depressants, right? So he starts to explain to them what it is. And the village, the people in the village is like, oh, we already have that. We already have anti-depressants. He's like, wait, what? Like, cause he knew they didn't have pills. So he's like, okay, maybe they need some herbs or something like that. Well, anyways, what happened was there was a rice farmer in the fields and he was working and he stepped on a landmine, blew his leg right off, right? So they made him a prosthetic leg but he couldn't work because it was very painful to continue being a rice farmer. And this guy fell into a deep, deep, deep, deep depression. So what the people in the village, what they started to do was they started to go and spend time with him. They just started listening to his issues, his problems, what was making him so sad, all right? So what they realized was that he started lacking purpose because he couldn't work. So what they ended up doing was a bunch of people got their money together and they bought this dude a cow and boom, not that long after this dude was, happy as can be, okay? So what they told that doctor who came to the village was, yeah, we have an antidepressant for him. This cow was his antidepressant. And one of the things that that book talks about and I've mentioned this in other videos and gone through some of the other stories in the book as well as scientific studies, like check out the video I did on the right opinion, exposing like depression or something like that. But anyways, antidepressants, like the pharmaceutical version of them is a very small part of overcoming depression, okay? We need connection, we need meaning, we need purpose, we need all sorts of things, all right? So make sure that you are not isolating and you get connected to people. That's another reason why we set up these support groups so you can get connected with other people. I have some other videos that I'm gonna do on this and like the importance of connection, but it is so, so, so difficult, if not impossible, for most of us to do this on our own by isolating, okay? I have a whole back catalog of videos explaining the science of why this does not work, okay? So again, I am not telling you to quit taking your antidepressants or anything like that. Again, I take mine, but there's a lot of other work that goes along with it. And a lot of that has to do with the support group that I've surrounded myself with, all right? But anyways, if you wanna check out the book Lost Connections, by the way, it is down in the description below. I'll put it in the pinned comment as well if you would like to check it out. And again, thank you everybody who came out to our first charity live stream. You're all amazing, love you all. Thank you for helping support. Project Beauty Share and next month, we're gonna be doing a live stream event to help out the AFSP and I'm super excited about it. All right, but anyways, that's all I got for this video. If you liked this video, please give it a thumbs up. If you're new, make sure you subscribe and ring that notification bell. And a huge, huge thank you to everybody supporting the channel over on Patreon. You are all amazing. And by the way, I answered all of your questions in the live stream, so go check that out. All right, thanks again so, so much for watching. Get connected and I'll see you next time.


is the driven. That's the important bit, because that's what actually changes when you actually do it like that. So it's a software development process that is based on a very, very short cycle that you repeat very often. You start by writing a test, and then you make it run, and it fails. And this is called the red phase. And then you write the minimum amount of code to make the test pass. And then you write the test, and the test passes. And this is called the green phase. And then, because you have written the minimum amount of code, maybe also a rough code, you want to refactor. You can refactor both the code and the tests. I suggest not at the same time, because it's not wise. And when you start with it, it's really useful if you take very small steps. So you write a little bit of test code, and then a little bit of code to make the test pass.  You add another little bit. You make that pass. You refactor. And so on and so forth. And the more you do this, the more in your brain, basically you learn how to work with this kind of back and forth between tests and code, which means that at some point you're going to be able to take longer steps. And then you go like, I'm taking longer steps. And you take them really long. And at some point you're in trouble. And so you go back to short steps. You fix whatever you have to fix. And then you try to increase a little bit more until you get some comfortable size for you to work with. But where do we start? It all starts with a business requirement. So that's very important. You have to understand the business requirement. And then when you are clear on the business requirement, you enter the TDD cycle. You start writing a test. You make it pass your refactor. Test, pass refactor. And so on and so forth until that business requirement is fulfilled. And then you get to the next business requirement. The frog at this point thought the training was completed. But the masters agreed. And they kept giving examples. They said, this is just the mechanics. If you know how to use a steering wheel, the gear switch, accelerators and brain, but you never driven a car, would you call yourself a pilot? Of course not. And I've talked to some people, some coders, they say, I know all about TDD. I read an article. But have you ever tried it? No, it's not really for me. Well, if you don't try it, you don't know. So you need to try. What changes in your brain when you use TDD? Well, without TDD, you go from the business requirement to the code. And when you think about the code, you have to take care of two things. What the code needs to do. We need to deliver this functionality. And how it needs to do that. We need to cycle using a for loop. We need to call this function. So it's two very different things, the what and how. And we take care of both of them at the same time.  On the other hand, when you use TDD, you basically mostly take care of the what when you're when you're writing your tests, because the tests are testing what should happen in the code. And then you take care of the how when you're writing the code itself. So you have your brain concentrating on each of those two different times, which means it's like it's like having two brains. It's much more it's much you become like much, much more powerful. Your code changes immediately. There are some common aspects to to working with TDD, the key principle to keep it simple, stupid, which means basically by forcing yourself to have a test that represents something that your code needs to do and to again force yourself to write the minimum amount of code in order to deliver that. The code basically remains simple. You cannot go and take care of, you know, super architectural things or whatever the code automatically stays simple, which simple is really, really important. And then the Yavni principle, you ain't gonna need it. If you're focusing on understanding the business requirement, writing a test and making it pass, it's not likely that you're going to over engineer your code because you don't you don't have the freedom of a code that says I need to do this. And then while you're coding, there's nothing telling you what that code should do is just in your mind. And you go like, oh, I'm also gonna add this because maybe tomorrow I need it, which is something that with TDD you don't do. Three strikes and refactor. I've taken this off the test driven development with Python from Percival, which is a very nice book. I just read it a few months ago that basically says when you're in the factor phase, and you find that you've one functionality and basically the same functionality, just wait for the third occurrence of something really similar because if you group these and factor out the mixing or whatever too soon, when the third occurrence comes out, you may realize it's not as easy to make that work with the mixing that you just done. So you may also have to do a lot of refactoring work. On the other hand, going for four or five, that's not good. So three strikes and refactor is a nice balance to achieve. You can do all the architecture design when you refactor the code. And the beauty of it is that because you have the tests, you can refactor with confidence. And then you do triangulation. Triangulation was puzzling for the frog. So let's see an example. Let's say that you're writing a test and you're just making sure that your square function that takes minus two is producing number four. If you think about it, at this point, all we have in the code base is to fulfill that requirement, which basically says I just want to know that your function returns four. So you can do this, you can cheat. It's actually suggested by TDD authors. And it's called fake it till you make it. But of course, we don't want to have that code in our code base because that's not correct. So we do triangulation, which means we pinpoint to the same function from two different angles, which would cause us to have to fake it in two different ways, which is not compatible. At that point, we need to write the real logic. So you write the actual logic when you have triangulation like that. And this is very nice, not just because it's like a theoretical thing, but it's because you get something done, you get a test that basically is there. And then when you triangulate, you already have a test there. It builds on your test base. So the main benefits are you can factor with confidence, because you have a set of tests that when you touch the code and you change something, like in the first example, we had the boundary that was jiggling a bit. You have a test that fails, readability, because it's much easier to see code that was designed with tests, tests first, because basically, even though it's like a given, you take care of the design part when you're writing your tests, because when you're writing something, unless you're writing integration tests, but if you're unit testing, you have to test a unit of code. So you have to think, how do I structure this code? You can't just write something. You have to give it a thought, which means you're thinking twice about the code. When you test and when you actually write it, which means it comes out much better, much more readable. It's more loose-coupled. It's easier to test and maintain. It's easier to test, of course, because it's coming from the test. And it's easier to maintain because it's well-structured. And when you do test first, you also have a better understanding of the business requirement, because in order to start writing your tests, then you have to have very, very clear in your mind what is the business requirement that will drive the design of those tests. If you're not clear, you will find yourself blocked at the test level, which basically will prompt you to go back and try and understand better the business requirements. And then by testing in small units, it will be much easier to debug. And also, you will have the perks of having the tests act as documentation, because by having small tests easier to read, you just go through it very, very quickly and you say, oh, okay, my code does this, which is sometimes even easier than read an English sentence that describes that functionality, because English can be misleading, especially if I write it. So having a test, which is Python code that you know what it does, it's very useful. And higher speed. It takes less to write tests and code than to write code and then having to debug it. I can tell you this by my personal experience. I was working for a company called TBG. We were competing with other companies to get the basic preview access to Twitter's advertisement API. And we had to deliver a proof of concept in about six weeks. We succeeded. It was a monolithic Django application. And the order from above was no tests. We don't have time to do them. So no tests. We do the coding. We do overtime. We go on Saturdays and stuff. And the last two weeks were spent just to fix two bugs that they drove us crazy. And it was just one, one small Django website. But it grows so complicated, touched in such a short amount of time by six, seven people, that basically we were going crazy in debugging. Because we were changing something here. It was breaking something there. You go fix it. You break something there. And then it's you've got a ripple effect that flows through your code. On the other hand, had we done tests first, that time that we spent debugging, we wouldn't have needed that. The main shortcomings of this technique is that the whole company needs to believe in it. Otherwise you're going to fight all the time with your boss, which is something that me and some of my colleagues know very well. We need to write the test. There is no time to do the test. But then we'll have to debug. It will be a problem that we will have later. Okay. So we go and write just the code. And then, oh, it doesn't work. It's your fault. So it's, you don't want to, you know, you have to really, really convince everybody that TDD is the way to go. And because it's really hard to see what happens in the long term. All we, myself included, most of the time, we just see what happens tomorrow. We need to deliver tomorrow. We need to make the client happy tomorrow. And we tend to forget about the long term. Blind spots, if you don't understand the code, you'll miss read or if you don't understand, or if they are incomplete, the business requirements, it means this will reflect in the type of tests that you write. And this will also reflect in the code. And without the business requirement part, take a look at the tests, perfect. Take a look at the code, makes the test pass. We're done. So the code and the tests, they would share the same blind spot, same thing that you miss from the business requirement. So in this case, it can be harder to spot something. Pairing, for example, is, helps on this, because you have to discuss what you're doing, which means you bring up a discussion about the business requirement. And then you realize, oh, I understand it this way. My colleague understands it that way. You go ask whoever it is that you have to ask for clarification. And then this does not help. And also badly written tests are hard to maintain. For example, tests with a lot of mocks, they're very hard to maintain, because when you change a mock, you're changing an object that basically just a puppy, you can do whatever you want with it. And you're not really sure if you're breaking something, because you just change a mock and you make it do something else, and then you make your code pass. But if that mock is representing a real object as it should, and that object is no longer in sync with the mock, then you have bugs. So when you have mocks, you have to take extra care in order to refer to your tests and your code. So these are the shortcomings. I'm going to give you a few real-life examples, because one of the things that I'm told many times is like, yeah, okay, it's all good and nice when it's from a theoretical point of view. But then in real life, what happens? So for example, you hide by a company, you tell them, I really want to do tests, they say good, they don't say you are the first, and they have a legacy code that is not tested, so you have to cope with that. You have to change something, so what do you do? You read the code, you understand how it works, and you write tests for it. And this is wrong, because if you read the code, understand how it works, and write the test for it, what happens? You're inverting the cycle. Basically, you're going from the code to the tests. What we want to do is to go from the business requirement to the tests, to the code. So a better way of approaching this would be, read the code, try to reverse engineer what are the business requirements that were behind that code, and then write the tests for it. Concentrating on the what part, not on the how. If you do this, it's very likely that your tests will concentrate on the how part. Changing a horribly long view, let's say we have a Django view, and we need to insert pagination, filtering and sorting in it. We do a bunch of things, we get the data, the data is from a search, so it could be empty, it could be 10 things, it could be a million things. Then we do another bunch of things, and then we render template with some context. So we need to add pagination, filtering and sorting, and it's not possible to do it at the API level, because it's too complicated and it's not tested. So something that I did after discussing it with my colleagues was let's write filter data, sort data, and paginate data, insert that into the function, into the view, without changing anything that was happening before we get the data or after we got the data. But those three functions, let's write empty dd. So at least we're changing the code, yes, but that bit of code will be rock solid. And this is a very good way to go about it, because in the end the function was not caring before about what data was coming from the search, so it's not going to care now if you have paginated, sorted it, or filtered it in any way. Introducing a new functionality into an existing code, which is not test. So that's a nasty piece of code that does a lot of things, like this function. Uncle Bob would cry if he saw it. So how do we change? Because of course you will not have the test, the time to go through every if clause to check if that for loop is correct or not. So what do you do? Well, one possible solution would be to come up with one test for the new functionality that you're trying to insert, and then you change the function, which was not tested before, it's not tested now, but at least that new functionality is done. The next time you go back to this function to refactor, what happens? You have one test, you come up with another test, and then you go back again, and at some point you will have a bit of tests behind this function, which means either the function was well written, and therefore you just keep adding tests, or at some point you realize the function has a bug, because you've got, you start having tests for it. So the frog was in Zen mode after all this. He went back to the princess and passed the exam. They married, and when the minister said you can kiss the bride, nothing changed. It was just a talking fog after all. So what's the moral of this story? The princess should have tested first, and so she did. Thank you very much. Great, we have a few minutes for questions. Do we have any? Also, first of all, thanks for the talk. It was really enjoyable, and my question is, how do you put your test in directories structure? Because I have some tests of all kinds, but I have trouble to checking if the code I intended to make already have some. So how do you put them? So, for example, when you start the Django project, you've got tests in the application folder. First thing that I do is to remove that, and I reproduce the code structure in a test folder, preparing everything with test underscore. This is two main advantages.  Because sometimes, when you deploy and occasionally someone runs those tests on production, you get your production database that goes, that's not nice. So, I just reproduced basically the tree of my code. Probably there's also other approaches, but this works, it's good. They're out of the way, and then for functional tests or integration tests, you may want to have a separate folder as well, or maybe even a separate repository. For example, if you are doing integration tests, it's likely that they won't be testing what's just in one repository. Maybe it's more repository, more services, or more application. So, you want to have like a whole project dedicated to your tests. We had a question here somewhere. Hi, great talk. As humans, we are, I believe sometimes there can be mistakes on the test data, either by typos or bad hand calculations. In your experience, how often do those mistakes happen and how do you cope with them? They happen more when you have to deliver by yesterday. When you have the luxury of delivering by tomorrow, they happen less. What you want to do is to take good care of your fixtures, and especially when you change the tests or you have migrations, take good care of those, because basically those are the things that you test against. So, they need some love. Me, for example, I tend to write unit tests more like an interface style, which means I have some inputs and I check on the outputs, rather than mocking everything out. I tend to mock the least possible, because it's dangerous to mock. And what was the second part of your questions? I mean, in your experience, how often, for example, in the examples you printed before, one of the numbers could be wrong by a typo, and you don't notice that while you are writing tests or the assertion, how often does that happen and how do you detect it? The way we detect it is to have pull requests. So, we use a branching system, we have story branches, and then we have a staging branch and before master branch. There are at least two pull requests for other people other than the guy who wrote the code to take a look at that code and we read it. So, most of the times the stuff is detected on either of these two passes. That's very helpful. Thank you. My pleasure. Hi. I was recently involved in discussions about TT and some guys were defending that if you focus too much on tests using TDD and writing the test first and etc., you may live for later thinking about the architecture of the code, the design of the code, how different parts of the code is coupled between them, the performance, etc. What would you say to them? I would say that TDD is not a type of methodology that fix everything and solves every problem. You still have to take care of the architecture, take care of the design and you can do it in the refactor phase. What people who do this and find themselves neglecting the rest of the code is because probably they believe TDD can do too much.  You still have to give it your best shot and take good care of the code you write. With TDD you've got this extra thing, extra like a guardrail that basically keeps you on the right, on the right path. It's just something that you have more but will not solve all the other things that you have to do. Great. Do we have one last question? No? All right. Now I've already won. Thank you.


Welcome to this video about STM32Q Programmer debugging features. STM32Q Programmer's main purpose is to program STM32 device. But some additional features are valuable to allow you a first level of investigation in case of issue. In this video, I would like to show you the register viewer and the fault analyzer features. I think the name are some are quite explicit, but beware, those features are only valuable through SWD and GTAG interfaces. Let's start with the register viewer feature. Once you are connected through SWD or GTAG interface, you can select the CPU button and check the core register. In this interface, you can also control the core state. I mean you can reset, run or hard the core, or you can simply doing some step instruction. The CPU security state will be available only on the STM32 with Cortex M33 on trust zone activated. In this case, it will show you the current core state, secure or non-secure. But you also have the possibility to check all the register IP of your STM32. For this, after connection, you just need to select a reg button. Then the device corresponding to the STM32 used. Then you will have the possibility to select the peripheral register you want to observe. Now, you can read or write in the register depending on the access write. But you can also control the CPU state, run hard or reset it. Another interesting feature is the capability to save the register values of one or whole the peripheral in a text file. This allows you to have a full overview of your platform configuration from register content point of view. But let's continue with a short live demo. First, let's check the connection parameter. I'm using the SWD interface and I'm in output mode because I want to observe what are the value of my register and my code is currently executed. Though I just press connect first, then go in the register reg beta button. I have to select what is the device that I'm trying to observe. In this case, it was a GZ071. So I select it and you can see the control peripherally selected by default with the register value. I can change through the flash for example. And here we can see the latency has been set to 1 by the code. So of course I can change this. For example, I can modify just the prefetch value. I apply this value and I can reduce the code and see if it has an impact or not. I can halt it. I can reset again the device. If I want to check new value, I will get the prefetch. So if I halt, if I read, I can see that source value come back to the default one. The last interesting feature is for me the capability to save all those values in a file. For example, I can save all the peripherals of my device in a text file. And if I show you the results, you can see just a text file with each register on the different field on their value. So it's really useful to have full picture of your platform. And that is what I want to show you in this short video. Let's talk now about STM32Q programmer fault analyzer feature. As you probably know, ARM Cortex Core implement a set of fault exception. The default one is hard fault. On the Cortex M0 M0+, some information could be recovered from the stack, but mainly that's all. For the other Cortex M, you have some dedicated fault status register which allows to configure and to get more information depending on the error. In those case, you can see some main management exception which detects some access relation regarding the memory protection unit. You can see some bus fault which detects some memory access error and usage fault which detects undefined instruction, un alignment access on also some divided by zero or other un alignment access if you configure it. Once you are connected to your target, you can select the bad button to get this fault analyzer interface. Now, you can control the CPU state that can be running on HALT. You can reset the CPU. And you can click on start analysis to check all those registers to find if there is a hard fault on which information you can recover from them. You can clear this window. And you've got this little not button, so I will just show you what is this. This not is just one you about the fact that division by zero and un alignment access are not trapped by default. You have to activate them in your software or another possibility would be to use a STM32Q programmer register viewer to set those values. This is a screenshot of memory management fault. The MMFR or main management fault address register contain the address of the location that generates this error. In case of bus fault, you can find the bus fault address registers which contain the location that generates bus fault, but you also have the fault instruction address and the call function address. So with all the information, it could help you to identify the issue in the code. And the last example is about a division by zero exception that I configure also by software, but I propose to show you this example with a live demo. For this demo, I created a simple firmware that do a division by zero when you press a button. And I would like to check what we can recover from STM32Q programmer. So first I will connect in hot black mode. And I would like to show you the configuration of the register. So first let's go in the register viewer. I already selected the SCB system control block. And in the CCR, you can see that division by zero and un alignment exception are not triggered or are not trapped. So if I go in my art foot analyzer, and if I press any button to I would say do a division by zero, I can start analysis but find nothing. But you've got a window that's open and tell you that the div zero trap bit was enabled. So please double check. So if I want to show you in the register view, if I read again, you can see those bits have been modified. So now if I do a new division by zero in my code, and I do a start analysis, this time all the information are recovered from the device. When away the 40 instruction address, you know it's a division by zero. And here you also have the CP register. So it's really show you this aspect. You can of course reset the device if I do a start analysis again. No exception for the moment. You activate the flag again. If I don't press any button and start analysis, you don't find any art foot. This is mainly what I want to show you with this art foot analyzer. Thanks for your attention.