What's up everybody? Today I'm going to show you how to get started with Boostrap V5 Alpha in less than 20 minutes. As you might know, Boostrap is one of the popular open source CSS frameworks out there that allows us to build fast responsive sites. Although today's tutorial is just an introduction to get you started, I will be looking to develop a follow-on website using Boostrap. So if you are interested, please consider subscribing to my channel, smash the like on this video, comment below if you have any questions and now let's not waste any more time. Let's jump into the computer and get started. Welcome everybody, let's get started by looking at what Boostrap is. Boostrap is basically a free open source CSS framework that allows us to build fast responsive sites. It contains CSS and optionally JavaScript-based design templates, photography, buttons, forms, navigation and other interface components. One of the big changes in the latest version of Boostrap V5, which is still in alpha by the way, is that it no longer depends on jQuery. To get started with the latest version of Boostrap, go to v5.getboostrap.com and click get started. Now the two ways of getting started. The quick way is using the Boostrap CDN, which we can include the CSS and the JS files into a project. And the other way is by downloading the source files of Boostrap and then including them into your project. Today I'm going to show you how to use the Boostrap CDN. So let's scroll down to CSS and JavaScript. I'm going to copy the style sheet here and I've already created an HTML file which I've called index.html. And to make the style sheet work, we need to paste it here under the title, just like this. Let's go back. Now let's copy the JavaScript files, which will allow all components to function. Go back and the JavaScript files need to be pasted here at the bottom just on top of the body, just like this. Let's align them better and save. Now before we get started with Boostrap, we need to have a look at containers. Containers are the most basic layout element in Boostrap and they are required when using the default grid system. So to get started, we can create a div with the class name of container, just like this.  Save this. Let's go back to the page. And as you can see, our text has moved to the right side here. And this is because the container, if we inspect all elements, you will see that the container as default has a max width of 1320 pixels. And if I hover over it, you will see that the container is actually aligned in the middle of our page. Now you might be wondering, well, what if I want my layout to be full screen? What you can do is go back and inside here, we can just do dash fluid. Save this, go back to the page. And as you can see now, container is full width. And as a default, we do have some padding to the left and the right, which can be reset. So let me remove the fluid bit. Okay, let's now explore how we can use the Boostrap grid, which is based on Flexbox.  And inside this row, we can create two or more columns if you wish. So let's start with two. And let's call this one call one. Let's duplicate this one more time and call this one call two. Save this, go back to the browser. And as you can see, call one is taking 50% of the available space of our wrapper. And call two is taking the other 50% of the available space on our wrapper. The grid is actually based on 12 columns and we can target individual breakpoints by doing the following shortcuts. So for example, if you wanted to start with small, let's say call small and everything above this. Let's set the first one to be to take four columns of the available 12. And on the second one, let's do small again. And let's say I want the second one to take eight columns of the available 12. So eight plus four, 12. Let's take this and let's have a look at what happens. As you can see, this is now if we inspect this and let's trigger the flex guidelines just like this. You can trigger in Firefox. And as you can see, call one is now taking four spaces and call two and call two is taking eight. If I toggle the responsive design mode and shrink this down on everything above small screens is stay the same. But if I was to go under 576 pixels, which is below small, you will see that they're stacking under each other just like rosewood. So for example, if you wanted the first column to take 12 on small screens and the second one to take small screens, we can simply change the number to 12 here and 12. And everything above small will now take 12 columns, which will make them into rows. But let's say you want to target bigger screens like medium screens and above. We can simply go back and inside here we can call dash medium screens and then dash maybe let's equally space them. So this one will take six columns and let's do the same for this one. Call dash middle and everything above six is one save this. And as you can see now, the middle screens and above maybe for like tablets and laptops, they're now taking six columns. And if you go up, they're taking six columns.  Okay, let's now add another breakpoint and let's make this one slightly smaller and this one slightly bigger. To do this, we can simply do call dash large and then let's say we want to set this to two columns. And let's do call dash large and let's set this one to eight, which both of them equal 10. And this also means that they're not equals 12. Well, you can do that is they don't have to add up to 12. It's not a problem at all. So let's save this, go back and see what happens. So first of all, this one is taken now two on large screens and this is taking eight on large screens as well. And the available space is marked in here and it's just empty. Let's now have a look at how we can change the order of those two elements. So let's copy this quickly, paste in here and let's maybe do six and six on small and everything above. And let's get rid of the rest just like this. Save this. And as a default, as you can see, we have call one and call two both taking the same amount of space. And let me just trigger the flex on the bottom element so we can see what if we wanted to swap the column one and column two, for example, on medium screens. Well, we can do this very easily with the order CSS property. So we can do order and then we can target the individual screen. So in this case, let's target medium screens. And let's say I want the order of the first column to be second. And I want order of the second column here to be first. Let's say this and see what happens. So at the moment, we are on small screens. But if we trigger medium screens just by going up slightly, you will see that column two is now taking first place and column one is now taking the second place. And this is how we can target individual breakpoints. Maybe we want to swap the order on all screens. We could simply just do order two and order one just like this. Save it. And as you can see column is now always going to be in the first position. Even if you go on very small screens, we have two and one. And if you go up, it would stay the same. But let's say if you wanted to target small screens, we can then do simply small, small and everything above small will be now. The same column two will be the first position and column one will be the second position. But if you go below small, you will see that column one is in its original position. And column two is taking the position of two. Let's now go up and let's have a look at some offsetting. So let's quickly copy this row in here. Let's remove the order for now so it doesn't get confusing. And let's say we wanted both columns to be equals four just like this. Let me toggle the flex on the last div here so we can see just like this. And as you can see, there is some available space now. But what if we wanted to offset the first column, maybe with two spaces? We can do simply offset dash two. And this should simply offset this div with two spaces on the left, as you can see, like so. And we can do the same for this one. We can maybe offset this by one. And this should push the second column with a little bit of space in the middle. Offsetting can be very useful to align items from time to time. But I want to spend more time on the alignment of the elements. And let's have a look at how we can do that. So if you're familiar with Flexbox, this should be very easy for you to understand. And let's copy another row. And by the way, you don't have to always have two columns. You can obviously have more columns than this. So let's remove this and this one as well. Let's remove the order. And to make this look better visually, we can actually create a div inside here. So div with the class name and let's add some utilities. For example, if you wanted to add padding, you would do something like this. Padding dash, let's say three. Three is the number of the padding that we want. But obviously this is based on rems. So it's not going to be three pixels. And then let's add some border. And maybe let's add a background color of light. And inside this div, we can add all text just like this. Let's copy this at the bottom just like this and save. Let's have a look at what we get now. And let me close the flex. And as you can see, we have column one and column two with a nice background color and a little bit of border. And this will help us to see how the alignment of those elements will work. Now, first of all, I want to add a little bit of height so we can start positioning those elements the way we want. Let's add a custom class name to this row. And maybe we can call this one my dash custom row. And let's add some custom styles inside here just like this. And let's do my custom row. And for my custom row, let's add a background color so we can see a little bit better. And I will add this color. I hope it will be easy to see. And then let's add some height. So I want to add around 400 pixels. Now, if you're familiar with Flexbox, the alignment is actually very easy to do. Let's say we wanted to align those two columns in the middle of our page. And to do this, it's actually fairly simple. What we can do is justify dash content, dash center, save this, go back. And as you can see, all two columns are now in the middle of the screen. Let's say we wanted those two columns to be actually aligned in the middle of this box. We can simply do align items, center, save this. And as you can see, we now have both of the columns aligned in the middle. And we can do similar things with this. So for example, we can do start, which is the default, which will be here on the left side. Then we can do end, which you'll probably guess this will be at the end here. And we can do exactly the same thing with the alignment of the items. We can do start, which is usually by default at the top. And then we can do end, which is going to be at the bottom here. We can also do the same thing for the actual elements by doing align self. And then the alignment, for example, start, center, or end. One thing that I almost forgot to cover is the justify content around justify content between and justify content evenly. So at the moment, we have justify content center and align item center, which has the boxes right in the middle of this div. So let me show you how the other ones work. So in here, justify content center, let's do justify content around instead. Save this. They should now distribute the items evenly with equal space around them. And if we try content between, save this. What we do is space between the items are evenly distributed in line. First item is always at the start of the line. And the last item is always at the end of the line. Let's now have a look at the evenly. And as you might have guessed, this should space the items. Let's now go back to justify center. Another thing that I wanted to show you is how we can add gutters. Let's center align them again so they look better. Just like this. And if you wanted to, gutters are basically the gaps between the column content created by horizontal padding. So let me show you how you can do this. Simply on the row, we can put gx, which is the class that can be used for horizontal gutters. And we can simply put a number. So if we save this, you should be able to see that there is a lot more space than used to be. So remove the gutter from here. You will see that they will hopefully go down. As you saw, the gutter went down. And if I refresh, the gutter goes up. So this is how you can change the gutters. Now that you know the basics, let's have a look at some components quickly.  And let's have a look at a simple one, maybe the buttons. So this is how you normally add the buttons. You do button type button, and then you add a class of button. And then to change the color, you usually do button and then dash the color name, which is usually written primary, secondary, success, danger, warning, info, light, dark, and so on. So let's copy maybe the primary one and have a look at how it works. And for this, I'm going to create another one. Maybe let's create three calls this time, call. And I will paste the button in the first one. And then let's copy this three times. And then we can maybe do secondary here, secondary. And then maybe we can do danger. Let's save this. Go back. And as you can see, this is how easy it is to add some of the components. And there is a lot more that you can use such as card, courcelles, drop downs, list groups, motors, popovers, and so on. Let's say we wanted to add a component that requires JavaScript. So for example, one will be modal. So if you scroll down, they give you a lot of examples that you can use. And I'm going to use this one here. So let's copy the button that will trigger the model just like this. And I'm going to replace this primary button that we added earlier, just like this. Let's add it here in the middle. Save this. And let's go back and copy the rest of the modal. This will be the actual pop-up. So let's copy this. And I'm going to copy and paste this outside or container here, just like this. Save this and go back to a page. So if we click on this launch demo model, this will show the pop-up for us. And if I click anywhere outside it, this usually closes it, which is nice. If I click back on it again, we can either press this button to close it or we can press the X to close it. And obviously if we press save changes, nothing is happening now. And obviously we need to add some more logic to make this work. Another thing that you might want to have a look at is the utilities. For example, borders is pretty cool. You can add borders by doing border, top, border, right, bottom, bottom, and so on. You can have a look at some of the colors here and so on. So that's everything from this quick introduction of Bootstrap. Please consider subscribing to my channel for more videos just like this. As always, my name is Raddy and you are watching my channel, Raddy the Brand. And I will see you in the next video.


