Right, we're back. Thank you very much. Again, some minor technical difficulties, so apologies for the delay. So we have with us Travis Kirk, who is going to be talking about making consort diagrams with R. Dr. Kirk is Director of Data Science at the Prostate Cancer Clinical Trials Consortium, where he directs data science efforts in cloud-based informatics and advanced analytics with a focus on the healthcare sector. Formerly, he was a visiting scientist at the Harvard School of Public Health and Assistant Professor of Epidemiology at the University of Florida, where he focused on application development of tools for applied machine learning causal inference and biostatistics. Dr. Kirk holds an SED in Epidemiology from the Harvard TH Chan School of Public Health, an MA in biostatistics, and bachelor's degrees in mathematics and statistics. So without further ado, I will hand over to Travis. Thanks, Chris. That was kind of you. So can I get a, we're good to see my screen and everything? Can you give me a verbal yes, because I can't see anybody now? Yes. Thanks. Great. Well, thanks again for having me. So I know we're a little bit behind, but I ran this talk a little bit short because I knew these things happen. So I think we'll be able to get back on track and nobody has to stress. We're all good. Thanks so much to the organizers of our medicine. I'm so happy to be back this year. I was around last year. It was great. It's even better this year. So thanks again, the sessions so far have been awesome. I apologize that I didn't pre-record this talk, which I'm of course getting live right now, so I can't have fun interactions with you in the chat like some other speakers have done. I've learned my lesson. I'll do a better next year. But for now, we'll just go ahead and proceed. So again, I'm Travis Kirke. We're actually hiring at PCCTC, so feel free to reach out if you're looking. I'm here today to talk about consort diagrams. So if you attended last year, you may remember Peter Higgins' excellent talk of the same GG consort name. To avoid reinventing the wheel, I'm going to borrow two of his interest slides and then provide some context for why I'm back to talk about this topic. If you aren't familiar, consort diagrams are figures which show the flow of participants through a trial. Here you can see an example of a consort diagram from the New England Journal where you can see the number of participants, in this case infants, who were assessed for eligibility, the number who are ineligible for various reasons, and the number randomized and followed up. These diagrams are expected by most medical journals, certainly for clinical trials, and often these days for observational studies as well. Today, consorts are typically handcrafted into templates provided at the consort group's website, which is linked here. Peter last year used the afterward artisanal to describe this process. These templates work well enough, but copying and pasting from your analysis into word docs, as you can see me doing in this slide, can be error prone. It is a common gotcha for manuscript or study reviewers when numbers don't match up. Some implementations of consort diagram construction do exist. Thus far, these are not GG plot based. Some of you may be familiar with the excellent diagrammer package, which when carefully used can achieve this goal. Danny Wong, Norbert Kohler, and Ben Gerber's pull request to Peter Higgins' GG consort repository do use it. The challenge with diagrammer is that its output is actually too elegant for blocky consorts. You can see an unanswered stack overflow question below, showing diagrammers aesthetically nicer rendering of a consort, but it has these curved lines that don't really conform to consort rules. In other attempts, my group implemented a latex tixie version a few years back, and earlier this year I embedded the flowchart.js library into an R package called flowchartr, which was fun, but also didn't permit enough customization to make the full consort diagram possible. So here we are, still lacking an end-to-end GG block compatible consort implementation. Having tinkered with this idea for years now, I had some building blocks in place, and what I was developing unfortunately did not extend Peter's package from last year. I didn't want to risk a GG consort to naming situation, so it was time for an email. I said, hi Peter. I'd like to take a pretty different approach to GG consort. Are you willing to transfer the name? Travis. Peter, being the archetype of the generous and awesome R community, responded. Hi Travis. Feel free to use the name, hex sticker, and anything else useful. You can give me the link to the Github repository. Peter. Great. Thanks again, Peter. This was awesome. And thus, GG consort was born again. So here we are. The new GG consort framework posits that consort construction happens in two distinct stages and provides convenience functions and our objects for each. First, at the time of data wrangling, we would like to capture counts of cohorts or sub cohorts, for example, consented patients who are randomized into a data object. This will streamline efficiency and enhance reproducibility when the source data changes, for example, due to a regular data update. Once the counting and annotation object is established, we can begin work on the second phase diagram layout. We do this by creating a new data object that is ready to pass to consort geomes in GG plot, which specify layout and general aesthetics of the diagram. So let's work through an example. Here you can see a simulated data frame, which is included in the GG consort package. I wish I had been using Peter's package that I just saw 30 minutes ago, six months ago, but lesson learned. And in the next version, we'll see it happen. In any event, trial data contains simulated information again on 1200 patients who are eligible for a study. Some of these declined to participate, as denoted in this declined variable, or were ineligible due to two exclusion criteria, prior chemotherapy or bone metastasis. Eligible patients that were left were then randomized to receive either drug A or drug B, as denoted in the treatment column. The fundamental building block of GG consort is a new object of type GG consort cohort. We initialize one in a dplyer chain using the cohort start verb, which also accepts a label that describes the full cohort represented by the source data. New cohorts are added to the GG consort cohort object using the cohort define verb. The full data source object is always accessible as dot full, as you can see here. And we construct new sub cohorts with standard dplyer. Here you can see we've created a subcourt of 1141 consented participants out of the original 1200 participants. And so we can define further subcourts. We use, even if we wish, previously defined cohorts. And here we're going to identify the chemotherapy naive participants among those who are consented using the consented cohort, which was defined in the previous step. So now you can see we have these 1028 chemo naive consent patients out of the 1141, which was a subset of the 1200. So you can see the directions is going. And in this way, we can continue to build out all subcourts, which need to be represented in the consort diagram. We've now added randomized patients, that is, those who are consented, chemo naive and did not have bone metastasis. And those who in the end were assigned to drug A or to drug B. Often in consort diagrams, we need to count the difference between two cohorts for enumerating exclusions. Anti-joint is very useful for this purpose. Here we use anti-joint to identify the 262 excluded patients as the difference between the screen population of 1200 and the randomized population of 938. That math does check out, I promise. Now each of these cohorts should have a label for descriptive printing in the console or in the ultimate consort diagram. We provide those labels with the consort label verb. Finally, we store the GG consort cohort object into steady cohorts with a right assignment operator there at the end. So I've got this steady cohorts. Again, that's where we're living with this object. And these objects now have print and summary methods. So here's the summary of what we've built so far. You can see I've added a few more exclusion categories. Those who had prior chemo, who had bone metastasis, that I didn't do in the previous step, but the processes as you saw before. And then I added their cohort name, count and their label. So that's everything inside of steady cohorts now. And we're ready to move on to the diagram layout and aesthetics, the phase two of this process. But before we do, I want to point out a convenience function for pasting or gluing cohort labels and their counts together into a single string, such as you'd want in a consort diagram box. Cohort count adorn does this according to the following default format. So it'll be the label and then n in parentheses with the actual count. If you want a custom format, that's possible by way of the label function argument. You can see an example of placing the number in front, which sometimes consorts or journals might actually want it that way instead, which is fine. We can now add our first consort box with the consort box adverb. This function needs a name of your box, an X and Y location and a label. Notice the use of cohort count adorn and the label argument. And you can see our box below. Looks like it worked. Great. Let's add another box. This time for the randomized participant count. You can see a lot of the heavy lifting has already been done by setting up the randomized cohort inside the ggConsortCohort object and then passing that sub-cohort to cohortCountAdorn. Here's a more complicated box, enumerating all of the exclusions. It's really more of the same, though. You name the box, in this case, exclusions, position it with X and Y, and then pass a string for its contents to help with the cohort, with the help of cohortCountAdorn. Here's our new box. Great. So we've got three boxes here. Now, we're really on a roll. So adding boxes for treatment arms is a piece of cake. Same structure here. Just cohortConsortBoxAd, give it a label, sorry, a name, X and Y coordinates, and a label. We're almost there. We just need to add arrows. So we're going to add some arrows here. As you might expect, this happens with ConsortArrowAd. When you want an arrow to connect one box to another, you simply pass the name of the starting box and the name of the ending box, along with which sides of those boxes you want the arrow to connect. Here we are drawing an arrow from the bottom of the full box to the top of the randomized box. If an arrow doesn't start or end in a named box, you can specify start or end to XY coordinates instead of box names. So for example, here we'll start the exclusions arrow in the middle of the first arrow by passing startX and startY, and then tell it to end in the exclusions box. Sometimes we need lines without arrow ends. ConsortLineAd takes care of this and accepts arguments in the same form as ConsortArrowAd. So here we're just specifying XY coordinates for both the start and the end, and you can see that what the result is is that we've added a horizontal line between the randomized box and the allocation boxes. We really need three arrows to finish this now, so we specify them each with ConsortArrowAd in the same way that we've done the previous slides, and we store this lastly to a new object called StudyConsort, again with the right assignment there at the bottom, which will now have class ggConsort. And ggConsort is special because this can now be passed into geomConsort. So themeConsort, once you've passed it into ggplot like this, themeConsort is a useful helper that sets the theme to void as you will want and lets you extend the horizontal and vertical margins with two pretty straightforward arguments there. This is often necessary because some text boxes can extend beyond the ggplot defaults, and it takes a little bit of iteration, a little bit of tweaking to get the canvas right, but thus far I haven't observed it to be too painful, although it could be an area for future development in this package. Since we're now operating in ggplot, I thought I'd point out that we can of course use other ggplot geomes. Here I'm using geom rich text from ggtext to add a blue text box labeled allocation in between the two treatment arm boxes like this. And now we have a completed consort for the most part. We can of course add new arms and arrows as we'd want to round out below the allocation arms, but I think you get the point now, this is how it works. And one final thing I thought I would mention, there is a function called cohort pull. So after you've drawn the consort diagram, you probably want to pull up a single data frame or tibble to proceed with analysis, but you want to do lm or survival or whatever your analytic aim is. You can use this cohort pull to do that, or to troubleshoot or investigate excluded patient cohorts or other so cohorts that you might want to look at. That's it. So thanks again to the our medicine organizers and programming committee, and once more to Peter Higgins for kindly passing the ggcon sort torch. A special thanks to my co-author on this package, Gary Caden Buie, who provided critically important feedback and ideas about how this package should behave. I'm very lucky to have him as a friend and a software development mentor. To me, I learned tons from him every time I talked to him. So thanks again, Gary. And lastly, thanks to all of you for listening and hopefully picking up the package and trying it out. As I mentioned here, it's under active development and I'm still working around some of the documentation. So if you find any bugs, feel free to let me know. I look forward to hearing your feedback on your experience and reach out really anytime. Thanks again. So I think we actually have time for a few questions, which is great. There's a couple of the chat, please throw them in and vote quickly. I think we've got another few minutes before the next talk starts. So the first question here is, how does it handle large boxes? Can you use things like dodge? Oh, that's a good question. So under the hood, all this is driven by ggtext, the GM rich text. So a lot of this is really just a wrapper for rich text. And yes, we lean heavily on what that package does very well. So I didn't reinvent any wheels there. Yes, it will handle large boxes. Most of the dodging is done by way of the V adjust and the H adjust under the hood. And that happens when you say, from this box to that box, it recognizes which side of the box you want to point the arrow into and then shifts it to the left or the right or up or down, if that all makes sense. Yes, it does handle large boxes. But as I mentioned in the end, there is a little bit of iteration that has to happen here, not just for the canvas, but sometimes things just aren't quite landing where you wish them to. It remains a little bit artisanal. It's not fully automated yet, but it does, I think, go a long ways from where we were before with those templates. I will mention that for that iterative process, there is a print method for the ggconsort objects. So when I was line by line going through add geombox or, I mean, sorry, when I was adding the consort box and I was adding the consort arrows, if you just keep pushing Enter, I'll keep printing that back to your console without even using ggplot so you can see where things are landing in kind of a beta fashion. Okay, I think we've got time for one more question. Probably, I don't know, we might get pulled through. I'm not exactly sure, to be honest, but let's have a go. Can you add sub-cohorts for dropouts? Reason for dropout, nausea moved out of country. And can you add a sub-cohort for how many completed each arm? Yeah, absolutely. So the add cohorts, that cohort define function, accepts arbitrary de-plyer on your source data, right? So you can filter, you can select, you can, it's really just a list of tibbles underneath. So your wireless dream of what kind of cohort you want to put in there, yes, it can happen. Great, thanks. Well, I'm just going to check this slide because I'm expecting this all to be magic to the next room at the moment. I'm just hoping to make sure everything's going to plan. I'm not doing well anyway. Let's just keep going. Let's answer questions. So there's a one here, Hi, are labels editable like if you want to use it in Spanish? Oh yeah, that's also a really good question. I would, I would hope so. Again, like leaning on the GG text package, anything that's possible there will be possible here because it really is just a wrapper. I know that's very flexible with regards to special characters and kind of HTML markup and things of that nature. So it should be possible, but I need verification on that before I say yes all the way. Yeah, great point though. Okay, I'm not seeing any more questions. And I think we're probably, I'm being cold. I think we're going to go. Yeah, looks like we're going to go. So thank you very much for the talk and we'll see everyone in the next session. Thanks. Everybody else got already pulled over so you guys can go there if you want. All right. Great. Thanks. Thanks. Thanks Travis. Thank you Chris. I appreciate it. Cheers.


