Rwyf yn dda. Rwyf yn gweithio'r rôl y ddrwy. Rwyf yn gofyni a'r k exceptional arfer y maes o'r un i'r newydd a'r myfyrwyr. Pngwrs, oedd y maes. F collective I am Stephen, ac mae'n golygedd i'r rôl at y myfyrwyr yn gyfrydio'r newydd i'r newydd. Yn y gall, mae'n bwrw i. So in December I gained a lightning tour that was three minutes in which it was about how to solve minesweeper. I was very kindly invited to come here and give a longer version. 15 minutes. And I thought, yeah, that's fine. No problem. Can do. The last talk I did was actually quite late on details. Instead of just explaining how to do it, we'll actually explain how to implement it instead of just how to use solviles. So, here goes. Things are going to get very, very weird. So just bear with me. My name's Sergeant Sweep. My name is both a literatess and a pun for comedic effects. Okay, so the year is 2030. The world has been ravaged by war and turned to ruins. Starting in the USA, every country on Earth started planning landslides. Three months ago, we started the cleanup efforts. Trying to clean up after World War I. Three. World War III. It's not 1960. The year is 2030. It's all over the place. I've seen these robots for the cleanup efforts. It's 2030. Everything's automated. But there was one task that our robots couldn't do. Mine's sweeping. Also, one of the robots exploded from sheer confusion. The one robot that's left is called Davy, and he'll make the appearance later. So now it's going to be you, our new army recruits.  We've got humans to do it. It's good to see your names irrelevant. Your mission to sweep mines. And you're training on the job. That's the point where we swap a laptop. You can check in army school. That's a power cable. You are a new recruits, and we are going to teach you how to sweep mines. So hands up, who has played minesweeper before? Training is mandatory. You won't be getting out of it like that. This is how minesweeper works. Every cell can contain either a mine, or it can be clear. If it is clear, it will contain a number from 0 to 8, telling you how many mines you're surrounding it. For example, this one says that those two cells contain exactly one mine. The blank ones are zeros, which you can... Yeah, they're zeros. So, the screw is the middle. For example, this says that those three cells must contain exactly three mines. Of course, that means that all of them must be mines. And we can flag it. We can see that here in the target section. Three cells, three mines, that's right. We can flag it. If we flag that, now this two is satisfied. It says that it needs two mines next to it, and it already has two. So we can satisfy that. We can clear around that constraint. And we can do that. And we can just repeat this. So now this one is already satisfied. This one's already satisfied. And there's only one way to satisfy this two. That's basic training. And this is where the audience participation can sit. So if anyone sees four chocolates, what we can clear off like here. And you're going to put your hands up, and then Gavir is going to run at you. Take your pick, Gavir. Bottom left. Bottom left, too. Well, look, I actually got this. Look, CSS, Transform and everything. Oh! So cell 28. What's happening in the future, please? Currently, there's one of these red chocolates. There you go. Do shout out to Gavir, please, because we've got combos and they're going to have to be really huge. Anyone else? What else do you clear now using what I've just told you about clearing and flagging? Show the numbers. Show the numbers. Thank you. I've spent hours on that. Push four. 44. So 44. This one down here can clear this because of this constraint. Yes. So because that one is already satisfied, we can clear it. Any more? This one's pretty easy. Show the numbers. Yep. I'm going to remember a wrench 18. Number 18. I haven't taught you how to do that. Anyone else? Yes, you can. You can clear it because of this one. This one is already satisfied so you can clear around there. Does anyone see anywhere else that we can clear now? No, because there is no other place to be cleared. That means that it's time for advanced trading. That's because we actually, instead of looking at any of these individual constraints, we need to look at how to constraints are correct. For example, this constraint says that any of those two cells must be a mine. One of the two cells must be a mine. This constraint says that one of those three cells must be a mine. But we know because of the orange constraint that it's one of the two on the left. So if that's subtraction, essentially, we can say that that cell on the right can't be a mine because the mine must be one of the two on the left. In a very general term, we can do subtraction any time you have one constraint which is a subset of another. And you can see that, actually, Davy there has been repertless and his job is now to automatically clear things with a trivial. So because of that subtraction, we knew there wasn't a mine there, Davy has helpfully cleared it for us. And then we can just proceed using the things that we've learnt in the pack. But subtraction is hard and you are only recruits. So we're going to have a little bit more training. In this situation, again, we're going to apply the same rule that we have before where this one says there is a mine in one of these two, this one says there's a mine in one of these three. Subtract and we can clear that one. But actually, we can try and apply it here and we end up with a new constraint. It's not something that we can clear off like immediately. So because there's one mine here and there's two, so, yeah, there's one mine in these two which means that there's one mine in these three in order to satisfy the two. We can't do anything with that yet, but if we subtract this one again and we subtract both of these ones from the two, we can say that there can't be everything in that corner. There is one other place that we can do subtraction here which is on these two cells. They produce constraints by one of the subset of another and we can subtract to clear these bottom three cells. Then we can repeat this by finding constraints which overlap and eventually work through the board. So, pay attention. Actually, we've just seen something else. These cells are lines through them. Davy has got an upgrade. Davy's got another one to clear things that he sees as a trivial, and he's also going to highlight cells that can be cleared or flagged. So, no more topics are going out for telling you where I can clear or flagged things. We can process these through with Davy's help and clear the ones that we need. So, let's go back to yours. Does anyone see anywhere we can do some subtraction? We want two constraints that are overlapping. Can I have cell 80 again then? Cell 80. So, let's do some straightening doing that based on. The two ones at the top. These two. So, you want to subtract those from each other, and that will produce not cell 18. Cell 32 can be cleared. Cell 18 is a mind in my opinion. No, we can't say that. Two top ones. There could be a mind either of these two and it would satisfy both of these. Have a chocolate! Who's next? Anywhere else we can subtract. Someone else! Run, Gavir! Don't give the microphone to this someone! We've got... Right, where do we subtract? I don't know. OK, this one. Does anyone see any other cell which would create a constraint which is a subset of this one? The one in the middle. That. This one? Yeah. Yeah. Pick a number. 1930, 347. 19, 33, 47. Yes! Because we subtract these constraints from each other. There must be a mind here, so there can't be one in any of these three cells. We subtract these two constraints, one minus one is zero, there can't be any minds in these. Good job! Have a chocolate! Right! I forgot that one! Someone from this side! Anywhere else that we can subtract two constraints. One of them is that one. A cell that produces a constraint to the subset of that orange box. The one above it? The one above it. I really need to start doing it. Pick a number! Oh, God! Number 19. So this one. So neither of those is a subset because they only overlap. We need one constraint which is entirely contained within the other. The one that I had in mind was this one. So this one says that those two cells must contain one and that's entirely contained within the orange section. If we subtract those, then we actually have the four says there are four minds in its constraint and the one says there's one there which means that the remaining three cells must all be minds and we can mark them like that. Are we kind of generally following? Yeah? So, I have your twenty-five one more that we can do and then we'll go back to you. So this three, there are four cells there and it says there's one mind because it's already got two of them. So we know that exactly one of these four cells is a mind. The constraint created by this one is a subset of the orange one. That means that we could do subtraction. In this case it makes sense to because that blue constraint also contains exactly one mind which means that the bit that is only orange here but not overlapping bit contains zero minds. If we subtract, you see, it's going to create two cells of zero minds and it's been cleared automatically for us because we know that it can be cleared. So, Davy is broken temporarily and we've just turned it back on. We can see that this one is clearable because that one is already satisfied and then all of these are satisfied. We've hit some zeroes and automatically cleared those. So, I reckon that some of you now are going to be able to tell me where we've been subtracted. So pick two cells with overlapping constraint. Where one constraint is a subset of another. Ten and twenty-four, yes. So this one says that those two must contain one mind and this one says that those three must contain one mind. If we subtract, we can clear that one. Davy will tell us that we can clear this one because there are only two places for those minds and then we can clear this one because they're already satisfied. So, is there any or else that we can clear? Can anyone see anywhere when we have two overlapping and two one constraint a subset of another? Yes. Next to that three, you have that two that there needs to be a bond either in seventy-one or seventy-two, so fifty-six and seventy are not a bond. Seventy-one or seventy-two, so fifty-six. Fifty-six and seventy you can clear. That sounds like something I haven't taught you yet. Yes, you will come round to that. So, you're actually back on. This is something that we can't do yet. There is no subtraction we can do here because there are no two constraints though one is an actual subset of another. However, there are some more advanced techniques so this is a technique that I'm calling reduction. That's what we call it in the army. Yes, Bron. What about clicking wildly and then saying it's just hunkering? What are you saying? We're in the military now. A military protocol says that you can't just go randomly walking across a minefield. In fact, no matter how hard I click this, it won't let me die and you must use the B-strains because let's work on this, right? That's right. This says that these three cells must contain exactly two miles. However, that also says that any two of those three cells have to have between one and two miles because the cell that isn't inside those two can either be a mine or a baryism. If the one that we exclude is a mine then there'd be one in these two. Let's say if this one was a mine then there would be one mine in these two. If it wasn't a mine then there'd be two in these two. So, we can do that for any of these three cells. If we click reduce it will create three new constraints down here. One that says there is one to two miles in these two one that says there's one to two miles in these two and one that says there's one to two miles in these two. If you're thinking about it that now allows us to do some more subtraction. For example, previously this two didn't wasn't a subset of the one but by removing one of the cells in the constraint giving us that little bit of uncertainty we can now subtract it from the one. So, there is one to two miles inside this orange constraint and there's exactly one inside the blue constraint so we know there can't be two in the orange constraint and we know that there isn't any here at all because they're all inside the orange constraint and subtracting it will show us that and let us clear that one set. We can then just go back to our normal subtraction. We can do the two in that section there's only one in the orange constraint and we can go back to our normal clearing. There you go, success! But there are even more complicated constraints. Sorry, even more complicated set up such as this one. This is actually a commonly given example as to why mine is sweeper is empty at least but we can kind of solve it here mostly because we're humans. This two, if we reduce it and take this constraint we can subtract from the corner two which says these five cells have two in them but we know that these orange have one to two in them. Subtract that, we get a new constraint which says these three have zero to one cells zero to one lines and then we can do the same on the other side reduce this constraint, take the bottom one and subtract that from our new one and we can actually say that that corner cannot be a mine because we know at least one line is in the two above it and at least one line is in the two to the left of it. That satisfies between the corner and that's a solve that and from here we can just work our way around with basic clearing and flagging, no subtraction required. There is one other button that I have here which is merge and I'll briefly explain that to you. Essentially, sometimes we can end up with constraints down here which constrain the same cells but with different upper and lower bounds. If we have two constraints which constrain the same cells but one has a higher lower bound and one has a lower upper bound we can merge those together and take the highest lower bound and the lowest upper bound. For example, if we reduce this one and take that one, these two and then we reduce this one, sorry this is a little bit complicated but it does come in handy. So we can then subtract these two and we can say as we have before that this contains between zero and one lines. Obviously that means that these two also can take between zero and one lines which is this constraint but now these two constraints are both constraining the same two cells. One says there's between one and two lines and one says there's between zero and one lines. But both are close to be true but can only be true that there is exactly one line and in fact we can merge it and get a constraint that says there's one line. I'm not sure you're going to need that but you might do depending on how you solve this next bit. Going back to the things that we've just learned take a moment and take a breath. Have a look at this and see if we can see anywhere that we can use reductions and subtraction to solve this. Hands up again. I've got a lot of chocolate to give away. Yes, cells. Here we go. 74. 74, yes. Why? Which constraint are you basing that on? I'm basing it on cell 72. So these two. So there's already one. Yep. So if we reduce the two, sorry, reduce the two we turn those on. So if we reduce the two and take the right most two cells and that says there's between zero and one cells in there which doesn't tell us anything about this other than that there are zero to one cells in there as well. So we can't be too sure because the two already has one bomb next to it then all we can say is that there is one line here meaning there's between zero and one here because it might be here then when we subtract we just end up saying again there's zero to one. It's zero line. This one here? Yeah, that one doesn't have a line. Because there is one that's two. Right, yes. We've just done this the wrong way. So this one subtract, this one is what we wanted. This one says that these two cells must contain one line. This one says that these five cells must contain one line. Obviously the only place of mind could be isn't the orange and we subtract. That was my bad in interpreting instructions wrongly. What we follow through with is clearing flag. I think we can end up clearing all of this. Good job. Anything else that we could do? Can I have cell 18, please? Cell 18?  You can't say anything about cell 18. She wants your designs. No, it's literally impossible. I haven't coded the functionality of just collecting a cell. I made this. We'll get that. Cell 97, please. Cell 97. OK, so cell 97 is quite a mess. Should have seen that one coming. One of the things that we looked at quite a bit before was looking at these ones and twos that overlap. So I'm going to throw it out of that straight away that we can reduce this two and just take the two left of the cells. So we know that there are between one and two but mind is orange section. If we subtract from one we can say that there is zero nine inside the green because there is a minimum of one, a maximum of one and we know that there's at least one, so yes. We can know that there aren't any minds there. If we layer that, it allows us to follow through with these very basic clearing and subtracting until we get stuck again. But there are still some other places that we could add clear and some subtraction that we do. I'm not... You don't even need directions here. So you've seen this before. Can anyone see anywhere where we have two overlapping constraints? One is a subset of a number. Yep, numbers, here we go. 81, 82. 81, 82. Yes, so these two overlap, they're not quite subtraction but we can reduce the three, we can take the two right-nose cells and then we can subtract those two cells from the two and that's going to tell us that there's between one and two minds inside those three right-nose ones. Do we see anywhere else that we can go from there? 91, 92. 91, 92. So that's... Do you mean these two? Yeah, one, four, three. Yeah, so if we reduce the four that we want, yep, take the two right-nose cells from there and then subtract that from the three which is actually one and that can clear that set. Good job, I've been really forgetting about these. You just need a shot, have you? Yes. You can get out one as well. Good job, right. So we've managed to clear that three. Where else can we do now? That's actually opened up some new possibilities for us. Here are the numbers. Next to that four, it can clear that 61. 61, is this one here? Yes, and I think it's the same because of this. Because of these ones, yeah. So the one that says that these two must contain one, mine and the four, it has three of its forms already so this L shape contains one, mine. If we subtract those, we can clear that one. That one cell. Yeah, you can just keep going. Anywhere else that we see? That three just opened up another chain thing. The three opens up. So can you keep the numbers? Yep, here are the numbers. 75 is not the mine, right? Because of that three that just appeared. So it's because of the same rule. 75 is not the mine. What else are you combining here? Which two constraints? The constraints of the four lines are 45 and 69. Yes, these two. Fantastic. So yes, the three has two of its lines already. We know that it must be satisfied by those two cells and we can clear that up. We can keep going. We're not stuck, yes. Three of the four here are the numbers. 74 and 75. 74 and 75 are, yes. So if we take these to you, yes. So the four says that three of those four cells are the nine and the one says that two of those three cells are the nine. There's only one cell left and it must be a nine. Now we can mark it. We can definitely keep going still.  I've got six bags of pombex. Fantastic. You're going to find somewhere that you can subtract. That's great. There you go. Yes. There you go. Right, yes. Right. Did we see anywhere else? Anywhere else we could subtract? Yes. Yes, there we go. 26 is clear. Are you doing this based on these two? No. 26 is clear. Are you doing this based on these two? Yes. No. These are both just because of the ones. So if we reduced that to three, and that would give us, we actually can't, we won't let us, because it's still defining meaningful information. Most of the things that it reduced to would just mean this cell is either a mine or not a mine, which isn't something that we can reason about. Because we know that anyway, that's kind of just a base rule to go. Or is that, am I missing something? I'm missing something. Another number. Another number is yes. 76 and 77. 76 and 77. These two constraints, do you want me to reduce the four? We can't reduce the four. We can't reduce either of these. Where? Right, I'm going to click this button. What it has done is it's changed this to show the remaining number of bombs rather than the current number. Where can we sell? Sell 83. 83 is over here. And how are we doing this? Which constraints? 68 has got one mine next week already. We've got a change to show us the remaining number. That's way three. But you want me to, yeah, can we do this? Hang on. Right, so yeah, there we go. 93 and 78. 93 and 78. Can we subtract it from each other? No? Right. What I'm looking at is this number. 73 is 78. 93 is 78. 93 is 78. 93 is 78. 93 is 78. 93 is 78. Can we subtract it from each other? No? What I'm looking at is this, no, sorry, these two. This three says that these three cells must contain two mines. But this three also says that these two must contain two mines. That helps to solve that one. And then we can hopefully just follow these through with clearing and flagging. That was a bit of a pain. And here actually, one of the constraints that we produced earlier by reduction, let's just say that that one's clear. Because the two we said were one here, we know there was one, so this one couldn't be a mine. And we can follow these all the way up. And in fact, we can follow basically everything all the way up. It just leaves this section. I'm just going to come out right now and say that this is actually impossible to solve currently. You can't say there's two options here. The mine could be there, and it could be there, and it could be there. Or there could be one here and one here. But actually, we know the total number of mines because the bodies and the espionage parts have totaled the number of mines. And this is your final part of training. Let's do it. Jesus Christ.  I don't want to trouble you. Have you got any more corn trucks? There you go. Right, so, looking at the fact that we now have a total of mines, this board has six mines. We can use that like any other constraint. We know that there are three mines in this section, so we can subtract these two constraints. There's a few constraints. There are seven cells in three mines. We can do the same on the other side and get down to the fact that there are now no mines in either of those top two cores. Because we know that there are six, and we recounted for all six. After that, we can just follow these through. And this is solvable with the subtraction overlap as subtraction and reduction stuff that we talked about earlier. So, if we now know the total number of mines, right, does anyone see what we can do with this? Here are your cell numbers. It's worth a chocolate. Sixty. Sixty. You can subtract this constraint. We have this constraint with five and this constraint here is a subset of that. Yeah? Right in that moment constraint, there are two mines in the orange. We can now say that in that remaining orange constraint there is one mine. We can do the same back up here. And we can subtract and we can answer that there are no mines in that top section. Because, as I said before, there are two options. There are either two mines or three mines. We know that there are only two mines, so we can just accept that solution. We can then follow it through and we have solved this mine field. So, you said that there are only two mines. We said that there was no way of knowing and there isn't. Until we got to the very end and we counted for all the other mines. So, well done all your crew. You have successfully cleared your first minefield. There are only 14 more to go today. And then you'll be able to return home to your wives and families. Thank you very much for listening. Have some more chocolates. This is not going right. Don't do it. Don't do what? Do the chocolates. Right, there you go. Right. That was how to sell a minefield from Polydeumio Time. The answer is use humans and not computers. My name is Stephen Waterman. You can read the code for this on github at Stephen Waterman. I've got a website, StephenWaterman.uk. There we go, even better. Yeah. A company told me about what just happened. I hope you enjoyed it and I hope you have a good rest of the evening. Thank you very much.