Everybody forced here ripping three boxes for Kyle P. Kyle has a 2022 legacy football hobby and two boxes of 2022 tops chrome baseball hobby. Let's start with the legacy Let's start with legacy and Kyle's order notes. He says if we pull a dare to tear I can tear it so Come on dare to tear You guys are like the mob. Tell me to tear the dare to tear. It's funny Jameson Williams Metschi and sauce gardener Let's also see a nice RPA in here Let's see a picket or a Willis Jaylin Tolbert, Travon Walker a McAfrey number 299 of 299 the bookends Nice, you know, that's awesome Yeah, I might go buy some Halloween stuff at spirit in the next couple days the best time to go Isaiah Spillard Jordan Davis under the lights Matt Stafford Kyler Gordon. There's an Evan Neil Might have an RPA coming up. Come on. Come on There's a Malik Willis. It is a Derek Stingley. All right 63 of 100 on the rookie dual jersey auto Derek Stingley, Jr. Number three overall God diva dough Got to 199 at single Terry Berks Brian silver rookie Isaiah likely their auto coming up. I believe here Kyren Williams It is a silver rookie base or not base, but silver rookie out of Tyler Beatty. Come on dare to tear Come on. Many coming up here is Jordan Davis silver rookie mini James Cook. He looked pretty good last night, man. I think he might end up becoming a lead back there at some point Matt Corral to 100 The Panthers there. I think James Cook is the most talented running back in Buffalo definitely better than single Terry and The other guy sauce gardener rookie Chrome single Terry and and Moss all Danny Gray The rookie should all be in college Unis because this is a preseason. This is a very this is like a summertime product Hutchinson, O'Jabbo mini You've got a Dak Prescott It's actually great yesterday, man nine out of 125 You guys shocked that Dak Prescott is better than Cooper Rush Lave we've got a Tony Romo to 12 out of 299 So shocked no dare to tear dang it man Ritter and Avila Jones How about that? The what am I trying to say here the Roku on Smith trade you guys think There's got a good return that I mean How many draft picks they got like the first few rounds next year. It's a ton Yeah, they got a lot of drafts. They got a lot of cab space too. They can make some moves All right. Here we go. Topstrome hobby boxes two of them base auto Mike Zanino first pack Part of the city Freeman Nolan Aronato Yeah, legacy is one of the first few releases every single year Jake Kronoworth 89 of 399 magenta Marta refractor base Katerus Yep, Topstrome on card green wave Buster Posey Buster 10 out of 99 they have to build the team.  That's an overpay new classics. Bechette refractor Katel Marte Well, the difference is if you get rope one Smith of the draft pick you have him under his rookie contract still But they drafted brisker and brisker looks pretty darn good Little different player than rope one prison Ricky Riley Adams one. Yep has Ricky base auto nice hit there Yeah, Claypool's in his rookie contract, but he was what a second-rounder Joe Waddell Nose itches. I don't want to scratch Brandon Marsh 87 Fractor Trevor Rogers pinch-striped Jose Ramirez Prism Logan Gilbert refractor Walker Bueller Ernie Clements jaren Duran So Dan happy Halloween, man Flotting jr. Anthony Rendon refractor Prism Ricky Zach short refractor Tyler Stevenson Let's do let's do one more here and then we'll do the Both summer packs at once still for to go in the World Series makes her guys coming up in a Couple hours or so rookie base auto Zach short Fields has looked fairly good the past few games like Pretty darn good for having absolutely nothing and running for his life half the time and just like it's really impressive honestly at how They have been a capable offense recently and It's mostly because of him refractors that Kirill off. He's really like I Don't know. He's super poised. I think the Bears got their guy. They just They got to figure the rest out now pinch-striped Aaron judge Big color here. Come on prism Josh Hater hard of the city months. He record factor Riley Adams Wednesday is gonna be a lot of fun, too.  It's been getting a lot of popularity in the past, you know years So rookie prism Kyle Muller Come on big collar. Come on.  Let's see it rookie refractor Joe Ryan crannick nice There's a good one Extended base short print Bobby wit jr There you go Kyle last pack magic right there for you, bud Good-looking Bobby. There he is man, and Rosie Contreras or your factor good good silver packs Absolutely. Thank you again Kyle Took us to the last pack Thanks again, man