What's going on guys? It's your boy DPJ here today with another Destiny video and in today's video I want to talk about Destiny 2 and my hopes as to what the game will be and what I want from the game. Now before we go any further you guys should tell me down below in that comment section what you guys want to see from Destiny 2 as obviously the game is still in development and maybe just maybe one of the Bungie team researchers may come across this video and take into account an idea or even better a few ideas to make a better game than what we saw from the first installment of Destiny. Now to what I want to see from Destiny 2 the first thing I want them to do is to make sure we get content that's on the disc we paid for and there's nothing locked away which they will later sell as DLC. Now I ain't saying this is what happened with Destiny 1 but many people believe this to be the case. If it was or wasn't the case they need to make it clear that we are getting what we are paying for because like it or not the perception of Bungie selling us 50% of the content on a disc we paid 100% for whether it happened or not did have quite a big impact on the game the people who paid and played it and it also didn't allow many people to lay trust in Bungie so they need to make it clear prior to release that we will be getting 100% of what we pay for. Now it's easy to say we want all the good stuff taken from Destiny 1 and added to Destiny 2 but many people think differently on what's good and what isn't. Me personally I love the grind that most of year one offered although sometimes the ground was a little over the top in the sense of spending a few hours speeding around Venus looking for bloom to level up your gear but it's still added to the overall grind I enjoyed but as the game did go on it definitely got easier so they need to definitely add a certain level of grind back into Destiny 2. Another major thing I want to see loads more of is the story and although the Taken King and its expansion to the story was on the right track there is still so so much we need to know and learn about the Destiny universe. Something else I feel Destiny 2 needs to add is more things to do sure if you look at it from an outside point of view you'd think there was endless things to do and although you are kept pretty busy I still feel it does lack content. We have PvP and PvE both are very different for sure and PvP at the moment is without doubt carrying Destiny in the terms of all the events we get trials we get iron banner and things like spiral racing but it still feels to me like it's missing something PvE without a doubt needs more things you can do in terms of a team of six yes three raids are great for six mans but other than them what else can be done this is definitely something Bungie needs to look into if they ain't doing so already another thing I feel Destiny 2 needs is private games where you and your powers can mess around and play and create private lobbies I feel Bungie missed a big thing here not adding this to Destiny 1 now PvP although I ain't a massive PvP player there are still things that need to be added and sorted out for the community first off a lag many people complain about this and it does need to be sorted in my opinion before anything else PvP wise and although I don't really suffer from it that bad for the most part many people have major issues and what makes it worse is the people who are lagging seem to have the advantage so yeah for definite this need looking into why not think about matchmaking as well there should definitely be looking into that now seriously I could go on forever with ideas to make a better Destiny 2 but I feel the basic structure of the game needs to be improved the most we need better character customization and although what destiny offers ain't the worst it's far from what it could be we need more features to personalize our characters as we always end up looking the same or very similar which I suppose uncertain game is okay but a game like Destiny it shouldn't be the case now I know I've missed a few things to add into my list of points to make a better game but at the moment this is all I can think of and it's also why I've got used sexy people to give me your points and opinions down below in that comments section how to make a better Destiny 2 I can easily say we need more characters to use and they all need to have a hundred different sub classes and we also need way more of a variety of weapons instead of reskins but I'm pretty sure Bungie know this already them among other things are the basics to a first-person shooter like Destiny as well as how DLC is handled DLC is a tough one and although expansions like taking King of War great many disagree with the price of them so how do Bungie handle this do they go down the road of making DLC free and using Michael transactions for in-game content or do they release DLC every few months which we pay for this is a sticky subject one many people take different sides of me personally I'm happy with DLCs as long as they are on a big scale and we get our money's worth but some people don't agree so how Bungie handles this will be very interesting indeed but guys there's a few points from me as to how to make a better game in Destiny 2 what do you guys think needs adding or changing let me know down below in that comment section hope you guys enjoyed the video do drop a like I do appreciate the support I do apologize about my voice I know I sound a lot more weird than usual it's because I'm coming down very cold but it's all good in the hood hope you guys enjoyed the video do drop a like I do appreciate the support subscribe for daily destiny and I'll catch you guys on that next one peace out until next time