Welcome, everyone, at this press conference about capital markets. Actually, the official title is Accelerating Capital Markets' Development in Emerging Economies. And we're looking at the country case study of Colombia. That's a very long title. And so I'm going to ask one of my speakers, André Bilello, to explain a little bit what that means. And then afterwards we'll hear from Minister Cárdenas about his vision for the development of Colombia's capital markets. And then we have a special guest today that we welcome, Minister of Trade. Welcome to all of the speakers, and thank you to everyone who came to the press conference. Let's dive right into it because we have only 15 minutes, and I'll start with André. André, you have made this report with your team to talk about the capital market of Colombia as a case study of how capital markets can drive economic growth. Could you explain briefly to begin what the situation of Colombia's capital market is? And then tell us a little bit more about what recommendations you have to develop the capital markets in Colombia. Thank you, Peter, and thank you, Minister, for taking the time for the press conference. It's an honor to be up here with you. As context, this report is part of an initiative that we've run at the forum for two years now on accelerating capital markets' development in emerging economies. We started in 2014, given the increasing importance of capital markets, especially to long-term investing, as well as the fact that in a lot of emerging economies the size of capital markets remain somewhat underdeveloped compared to the current size of the economies and the potential those economies have moving forward. Colombia had a decade of very impressive growth of their capital markets, and like many emerging markets, at the end of the commodities boom a few years ago, have now been facing a few difficulties, a few headwinds. This is not exclusive to Colombia, and I should mention as well that this report covers Indonesia as well. Capital markets is a very broad topic, though, so in conjunction with the ministry and in conjunction with market participants here in Colombia, over which we interviewed about a hundred, both in Colombia and abroad, the idea was to focus on the equity market, particularly the depth and liquidity in the equity market, which was seen as being somewhat below the level of some of Colombia's emerging market peers. The report contains various action areas that have been recommended by the market stakeholders. I should add the forum did not write this report. This is really a reflection of those who participated, both from the public sector and the private sector side. And there were four kind of action areas that I'll mention very briefly that were seen as the shortest-term priorities. The first one is creating additional investment opportunities in the market, broadening the investor base. This was one that was mentioned many times, both in our interviews and in an event we did that the minister attended in Bogota in December, approving market access and efficiency, and finally attracting global interest from the foreign investment community. And these were the four key areas. Could you explain as briefly also why you think that it's beneficial for Colombia to work on these areas, and perhaps telling us first a bit about the size, some key figures of the size of Colombian capital markets, and then what the potential benefits are for the economy to work on those? Sure. In the annex of the report, if you look at the global competitive support that the forum publishes every year, Colombia has been steadily moving up the rankings over the last two to three years. It actually, in many respects, is ahead of Indonesia, which is the other country in this report. And what's interesting is over the last couple of years, the area or the pillar of that report where Colombia has done the best and improved the most is financial market development. And there's been a clear link between financial market development and economic growth across many countries. And as I mentioned, Colombia had a long period of very strong growth. Part of the reason that we chose Colombia as well as the fundamentals are very good as well. Investor protections are the best in Latin America. They're top 10 in the world here in Colombia. The market, as I said, has been growing quite substantially. And Colombia is also in the process of embarking on its largest infrastructure development plan in its history. We heard the President mention earlier today that peace is nearing with the final negotiations. And estimates suggest that between 1% to 2% additional economic growth may come from that as well. So Colombia is increasingly being seen as an interesting and important investment destination for foreign investors. And building up the local market with domestic players as well can only help with Colombia's long-term growth points. Last question before I turn to Mr. Katinas. I just wanted to get those key figures from you. The number of companies listed on stock exchange is an interesting point to talk about. The free float, the average free float. And if you have any other number that you can share with us about the key numbers. Yeah, there are fewer companies listed on the Colombia stock exchange than their peers here in Latin America. About 70? 74 I think is the exact. And a lot of large companies, Ecopetrol for example, are a lot of the market capitalization that's here. And actually speaking of stock markets, another area that I didn't mention that I'm sure the minister will mention as well is Colombia's integration into Mila, the integrated market, the Pacific Alliance which is another positive factor for investors when they're looking at Colombia. The market capitalization of the Mila stock exchanges now which are Mexico, Chile, Peru and Colombia is now larger than Brazil which is the largest capital market in Latin America. Okay, well thank you for those points and for your insights. And now I want to turn to Minister Kerenas. And perhaps what I could ask from you is what your vision is for the development of Colombia's capital markets and what your priorities are in your administration time. Well, thank you very much. So let's do this in two steps. One, I'll answer some of the questions in English for the English-speaking audience and then we could do some comments in Spanish. To speak Spanish, there's instantaneous translation, so that's okay. Okay, so just a word in English. The World Economic Forum has kindly offered to Colombia a debate on two key issues, capital markets and financial inclusion using the framework of the web which means engaging in a conversation, the private sector, the academia and government. So we've had two roundtables, two working days, full working days in the last six months with the different players on these two topics. Here we're talking about the capital markets initiative. And after the research that was conducted by the web, after listening to all the views of the different participants and players in the capital markets in Colombia, we've come to a set of conclusions on what are the priorities, what needs to be done. Let me focus on what we think is the most important aspect of that, which is the integration of our capital markets within the context of the Pacific Alliance. The Pacific Alliance has been a great initiative for promoting trade. The first aspect of the Pacific Alliance was basically on the trade in goods and services. Now we're taking a step beyond, and we're going to move into the integration of our capital markets. What is the initiative here? We want pension funds and other institutional investors to work in the four countries as if it was their domestic market. That means that our institutional investors can have a regional market. So the restrictions that apply are lifted if a Colombian pension fund invests in Peru in the stock exchange or buys bonds in Peru. That should be considered as a domestic investment and should not be computed under the ceilings of foreign investment. Same for us. We want the Mexican, the Peruvian, the Chilean pension funds to come and invest in Colombia, and we need that, especially now in the context of the infrastructure plan, the 4G, because in the 4G we need more muzzle, we need more investors, to deepen our capital markets to make sure that these projects find adequate financing. That's one aspect of this. The second element here is the use of the capital markets in order to promote growth in the small and medium enterprises. It was already mentioned that the size of our capital market has been increasing. Certainly the market capitalization of our stock exchange has increased. That's for sure. But that in a way is a reflection that the bigger corporations in Colombia have grown. But now we need more participants. We need more listed companies. So we need to push aggressively the benefits of the capital markets for more companies to participate, especially the SMEs. This is part of our vision, the vision of a new economy, an economy where the private sector has the right incentives in the financial markets, in tax policies, in issues related to education, infrastructure, so that in the manufacturing sector, agriculture, tourism, the export of health services, for example, can actually take the lead and be the sectors that grow in Colombia at the fastest pace. And for that, we need access to the capital markets for those players. So in some, we are seeing our capital markets development as crucial for this new stage that the Colombian economy is entering, where again, it's the private initiative, it's entrepreneurs, it's innovators that will play the key role in stimulating and taking the lead in our economy. Thank you very much. And so I remember from that, that we'll see within the Pacific Alliance hopefully one day all investments, as if they were domestic investments, which would bring more muscle as you sit into the development of capital markets, and that should allow you to work on that new economy that you were talking about. Is there anything specific that you would like to mention or should I turn over to Minister La Couture to make an announcement about her specialty, which is trade and industry? Well, thank you for the invitation, and I do apologize to getting the press conference as we did, but we wanted to share a little bit more about the development of Colombia as a country that have new opportunities and also the industrial development that we have been going through the past of this year. If I may allow, I would like to talk in Spanish so it can be easy to understand by our colleagues here in Colombia. One of the things that we were mentioning and the reason why Minister Cardenas invited me to participate at this press conference is because of the wonderful results that the Colombian industry has had year to date. One of the most important opportunities and actually one of the main reasons why the World Economic Forum decided to stage this meeting in Medellin, Colombia is precisely because of the change that the country has undergone in recent years and also because of the transformation taking place, not just in industry but also in each of the different sectors. The results of the survey and the industry numbers published today are evidence of that. We see that the joint work done by the Ministry of Finance and by each of the ministries that impact industry are bearing fruit. Colombia has a positive result today of 8.4 percent and if we compare that to 2015, it was minus 2.6 percent at the time. So we've seen a growth not just in numbers but in sectors as well. We now have 29 sectors that are growing and have had positive benefits and this is supplemented by industry's response and also more sales 8.8 percent and in employment we have seen a 1.1 growth in formal employment which brings about not just long-term growth but also constant growth and also the formalization of jobs in Colombia and that is what we wanted to tell you and thank you for giving me the chance to tell you. There's an enormous rebound in economic growth in a certain part from minus 2 percent to about 8 percent year over year if my Spanish is good enough and otherwise I will listen to the translation. But I want to thank all of you to come here also to Minister Lakotur for your announcement, Minister Kerenas and Andrei Belelio from the World Economic Forum. If you have some time to answer some questions I would suggest perhaps that we take the conversation one-to-one with a few journalists outside informed that we have another press conference coming up here in about 8 minutes and we'll have to make room for that. If you allow me to say one additional word in Spanish. Please. As pointed out by the Minister of Trade, Industry and Tourism the data published today by Dane in respect of industry growth and these sectors' sales numbers are fantastic and reveal that the industry is the leading sector of the Colombian economy the sector growing at the highest possible rates and this isn't just the Cartagena refinery that does contribute, no. This includes 29 sectors that make up our industry and this is a very important and positive piece of data and what is driving industry in Colombia? Well, imports substitution. Colombians are now buying Colombian products that have a better price compared to imports and have nothing to envy in terms of quality so sectors like the garment industry, the shoe industry, beverages are all sectors with very positive growth rates and as far as sales are concerned the growth in total sales was 5.4% in April 5.4% in April and the important thing is that for the first time car sales increased again and these had been seriously hit by the revaluation of the peso and now we see positive growth in car sales and this is very good news for the automobile industry because we now have a positive car sales number so in short the new model, the new economy driven by the sectors led by Minister Maria Claudia La Couture is a model bearing the expected results. Tourism, industry, trade are all sectors that are driving the leadership and are driving the engines that will let us have a 3% growth this year which is very positive because it's a very complex international situation 3% growth is a favorable result that the positive results also come from import substitution which shows the strength of the industry and the economy thank you everyone for your attendance and if you have further questions let's take them outside thank you so much


