From theCUBE Studios in Palo Alto in Boston, bringing you data-driven insights from theCUBE and ETR. This is Breaking Analysis with Dave Vellante. The pandemic not only accelerated the shift to digital, but also highlighted a rush of cyber-criminal sophistication, collaboration, and chaotic responses by virtually every major company in the planet. The SolarWinds hack exposed supply chain weaknesses and so-called island hopping techniques that are exceedingly difficult to detect. Moreover, the will and aggressiveness of well-organized cyber criminals has elevated to the point where incident responses are now met with counterattacks designed to both punish and extract money from victims via ransomware and other criminal activities. The only upshot is the cybersecurity market remains one of the most enduring and attractive investment sectors for those that can figure out where the market is headed and which firms are best positioned to capitalize. Hello and welcome to this week's Wikibon Cube Insights powered by ETR and this Breaking Analysis will provide our quarterly update of the security industry and share new survey data from ETR and the CUBE community that will help you navigate through the maze of corporate cyber warfare. We'll also share our thoughts in the game of 3D chest that Octa CEO Todd McKinnon is playing against the market. Now we all know this market is complicated, fragmented and fast moving and this next chart says it all. It's an interactive graphic from Optiv, a Denver Colorado based SI that's focused on cybersecurity. They've done some really excellent research and put together this awesome taxonomy and they've mapped vendor names therein and this helps users navigate the complex security landscape and there are over a dozen major sectors, high level sectors within the security taxonomy and nearly 60 sub-sectors from monitoring, vulnerability assessment, identity, asset management, firewalls, automation, cloud, data center, SIM, threat detection and intelligent endpoint, network and so on and so on and so on. But this is a terrific resource I'm going to help you understand where players fit and help you connect the dots in the space. Now let's talk about what's going on in the market. The dynamics in this crazy mess of a landscape are really confusing sometimes. Now, since the beginning of cyber time we've talked about the increasing sophistication of the adversary and the back and forth escalation between good and evil and unfortunately this trend is unlikely to stop. Here's some data from Carbon Black's annual modern bank heist report. This is the fourth and of course now VMware's brand highlights the Carbon Black study since the acquisition and it catalyzed the creation of VMware's cloud security division. Destructive malware attacks according to the recent study are up 118% from last year. Now one major takeaway from the report is that hackers aren't just conducting wire fraud. They are 57% of the bank surveyed saw an increase in wire fraud but the cyber criminals are also targeting non-public information such as future trading strategies. This allows the bad guys to front run large block trades and profit. It's become very lucrative practice. Now the prevalence of so-called island hopping is up 38% from already elevated levels. This is where a virus enters a company's supply chain via a partner and then often connects with other stealthy malware downstream. These techniques are more common where the malware will actually self form with other infected parts of the supply chain and create actions with different signatures designed to identify and exfiltrate valuable information. It's a really complex problem. Of major concern is that 63% of banking respondents in the study reported that responses to incidents were then met with retaliation designed to intimidate or initiate ransomware attacks to extract a final pound of flesh from the victim. Notably, the study found that 75% of CISOs reported to the CIO, which many feel is not the right regime. The study called for a rethinking of their right cyber regime where the CISO has increased responsibility in a direct reporting line to the CEO or perhaps the COO with greater exposure to boards of directors. So many thanks to VMware and Tom Kellerman specifically for sharing this information with us this past week. Great work by your team. Now, some of the themes that we've been talking about for several quarters are shown in the lower half of the chart. Cloud of course is the big driver thanks to work from home and the pandemic. And the interesting corollary of course is we see a rapid rethinking endpoint in identity access management and the concept of zero trust. In a recent ESG survey, two thirds of respondents said that their use of cloud computing necessitated a change in how they approach identity access management. Now, as shown in the chart from Optiv, the market remains highly fragmented and M&A is of course way up. Now, based on our research, it looks like transaction volume has increased more than 40% just in the last five months. So let's dig into the M&A, the merger and acquisition trends for just a moment. We took a five month snapshot and we were able to count about 80 deals that were completed in that timeframe. Those transactions represented more than $20 billion in value. Some of the larger ones are highlighted here. The biggest of course being the Tom Abravo taking proof point private for a 12 plus billion dollar price tag. The stock went from the low 130s in his trading in the low 170s based on the $176 per share offer. There's your arbitrage, folks, go for it. Perhaps the more interesting acquisition was Auth0 by Octa for 6.5 billion, which we're going to talk about more in a moment. There's more private equity action we saw as Insight bought Armas in IoT security play and Cisco shelled out $730 million for IMI mobile. Which is more of an adjacency to cyber but it's going to go under Cisco security and applications business run by G2 Patel. But these are just the tip of the iceberg. Some of the themes that we see connecting the dots of these acquisitions are first. SIs like Accenture, Atos and Wipro are making moves in cyber to go local. They're buying SecOps expertise, as I say locally in places like France, Germany, Netherlands, Canada and Australia that last mile, that belly to belly intimate service. Israel is really based startups chalked up five acquired companies in the space over the last five months. Also financial services firms are getting into the act with Goldman and MasterCard making moves to own its own part of the stack themselves to combat things like fraud and identity theft. And then finally, numerous moves to expand markets with us zero crowd strike, buying a log management company Palo Alto picking up DevOps expertise rapid seven shoring up its Kubernetes chops, tenable expanding beyond insights and going after identity, interesting. Fortinet filling gaps in a multi-cloud offering sale point extending to governance, risk and compliance GRC Zscaler picked up in Israeli firm to fill gaps in access control. And then VMware buying mesh seven to secure modern app development and distribution services. So tons and tons of activity here. Okay, so let's look at some of the ETR data to put the cyber market in context. ETR uses the concept of market share. It's one of the key metrics which is a measure of pervasiveness in the data set. So for each sector, it calculates the number of respondents for that sector divided by the total to get a sense for how prominent the sector is within the CIO and IT buyer communities. Okay, this chart shows the full ETR sector taxonomy with security highlighted across three survey periods April last year, January this year and April this year. Now you wouldn't expect big moves in market share over time. So it's relatively stable by sector, but the big takeaway comes from observing which sectors are most prominent. So you see that red line, that dotted line imposed at the 60% level. You can see there are only six sectors above that line and cybersecurity is one of them. Okay, so we know that security is important in a large market, but this puts it in the context of the other sectors. However, we know from previous breaking analysis episodes that despite the importance of cyber and the urgency catalyzed by the pandemic, budgets unfortunately are not unlimited and spending is bounded. It's not an open checkbook for CISOs as shown in this chart. This is a two-dimensional graphic showing market share in the horizontal axis or pervasiveness and net score in the vertical axis. Net score is ETR's measurement of spending velocity and we've superimposed a red line at 40% because anything over 40% we consider extremely elevated. We've filtered and limited the number of sectors to simplify the graphic. And you can see in the sectors that we've highlighted only the big four or above that 40% line, AI, containers, RPA and cloud, they exceed that sort of 40% magic waterline. Information security, you can see that is highlighted and it's respectable but it competes for budget with other important sectors. So this of course creates challenges for organization because not only are they strapped for talent as we've reported, they like everyone else in IT face ongoing budget pressures. Research firm Cybersecurity Ventures estimates that in 2021, $6 trillion worldwide will be lost on cyber crime. Conversely, research firm Candelus peg security spending somewhere around $60 billion annually. IDC has it higher around a hundred billion. So either way, we're talking about spending between one to 1.6% annually of how much the bad guys are taking out. That's peanuts really when you consider the consequences. So let's double click into the cyber landscape a bit and further look at some of the companies. Here's that same XY graphic with the company's ETR captures from respondents in the cybersecurity sector. That's what's shown on the chart here. Now the usefulness of the red lines is 20% on the horizontal indicates the largest presence in the survey and the magic 40% line that we talked about earlier shows those firms of the most elevated momentum. Only Microsoft and Palo Alto exceed both high watermarks. Of course, Splunk and Cisco are prominent horizontally and there are numerous companies to the left of the 20% line and many above that 40% high watermark on the vertical axis. Now in the bottom left quadrant that includes many of the legacy names that have been around for a long time. And there are dozens of companies that show spending momentum on their platforms i.e. above single digits. So that picture is like the first one we showed you very, very crowded space. But so let's filter it a bit and only include companies in the ETR survey that had at least 100 responses. So an N of 100 or greater. So it's a little easy to read but still it's kind of crowded when you think about it. Okay, so same graphic and we've superimposed the data that determined the plot position over in the bottom right there. So there's net score and shared N including only companies with more than 100 N. So what does this data tell us about the market? Well, Microsoft is dominant as always. It seems in all dimensions but let's focus on that red line for a moment. Some of the names that we've highlighted over the past two years show very well here. First I want to talk about Palo Alto networks. Pre COVID as you might recall, we highlighted the valuation divergence between Palo Alto and Fortinet. And we said Fortinet was executing better on its cloud strategy and Palo Alto was at the time struggling with the transition, especially with its go to market and its Salesforce compensation and really refreshing its portfolio. But we told you that we were bullish on Palo Alto networks at the time because of its track record and the fact that CIOs consistently told us that they saw Palo Alto as a thought leader in the space that they wanted to work with. They said that Palo Alto was the gold standard, the best, especially larger company CISOs. So that gave us confidence that Palo Alto a very well-run company was going to get its act together and perform better. And Palo Alto has done just that, as we expected. They've done very well and they've been rapidly moving customers to the next generation of platforms and we're very impressed by the company's execution and the stock has generally reflected that. Now some other names that hit our radar and the ETR data a couple of years ago continue to perform well. CrowdStrike, Zscaler, SailPoint and Cloudflare. Now Cloudflare just reported and beat earnings but was off the stock fell on headwinds for tech overall, the big rotation. But the company is doing very well and they're growing rapidly and they have momentum as you can see from the ETR data. And we put that double star around Proofpoint to highlight that it was worthy of fetching $12.5 billion from private equity firm. So nice exit there supporting the continued consolidation trend that we've predicted in cybersecurity. Now let's turn our attention to Okta and Auth0. This is where it gets interesting and is a clever play for Okta, we think and we want to drill into it a bit. Okta is acquiring Auth0 for big money, why? Well, we think Todd McKinnon, Okta's CEO wants to run the table on identity and then continue to expand his TAM. He has to do that to justify his loft evaluation. So Okta's ascendancy around identity and single sign on is notable. The fragmented pictures that we've shown you, they scream out for simplification and trust and that's what Okta brings. But it competes with some major players, most notably Microsoft with Active Directory. So look, of course, Microsoft is going to dominate in its massive customer base but the rest of the market, that's like jump ball. It's wide open. And we think McKinnon saw the opportunity to go dominate that sector. Now Okta comes at this from an enterprise perspective bringing top-down trust to the equation and throwing a big blanket over all the discrete SaaS platforms and unifying employee access. Okta's timing was perfect. It was founded in 2009 just as the massive SaaSification trend was happening around CRM and HR and service management and cloud, et cetera. But the one thing that Okta didn't have that Auth0 does is serious developer chops. While Okta was crushing it with its enterprise sale strategy, Auth0 was laser focused on developers and building a bottoms up approach to identity. By acquiring Auth0, Okta can dominate both sides of the barbell and then capture the fat middle. So yes, it's a pricey acquisition but in our view, it's a great move by McKinnon. Now, I don't know McKinnon personally but last week I spoke to Arun Shrestha who's the CEO of security specialist Beyond ID. They're a platinum services partner of Okta and they're a zero trust expert. He worked for Okta for a number of years and shared with me a bit about McKinnon's style and think big approach. Arun said something that caught my attention. He said firewalls used to be the perimeter. Now, people are. And while that's self-serving to Okta and probably Beyond ID, it's true. People, apps and data are the new perimeter and they're not in one location and that's the point. Now, unfortunately, I had lined up an interview with Dia Jolly who was the chief product officer at Okta and a CUBE alum for this past week knowing that we were running this segment in this episode but she unfortunately fell ill the day of our interview and had to cancel but I want to follow up with her and understand how she's thinking about connecting the dots with Auth0, with devs and enterprises and really test our thesis there. This is a really interesting chess match that's going on. Let's look a little deeper into that identity space. This chart here shows some of the major identity players. It has some of the leaders in the identity market and it's a breakdown of ETR's net score. Now net score comprises five elements. The lime green is we're adding the platform new. The forest green is we're spending 6% or more relative to last year. The gray is flat spend plus or minus 5%. The pinkish is spending less and the bright red is we're exiting the platform, retiring. Now you subtract the red from the green and that gets you the result for net score, which you can see superimposed on the right-hand chart at the bottom, that first column there. The far column is shared in, which informs and indicates the number of responses and is a proxy for presence in the market. Oh, look at the top two players in terms of spending momentum. Now sale point is right there but Auth0 combined with Octa's distribution channel will extend Octa's lead significantly in our view. And then there's Microsoft. Now just to caveat, this includes all of Microsoft's security offerings, not just identity, but it's there for context and CyberArk as well, includes its acquisition of adaptive but also other parts of CyberArk's portfolio. So you can see some of the other names that are there, which you'll find in the Gartner Magic Quadrant for identity. And as we said, we really like this move by Octa. It combines positive market forces with lead offerings from very well-run companies that have winning DNA and passionate people. Now to further emphasize what's happening here, take a look at this. This chart shows ETR data for Octa within sale point and CyberArk accounts. Out of the 230 CyberArk and sale point customers in the data set, there are 81 Octa accounts, that's a 35% overlap. And the good news for Octa is that within that base of sale point and CyberArk accounts, Octa as shown by the net score line, that green line has a very elevated spending and momentum. And the kicker is, if you read the fine print in the right hand column, ETR correctly points out that while sale point and CyberArk have long been partners with Octa at the recent Octane 21 event, Octa's big customer event, the company announced that it was expanding into privileged access management, PAM, and identity governance. Hello and welcome to co-opetition in the 2020s. Now our current thinking is that this bodes very well for Octa and CyberArk and sale point. Well, they're going to have to make some counter moves to fend off the onslaught that is coming. Now, let's wrap up with what has become a tradition in our quarterly security updates. Looking at those two dimensions of net score and market share, we're going to see which companies crack the top 10 for both measures within the ETR data set. We do this every quarter. So here in the left, we have the top 20 sorted by net score of spending momentum. And on the right, we sort by shared end. So again, top 20, which informs shared end informs the market share metric or presence in the data set. That red horizontal lines, those two lines on each separate the top 10 from the remaining 10 within those top 20. And our method, what we do is we assign four stars to those companies that crack the top 10 for both metrics. So again, you see Microsoft, Palo Alto networks, Octa, CrowdStrike, and Fortinet. Fortinet, by the way, didn't make it last quarter. They've kind of been in and out and on the bubble, but you know, the company's very strong and doing quite well. Only the other four did last quarter. They were same four last quarter. And we give two stars to those companies that make it in both categories within the top 20, but didn't make the top 10. So Cisco Splunk, which has been steadily decelerating from a spending momentum standpoint, and Zscaler, which is just on the cusp. You know, we really like Zscaler and the company has great momentum, but that's the methodology. That is what it is. Now you can see we kept Carbon Black on the rightmost chart. It's like kind of cut off to number 21, only because they're just outside looking in on NetScore. You see them there? They're just below on NetScore, number 11. And VMware's presence in the market, we think that Carbon Black is really worth paying attention to. Okay, so we're going to close with some summary and final thoughts. Last quarter, we did a deeper dive on the SolarWinds hack, and we think the ramifications are significant. It has set the stage for a new era of escalation and adversary sophistication. Now, major change we see is a heightened awareness that when you find intruders, you'd better think very carefully about your next moves. When someone breaks into your house, if the dog barks, or if you come down with a baseball bat or other weapon, you might think the intruder is going to flee.  What's happening is intruders come to your company via island hopping or insider, subterfuge or whatever method, and they'll live off the land stealthily using your own tools against you so that you can't find them so easily. So instead of injecting new tools in that send off an alert, they just use what you already have there. That's what's called living off the land. They'll steal sensitive data, for example, positive COVID test results when that was really, really sensitive, obviously still is, or other medical data. And when you retaliate, they will double extort you. They'll encrypt your data and hold it for ransom. And at the same time, threaten to release the sensitive information crushing your brand in the process. So your response must be as stealthy as their intrusion as you marshal your resources and devise an attack plan. You face serious headwinds. Not only is this a complicated situation, there's your ongoing and acute talent shortage that you tell us about all the time. Many companies are mired in technical debt. That's an additional challenge. And then you got to balance the running of the business while actually affecting a digital transformation. That's very, very difficult. And it's risky because the more digital you become, the more exposed you are. So this idea of zero trust, people used to call it a buzzword. It's now a mandate along with automation because you just can't throw labor at the problem. This is all good news for investors. As cyber remains a market that's ripe for valuation increases and M&A activity, especially if you know where to look. And hopefully we've helped you squint through the maze a little bit. Okay, that's it for now. Thanks to the community for your comments and insights. Remember, I publish each week on wikibon.com and siliconangle.com. These episodes, they're all available as podcasts. All you got to do is search, breaking analysis podcasts, putting the headphones, listen when you're in your car or out for your walk or run. And you can always connect on Twitter at D-Valante or email me at david.valante at siliconangle.com. I appreciate the comments on LinkedIn and in Clubhouse. Please follow me so you're notified when we start a room and riff on these topics and others. And don't forget to check out ETR.plus for all the survey data. This is Dave Vellante for theCUBE Insights, powered by ETR. Be well and we'll see you next time.