as a weapon. And the Ukrainian people continue to inspire the world. I mean, that's sincerely not just inspire us, but inspire the world with their courage and how they have chosen the resilience and resolve for their future. And the American people have stood proudly with them, Democrats and Republicans, together with our allies in Europe and Japan and other places, to make sure you have the financial, humanitarian, and security assistance that is needed. And we're going to talk about that today. And we're going to continue to strengthen Ukraine's ability to defend itself, particularly air defense. And that's why we're going to be providing Ukraine with a Patriot missile battery and training your forces to be able to accurately use it. Together, our partners are also going to continue to impose costs on the Kremlin. And we'll support Ukraine in pursuing a just peace. President Zelensky, the United States stands with the great people in Ukraine. We stand with you. You've been a great leader. And by the way, we have a famous thing that occurs once a year. We picked a man of the year in Time Magazine. You are the man of the year in the United States of America. It's a welcome. We have a lot to talk about. Floor is yours, sir. Thank you so much. Mr. President, great honor for me to be here. Your journalists, I thank you so much for your invitation. I really wanted to confel it. Mr. President knows about it that I couldn't do because the situation was so difficult. And now, if I'm calm, I came in that we control the situation and because of support. And first of all, because of your support, and I really understand that we have very important topics. I'm going to discuss them, everything, so many challenges in Ukraine, in Europe, in the world, and from energy to the situation on the battlefield. But first of all, I appreciate it from my heart, my nation, strong nations, all the appreciation to you. First of all, Mr. President, for your big support and leadership, of course, the words, not the word. It's a bit about it. That is your leadership. Thank you, first of all. Thank you so much, Mr. President. Of course, thanks to my partners in support. Thanks to Congress, and thanks to just people. I really appreciate it. I think it's very difficult to understand what does it mean when we say appreciate, but you really have to feel it. And thank you so much, great honor to be here. And yesterday I was called and spoke to Taylor about it and to give you something. One guy, he's really, really, he's a work. And he asked me to pass his work to President Biden. You will understand. He is the captain of Heimer's Battery. Yes, he's very brave, and he said, give it to a very brave president. And I won, yes. I didn't write it, Mr. President. I got it, it's not mine, it's in Ukrainian language, but here are the translation. It's for him. His name is, I have his name, I could contact him. Yes, yes. I'm sure, but much appreciate my service before the Iraq. It is President Joe Biden welcoming Ukrainian President Volodymyr Zelensky at the Oval Office, truly a remarkable moment there. And if I may, with what seems to be a very candid warm exchange and the Ukrainian president thanking not just the American president, not just yours, Congress, but addressing the American people specifically. This obviously takes us to the conversation we held before the two leaders convened this brief encounter in front of the press. So let's go back to our distinguished panel and now Dan Perry, without further ado, what do you make of this exchange at the beginning of the one-on-one meeting between Biden and Zelensky? I think that was clearly one of the images of the year that we saw here. I think we'll remember it for many years. And even though one often equates sophistication with skepticism about political leaders, what I saw from Biden, I think, was a genuine appreciation of Zelensky and commitment to Ukraine. I spoke of the courage and resilience and resolve of the Ukrainian people. And from Zelensky, as you say, genuine sounding gratitude to the American president, Congress and people, well-placed gratitude because he is getting $100 billion. And I think his visit to the U.S. probably did accelerate some of the promises of and delivery of the ammunitions and the money and the aid. And it's been said, Michael Tracy, I think, said, this is about a hypothesis, masquerading as a fact. But in my view, most policy comes from hypotheses and the hypothesis here is a not implausible one that what is at stake is not just the interests of Ukraine, but the interests of the U.S. in as much as if Russia were allowed to get away with a theft in Ukraine, its aggression would then proceed towards other countries as well. And I think that's really why the U.S. has invested so much effort and money and taken such chances. And also, by the way, we're all very impressed by the $100 billion. And I guess it's the 45 in the most recent tranche, but remember that the U.S. economy is a $23 trillion economy. The U.S. defense budget is almost $2 trillion. At the end of the day, it is a drop in the sea. The real cost that the U.S. is incurring is the risk of nuclear conflagration with Russia. In not abandoning Ukraine, that's the actual cost. And I can only hope that Putin's bluffing when he speaks of nuclear deterrent. That makes all of us, I'm safely assuming. Andrei Dobryansky, listening to both Biden and perhaps more importantly, Zelensky there at the Oval. And I'm going, even though you said from the get-go of our discussion that this entire trip is aimed at the foreign audience, not at the audience back home, what is Zelensky hoping to come back with to Kiev? Well, again, we do know that there's an enormous amount of material weapon systems that were announced earlier today, including the Patriot system we talked about earlier. But it's very important as well. It's not just Zelensky, thank you, the American people. We sit here in the United States, full of the privilege of never ever in our history, we have a foreign invader on our territory as Ukraine is right now. So what we are giving, and I'll back up the words of Mr. Perry, the fact that it is a drop in the bucket, what Ukraine is giving is their citizens daily war crimes against their citizens, whether it's rapes against women and children, whether it's just everyday people in civilian areas being bombed. People who are freezing on a regular basis because of Russia's attack against civilian infrastructure. That is what Ukraine is giving. What the United States is giving is simply a small part of its budget. So I expect in Congress, not only will we see a repetition of Zelensky giving a gift to members of Congress, but they will likely be thanking Zelensky to thank the Ukrainian people for defending democracy as we all understand this is really what the war is about. Michael Tracy as we're nearing the end of our time together today, Vladimir Putin, obviously watching closely every head and gesture, every word that is said or not being said in DC at the moment. You have indicated earlier that we need to stop trying to get into his mind, but it is unlikely to assume it will go unnoticed from the Kremlin standpoint. Is this visiting DC? Well, sure, by Putin convened a major defense ministry meeting today and dispatched Dmitry Medvedev to a surprise meeting in Beijing with President Xi. So clearly they're kind of counter-choreographing or counter-programming what's coming out of Washington DC. But I did want to say at this idea that $100 billion in Ukraine-related funds being appropriated in less than a year is just a drop in the bucket is preposterous. Already in September of this year, Ukraine became the biggest recipient of US, quote, security aid since South Vietnam. Iraq and Afghanistan, their respective military operations, those governments' militaries never received anything close to how much money has been dispatched to Ukraine in terms of security aid since February. So this is a major US intervention and to trivialize it is, again, a PR tactic that is quite successful in that it's secured all this money, but it really doesn't align very accurately with the facts. And looking at this meeting and watching as we've been on this segment, the emotional value that's already being ascribed to it as incredibly resonant and potent and everybody's kind of in awe of how honest and forthright these two leaders are. Well, I mean, that's another indication of the efficacy of the PR strategy. So let's see if nothing else, he's a PR master, I gotta give him that. Yeah, that's something we can all agree on that's for certain. And Michael Tracy, Dan Perry, Andre Dropriansky, thank you very much for joining us.