This is stock number 70520A. We're here at Summit Automotive in Fond du Lac, Wisconsin. You're new and used Ram heavy-duty headquarters. Today we are checking out this Ram 3500 Megacab with a flatbed on it. This truck has a 6.7 liter Cummins diesel. From this HD video, you'll be able to tell that this truck is extremely clean for the miles inside and out. No dense dings or cracks on the front bumper. Bright white as the color. Cooper Discovery HD tires. These are LT 23580R17s and they have about half the tread left. We shoot all of our videos in 1080p so if you have HD capabilities on your computer, tablet, or smartphone device, turn them on right now because it's like you're right here looking at the truck with me. You can see any dents or dings or cracks on that front bumper. It does have the factory wheel simulators and it has to go down this side of the truck very clean. No major dents or dings. The truck's been very well maintained on the outside. It has factory chrome step bars. All the rockers look really nice and clean underneath. No major corrosion. It has an iron star flatbed on it. The bed itself is in pretty nice condition. It's got a couple little nicks and scuffs and stuff but for the most part, nice and solidly intact. It has a headache rack with all the LED lights on the top. The back tires have just as much tread as the front tires. The frame and underbody. It's in really nice condition as you can see all the way underneath. It has a straight pipe exhaust on it. Sounds really good. It has the receiver hitch and seven pin wiring. And as we go around to this side, the vehicle just as clean as the passenger side. These doors are just as nice as the doors on the other side. And once again, I didn't see any major corrosion on the lower rockers. Inside this truck does have the Laramie package which gives you the tan leather interior. Or khaki, I guess they call it. Power driver seat. Both these front seats are heated. We have factory all other floor mats and regular floor mats inside. Power windows power locks and power mirrors. It has the Infinity premium audio system, the power pedals. And then you have all your controls for your lights and back. This one has an H&S programmer. Also you can see that it has 128,493 miles. Comes with the single CD player. Dual climate control has the aftermarket electric brake controller. Truck's never been smoked in. Smells very clean inside. Has power side and rear window.  Pass and receipt, no rips or tears on that either. And the headliner is in really nice condition as well. No rips or tears, compass, temperature, mileage display. You also have a homelink system for your garage door security systems and lighting systems. And this one does have the Uconnect system in the mirror. And all weather floor mat on that side as well. And you got cruise controls on the steering wheel. Take a quick look at the back seats and then we'll check out under the hood.  No rips or tears back here. It does have the latch child safety system for your car seats. When you're taking your kids to the work site. These seats do go down nice and flat. And it does have the power slide rear window and we have latch tether anchors and back as well. Factory all weather and the regular floor mats back here as well too. For the miles and the fact that it's a work truck, it's in really nice condition. Under the hood we have the 6.7 liter Cummins diesel, S&B cold air intake. Engage bay is very clean, runs very smooth. This truck has been fully safety and inspected by our service shop. Has a fresh oil and filter change. All the fluids have been checked and topped off. And the truck has been gone through mechanically 100% and is 100% ready to go. See more pictures of this truck or one of our other 400 new and used cars, trucks, SUVs, minivans, wranglers. Half tons, recorded tons, flatbeds, dualies, you name it. We got to go to our website www.summitauto.com. Full pictures and descriptions of every single vehicle on our lot. Videos of every single used vehicle that we have all at www.summitauto.com. Thanks for checking out the video. If you want to make this one yours, give us a call right now 920-921-850. Ask for one of our sales associates to make this Ram 3500 mega cab yours today. Once again that number is<PHONE_NUMBER>. Thanks again for checking out the video. If you like and want to check out more, go to www.youtube.com. Remember to like, subscribe and share on this video and all the videos over there. In fact, in a second you'll see a link to subscribe to our YouTube channel on your left. A link to more used inventory videos like this one on your right. If you haven't been to our website on the bottom, a link to this vehicle on our website. Click those, check us out and we really look forward to helping you with this super clean 2008 Ram 3500 mega cab dualie flatbed. Thanks again.


