My name is you see and this is my very good friend David and to kick off We had a nice introduction, but I want to put a little bit out there about unity for those of you who don't work in Games development. So today unity is about 1500 people working on a tool set. That's used by over five million game creators to create top-grossing games and award-winning games About half of all mobile games made and released in the last 12 months for made with unity and about 70% of all released augmented reality and virtual reality content not just games, but all kinds of content So you could say unity has made it. It's a company that's on its own field of game development is Really achieved something really big worth of a big vision. So that's what we have to talk about on how actually we got David Nicholas and Joachim and started a company took it from an idea to a vision and realize that but You know, we're so here to talk about a vision David. So what's the vision of unity? So The vision is to democratize game development. Okay, what does it mean? Yeah, you know enough for us. You know what does it mean? So so there's there's many ways of putting it first We were just a game company an incompetent game company company, you know, we try to make a game We kind of sucked at it, but really It was pretty bad along the way. We were building these tools for ourselves and then at some point You know as you know young people in basements tend to do we were sort of thinking about the meaning of life and And you know, we were pretty good programmers and and we're thinking like, you know, what does these tools mean? what you know, what is the meaning of tools and and we sort of realized that you know the the history of You know the human race, you know can be told through tools tools are like really fundamental thing Maybe the most important thing of everything not unity, but as a whole so we're thinking about that and then we were thinking about how new tools change the world and change industries and and and One of one of our founders Nicholas. He's a very creative person He's played music and made film and he sort of saw this thing where you know, the tools Changed the music industry the four track recorder changed completely like you know before I don't know if you knew I know how music was recorded before but you have a big room and the musicians would sit like at different distances to the recordings Equipment and it was very expensive and very complicated And then with the four track recorder the cost of production was brought down like a hundred fold a hundred fold And when that happens not only is it like cheaper to make music But all kinds of music gets created that would not have been created otherwise and we got rock music and all this stuff So you were working on your own problem say like we're gonna make this game We need to tooling and it's not available. So you had to make it so and then you look that well wait a minute actually making a tool Could be a force multiplier for also other people. Is that word a genesis of this idea? But it's like you could say that But how do you go from like making a tool to saying like democratize? So in a way you could say that democratize game development is just the way we summed up that idea Okay, you know let like by giving a great tool making it really easy really cheap Maybe the whole industry changes not just like you know saving some costs for some major company Which is useful and many companies do that and that's fine but like can we dramatically change the thing and and Yeah, we summed it up in democratize game development Which is open-ended and vague and I always appreciated that about it because there's no end to that There's no like endpoint like you're not done And it's really informed the company and sort of given a very broad sort of vague direction Right and the cool thing about broad vague directions is that you know people themselves sort of you know Initially just the three of us, but later more people can sort of infuse that with our own ideas Exactly. There's many answers to this question. So That was a genesis of the of the vision and and it it's actually It stayed with the company today if you go to a event unity host It's always there is something we say and it we really mean it But in the early days when you had to talk to people about and they haven't heard about unity How did that vision statement help you kind of a Get the company off the ground. Yeah, what did it actually do for you? It created a very sort of simple mental framework like sort of oh, okay That's what they're gonna do and you know the listener could then infuse it with their ideas Which were probably not exactly what we're working on but sort of positive friendly ideas. Yeah, yeah and it just created sort of a You know just a sort of framework around the brand or like the cloud around the brand So so it didn't go. I mean we were a tiny company We had no money for marketing or anything and I remember at one point. I was talking to one of our competitors And he said like you guys are so great at marketing Like we had zero marketing people So it was like a rallying cry both internally and externally like this is who we are about it's a stake on the ground we are here to do this thing and come with us if you want to do that exactly and then you get sort of the Self-selection people want to join the company because of that and it creates a very strong kind of internal direction Yeah, and often a feeling of like, you know, the leadership is not actually in charge Because you know, we've promised this not just to the customers, but also to our employees And it can be a troublesome thing Because it's sort of you promise so much like if you think about it this sort of you know every project But you know a company like has sort of a lot of degrees of freedom As a leader in theory you can make a lot of different decisions, but you dramatically reduce the number of decisions you're allowed to make We'll talk about that actually that's actually great lady and I really love that because this is my next question So, you know when you start off your small company and you basically have all the freedom in the world There's there's almost no employees. There's no customers. There's no revenues. It's only just limitless possibilities But once you grow, you know, some of it's not that easy anymore You have people to answer to you have people who expect a paycheck in order to support their families every month Customers who want to release right now and like where is why you're not fixing this box? So can you talk to a example or two where? Holding on to this big vision this big dream that you want to realize Meant that you actually had to walk away some from something you say like, you know what this would be really important We cannot do this because it would compromise our big vision.  I after a long time I realized that The worst Decisions we've done in the company's history where decisions where we sort of decided to betray this idea And why would you do that?  Yeah, yeah, you know the military the game industry is like a $100 billion industry sort of all included and the military industrial complex is what a hundred times that I don't even know But it's a lot. Yeah, so if you like if you just get 1% of that, right? And so we were sort of you know lured a little bit by that Fortunately, we didn't betray the whole thing but we know we started sort of you know We had a lot of them using unity and for training and some of it is charming stuff Like you know post-traumatic stress treatment and you know things that are like are not that offensive to the sensibilities So we sort of started exploring it or like ran after it actually and yeah It's just it's a very different industry and and we would have to change the company quite a lot to do it And and the company like this all these people that were like in the team, you know had pretty strong how to say like like Allergic reaction allergic reaction. Thank you. Yeah, or like yeah, well Yeah, well, I was looking for a different word. Thank you. I'll go with that yes, and and You know, we're all friends. We trust each other So we believe that you know if we make a lot of money here, we can fund the core product So it's not it's not gonna betray it, but it's also You end up with something that sort of requires different people So so I think maybe maybe the the vision of unity made us in unable to do it So it might actually hurt us on the other hand, you know, it kept us very sort of unified and and I think it's probably a better company for it Yeah, so at least a company that I enjoyed working for more So that was a decision where there was a little bit of step taken towards the direction and then corrected But is there some time where you say like I really wish we would do that, but we cannot and we will not I Don't know no, no. Oh, is there a time where like Yeah, no, I know it's not necessarily but it's but so it was But that I think that would assume that there wasn't ever or that actually Means that you were so internalized the vision that you would never even contemplate something that would Dremendously break that so you were tempted, but you were like you had that so it was so ingrained And I think there was a company was also One thing about this being a CEO you can set the direction, but then the direction holds you your employees And you were talking about actually very holding you accountable Yeah, so kind of at the hard side of having that big vision once it's imparted you it's really hard to change Yes, you're you're fixed you have to go. Absolutely. Yes. It's yes There's a beauty to reducing the degrees of freedom like there's it's commitment. It's you're promising It's like being in a relationship or something No, absolutely so One thing I wonder about because the vision of democratization is It's it's almost like something that inevitably leaves the conclusion that hey, this should be free Like if you really take the democratization all the way to the end you should give away the software But we're running a company and that means there are people whose salaries suit to be paid and nobody wants a tool If it's not good, yeah, so you need to actually pay good people good amount of money to make that So it's kind of paradox you want to basically give it away free But you cannot give it away free and we're talking about About this a little bit so free and revenue is vision and cold at reality. Is that the ugly side of the vision? So it's it's actually not always so pretty or messy. It's not actually though because it You're working towards a longer term goal and you know, it's talking to a Niklas Sennström of atomico Last night and some other VCs and there was this general agreement that you know companies that are short term focused on Money and revenue they they go badly like I mean they don't succeed as much So there is by having a sort of a long-term arc that holds you to something It's sort of you know, I think I think it makes sure that you you know, you create more Momentum of your own so but but like early on I was like no, I want you need to be free for everybody And now it is for everybody who doesn't have a lot of money. Let's talk about that a little bit because you mentioned that One of the kind of a if you were the the boldest and Potentially riskest moves was actually making something that people used to pay good money for yeah completely free for people To use until a certain under the hitter center money revenue, which a lot of people also unfortunately may abuse But giving away something people paid for how did that make how the decision-making you are in the executive suit and you say like If we do this it it will be fantastic It's aligned with our vision, but it may completely screw up our bottom line and our top line and we may lose a lot of money Yeah, so talk to that like balancing that that's a really hard balance between the vision and the reality So so we had wanted to make the software free for a while We talked about it a number of times then one of our employees. He was a programmer He was like guys.  Exactly. It's a non-linear thing. So but having several million in the bank we stepped into it and and Our community actually freaked out a bit Because you know people are like but I paid for it now somebody else is getting it for free It sort of created confusion and I and we understood some of these see me motions But again like being pointed at the long-term goal, of course it was the right thing to do right it did cost us money though we we had our flat revenue for like half a year after it and I'm actually curious. What did the VC say? They loved it. They loved it. Yeah, of course because they have always more money for you to take Exactly. No, but the thing is like, you know, we came from Europe We were not very sort of sophisticated when it came to the technology industry Like everyone here is like a hundred times more sophisticated than we were at the time I don't think so. No because there's so much good instinct. Yeah We had instinct but there's so much knowledge and like this is codified now You can read about it and go to conferences and so on But in Silicon Valley, they've built this kind of Lore like I mean, this is a system. It's a playbook for how to grow this risk So in one sense your instinct and your vision led to a A tool set and a mission that was defining but also it led to that I would say a really a defining decision that catapulted unity from well, you know, it's it's a good tool to oh my god I can get it for free. I can try it out and suddenly I think it led to an explosion of user base It was amazing. So so then the next problem is, you know, we hire a lot of people and it's expensive and it's complicated And then at some point we're like, okay, you know, there's only so many developers in the world There's more we've not sold to ever all of them, but we need to grow the base and and and I was How my soul was in turmoil for a couple of years I was in a panic because I could see this problem arriving and And of course, how do you you could raise the price?  You can take away the free version that sucks You can sell to more people we did that But we had to find another path. So I was so lucky that we had been sort of friends at these very good buddies for a while And you had built something Actually, you'd build a company with the same vision. So, right? Yeah, we also started in the mission of servicing developers like ourselves we were a developer we made a tool for ourselves and turn out to be a successful advertising network and joining unity was I Want to tell the story because the moment I was Announcing the acquisition to my team. I was so nervous I suspect by the way that you may have built the first at tech company in the world comprised only of like good honest people Yeah, I take it's kind of great. I'm for those of you don't know So the story is and that's this is how big unit is vision is the morning and we announced that we've been acquired I was so nervous about what my team of 40 people would say and the moment I say it by unity What an opposite yay, and if you would have been Microsoft, I don't think it would have happened So that's that's a testament to unity's vision But kind of we only have a minute and a half to do this the rest of this so I want to I want to give it So sense of closure so a lot of you are startup founders and I have two questions for you Is it essential to have a big vision to build a startup? Is it like when you think of all the troubles you go through? How important is it and or how much can increase your potential success people that have analyzed startups? Vcs typically because they spent a lot of time analyzing startups in a big picture looking at a lot of them categorizing them You know flocking them by region and size and blah blah blah They have come to a conclusion that the best companies have a big vision There is a lot of tea or a correlation. I do not know but that is believed I just as a human, you know Why would you work on something that's not meaningful? I fully agree and now now the really fun God-feeling question because you cannot tell anybody what their vision should be they have to find it but how do you know? How do you feel when you find your vision? I like how do you need to feel like for in part the last bit of reason for this guy when how did it? How can they know they've landed on something? When you feel love Like when you when you actually feel it's like don't explain I think that that's we got ten seconds left and that's a perfect ending You know unity is a love letter from us to the developer community, right? And that's and they feel it and we feel it. It's a real thing And we're right on time. Oh man. I'm your love find your vision and go build the next awesome company. Thank you Thanks, you see. Thank you. Thank you guys