Everybody forest here ripping a box of 21 22 chronicles basketball hobby for Brian B. Good luck Brian. Here we go, man See a big Kate auto maybe Mowgli barns Yeah, guys, I put the queue at an hour that's where we're at now a lot of orders been coming in appreciate it guys a lot of Donnie was getting hype Donnie was getting hype There's a threads D. Mila 74 149 The sumo Phoenix rookie silver crusade Scotty Barnes Essentials Grimes and marquee Kyrie Alperin shengun rookie plates and patches numbered 58 of 249 a Kaminga crusade from rookies and stars Mowgli hometown heroes Marquis Lebron and XR tray young that's right. I'm back. I was spun for how long look at that. Is that a gala? Yeah, gala five of eight Alperin shengun. We finally pulled one Congrats Brian Heck yeah, man. We finally pulled one five of eight shengun gala. That is awesome honor Steph Curry read those soon move hometown heroes 38 of 149 XR Duarte and Scotty Barnes essentials. They say hey Donnie What's up? Call duty mobile player now says hey, okay, okay cutting and rookie 126 of 149 Crusade Jalen Suggs airborne Mitch Richmond auto Mitch Richmond or Rich Mitchman 4 of 25 He's a with gala like an older set. I Honestly don't know all I know is a big chase. They're all it's whoever it is. It's only numbered eight So they're like hella rare we've heard how many cases of chronicles haven't hit one. So there's a hardened prism update Duarte hometown heroes Cade Cunningham 75th anniversary. That's very nice 67 to 75 It's a great box the last one should have another auto here should have a second auto There's a Mowgli threads blue 87 99 Mowgli rookies and stars per se hometown heroes Isaiah Todd rookie auto 63 of 75 Marquis Scotty Barnes and The next are limitable I know it's on average. Maybe it's because the gala is the Richmond, right? Yeah, so there's just a Richmond auto. So only one auto, but oh no, there's two the idea Todd. I'm sorry. I forgot about the Isaiah Todd There were two Sorry about that Brian, but congrats on the gala. We will get it right out to you