This week's Eye on MPVI brought to you by Digikey and Aina Fruit is TDK. TDK InvinSense. InvinSense was purchased by TDK and emerged and so it's both but we'll call it TDK because that's the the main company name. So this week we actually kind of covered this sensor as part of like the sense bug, a little like sensor bug from TDK like probably a year or two a year or so ago. But this week we're going to focus on a sensor that just popped in on Digikey new. It's the ICP 10111 but there's also the 10101 and 0010. We'll talk about that. This is a barometric pressure and temperature sensor from TDK so it's great as for use for temperature sensor and measuring weather changes so you know you can tell when you're at a low pressure or high pressure system. But what it's mostly used for is as an altimeter and this sensor would make for a great altimeter because it's got this really nice ultra high precision high accuracy mode of one Pascal plus or minus one Pascal for relative measurements when you do the oversampling mode. One Pascal is equivalent to about 8 centimeters or so which is great. I mean comparing this to you know from you know 5-10 years ago the sensors were often only good for about a meter or so of altitude. Again not absolute but relative so it can tell how high you're going up but the absolute measurement might have different error rates. Still you know you're talking about a couple microamps it can you know go into quite a good deep sleep mode and get you you know high-quality altitude measurements that barometric pressure measurements that you can then convert into altitude measurements. Another thing that I think is neat is this sensor actually comes in four packages basically. So this shows this is the ICP zero zero and ICP one zero zero zero one. So this is the two millimeter by two millimeter this is the smallest package and you'll see the one on the right you see how there's like a hole at the top and the one on the left it doesn't have a hole but that's weird right because barometric pressure you need to have some air inlet. If you look really closely at the image you'll see three micro laser holes like really small dots. These kind of remind me of the holes on like if you have a MacBook and there's like the built-in camera when the camera's on there's like a glowing green light that comes next to the camera and those are like micro laser holes. So these holes are so small that it can allow air in to do barometric pressure measurements and temperature but it's waterproof down to like a couple meters. So you know yes you could put a gasket on it and on the one on the left and use it exposed to water but also just means more durable like you're not going to have the issue of possible water ingress or you know maybe water you know if you're moving from a high humidity to a low humidity area or the other way around you get you know dew forming on the sensor and possibly moving into it. I like that there's two options I think the one on the right probably will have a bit better accuracy because it's less likely to get dust stuck in it but the one on the left yeah it's IPX8 rated which is which is really good for a sensor that does barometric pressure sensing but it doesn't seem to have a gel. So you know what would you use this for you know the TDK is really promoting this for mixed use with a GPS sensor use a GPS sensor to give you your altitude sorry your latitude and longitude and then GPS does do altitude as well but remember GPS is only good to like plus or minus you know five to ten meters you're not going to be able to get you know very precise step-by-step altitude measurements and of course indoors it's going to be even harder to get a good GPS fix you may not be able to get a 3d fix maybe get a 2d fix in which case you could use a barometric pressure sensor which of course works all the time indoors wherever underwater and uses a lot less power than GPS as well so here's another interesting thing about this which I kind of like because you know we carry a bunch of barometric pressure sensors of course the most popular the BMP series we also have the DPS series and I like that people are sort of settling on a packaging pinout so this package is the tube millimeter by 2.5 millimeter and if you're like hey that looks familiar yes it is DPS 310 and BMP 280 pin compatible for I squared C usage it's not compatible for SPI it doesn't support SPI but if you're using I squared C which a lot of people are this is physically and pin compatible so if you're one of the people like me who you cannot get some of these sensors like there's they're out of stock because of silicon shortage you might be able to swap in this sensor it's in stock right now at digikey and with a little bit of code change adapt your design to use the ICP 100 xx series it's stuck for now quick go and then this is the tube by two millimeter one this is I didn't solder this so I'm not a hundred percent sure so you don't double-check me but I believe it's it's pin and physical compatibility with the BMP 3 series again I squared C only but I really like it when there's you know either some sensors I like but you don't want to not be able to ship your product because of or you don't need to re-spin your board design because one parts out of stock that that happens but now it's like it's happening constantly so this was I think really good timing for this sensor to be released another cool thing the datasheet has example code and see and in Python which is like so cool not you know yes it's a nice type of driver what's even better if the driver is so short you can fit it into the datasheet in two or three pages and this is the C code so I cut it off it's much longer but it's in the datasheet so I thought that was quite cute and here you can see at least at the time of this writing thousands in stock of each version the 2 by 2.5 versions of the top and the 2 by 2 versions at the bottom again one is IP x8 one is not you know pick and choose whichever you need but the one that you're most likely use the ICP 1011 in stock right now I'm even working on a library for it but the code is quite simple compared to most you know most barometric pressure sensors they give you again the example code in Python and C and you can really hit the ground running so this is a also it's a very high precision sensor if you have a design with other barometric pressure sensors maybe you could upgrade it get that one Pascal accuracy for differential measurements available John did you key this is the code if you want to just type in numbers four two eight one four five two and then there's lots of different ones comes on reels and all that and then there's a short real there and we have a short video you want to show I'll just show this device or do you want to do the video first let's just show the device real fast we've got the video and then we'll be out okay so this shows you see this is the version you can see this has a little hole in it and this one again you can't see the hole because they're so freaking small they're like yeah I mean you can barely see there are micro holes in it but so small and that's what lets it be waterproof to you know IP x8 and then I soldered this onto my BMP 280 breakout and it worked fine so yeah this is a nice little sensor I like one Pascal I like I squared C I like the simplicity and I like that it's in stock all right and we're going to play this short video from TDK pressure sensors are used in wearables smartphones drones and many other devices to track changes in elevation for activity monitoring indoor or 3d navigation and other motion or position based services TDK's invent sense barometric pressure sensors use a capacitive MEMS architecture that directly converts deflection of the sensor diaphragm to an electrical signal and offers better accuracy and lower power consumption than PA's resistive pressure sensors providing users with more reliable data and extended battery life the invent sense ICP one oh one oh one and ICP one oh one 11 pressure sensors have a plus or minus one Pascal relative accuracy and come in two by two millimeter small LGA packages this high relative accuracy enables the measurement of altitude differentials as low as eight centimeters allowing the detection of individual stair steps and small vertical device movements available on did you get that's right it wasn't stock as of today you need a sensor go get them