As reactions continue to throw the murder of the Shehojagari College of Education student Deborah Samuel over a last blasphemy, a group, Muslim, united for peace and justice has called for swift and transparent justice against Hercules. The group says the tragic event of the murder of Deborah can be utilized as a turning point in Muslim-Christian relations and herald a new era of peaceful and respectful coexistence. Now, Professor Larkin, a kinder of the Muslim-right consent of Merrick, will lend his voice to the call, as his leaders of faiths to continue to enlighten and educate adherents on the need for mutual respect to focus on messages of love and work against voices of hatred and extremism amongst themselves. The group also urges state governments to strengthen or promulgate laws to criminalize blasphemy and killing for blasphemy outside the law and faithfully enforce them. We all Muslims call us to issue fatwa specifically against frontier justice, jungle justice, and extra-judicial killing at any time. More so, we appeal to Imams to use the Friday Hootba to spread and promote the peaceful coexistence, respect for constituted authority and rule of law as enjoyed in Islam. Seven, we'll amend the poor state of the judicial system in Nigeria and call for improvement of sin in order to restore public confidence in the judicial system as well as prompt and effective administration of justice. Number eight, we condemn jungle justice and lament its endemic nature in Nigeria and call for justice for all other victims of extra-judicial killings. The Tijaniya travellers, who were murdered in Jaws, the Baptist College, Ijagbo, Ijab Killing, the Leki Killing by Okada Riders, and other similar acts of barbarism and


Hi, I'm Theresa Payton. I'm a class of 1989 at the time, Theresa Major, and I had a double major in economics and business administration and a certification in computers. Hi, my name is Kieran Payton. I'm in the class of 2024. I'm a cybersecurity major and I'm from North Carolina. Hi, I'm Aiden Payton. I am a class of 2027, undecided currently from North Carolina. I have really enjoyed my time back on campus as an alumni, volunteer, and now as a parent having the opportunity to be on campus. So much has changed, but so much is the same. The tradition of an excellent education, a vibrant campus life, making great friends, that's all the same. But so much has changed. There's new technology, new buildings, new facilities, and it's made possible by donors. Donors are everything. Everything just keeps getting better and better here. It feels like it's almost impossible to even improve just because it's all pretty much state-of-the-art. Most of the reason that I want to come here is because I got to see all the new stuff. It's just really nice to see all the new equipment and other schools that I visited didn't have. Once I leave, I'll turn around and say, man, I wish I went to the school now because it just keeps improving. I look at the opportunities Kieran has had since he's been here. Aiden is just starting out. And it wouldn't be possible without donors. The idea that when it's time to visit both of my sons at college that they ended up choosing the same place is great. Looking forward to it. You don't have to choose which one of us to visit. Join me in making your gift on the Charter Day of Giving.