All right, welcome to the admin of code stream in Haskell 2022 My name is Maddie I'm sure Most of you know me. I mean, please see me on Twitter or something. Anyway Otherwise, why would you be at the street? We're doing day four today day one was about Counting calories so the elves had enough snacks Day two was about a tournament rock paper scissor tournament and day three We were helping the elves pack their bags We're doing in Haskell Which is why I have this Haskell water bottle I Got this scent. Hey, I Didn't interview or I helped someone with their job interview process And they sent me this cool Haskell bottle, which I think is pretty amazing. Anyway Let's get to it day four All right camp cleanup. So yeah, I think it's a Sunday. It's a happy advent for those who celebrate I guess I So today I think You know, it's Sunday if we finish this fast Maybe we'll try and rewrite it up. You know Do it a bit more than just the bare minimum anyway, let's Let's see what happens All right, so the space needs to be cleared up for the last supplies can be unloaded from the ships and So sir, I'm sorry. Yes, I did the job of cleaning up second of the camp Every section has unique ID number in each office. I do these okay Now are some of their O's compare their sections assignments with each other. They know it says three of the assignments over that Try to find over size we just took an effort You know, let's pair up and make a big list of the section assignments for each pair Okay Within the first okay, so we have these input example section assignment pairs and Within the first pair of Ls first those I go for six six eight That was the second probably assigned in each to two sections Yeah Doesn't throw we just had three sections one guy five six and five six seven Okay Single digit section ID is okay. Ah Visually these pairs of Okay They draw it up Some of the pairs have noticed that one of their assignments Fully contains the other for example two to eight fully contains three to seven and six to six is fully contained by four six It pairs with one assignment fully contains the other one elf in the pair would be exclusively teaching sections of partner already be cleaning So these seem like the most in need of whose consideration In this example there are two such pairs And how many assignments pairs does one range fully contain the other okay? It seems like a Simple kind of ranges I want to say a Let's see I've opened the day for file here Let's create the Example input see you don't have to download files. You just paste them My clipboard is my download. All right So how are we gonna represent these ranges? I Equals as a pair of events Okay, and they Now read input is gonna take a file pad and it's gonna list or return a list of pairs of ranges And we're not gonna repeat the same message we say Say So this is gonna be read input equals a read file Okay God, we're gonna fmap lines over this and Now it's complaining that it goes from string to string, but it actually wants a Range to range so we need to fmap map Transform And now I haven't defined it so I'm actually gonna yeah, so and this transform function It's gonna be a string to range Where transform Form and this one takes in the string. We're gonna split it at the comma And actually these are all single digit ranges, so we actually know that the comma here is gonna be this So we are just going to brute forces, we're not gonna write a parser This is also like what I like about I don't know these tasks. I think yeah, you can make it super complicated, right? But you don't want that really just just do you know just make it easy on yourself, right? Okay, so we're gonna say transform This is gonna take in a Range one and then it's gonna be a dash character and then a range two Let's say x1 x2 And then there's gonna be a comma then there's gonna be a one one Dash and why two and then it's gonna be the empty list equals we're gonna say It's gonna be a pair of pairs So we're gonna say read take it to it We're gonna use this function import dig it to data dot char digit to it digit to int x1 I'm gonna do it this way a X I 1 X I 2 X Y I 1 Y I 3 where equals map digit to int is called being lazy X1 X 2 Y 1 Y 2 And then I don't have to write So many times Okay, I called this actually three All right now, let's say do You didn't put example Interpret you see oh day four day 4.HS and run it It compiles ah We get the ranges boom see Haskell is quite easy You just stay you don't have to use all the fancy type stuff, right? Just Do yourself a favor And keep it simple All right now we have a bunch of ranges Now for the first one we want to see one range contains the other Yeah, but so this is a good point but This example is uses single digits. Oh, okay. I thought everything was a single digit. Let me check Okay, we have double digits. Okay. Good point. Not him It's actually just these example list that you Okay, then we need to do we need to write the split add function split a And this is actually quite annoying. It's not in preload, right? But we want like a We so we want to like the classic split function like in Python, right? We just split up the character. It gives you a list, but it's not actually in the prelude It's in like data that extras the lists But we don't have it. Okay, so we're gonna say char and then we're gonna say ah, let's see you EQ a A List of a's into this place Split split on Empty equals empty split on x is okay.  Okay, so what is span here doc span So it takes like the so the it takes until it's equal to that character Right, okay, so Then we say a case Huh, yeah, okay, so we say here So we take until it's equal to x We say so this one is gonna be like that everything that's before and then this one's gonna be the R Okay, so the rest, okay Okay is R of so if R is empty We just return B Okay, if R is the character and then the rest We return B and appended to Split on X. This is like R prime right split on X R prime. I think this will work. And let's check. Hey, Oliver Okay, let's check. Let's check what happens. So so we're not gonna do here. We're gonna do a We are going to do Okay, so transform it's gonna take an less upper. So okay, so we're gonna do We're gonna import our favorite language extension language Applications, can I just write ghc 2021 year? Yes Because we're on ghc 9.2 or something So we actually have these things okay, and Ghc 2021 it's a new extension, but it just kind of enables a bunch of things that are actually you know kind of What everyone uses like type application. Okay So transform stir so stir this is like line Ellen line Okay Where so we're gonna have two things here. We're gonna have X and First elf E1 and E2 it's gonna be Split on split on comma and then a the rest so this is gonna be a er One you are to Yeah, this is super hard coded by the way uh e1 r1 e1 r2 uh e1 e e2 r1 e2 r2 equals map split on uh Let's just we don't actually need this one split on this over split on And comma of Ellen Okay, and then this is gonna be a e1 r e2 no e1 r2 to r1 e2 There is definitely a Break instead of span Break. Yeah, okay Actually, I I usually like to use span, but we actually want to do x not equals But there's a good point from Bambi capello. See this why we do it together Uh, let me see. There's a type of this Transform takes a string and returns a range. And what is it complaining about now? Ah What it's complaining about is that it's uh, it's not that's why we enable this readout int It wasn't an int. Okay It's probably might break actually. Ah It worked a I kind of want to write a function that takes a list of two things into a pair Let's just write that a L L2 to pair equals a to L2 to pair of a comma equals you Um And then we don't actually need all this We just say a We say a Now we map this to L2 to pair And then we say a L2 to pair L2 to pair Okay, and then we can remove this L and here just have right this one is a extremely un-total function L2 to pair equals return Error Not a list of two elements. Don't try this at home kids. And I mean you can try it, but This is like adamant to code or just hacking it out This is very hard coded. We should not do this in production, but We get to use a lot of like maps and maps and maps Which is fun. Okay a Yes Okay, we read the input we got a list of ranges. I'll try this in keep production kids. Yes It's a disclaimer It looks like it's product placement, but it's actually just a Haskell logo, right? And the You know the Haskell logo, we're doing it in Haskell. So we need to put to place the product It's a nice logo also. Um Okay, now we read the input Now we want to compare a contains A range range Move How do we contain a range? a The classic way is you kind of sort the ranges So you have like the smaller one You want it you want to have the Yeah, you want to figure out So, okay Contains r1 r1 r2 equals Okay, so gci. So if I sort, uh then Sort in a lot of list A sort okay, so if I have like one comma two And One comma one It sorts them like that. Okay, but if I have two comma one Uh two comma one One comma one, huh Maybe if they're equal it does like that. Let me see Okay, I think it just works for pairs. I feel like I remember that it was like Only sorting by one of them Hey Okay, anyway, this seems to work. How is the word? who go I want to see the odd instance for pairs Where are pairs defined a comma or a comma b? This is the one I'm looking for Let's go to base data dot tuple Huh Or no, let me see Yeah, the tuple. Okay. Yeah, I'm thinking of the functor instance This is something new our tuples are based on the solo Okay, how's the order define? It's derived Okay, a Hey houseator I'm just gonna cross that it works. Okay. I think I think it works I think it's sourced by the first one and then the second one Um And it looks like it does that right so if I do Yeah, I mean it looks like it does that so let's I let's just assume it. Let's a Yeah Oh elm is also nice. Elm used to have this cool a A Reactive programming thing right but then they like threw it out Which was as sad for the reactive programming community Okay Now we're gonna see so This is gonna be a p1 x1 comma x2 Y1 comma y2 we got a follow pr x s o Welcome Notification whenever I go online Not bad. Okay. Uh, we sort r1 comma r2 FRP was cool. I think it was cooler than and then it has some memory leaks Because for some instance you had like Uh Oh, hey PRX here I might pronounce the name right here x0. I don't even know Uh Okay, so We sort the two And now we have like the smaller is a So let's check it out If x1 is less than equal to y1 I think it's just like this. So if If x1 is less than Y1 Okay, and x and and Y1 is less than equal to y2 Then then they are contained Uh, but I want to see if it's entirely contained Okay, so Let's see a entirely contained fully contains like this. Let's write that not contains but like fully contains. Okay Contains He doesn't want the sort I need to import Sort ROC or rock Why don't you check out this or rock is like a language? No How sad or what are you talking about? a Okay, x1 is less than equal to y1 Okay, and no y1 is less than equal to y2 Yeah, I mean they're gonna be like it's a range of sections, right? So it's always Okay, so y1 is going to be less than y2 um and then Let's see y2 is less than equal to y x2 Then it's fully contained right We don't have to check like the Eh, I'll have to look at this rock thing Uh Yeah, so and then they're fully contained and we can do it this way because we sorted them first This is my this is what I think. Okay, um Now we have a pair of let's actually just do here Ah, no, I can just curry it. I never remember which is curry and which is uncurry. So uncurry Curry it takes up. Yeah Yeah So we actually we want to uncurry this function Okay so task one Task one is equal to task one takes a list of ranges and returns an inch Which is going to be how many assignments so we want to Here, okay task one equals filter uncurry Fully contains Eh, this is what I think it is. Okay, let me see task one We get two Oh, yeah Not that is actually That is actually true. I think it's always uncurry like when do you write a function that's like a pair to Okay, um We get the right answer for the example now, let's check out what we get for the input Do We need like curl. You can just go to web pages and copy paste I think that's the See this is like a thousand lines, but Boom copy paste I went find your last year this and looking for another thing.  It's it speaks to me I don't feel like doing too much work. I don't feel like doing too much unnecessary work Which is why it's lazy, right? It only does what it has to Boom 386. I hope this is correct Oh No, it's too low.  You guessed I said it was If you're stuck may use a blah blah blah blah Stop read it. Okay Huh, this is the first one. You haven't had it in the first try, but that makes it more interesting Okay, so I think this one is a bit what if I do like this or y1 less than equal to x1 and x2 less than equal to y2 I thought sorting took care of that, but Maybe not All right, we just forgot the other case But I really thought that so I guess the sorting here is just wrong Yeah, so we don't want to sort it I'm thinking like they I don't because I don't fully Because it's done via like deriving via See this is just the correct one like we didn't have to sort here Uh, it's done by deriving via so I You know, I don't know I can't look at the code and be like, oh, this is how the instance works Anyway, we fixed it. Okay. That was task one. Let's see. Well, part two is It seems like it's still quite a bit of double the work land I said the elves would like to know the number pairs that overlap at all While the remaining four pairs do overlap I think for task two we would want the Let's say overlap And this is going to be task two now for a the example this should be four And actually as people have been writing things like curry Yeah, we have cases exactly cases is good stuff And task two now this is going to be a called a overlap So here I want to say That this is actually quite dangerous I want to say that I want to say that this is this actually works For a No, okay. I don't know what the story. Okay. Let's just check for overlap. I don't care. Okay. I'm not being Okay, so when does a range overlap? That means that a y1 is less than x1 No, so why why one is? Yeah, so here I do sort Let's actually call this a R1 so r2. I don't I don't want to sort. I just wanted to call it twice equals a overlap prime r1 r2 or Or that prime r2 r1 Where overlap prime x1 y2 we did a lot of this so he was doing a Easy to check if they do not overlap That is true if a x If y1 is bigger than equal to yx2 a Then a that is true. Okay, let's say not overlap Is it gonna be a not overlap with prime not overlap prime Okay, and then we have an end here because of the morgan overlap prime x1 x2 y1 y2 and this is just gonna be Equals a y1 bigger than x2 right No x2. Yeah, I think it's like this. Let's see Uncurry not overlap filter not Oh, but then we get six I want to get four I'm just gonna check if they overlap. Okay. I don't I mean it's a good idea but I feel like I've got the other one more clearly in my mind Overlap Okay, so when do they overlap x1 x2 y1 y2 Okay, so they overlap if a x1 less than equal to y1 and y1 less than equal to x2 or a It's actually just like this. Yeah, so I did I did some the video game programming and We were doing these hitboxes And I actually always so now I'm trying to do it Without drawing it, but I always have to like Write the coordinate system write it down. What what is the case here? What is the case? And what is the case? Okay, so so here y1 Is in x1 But I filtered not How I get four okay good Yes, I'll say you can share it This is a channel for all languages But please consider haskell for your programming means it's actually a good language and You don't need a pht to programming. I was talking to the about this the other day. It's like I think haskell has a pr problem But and now everyone's doing like rust right Which is it's also hard to pick up like you have to know the memory model you have to remember borrowing And and I've seen a a room of phc students and professors try to write rust Uh and being very frustrated because they don't understand the messages They don't know you just want to write something and you have to borrow it to whatever And it's like an end sign. It was hard to do. Okay and Yeah, I think so I think haskell has this pr problem right where you're like Oh, you have to be so smart to write haskell, but no uh Just Like in the beginning don't use like the lens so don't use like these So haskell has this tendency of like the libraries will be very general So it'll be like hyper generalized and and what happens then is that You know, everyone's like, oh, you should use this library, right? Uh, I think use the libraries and uh Edible morning is coming. Well Edible moment Is my second biggest fan little and it is my biggest fan. She's not here today anyway, um Um So, you know, what I was just saying, yeah So like and then you try to use lens and it's like I cannot find the prism For this type, right? And you're like You know, I don't even know what's going on, right?  Um, and I actually don't have any idea what's going on there Um And then people like, you know, they get into haskell They try to use haskell and they're like, oh use this library. You get this insane type error from servant or from Lens or something And then you're like, I can't do it, right? And then but the people who love those kinds of errors They're the ones to stay, right? And then they're the ones who write the libraries That cause those errors, right? So So there's like this selection bias So what I'm saying is Just write simple haskell stick with haskell 98 stick with like not too much complex stuff in the beginning And slowly work yourself up, right?  That's like, you don't you don't do that when you're writing java Uh, when you're studying java, right? So just try to do the same in haskell. Okay, let's see I want to see 881 here Ah We got it Chat gbt explains rust errors Huh, but we got it. Um Yeah, I don't I don't understand rust errors. I mean, I should I mean, it's a good language. It's definitely a lot better than c And you know, c errors is just like, ah I'll just cast this type. I don't care. It seems like it's uh, it's you know, it's all memory. Anyway, right And then what happens is that You run the program and you just get segmentation for a core dump which is a lot worse than a long typer, right? So at least the long typer is kind of Trying to explain what you're doing Anyway, uh yeah, so that was my rant About haskell in the sense that Yeah, it's a pr problem, right? You don't need to be smart to write haskell You just need to be a bit patient with Because it really You know when something fails like it will give you the Like the actual type theoretic reason why it fails like could not unify true with false Or a skolam has escaped its scope Which is true But what is a skolam? right Have you guys heard of skolam the logician who did Skolamization of logic formulas? No I want to say that 95 percent of all programmers have not heard of skolams ah Maybe they did actually uh Maybe they did but you know you get my point like that's that was the The meta the current haskell meta right like oh, let's just tell them about skolams and you're like You know you usually only get the skolams, right? If you're trying to do something you shouldn't be doing right and that's what it's telling you it's like You know You're really trying to do A runtime types kind of right you're trying to Put the type of the thing You're trying to put the type of the value next to the value at runtime Which doesn't work because then you could look at the value of the type at runtime Uh, which means that the skolam has escaped its scope right type variable is around there after It shouldn't be but You know that's not really the problem here The problem is that I don't know what is I want to see what the messages are now right like what do you say? Don't do this. I don't know. That's also the thing like, you know, there is a problem the skolam escaped its scope You want to report that to the user But how do you explain that like how do you explain what they're doing wrong without? Yeah, invoking some logician anyway a Yeah Anyway, as you can see um This wasn't too hard. It's a bit tricky to get the range things correct And when I did this For video game programming back in the day. Yeah, you just have to write the diagrams.  And this is the first time this year. I screwed up on the first attempt, right? But if you have to Because also, yeah, like here like we got the right answer for the example. Well, we got the wrong one for them Elm has Greatest error messages yeah And I haven't used elm for like seven years I think After they stopped the frp. I'm like, I don't know. I use peer script. I use well you can run uh Well not right now, but The patch just landed in ght where you can actually compile it to wasm And the web assembly and then you can just run that directly in the browser I think they're still working on the javascript ffi. So you can't really interact with it from javascript Uh, you can kind of uh Yeah, exactly not. I'm right. Uh It's a rigid type. Well, what does that mean? I know what it means but I you know, you shouldn't have to know that much to understand the uh error message Anyway But you know, this is what simon pj keeps talking about like, ah, we need to improve error messages We need to improve error messages and there's this nice, uh, well issue somewhere that's like, oh and we want to know the provenance it's called of constraint of a type variable so you can kind of uh If you would kind of pipe through the whole thing like Where did this originate? And then when it breaks you can kind of say, ah It didn't work and it came from here original, right? And that would be a lot better than kind of trying to thread it through everything like Oh, let's look at the nodems link See it's open People are trying to see type variable would escape its scope Yeah, it's not great, but uh Isenberg is on it. He is a legend. Um Yeah, exactly So anyway, we're working on it And it's also the You know, because I think that I think the mismatch with skull limbs is like You take the code it's transformed into something else And then It doesn't work, right? Let me try and let me try and explain this message Okay, just me just if you like we w a hasn't taken What is w a? wasn't Web assembly, uh I mean it hasn't taken up because you don't write it directly in the web But like I've seen crazy like unreal Like literally like that engine like the unreal engine demos Running in the browser all web assembly But I think the interop is missing a bit Okay, so What happens here? We have a so you're right. And so this one takes in a y in Okay Here's x minus the same types y has type a bound the type signature of yes, this is type a Okay, so Length x y so if we put y in a list with x right, so this has to be a list of a's Okay, uh, but this one takes in a b Right, uh Actually, yeah, and so this is what the information about a So this a here because it's being used with x it has to travel To the outside and to the like it has to this a has to match this type of this x here Uh, and that is not allowed, right? Which means like a scolding has escaped type variable that's bound in a context has to be Exported to the outer context and it it doesn't work Uh, I mean it's not allowed, right? Otherwise types would just bubble up Everywhere Anyway, a Yeah, so we did add a bit of code day for Um Thanks for tuning in we had a lot of people today. I we have got we got 12 years. I think we had a lot of viewers at some point Uh And we'll continue. Uh, I mean it's pretty easy so far, right? It's all about You know most of the work now like you know, this is the actual solution, right? It's three lines of code, right And this is like task Listen from the other one, right? Uh It's the same it's like two lines of code Day two Yeah It's like it's a couple of lines of code like day one. So what I'm seeing is Yes, this was like the solution to problem one problem. So Most of the work so far has gone into Just taking the input and kind of wrangling it wrangling it into the format that we need For it to run, right? So here we have like l2p, our reading post, play down This is a function that really should be in the preload because uh, I mean it's in the extra preload or something but like every other Language has this function just there for you to use whenever you want Uh I wish it was there. Anyway Yeah, we haven't written a parser yet. Maybe we'll do that tomorrow And uh So what I did last year, I really Wrote a lot of these text dot repeat instances, right? Let's see Google I at one point I looked at render dot And now my search is always so I'll show that Tags dot readp Exactly. So this is in base And this is actually You can get to a read instance from if you define a readp Uh, yeah read s and then Read read s is this a A String and so so if you want to define a read instance read What you have to do to define a read instance in Haskell is you have to define Uh This uh reads spec function Where uh Which is takes in a uh, yeah who goes sometimes slow down. Anyway It takes in a read int and a read s and this enters the president's operator And so if you just ignore that and you have a read s instance Which you can define By using this readp to s function and then you basically write this readp instance And it's just a It's a it's a very easy to write and then so what I've what I did last year I was kind of ah, let's write this parser this way and then you just do read add type and use the read instance to Get it in Do Uh, just then just drop the first car in the second of the tuple Yeah, I mean so that works also But uh what I want to do is I want to say I also want to have the end condition In the case, right Uh negate dot read. What is negate dot read? ah Oh my god. Yeah, okay Right, so you want to take that Read and then read it as an as a not minus number a yeah a Anyway, so I think next time I'll do a readp instance where we just say Uh, we are never a bunch of extensions and we can define a read instance for a type synonym Which uses the type synonym instances extension and then I could have just a read Ah like a range pair uh read add range pair and then Huh, maybe, you know, we have some time. Let's just do it now. Okay, so how do I Do that Let's see uh import text.combinators Uh, what does it call? text.parse combinators.readp.rex.combinators. We have also read the Parsec uh parser combinator data. I just scrolled down in this I scrolled down in this list Combinators, I'm gonna have to press tab SRP Okay, so uh our type synonym instances. So let's say instance read Range where And I was going to play a type synonym Ah, okay. Let's see if this I think it's in ght 2021. So reads pracc Equals uh underscore. I don't care about the equals read p2 S a Of a R inst Where rinsed equals Defined Now it complies again and it says Uh, lots of overlapping instances Wow So just do new type. I I think I should people do this right language Types synonym instances What is it complaining about? Uh overlapping instances, okay. Yeah, okay. Let's just uh, let's just say this a new type Okay, what am I doing wrong here? So I used to be able to do this What is the problem now? Overlapping instances see So, yeah Instance heads may use types in names This is exactly what we're writing, right like this, no? I write it right after the instance, maybe Okay, this is like an overlapping instances extensions overlapping instances has go Uh Yeah, okay. So I usually maybe I enable this but yeah, let's let's let's leave it there Okay, so overlapping read range. So we're trying to uh write a parser combinator Using this a okay So there's actually a monad.  Okay.  And then we have to say Okay, so this is how we read a range and now type a elf pair equals type of range Okay, and we say instant in This is going to be overlapping rule overlapping score equals read p to s And Where e p in equals So this is gonna be a do uh So we get a string here and we're actually going to say a a e1 is a so we're gonna we're gonna take until We're gonna take until Parts is zero or more occurrences of P separated by sep sep by P sep parts is zero or more occurrences of P separated by sep Okay, so this is going to be e1 comma e2 Huh, okay genotem is informed About the current state of affairs. Huh, why didn't I have to do? Oh my god anyway sep by So we're gonna say here read e read s to p actually of e3 Yeah, so how do I use the? Read p instance a read s to p reads chart Okay, so this is going to be read s to p and we're just going to read it at zero and then chart No, yeah So this is what I think it should be, okay a This is read s to p and then we read sprack at the range zero We could have also just you know not hidden this and then this one becomes a pio health pair And this one becomes a read at health pair Ah, no bars Great, and let's try to see where it fails a print read at Okay, so it's the this one that fails. Ah At a comma here. Here we go. See And that's how easily you can write a parser in Haskell and this is well I'm not going to say this is production ready because you would probably use like parsec text Yeah, so I think parsec that's like an industrial That's actually an industrial well that's an industrial kind of parser combinator And it parses so fast, but you know, this is also like, you know, we could write a few lines and It would just work, right This time, you know, we wrote more lines now. We have a read instance Which is very nice, right because we can then just read anywhere, right? We don't have to do this wrangling all the time but Yeah, I don't know. Okay, but I like it better this way. You see, it's been more natural and I yeah, this overlapping thing is Yeah, because I used 8.10 for a while. Now I'm doing 9.4 So these small tiny changes that have been That have been going on. Um Yeah, I wish it was an easier way to use the read as instant instance Yeah, the best one would you be Not that I can do this maybe Push that president somewhere in there. Um, okay, so this is a way to do it with parsers, right? And I do remember Last year or the year before like when it got like the problem specification was you know an actual Data structure, right and it was not just a list of characters That would actually it would be a lot better to do So angular developer are you gonna host your solution online? Answer is yes, I am. Let me see its status I need to At least a I need to Uh, how do I do this in the GUI? Oh, yeah, I do like this. Yes, and then I I really wish there was a way to Get ignore executables The only thing I saw was like, oh, you can Take things that don't have an ending But that's not exactly right. No, is it? Okay, so this is all the stuff commit and push a Days A 2 2 4 And now this is also funny. I need to close this manually and then it pushes Huh, I need pushed now Can I do like this? I want to say open github Copy github handling. So I have this github extension Yeah It works Okay, so it's on a treat low slash aoc 22 And let me edit this twitch 1700 everything into christmas 1300 UTC weekend Okay, a yeah, so it's all here AOC treat low slash aoc 22 Uh, so if you want to check out the solutions yourselves You can go there, but you know so far they're like, they're not very long, right? So Yeah um All right I think that's it for today. We did it Well, we did it one way what we did the parsing twice And now we know to use the overlapping Pragma I think before I would just do overlapping instances and I wouldn't even do that like I would I would use the editor Right and we'd be like, oh you can't do this without overlapping instances and then you click the thing and it adds it Which is like, it's you know, it's the worst way to do it.  See you all a So five o'clock utc that's six o'clock A central european time. It's like noon in the u.s The east coast right And it's like middle of the night in the west coast probably not going to be watching there, but maybe but anyway, thanks for today and uh Yeah, so join us tomorrow right and like keep up the discussion keep up the You know, if you have any comments about haskell about Other languages like rock and elm Keep it coming. Right. This is a forum for Not just for item.co, but also just languages, you know Because I think what a key thing about haskell is that it's it's it's different, right? We're thinking about things in a different way And very often for me We're thinking about it in a way that's more natural but We I have seen item.co challenges that are like extremely a they're extremely Extremely imperative, right? They will be like having I mean you basically have to model it as an array And you have to make a bunch of updates to the array And I think that's why I originally got into advent of code. It was this idea that I want to see how do you write imperative code in haskell, right? How do you take an imperative problem like this array and you can actually do it in a really nice way? by using like arrays and vectors and And kind of the state monotrack anyway, uh Angular developers asking about the discord. We don't have a discord server Maybe I should yeah a lot of discord server people can talk about these things Uh I'll check it out. Let me set it up before Next time and then you can do the bank discord and Anyway, uh, that's it for today. See you tomorrow Okay, bye