I hope everyone can hear me hit or miss sometimes with this mic system. So, hello everyone. Hello. Are you having an awesome today? We are. I got the Maryland Commission dropped off started another one now and here with you guys. So that's pretty awesome. I think we find y'all on my this list. What's up Kathy? How are you today? I'll show you guys the back of these pieces that we did yesterday. But I'm going to do that after we do the second layer on this ocean because I already have my resume next up. Hi, Linda. How are you? Are you guys having an awesome Thursday? I hope so. So today. Hi, Kathy. I'm not completely over my cold and sadly Jeff has come down with I think my cold and so He is a little under in the moment He said he's okay through his raspy almost smokers like cough voice What's up, Kim? Yeah, we went and got him some medicine today We've just been sharing the flu virus, I guess I'm down to just Sensitive scratchy throat and now he has the headache and the upset throat Anyways, so I'm going to show you guys The back of these oceans that we did yesterday, we're going to peel the backs of it off But first I have to do this piece because I went ahead and mixed up my amazing quick coat from Illumilite it is a UV resistant quick cure, which means you have not that much time to work with it resin And so let's get started with that So this background we did yesterday and the first layer wave we did yesterday. I think it turned out Pretty red pretty dynamic. I'm in love with it except for this part It got kind of low because I did two versions of heat right here. So I think the idea today is going to be to kind of Come down and then up this way to kind of cover up some of that you that we have going on right there Hi, Maria. Oh I'm so sorry. You aren't feeling well What's up, Tressa? How are you? Haven't heard from you in a bit? Miss you over here So to start I'm just mixing some opaque titanium Based white with my resin. This is a paste. It is a non-metallic. What's up, Libby? non-metallic paste and It's pretty heavy. So it'll sink really nicely through my other ones and give me some super awesome awesome cells It's not shiny. It's not shimmery. It is a flat White love it. Hi, Jerry So I mixed up four ounces for this project. This is one of the 15 inch framed cradle boards from our website And how did I say I was gonna do this wave? I was gonna come out and up this way I'm going to turn my board this way Wait, where's the Blair? Maybe I won't do that I want you guys to get stuck in the glare I'm gonna put a little bit of something It's just a popsicle stick on the sand beach side of my piece so that the clear that I just added won't kind of break the Surface tension in the front. I don't want it to come out over my first wave I'm just gonna add a little bit extra pizzazz with this wave I just don't want it to exactly mirror The shape of our first wave want some differentiation And then I have nothing else in my clear. I Don't want to Hide or change the color of any of what we did on the first layer And so I Didn't even put any Milky way or shooting star in it because I didn't want it to kind of add up with the first layer and Make it a little bit too much not like there could be too much Sparkle, but you know, I mean So That is How we look right now So now I'm gonna add my white to the wave That it's gonna touch the dry part of our first wave and also the Water or the resin that we just put down and I'm doing that because I want my Wave to hold and stretch across the piece. I need to put a little bit extra Height on this here we go All right And have a finger print right here. So to care that. Hi, Christine. What's up, Brittany. How are you, you should be getting your parcel any day now and that Refund for those two colors any day now. So I'm just Making sure that my white is touching A little bit of everything The dry part and the wet part and I've left a gap on the side accidentally, so I'm just gonna fill that in. All right, we're ready to go Okay Pups may get touched by board So I'm going to Go ahead and pop all the bubbles I can make sure there's nothing floating in the piece Actually, I'm going to add a little bit more white here because I want it to, sorry. Cover a little bit more of That not cute first wave. Not cute is the best I can give to my artwork when it's not how I want it. All right, two tiny circles. We're gonna do indirect heat. So we're aiming the Heat gun kind of More straight down and then a little bit at an angle And once it's all in motion, you can go back and add extra little ripples I think I'm gonna let some of this kind of just tilt off the back What some of those cells just tilt off there because that'll give room for my Cells to grow bigger on the piece and it might look kind of fun to have it Come off a little bit there So then this is the cell layering that we have Thank you Kathy for the reminder for everyone to leave their thumbs because it's super super helps our channel Now I'm gonna edge up my white line as I do Watch out canvas on all of my oceans And that's just because I like to have a very opaque white Kind of front line Every time I teach a class and people Students kind of drip in areas that they may not have wanted something Like this little dibble dabble of white. Yes, it's a dibble dabble Students always freak out a little bit. That's almost freak out with you But everything in resin can be fixed So I'm gonna give you guys a close-up of this and then tomorrow I'm gonna finish the Outside rim and touch up my sandy area. How fun are those layered cells? I don't even have the flash on you turn that on It'll look even more awesome Hey melody now these cells are gonna continue to grow as the piece self levels and Relaxes back into itself That side's kind of hazy because of the under cells In this piece, I am using the Illumin light Amazing quick coats. I have a link in the description box if you would like a discount anyone that's watching But it's the amazing quick coat epoxy and it is sold by Illumin light, which is a sister company of Sorry lost my train of thought Everything is sticky in the world it is sister company to It's don't coat. Okay, that's going in the dust-free zone for B and his cough I'm gonna unveil this one in a moment, but I think I'm gonna add Maybe a second wave to this one because it kind of got a little crazy out here So Let's try to do that and to do that I'm going to work in the same fashion as I did On the last one, but I think I'm gonna bring the wave kind of just Heavy on one side and not so much on the other Now because this is a quick curing epoxy. You don't have that much time to work with it so it'll go to full cure in Like three hours Full care. I mean like you can touch it. Not that it's like it's full peak Rigidity and all that so because of that you only have like 20 30 Working minutes and it's already starting to get warm on me. So I'm gonna Try to hustle a bit And at this point, I'm just trying to make sure that there's no Raw or uncoated Surface it's getting kind of thin there in the back, but it's alright We're gonna heat it and tilt it so much that we're gonna say that it's probably gonna be alright All right, I think I got everything Not fully sure We'll find out together. Shall we? We shall okay second wave white You don't want to ever add so much white that it's gonna completely cover all of the everything else that you put on your piece so try to keep Your white line Like a pencil Whip about Okay Just like the last one we're gonna pre-peat it make sure I have nothing floating around in it Make sure I don't have any low spots All right, we're gonna tilt it some And do a little teeny tiny circles.  I don't know how that's gonna look We'll find out together I'm gonna give it a little bit extra motion to hide where that little belly button lint White is but you know what? Not all clocks or oceans are created equally and this one just so happens to have a little something extra Around the belly button. You know what? That is okay. This is a judgment-free zone for belly buttons Whatever it is, it's coming out of them. All right, turns out I do have something floating right Now right now you can kind of see where I just pulled that Hair but since we're gonna kind of sorry store it kind of on a tilt Maybe you won't see it forever, but let's take a look. You still have those super dynamic layered cells That is where I pulled a hair out so it kind of messed up my cells right there Thank You TG and then we have our From our belly button and our clock that's okay I think it'll still be amazing and it still has some self-leveling to do Maybe I can make a little something extra happen with my torch Maybe I'm gonna mess it up. Maybe it's gonna be awesome, but we'll find out together I'm just dabbing just ever so slightly indirectly with the heat that is coming off of the blue So if you're looking at this you keep your eyes right here That's where it is from the flame that I'm using to touch My epoxy if you epoxy nope if you heat too much You're gonna scorch your resin. So I'm just literally dabbing it just like this In order to make everything disperse around it So I think that looks a little bit better at least it's not quite I mean it is it is still big difference from the resin around it the cells around it, but at least it's Got a little bit more going on in the center and I think it'll be fine once it kind of relaxes All right, let's get all this out of the way and I will show you the results of What's on the back of the white geoid That we did Feel like this little white container was talking back and that is rude Let's see what we got. Sorry if that was loud So here is the piece Does the wedding cake topper work better than the platypus? So the plan of I wish I had more resin mixed up I would show you the difference the platypus gives like a Fan type of wave whereas the wedding cake gives more ripply like tight Um ripples in the wave instead of one big ripple. Uh, how about let's see Thursday tomorrow I will do um a demo on the difference Between the two Attachments for you guys. Let me just heat up the back of this real quick I'm so excited to see what this looks like I love pouring on these clear shapes Every time you peel the back off it looks like Nope, it feels like it's like a Christmas present Because you never know what it's gonna look like on the back of you and I don't know if you were here yesterday, but I mentioned that almost always I like the back of the piece better than the front And I usually like the front But the back is usually Way more better. Okay. So yesterday we peeled the front And we did this lovely ocean wave No problem, Brittany. Absolutely. Well, that will be what we do tomorrow So that's what that looks like and now we're going to peel the back. So you peel one side Pour or paint on it and then leave the back on until it's Set dried or cured And then you peel the back side And there's no cleanup, which is My favorite thing ever to not have to clean up. I don't know if you guys know this, but I'm a very messy artist Shocking. I know You know, I guess what it is. No shame a little bit of shame. I wish I was a neater More tidy artist, but I'm not gonna lose any sleep. It's fine I still have these nails on for my trip and they're they don't Um, I guess thin nails are better for peeling things like this off because I can't ever get my nails under Those little bits Just if you use an exacto blade, be careful They are sharp and they will not hesitate to cut you Don't ask me how I know if I were to have really heated the back of this up It would have peeled off in one easy swoop, but I got impatient and And it took too long.  All right, we have heated it so now This piece could be considered complete It has a perfect amount of shimmer. I completely agree It's almost hard to see all of the shimmer in all of its glory When it's flat on a background Oh, how fun it's casting. Oh, it's not because You're using the light from my phone to cast the shadow. So when I went on anyways So it's very clear. It is a quarter inch thick I think be happier with how those cells look that's a slight little bit of sparkle with that milky way Let's check out the back I didn't do it that much because I guess the resin was quite late in the curing process It didn't give me that many of the little Sinky traveling bits, but there's some of them there There's some of them there I don't know I don't know which side I like better on this one Comment under this video after it posts and let me know if I should paint the back of it a color because then it'll Look like we painted it a color with the resin I think it's gorgeous I was looking to see if it had any of This kind of texture if it's going to focus all of this madness No nothing I don't know why my phone doesn't want to focus sometimes. Maybe it's because of the glare So anyways, this is the back side This is the front side. It's got a little bit of splatter paint on it, but I can clean that off. Anyways this Texture looks so fun And it's fully flat because it's On this acrylic So let's see if we can see anything back here There's some trails right here These are here Yeah, I did it Which is not quite as noticeable on this one right here Either way, I think that it looks beautiful. Sorry about my muddy, painty hands It's almost a geode ocean snowflake geode ocean snowflake My hands are dirty because this And I'm starting a new commission on this But let's check on the piece sis This will turn the flashback on A whole bunch of craziness on those cells. These ones are starting to settle and stretch Look how big those cells are This is my finger almost touching the resin and it's About a fingerprint size Cell structure here how wild But you back up here. They're still too tiny I can check poor people and See your question. Absolutely All right, you guys It's time for me to take the pups out because they're being real crazy and wild right now Look how wild and crazy They're a little bit upset at me because I made them have a bath today Anyways, I hope you guys have an awesome evening Whatever it is that you guys are doing and I will see you guys tomorrow Hey bobo so, yeah Thank you guys for watching Leave me comments down in the description box of things you would like me to do tomorrow I will be doing a comparison of the heat gun attachments for ocean waves And hi, bubba But we got a big bath today and he was very upset about it Oh, look how flowy. He's so flowy. Mm-hmm It's probably still sticky up there big boy So, um, hope you guys have an awesome evening. We kind of want another because you never know what someone's going through And always remember That we do the test so you don't have to and we'll see you guys tomorrow at 6 p.m. Central. But till then, um Have a good night. Bye Jeff said