Welcome back everyone to our lecture series Math 3130, Modern Geometries for Students at Southern Utah University. As usual, I'm your professor Dr. Andrew Misaline. It's good to have you here today. In today's lecture, we're going to talk about the defects of triangles, particularly the defect of hyperbolic triangles. The topics of this lecture are loosely based upon section 6.4 from the textbook Roads to Geometry by Wallace and West entitled Hyperbolic Results about Polygons. We've seen previously in neutral geometry that if one triangle has an angle sum equal to 180 degrees, then all of them do. This was the all or nothing theorem, and that the existence of a 180 triangle is equivalence to the Euclidean Parallel Apostolate. On the other hand, in hyperbolic geometry, all triangles have an angle sum that is strictly less than 180 degrees. All of them have this defect. How much do they defect from this 180 degree measure? So given a triangle ABC, we call the defect of a D of ABC. So this is just the angle sum of the triangle subtracted from 180 degrees. Now, it's important to mention that the defects of hyperbolic triangles are not all equal to each other in hyperbolic geometry. This is important to recognize because in Euclidean geometry, since everyone has 180 degrees angle sum, we sometimes think that, oh, hyperbolic geometry, everyone has 179 degrees, or in a different hyperbolic geometry, everyone has 137 degrees. It's not like that at all. There will exist triangles with an angle sum of 137. There will be a triangle whose angle sum is 179, but they're not all equal to each other because if the defect of a triangle was constant throughout the whole geometry, notice in Euclidean geometry, the defect is always zero degrees. But if the defect was constant, all that is all the triangles have the same defect, then one actually could argue that every defect has to be zero degrees. I don't really want to go through the argument right now, but we'll see in a little bit that if your defect is positive, you can actually get arbitrarily smaller defects. And therefore, if they're all constant, that would violate some triangles getting smaller defects. That's the basic argument. So if all defects are constant, that actually is equivalent to Euclidean parallel postulate. Therefore, in hyperbolic geometry, there exist triangles with different distinct defects. And it turns out in hyperbolic geometry, you can get a defect almost arbitrarily close to 180 degrees, and you can get a defect arbitrarily close to zero degrees. We'll talk about this a little bit more in the future here. This kind of summarizes what we've seen here on the screen right now. Because of the all or nothing theorem and the scary Legendre theorem, we do know that the defect of a triangle has to be positive, that all hyperbolic triangles have an angle sum strictly less than 180 degrees. And so when we subtract that from 180, we get a positive number.  And so this here can range anywhere from up to most 180, but at smallest zero. And these bounds are never actually obtained by any triangles in hyperbolic geometry. Now, another thing important to realize when it comes to this defect, so defect is always a positive quantity. Defects, when a triangle is congruent, when two triangles are congruent, so ABC is congruent to A prime, B prime, C prime, then their defects will be equal to each other. And this follows very quickly from this formula right here for the defect that if two triangles are congruent, their angle measures will be congruent. And therefore this difference from 180 will be identical. So defects are equal for congruent triangles. A third property of the defect that I wanna mention right now, this one's a little bit harder to prove. It's not too hard, but it's not just an automatic obvious statement. Oh yeah, the sky's blue. Congruence is preserved by defects. Or I should say the congruence preserves defects, things like that. This one takes a little bit more argument, but there's not much to it. So if we have a triangle ABC, A, B, and C, I really didn't mean the tail for A to be so huge there, but we're sticking with it. That's just how it is. Anyways, if we have a triangle ABC and we pick a point D that lives between A and B. This naturally dissects the triangle into two pieces. There's the ADC triangle right here and the BDC triangle right there. All right, and so as these are two triangles in their own rights, the two smaller triangles have defects and so does the larger triangle. And when it comes to the defect, we have what's called additivity of defects. That is the defect of the large triangle and is the sum of the two smaller defects right there. And so let's talk about why this is. Well, first of all, the angle ADC right here is supplementary to angle BDC. So the sum of the measures of those two angles would be 180 degrees. We're gonna use that later. And so labeling things a little bit, if we look at the triangle ADC, it has three angles. There's angle CAD, there is angle ADC and then there is angle ACD right here. So the defect of the triangle ADC will be 180 degrees measured. So track the measure of angle one and the measure of angle two and the measure of angle three. All right, now let's look at the triangle DBC. Well, its defect can be computed by taking DBC, we'll call that angle four. DBC, we'll call that angle five and DCB angle six. So we get four, five and six. Great. Now let's look at the larger triangle ABC. So triangle ABC, its defect will be computed from its three angle measure. So it has angle one in it. It has angle five in it. And it has angle C, which angle C is gonna be a combination of angles three and six. So we get 180 degrees minus the measure of angle one, five, three and six. So that's almost all the angles except for two and four seem to be missing. So remember, these angles are supplementary. So what we're gonna do is we're gonna take 180 degrees minus 180 degrees, right? So this is angle two and angle four. Since there's supplements, their sum is 180 degrees and adding 180 and then subtracting it doesn't change the equality. And then moving things around, we get back one, two, three. I guess that's actually one, three, two. And then here we have five, six, four. Maybe I should have tried to get those in a better order but Ka'Chink, the sum of the two defects equals the defect of the larger triangle. And so the defects are additive. And so what, just kind of summarize what we've done here is that the defect function is a positive function. It preserves congruence and it's additive. I want you to remember those three things right there. Positive, congruence, preservation, additivity. Positive, congruence, preservation, additivity. Positive, congruence, addit, or congruence, preservation and additivity.  That way, when you watch a future lecture, maybe in the not too distant future, I don't know. It could be coming up anytime soon. A little Easter egg will pop out to you, I think. These words, positive, congruence, preservation and additivity will come back to your mind when you see them and be like, aha, there they are. I found it. So now that, note that using the previous theorem sort of like a base case, if a triangle is actually dissected into in non-overlapping triangles, so let's draw a picture here. If we have a triangle and we dissect it into smaller triangles, kind of like we did in the previous picture, so you can cut it down like this once and then you do it again like this and then you do it again maybe like this and you do it again like this and you can keep on going, right? Always taking medians of triangles along the way. We can dissect any triangle into smaller, smaller, smaller pieces. So it's like we have triangle one, triangle two, triangle three, four, five, six, seven. I got eight pieces right here. Well, by induction, if it's additive for this triangle and then it's additive for this triangle and then it's keep on going step by step by step by induction, we actually get it's additive for an arbitrary number of non-overlapping triangles. So this idea is what we call a partition, partition of triangles. So we took our triangle, we dissected it into non-overlapping triangles. Non-overlapping triangles here, of course, means that if we take any triangle, say, if we take any triangle, triangle one or triangle I and triangle J, if we take the interiors of the triangle, not the boundary but the interior and we intersect this, this will always equal the empty set. So there's no overlap between them whatsoever. And that's the only requirement we're gonna place on these triangles to get a partition. They should probably be connected but admittedly we might allow for a disconnected shape in which case this notion is perfectly fine in that situation. So additivity actually works for an arbitrary partition of triangle, not just into two triangles. The reason I mentioned this is that because of the previous theorem, we can show that triangles can have an arbitrarily small defect, always positive of course. And to see this, consider the following type picture. We have a hyperbolic triangle ABC, right? And so we'll call this triangle ABC and then dissect it along some median like so and then take, well, I mean, the way we selected this midpoint D right here, so we have ABC again. Depending on how we chose the point D, one of these is gonna have a smaller defect than the other. I mean worst case scenario, this line cuts the triangle into two equal pieces that is in terms of defect. And so one of these things will have at least one half of the original defect. And so let's say that the ADC triangle has less than half of the original defect. So we get something like this. For which case then we can relabel it to like, okay, the smaller triangle we get A1, we get B1 and we get C1. I think you have the first one as A0, B0, C0. And then we can repeat this process, not just do it once, but we can do it again. So we take this triangle, we cut it right here. And so one of these two triangles, this one or this one will have smaller defect. So we get this one's now an A2, this is a B2 and we get C2. We can do this again. Where again, one of these triangles will have at most one half of the defect of the original one. So we get C3, A3, and then B3. And so we can keep on going dissecting this triangle smaller and smaller and smaller, getting its smaller and smaller defect. And so it's by induction, we do get that there will exist a triangle, A and BNCN, who defect as less than or equal to one over two to the end, the defect of the original triangle. And so if we apply now the Archimedean principle, that is eventually given any epsilon greater than zero, eventually there'll exist a triangle whose defect is arbitrarily small, like so. And so we can get defects that are as close and close to zeros as we want, because epsilon can be chosen smaller and smaller and smaller and smaller. And in some respect, we can also make this thing get bigger and bigger and bigger by sort of a similar type of argument that if we take a triangle, we can join a new triangle who has a positive defects that makes it get bigger. And in some essence, bigger triangles will have bigger defects, smaller triangles will have smaller defects. But what in the world does small even mean? This is again, another sort of little Easter egg that I want you to look for in a future lecture. What does small mean in terms of triangles? What's a big triangle? What's a small triangle? In some respect, this notion of defect is actually measuring the size of hyperbolic triangles. Again, we'll talk about this a little bit more in some future secret lecture. So with regard to defect, there's two theorems I wanna prove today and not these theorems themselves.  It's just the defect of a hyperbolic triangle is useful in proving this theorem. So the first condition is actually a triangle congruence for hyperbolic triangles, known as the angle, angle, angle criterion. If two hyperbolic triangles are congruent with all of their corresponding angles, then the triangles themselves are congruent. And so this is kind of like the side, side, side condition, side, angle, side. Angle, angle, angle. Which this might come very bizarre to us at first because in Euclidean geometry, this is not the case. We can construct incongruent triangles which have the same three angles. In Euclidean geometry, this is what we call similar triangles which has to do with proportionality and things. I mean, like every other calculus problem it feels like we do a story problem with like related rates or work problems or optimization. It feels like similar triangles are used all over the place. But yet, I'm telling you right now in hyperbolic geometry, if two triangles are similar, they're actually congruent to each other. Similarity has no place in hyperbolic geometry. This maybe comes as no surprise by you at this moment, but similar triangles, that is the existence of similar triangles is equivalent to the hyperbolic parallel, or the Euclidean parallel, oops. The angle, angle, angle is actually a triangle condition in hyperbolic geometry.  If you're welcome to pause the video and read through it on your own. What I'm gonna actually do is switch over to some progressive slides from a former student, Haley John. This can be found on my webpage if you want to take a look at them. Turns out this lecture that comes from 6.4 in Rhodes to geometry actually has two slides that we're gonna use. Let's take a look at the first one, the angle, angle, angle condition. And so let's say that we have two triangles, ABC and A prime, B prime, C prime, so that the corresponding angles are congruent. A is congruent to A prime, B is congruent to B prime, C is congruent to C prime. And because their angles are congruent, their defects will be equal. That's an important part of this proof. That's basically what this proof is gonna be based upon. Now, if any of the sides were congruent, like if the corresponding sides AB was congruent to A prime, B prime, we could use an angle side angle argument to show that they are congruent as triangles and would be done. So let's assume for the sake of contradiction that there is no correspondence between sides of the triangles. So the corresponding sides, one's always longer than the other. Well, we have a triangle with three sides and there's no congruent sides whatsoever. So it's gonna be true that one of the triangles is gonna have two sides longer than the other. I mean, it could be all three, but if you consider all the possibilities, one triangle will necessarily have two sides longer than the other. And without the loss of generality, let's assume the ABC triangle has two sides longer than A prime, B prime, C prime, and that AB is longer than A prime, B prime, and AC is longer than A prime, C prime. Well, because we have those longer sides, I said all that stuff that just got highlighted, because the one has longer sides, there exists points B double prime that sits between A and B so that E, A, B double prime is congruent to A prime, B prime. That's because AB was longer than A prime, B prime. And there also exists a point C double prime that sits between A and C so that AC double prime is congruent to A prime, C prime. So we guarantee, so this new triangle that's been built has two sides congruent to the other one. And since angle A is congruent to angle A prime, we get that the triangle AB double prime, C double prime is congruent to A prime, B prime, C prime by angle, side angle, side, excuse me.  And so what we're gonna do is we're gonna dissect the larger triangle ABC using this congruent triangle that we found. So if we introduce the segment B double prime C, we can dissect the triangle ABC into three triangles. One of those illustrated in blue is congruent to the triangle ABC all primed there. And so now we're gonna use the additivity of the defect that we did earlier because the triangle ABC is then broken up into a partition of three triangles and we apply additivity in that situation. So you can see in the picture, there's the blue, green and red triangle. And so the sum of those three defects will equal the sum of the original one there. And so remember because the two triangles ABC and A prime, B prime, C prime had all three of the same angle, the angle measures were corresponding there, their defects are equal. So the defect of one is equal to the other. But for the larger, so to speak triangle ABC, by additivity, its defect will add up to be the defect of the blue triangle, A, B double prime, C double prime, the defect of the green triangle, C, C double prime, B double prime, and the defect of the red triangle, C, B, B double prime. But if you cancel out the two congruent triangles, because remember, so we use additivity of defect, now we're gonna use the congruence preservation because the two blue triangles have the same defects, we can cancel them out and we get that the sum of the green triangle and the red triangle adds up to be zero, which violates the positive property of defects. And so this gives us a contradiction. And so it's kind of cute in this proof, we used all three properties of the defect I told you about earlier, the positivity, congruence preservation and additivity. I was reciting it earlier, so you memorized it. This is not why I did it. I mean, it was useful in this proof, but you will see these again in the future. So that concludes the proof of angle, angle, angle. Let's go back to our lecture here. You can see the blackboard one more time. And so to finish up this lecture, I wanna talk about polygons for a moment. What is a polygon? If we were to define a polygon, a polygon is basically just a union of adjacent, non-overlapping triangle. So we have some partition of triangles, whoops, partition of triangles. They're non-overlapping like we talked about before. And of course, we kind of wanna ignore the lines that go in the middle here. So we have some union of non-overlapping triangles, and this is what we mean by a polygon. And so you see something like here. And so illustrate here, yellow is an example of a pentagon. There are five sides. Did I count that right? One, two, three, four, five, great. We have a pentagon. When we talked about quadrilaterals previously, a quadrilateral, a four-sided polygon, well, quadrilaterals can always be dissected into two triangles. And so that's the idea we have right now. So a polygon in general is a union of a partition of triangles. And so because of that, we can define the defect for any polygon, because we define the defect of a polygon just to be the sum of the defects of all of the triangles involved in the union that's above. And so positivity is automatic, right? Because each of the individual defects are positive, the sum will be positive as well. In terms of congruence, well congruence of a polygon we have to be a little bit more careful about, but kind of like we did with congruence of quadrilaterals, you use the dissection to get you the congruence that you're looking for. And additivity extends naturally to this setting right here, that the defect is gonna still be positive, additive, and congruence preserving for all polygons. But before we get too far ahead of ourselves, it sort of begs the question, is this defect function well-defined for polygons if we define them by these unions of triangles and such? The issue kind of comes down to the following. What if we chose a different way of partitioning? What if we choose a different way of partitioning the polygon? So you'll see here, I've now partitioned my pentagon into one, two, three, four, five different triangles. And these triangles are not congruent to each other whatsoever. What can be said about that? I mean, these different triangles would have different defects. Is the sum gonna be invariant to these different partitions of triangles? Well, the good news is, yes, absolutely. If a polygon is partitioned into triangles in any manner, the defect of the polygon is equal to the sum of the defects of the component triangles. That is to say, the defect function is well-defined for general polygons. It doesn't matter which partition of triangles you use.  Feel free to pause it if you want. But like I said before, I'm gonna switch back over to the slides that Haley made for us. And so we see theorem 643 right here. Honestly, there's not really a lot to say with the proof in terms of the pictures, but there's one really cool part I want to use these slides for. The proof comes from a combinatorial argument about a common refinement.  The proof is gonna rely on a common refinement. Where a refinement of a partition of triangles is a partition of the original polygon such that each triangle in the partition is a union of adjacent non-overlapping triangles in the refinement R. So you can see that I have a partition of the first polygon into triangles. And the second, the triangle which is the polygon which is congruent to the first one, I have a different partition into triangles, all right? So we have two different partitions. How are these compatible? Well, what we're gonna do is we wanna partition the partition on the left and we're gonna dissect triangles on the right so that we all have the same thing. And so basically what we're gonna do, here's the cool part there, that was awesome. We're gonna overlay the two partitions of triangles. And so now you're gonna see a partition, but the intersections of some of these triangles aren't necessarily triangles. Like if you look in the very middle, there's actually a quadrilateral that can happen. And so one has to start considering like what are all the possible intersections one gets if you intersect two triangles? That is if they're allowed to overlap. A lot of times this could be like a triangle itself, but sometimes you get things like quadrilaterals. You can get some other concave, polygons and such, but those ones themselves that the intersection of two triangles will always be a polygon. And therefore it has a partition you can use. And so again, there's a combinatorial argument. There's a lot of cases to consider and I'm not gonna go through all the details of these things right here, but the details rely on intersections and symmetric differences of triangles which themselves can always be inductively, not even, not inductively, but each of these intersections and symmetric differences can be partitioned into triangles because themselves are polygons. And so it turns out to be like a double induction argument. I don't necessarily care all the details here. It's left for you to do if you are demanding of that. But as you can see on the screen right now, those shapes which were not the intersections that weren't triangles, you can always dissect those into triangles. So we have a common refinement of a common refinement of the original partitions. And this common refinement because of the additivity of the defect doesn't change the defect of the original partition. And since any two partitions have a common refinement and the refinement will have the same defect as the original two partitions did, those two partitions give you the same defect. And therefore the defect of polygons is well-defined. All right, so coming back here, that actually concludes our lecture for today. If you liked what you saw, please like this video, subscribe, leave a positive comment. If you are a troll, unless you can sing really well or you have colorful hair, I don't want to hear from it. On the other hand, let's have positive comments about geometry and such. Anyways, I hope you do remember or the Easter egg I gave you for this lecture. It will come up very, very soon. For my students, there is a homework question you have to do where I'm gonna ask you to compute the defect of triangles. But in the book, it says area, scratch out the word area and calculate defect of some hyperbolic triangles. You'll notice that switching the word area to defect is not too much of a stretch on how one does these questions. Anyways, and it's great having you. I will see you next time. If you want a download of the script for this lecture, you can find it in the descriptions of this video. Also, if you want to find a link to Haley's progressive slides, you can find that link in the description as well. See you next time.