Open your mouth, relax. Hi everyone, Dr. Sol here in Beverly Hills. We have our gorgeous patient here. We're gonna reveal her lips. She just had some lip injection that she hasn't seen it yet, but we're just gonna show it to her. They look so fun. I like it. That's why I know. So let's look at what we did for her. She had very thin lips to begin with, but what we did is open your mouth a little. So we created those two pillars. You could see the nice pillar on this side and the nice pillar here. We created the pillars up on top to match those. And she had a very small upper lip. So we concentrated on the upper lip and it looks nice and full right now. How was the pain? It was not painful at all. Surprised you? Yeah. Okay, I'm gonna do a little injection here. Sorry, poke. How was that? Just giving you a little bit more. I love that little cushion up there.  It looks like you're piercing your lips. It's open.  She's such a good patient. She's not even flinching, making my job a lot easier. So again, this way you could see how it forms that whistle thing. Look at that. A nice pillow, whole pillow. A nice pillow, whole pillow. It gives it what we call the whistle hole.


My last day of no carbs. It's so crazy to see how fast time is going because I'm like dang it's already nine days out and You know I woke up this morning. I was like man Well, I'm tired and I think that's what the biggest effect for me I noticed I'm just becoming a lot more like drowsy and tired by not having any like that much carbs So we'll see what happens at the end of the day, but I cannot wait This is the last day that I cannot have carbs So I'm about to dig in after my workout today. I dig in. I'm so pumped. All right guys. I'm doing quick posing update Rain finally came It's not too bad. It's not terrible. Just looks really gloomy but anyway, I got to figure out something to eat because I Really didn't have time to go get something yet. I have to be at work at seven It's not like 6 30 so I got to find a way to get just eggs But good eggs because you know not everywhere has good eggs sometimes they can be really like soggy and gross I'm just trying to find a way to get some good eggs. Maybe some like sausage or something Just something to get my stomach full because it's about to be a long event at least until three so Really hoping to find something. We'll see What is up guys a bit is finally over. Yes Over and pumped no more crazy nights I can actually get some video vlogs done pretty early by now. I'm going to check out an apartment I'm next year. I'm at three roommates. I have one roommate now I gotta get three next year to get a little bit more space and hopefully maybe a little bit cheaper cost So we'll see how it goes, but I am very pumped It's like lower lower east side. Maybe mid east midtown east But yeah, I gotta head there now Hopefully it's gonna be nice And I gotta think my future roommates live on the west side So gotta see how this commute is like for them, but it's a pretty nice area so far. Can't complain. What is up guys? I just got back From checking out the apartment and get kind of got settled on everything I wanted to show you guys this book called setting the table by Danny Meyer He was the main event speaker at the event I was working major speaker kind of gave me a whole different perspective about You know tipping waiters and waitresses and give you a really deep insight about kind of like how they get paid You know like when we tip waiters and waitresses, we don't actually like tip the cook We don't tip, you know the people who made the food. We're tipping that way. So it's just it's interesting process So read the book. I don't know if he goes over that but if you look up Danny Meyer and then look up no tip policy you'll be able to figure out, you know exactly what he's talking about So I am about to change to go work out and then got shoulders again today Might try something new All right guys, I am going to eat this protein bar real quick. What's called synthesis Syntha Syntha 6 Syntha 6. I'm gonna eat the Syntha 6 bar take my pre-workout. Go do shoulders come back Work on the daily vlog video and actually try to get something out. They're done I know you guys like dang this guy always worse on his vlog videos But I that's honestly like I said it's just hard work if you commit yourself to something you do it No matter what even if something else has to slack if you've made that commitment to I don't know Let's say like starting a business go do it if you made it the commitment to lose weight go to the gym It doesn't matter if you can't watch that show Record it watch it on Netflix stream it. I'm not condoning illegal stuff, but stream it stream is not illegal So do that I'm telling you just grind like stay consistent guys I think a lot of people have so many goals want to do so many things But they don't do it because they just don't stay consistent with it Just do it over and over and over again I told myself to do a 14-day vlog because if I do this 14 days in a row I could do anything like being able to film and edit over and over and over and over and over again It's tiring man. I got no you guys are all this You know it's interesting good work. No a hard work, but do it. It really is like no joke. It really is So anyway that I'm done raining.  All right guys All right guys, so I have to work on this for a sweat I was looking a little tight, but we want to see how it's like when I sweat Shoulders feeling burnt as I don't know what and the great news is coach said I can go back to cars So you know I'm going I'm gonna go to Panda Express I'm gonna enjoy myself some dang teriyaki chicken and noodles Let's go. I'm excited right now. You don't understand. I'm excited about to have this No, no, no, no, I'm not now.  No, we don't have to we don't do place. We don't do place. We don't do bowls. You have a fortune cookie. That's about Yeah Charmaine, please and then I'm gonna do double teriyaki. What's up, buddy? How you doing man good to go please Yes, please Nah, man, I do YouTube man Yeah Don't worry. I'm not putting in none of y'all faces in there. Y'all gotta be suspect y'all gonna be good Making pristine Me yeah Huh dang, I mean you put it in work though, right? Oh Wow, oh man, it's called that Yeah, I'm gonna get a coke, please I'm going now. I'm going all super unhealthy. My coach told me to go ahead and get coke. That's why I came here Yeah, I've been doing no carbs straight like clean protein. Are you in a competition or something? Yeah My last cheat meal, huh? He's less ice Yes, y'all caught me soda. Oh, they were so nice in there y'all saw that they were so nice That's the night. Hey, that's why I like Panda Express up here, man When I found out they had it I'm like boom and then I found out they had great service, too I was like boom if you guys are wondering where this is at. This is 46th and 9th you find a good Panda Express of 46th and 9th. Definitely go do it So to be honest I haven't had soda in probably like months and I just tasted it right now And I don't miss it. I really don't like I could easily just don't water He said I can have soda, so I was like why not? So I just do that without that next After this What's the best part about this whole Panda Express experience? How many y'all Read the fortune before you eat it. It'll never come true if you don't eat it. I mean if you don't read it All right Yes, do it with confidence. So yes, if you want to do something Yes, do it with confidence If you have an idea if you have a dream and you're questioning yourself. Yes, and then do it with confidence Preach Panda Express. So I'm gonna have to remind you Favorite part of the day guys this right here this bad boy right here But see these last ones man, they've been breaking It's okay. It's a skinny cat So I hope you guys are joined nine days out for the competition feeling good. I feel good because I just ate So anyway, I hope you guys enjoyed and I will see you tomorrow embrace the