why should I hire you is a common interview question, which seems pretty straightforward to answer, yet has a few sneaky traps to watch out for. And of course, there are lots of variations on this interview question, including why should we hire you? Why do you want to work here? Why do you want to work for us? And why do you want to work at this company? They can all be answered in a pretty much the same way. Being asked, why should I hire you at interview is great because you've been given a chance to speak about all your best points. This is also part of the challenge of giving a great answer. Which points of all the ones you could talk about should you talk about? Just listing out your best strengths will not get you top marks. To help you put together a great answer to this interview question, I'm going to take you through, first, exactly what the interviewer is looking for in your answer. If you know exactly why the question is being asked, you'll be able to give a much better answer. And then secondly, I'll explain three steps to take to prepare a great answer. And thirdly, I'll give you some example answers at the end of the video. My name is Jess Coles, and as a candidate, I was hired through tough recruitment programs into the corporate and household names. And I've also sat as a hiring manager in over a thousand interviews hiring graduates to CEOs. And I've been the board director of a recruitment company with 140 million in sales. Our How to Get Hired program teaches you everything you need to win your next role against tough competition and still save you time and effort. And if you like this video, please give it a thumbs up and subscribe. Let's start with understanding what the interviewer is really asking when they ask, why should I hire you? The interviewer wants to hear about your best points by asking this question. The best points you talk about must be relevant to the requirements of the job. Listing out all your best points is not enough. For instance, if you've done a great job managing a Facebook marketing campaign and got great results with it, you might want to talk about the success when answering why should I hire you? However, if the company doesn't use Facebook to advertise or the job you're applying to will not be dealing with Facebook marketing, then you have wasted an opportunity to impress the interviewer. By hiring, a company is looking to solve a set of problems it has. Before you answer this question, you need to have an understanding of at least some of those problems, preferably most of them. So your first step when answering why should I hire you is to go through the job specification or the job advert and pull out all the key requirements of the job. Also make the time to think about your experiences of the job and cover any requirements in your answer that have not been stated in the job ad. It is rare that a job advert will have all the job requirements in it. Take a look at five to 10 job adverts to make sure you're aware of all the general key requirements for the role that you are going for and then create a list of the ones specific to the job that you're applying to. The second step when answering why should I hire you is to identify the top say three job requirements. When answering this interview question you want to cover the most pressing problems the employer has or those that have the most impact on the business. These are likely to be the requirements that are most important and thus are likely to carry the biggest weight on deciding who to hire i.e. those people who can solve those big problems are more attractive to the employer. To choose those requirements with the greatest impact to the business go through your list while thinking of the impact on sales, costs, time taken, efficiency, customer relationships, risk, et cetera. Order your list in terms of the biggest impact or the most pressing at the top and then work down to the least impact or the least pressing. You should aim to answer this interview question in around 30 to 60 seconds and as with answering all interview questions aim to create a short structured story with good examples rather than having a long rambling answer. The interviewer can ask follow-up questions so don't worry about trying to get everything into your answer. Choose the top three requirements to talk about when answering this question. The third step when answering why should I hire you is to build your answer specifically for the job to meet and exceed the top three requirements. If you haven't got good examples for each of the top three then choose a point further down the list of requirements that you can answer really well. The rough structure of your answer should include firstly the problem or requirements, secondly your experience and thirdly an example of where you've done this before. State the problem or requirement from the job description or from the information given to you by the interviewer outline your experience of dealing with this problem or meeting the requirements and then provide an example of where you've delivered a solution against this problem or requirement. And if you can combine several requirements in the same story and provide examples, perfect. Using the structure makes it easy for the interviewer to understand and then follow your answer and you're highlighting that you understand the problems that they have. Providing an example provides proof that you can actually do what you say you can do. Try to avoid making statements during the interview without offering examples to back up your statements. By matching your strengths to their problems you propel yourself up the candidate pecking order and will certainly jump ahead of those just listing out their strengths without any reference to the requirements. Do not give general answers like, you should hire me because I'm a hard worker or you should hire me because I have five years experience managing a team or you should hire me because I have strong analytical skills. These answers are bland and will not give the interviewer much or any confidence about your abilities. Here are two examples to answer why should I hire you or why do you want to work here? A professional level candidate might answer something like this. I understand that you are looking to increase the number of qualified leads the team generates each week by at least five. I've worked in the sector for five years building up my contact list and I've generated an average of 11 leads per week and consistently beaten my sales targets for the last four years. I use a combination of content creation, research and social media to identify prospects. It usually takes around seven to eight touch points your email, phone, social media, et cetera with my prospects before I start speaking to and meeting prospects to understand their problems and qualify the opportunity. I expect it should take me around three months to exceed your required five leads per week based on my experience in the sector and track record. I believe I'll quickly become a strong asset to your team which is why you should hire me. A junior manager when asked why should we hire you might answer. From the job description and your explanations I understand your current customer service team is struggling with high staff turnover and you're looking to hire a new manager to get the team back on track. You could always pause to wait for a yes or nod or something like that from the interviewer. I've spent the last six years in customer service in two companies. I've managed teams of four staff and both times took over when the team was not performing. It took me about six months to get the team back on track through training, changing problematic staff members and improving a number of the customer service processes. I worked hard at making sure the team were happy and supported. I think happy staff make happy customers. The customer NPS score relating to customer services doubled in my time of managing the teams. Our sales enquiries tripled as well and I got some great appraisal grades. So in summary, to answer this interview question well you need to talk about the strengths you have which are relevant to the requirements of the job. Make sure that you provide a good example or enough detail in your answer to provide the interviewer confidence that you can do what you say you can do. And if you're struggling to get your next job take a look at our how to get hired program. Thanks very much for watching and I look forward to speaking to you again soon.