With Stevenson head basketball coach Gary Stewart in the post game here, 82-47 the final, the men defeat Hartwick College and Gary you and I had a chance to talk today before the game and you said that you know after the loss to Catholic you still need to find your footing a little bit and I think you probably did find it tonight just a little. Well we did make some progress in some areas but obviously there's some stuff that we still need to shore up and clean up unfortunately we don't have a lot of time we've got to get back on the floor tomorrow but anxious to get back to practice and and try to make some inroads on some of the things that we desperately need to get better at. There's a lot of things to talk about and a lot of things that were impressive tonight but a couple things that stood out the hustle first of all a lot of bodies on the floor a lot of loose balls player Connor Walsh throwing his weight around in a good way just talk a little bit about that aggressiveness that you guys showed tonight. Yeah one of the things that I talked to the team about both during practice and shoot around a day we've got to be more aggressive more assertive I thought that the first game of the year we were back on our heels a little bit and you know we've got to take some shots we got to get in the middle of the ring and take some shots and continue that type of intensity and today was a good start to that. Thirteen players got onto the scorecard for Stevenson tonight none of them had more than nine points so just talk a little bit about the depth and how please perhaps you were to get a lot of players in the flow tonight. Yeah one of the things I really liked was 15 guys got a rebound and so it's always nice to get your entire roster into a game when those guys are really working hard to improve and as a coach you root for guys too as well as coach them and so it was nice to to get deep into our roster and then the other piece of that Gary was as you mentioned we got a lot of contributions from a lot of different people we didn't have one guy put up a crooked number we had a lot of people that contributed tonight. Thirty-one turnovers they had and a lot of that was because of your pressure I don't have the number in front of me but I think you may have had 19 steals kind of Walsh himself had six or seven steals so again towards that you know throwing your body around and making things happen but also just some other impressive contributions. Miles Jackson great burst big first step nice penetration I mean in a lot of different corners and a lot of different places you can take a lot from this game. Yeah I was particularly impressed with our refreshment you know Brian had composure at the end of the game when he came in Miles was able to get into the lane and create some havoc there and finished a really tough difficult to lay up. I really like the way Zach played you know Zach took really really good shots he's as good a shooter as we have in our program so it was good to free him up a little bit and and then Ryan who we're really really high on and excited about him as we are with Kyle and and Kendall and and and the like so it was it was good to get everybody in there. Yeah it's interesting about Ryan Newell I was saying in the broadcast it's like you don't have any six eleven or seven foot guys but you have a good stable of six six six seven guys that you can rotate in and out. Ryan Newell brought the house down a couple times tonight you got to be pleased with that. Yeah we're really working to try to continue Sodexo's business in the dining hall there and and get our guys a little bit there you know there's there's two things you can do here gear you can be tall but you can also be wide and so we're making an emphasis to get in the weight room our strength and conditioning coach MC McFadden's done an excellent job with our kids and and and I think that showed today I think that showed not only in their conditioning but I thought our strength our strength at the point of attack was much better than it has been in the past and and not to not to mitigate what Tony did priority MC because Tony really started this MC has taken the baton and elevated it and so we're in good shape that way. Okay so a quick turnaround now four o'clock on Saturday or thereabouts you'll take on main maritime I don't know if you had a chance to see them today or not but they played the first game they beat FDU Florham 65-56 your your what happens in a quick turnaround situation now for your team what do you actually tell them? Well we did get an opportunity to see him and we've also watched him on film and they're very very disciplined and patient and and they've got a young man that's going to shoot it as well as anybody will see all year so we've got to get out to him they're poised they take really really good shots and and they give you one shot and out so it's going to be a challenge for us and I'm looking forward to seeing if we can make a little bit of growth in a game that's going to require us to be really really disciplined and really really sound I thought tonight we got a little bit unsound defensively we've reached a little bit too much for my my taste so we've got some things that we have to improve on and hopefully in a short amount of time we can get that message across. That's the last word Gary Stewart head coach Stevenson basketball big one tonight over Hartwick