Good afternoon, everyone, and welcome. This is Melissa Arma with the Stock Plush, and I'm here today to review Google. I haven't done a video on this in a while, and I've been watching it. Watching it today was actually the highest the option chain ran up today of the profit that I had. It was almost seven grand. I was up in this morning at one point, and I was wondering if I should get out of half and protect myself from the risk. I decided not to do it. I decided to hold the whole division, which I am going to do, at least through today of the minute, through two o'clock and through tomorrow to get the volatility and going up tomorrow into the earnings. So the earnings are tomorrow night on the stock, and I took the trade long into stock in calls. It's a very expensive stock, and I have a good position in this, a good cost position. And even with the days that we've had read back in here, it's been a positive trade for me. It was actually just, it was positive. I think it was positive. No, it was the day I took it, the day I took it was positive. The next day it went, it pulled back a little bit. I took some more. It was a little bit negative, and ever since then it took off. So I literally had to suffer through one day of a small, tiny, weeny, little negative of like 10, 15 cents. And I added to it that day, and then it took off. So it's been a nice trade. It's held above one for the purchase price of what the option is worth, and that's what I wanted to see. The stock is moving higher. So I'm in it in the right direction. It expires Friday, but I'm gonna be out, like I said, today, tomorrow. I said it's not none of it today. But I wanted to see more of this. And now it's pulled in a lot here today, but I'm still up more today than I was yesterday. And I just shut it down. I gotta get worked on, I wanna focus. I'm just gonna get worked on.  And I've done from the past, earlier in the year when I first started doing these, like the end of the year, I used to sit all day and stare at the option chain. I'd never get anything done, and I just can't do that anymore. And it doesn't serve any purpose. You take the trade, you make the decision, you know where you're getting out, you have in your mind where you wanted to go, and the period of time you're getting out.  And you could let the rest ride into earnings if you want. But anyways, the chart looks great here. It looked better earlier. So when the bar was all the way up here, a solid back three, but the market's coming in, red and apples pulling it down, and there's, we don't know what's gonna happen until two o'clock. The bottom line is, this does not look as good this second as it did earlier today, but the overall chart still looks great. When this happens, I don't remember if I did a video or not, this bar was as sturdy as a brick. This is like some of the skyscrapers in New York, the beams, the steel beams, that the steel concrete walls that are in the, like the building on heaven right now is concrete. I had a guy I hired him to hang up a lamp. He had to actually drill into the concrete. So this was like a concrete wall. It's not going anywhere. This is actually a gap up, huge nice bar, nice rally on support.  And the Empire State Building. And so this is the baby support for now, but I think it's gonna be the new support that's the stronger support. Which we have to see how we act here today and then tomorrow into itself. So this looks really good. This looks really good. I mean, this looks great. This looks amazing. This chart is higher. This chart is higher and my prediction is that it makes a brand new all-time high in the earnings 39, up way over 800. So previous high here were 79, 86. I can't go back in today. This is back in February. I had done the option then and I made money in it. I made money and if this day got out and I made money in this day, but I will tell you though that this is gonna go back and do it again and do it better this time. Because on this day, it fell. It actually was at 822. It was actually at 822 at one point in the post market. I saw it spiked up and hit it. I can't go back to show you, but I remember. In fact, if anybody can go back that far on a post market chart and a pre-market chart of Google, on February 2nd, email it to me. I can't and I should have snagged it, but it hit 822. We either ate 20 or ate 22. I think it ate 822. I think it actually hit 822. Anyways, I really thought it was gonna open over 800 then on that day it didn't. But here's a different story. It's a way different story here. So we're not done. We have today and we have tomorrow and what I would like to see the realistic target for tomorrow is right around here, 750-ish, 755, 760. If this has a big day tomorrow, I could get all the way up to 770, which it certainly could do. What was the biggest day? And this chart hasn't had a big green day in a long time. I'm just seeing that now. 20, no, it's 14 bucks. It's with 15 bucks. 15 us is now, this is $24. This chart has not had a nice, huge, massive, beautiful, fabulous bar of buying for a long time, despite the fact it's a bullish chart. That's very interesting. I never noticed that until now. I just don't, I mean, looking and studying this. The price action's bullish all over the place in this chart. Even the failure on the earnings the last report back in here in April, drop, broke, held, fixed itself, came back up. This was Brexit or probably when it done that at all. This never went anywhere down. Can't never went anywhere down at all. And I'm just noticing it does not have any big fat. So boy, that'll be great if that happened tomorrow. That'll be so great if that happened tomorrow. I will just have to wait and see. This is a big day. The one day I was talking to you about that the steel beam, but this is not even a monster day for the stock. And I can't even see any in here. I mean, we're talking way, way back, way, way back. This is, you know, a $30 move. Those are the monster days I'm talking about, which the stock absolutely can do. And it almost looks like it's waiting to do it, doesn't it? It looks like it's getting ready to do it. It looks like it wants to do it so badly. And the only thing that's holding it back is the market. Here, let's just look at the market the room post here is truly quickly. And the sister, G-O-L-G-L looks even better. So this looks even better than G-O-O-G, as you see here. I mean, this looks amazing too. So wish me luck on the Google. We'll see what happens. We'll watch it today and watch it tomorrow. Watch it tonight. See how it closes. See where it gaps tomorrow morning and watch the market as well. Again, I'm in calm. Next Friday, I'll be out way before then. Have a great night everyone. And if you'd like to learn more information on my method which you can use to do options trades for day trade options or swing trade options or do them overnight for days or weeks or months, you can do them. You can do them and I also have an options letter which you'll learn everything in the class with a point to know how to even read this right to take the trade. Email me at melissa at thestockpush.com if you would like more information. The golden gap class is this weekend July 30th and 31st. Thanks and have a good night.


This is the second part of the dissection of the dermatothoracic diaphragm. We have some important clinical correlation pertaining to the esophageal hiatus. We can have what is known as the hiatus hernia where a portion of the stomach which has been removed here can push into the thorax through the esophageal hiatus and that is known as hiatus hernia. We can have two types of hiatus hernia. One is the sliding hiatus hernia when the esophageal gastric junction itself gets pushed up and there is loss of sphincter mechanism which results in reflux esophageitis and there is another type of hiatus hernia which is known as parisophageal hiatus hernia where a portion of the fundus of the stomach gets pushed in and that does not produce so much of reflux esophageitis and of course we can have mixed hiatus hernia. That is one thing we can get in the esophageal hiatus. Now let's take a look at some other minor openings in the diaphragm. Let's start off from the anterior aspect. This is the sternum and attached to the sternum are a few slips of muscle fibres in the midline which are the sternal fibres of the diaphragm and thereafter the rest of the muscle fibres as I mentioned earlier these are all the costal muscles, the costal. So therefore there is a small opening between the sternal fibres and the costal fibres and that gap is referred to as the antrilateral gap or the sternocastal gap of lary and passing through the sternocostal gap of lary are these vascular structures which I have lifted up on the left side. This is the superior epigastric artery and vein and we can see they are coming from here and they are running on the posterior aspect of the rectus abdominis muscle on the left side. Coming to the right side this is the rectus abdominis muscle on the right side and here also we can see these are the superior vessels the artery and the vein which are coming onto the posterior aspect of the right rectus. This superior epigastric artery is one of the terminal branches of the internal thoracic artery at the level of the seventh rib it divides into a superior epigastric and musculophrenic. The musculophrenic runs on the laterally and it supplies the diaphragm. The superior epigastric runs on the posterior aspect of the rectus abdominis muscle on both the sides. So the superior epigastric artery on both the sides we can see clearly are emerging through the sternocostal gap or the sternocostal triangle or the antrilateral gap of lary. We can see it on the right side here and we can see it on the left side here. Rarely this can be a site of hernia and that is known as the hiatus of the hernia of Morgagni. It is not very common but it can occur through the antrilateral or the sternocostal gap of lary. Now let's take a look at another important area of the diaphragm. For that we will have to look on the posterior aspect. I am looking on the left side. If you look very carefully you will see that these are the muscle fibres coming from the lumbar vertebrae and the fibres are going up like this and getting inserted into the central tendon. And if you look further laterally you will find these are the costal muscles which are coming from the ribs and they are getting inserted into the central tendon. In between the lumbar portion and the costal portion we can see a triangular area here and if I stretch it like this we can see it much more clearly. This is referred to as the lumbo-costal trigone or the lumbo-costal triangle. This portion is unique and you can see it clearly here in so far that this does not have any muscle fibres. Here only the endothoracic fascia on the abdominal side and the endothoracic fascia on the thoracic side they are fused together without any intervening muscle and this is a potential area of weakness. When there is a blunt injury to the abdomen this portion can rupture on the left side and it can produce what is known as a traumatic diaphragmatic hernia. In newborns this can be a site of herniation which is referred to as the congenital diaphragmatic hernia which is most often on the left side and that is also referred to as hernia of boctalic and this is known as the hiatus of boctalic. In newborns this results from failure of closure of the pleuroperitoneal membrane to close the pericardioperitoneal canals on the left side. Hiatus of boctalic producing a hernia of boctalic on the left side is much more common than on the right side. It is the ratio is approximately 95% on the left side to 5% on the right side. Let's take a look at the same triangle on the left side. Again if you look very closely you find that these are the costal fibres muscles and these are the lumbar muscles between there is a small triangular area which is bereft of muscle fibres. So this is the potential site of weakness but herniation on the right side either congenital or traumatic is as I said very uncommon because the liver is located here but we can see the lumbocoster triangle on the right side also. So that is about the lumbocoster triangle or the lumbocoster triangle. This is an x-ray of a newborn who was still born with congenital diaphragmatic hernia of boctalic on the left side. I have only mentioned about the maternal supply of the diaphragm and that is the phrenic nerve C345. The phrenic nerve is also sensory to the central portion of the diaphragm and that is the reason why if there is a diaphragmatic irritation in the dome of the diaphragm then it can produce referred pain to the respective shoulders. The referred pain being because the root value of phrenic nerve is C345 and the referred pain to the shoulder is via the supraclavicular nerves whose root value is also C34. So if there is irritation for example collection of blood from the spleenic rupture under the left dome of the diaphragm or any collection under the right dome then it can produce referred pain to the respective shoulders. That brings me to the peripheral portion of the diaphragm. The sensory supply to the peripheral portions of the diaphragm is by the lower six intercostal nerves. That is 7th, 8th, 9th, 10th, 11th, 12th. That is about the nerve supply. Having mentioned the major orifices and the minor orifices there are a few other insignificant openings in the diaphragm which give passage to various structures. For example on the left side we have the hemiasigus vein which enters the thorax from the left side through unnamed orifices. Similarly the left phrenic nerve also comes by itself unnamed orifices from the left side. So these are some other and I have already mentioned the greater, lesser and least spleenic nerves which start from the thorax and they come to the abdomen. This is why they are also referred to as the thoracoabdominal spleenic nerves. They enter the abdomen through the crura of the diaphragm namely the right crust and the left crust and those openings are unnamed openings through which they pierce through and enter the abdomen. So that is all about the diaphragm and its orifices and its respective clinical correlations. Thank you very much for watching. If you have any questions or comments please put them in the comment section below. Have a nice day.