Let's get started with today's lecture. So in the previous lecture after talking hypothesis testing, we discussed about how to construct confidence sets, how to get interval estimations and from that how to get confidence intervals and we also discussed about how hypothesis test can be used to get confidence test. So in this test, we are going to talk about, given a test to estimate some parameter, how good is it, like how confident we are in that about our null hypothesis, for that we are going to define study various test like p test, t test and f test and how to quantify them using something called significance of a test. Okay, so let's get started with p test or rather p value, maybe it should be more appropriate to call it a p value rather than p test. Okay, as a motivation, suppose let's say you have samples and let's assume that each of this xi is coming from Gaussian with parameter mu and sigma square. You have already seen that if I take their empirical mean, do this centralization and this normalization, assume that right now I don't know mu but I know sigma square. I know that this is going to be Gaussian distributed with mean 0, 1 and now I am interested in estimating mu hat. I know one estimate is 1 by n summation xi, I want to, now the question is now our claim is mu hat is the population mean, but now the question is why one should take it as a population value, what you are giving is simply an estimate, if somebody has to believe in whatever you are giving is going to be a good representation or in fact the true value of the population mean how one can believe it or what should be the criteria and that is where p values comes into picture. Now we are also denoting it as x bar but this is one possibility, we know that x bar minus mu divided by square root of sigma square n is a normally distributed with parameter mu and 1 and we know well about its distribution especially about its CDF and its tail behavior. We can use this property to see how good is my claim that mu hat is a good representation of the underlying population mean. So for that one possible way is let's say I am going to define z to be x bar mu and sigma square and now what I am interested in is what is the probability that my, what is the probability that my x bar is going to be close to the population mean. Now think about this, let's draw normal distribution and let the mean is here mu. Now for a given sample, so this is like a z, let's say for a given x, this is my realized sample I got my x bar and I get a particular realization of this which I am going to denoted as mu by sigma square by mu sorry n where n is the number of samples we have. Now if suppose I get for a given realization z here, maybe this is a good representation of my population mean but suppose this z happens to be here instead of here that means it is little far away from you if z happens to be here maybe this is actually not a good representation of my underlying population mean. Now depending on how far this z value the estimated value I got is going to be away from the true population mean maybe I can say something about this. Let's say if this is this quantity is very small maybe I have a good confidence that yes whatever the z value estimate I got it is going to be a good representative of my underlying population mean and if this is large maybe that's not the case. So to do that instead of directly looking into z what to be instead of directly looking into the x bar okay so maybe this should have been x bar here not z like so suppose let's say is x bar is here if they are close I have a maybe more confidence or I may be more happy that this is representation of my true population mean and if this happens to be little far away that's not the case. So naturally what we should be looking into is the difference like if the difference is small maybe it is good if the difference is large maybe that is not a true representation of my population mean and also in this case the variance plays the role like how this is the dispersion around your population mean. So because of that instead of just taking the difference x bar minus mu maybe I would also want to normalize based on the variance and that's what like we are defining z which is the difference divided by the variance okay now let's ask the question what fraction of the time the difference is going to be small if the fraction of the time this difference is going to be small then maybe it is good your test is good and if the fraction of the time if this difference is going to be large maybe you are not actually capturing the true population mean. So using this quantity what we are going to sorry using this quantity what we are now going to call it as a statistic in this case we can ask the question what is the probability that my z is going to be greater than or equals to z so notice that the z is what you have computed based on your sample. If this z happens to be large let's say let's say somewhere here let's say now I am going to look into a Gaussian distribution with the mean 0 and variance 1 and now this is mean 0 and if this happens to be small let's say I this z happens to be here that means that this probability is going to be probability z like I will be basically covering the probability of all this so if this z is small my probability is going to be higher on the other way if this z happens to be let's say here then this probability is going to be smaller. So based on that we can think that if this probability is large and I am going to call this value as my p value p is equals to probability sorry probability that p is equals to probability that z is going to z and if the probability of this happening is let's say large that means basically my z is small that means this is actually good so maybe I would like to accept maybe like if large I would like to accept the null hypothesis okay so null hypothesis I mean to say this so your test is what your test is basically now trying to check whether these samples are coming from a distribution like my null hypothesis here probability that my my let's say my theta is mu and my null hypothesis alternate hypothesis is that your theta is not equals to mu or maybe yeah so if this quantity is large it is likely that the samples you are observing and by the way this probability is under you were assuming that your samples are coming from your to distribute true parameter that you want to test against if this quantity is large then you want to accept the null hypothesis saying that yes indeed they are coming from mu and if small if not or small then maybe it's possible that your samples are not coming from this parameter mu that is because in this case the z is is large and that is why this probability is going to be small so if if not or small then you may want to consider the alternate hypothesis or it is equivalent to saying that you want to you you want to consider alternate hypothesis maybe like in this case possibly your null hypothesis is not true and this is kind of a providing a evidence that maybe you are claimed that it is to be null hypothesis is incorrect and if large maybe actually what we will do is okay let's let's put it slightly differently so in this setup what we are saying let's say you having sample and you have this hypothesis to check one is you are going to check whether these are coming from with the population mean mu and alternate hypothesis what we are going to call is something challenges somebody's your claim is that this is going to be a null hypothesis with parameter mu and somebody is going to challenge you saying no no this is not the case it is something else now in that case if this quantity happens to be small then it is kind of indication that you are null hypothesis may not be true and alternate hypothesis is true and on the other hand if this probability is large it is in favor of null hypothesis it is basically saying that it is saying that not basically you can say that let me see what's the correct word here you can say that here you can say that researcher failed to reject the null hypothesis so in this setup we are basically saying that whatever the test you have provided to verify your null hypothesis whether to accept or not and you have a challenger here somebody is challenging you and if you could show that this probability or this p value in this case is large then you can say that researcher failed to reject your null hypothesis ok and on the other hand this is small then you are basically validating that are basically the researchers validating that whatever your claim on the null hypothesis is incorrect ok so then the question arises here is what is this large and small how to quantify this is there a way and that is where we need to put some threshold here and significance level come to picture so you want to say that the p value you have let us say z is greater than or equals to z if this is less than or equals to c then you can say that let me see what is the exact term I can use then we can say that you are null hypothesis is false on the other hand if this p value you have is greater than alpha then null hypothesis is not rejected and then question comes what is the good value of this alpha usually alpha is taken to be 0.05 if your p happens to be smaller than 0.05 then you are claim that the null hypothesis is true is not accepted or it is your null hypothesis is false on the other hand if p happens to be larger than 0.05 then your opponent who was challenging you has is not providing sufficient evidence to say that your hypothesis is false or in other words the null hypothesis is not rejected you are still in the business ok. So, because of that if you are making a hypothesis and the p value for that hypothesis the p value computed under that null hypothesis happens to be larger than 0.05 then your hypothesis is not rejected and so you should always make sure that if you are making a claim on a null hypothesis the p value should be as large as possible or at least it should be more than 0.05 and this 0.05 is just like a kind of a thumb rule people take it is not necessary that one has to stick to 0.05 depending on your application if you feel that my application is such that I do not need to be too stringent or I need to be relaxed depending on that you can set your alpha to be maybe any value between maybe let us say 0 to half or whichever is more applicable ok. Now when you are doing this test there are two possible ways right like when you are making the hypothesis one is let us called single side and another is like a two side.  They are just saying that no like somebody is claiming that the true parameter is going to be mu and you are challenging by saying that no the true parameter is simply larger than mu this is like one sided. On the other hand the two sided say that ok you are going to say that ok the true null hypothesis is simply parameter mu but your challenger may say that no he simply say that no this is not mu it is something else it could be larger or smaller that is called two sided. But in both the cases like this is like standard normal so if it is like one sided you have said here you will look into this this is like a one sided case but if it is a two sided you need to consider this probability as well. So, both this together will give you the probability the p value for the two sided test and the good thing about this p values is you can readily compute them by looking into the tables for your standard normal distribution right like I mean if I give you z you know already given z we can readily get p value from Gaussian tables or maybe maybe just I can just say normal tables ok. Yeah one point to note here is this normal tables they usually are given for probability like z is equals to less than or equals to z that is basically cdf of your normal distribution. But notice that the p values are the complement of this. So, the p values we need to get the complement of this by simply taking the negation of that and by doing this you will end up finding this value which are to the right of your z value ok fine. So, notice that basically this all worked well when your samples are Gaussian distributed or this quantity x bar minus mu normalized by square root of sigma square by is normal distributed. And here another crucial thing we notice this this sigma square is known. Now the next question happens is how does this change when the sigma square is unknown and which could be off on the case ok. We will next study that by looking into our t test. So, we actually so far computed the p value yeah before I jump into the t test I want to just conclude what this t test is by looking into an example. Suppose let us say you have a you are in a case where a statistician wants to test the hypothesis that the true population mean is 120 and somebody is challenging him saying that ok the alternate hypothesis is the one sided value of mu being greater than 120. And the threshold the significance level is been said to 0.05 here and the number of samples we have is 40 the variance is taken to be 37.5. And from the samples it has been computed that the sample mean is 105.37. Now using the p value we want to conclude whether this x bar is statistically significant or not. So, now how to do this first we are going to compute the statistics for that I need the variance of my estimator. So, I have this x bar and I know that its variance is going to be sigma by square root n and sigma has been told to me as 37 32.17 n is 40. So, I got this value 5.0865. Now I will compute my I have been denoting this as z value. So, the z value here is simply x bar minus 120 and divided by. So, notice that here you actually know this 120 because that is the one Hull hypothesis against which you are testing. And here you will end up with the z value which is minus 2 8 minus 2 0.8762. Now for this using z score table you can calculate z being larger than minus 2 8762 in the following fashion. We know that from the Gaussian tables probability that t is less than or equals to this because of the symmetry this is also equals to t greater than 2.8762 is 0.003. And now probability that t being greater than minus 2872 is 0.997. So, the p value we have obtained it to be 0.997 which happens to be significantly larger than my significance level of 0.05. So, therefore, in this case the p test says that my the p test leads to the conclusion that we have failed to reject the null hypothesis. That means, null hypothesis claimed by the statistician is still valid and there is no evidence to provide that this is not true that is basically we have failed to reject the null hypothesis.