I tried to make a cute title because I saw a lot of past Python presentations had these cute little play on words. So hello everyone, I'm Nicholas Nadeau, and today I'll be talking about two of my favorite topics, Python and robotics. So why robotics? Well we're currently in the industry 4.0 area of manufacturing technologies. Data exchange is everywhere. Every robot motion, joint angle, force is being recorded, analyzed and processed, and with the advent now of collaborative robots such as Sawyer and Baxter, humans don't need to be physically separated from robots anymore. They could work side by side with their human coworkers. And this is a whole new paradigm shift in terms of robotics because now it's they're not caged anymore. And as we all know, Python is pretty good at pushing the boundaries of new concepts. So the costs of robots are coming down, and that's part of the reason we're seeing more and more robots out in the field in small and medium-sized enterprises.  So that being said, what's the difference between this URM on Spark fund for about a thousand dollars and this hundred thousand dollar KUKA collaborative robot? Well the KUKA robot is designed to be run 24-7 for decades. It's reliable. It has much stiffer joints, very high quality gears going to make it more accurate. And to put things in perspective, today we're talking about industrial robots like this. Unfortunately, not these fun guys in my presentation. And so my presentation today is going to be a high-level overview of robotics and calibration mixed in with the Python, and hopefully everyone leaves here learning a little something new. But if you really want to dig deeper into the theory, pick up Craig Robotics, the third edition, one of the best books I've ever read. So who am I? I'm a mechanical engineer, biomedical engineer, turn roboticist, and then I discovered software a couple years ago. I work at the intersection of mechanical engineering and medicine. And at Rogue Research, I develop neurosurgical robots for small animal research. And I'm also doing a PhD at ETS in precision collaborative robots for ultrasound, a human collaborative ultrasound. And this will be my first PyCon coming up, and this is my first Python meetup. So if there's one thing I want everyone to leave here today knowing, it's the difference between accuracy and precision. precision is another term for repeatability. Robots are really good at that. Given a taught pose in space, tell the robot to go back to the same pose over and over again. And usually most robots, industrial robots, it's measured on the order of microns. Accuracy on the other hand, robots are less good at out of the box. And it's when you tell a robot to go to an arbitrary position in its workspace, most out of the box robots, this will be measured on the order of millimeters. Now, it might sound small, but for high precision application, high accuracy applications, this is a big deal. And manufacturers don't usually spec the accuracy because this metric doesn't really look good. They rather the precision numbers. So why is this important? Well, if you're building a surgical robot and it's not accurate, you're going to have a bad time.  And if you're doing industrial robotics and you're trying to pick in place or machine tending and you miss the part in your CNC and it's still left there when the next part goes in, you're going to have plenty of collisions and poor factory floor performance. So in order to save time and money, we have offline simulation of robots. And in the factory, time is money. You don't want to shut down a whole production line to test your latest batch of code. There's no real continuous integration yet on the factory floor. So offline programming uses the model of the robot to simulate the robot operations and motions. But if your model isn't representative of what happens in real life, isn't representative of the accuracy of your actual robot, you're going to have a bad time. So this is, I promise you, the pretty much the only math except for the couple of matrix stuff in the Python later. How do we model a robot? Well, my personal favorite method is the modified DevNet Harmburg parameters, MDH. It's one of the most common methods. It uses the joints and describes transforms along the kinematic chain. This model you see here, the alpha A theta D, is an actual UR10 robot. So UR10, one of the most common collaborative robots, we'll see in a bit. This is what the manufacturer intended the robot to be mathematically. The actual robot in real life, depending on which one you have, it could be different from robot to robot, will have little errors intersparse throughout here, and that's where your accuracy errors come from. So let's take a quick look at robot motions. At the heart of robot motions, everything is a joint motion. Everything is angular around the revolute joints. So making Cartesian straight lines isn't trivial. And so we see these little curvatures. So as I said, making straight line motions, Cartesian space, isn't trivial. And this brings up the concept of forward kinematics and inverse kinematics. Forward kinematics is given a set of joints. What is the actual pose in Cartesian space? Inverse kinematics is very hard. Given a Cartesian pose, what are the joints required to create this pose? A lot of robots, especially UR10, it has a real hard kinematic solution, doesn't have a closed form kinematic solution. So we've got to use iterative methods in order to solve for it. And so quick little recap in robot theory. There's a lot of math. Modulation lets us save time and money, improve performance.  So into the Python part. Let me introduce Pybotics, my contribution to the Python community. It's a toolbox for modeling robotics and robot kinematics. It's built on top of NumPy to take advantage of the ND arrays and the matrix operations. And it's also fully typed and takes full advantage of MyPy, something I enjoy a lot. So why did I do this? Well, reason number one, coming from engineering, and McGill thinking that Fortran and C are the most important programming ligars in the world. Once you get into the real world, you realize you don't have MATLAB toolboxes everywhere. And Peter Cork, an Australian roboticist, made this amazing MATLAB toolbox for robotics that I could not get access to everywhere I wanted. And I also wanted to build something that would integrate with the scientific Python community, such as NumPy, scikit-learn, scipy, and TensorFlow, and now use those modern machine learning optimization libraries. So for the fun Python part of today's presentation, here's a UR10 robot. I couldn't bring it here today from my lab because it's expensive and a little bulky. But we're going to look at real data from real robot that I recorded not too long ago. And so this is one of the most common collaborative robots in the world. The company Universal Robots was just purchased by Teradine for $500 million. They've only been around 10, 12 years. They make three robots, exact same robot, three different sizes, essentially. This is the biggest size. And they sell about 1,000 robots a month. So this R2-D2-looking device is a Faro IN laser tracker. It's accurate to about 15 microns in a sphere of 110 meters. And the sphere I'm playing around with there was equipped to the flange of the robot. The robot was moved to random locations in its workspace. And I think I got a couple hundred recorded poses with an accuracy of 15 microns. And so we're going to use these poses to calibrate our robot. So to Jupiter. Let's see if I could do this well. Yeah, that worked-ish. All right, so imports. We know all this. This is going to be on GitHub shortly. So the first step to doing a robot calibration is to define your optimization function for the calibration. And so for this step, we're defining a fitness function that will take the measured positions in Cartesian space that we got from the laser tracker and compare them to the forward kinematics from the given transforms and joint configurations that we record with the robot. And what we want to do is starting with the nominal model of the robot. That's the mathematical model that the manufacturer gives us. We want to converge to a solution where our mathematical model matches the real life. So the world frame, standard four by four transform matrix, was very well measured in my lab. A lot of times, a lot of your errors will actually come from just where you place the robot and how good your measurements of your world frame are. But let's say for the sakes of this presentation that my world frame is very good. My tool frame on the other hand came from mechanical CAD data. And this we're actually going to do a quick calibration of prior to calibrating the actual robot. So using good old pandas to load up the CSV files of everything and the tool positions all loaded. Let's, oh, I should probably run the kernel. Yeah, let's just run all cells. Yeah, live dangerously. All right. All right, so let's, there we go. It works. So positions, I have my joints. Oh, these are the robot ones. We'll get the sheets to the bottom. All right, joints, laser joints. So laser are the actual measured position space. I'm using as a refer frame where the R2D2 robot actually was. A lot of times you might create a second world reference frame that's more rigid than a robot on a tripod. But for the sake of this, the reference origin was the robot, the laser tracker itself. I measured 151 robot poses. This is the tool transform. This is the nominal tool transform because I had to have the robot move and point towards the laser tracker with each motion. Using the nominal, the laser trackers is still able to find the sphere. And this is what the random points in the robot space look like. The hexagon at the bottom is where the robot's position. The laser tracker is where the triangle is. The blue dots are the randomized joints in its workspace. If this was a research paper, a reviewer would tell me that I'm biased towards one side of the robot. And in order to prevent overfitting, we wanna put aside a set of data. So we're gonna validate the robot's calibration with 30% of our data after optimization calibration while calibrating with 66% of our data. And the nominal model. So the initial errors, given a robot out of the box, a UR10 robot has errors on the order of five millimeters. And so this is what that looks like. So even though the robot itself, I'm pretty sure UR quotes about 250 microns repeatability. If you tell a robot to go to any arbitrary position in space, it might be off by up to five millimeters, which is actually quite dangerous for collisions when you're offline simulating your production line or trying to do surgeries because there are a lot of, since it's a low-cost robot, there's a lot of researchers trying to use it for even neurosurgery these days in research applications, not at the hospital. Don't worry. So we wanna reduce the max error below a certain threshold. And we're not using the mean error because you could still have a very high max error and your mean be really good. We want the max error to be below a certain threshold. That way, when we're offline programming, we can be very certain that all our motions will be below the threshold. And so first step, we do a quick tool calibration. So I move the robot to some very basic joints just using the wrist of the robot to very much isolate the tool transform. And PyBotics introduces a concept I came up with called the optimization mask. So using SciPy and the optimization libraries, you have to send in an NDRA of just the parameters you wanna optimize. But the robot could have up to hundreds of parameters that are composed of the kinematic chain, the tool transform, the world transform, and any other transforms they have along your forward kinematics. So the mask allows us to retain all those parameters but only extract the ones we need when performing the calibration. And so this is pretty simple. We just have a world frame. So we have the six dimensions of a world frame, the kin magic chain in MDH parameters. There are four parameters per link. There are six links on this robot. So we have 24 parameters for the robot. And the tool is just another four by four transform. So we have six parameters right there. Time to calibrate. We have our fitness function from before. We have our tool calibration robot model. The joints required for the tool, the positions recorded from the laser tracker. And we do a calibration. This one is pretty quick. And let's see the difference. So just from the mechanical CAD data, which is usually pretty accurate, but apparently I didn't mount and screw things as accurate as I thought. We have a couple of millimeters of air right there in our tool transform. So that's step one. Step two is do the actual robot. Same idea. We're optimizing just the robot now. We closed the optimization mask to the world frame and to the tool frame. We're masking just the kinematic chain. You'll notice there's a couple of falses in here. There are redundant parameters in the robot way outside the scope of this presentation. Max function evaluations was put to really low 50 for the sake of computation time in this presentation. That's what the warning is for. And we have our new kinematic model. So the diff between the old model and new model is just little microns of air sparse throughout the robot model. And in the end, that gives us this kind of calibration. The blue is the robot out of the box. Now all our errors are below one millimeter. And this is from five minutes with a 50 max FEV of sci-pi. I've run simulations that have spanned days and we could go much further. And there comes a point where you hit the asymptote of optimization. But generally speaking, the more points you have, the better off you are. And so just to look at things a little closer, I believe the max error, where was that? Wherever it went, here we go. Max error is now 0.6 millimeters with a mean of 250 microns. So we turned our $50,000 robot into something that could be used for human surgery. Back to the fun stuff. So why don't manufacturers calibrate their robots? Well, it'd be expensive. Every single robot would need its own individual calibration and most of the time you get the most bang for your buck just by really well measuring your world frame and your tool frame, but doing the kinematic calibration also helps. And we see from this that NumPy, sci-pi, the scientific Python community, they're fundamental building blocks for not only the Python developers and programmers, but for people like me who came from pure engineering and science and it's because of these packages that I was able to really integrate into this wonderful ecosystem. Robots aren't very accurate out of the box, but as we saw with 15 minutes of time and a fun little robot modeling toolbox, we could fix that. So if you love robots just as much as I do, what's the future of robots for you? Well, I believe that there will come a day for hardware continuous integration. One of the talks I proposed at PyCon would have been a whole mechanical engineering Python integration thing and I've built these packages that try and do continuous integration with like very much GitLab style, but with CAD files. It's a whole mess because that area of mechanical engineering, it's just a monopoly of vendors, real pain and everything's on Windows. You could contribute to robots, devices, make some wrappers for all the hardware that's out there, make some serial port communicators, sensors, frameworks and toolboxes. There are very little standards these days and we need more open source standards. Like just looking at Protobuf, it's been a godsend for robotics. We're able to through ROS, through different manufacturers, we're able to standardize robot protocol communication, really big help, and you could do like me, get a graduate degree, going to make a plug for my lab at ETS, the Control and Robots Laboratory. We have about one of every robot in existence. We have less grad students than that, so the ratio is prime for having some fun with some really expensive toys. And so, thank you very much and this is where you can find me. Alright, so I'm apparently going to repeat all the questions if you have any questions for me so that they in back could get it. English or French, I'm good with both. Don't worry about it. Yes and no. It's funny because the potential is way out there for doing anything with robotics and then you watch grad students program robots and you realize they'll break themselves before they get very far. We were doing the Amazon Pick Challenge in our lab and the amount of times I heard the robot just crash into the table and it's trivial stuff, like picking up packs of gum. You think it's trivial, it's not trivial. It's not trivial. So one day, yeah, but I don't know what's first, AI or robots? We'll find out. So if you, so question is, if you move the robot, do you need to recalibrate? Depends. The kinematic chain should stay constant if you calibrate it properly. If you drop the robot, then no. The tool, because remember, we're talking about microns here and there and if you think the robot is just one long radius, the smallest little deviation at the front or the back over this robot's 800 millimeters, so almost a meter long, that could create millimeters to even centimeters I've seen of air at the very end of the kinematic chain. So rule of thumb, if you unscrew something, do a double check for the surgical rope. So there's some stuff on embargo right now. I'm presenting at Neuroscience, the big Neuroscience conference in Washington next week. So at PyCon, I might be able to present a little more on the neurosurgical robots, but essentially we calibrate every single session. So yeah, yeah, yeah. Well, okay, so the question is, given the kinematic models of a robot, how do you know it's right? And how do you know what the model is? So getting the model is pretty easy. I'm gonna use the right hand rule of trimacer transformations. You have your alpha, A, theta, D transforms and this, yes, there are two parameters for those paying attention. There are two parameters missing from that to make it a proper four by four transform, but there are certain assumptions to this that your chains in between are parallel. There are models that will take that into account and that's even higher levels of calibration, but essentially given, like for instance, this robot, we'll start at the base, we'll have our first joint, we'll go up and do a rotation, we'll have our second joint, we'll go up and do another rotation, third joint, third and you'll go along the kinematic chain. So that part's pretty straightforward as long as you follow the step-by-step procedure. Craig's textbook, absolutely amazing, explains that with nice diagrams. How do you know it's right? You need your manufacturer to give you the measurements or you spend a whole lot of time trying to figure out the measurements and a lot of manufacturers, they'll usually be nice enough to give you the kinematic chain, they definitely won't give you the dynamics and so they won't tell you where the center of mass is for each link, they won't tell you the friction and so what we did here is technically a level two calibration, just doing the kinematic calibration. Not so much found in industry unless you're in aerospace and whatnot, but in academia, we often do a level three calibration where we take temperature and count, the friction of the joints, gravity, if the moon is out, all these things, just to get that, to go from 250 microns accuracy down to those tens and that's when you need a whole ton of points and a whole ton of measurements. Okay, so where it's coming from? Well, if you come to a point in this way, you're going to be right up there. Yeah, so. So you're going to be on the moon. Ah, ah. So the question was, how do we know that the error isn't dependent on the previous position of the robot? So one important thing, like I skipped over a lot, randomized measurements. So it's a bit of a Monte Carlo model where you're just throwing random measures out there so hopefully you disperse that into the noise of the system. For sure, where you're coming from is very important because you might have hysteresis and backlash in your joints, which is actually funny because ISO 9283, I believe it is, defines robot accuracy as going to the same five points from the same direction only 30 times. So, yeah, it's the last time that was revised, well, the last revision that was accepted as a change to the standard was 1998. And I think a couple of years ago, they deemed it as still up to date and so they haven't updated it. So push your standards committee maybe for randomized methods. But it's also hard, if you say randomized, then manufacturers will use randomized to their advantage a lot of times. So we might not get some, it's nice to have a standard where you know exactly where those five points were, but it's also more mathematically correct to use a randomized method. All right, not yet. And I've been, I've been spoiled. So the question was, have I ever tried calibration on the cheap robots? I've been spoiled, that's for sure, with having access to these overly expensive industrial robots. I would imagine that it would improve the accuracy, but as I said before, the biggest constraint with the cheaper robots is the stiffness. And even though that is a level three error with it's a non-linear error where your error will then depend on where you are in space as well. And that would require a whole other level of calibration to get very stiff. I saw this one as a white robot on Kickstarter that in the, their little cute video that they have to try and sell you the stuff, they were saying how accurate it was and they had like this pencil looking thing that the robot would go to and in the video is off by like three centimeters. But they just, they just skip through that portion of the video so quickly that it was like, oh yeah, black magic. So it's stiffness, step one, stiff robot, step two, calibrate. So the question, the question is wouldn't it be easier to use machine vision? So yeah, visual servoing is the term for that. And it is very easy and very difficult at the same time because now you run into camera calibration issues and visibility of your tool. Robotsik, a Quebec company, actually a wonderful company, co-founder is one of my jury members for my PhD. They just added a wrist mounted camera for their gripper system. And so you're able to do visual servoing right from the wrist as you're gripping. That's very good. The biggest problem constraint I often find when I do machine vision applications, especially in a visible light spectrum, is your lighting conditions. And in a factory you might have like flood lights and you could really standardize that. When I do medical applications, every OR is a different lighting condition and it drives me crazy. So if you can use the infrared spectrum so you just blast infrared light, no one sees it, no one's hurt by it and you just use reflective markers or whatnot. But visual servoing, it's yes and no. It depends on how it's set up. We have at the lab, the Finook stereo vision system mounted on this big 80-20 frame. Took about half a day to calibrate. Absolutely wonderful. Only for this area. And so when you have a robot that has a reach of almost a meter, let's say, you want to try and maximize as much workspace. So either you have to go beyond two cameras, then you have to start stereo calibrating, stereo matching between your multiple cameras. The complexity rises pretty quickly. And if you want to do machine vision, open CV, absolutely wonderful, used in the industry a lot. Contribute back to those packages. All right, well thank you very much.