Because you're speaking to America. Oh! What can I got? I'm a military spouse. I'm a YouTuber. I'm a model. And I'm married to this guy. I think going into the military life you think it's going to be a whole new world. And it's actually not.


All right, good afternoon, and thanks for coming out to see our talk. There's a great presentation across the way, so I'm glad you guys were interested in learning about things, what we have to say. So basically, we're going to talk about teal smithing. Using a case study is nightabridge, and we're also going to throw in some other things that we've done previously. First off, my name is Adam Pridgen, and this is Matthew Wollin-Leber. And as a brief introduction to what the presentation is going to cover, we're going to give an introduction to what we're actually going to talk about, you know, a little bit of background about teal smithing and such, then discuss what teal smithing is and the development process that we kind of use, and then we'll talk about some of the cases and shortcuts that we actually apply our techniques to, so that way you can see and real life how you could actually learn from this type of stuff. Then we'll talk a little bit about REBridge. It's basically an evolutionary project that just came out of a really random idea I was given to by a friend, and I had experienced previously, and so it's just kind of evolved from one thing into something grand and spectacular, but it's tedious to do software and development, so we use tool smithing and try to do rapid prototyping to help speed up the development process. And then we'll follow that up with some lessons learned from the various techniques and various processes that we've used, and then we'll talk conclusions and give special thanks. So just a brief background or introduction to me, I've been in information security for about seven years. Before that I was in the military, so I've always been really entrenched in attacker-defender type of mentality. So I got involved in security when I was at the University of Texas, so I've been a student. I've taught adjunct faculty in an adjunct faculty position before. I'm a pen tester, a reverser, and I love the right code. Finally I'm working at Pretorian, and my personal site is thecoverofnight.com, hence the green and black background. And this is Matt. Hi, my name is Matt Wallenover. I'm the incident team lead at the George Washington University. Primarily we focus on monitoring the network. It's fairly high throughput, we have two slash 16s. Also handle all the reversing, the binary analysis type stuff. I used to be a consultant, worked for the government, was a contractor, a pen tester. Basically decided that the only place that would put up with me was a university. So now I'm a staff there and hopefully I'll be a PhD student before too long. So a little bit of introduction to what we're actually doing here. It's a talk about tool smithing, it's a talk about Ida Ridge, but basically it all derives from one thing. We're sort of lazy, but we're OCD about getting things done. So we want to make sure that we surpass the expectations we have on projects, but we want to work smarter, not harder, so if we get a chance to write some code we want to do that. So basically a lot of this talk is tips and techniques to how to get that done while still doing short term projects that a lot of people are going to be familiar with. And a lot of it's experience based. So this is called tool smithing, it's based off of a lot of software development techniques in the past. It's something that Adam and I both do naturally and that he really picked up for this talk. It's intended to make the development process easier, faster, streamline it from not being a big software development project, but small tools meant to help get things done. Generally these aren't standalone applications or additions or add-ons to other programs that help you meet particular needs that you have for your project or whatever software you need to do. So it's not reinventing the wheel every time, it's adding on incrementally just to get stuff done. So really what we want to talk about are rapid prototyping, especially in time box windows. When we talk about tool smithing we're talking about prototyping capabilities. We're talking about saying I'm on a time box pen test and I need a tool that does X and Y and I need to model and conceptualize what I'm trying to accomplish. And then from that model conceptualization I'm trying to implement something so that I can get something useful out of it. The point being is you don't want to spend 16 hours when you have only a week to complete an engagement. The idea is to finish your script or your tool in a matter of like four to five hours and get it to a point where it's working and then you can actually apply it to something. The whole idea is to build something that's loose and open and then you can go back and improve it or release it or do whatever you want. But the primary goal is always to make everything you do into a specific functional task. So the way we look at this is sort of an evolutionary type thing. So you have your particular project requirements that you're doing. If you're a pen test you're on the gig for what, a week, maybe two. If it's malware or reversing you might have a bit longer. So from that you go into quick hacks that just make your life easier. After a while though you might be like, hey, this was a really good idea. We should make this something more. You sort of evolve into a proof of concept code. And this is something that is more than just a quick hack but it's just, hey, this bigger idea might actually work. From there you move into a bigger prototype. This is something that is your full idea. It's sort of where Ida Bridge slash RE Bridge is now it's there. It's working, it's bigger than something you do on a project. A lot of times we put into it but it's definitely not something that you'd think of as pushed out there software. And from there you have all of your tools and techniques. So you have this big thing that you have now and you should make your process better. Take in your tools to be able to deliver better services for whatever your next project is. So rapid prototyping. We've already emphasized this before. You need to meet an objective. You need to do it really quickly. It's often short-lived, it's time box development. So the idea is to find a task that's gonna only take you a couple hours or maybe even a day and use that as one of your primary milestones. And so what you do from there is you try to identify as many short cuts as you can possibly take, which means taking in open source software, looking for documentation and stuff along that lines. So we're gonna backped a little bit and talk a little bit about how we work in this type of environment. So first of all, in general, we work in ad hoc groups. It's not like someone comes in and says, I need a tool that is gonna get me root by, or get me passwords out of the registry because somebody saved their WinSEP key. It doesn't happen like that. It's very ad hoc, it's very fluid. So generally what happens is you'll find an objective that you need to meet. You'll be like, hey man, I don't know how to do this. Do you have any idea to start bouncing ideas off of each other? You'll write code together and then you'll just glue the code together and make it work. Now another drawback to this is putting these pieces together gets to be a little bit tedious. As you're rewriting code or updating code or merging code, it's all super frustrating. A bigger element of this is when you start looking at more complex ideas or more complex architectures, say like a distributed system. Distributed systems aren't something that people encounter on a day-to-day basis. So if you start looking at, okay, I wanna make tool X and tool Y talk to each other, how do I do that? I need to do it so that it's atomic so that any changes made don't tromp over changes made by a previous iteration. You need to make it so that the communication makes sense between the two. So you gotta kind of take up what you're trying to do and build a prototype so you can understand how the two are gonna actually interact. So this kind of goes back to Fred Brooks from the Mythical Man Month, where you just prototype so you build one to throw it away. So we tend to lean towards a more iterative process. So we write a basic tool. We get an idea of what went wrong, what went right. We take it and we iterate and we create a new tool based off of it. Or we create a new iteration, add more functionality or features based off of that. The idea is just to model it once or twice, get a good understanding or grasp of what's gonna happen, and then start working on what might be a final product. The idea is you're never gonna come up with a perfect solution the first time. And the more time you spend thinking about what you're gonna do, you're just gonna burn yourself out wasting time trying to figure out what's the right way to do things. So generally the third implementation is considered to be the best. In the case of Iderbridge, it took me three times to actually get a working command line interface that would interact with not only Iderbridge, but also interact with any other tools that we would want to connect up to it. So all that being said, most of this development depends on the project. That being said, there's a lot of common challenges. Okay, so one of the first things you need to do when you're expecting these projects is identify exactly what needs to happen. So I don't think people tend to have these immediate great ideas that just come to them. I think that more often it's a problem that you face from a particular gig, from a particular challenge, so you can identify what you need to do. From there you need to make your milestones. This seems a little bit formal for project development type stuff. But if you're working alone or you're on a project, maybe you've decided, hey, I could do this thing manually, or I could write some code for it. You gotta sort of set your guidelines of if I can't actually get my code to work, when do I need to call stop and push this off to something later? So milestones are key for that reason. Additionally, if you're, this is a personal project that's gonna take some more time, you need to be able to set these milestones so that you're getting there and so you can work with people. And so it doesn't just fall away as you have more needs to come up. Don't try to write more code. Lots of people are like, I've hacked out this many lines of code, this many things, so just focus on getting things done. To do this, you're gonna use different libraries, different code bases. You're gonna be reading through documentation. Basically, don't reinvent the wheel every time. And so we also have debugging and interaction. So when you write code for the very first time, you don't really know if it's gonna work, you have this general concept, you compile and run it. And it's like, there was a pointer bug or maybe it didn't initialize something. So having a good environment and interacting with the data and the functions that you're actually putting into the development process is actually one of those key things that people should really look at and evaluate as they're doing things. So going back to what we've just said, there are some ways to address some of these challenges. So for instance, open source is a great source for figuring out how to do certain things, figuring out how to perhaps make a client talk to a server. So instead of going back and rewriting the entire protocol, you just go and repurpose some code from another person's project. That being said, you can go through and review the code and figure out what is usable and what is not. And then just strip out what you need and get rid of the rest. So in that case, the existing code base is always fantastic. And this really, really helps out when you're starting to think about developing complex components and complex projects. For instance, if you want to build a DNS mapping tool, you don't go through and implement the entire DNS protocol. It's quite tedious. So what you do is you go download Binds implementation.  Same thing with building something like a fuzzer. So here are some of the tools of the trade. In general, we try to use Python. But we want to say that using high-level languages abstracts a lot of the complexities away from what you're trying to do, dealing with pointer arithmetic, dealing with complex structures. A lot of this stuff can be modeled very quickly in Python, or Ruby if that's your particular flavor. And that being said, I've talked about using debugging arguments or debugging environments to help with data interaction or rapid prototyping to enable you to change the functions and build quickly or make sure everything works quickly. IPython or IRB are perfect environments for this. IPython I use on a regular basis. IDEs and debuggers are also a good source if you're working in a structured development project. Some other things that I've used in the past that we've used in the past are network sniffers, such as Wireshark and Mallory. And this just gives us an opportunity to change stuff around, flip bits, figure out if we're really parsing a protocol correctly or making sure that the messages that we're forming actually go out correctly. So some tools of the trade. One is make sure you look at the API documentation. Sometimes it's a bit tedious. If you're looking to do some assembly or some stuff there, don't read the whole Intel assembly architecture. It's like 15 pounds. But if there's some quick stuff, go to MSDN, figure out what to do rather than reversing a whole Microsoft library, just go to the documentation, figure out, use what works. Look for books and papers. This is along the same lines. Make things easy for yourself. Find out what works. Don't push out resources because you only reverse or you only do things by the API. And again, build off of other source codes that already exist.  Experiment. So the big thing is the big emphasis is find as many shortcuts as you can. And generally this goes back to using open source software. But ideally what it could come down to is maybe you just, instead of opting to do something in C, C++ or Java, you just go straight to Python or Ruby. And then you find out what you really need to implement in those more complex languages. So in this first case, what we're going to talk about is how I went through and identified and decrypted when SCP keys out of a client's Windows registry. So basically what it came down to is I managed to break into this host on a paid gig so it wasn't illegal. And I noticed that in the registry I found some keys that had password associated with them. When I went back and looked, it actually corresponded to the when SCP application. So rather than trying to reinvent the wheel, well, first of all, I thought, well, I wanna get at that. I know that those passwords have to be reversible because they're passed on to the client at some point. So it was like, how do I do this? I could do something really complex like attach a debugger or I could do something really quick like download the source code and review it. So what I did is I downloaded the when SCP stuff and found that there were some pretty nifty APIs that do the encryption and decryption. Now, for anyone that's curious, if you've ever installed one SCP, your passwords are actually saved and encoded format under sessions. And then, somebody like me can actually come back and steal them and decrypt them and get access to whatever you have. So the way I found it is I basically grep for encrypt and then I grep for password and these few things popped up. So starting off with the process, I found these API calls and then I went even further and I found the function definitions. And I noticed that this is just encrypting by an XOR and then hexifying it. So I wrote a quick Python script to decrypt it. So, you know, this is just basically showing how I took it in. So the first thing I did is I popped up IPython and port been asking unhexify it and now I have the data to work with. So the next thing I do is I go through and I write the decryption implementation. Unfortunately, in this particular case, I made a mistake because the output isn't anything legible or anything that I can really use. So I went back and I reviewed and I noticed, hey, I left a little till day off for the unary stuff. So by implementing this stuff or implementing this in IPython or by prototyping this in IPython, I was able to quickly get something back without having to write a script, run a script and having a non-interactive environment. So, you know, the whole premise was being able to write out a quick script, debug the code very quickly, modify the functions as needed and then move on to the next kill. So IPython was one of those interactive environments that helped give me this edge. So, we'll move on to our second case study. This goes back to when I was a pen tester again. One of the things I find a lot is that you'll get a tough engagement. They've already patched everything before. It's the one time of the year that they managed to patch this right before the pen testers come in. It's that ground rules, you can't bring in any zero days and they make things basically impossible.  And then I try to reverse that and find an exploit for it in a short amount of time. For small applications, this is pretty easy to do. I tend to like to focus on things that load in the browser. But you have some problems that the modules are loaded as they're needed. You can run through hundreds of iterations. And if you're trying to do a full trace on this or if you're trying to manually debug it, you're just gonna spend far, far too much time. So I created some add-ons to immunity debug. It's a nice interface. It's basically Oli debug with Python built in and a nice API. So basically, again, it's three quick scripts to do some lazy man tracing. If you were lucky enough and you had Ben Navi, you might not need to do this, but you don't always have that. So basically what happened is that I identified the vulnerable code. I knew what was happening. You had the crash there. And I wanted to develop some scripts that would sort of get me there so I could figure out exactly where the taint happened and work my way backwards. Now the initial thing was I could use load.dll hook, which is an API that's made available by immunity debugger. But basically it didn't work. I had to use BP hook. I spent hours and hours trying to make this work. Eventually the easiest way was just to go back and talk to immunity. Maybe they fixed it by now, but as of a year or so ago it was still broken. So here are two examples of the scripts. On the left-hand side, it's just a script that's loaded in immunity. It looks for all the modules loaded. And once it's there, it sort of stalks and sets a break point for the particular module. The way it does it is on the right. Basically it finds a load library, but load library A and load library W because you might have the wide bytes. And just puts a hook on those functions. So anytime the module's loaded or unloaded in there, it basically says, okay, I'm gonna set a break point and then you can use it inside the scripting to do your automated type stuff. So in this particular example, it was inside a browser as a custom plugin that they were using and it was loaded hundreds of times for each page that was there. So if you were doing this manually or if you said immunity debugger to load and to break on each module on loading, you just spent hours and hours. So this way you did it in code was much quicker. Here's a bit more in-depth of the class that you have to overload to be able to do that. Basically it's just using a variable to set a count to how many times you're gonna wait and let this load. So it's gonna have hundreds of objects on a page. You know that it's not in the first 50, you iterate through, it's not in the first 100. So you keep upping that count and eventually you let it load and let it run. And let's say on the 205th time, this is the one that you care about. You're there at the break point. You haven't spent hours and hours doing this stuff and you can start debugging backwards by maybe doing a small trace there forward or manually reversing it. And here are two more examples.  You wanna get a lot of variables, information. So on the left it's just dumping the register values. On the right it's just doing the call stack trace. So basically it's just doing light tracing. You know where the problem happens. You get the debugger to iterate through those hundreds of steps and then you get it to dump the information that you care about at the last minute. That way you don't spend all your time there because you have other hosts to deal with. You have other things to break into. And basically what this enabled me to do was to fastly, to quickly reverse and find the taint and some small stack overflow that was used in our browser that seemed like this really cool thing. So within a week I was able to find a problem and exploit it and gain further access in the systems based on a couple of scripts. So the next case we're gonna talk about is Ida Pro scripting. In this particular case, Ida Pro offers you Ida Python which is a Python environment that you get to run Python code in. You can't prototype outside of it so you have to do it in a very piecewise fashion. And that kind of hinders the debugging process and it's also not very straightforward about how to get around. So the trick is writing small little scriptlets so that you can get to the point where you're actually doing something interesting. So this basic example is actually comes from an elf header parser I had to do in order to update the relocateables and the elf header that I was looking at for an arm binary. So basically as I said I had to do it piece by piece. One of the big things about Ida Pro is when you're running or one of the crazy things about Ida Pro or the more unforgiving things is if you run an Ida Python script and you start stomping around your IDB there's no control C, there's no going backwards. So there's no real undo. So you wanna make sure what you're doing is effective at least in the first or two iterations with small, small function calls or whatever. So in this particular case I wrote this basic function that would parse out the E header and give me a nice clean looking elf header. Unfortunately when I did this I had a bug in it and I wouldn't have caught it and it could have resulted in a more potentially disastrous outcome where I would have to revert back to my original IDB and if I hadn't backed it up that means I have to start all over after I've marked stuff up. So in this case I kind of illustrate that file start wasn't initialized in this particular function that I'm calling and so it could have been anything. So it could have been in the middle of the IDB and so if that was the case then I would have just stomped out any code or comments that I would have put in there. So as I said there's no control Z so there's no going back. So the whole idea is to implement your code in small segments and then do it iteratively as you work through the process. So after I fix a small little bug I was able to get an elf header, surprise, yay. So the next case that we're gonna talk about is code writing code. This is one of the things I don't emphasize enough when people are doing software development. So the idea is to write little scripts that write C code or write Python code for you. What this generally entails is you write a whole bunch of definitions for commands or the messages or you wanna script it in some way so you don't have to write all of the commands or messages for like a string. The best way to do it is write a script that's gonna do it for you. That helps speed up the development process and you don't have to spend all that time going through typing it in and possibly making typos. Additionally you can actually reuse the script later on if you decide that you wanna make some changes. So in this particular case I had all these definitions that I wanted to first of all export to Python and then second of all make string definitions. So this is actually kind of a lot of stuff to do for one person. It kind of drives me nuts when I have to go back and do stuff like this because I'd rather do stuff like solve a problem, not do data entry. So in this particular case, I used IPython again, I basically busted out all the lines and then I went through each definition and I saw if it had an underscore or not and if it had an underscore I put an S in front of it and then from there I get this nice little output where I get the pound F, the string underscore BP hit and then I get a string that represents that command in a lower case fashion. Now doing all the data entry for me is kind of boring. Some people might like to do it because that's what they do but I figured this would be really interesting or not really interesting but really useful because I don't wanna have to do this ever again. I just wanna be able to plug something in, run it, check it over real quick and then plop it in my source code. Additionally with doing stuff in Python, we're exporting the Python. In Python, I realized that I wanted to change the case convention of everything I was and use a more standard development convention so that if I ever gave this code to anybody they would understand what's going on. So I basically went through and I lower case everything and put it into or I just modified it, did a quick update without actually having to go through and correct the case for everything. So the final case is more to do with adding functionality to an external library and this kind of goes back to the whole use open source model. So what happened was I needed to, well, what I was trying to do is I was trying to model the communication, I was trying to get the communication to work between my debuggers and IDA Pro. The thing is I was doing all this in C++. Anyone who's developed in C++ or done C++ development realizes it gets really tedious and gets really difficult to implement stuff. I wanted to use Python but in order to use IDA Python with my plugin I would have to use an external language call and then once I do the external language call I don't actually get the side effect of when I ran my command. So what I really wanted was I wanted to be able to load IDA Python and with the IDA Python DLL or the module and so my code so that I could actually make those functions calls. But IDA Python doesn't really allow this naturally so I had to go through and add my own exports. And so by adding my own exports I can only save time up front because I was able to now use Python in my application but I also save time because I can use Python. I can prototype in Python. I can write 100 plus lines of code for every three or four lines of C++ code that I have to write and debug or that's an exaggeration. But I hopefully you get the point that using higher level languages is a lot easier than using lower level languages. So now all I have to do is import the module into my code and call the function and life is great. Life is easy. Okay so now we're gonna actually talk about RE bridge. It was originally called IDA bridge. The basic idea started, we have all our debuggers. Everybody seems to use IDA but you might prefer a community debugger. You might prefer a wind debug and you can't get the things to talk. Sure IDA has its own debuggers in it but they're pretty terrible to use. At least I find them terrible to use.  You're just used to doing it and you just wanna convert things back over to IDA sometimes. So basically just wanted the tools to be able to talk to each other. So originally it was IDA bridge but then we thought, okay well all these tools might wanna talk to each other. A lot of the scripts we showed you before were sort of reversing type things but it mainly stemmed around they didn't talk to each other. You need to get information from one source to the other and RE bridge is sort of hoping to do this. So it's trying to fill a very specific gap. It's basically middleware. It's nothing super exciting but it lets your tools talk to each other. So if you have breakpoint set in IDA you can push them over to a wind debug or you can move data back and forth between them. So it just makes things a little bit easier. So like Matt was saying, RE bridge is a middleware. It's not meant to be an implementation for another reverse engineering tool. It's not meant to do X, Y and Z. It's meant to fill a gap, give you a server that sits between or a server and a client that sits between your IDA pro and your debugger or hopefully in the future debugger or a fuzzer and then they can communicate with each other. They can send each other messages and they all understand the messages. And so basically no one's reinventing new tools they're just reinventing a communication stack. So like we said, it's the whole idea is to make the tools interact with each other, give users the ability to control their tools from one tool or another and then also build it out as a distributed framework so that way you don't have to reverse from on the same machine. So if say I'm using IDA pro on my windows machine and I'm reverse engineering a Linux machine, I don't have to use VMware. I can just put it on a remote hardware somewhere and just make them talk across the network. And of course IDA pro does have the debugger functionality written into it but if anyone's ever tried to use the debugger it's very difficult to understand. It's difficult to use and get set up in the initial stages. So having something where you can just use a native debugger that you're always used to and not having to use somebody else's GUI or somebody else's being constrained to somebody else's tool that you don't appreciate is a huge plus. And the additional thing that we wanna do is we wanna make this middleware extendable. We want to make the middleware extendable using stuff like Python or Ruby. So we have several components that we've built out so far. The first one is the IDA bridge. It's basically a command line interface that uses asynchronous server or networking client that we pulled from collaborating. Again, we're emphasizing that you should use open source tools or open source software that's already implemented stuff to incorporate into your software. And then what we did is we modified the IDA Python lip so that way we don't have to go through and rewrite everything and see your C++ to do the actual interfacing with IDA pro. We can just rely completely on Python. And that also gave us another one because we can extend our Python classes or we can extend our handler classes using Python. So if we wanna add a new command, we just write a new Python class with the defined command elements and then we just roll from there. So we also use, we also for this implementation incorporated V trace or VDB, which is a product of Concerto and a Visigoth. So basically for VDB, we added in asynchronous server into the command line. And again, we use Python to be able to extend the handlers as needed. And so anyone that's familiar with the framework or understands how to write the plugins can actually go through and write the plugins. And again, you can also do it to the point where you could just load it in and using the Python interface.  So WinDebug, when I started working didn't really have a Python interface that I could actually load in as a plugin. So currently it's only implemented in C++. So it's incredibly difficult to add new, or it's more difficult to add new commands and make everything work and talk very quickly without having to go through recompile and testing all the time. But it does have the asynchronous server, which we also pull from another open source project by a Duke and by Lenox and Puscat. So basically we got all this stuff going. It's still an iterative process, but we have a few lessons that we learned from it. Basically as Adam said a lot, we like high level languages, I'm a native C programmer, but I appreciate that we're trying to get something done. Python or Ruby or something makes things a lot easier. Documentation is not always useful, sometimes it can be, but make sure you find examples in source code and just ping people when things aren't working, don't waste too much time. Believe in that the documentation is right and that you're doing something wrong because sometimes there's a gap. Write scripts to make things as automated as possible. Spend time thinking about what the model is and what you're really trying to do. And implement iteratively and understand iteratively.  Yeah, the key thing is look for small milestones that you can accomplish over a long period of time. Cause the more small milestones that you can pile up or that you can complete over a few days or a few weeks, the more likely you'll move towards something. As you start building out, as you start dreaming big and start saying, I'm gonna implement all of this in one sitting, you start to become a little bit more bogged down because you're becoming more concerned with, oh, I'm not getting this done or I'm falling behind. And then it's just, it starts to propagate or it starts to become a little bit more cumbersome to deal with. So from personal experience, I've learned that the more small things that I say I'm gonna accomplish, the bigger things start to, or the small things start to add up to those bigger things. So some of our conclusions, basically try to use rapid prototyping as much as possible. We like coming from ideas from real world type thing, not just thinking of them being clever yourself, but here's a problem you have from pen testing. Here's a problem you have reversing some malware or here's a bug that you found. Go from what you need to get these actual jobs done as opposed to trying to think things through all at the beginning. Always use scripts. If you're doing something that's very tedious or painful while you're debugging or reversing, write a script for it. Make it useful and then from there, it tends that the way that you're doing it works out better overall. And so, in addition, we've introduced our eBridge model. It's basically a distributed network or a distributed framework that's gonna hopefully be a middleware that allows independent tools to integrate and talk to each other. Currently what we have is kind of like an alpha piece of software where it basically allows Ida Pro to talk to either one debugger or the other. But hopefully we would like to make this a little bit more interesting where we say, okay, let's connect more elements to the party and see if we can get more information being shared, more data being sifted through so that way we get more interesting results. And the whole idea is also to enable multiple users to share on the same session. So something like Collaborate, but on a more heterogenous playing field where basically we're starting to incorporate frameworks such as Radar or Bennavi or multiple debugger types into a single distributed session. So some related work that we've had, that we've experienced is, of course, Collaborate, which basically uses a central repo that maintains IDBs and allows users to make modifications and share those modifications out with others. So multiple users can actually connect and mark up the IDBs. Another one is Bencrowd, which is a product of Ben, of... Dynamics. Dynamics, sorry, there's a bug there. And this is basically a repo where users upload comments and functions from IDA Pro. And then they can share it with others and others can actually get the information that's already been shared or been revealed or identified by other people inside the crowd. So basically people get to reuse the work of others. There's also another project that we took from Biokugin, which is a little bit different. It's actually a vulnerability research and visualization tool that allows people to use Metasploit and WinDebug to speed up the vulnerability research process. And so with that being said, we'd like to offer special thanks to SciPy for creating iPython. Chris Eagle and Tim Vadas for Collaborate, E or Deli, and HexRace for Iodipython, Postcat and Linux for Biokugin and Visigoth and Conchotto for V-Trace. If you guys are interested in the code or the presentation slides, you should be able to find them from the GitHub link here at Matt's account, so you won't be hacking mine. Thanks. So are there any questions or comments? We kind of blaze through that pretty quickly. Yeah, yeah, right on. We're done.