For the first time in human history, the number of forcibly displaced people in the world has crossed 100 million. Endemic violence by state or non-state actors, wars, conflicts and persecution are the main factors driving this displacement. These are the findings of the UN High Commissioner for Refugees or UNHCR. The number of forcibly displaced people was already historically high before the war in Ukraine began in February this year. That war however has pushed the number to above 100 million for the first time. Number of displaced double in a decade. More than half of the 100 million that is close to 53% are internally displaced. According to the Internal Displacement Monitoring Centre, the total number of internally displaced people has more than doubled between 2012 and 2021 from 26.4 million to 59 million. Of this, the number of forcibly displaced is more than 90%. This number also includes those displaced due to causes other than conflict such as natural disasters. The total number of displaced people had increased from 41 million in 2012 to 82 million in 2020. In the last one year, it reached above 19 million. The rise in the number of displaced in 2021 was attributed to fresh conflicts like in Ethiopia and existing conflicts like in Congo, Afghanistan and other countries. The big jump in 2022 has been recorded due to millions fleeing the war in Ukraine. The Ukraine war has created around 8 million internally displaced people and close to 6 million refugees across Europe. Majority of the forcibly displaced come from Global South. The total number of displaced people is now 1% of the global population and despite the war in Ukraine, the majority of the displaced population comes from West Asia and Africa where most of the wars and conflicts are caused by imperialist aggression or external interference. Countries such as Afghanistan, Syria, Ethiopia, Democratic Republic of Congo, Burkina Faso, Sudan, Somalia and Yemen are the major sources of forcibly displaced people. Refugees and stability is the solution. Much of this displacement is caused by the world's failure to address some of the long existing conflicts like the Israeli occupation of Palestine which has created and continues to create an endemic problem of refugees for several decades now. In some cases, rise in state persecution of minorities such as the Rohingyas in Myanmar and minorities in Afghanistan have created millions of refugees. Despite the presence of a large number of groups and international agencies like the UNHRC, internally displaced people and refugees are forced to live in humane and undignified lives due to lack of economic resources and political will in rich countries to support them. Unlike Ukrainian refugees, most of the refugees from third world countries have faced discrimination and in some cases violence from the rich countries in Europe and the US while seeking shelter. Such double standards on refugee issues have been noted and highlighted by several commentators in UN agencies since the beginning of the Ukrainian crisis. Commenting on the fact that the number of displaced has crossed 100 million, UNHRC head Filippo Grande acknowledged that increased humanitarian aid to people fleeing their countries and homes will provide relief. However, he emphasized that if one is thinking about reducing the number significantly, the only answer is peace and stability.