Team keeping clean just found out that Thursday is probably gonna be even more significant than I initially thought it would be So I'm looking forward to it looking forward to seeing a lot of y'all It should be a lot of fun again. Make sure you subscribe Please subscribe and turn them notifications on so you do not miss anything if you are in Baltimore I mean even if you're not a Baltimore, but subscribe and turn notifications on cuz I don't want anybody to miss in nothing Nothing you can follow on Twitter to everything in great videos But anyway, um while I'm excited for that. I'm happy about that Somebody from yesterday's events didn't really seem too happy That being Dante Demis, Jr. And of course, he is the undrafted rookie free agent Why receiver? From Maryland that the Ravens picked up who a lot of people they said that last year and had it not been for the injuries and stuff He could have been First-round pick you said the talent is there the ability is there Just the injuries missed a lot of things up and he never really got fully back healthy So a lot of people feel like he's somebody that could make this Ravens roster He's somebody that actually has a legitimate shot to making the roster now I Still think that would be very very very tough Because again some of the top spots like they're pretty much set in stone less. I'm crazy what happened The top spots are pretty much set in stone because you got a Odeo Beckham, Jr. You got a Richard Bateman You got a Nelson Aguilar. You got a Zay flowers. You got a Devon do like that. That's five receivers off top right there Right there. And so for him to make the sixth wide receiver spot, which is possible But he would have to beat out James Pro Shade, Tyler Wallace and I'm not I can't recall who else is there right now. Oh Laquan Treadwell and this is why I think that he may not have been a big fan of the move because of course it was announced yesterday That the Ravens they were going to be signing Laquan Treadwell and that became official today They officially announced it from their social medias today about two hours ago So I'm sure that pen has been put to paper and if not, then it will be very very very soon because the Ravens they They can't announce stuff until it's like pretty much official official That's why during free agency and stuff especially during the tampering period They don't announce any deals until the guys actually signed But anyway a couple hours after it was announced that the Ravens were gonna be signing Laquan Treadwell Dante Demis took to Twitter and he said Okay, bet Now I know a lot of people like to say, oh No, you guys are just looking too much into it. Ah, you probably talk about something. Oh, man It's not about that. You'll think everything that these football players tweet and put on social media is about the NFL No, man But I bet you this one is as well I remember people thinking the same thing about like Patrick Queen scrubbing the socials Hollywood scrubbing and socials. Oh, no, you're looking too much. What happened a little while after that? Oh, ho ho Hollywood was out of there The Ravens draft Trenton Simpson Patrick Queen tweets And of course it was related to that Lamar Jackson when he tweeted that SpongeBob gift We made a video that night. Oh, we knew something was going on Something was brewing and then the Ravens they mess around the next day and they retweeted it. I said, oh, yeah Okay. Hey, yeah, then some people like, oh, please. He just no man. He just he just trolling Well, he is doing a bit of trolling, but you know, I had something to do with something with football with the Ravens Even Odell Beckham Jr. The night before he said book him and then somebody some people were talking about Oh, no, Odell Beckham Jr. He was talking about the Sun's game The game was 12 hours earlier Like he ain't talking about no basketball game. Hello Then Lamar Jackson signed and then Lamar Jackson was even asked about it in the presser Like what was the SpongeBob gift about and I think it was James and Hensley that asked me He was like, oh, yeah It has something to do because I was really liking the numbers that I was seeing from Eric the cost Yeah, you get it. So with Dante Demons, Jr. Okay bet It may only be two words But if no is a full sentence, so it's okay bet But I that's why I appreciate it JK Dobbins a lot the other day for his just straightforward tweets like hey Ravens fans. I love y'all, but I don't know if I'm gonna be with the Ravens forever I don't know if I'm being bought some more forever. I just don't know and I'm paraphrasing, of course But you can check out the video that we made on that to see exactly what he said But JK was straight up with it. He ain't like leave nothing to the imagination He told everybody exactly how he was feeling in that moment. I said, hi JK. I appreciate. I love that but with Dante Demons The reason why I feel like he is a bit upset about that It could be a couple different things. It could be him being upset because it's like man like hey I'm over here doing my thing. I'm over here showing out. I'm over here like hey I'm trying to make this happen But why you why y'all bringing him in for what? What's the reason? What's the point? Y'all got me You have a receiver right here Don't bring him it you got me that could be something that he could be thinking because because oh when somebody says okay bet It's not a Happy thing. It's not. Oh, okay bet. No, it's like alright okay, bet and When you say that that means You're accepting what it is that's going on, but you're not necessarily okay with it, but you are going to deal with it So what this could mean? I was wondering a couple things like one. He's like, alright, okay bet Bring on a competition And it could mean two things it could either mean alright I'm gonna show these Ravens why they're making a mistake signing him They don't need to sign Laquan Treadwell and it of course ain't no offense to Laquan Treadwell But it's like hey, they don't need him. They got me why they bringing in this guy Hey, he done been in a league for a while and things have been a little bit rocky or whatnot But I'm a new guy. I'm a new up-and-comer. Let me get my shot But then another thing that I was thinking too that it could mean I Wonder if it would impact his status as a Baltimore Raven Now we'll with them announcing this move We should find out later today around 4 p.m. I'm not I don't know how many people the Ravens have on their roster right now I don't know if they're at 90 and I don't know if Laquan Treadwell will put them at 91 Or if they haven't even reached 90 many yet. I don't know but I Wonder if this would affect his status on the team in more ways than one obviously it could impact his status because They're bringing in somebody who's been in the league for a little while got experience in what not knows a lot of the ends and outs of around the league and that can obviously have an impact because it's like a Veteran guy versus undrafted rookie free agent at the wide receiver position Especially how the Ravens have not even been just addressing wide receiver this offseason, but attacking it They have really been attacking it a lot So and we love it. We love it. You ain't hear no complaints out of us by how they've been addressing wide receiver I love it all. So great job. Eric D'Costa We've been saying if you want to add more go ahead. Do you think and Eric D'Costa seem like he been listening He's like, all right. I'm gonna do my thing. I got it, but um They really been attacking it so this obviously could impact the depth But what we always talk about if you have more quality depth than your worst wide receiver is that much better? But then another thing that I was thinking about Could it mean and again, we'll find that out later today if this is the case, but could it mean that He's gonna be released That's one thing I was thinking about. I was like, hmm. That is also a possibility. It's a real possibility Um, because especially as an undrafted rookie free. It is tough, man It is tough. I hope it doesn't mean that because I want to see the best of the best I want to see these boys compete and I would love y'all know me y'all especially when it comes to wire See, I would love if guys that we have on a bench. That's not even getting much playing time Could be guys that could go out there and ball that could be guys that could go out there and start if need be I would love if those were Ravens bench guys So that would be amazing. I know you can't have all starters everywhere like as far as being on a bench and stuff But that's what I would love. So again, it's about that depth about the quality the quality of the depth So we'll see we'll see we'll see what it means very soon It even means anything as far as his status on the team, but I definitely think um with that okay bet He's definitely accepting the competition. I mean he got no choice but to accept the competition because I mean why receive us It's crowded there, which is Cuz it's not usually like that but um We'll see how it impacts his status Whether we see today or in the coming weeks or the coming months or whatnot because like I told y'all yesterday With them signing Laquan Treadwell to me It seemed like somebody was gonna be on the way out Whether via trade whether via release cut wave whatever it just seemed like Because the timing of everything but again, like I said if I'm wrong. Hey, okay, I'll be wrong I don't been wrong a lot of time before and I'm going to be wrong a lot of times in the future as well But we ain't got no shame in a minute when we wrong though because we But anyway, um, I love y'all team keep it clean. I appreciate y'all team keep it clean Dante Demis, Jr. I Hope he doesn't think man. I really do a little bias in essence. He from Maryland, too I mean if he would have been from Florida do a Florida or Maryland and he's on the rate You know that bias kicking like crazy for me, especially, you know, if they from Florida to it like a but anyway I love y'all. I appreciate y'all team. Keep it clean again. Make sure you subscribe. So you do not miss anything Please subscribe. I love y'all so much. I appreciate y'all so much And like I hope Dante Demis isn't when it comes to being a Baltimore Raven We out