Okay, it looks like people are there. So let's get this started. We don't have a whole lot of time, but if there's any questions or any problems or anything, feel free to interrupt me at any time. And we'll just have to try to get through either way. So this talk is going to be about tool chain options in 2023 and probably most people are familiar with what is the account tool chain situation. And there's one well-known, well-documented way to build cross-compilers and that's probably what many people have been doing for years. But there's a couple of other options that are not as widely known and that might be worth investigating for new projects. So traditionally, you would build new binutils, then build a minimal GCC cross-compiler, only seen no threading support, then you'd build JLPC and then build GCC again with all the features you need. There's a couple of good reasons to keep doing exactly that. By far, it's the most widespread, most third-party libraries and applications have been tested with it. Chances are if you have problems, you can find people on IRC and forums who have done it before and can help you and it works well and optimizes well enough. But like I said, it's no longer the only option. Let's take a look at binutils first. That's a collection of tools that deal with object files. If you haven't used binutils directly, you've used it indirectly because your compiler calls out to it. For example, whenever you're linking together object files into a final executable that is done by binutils, tools like object dump and so come from there. There's three major implementations of it and there's a good chance you actually have all of them installed on your computers right now. First is GNU binutils, that's the standard implementation that has been around forever. Then there's elfutils, which is shipped with pretty much all the Linux distributions these days to get libelf, which is one of the components that uses. But it also contains its own implementations of pretty much all the tools provided with binutils. And then there's LLVM binutils, which is part of LLVM, which is also included in pretty much every distribution out there, if only to build Mesa with it. Elfutils has pretty good implementations of the tools that it provides, but it's lacking a linker, which is one of the key components you will need when you're compiling stuff. So binutils by itself won't do it, but you can supplement it with binutils, LLVM or mold. The tools in binutils and LLVM binutils are pretty much interchangeable, use mostly the same parameters. But the tools that come with LLVM have one big advantage. All the cross compilers are built in. So even if you just have an object file and you don't even know if it was compiled for x86 or ARM or RISC-5 or PowerPC or whatever, you can use LLVM object dump dash dash disassemble, and it will just detect what it is and give you the right output. So if you're expecting to work with disassemblers and across multiple architectures, that may be a good reason to check out the binutils parts of LLVM. Next key part is the linker. If you don't do anything on most machines, most distributions, you will have the BFD linker installed by default, and that will do its work in the background when you call GCC or Clang or whatever. But there are a couple of alternatives. So the LLV linker, which is part of LLVM, has been pretty good at replacing GCC ever since version 10, it's currently at version 16. There's a couple of compatibility problems you might see if you're using very complicated linker scripts, but other than that, LLVM is pretty much ready to replace the other implementations. And another interesting option is the mold linker, which has been started by the original developer of LLVM, and it focuses on linking speed and parallelism. So if you're ever concerned about your application taking way too much time to link, that is an interesting option to check out. Another interesting part of it is that it supports both Clang LTO and GCC LTO, but its linker script support is somewhat limited, and full support isn't planned. So if you're using any complicated linker scripts, for example, in an embedded system where you try to include all the system boot-up code and everything right in your main binary, the mold is not an option for the moment, but for the bigger systems and desktop systems, servers, or even big embedded systems, it can certainly be interesting these days. Next big component is the compiler. Obviously GCC has been around forever. It still does a very good job. It also supports CC++, Objective-C, Fortran, Aida, Go, D, supports all the major architectures, always supports the latest versions of languages like C17, most of C++20, parts of C++23, and optimizes pretty well as well. The main alternative to it is Clang, which comes from the LLVM project. It also supports a couple of all the interesting languages C, C++, Objective-C, Fortran. Frontends for other languages are available out of trees, so for example, Rust always uses LLVM as a backend, sharing a lot of code with Clang, Swift uses LLVM, Pony uses LLVM. Its architecture support is also pretty good in addition to all the standard processors you'll have come across. It can also target a couple of GPUs that are web-assembly in BPF. Also supports the latest versions of languages like C17, C++20, C++23, optimizes them well and has quite a few sanitizers that can help debug your code and find additional problems. Another interesting piece of information about it is that it's a cross-compiler by design. So while if you are using GCC, you have to build one cross-compiler for every target. With Clang you have all the cross-compilers built in. So you just use one compiler for all the platforms you might be targeting, you just say clang-target and give it a drifted, and then it will target that architecture. Another advantage of the Clang compiler is that if you are looking at the compiler's code itself, unless you've been working on GCC code for a long time already, it's much easier to understand Clang's code than to get into working on GCC itself. We've already talked about the targets. Performance is important, obviously. And performance of Clang-built binaries and GCC-built binaries these days is pretty much similar. There are special cases where either one will perform better than the other one. Overall, most benchmarks show that these days Clang-16 is carrying a slight advantage over GCC-13, but in most cases it's not very relevant. It's within a range of two to five percent. It's interesting that Clang tries to be a drop-in replacement for GCC, so it takes pretty much the same command-line options. You can switch one for the other without making too many changes to your make files or anything. And Clang has been around since 2012 and file of GCC has been around since 1987. Obviously, the age is both an advantage and a disadvantage for each. GCC has been around for a longer time, which means it has collected more bug fixes and more experience over the long time, whereas Clang has been written quite a bit later, which means it probably doesn't have the same amount of experience in it, but it also doesn't have to carry around craft from 1987 that has been obsolete for ages. So that's not a clear advantage of either one, but it's a notable difference. Another difference is in licensing. GCC is GPL, Clang is Apache 2.0. I'm not going to get into the flameless about this personally. I think both of those licenses have advantages and neither one should be a reason to rule out using that compiler. And of course, there's a good chance you will be using LLVM in some form anyway, because for example, Mesa uses it and if you have any form of UI, that's likely to be on your device. But yeah, you probably also end up having GCC because you will need libstdc++ if you are using C++ or you will need libgccs if you are using anything that uses the low-level compiler runtime and has GCC built in. So there's a pretty good chance for whatever you're doing, you will end up building both compilers. Compile time is also interesting. That can be significantly shorter with Clang, especially when we are talking about C++ code. It doesn't make much of a difference for things like building the kernel, which is, see, they take about the same compile time there. But for example, building LLVM with GCC takes almost twice as long as building it with Clang, which is because the code base is pretty much heavy on C++ and the C++ components in LLVM tend to be much faster. Another interesting difference is that Clang is more modular code, so most of the functionality is contained in libraries if you want to create a new programming language or embed a programming language into an application as a scripting backend or whatsoever. Or if you are targeting new processors and want to target new architectures like WebAssembly or embed compiler functionality like syntax checking in an IDE or developing or so, there's a good chance you can use the libraries provided by Clang, and it makes more sense to use those than to come up with some hacks that call GCC from the command line, pass its outputs and then decide on warnings and stuff based on that. There's one piece of good news. They are fully binary compatible, so you can build a library with GCC and then build an application that uses it with Clang or vice versa, and you can even build one object file inside a project with one compiler, another object file with the other compiler, link them together and they will just work unless you're using LTO where the compilers use different formats. But there's tricks with which you can do even that, those tricks would involve building the object files first and then converting the LTO code into a traditional object code and then linking the files together. If you want to mix the compilers, you have to use GCC support libraries, libGCC rather than compileRT, because Clang can make use of GCC libraries by default, but GCC, unless you are using some Dational STD lib trickery and make files won't make use of the LLVM versions of those libraries. Clang is not the only alternative compiler out there. That's also TinyCC, which is what the name implies. It's probably the smallest possible implementation of a full C99 compiler. The compiler source is smaller than four megabytes compared to almost a gigabyte for uncompressed source of either C or LLVM. But obviously that has drawbacks, like not implementing all the optimizations. If you care about the quality of the binary that's being produced, chances are you want to use Clang or GCC. And TinyCC has other uses, like if you want to embed it into your own application as a scripting backend or so, it makes sense to not make your application too big, especially if you're on an embedded device. So TinyCC might be a good option for that. And in some cases it might even be sufficient to stay the system's only compiler. Then that's the topic of BSPs. Many bot support packages come with the compiler, but the situation there is really not what it should be in most cases. Mostly what you will find is some outdated fork of an outdated version of GCC or Clang. And usually in the time it has passed since those compilers were forked from the upstream projects, the upstream projects have added much better support for the hardware in question than whatever the BSP maker added. So unless you're working on a very special device which is not supported by upstream compilers, it's usually good advice to ignore the BSP and just build your own Clang or GCC and use that. Especially if you're making use of newer language features, the older BSP compilers tend to be far behind if you're looking into stuff like using C++23 or so. Sometimes that means you have to add a couple of kernel patches to support newer tool chains because unfortunately, again, many BSPs include an ancient kernel. Now the proper fixes obviously to upstream changes to the kernel to mainline using your mainline kernel, but where you can't do that because it has thousands of patches needed to make your hardware work, you can usually find patches to make the kernel work inside the kernel repository. So usually just back porting a patch or two from mainline kernels to whatever four-point something kernel you might have in the BSP will make it work with the current compilers you've been building. There's a bit of a special case for the extensor architecture. The Clang doesn't have support for it in upstream yet. It's supported by the LLVM libraries in version 16, but not yet by the Clang front ends. And there actually is a vendor version that works there. And of course, while working on LibAPU, which is a library for talking to all the APUs, we have created a little fork of that that's rebased to LLVM 16.04, giving the latest LLVMs with all the extensor patches. And we really hope both of those versions can go away with LLVM 17, merging all the remaining extensor patches. Now, like I've already mentioned quickly, Clang and GCC are similar in performance. Of course, all the architectures I've looked at, which is ARC 64, RISC 564, and XAD664. But that doesn't mean you will never run into any surprises. For example, if you run a loop unroll from the Adobe C++ benchmarks on ARC 64, and you make it work on Insta32T, GCC build version will take 208 seconds, while the Clang build version will finish in 14 seconds. But now, if you are saying, ha, GCC sucks, Clang is so much better, you don't even have to switch benchmarks reads, you just run this different file from the same benchmark on XAD66 and you get GCC outperforming Clang on that. So what are the conclusions for compilers? GCC and Clang are both good. There's no clear winner. And both have been used to compile full systems, including the kernel these days. Most Clang's distributions are built mostly with GCC, with the notable exceptions of OpenMentry via an Android, which are built with Clang. BSDs are mostly built with Clang. Quite a few built-from-source distributions offer both choices. If you're using Yocto, it uses GCC by default, but you can pull in the meta Clang layer to get Clang support, and that will work pretty well as well. So Clang makes it easier, and unless you are very much into GCC's code base already, to add new architectures, new languages, use it as a library, if you are planning to work on the compiler itself, probably Clang is the way to go. If you are using G-Lipsy, at the moment, you still need GCC to build it. The Clang support for G-Lipsy is still in progress, and if you don't need any of the extras offered by Clang and you want to go with just one compiler, that's a good reason to use GCC for that particular system. And of course, the overall conclusion is, multiple compilers are good. If you can try to build your code with multiple compilers, you can find out which compiler works best for your particular code you are developing. You won't run into nasty surprises like the compiler being 20 times slower than it should be, just because you didn't try anything else. And also, it will help you find bugs, because different compilers warn about different problems. I found a construct like this in a Bluetooth driver, where they actually assume passing a character array and using size of one, it would tell the size of the array. But it obviously returns the pointer size of the target system, because it's being passed around as a pointer. And up until very recently, only Clang would warn about this. A similar warning has been added to GCC lately, and I'm sure there are other situations in which GCC will warn about something that Clang's island list follows. So it is always useful to run your code through multiple compilers and see what they have to say. Next component of a tool chain is a libc. The default option that pretty much everyone is using all the time is glibc. It's the most widespread, most complete, most standard compliant thing there is. It's very well tested. It has very complete architecture support, but its code is not very readable. It needs GCC to be compiled. So if you are opting for a Clang-based system, that may be a reason against using glibc. It's not very optimized for small systems. It's rather big, roughly four megabytes for the LDSO and libc, libm. So especially if you are targeting a low-end system, you might want to look at some alternatives. One of those is Muzzle. It's also complete, fast, relatively small, 785K compared to glibc's four megabytes. It's designed for newer versions of the languages, C11 plus and POSIX 2008. It also implements many glibc extensions, Linux extensions, BSD extensions. So you probably won't run into many problems at compile time while you're porting to it. Chances are it will just work. It also has really good architecture support. The code is quite a bit more readable. It has been around since 2011, which is once again the same situation as with GCC and Clang. One has been around longer and can probably be considered a bit more mature. The other is newer and therefore doesn't carry around all the craft. So that's an advantage and it is advantage at the same time. One thing people frequently point out speaking against muscle is that system D pretends it needs glibc. So you can think that if you want to use system D on a system you have to use glibc, but it's not actually true. If you edit the make files a bit and patch towards three lines of code, at least the basic components of system D will work perfectly with muscle. It's possible that there's some components that won't, but at least I haven't run across any that won't so far. Another option is your clibc and g, which is a project that has been around for a long time, but it has also stopped a couple of times and then restarted. One of the most interesting features of this one is that it's possible to strip it down easily. You have a configuration system that is similar to the kernels where you can just leave out parts of the libc that are part of the standard, but that you won't need in your particular embedded system. Like you can leave out libm or you can leave out the stdio stack or stuff like that if you don't need it. It supports many processor types, including ones that don't have MMUs. So if you are targeting the very low end, that's certainly worth a look as well. Then we have clibc, which is originally written for early bootup process. Some distributions like the Debian use it in it, like MFS, it only provides its upside of libc functions. It's optimized for size of a performance. It tries to make direct use of kernel structures so it doesn't have to convert types. So for example, in other lipsies, kernel might have a different idea of what's in the struct stat than the libc. In klibc, the kernel structures are used. Because of that, it's extremely small. You can get to full libc in 75 kilobytes. It's probably not powerful enough as a real-world libc, but it might be an option for some embedded systems. One problem is that it uses GPL kernel headers and the resulting license situation is not 100% clear. Like when does that make it a derived work and you have to put everything that uses it under the GPL and when doesn't it really affect it because it's standard interfaces. But of course, if you're building a system that is fully GPL anyway, that doesn't really matter. One thing that is coming up, not yet fully finished, but looking interesting is the LLVM libc. It's in early stages, some code is there, you can look at it in the LLVM git repositories. It's potentially interesting because it has been designed from scratch to work with sanitizers and fast testing, targets only C17 and up, so it doesn't carry around any of the ancient craft that you might want to get rid of. Design goal is to use source-based implementations whenever possible instead of using assembly like many of the other libcs. That is actually a design goal because it's being written by compiler developers. So the idea there is to fix the compiler to generate the code that you would otherwise handcraft. While it is not yet ready, the LLVM project has a track record of delivering good toolchain options for both in binutils and compilers. So it's certainly worth mentioning already, but if you're planning to get something out this year, it's probably not worth a look. Another option there is Bionic, which is what Android uses. It's originally based on a BSD-Lip C. Currently supports ARM and X86, both in 32 and 64 bit variants. I know that with five supporters underway, it's rather well optimized because of the vendor support Android is getting. In its early stages, it used to be pretty much unusable for a regular Linux system because it wouldn't provide system five shared memory and stuff that you would need to get an X11 stack, but these days it has pretty much caught up on that. But at the same time, it added more and more Android-isms that are not used outside of Android, like Apex and system properties and the build system is totally tied to the Android tree. So even just building it outside of the Android tree to make use of it in any different context is a bit of a challenge. But of course, an advantage of using Bionic, even if you're not on Android, is that close drivers written for Android could be used in any different Linux system that uses Bionic without having to go through stuff like the fibers. So if you're trying to build anything that is in any way a Linux Android hybrid system, Bionic might just be the way to go. There's a few other options that should be mentioned. Newlib is a pretty much complete implementation of a C-library for mostly for embedded devices. It only supports static linkings or as soon as we are talking about bigger devices, becomes less interesting, but it is certainly useful in the low-end embedded world and it's used by most Zephyr builds today. Zephyr is currently transitioning to Picalypsy, which is a fork of Newlib and also of the AVR-LibC that took mostly the STDIO bits. And it frequently incorporates changes from Newlib, so it's probably a better option than Newlib because it gives you Newlib plus all sorts of extensions and better build systems, threat local storage and stuff like that. Then the STDIO-LibC, which is really optimized for small size and static linking, but it supports dynamic linking, even though it's not really meant for it. It's not very actively maintained and it's under the GPL license, not LGPL, so you might have a license problem there if you're building any components that aren't GPL. And of course lastly, there's the option to take a BSD-LibC imported to Linux, which has been done for example by Bionic initially. So conclusions, there are many interesting options. Again, there's no clear winner for every situation. My advice is if you need maximum compatibility with other systems, go with G-LibC because that's what everyone in the desktop and server world and many embedded devices uses. If you need something that is full-fledged, but smaller, more memory-efficient, muscle, if you just need a subset, you will need the possibility to strip out features of the Lib-C that you don't need. Try your C-LibC-NG. And if you want to experiment with Android features on an embedded device, also Bionic might just be worth looking into. Next thing is C++ support. There's primarily two contenders for the STL library. One is LibS to the C++, which is part of GCC, used by pretty much all the Linux distributions, even those that use clang as their primary compiler. Android is probably the only major exception that uses LibC++ from LLVM instead. And if you expect stuff to just compile without having to add missing includes or anything, there's a good chance you just want to use LibS to the C++. The main other option is LibC++ from LLVM. It's newer and smaller than LibS to the C++, carries less craft to support ancient code. Many benchmarks show it to perform better, but not all, that's the same situation as with GCC and clang. They are similar in performance. You can craft a benchmark that will show one being much superior to the other. You can craft another benchmark that shows the opposite. One problem is you can't mix those. So for example, if you build QT against LibC++ and then you get a third party binary that uses QT, but that QT has been built with LibS to the C++, that is going to go clash because they use many of the same symbols, but they are not fully binary compatible. So try to pick one of the LibCs. There's one context in which that's different. A lot of third party applications, like Chromium if you use the pre-built binaries, they will be used, they will be built with LibC++, but those projects have made sure that they are not being mixed with the C++ libraries that have been built against LibS to the C++, which is one of the reasons why for example, Chromium binaries usually include a lot of shared libraries that are just duplicated from the system. There's also Usylipsy++, which is an interesting option in concept. It was an attempt to write an STL implementation that goes along with Usylipsy, so like with Usylipsy and G, it had all the features to strip out stuff you don't need, but it hasn't been maintained since 2016. So if you need some of the features, like being able to rip out parts of the STL that you don't need, you may want to revive the project, but if you're not prepared to revive the project, it's not seeing any upstream maintenance today, and it's not worth using unless you spend significant time on it. There's a few more implementations like STL port and Apache LibS to the C++, but they have been unsupported since 2008. One thing that is possibly worth a look, especially if you're looking into working on the STL itself, is the MSVC STL that has been opened up under the Apache license recently, but it has not yet been ported to Linux, and the project has no intention of doing so, but if you're interested in looking at how some platform-independent stuff works, it might be another interesting place to look at, copy some code from, and maybe merge into LibC++ or LibSTD C++. Conclusions, essentially, there's two options that are generally useful. If binary compatibility with other Linux distributions is a concern, you certainly want to use LibSTD C++, because that's what everyone uses, and if you use Clang and you care about performance and memory efficiency, and not so much about compatibility, LibC++ is probably the one to try. Lastly, the debugger component of ToolChains, GDB has been around for a long time, it's still being maintained actively, and as usual, LLVM has come up with an alternative, which is LLDB, both do pretty much the same job, and both do it well. LLDB provides many command aliases for compatibility, but it's not fully compatible, and its native syntax tends to be cleaner. It's been designed 20 years later, but it's also more verbose. So if you like typing one data commands, GDB is still the one to learn. LLDB has an agency++ support and can evaluate expressions in the LLVM grid. So if you don't know how to use any of the debuggers yet, the LLDB is probably the interesting one to learn, but if you're already using GDB, there's no really compelling reason to switch. Now, that's all, and we have one minute left. So if you have any questions or feedback, let me know now, or contact me there. And if you have any backs of cash for me, just throw them at me, but not where the tax office can see them.