We trained legs last night, big, heavy, volume leg session with Big Nebos and a special guest, Jacob McDonald from Alice Springs, drove all the way from Alice Springs to come and train with Neva and I down at World Gym Adelaide. Decided he wanted to train legs, we didn't really decide it was Friday, we trained legs on Friday so he kind of fell into training legs with us. So I woke up this morning man, took one look at the Devil's staircase and my body just said nah that's not happening. So we've just got word through Insta that the workout is on. We've got a leg workout going down at World Gym Adelaide, never been there before but I've heard a lot about it and I think it's going to be mint, it's going to have some awesome machines or some set up for legs so the workout is happening guys and t-minus five hours are going to be there so it's going to be close to be honest I don't want to be late that's for sure so 6.30pm tonight we're going to be at World Gym Adelaide for a leg sesh of doom so yep I'll update you close to the time. So apparently Adelaide's got extreme weather warnings for today coming in at about five o'clock so it looks pretty ominous at the moment. You know I kind of like the idea of it pouring down outside and me killing legs inside so I hope it does rain and I think it will. Trucks man, what's the ETA? ETA 6.40pm, 10 minutes late. I've got to make up some time somewhere man.  I don't want to be late. Alright so we are in civilisation. I'm just passing the first traffic light I've seen in like 20 hours I'm pretty sure. So I'm just going through Monopara and Elizabeth and Salisbury which is where I used to live actually but yeah so we'll be at the gym soon. World Gym Adelaide, never been there, can't wait. Alright here we are. 20 minutes late, not too bad. I don't know, let's go meet the boys. Alright guys, I'll tell you right now.  No exercises, can't even talk.   Guys have been huge inspiration to me for years and awesome guys.  I went in there at 6.30, it's 9.20 now. We did a two hour leg workout.  My legs are like jelly.   Let me try and remember what we did for the workout. First we did a superset with leg extension and walking lunges. 20 reps each, 5 sets each. 20 reps of leg extension, 20 reps of walking lunges and 5 sets of each.  Second superset was leg press and goblet squats. 10 reps each, 10 sets of each. So 10 reps of leg press, 10 reps of goblet squat for 10 sets each. So that's the second exercise. Third exercise, hamstrings. We've got a triple superset of seated leg curl, laying leg curl and stiff leg and deadlift. 10 reps each, 5 sets each. So that's 5 sets of 30 reps. And then we've got squats to finish. 5 sets of 8. And in 3 of the 5 sets I failed on like the 4th rep.  He was helping me up with the bar. He literally picked the bar off my shoulders because my legs, I couldn't even lift my body weight up. I literally couldn't. I was stuck in the hole. I could not get up after like the 4th rep on the last set. And I was just like, oh my God.  So inspired, so buzzing right now. Um, man, man. No words really. It was awesome. If I could work out with those cunts every day. God, I'll be making some good gains. What a workout. What up? We're here down Ladder Lake.  My legs are sore.  Apparently it was a thousand rep leg workout. I couldn't keep count, but it certainly feels like that. Um, so I'm off to do some cardio. First cardio session of this cut. And I'm so freaking motivated right now. Um, I've decided the Northern Territory show, which I was planning on maybe doing, with the INVA is too close. It's like eight weeks away. There's no way I'm going to make it. There's a show down here in South Australia in probably about 90 days.  So actually tomorrow I'm meeting up with Guy Dillon for some arms. And then we're both of us are going to go to the INVA seminar down here to just see what's going on and have a chat with some people and find out about the show because we both want to do it.  But right now, man, still buzzing from last night.  The only footage I can actually show you is from Joe's Snapchat. And so I'll, yeah, I'll show you that in a bit. It's pretty funny. Oh, it's ripped. Here we are. Anytime fitness. Boom. So I'll show you guys the Snapchat.  Hope you guys can see that. Oh, look, there I am.   Leg day, baby. Look at these quads, bro. Look at that. By this point, I was absolutely fucked.  Go, son. Fuzzy, bro.  This is awesome.  Man, what a good camp. Seriously. What a physique, too.  I said to him, I said, I can't wait to see you become a natural IFBB physique pro. And he's like, yeah, bro, we're going to do it. Because he came third. He came third in Australia. First place gets a pro card.   That's for sure. About six foot three is about 100 kilo at the moment.  I mean, he's going to do it, man. And that's what I want to do. I want to be a men's physique IFBB pro. As a natural athlete. Give me another five years. I might just make it. You never know. Ho! Right. Off to do some cardio.