I am Peter Van Hirsten from the South African National Bioinformatics Institute and welcome to a short talk on short variant discovery in mycobacterium tuberculosis. So yeah, 2018 figures, about 10 million cases worldwide, 1.4 million deaths from tuberculosis. Before the coronavirus pandemic, this was the world's deadliest infectious disease. The reference strain, H37RV, is a laboratory strain which was isolated in the 1930s from a sample that was collected in the early part of the 20th century. About a quarter of the proteins annotated in the H37RV reference genome are listed as hypothetical. There is other annotation, but it's not incorporated into this reference for what the function of these genes is. It's a slow growing bacteria, it only doubles about once a day. And there's no horizontal gene transfer in tuberculosis. In fact, it seems to use the mechanism that otherwise would be used for horizontal gene transfer as part of its arsenal of weaponry against the human immune system. In the genus mycobacteria, in the group mycobacteria tuberculosis complex, we'll hear a little bit more about that now. The mycobacteria are a diverse genus of pathogenic and non-pathogenic bacteria. The nontubical mycobacteria are all of those except the ones that cause TB and leprosy. So leprosy is even slower growing bacteria, but reasonably close relative of mycobacterium tuberculosis. The nontubical mycobacteria found in soil and water, and they do occasionally cause human disease, but they don't tend to spread from one human to another. Mycobacterium tuberculosis itself is a complex of, well in this diagram it was seven lineages. There are now eight recognized and a ninth has been proposed. And this complex also includes some of the animal tuberculosis bacteria like mycobacterium bovis, mycobacterium penipedi, and so on and so forth. But the modern mycobacteria are these ones, lineages two, three, four, one, and seven. The differences here are largely due to so-called regions of deletion. The genome of mycobacterium tuberculosis is a single 4.4 megabase circular chromosome. In the reference genome in C290962.3 there are 4,018 coding sequences, 56 insertion sequence sites, that will be important in a while, and there's a so-called direct repeat region of 36 base pair repeats with some spaces that are not repetitive between them. And it contains the PE, PPE, PTRS family of repetitive proteins. So here is the mycobacterium tuberculosis genome. Here we can see some of the insertion sequence sites are marked all around the genome, and here is the direct repeat region, and the PPE, PTRS gene to also note it in this diagram. So how can we genotype mycobacterium tuberculosis? The one way to do it is to use one of the insertion sequences that is characteristic of mycobacterium tuberculosis, the IS6110, and use a technique called restriction fragment length polymorphism to essentially count how many of these insertion sequences you're seeing in a sample. Then there is a variable number of tandem repeats method called MIRU, and often these two methods are used in tandem to try and genotype a sample, and then there is something called spoligotyping or spacer oligotyping. Remember I said that there's this direct repeat region. Now those have spaces between the direct repeats that have a characteristic genomic pattern and spoligotyping tries to identify a sample of mycobacterium tuberculosis using those spaces. There's a nice review article that I linked to there. Now strains decades or even hundreds of years apart in transmission can actually share a genotype. So this genotyping is not terribly high resolution. So that brings us to whole genome sequencing. The advantages of whole genome sequencing is if we infer transmission and to some degree genome allele flow, there's no clear snippet threshold to say whether two sequences that are a certain number of snips apart are one transmission event. There's a lot of debate within the literature as to the relationship between snip distance and transmission. But we can generally rule out whether two sequences are from the same cluster much more easily than we can rule in sequences. Also obviously with whole genome sequencing that's necessary if we want to use GWAS to explore genotype phenotype lengths. And very important is that we can use whole genome sequencing to perform in-silico drug resistance testing in a way that sometimes is actually more accurate and sometimes less accurate than phenotypic drug resistance testing or drug susceptibility testing DST as it's sometimes known. Why is mycombatom tuberculosis somewhat easier to analyze than some other bacteria? As I mentioned previously, there is no horizontal gene transfer and recombination, which is common in many other pathogen bacteria. So that would complicate bacterial phylogenies. And you have to identify and mask recombination hotspots when you are computing phylogenies of bacteria that do have these features. And when you have bacteria which are swapping around genes and plasmids and things like that, then you really have to analyze not just the phylogeny but also the flow of genes in horizontal transfer. Something like Klebsiella pneumonia is very susceptible to swapping antibiotic-resistant plasmids this way. And because of the diversity in many bacterial species, for instance, it's difficult to use a single reference sequence for all the species because you can't map all the reads to a single reference when the different parts of the species are so different from each other. And antimicrobial resistance in some other pathogenic bacteria is typically on the level of genes, not point mutations like we see in mycombacterium tuberculosis. So there are some challenges in variant discovery on mycombacterium tuberculosis. The first one is your typical Illumina read is less than 250 base pairs, which limits your ability to discover insertions and deletions, especially if they start getting bigger. And definitely structural rearrangements are more difficult to find because the reads are quite short. Also, the reads are shorter than the length of the repetitive structures. For instance, insertion sequences or the PPE, PGRS genes. So that means that those repetitive regions are more difficult to characterize with short-read sequencing. And the HC-37RV genome is not a neutral target. It's a lineage 4 genome. The lab isolate was separated out in the 1930s. The original patient was in 1905. And there are some significant differences in the EZ6 system. In HC-37RV is different to many clinical strains. And it also has a RVD5 deletion relative to many other clinical strains. So what we might actually be seeing in patients is not in some ways HC-37RV. It's quite different. And as I mentioned to lineage 4, which means it's not neutral when it comes to its position within the diversity of mycombacterium tuberculosis. So this diagram from in mycombacterium tuberculosis lab is quite useful for one of the preprints. So if you align different lineages to HC-37RV, then the number of SNPs that you get is lineage dependent. So you'll see a certain number of SNPs from lineage 4, specifically 4.10, which is where HC-37RV fits. There will be fewer SNPs. But if you're taking something like lineage 1, it's further away in the phylogenetic tree from HC-37RV. However, in mycombus and co-authors developed a inferred ancestral genome, which is neutral with regards to the different lineages largely. It's the same length as HC-37RV, but it just has single nucleotide polymorphosomes inserted to try and approximate what we think the common ancestor of these lineages looked like. So that it is available on Zenodo at the moment. Yeah, getting into further challenges. So contamination of MTB samples is common, especially in direct from sputum sampling. Taxonomic fortune is recommended prior to variant analysis. So that means trying to actually see if the reads that you're looking at are actually like a bacterium tuberculosis reads. However, the commonly used tools for this Kraken and Kraken 2 are very memory intensive. Centrifuge is another similar tool that is less memory intensive. But the question of whether sensitive enough is still being investigated. Of course, most variant cooling software and a lot of bioinformatics is tuned for human data. Its accuracy might not be as good as it could be if more effort was put into bacterial variant cooling. And different groups differ as to which regions they think should be masked out in terms of where the repetitive regions are. It's the open question of the correct mask for the micro bacterium tuberculosis genome. It's a nice overview in the link that I provided over there. Just to illustrate what's difficult about the PEPPE PTRS genes. This is a graph where each edge shows that there's greater than 70% identity and this is using alignment with blast. So you see that there's this cluster of very, very similar genes. So that means that a read from one of these genomic regions might map to any of the other genomic regions from one of the genes that will just throw your mapping off quite substantially. And also around insertion sequences. This is around the IS 6110 insertion sequence. I took reads from exactly the same genome and, in other words, the X3D7 RB reference and mapped them back the genome and this colorful display here shows how the positional mapping goes wrong around this IS 6110 region. So yeah, so repetitive DNA is a problem. And we're hoping that long read sequencing will solve that with technologies from Pacific Biosciences and Oxford Nanopore. But these reads are still quite noisy. The error rate for long reads is high, but much less with some of the newer packed bio sequences. And with Nanopore, the error rate has dropped from about 20% to under 5% in five years. So we're hoping in a few years time we'll be able to use long reads. Unfortunately, there's one characteristic error that we find, especially with Nanopore, which is that the polymer polymer errors that is, for instance, changing from GG to GGG. They are still copying up, even in the newer Nanopore technology that I've seen. And the methods of DNA extraction are well studied when it comes to short read sequencing, but are still more challenging when it comes to long read sequencing, especially with Nanopore. You really want long stretches of DNA, but might go back to M-tropicalosis. The cell wall is quite tough, and it's quite tough to break that cell apart and get good, long DNA out of it. If you have both long and short read technologies, they allow for rapid de novo genome assembly and thereby investigating clusters with very high resolution because you can actually build an outbreak cluster. Some bioinformatics tools which are described in, also in the tutorial we have for Galaxy, TB variant filter allows you to apply common filtering operations to predicted variants. So once you've predicted some variants, then you don't need to go look up where are the PEPPE regions. TB variant filter will apply those filters for you. Then from Sandb, we've created a tool called TBVCF report, which annotates each variant with links back into the combat TB in the ODB database so that you can learn more about the genes that have been annotated in the variants that you've identified. And finally, Galaxy also has a wrapper for TB Profiler, which is a drug resistance and lineage prediction tool from Jody Fielin at the London School for Hygiene and Tropical Medicine. There are the tools for drug resistance prediction, but this is one that's easy to use and is available on Galaxy servers such as usegalaxy.eu. I have to acknowledge some people who gave me amazing insights for writing these slides in like e-commerce, I mentioned previously, worked on the ancestral inferred ancestral reference genome and his group has worked on contamination in samples. Conor Meehan, who's an all-round expert on micro-bacterial tuberculosis bioinformatics and is an amazing tweeter, just really helpful. Caroline Collines worked on transmission modeling in micro-bacterium tuberculosis and TB, Jody Fielin for TB Profiler and then the combat TB group at Sandb, that is Tobol Lose and Zipo Zake Mushelogo. And Torsten Simon, who is a powerhouse of micro-bacterial bioinformatics and helped comment on these slides and write snippy and shovel and so many other tools. And the South African National Research Foundation and the Medical Research Council that fund our work at Sandb, and I'm sure I've missed off some people. Thank you very much.


Inorganic membranes have become increasingly popular in the water treatment and desalination industries due to their unique properties such as high chemical stability, long lifetime, and autoclaveability. These membranes can also withstand harsh conditions such as high temperatures and chemicals, making them ideal for use in industrial settings. Synthesis methods for inorganic membranes include liquid membranes, dynamic membranes, ceramics, carbon-based membranes, silica membranes, and zeolites. Each method has its own advantages and disadvantages, but all have shown promise in terms of performance and efficiency. Inorganic membranes have been successfully applied in a variety of water treatment processes including reverse osmosis, nanofiltration, ultrafiltration, and microfiltration. This article was authored by Ahmad Kivani Fard, Gordon McKay, Anita Beaconhout, and others.


Hi, my name is Debbie Rangus and I am the global lead for IBM Garrett for IBM Services and I am most inspired by change about when it becomes real for our clients and making that change real and seeing it come real has been one of the biggest challenges for me with this pandemic is not being able to be there on client sides with my teams but one of the things I'm most excited to share about with you through sync is some of the incredible stories despite COVID and IBM Garrett has risen up to be the ultimate transformation accelerator bringing innovation and transformation together to deliver your outcomes at scale and I look forward to seeing you there.