Um, so Steve says, uh, it's been a while since I submitted anything to you. But when I received Gary Rosenwigs, Rosen's wig, he's been on the show. We love Gary. Oops. So sorry, I mangled that. Um, macmost.com newsletter. And yesterday he posted an article about his free clipboard manager, um, a new free Mac utility app, clip tools, clip tools is a free clipboard manager and text selection utility for Mac from Mac most. With it, you can access your clipboard history, save clips, use programmable smart clips, paste the date or time, insert example, text, perform calculations and paste the result or replace the selection, convert numbers to words, sort lines and so much more. Um, huh. Check it out. Yeah. Huh. We'll provide a link to it.


Yeah, we'll get started. Yeah, Matt, how, um, just take a few left rounds there, but hit Kyle, get started, and put your foot down, and try to get back in the game. Yeah, I thought a great play call by, by Art, to start that drive. You got some quarters-type coverage where the guys were getting down low to stop some of our intermediate play-action pass game. And to slip Kyle behind there, you know, it was a really good call. And that really was the jumpstart for us on that last drive. Got us going. And it wasn't perfect on that last drive, but we made the plays we needed to make, and it was great to get Mike in the end zone at the end of the game. Did you say anything, Kyle, for his, you know, first-ever yard game? I just told him right before I came in here, I'm proud of him. And I think there's going to be a lot of those in the future for him. He's done a great job of focusing on growth and development day in and day out, and just trying to get better. And there's a lot of noise, both positive and negative, that, you know, can distract you from that. But, you know, he's been as good of a young guy of being able to just focus in on working hard every day and getting better. And I think he's done that for the five games we've had. And, you know, I expect him to continue that.  Absolutely. You know, I think coming into the game, we felt like, you know, we wanted to get those guys going. And you never know how it's going to shake out. You know, coverage can take you to different spots, but we got some man-to-man coverage looks and our guys won. And, you know, I thought Hayden played really well for us today. I thought Kyle did an excellent job. Lee Smith, you know, the big fellow was out there making a few plays for us, too, in the passing game. So as a group, I thought their entire group played well. I don't know if it's a career high, but I think he might be on, he might be on pace for a season high. I mean, he seems like he's getting a catch or two every week. Yeah, it's, you know, I'm proud of that. You know, I've completed the ball to a lot of great players in those 5,000 completions. And I certainly wouldn't still be in this position if I wasn't surrounded by an incredible supporting cast. So, you know, I'm very proud to still be doing it and feel like I'm doing it at a high level. And I certainly had a lot of help along the way. So I'm appreciative of that. I feel pretty good. I feel pretty good. You know, it's one of those things. You don't think about it as a player. You know, you focus every week on trying to get yourself ready to play the best you possibly can that week. And I think, you know, having tried to stay in that mindset for the duration of my career has allowed me to kind of stack some of those accomplishments. And I won't change. You know, I think I'm proud of what I've accomplished, but I'm focused on, you know, trying to help this team win as we move forward. It was incredible. You know, this stadium is beautiful. It's amazing. The atmosphere was really cool. It was probably one of the best flyovers I've ever seen. Those planes were tight to the stadium. So that got my juices going before the game. And it's always, you know, I've done this twice. I've been able to come over here and play here twice. And it's always a special event. And, you know, a huge thank you to everybody over here in the U.K. who makes it such a special event for us. Well, it feels better we left here with win this time. So I'm a fan of this stadium. But, you know, even Wembley, the history of that stadium and what it means, you know, to this country and the games that have been played here, the magnitude of those games.  So I've really, you know, enjoyed both of my experiences over here. It's a long-ass flight to London as a long-ass flight. Your teammates to make the journey over to London and also adjusting to the time difference. It is a long-ass flight. There's no question about that. We've got a long-ass flight going home tonight too. But, you know, I thought our support staff and coaching staff did a great job of getting us ready to play this week and whether that was preparing early in the morning back in Atlanta before we came over Thursday night to everything that, you know, our operations department had planned for us while we were here. We didn't want for anything. We were given great advice on how to get ourselves and our bodies and our minds adjusted and I thought guys did a good job of being professional about it and getting themselves ready to go. Yeah, it's, I mean, it is another game on the schedule, but it's definitely different.  You know, it's just shorter flights. It's just easier to travel. And so, you know, I think you got to embrace the different week, the different routine and try and do it as well as you can. And so I don't think it's just another game. You know, I think it definitely feels different. It's got a different feel to it, but I thought for the most part we did a great job of embracing that difference all week and we're happy to, you know, come away with the win today.  And, you know, you see that you get great support. There are fans over here and you can feel that. And I'm sure, you know, with what NFL Europe did during its time here from guys that I played with at the beginning a long time ago, some of those guys played over here and they mentioned that, you know, the atmospheres in Germany were incredible. So I don't know anything about it of what they're going to do, but, you know, if it takes, you know, Falcon seven more years to get over here, I hope I'm still playing and, you know, can come back and enjoy that experience as well. It's coming at the right time, you know, there's no doubt about it. I think it's, and I, you know, that was a little bit of my message to the team afterwards is that, you know, we're building as a team and we're getting better and we need to approach this by week with the right mindset, you know, to get ourselves mentally fresh or bodies fresh so that we can come back and in the next stretch of five or six games before we play on a Thursday night and then have an extended period off, we can get ourselves back in the mix and, you know, that's got to be the mindset for us. I don't know if fatigue was or not.  They had more playing time than they normally have and I thought, you know, Alameda Zacchaeus, Tashay Shar, Christian Blake, I thought those three guys did an amazing job for us today. I thought the whole line did a great job. You know, I understand that the Jets are one and four but their defensive line is very strong and, you know, a very good group and I thought our offensive line did a great job today of stepping up to that challenge. They fight, you know, they really do, they fight hard and I appreciate that. They give it everything they've got and I thought they did a pretty good job today. Well, I think he's an incredibly versatile player.  Got time for one more? Yeah, it was, you know, a quarters type coverage which we talk about which is low safety so I thought it was an excellent call by Arthur Smith at a time where they were kind of coming down trying to be aggressive. Our offensive line did a great job of holding up long enough to be able to throw it down the field. Kyle got behind the defense. I mean, he's got incredible speed, you know, very tight end player and that's not a thing most guys can do and, you know, I thought that was a great play by Kyle and a really good call by Arthur Smith. All right, thank you guys. All right, thank you. Appreciate it.