A frame buffer object is an object made up of one or more image attachments, and these image attachments come in four kinds. There are color attachments, depth attachments, stencil, and depth stencil, which is a combination of depth and stencil interleaved into one buffer. Per pixel, that's generally 24 bits of depth, followed by 8 bits for stencil. These image attachments come in two kinds. They are either textures or render buffer objects. Unlike textures, render buffers have no mip maps, they have no layers or tiling, they don't have texture parameters, and they cannot be sampled, and so you cannot read from them from your shaders. A render buffer very simply just stores the pixels, one after the other, in the most straightforward way possible, making them optimal for cases where you just want to read and write a bunch of pixels en masse, but this simple layout makes them inefficient for sampling, and so you're not allowed to sample from them. Now the so called default frame buffer object is created for us, and this has four color attachments, what's called front left, front right, back left, and back right. And assuming we're doing non-stereoscopic but double buffered rendering, then it's the front left, which is currently displayed on screen, meanwhile we render into back left, and when we're done rendering, then we swap the two buffers. If we're doing stereoscopic rendering, such as for VR, then we would use left for left eye, and right for the right eye. Either way, this default frame buffer is generally configured to have a depth and stencil attachment, and this is not actually automatic, but it's something that's done for us by GLFW, so in practice we're not going to have to set it up ourselves. So far in our examples, we've just been using the default frame buffer, but it's possible to create and use other frame buffers. The default frame buffer is always what ends up on screen, but we might sometimes want to render into so-called off-screen frame buffers for various purposes, such as applying post-processing effects or doing things like deferred rendering, which is something we'll describe in a much later video. In example 5.1 frame buffers, we're not rendering anything new before, it's just a quad for the floor here and then these two boxes, but what's not evident on screen here is that we're actually first rendering into an off-screen frame buffer, a separate frame buffer that we explicitly have created, and then we're using the color attachment of that frame buffer as a texture to render the image out into the default frame buffer. For the default frame buffer, we're just setting up a simple quad that encompasses our whole view, rendering this other texture onto the quad, which has the effect then of copying the contents from the off-screen frame buffer's color attachment into the default frame buffer's color attachment. Surely you would think there's a more direct way to copy data from one frame buffer to another, and in fact actually there are, yet depending upon your OpenGL driver and your system, it tends to be the case that this is the most efficient way to do it, but the other reason to do it this way is now we can apply so-called post- processing effects. When rendering the off-screen frame buffer's texture into the default frame buffer, we can have our fragment shader for that rendering to apply some fancy effects as we'll discuss. First thing though, let's look at how to create and set up a second frame buffer. We start very simply by creating the frame buffer object itself and then creating its two attachments. First the color attachment, which will be a texture, just like we've seen before, and then the depth and stencil attachment will make just a render buffer object because we're not going to need to sample from it. The general rule is that if you don't need to sample from an image attachment, it might as well be a render buffer object, and so it should then in theory be slightly more efficient, though I've seen conflicting information of whether that really pans out. It turns out that the hardware is actually really good at reading and writing into textures, and so I believe on many modern GPUs it's not really going to make a difference, but maybe I have bad information on that so don't take my word for it. Anyway, for our color texture here you may note that for the texture parameters we're not setting any wrapping mode because that's going to be irrelevant for our purposes. Notice that the format is RGB with no alpha, and the width and height are the same as our screen output. For the depth and stencil render buffer we simply generate the render buffer here, bind it so that it's active for the subsequent call of render buffer storage, and this is what actually allocates the buffer, so we specify its format 24 bits of depth, 8 bits of stencil, and its dimensions. Having created both the texture and render buffer we then need to attach them, so we bind the frame buffer first, and when we do so we have three options of how to bind it. GL draw frame buffer binds the frame buffer for write ops, GL read frame buffer for only read ops, and if you just say frame buffer then it binds it for both. Write ops includes any rendering operations like say GL draw arrays, whereas read operations include some functions like GL read pixels and a few other pixel transfer operations where we can copy data from one frame buffer into another, but this does not include when we sample from texture attachments. So in this example when our fragment shader reads from the off-screen frame buffer as a texture by sampling, that frame buffer actually doesn't have to be bound at all because that's not relevant for that purpose. For our purposes we're not going to do any of these read ops here so we'll just use draw frame buffer, and so we call frame buffer texture 2D to attach our color texture as the color attachment zero. Again a frame buffer can have multiple color attachments so there's 0, 1, 2, 3, 4, and I believe it's guaranteed in the spec that you will have at least eight color attachments I believe, though on some systems I believe you can go beyond that limit. It's uncommon though to need more than eight and in this case we just need the one, and then anyway we call GL frame buffer render buffer to attach the render buffer as a depth stencil attachment. Notice there's no number zero here because you never have more than one of these on any frame buffer, and lastly we can call GL check frame buffer status to check if our frame buffer is complete, meaning that it's validly configured, it has a valid set of attachments, and in the event here that it is incomplete we'll print out this error message. Doing this check is not required but it's good for debugging if you're doing anything complicated with frame buffers, and now looking down at the render loop first thing every frame is we want to render into the off-screen frame buffer so we make sure that is currently bound for drawing. We also need to make sure that depth testing is enabled because as you'll see we're actually going to disable it when we render into the default frame buffer. Here we're clearing the currently bound frame buffer, the off-screen frame buffer, and then all this is just rendering as normal we're rendering our scene. Having rendered everything into the off-screen frame buffer now we want to actually render it into the default frame buffer so that we can see it on screen and so we bind the default frame buffer with zero. The integer ID for the default frame buffer is always zero. We disable depth testing, we clear in this case only the color buffer, we don't care about the depth buffer because we're not using the depth buffer of the default frame buffer so no need to clear it, and then we'll do our rendering this time using a different shader program than what we use to actually render into the off-screen frame buffer and we'll look at those shaders in a second. Our geometry is defined by this quad vertex array object which is just a single quad as we'll look at in a moment.  So before looking at the fragment shaders very quickly what does a quad VAO look like? It's the quad vertices here. It's two triangles whose vertices are defined in terms of clip space with no z. There's only two dimensions here because we're actually just doing two-dimensional rendering here and then we have the corresponding texture coordinates so there are two vertex attributes for the quad VAO. Looking at the shaders for our off-screen rendering the vertex shader is nothing we haven't seen before for just very ordinary flat-lit rendering of textures and same with the fragment shader just rendering out the texture color for the pixel and then for our screen vertex shader the one used to render out to the default frame buffer. In this case we're not dealing with any transforms because our vertices are already in terms of clip space like we want but they are VEC2s rather than VEC3s so we're filling in for z here the value of zero. As for our screen fragment shader it's exactly the same as our other fragment shader. We're just simply rendering out the texture onto the quad. What if however we don't simply render the texture verbatim but apply some kind of effect? Well that's what we call post processing. After rendering out our scene as normal we're then manipulating the color values before they reach the screen. Probably the very simplest post processing effect is to simply invert all the colors which we can do here by simply taking the VEC4 returned by this texture call and subtracting it from one. This takes the RGBNA value returned by this texture call and subtracts them all from one and that is the VEC4 being assigned to frag color so it's effectively inverting all the colors. So here I'll save and rebuild and if I run it all the colors have been inverted which is not terribly interesting in this case because our original scene is all gray scale but you can see that everything's inverted. Note that means that all the alpha values are zero but that doesn't matter for the output color buffer. For something slightly more complicated we can make the output gray scale. In this case our pre-processed image is already gray scaled but let's pretend it weren't. Anyway if you want to get the gray scale equivalent of any color value you simply take the rg and b and average them together and make that average your new rg and b values. Now the symbol technique for gray scale does work but it's generally not ideal because when it comes to our light perception of colors we're more sensitive to green less so for red and even less so for blue and so what we want to do is actually a weighted averaging of these different components and so what we actually want looks more like this. Multiply the red by 0.21 the green by 0.71 because it's the the strongest component we want for the average and then blue only by 0.07 so blue is actually contributing quite little to this average but that's actually what we want because of human perception. Let me actually just demonstrate this here rebuild and we run it and as far as I can tell this is exactly the same as it was before which is good I suppose because it was gray scale to begin with and you wouldn't want your gray scale filter to somehow change the image if it's already gray scale. To achieve a lot of interesting post-processing effects we can use what's called a convolution matrix or more commonly just called a kernel and the idea is that we sample not just from our pixel coordinate but also from neighboring points to the top left bottom right and to the top left top right bottom left and bottom right. We then multiply these nine samples by the nine different weights specified by our kernel and then we add these all together to get our final output color. So here for example we have a kernel that will get us a sharpen effect where we take the center pixel itself and multiply by nine but then from the neighboring samples we multiply them all by negative one and when all these samples get added together it has the effect of sharpening our image and note that these neighboring points are not necessarily just a pixel distance away they could be sometimes that's what we want but we can choose actually just any offset and the configuration of this offset will effectively modify our effect. So we get different effects not just by changing the weights in the kernel but also by modifying this offset. In this case we're using the same offset for vertical and horizontal dimensions but in some cases you may want to have separate vertical and horizontal offsets. You also probably want to tie the offset to the dimensions of your output image which in this case we're rendering out to 1920 by 1080 and so if our offset is 1 over 600 then in the horizontal dimension at least our offset is about two pixels away from our center point and in the vertical dimension it's approximately three. So if say we wanted to make sure the offset is actually one pixel in both the horizontal and vertical dimensions we'd have to compute two separate offsets using the actual dimensions of our image. For our purposes here we're just keeping things simple so we've chosen an arbitrary offset. Anyway to see this in action I'm going to build it here and now I run it and you can see we have this ugly looking sharpened effect. So that's neat but if you look at the edge of the image you'll notice something a little funny going on what's happening is that by default our image that we're sampling from by default it's doing wrapping and so we're getting this odd effect at the border of our image. To fix that we simply need to configure our texture color buffer to use a clamp to edge for the texture wrap parameter. So I'll build that run it again and now you can see at the edges we've gotten rid of that problem. For one more example if we change the kernel here instead of a sharpen we can get a blur effect and this is achieved by weighting the corners to be one sixteenth each the top left bottom right to be two sixteenth each and in the center itself to be four sixteenths and you may note all these weights add up to one which is usually the case for our kernels our sharpened kernel also added up to one. If they didn't add up to one if instead they added up to something larger than one we would effectively be lightening the pixels if they add up to something less than one we would be effectively darkening the pixels. In this case though we don't want to darken or lighten the image so our kernel weights add up to one and now I will rebuild run it again and now we're getting blurry output


For more than a decade, the Professional Supplement Center has been providing pharmaceutical great vitamins and supplements to the public. Through our vast knowledge of the industry and manufacturing processes, we've developed our own line of high quality professional great vitamins and supplements. Handpicked by our qualified healthcare professionals, we present CalMac Pro 2-1. This vitamin and mineral complex provides highly bioavailable, gelated minerals and a 2-1 ratio of calcium to magnesium in support of healthy bone function. If you have any questions about this product or any other products the Professional Supplement Center carries, please call, visit, or email us and one of our knowledgeable staff members will be happy to assist you.