So, everyone, today is Monday, March 23rd at 7.42 a.m. I'm going to do a video watch today. A couple things I want to talk about before I start is today is the last day of our St. Patrick's Day sale. So, we have some of our most discounted prices ever on annual lifetime. So, that's going to run out today and I don't think we're going to plan on doing a sale for another couple months. So, if you're interested, you can click on this link if you remember. You just hit up Tosh. So, for those of you that don't know, I'm pretty sure I had the coronavirus. I think I still kind of have it. I'm not really, excuse me, I'm not really a hundred percent yet, but I'm kind of good enough to get out of bed. So, that's progress. You know, this virus thing is real. It was in pretty bad shape. I'm starting to feel better, but again, my goal today is trade in the morning and then get some more rest. I don't want to kind of overstress my body. I woke up with like my neck hurting a lot.  So, I just want to say thank you to Bautash and all the other mods for kind of helping me, helping the members while I was away. I hate being away, but I mean, I hadn't really no other choice. So, I missed a lot of action while I was gone, but that doesn't mean that there's going to be no more action. So, I'm just going to take it slow today, looking for the best setups only, and let's kind of start with this watch list. So, TNXP, this is essentially a low hanging fruit kind of pushed up right towards pretty much Friday's highs. I've been ejected, and now it's nearly red. So, I mean, in a perfect world, what I'm seeing now is a push towards 110, VWAP to short, 120, 130. I'm not really sure if I'm just going to be shorting it here into weakness. I don't really like shorting into weakness unless there's a lot of meat on the bone, but something like this. These penny stocks like to kind of hold the dollar usually. So, I'm not going to be really too involved or interested there. BLPH is kind of bouncing a little bit. What I see in the morning is an 18 level here. I see some in the 19s and some in the 20s. So, basically using every dollar as my entry on something like this, I will not chase weakness on this stock. It's very thin. So, just need to be very careful there. WTRH. Again, another kind of runner that's tanked and now bouncing. What I see here is pre-market highs of 180, right? So, then I want to also short this kind of $192 mark, right? $192. And then if we get up to like another 220s, which is kind of over here, right? So, I mean, these are the kind of lines I'm drawing every morning. Ideally waiting for these stocks to get to those levels. What else is there? SMGX. This is a new play. If you look at the daily chart, I have resistance towards 350s, but it went towards 3 in the morning and kind of pulled back. So, you know, the morning is when I see some resistance areas. See some resistance areas in the 260s. When I was making this watch just a little bit earlier, VWAP was at 260s. So, kind of watching that level. So, 250, 260, 270 is kind of the main areas that I'm watching to short this low-hanging fruit. CANF is a new one that's popping up. Maybe 250s there, but we'll just wait. APRN is another one. I see 16 level on the daily. I mean, I'm the previous chart right over there. Doubt it's going to get up that high, but if it does, that's going to be my ideal entry. So, again, guys, there's a lot of new members that joined over the weekend and last week. Thank you for joining. Thank you for trusting us. The key that I want to tell you guys is to make sure that you focus on education first.  My recommendation will be to watch the videos, to pay for trade, to build consistency on paper, and then from there you could kind of switch over to a live account. But again, don't be on paper for more than, you know, three weeks or a month because then that will kind of screw the way you think about trading. Again, I'm really not feeling it too hot, so I just want to really take it slow today. I only want to focus on the best setups only. I don't want to touch any subpar setups. I'm looking again at low hanging fruits only and continuation plays only. Hot chicks just trying to stay clear of. So, if you guys have any questions, you can DM me. If you guys have any questions about training, you can text Tosh at<PHONE_NUMBER>. And for all the new members, what I do is at the end of the video, I do a secret work to make sure that you guys are all watching it. So reply into the thread iPhone if you made it to the end of the video. So, thank you guys for all the love and all the kind words that you gave me while I was sick. Really helped me stay positive.   Thanks guys. Have a good day.