The Cube is live with three different stages here at AWS re-invent in fabulous Las Vegas, Nevada. My name is Savannah Peterson and I got to tell you, even though the Cube has been at AWS re-invent for over a decade, this is my first year and wow is it just buzzing in here. It's busy, it's crowd is loud. So exciting to be here with you all. We're hearing north of 50,000 people and I'm hearing hundreds of thousands online. It's going great. There's lots of buzz, lots of excitement. It's your first three times a number of people, but it's fantastic. Everyone in the same place at the same time. Energy is just pretty special, so it's fun. I mean, AWS is a friendly place for security companies and I'm excited to talk about that. Glad to be here. We have a lot coming for you. We're super excited and if you think about it, it's price performance, it's data, it's security and it's solutions for purpose-built use cases. Great job. Congratulations. I love the message. I love how you guys had the theme. I thought it was great and it's great to see Amazon continue to innovate. My name is Savannah Peterson. We are the Cube and we are the leading source for high-tech coverage.


Right guys, what have we here another video for you all? I will be reacting to or watching Charles Barkley until I'm impressed number 16 on the list of the top 30 NBA players of all time Charles Barkley. I never saw him play Wouldn't know a nickname if he had it Chuck apparently. I've just read that there. I didn't I actually didn't know that but what I have seen him is obviously on the you know, he's He's kind of like Shaq. He's all over the place He's he's a personality within the world of basketball right within the world of ESPN The only real thing that I've seen is him Swing a golf club and it was um, well it was Geez, it certainly wasn't impressive It was I think he's improved. I feel like he's improved either way guys We're looking at Geez, what's his name again Charles Barkley? Until I'm oppressed prior to that prior to looking at his video We will read through his blurb crazy that Chuck is now underrated underrated It's because he's been playing too much golf a member of the NBA 75 team people forget that he dominated for years as a six-foot six Power forward now. I didn't think he was six foot six I did not think he was six foot six and I certainly didn't think he played power forward But you learn something new every day the mound round of rebound Was a beast on the boards averaging eleven point seven for his career even with his down years in Houston Barkley couldn't be stopped offensively either betting out Jordan for the 93 MVP and taking his new team the Suns to the finals where he lost to Jordan's balls in Six Chuck played bigger than he was even though he is six foot six I mean slamming dunks on motherfuckers heads for fun and was way more athletic than he was perceived Early in his career. He was quicker and stronger than everyone else But as he got older he was able to add more finesse to his game Barkley started jaying people up and Shooting threes jaying people up now jaying people. What does that actually mean? Let's let's get into that Might be a urban dictionary for you jaying people definition Come on man jaying people now. What does that mean? Does that mean Jordaning people? Does that mean Jay?  I'm thinking I'm thinking getting them off balance. I'm thinking crossing them over and Shooting a nice three Forcing opponents to guard from all over the court and not just on the block He was always one of the most entertaining players on and off the court leading him to becoming an Emmy Award winning studio Host on inside the NBA the younger generations get to enjoy The Chuckster in ways older NBA fans never imagined for you guys. No, there's still never been a player quite like him Okay, six foot six power forward averaging 11.7 boards per game his entire career alright guys Charles Barkley Funny moments on Dirk Nawitzky golf swing San Antonio. There's no highlights Well, the Sun's highlights. I'm gonna write it in for you guys. I'm gonna write it in Charles Barkley Highlights, I mean clearly he's been to different teams. Charles Barkley career highlights.  I'm impressed. Thanks guys and well Best of luck on the golf course mate. See you later


Who am I? Is this like an existential question, or? Who am I? Okay, East. It's a little early for this level of aggression, you know, even for you. Hey, give me my body back.  Hey, guys are so weird. Some sort of prank. You know, comedy isn't really your strong suit. Wait, seriously? You can't tell. Tell what? That's not me. That's Faze. I'm gonna go get some coffee. Can't you just, you know, do the thing where you reconnect us? Oh, is that what I do? I don't know, it's not like I control it. Morning, you two. It's good to see you spending some time together, or guess it's more like time apart. Am I right? Oh, God. Axe, please tell me you know who I am. Sure I do, Faze. You're the newly reformed prodigal daughter of our fearless leader, Agent West. You have no idea how much of what you just said is completely wrong. We're doomed. Did you guys spar too much yesterday or something?  Funny isn't our thing. Yeah, we know. What are you doing standing around? Food's ready in the mess hall. We've got to be out for escort in 20 minutes. West, notice anything different about me? Uh, uh, did you, uh... Oh, no. Cut your hair? Seriously, I'm wearing a helmet. No, I meant not your hair, but, uh... Did you change, um, your makeup?  No? No, there's still a chance. We haven't talked to the smartest person here yet. Ray, do you know where Tiny is? We need her help. Oh, what's up, East? Uh, I think she's busy on a repair right now. Is it something I can help with? Wait, what did you just say? What's up, Faze? I said, what's up, East? I think she's busy on a repair. How could you tell we're switched? Uh, your voices sound totally different. Thank you. Oh, my God, this is incredible. I never thought I'd see this in real life. What do you think this is? Uh, hollow echo malfunction, sinister unknown force hacking us for their benefit. No way, East. Isn't it obvious? Duh. It's the classic Freaky Friday body swap switcher route. What? Yep. You're always fighting with each other. Hmm. Probably something supernatural wanted to teach you a lesson. And you were the genius on this team? A lesson about friendship and cooperation. How do we fix this, Ray? It's simple. You've got to understand each other and make a selfless sacrifice. That's not going to happen. I want my body back now. Have you tried saying please? You can't be serious. Maybe whatever switched you guys at least wants you to learn a lesson about manners. If you refuse to learn about each other. Fine. I want my body back, please. I really thought that would work. There's no way it would be something so stupid. Faze, it worked. Finally. See? Told you. Manners.  I miss my armor so much. So what did you two learn? I learned nothing. You speak of this to no one. Right. Yep. I've got to go check my room for tampering. I didn't touch anything. Who knows what you did to my suit? What are you even doing here? It's none of your business what I'm doing here. You're welcome. Thank you for checking out this episode of Red versus Blue. If you enjoyed watching, head over to Rooster Teeth for more of this show and- And don't forget to be a first member if you want access to premium content before everyone else. Get out of the shot, Ray.