Live from San Diego, California, it's theCUBE. Covering KubeCon and CloudNativeCon, brought to you by Red Hat, the CloudNative Computing Foundation and its ecosystem partners. Welcome back, I'm Stu Miniman, and my co-host is John Troyer, and you're watching theCUBE here in day two of our coverage of KubeCon, CloudNativeCon. And joining me is Toby Kinnup, who is the co-founder and CTO of Day Two IQ. See what I did there, Toby? That's right. All right, so Toby, first of all, KubeCon, of course, Day Two IQ, last year when we were here, it was Mesosphere. So, you know, give us a little bit, you've been in a lot of customer meetings, 12,000 people in attendance, tell us a little bit about the energy and how your team's finding the show so far. Yeah, obviously, biggest KubeCon so far, and you know, it's just amazing how far this community has come, how it's grown, how many projects are part of it now, how many vendors here too, two expo halls with different booths. And you know, I think it just shows how important this community, this ecosystem is. When customers come to us and say they want to work with Kubernetes, the community is why they're really doing it. Yeah, it is, it's a great community, great vibe for people that aren't already in it. It's easy to get started, but one of the big themes we're hearing here is its simplicity. How do I make it easier to get going? And once they get going, what happens after day one? That's some of the re-branded pieces. So for our audience, explain a little bit why the re-brand focus of the company, day two operations, absolutely something that I hear a lot of discussion on. And why is your team specifically well positioned for that environment? No, absolutely, I think. So the re-brand we did because, obviously our old company named Mesosphere has Mesos in it, that's the open source product we started with. But we've been doing a lot more than that actually for many years, right? We help customers run Apache, Kafka, and Spark, and Cassandra. And we've been doing a lot with Kubernetes also for some time now and even more so now. So having one particular technology in the company name was holding us back, right? People just put us in that box, but we're doing so much more. So that was the reason for the re-brand. And so we wanted a name that doesn't have a particular technology in it. And so we're looking for what has really expressed what we do, what we help our customers with. And we've always been focused on day two operations, so everything that happens after the initial install, how do you monitor things properly, upgrade them, and so on. So that's why we love that day two concept. And then the IQ really stands for a couple of things. First of all, we try to put a lot of automation into our products, so make those products smart to help our customers. But more importantly too, when we look at the ecosystem as a whole, where are most customers at? Where are most companies at? Well, they're still early in their cloud native journey and they need to get up to speed. They need to get smart about cloud native and about day two operations. And so that's the IQ piece. We want to help our customers become smart about this space, get educated, and learn to do cloud native. So Toby, one of the things that fascinates me about the Kubernetes ecosystem is that people bring stuff to the table, right? People bring different, Kubernetes is here, that's evolving, there's all these things, but people are, other companies, entities, projects are coming to the table with other open source concepts and solving problems that they have in the field. At day two IQ, when you were Mesosphere, you have years of experience, right? Dealing with production issues, scaling, scaling, management, all these sort of really, really fascinating cloud native problems. So you bring a lot of experience to the table. So one of the things, the projects that you are now working on and working with your customers and partners and the bigger ecosystem on, is an operator, a way of approaching operators. The concept of bringing this kind of lifecycle automation to applications and helping with all these day two problems. Can you talk a little about, so Kudo is the name of the framework, I guess. And can you talk a little bit about that and how you're bringing that here to set at the table and what some people's experiences with that are and what they're using it for? Yeah, so these data services, these stateful workloads like Kafka, Cassandra and Spark, that's been in our DNA for a very long time. In fact, a little known fact, so Apache Spark was originally a demo application for Apache Mesos. That's how it started originally. Obviously it took off. But so we've been doing that since even before we were a company. And we've been helping our customers on top of Mesos with running these complex data stacks. And there's an equivalent of operators on top of Mesos called frameworks. So we've been building these frameworks and we realized it's a little too hard to build these things. We typically had to write thousands of lines of code, 10, 20,000 sometimes, and it took too long. So what we actually did on Mesos many years ago is we extracted the common patterns from those frameworks and built it into a library and made it so you can actually build a framework with just configuration, with just YAML. So it's a language that allows you to essentially sequence your operations into phases and steps, kind of like you would write a runbook that a human operator takes and then goes through, right? So when we looked at the Kubernetes operator space, we saw some of those same challenges that we had faced years ago. Building a Kubernetes operator requires to write a lot of code. Not every company has Go programmers, people that are skilled enough in Kubernetes that they can write an operator. And more importantly too, it's once you write those 10,000 lines of code or more, you also have to maintain it, right? You have to keep up with API changes. And so a lot of folks we talked to at KubeCon last year and to customers said, it's just too hard to build operators. The other side of that too is folks said, what's a little too hard to use those operators to? Because very common use cases, you build a data pipeline, that means you'll be using multiple different operators, say Kafka, Xenon, Spark. So if those all have different APIs, that's pretty hard to manage. So we wanted to simplify that. We wanted to create an alternative way for building operators that doesn't require you to learn Go, doesn't require you to write code. It works with just this orchestration language that Kudo offers. And then for the Kudo users, the API is the same across these different app operators. It has a plugin for KubeCuttle. So you can interface with all the different operators through that. So yeah, simplicity and a great developer experience are the keys here. Yeah, Toby, I was wondering maybe you bring us inside the personas you target with this type of solution. As we've seen the maturation of this space, the first couple of years I came, it felt very infrastructure heavy. The last year or two, there's more at the app dev discussion there. They don't always speak the same languages. Looks like you've got some tooling here to help simplify that environment and make it easier because of course your application developers don't want to worry about that stuff. The problems of things like serverless are just we're going to take care of that and sass and whatnot. So we're specifically, do you target and what are you hearing from customers as to how they're sorting through these organizational changes? Yeah, so I think ultimately everybody kind of wants a platform as a service in some way. If you're building an app for your business, you don't want to think about how do I provision this database, how to do that. And obviously I can go to a public cloud and I can use all those public cloud services, but what a lot of folks are doing now is they're running on various different types of infrastructure. They're running on multiple public clouds. They're running on the edge. We work with a lot of customers that have a need to deploy these data services, these operators in edge locations, on the manufacturing floor in a factory for instance, or on a cruise ship. That's one company we're working with. So how do you bring this API driven deployment of these services to all these different types of locations? And so that's what we try to achieve with Kudo for the data services and then with the other products too, like Commander which is a multi cluster control plane. It's about when organizations have all these different clusters and very typically they get into the dozens or even hundreds of clusters fast, how do you then manage that? How do you apply configuration consistently across these clusters?  So those are all the day two things that we try to help customers with and there's a little bit of attention there sometimes because the great thing about Kubernetes is it's great for developers. It has a nice API. People love the API. People are very quick to adopt it. They try it out on their laptop. They stand up their first cluster. That typically goes very fast and you're very quickly to have their first app running. So it happens organically, right? But every large organization also has a need to put the right governance in place. How I keep those clusters secure? How do I meet my regulatory requirements? How do I make sure I can upgrade those clusters fast if I need to fix the security issue and so on? So there's that tension between the governance, the central IT and what the developers want to do and we try to strike a balance there with our products to give developers the agility that cloud native promises but at the same time, give the IT folks the right controls so they can meet their requirements. So Toby here at the show this year, obviously bigger and a lot more folks at different parts of their cloud native journey.  I mean, is there anything you can say about either what makes for, you think it's going to make for a successful partnership with you, a successful customer, what qualities do you need to have but by the time you're growing up in production and then also as they're making choices here, what should the end users be looking at? Right. Yeah, so one of the things we realized over the years is actually, cloud native is a journey. Every organization is somewhere else on that journey and I think you said partnership, I think that's the key word here. We want to partner with our customers because we realized that the stuff is complicated, right? And it's actually for us as a company, our journey has been kind of interesting because we started at this large scale spot, right? Before we were even a company, we were running these clusters with tens of thousands of nodes, these large online services at Twitter and other companies. So that's where we started, but and that's where our first product kind of landed is at that large scale, that's where we're known for, but most organizations out there are much earlier in the journey to cloud native and so what we realized is that we really need to partner with folks to even at the very first steps where they're just getting educated about this space, right? What are containers? How are they different from VMs? What is this cluster management thing, right? How does that all fit together? So we try to hold our customers' hands, you'll catch them where they are. Besides all of the software that we're building, we also offer trainings for example and so we just try to have the conversation with the customer, figure out what their needs are, whether that's training, whether that's services or different products and the different products that come together in our Kubernetes product line, they're really designed to meet the customer at these different stages, right? There's Convoy, that's our Kubernetes distribution, get your first product up and running, then once you get a little bit more sophisticated, you probably want to do CI-CD, so we have an upcoming product for that, called Dispatch, pretty excited about it. The data services with Koodle, folks typically add that next and then very quickly you have these dozens of hundreds of clusters, now you need Commander, right?  All right, Toby, want to give you the final word. You talked about some of the things coming out here, so just give us your viewpoint of kind of the ecosystem broader as to what next things need to be done to help even further the journey that we're all on. Yeah, I think in terms of next things, there's a lot of interest around operators and while operators ask the implementation, but really what's happening is people are running more and more different workloads on top of Kubernetes, right? And I think that's where a lot of the work is going to happen over the next year. There's some discussions in the CNCF now, even what is an operator, how do we define that? Is it something fairly broad? Isn't something fairly specific? But Kubernetes is definitely the de facto standard for doing cloud native and people are putting it in a lot of different environments. They're putting it in edge locations there and so I think we need to figure out how do you have a sane sort of development workflow for these types of deployments? How do you define an application that might actually run on multiple different clusters? So I think there's going to be a lot of talk, operators obviously, but also on the developer side in a layer above Kubernetes, right? How can I just define my application in a way where I say maybe just run this thing in a highly available way on two different cloud providers instead of saying specifically it needs to go here and it needs to go there or deploy this thing in a follow the sun model or whatever that is. So I think that's where a lot of the conversations are going to happen is that level above. All right, well Toby, appreciate the updates. Congratulations on the progress and definitely look forward to catching more with you from you and the Day2I2 queue team in the near future. Thank you very much for having me. All right, for John Troyer, I'm Stu Miniman. Lots more to come. Thanks for watching the queue.