Hello again everyone, I'm Ray Gildow host of Lakeland Currents. Join me this week as my guests and I talk about the brain gain in rural Minnesota and how it's changing what we are doing.


Oil production by country, top 10 leading oil producing countries in Africa. Africa's largest oil producers have had a turbulent year, with global oil demand falling 11% in the first half of 2020 and OPEC removing 9.7 million barrels per day BPD, from the market in a historic agreement last April. In short, the condiments leading producers have maintained their dominance, albeit by narrower margins, with Nigeria and Angola producing 25% to 30% less in 2021 than in 2019. Despite a resurgence in oil prices and a stepped up exploration drive, African producers are attempting to increase output to pre-COVID-19 levels as OPEC gradually eases its production cuts. Many African governments have long relied on crude oil as a source of revenue. Over the continent, crude reserves abound. Status estimates that the continent's known crude oil reserves will be 125.3 billion barrels in 2021. As you may know, having plentiful crude reserves is one thing. Being able and willing to extract this oil is quite another. And since we're talking about oil output in 2021, it'll be interesting to see if the countries with the most crude reserves also produce the most. Welcome to Africa Reloaded. In today's video, we'll take you to the top oil producing countries. Starting from the bottom, here are the countries with the most oil reserves. Stay tuned as we find out more. 10. Chad Crude Oil Production. 109,000 barrels per day. Chad is a landlocked country located at the intersection of North and Central Africa. It is bounded to the north by Libya, to the east by Sudan, to the south by the Central African Republic, to the west by Cameroon, to the southwest by Nigeria, and to the west by Niger. Chad's oil reserves are estimated to be 1 billion barrels, with the Doha Basin in the south providing the majority of the country's crude. ExxonMobil and Shell are the two major players, with the former overseeing the Chad Cameroon Development Project, which transports crude from oil fields in southern Chad to a marine terminal in Cameroon for export. 9. Equatorial Guinea Crude Oil Production. 153,000 barrels per day. Equatorial Guinea's Ministry of Mines and Hydrocarbons plan to increase E and P activities in 2021 and attract $1.1 billion in foreign direct investment into the oil and gas sector to compensate for decreased output at the SEBA and OKIN complexes. Trident Energy drilled three wells in Block G, meanwhile. Maintenance on the Sefirro, Jade and Serpentine infrastructures, as well as production optimization and management of inactive wells will be carried out. The Sefirro field operated by ExxonMobil was producing 90,000 barrels per day prior to COVID-19 via the J Fixed Production and Drilling Platform and Serpentine FSO, making it the country's most productive asset. 8. Gabon Crude Oil Production. 160,000 barrels per day. Gabbani's oil production has been declining due to field maturation and a lack of investment to rebuild production bases, which has been exacerbated by opacled production cuts that have reduced output by nearly 100,000 barrels per day. As a result, the country is seeking new offshore exploration investment. Furthermore, with the changes to the hydrocarbons code and its enactment in early 2019, there are high expectations that a reformed and more flexible regulatory environment will result in new capital and technology infusions into the sector. 7. Ghana Crude Oil Production. 108,000 barrels per day. Ghana is a West African country. It is bordered by the Gulf of Guinea and the Atlantic Ocean to the South, the Ivory Coast to the West, Burkina Faso to the North, and Togo to the East. Ghana's long-term production prospects are bright, thanks to strong output from the productive jubilee and 10 oil fields, as well as increased foreign investment in offshore basin expansion. Oil output is expected to more than double to 420,000 barrels per day by 2023, thanks to new fields coming online, including the Deepwater Tonneau Cape three points operated by Acre. The Norwegian company is also working on the $4.4 billion pecan field, which has between 600,000 and 1 million barrels of oil. 6. The Democratic Republic of the Congo. Crude oil production. 271,000 barrels per day. Oshore oil and gas dominate the Republic of the Congo's extractive sector, and the government has been able to offset declining output by bringing several projects online over the last decade, including its first Deepwater well, Mahobailondo. A multi-client aerial gravity gradient survey is currently being conducted in the Kuvert Basin area to improve exploration activities. At the same time, Zenith Energy received a new 25-year license to operate the Tilapia oil field at the beginning of the year. 5. Egypt Crude Oil Production. 560,000 barrels per day. Between now and 2022, Egypt will invest $1 billion in new oil and gas exploration in the Western desert with the goal of increasing daily crude output. Further war between July 2014 and June 2020, the Egyptian government and multinational operators signed 84 petroleum agreements for oil and gas exploration, totaling $14.8 billion in investments, including $1.1 billion in grants to drill 351 wells. 4. Algeria Crude Oil Production. 874,000 barrels per day. Prior to COVID-19, Algeria, which has the continent's second largest oil reserves, had a reasonably consistent rate of production of around 1.1 million barrels per day, though output has been declining in recent years. To counteract the decline in foreign upstream investment, the government has promised to increase oil and gas exploration activity in collaboration with multinational operators by reforming state-owned SONATRAC and enacting a new hydrocarbon law. 3. Angola Crude Oil Production. 1.14 million barrels per day. Prior to the implementation of COVID-19 and OPEC-led production limits, Angola's oil output was expected to rise. A six-year licensing period, a revamped contracts and awards management procedure that incentivizes exploration, and a streamlined national oil firm focused solely on E and P activities have all contributed to the country's sector revitalization. Short cycle tiebacks at Tobol's Block 17 are expected to result in new discoveries while maximizing existing assets as are exploration license extensions at Chevron's Block 14 and ExxonMobil's Block 15. 2. Libya Crude Oil Production. 1.17 million barrels per day. Libya, officially the state of Libya, is a country in North Africa's Maghreb region. It is bounded to the north by the Mediterranean Sea, to the east by Egypt, to the southeast by Sudan, to the south by Chad, to the southwest by Niger, to the west by Algeria, and to the northwest by Tunisia. Following a blockade on the country's oil export ports that reduced output to less than 200,000 barrels per day, Libya restored pre-blockade output levels by the end of 2020 and is expected to stabilize production in 2021. The Libyan government has approved a $1.6 billion budget for oil field expansion and infrastructure maintenance, allowing the National Oil Corporation, NOC, to meet its 1.6 million barrels per day target in two years. 1. Nigeria Crude Oil Production. 1.36 million barrels per day. Nigeria, located on the Gulf of Guinea, is home to numerous natural wonders and wildlife reserves. Nigeria has one of the largest economies in Africa. It has been primarily based on the petroleum industry since the late 1960s. Nigeria, which is leading the pack, intends to expand its hydrocarbon sector by launching over 100 oil and gas projects, including 25 upstream projects, over the next five years. Meanwhile, the Nigerian National Petroleum Corporation recently announced a contract with Shell, ExxonMobil, Total, and any to develop an offshore oil block that includes the deep water bond the field, potentially unlocking up to $10 billion in new investment and increasing domestic output by 150,000 barrels per day. Thanks for watching this video. If you found it intriguing, do not hesitate to give a thumbs up and also turn on the notification button for more exciting videos on this channel.


Hi and welcome to another card making video, I am going to play with the February Kit of Foiling by Spellbinders and I am also going to play with the new color Kitch Flamingo by Tim Holtz, I am starting by combining Kitch Flamingo with Spiced Marmalade which is a combination which is absolutely stunning, I inked up both ends of this paper all the way to the middle, I made sure that both ends are nicely saturated with color which is something very easy to do with the oxides, the ink kind of stays at the top and then I am going to blend those two colors together making sure that I don't have a harsh line as you can see I go over that line again and again very lightly and it works just like magic it is a really stunning background and I absolutely love this color combo if you like it as it is you can use it and just stick your focal point on top and your sentiment I decided to go with some water splashes, I leave them for a few seconds to react to the ink and then I'm going to use a paper towel and this is going to lift some of the color for a very interesting background, I'm going to bring in the Spellbinders Foiling Kit of the month and this time it comes with those essential plates these are going to give you a really beautiful design all around and you can use them as a frame or even to frame a little sentiment there are also three sentiments included one is for birthdays the other one is a thank you and there is also the word hello I'm going to use the biggest of those plates and align it on top of my background and I'm also going to combine one of the sentiments I usually send a lot of thank you cards so I'm going to use the thank you sentiment here for my foil I decided to go with gold and you will see that that gold on top of kitsch flamingo is absolutely stunning I'm using my little trimmer by Spellbinders which is very handy when it comes to foiling and this way I can easily measure and not waste any foil at all and since I want to do both the frame as well as the sentiment in one passing I'm going to create a hinge then place the foil underneath and I'm going to also secure the sentiment on top making sure that it is as straight as possible I'm just going to eyeball that and then secure everything down with some washi tape I have my machine warming up I'm going to place that on top of the platform I press the button and waiting for that green light to stop blinking as I am preparing the sandwich and then I'm going to run it through my die cutting machine I always run it a couple of times this will ensure that you have a good contact of the foil and the warm plate and you will have a good impression every time now I'm going to very carefully remove the plates without burning my fingers and you can see the wonderful result this frame is absolutely stunning and is going straight into my essentials because it makes a card look finished and it adds that extra something on the frame also the three sentiments that are included with all those nested frames are essential as well and in between thank you happy birthday and hello you can create a huge variety of cards now if you are a fruger like me with your supplies don't throw away this foil there is plenty of foil in the middle that I haven't used and I can use it on another project now if you notice at the top corner I do have some over foiling I can easily remove that with a sander eraser very lightly making sure that I don't remove any of that inking from the background I don't press my sander eraser I'm just gliding it over the foil and you can see that I can remove that with no issues at all and without removing any inking from the background now at this stage you have a beautiful background with a sentiment and all you have to do is to just stick a focal point on top I decided to go with a flower that I had in my stash and I cut it you can go with any flower stamp or dye that you have at your stash it would look just beautiful that's because I have the pink and orange at the background I decided to go with daisy and mainly staying with white the white flower on top of that background is going to look really stunning and vibrant it's going to have a good contrast and this is something that I will just go with when I am deciding my color combinations on all my die cuts I do add a little bit of movement by using those scalping tools you can do that with your fingers if you don't have something similar and I'm going to assemble my die cut flower by the way this daisy is by Altenew and just like always you will find everything I use down below the description area linked to multiple shops I did stick the center of the flower with foam tape at the back since I have enough dimension and also I have foam tape at the back of my flower I like to have some dimension on my cards and I cannot stay away from that now I'm going to stick the leaves just tuck them underneath the flower and all I have to do then is to stick this panel on top of a pre-folded card that's for on a quarter by five and a half and that was a project for today a card that smells like spring although we are expecting loads of snow on Saturday and as a thank you I'm going to send this card to one of you all you have to do is to just like the video leave me a comment and I will pick a random winner and get in touch with you along with this card you will also get some goodies so I hope that you had fun today and that you got inspired thank you all so much for joining me today and I hope you all have a lovely weekend