Hey everyone, my name is John Hammond, this is Pico CTF 2017, and the challenge is guess the number. Challenge prompt is just a simple number guessing game, how hard could it be? Give us a binary and some source code, and a remote connection that we could go to if we needed to. So let's go ahead and download these here, let's check out what we've got to work with, just another binary and some C source code, and let's check out the hints. It says, what is the program doing with your input number, and STRTOL checks for overflow, but it does allow negative numbers. Okay, so for a little bit of context, let's take a look at what we're working with. We've got some C source code. It gives us little T's at the top of your comment, how well do you know your numbers? And a function win that will give us a shell, okay? So that's clearly what we need to do, get the flag and win. And our main function creates a variable called val with data type UNT PTRT. So I haven't seen this before, so I went ahead and googled it, and it is just kind of as we would expect, an unsigned integer, hence UNT, that is capable of storing a pointer. Okay, I was just curious in that it's an unsigned integer, okay? That's fine. Reads in from a buffer, et cetera, thinking of a number, can you guess it? Enter your number, and it looks like it's wanting 32, 32 bytes here, 32 bits, I suppose, to get that 32 bytes for the buffer. And then it will convert it to a long, with string too long, STRTOL, checking for an overflow, because STRTOL will only allow so many bytes for that number or for val. So it says you entered it, let's see if it was right. And it does this operation with val that's a binary operation by shifting it to the right for position. So we can take a look at that in Python just to showcase it. And then it tries to execute that number, that value that we pass in, it literally just runs it as if it were code. So maybe we could take advantage of that to actually run the win function and execute where that address is in memory. So let's go ahead and take a look at that. If I were to check out the binary, check out the symbols in there, we can see we have this win function right over here available at this hex address. So let's take idle, let's just work in Python here. Let's get that number hexadecimal here. That's it in decimal, whatever, not a big deal. But we want to know what that is. Again, if we were to shift it to four positions, and I'll show you that in binary. First of all, let's just get a binary number like 0, 0, 0, 0 and 1, 1, 1, 1. So that's 15, whatever. And then can I see that in binary? Okay, that moves it just fine. Because the zeroes in the front don't particularly matter. Let's go ahead and add them at the end. So now we've got a bigger number because the zeroes will stay in place, and that's 240. Great. So let's go ahead and shift that binary number four places, that's shifting to the right four places. So this one will move, and then we'll get a zero over here. The one will move again, get a zero back over there. Ones will move the right again, obviously four times until this happens over and over again. And that will end up getting us the 15 that we saw earlier, because we shifted it now. If I took the bin of this, you can see that, okay, the zeroes have now translated to the very, very front before the B representation in binary, and then it's as if they weren't even there, just like when we looked at them before at the very start, it would, okay, now it considers it to be 1, 1, 1, 1 and 15 in decimal. So that's the binary shift in the right case. It's literally just moving the numbers to the right and wrapping them around. So in our case, when we're working with this hexadecimal value, and it shifted to the right, we would get that, whatever. But if this is the value that we want, if that's the hexadecimal address that we want to have in memory, we would have to see what it is shifted to the left. So when we supply it, and they shift it to the right, it is the value that we want. Great. So it's this decimal number, okay. And if we wanted to go ahead and submit that, we could try it. Let's go over there. Let's run a guess num, market is executable to run the program. And if I paste it in, you can say, oh, hey, you entered this number, which is not that number. And see if it would write, it's like false because it can't get anything at that address, that address, whatever. So okay, that is an error. But it's strange that this is the number that we're seeing. Why is that? If we Google this number, you can find that this is the interesting fun fact, 8th Merceni prime, but it's also the highest number in computing. It's the maximum positive value for a 32-bit signed binary integer in computing. So keep track that this is assigned, and that that means it's either positive or negative. However, we know that we are working with an unsigned value, our val function, and that means that, okay, we're only getting positive numbers here. But our hints told us that strl or string to long will check for an overflow, but it does allow negative numbers. Huh, okay. So could we somehow showcase this number in a negative form that our program would look at and trick and get us the actual value that we want, get us the hex address for the win function? Yes. And it takes some magic tricks that you may not just kind of know off the top of your head without having been in the scene for a little bit, so I'm going to drop some knowledge bombs here. Please beware. And I'm going to talk about signed and unsigned integers and two's complement and how they're represented in C and C++ and stuff like that, particularly C in this case. I don't want to accidentally say something that I didn't mean to or whatever, so don't hate me in the comments. When we're talking about storing signed and unsigned negative numbers and stuff in C, the way that that happens is by taking the amount of bits that we could possibly store. So it's a 32-bit system in this case. So we have 2 to the power of 32, except we don't have that many. We actually have to keep in mind that we're going 2 to the power of 31, for someone could probably explain that to me, power of 31, and you'll note that this is surprisingly very, very close to the same number that we saw when we ran this guess number code. In fact, just one more because I guess one has to be obviously reserved for zero and stuff. So this is the maximum number that we've got and the way that we actually store a number in C is a particularly form that we take the original value with 2 to the power of N and being the number of bits that we have to work with minus 1, so 31 in this case, 2 to the power of 31 minus the original value of this binary being stored in a 32-bit value. And you can tell that it's kind of be considered that way because there is a one at the very, very front and all these zeros in the end there. So the way that that is stored as a negative number is by taking this 2 to the power of 31, subtracting out all of the rest of the bits, the original bits before the one is on there for the computer to note that, okay, this is a larger value than our regular sine value. So it has a negative component in there. And we're just going to care about this bit here. So if I take this bit before the most significant bit one and the following zeros, what we can do is we can go ahead and subtract that. Oh, forget, got to do that in binary here. And we have this value, which is it as a negative number, the same representation of it, which makes no sense. It is weird, but I'll show you if I run guest on right here. If we run guest on with a negative that number in decimal, we've got it. We've got our shell. Okay, that's cool. So this is a mathematical way of doing two's compliment. So if you haven't seen two's compliment before, I'll show it to you right now. It's a mathematical operation on binary numbers, best known for its role in computing as keeping track of sine number representation. So negative and positive numbers. The way that we can get a negative value being represented in that 32 bit or whoever many bits notion is by using two's compliment. And two's compliment has a trick where you do two things. You take an original value that's in binary. So let's go ahead and take our original value again, shifted to the left four. So this number, take this in binary, flip all the bits. So all the ones become zero and all the zeros become ones. And then add one. And that's a mathematical way of doing again, what we just did with some exponents and subtraction signs. But let's do it that way. If I take out the zero B notation and I've just got, okay, the ones and zeros. We can do some quick transforms to replace flip bits. I use a temporary value here. So my ones and zeros don't get mixed up. Then I replace all the zeros with ones. And then my temporary value, I'll replace them back to zeros. So now we've got this where all the bits are flipped. And we can go ahead and add one to them at one. You can see we have that exact same number that we just saw when we did that mathematical form. However, it's just a little bit easier mentally way to consider it when you don't have to do that as many, I believe, button presses. Flip the bits and add one if you want a positive number that is larger than the highest integer represented in a negative form. So simply giving that as our value here in negative will give us the correct value when it shifted to the right four places. And it's getting that win function hexadecimal address. Weird, interesting thing. Let's go ahead and try that with the actual remote connection. We can echo it into this pipe that there. And let's just get that value with the negative sign piped in. And we have a shell. Let's go ahead and wrap that in cat so we can keep our shell. And now we can cat flag dot text and get the flag just like that. Perfect. Submit that, rock up on the scoreboard, 75 points. Let's say that as just a simple get shell script, nice and easy. Will that work just fine for us? It will. Okay, cool. So I hope that wasn't too hard to follow. I have to admit that's kind of a hard thing to explain in the way that C stores negative numbers and twos complement. There's a lot of weirdness in it. But I hope that to raise the power of n minus one and being the bits subtracting the original value before the zero or the one indicator that it's a negative number. That's one method. And the method I prefer because it's kind of a two step process is taking the original value, flipping the bits in binary, and then adding one to get a positive number greater than the highest integer represented in the negative form. That's the that's twos complement right there. So cool. Thanks for watching, guys. Hope you enjoyed this. Shout out to all the people that support me on Patreon. Thank you guys so much. One dollar a month or more on Patreon will give you a special shout out just like this on every video that I release on YouTube. $5 more will give you early access to everything that released on YouTube before it goes live because I like to record in bulk and then upload as the schedule goes on. If you did like this video, please do like, comment and subscribe. Please join our Discord server link in the description. It's a cool community of CTF players, programmers and hackers. If you want to hang out with me and other cool people, that's the best way to do it. I hope to see you guys on Patreon. That would be phenomenal. Thank you. I love you. And I hope to see you in the next video. Thanks.


Ladies and gentlemen, the President of the United States and Mrs. Reagan. Ladies and gentlemen, the national anthems of the Argentine Republic and the United States of America. This concludes the honors. President Alfonso, it is an honor today to welcome you to the United States. It was 26 years ago when the last Argentine president came to Washington on a state visit. I certainly hope that what we accomplish today will clear the path for increased goodwill and cooperation between our peoples in many more such visits. And let's make certain it's not another 26 years. Argentina and the United States, though at different ends of the hemisphere, have much in common. The spirit of freedom and independence that freed the people of the United States only a short time later spread to Argentina. And your country is one of the oldest democracies of the hemisphere. The flame of liberty burned red hot in Argentina. And your country was the first on the continent to ban slavery. This was no mere coincidence, Mr. President. The Argentine people are the heirs of a great legacy. Similar to our own experience, Argentina was a frontier society. A land where people came from many parts of the world to better themselves and to live in freedom. An undeveloped land yet one blessed by God with a richness of soil and resources. Our forefathers here and in your country shared the challenge of turning a wilderness into a modern nation. Today, we continue to share the challenge of maintaining the economic growth and development so vital to the well-being of our peoples. Keeping a national economy vital and robust requires hard work, vision and commitment. It requires tough decisions today in order to make a better tomorrow. We appreciate here, Mr. President, the severe economic problems that you inherited. A few years ago, I too assumed the presidency during a time of great economic uncertainty. Inflation and economic decline sapped our strength. Had we challenged our efforts into finding easy and short-term answers, had we looked to redistribution of existing wealth rather than creating more, we would still be trapped in a seemingly endless morass. Instead, by focusing efforts on economic growth, increasing productivity, creating new incentives that encourage citizens to work and save and invest, we unleashed a groundswell of economy-building activity in the private sector that turned decline into progress, inflation into stability, and national doubt into optimism and growth. President Alphonsein, every country must make its own way and walk its own path, yet friends can and should help one another. The United States will do what we can to assist you in your efforts to improve the economic conditions of your country. Argentina, like the United States, is a land of few limits. Your people, educated and strong in spirit, have enormous potential. I can assure you in the strongest terms that the people of the United States want you and the people of Argentina to succeed and to prosper. This prospect is made even more likely now that Argentina has returned to the ranks of democratic nations. As we've seen throughout the world, there was a strong relationship between freedom and economic development. Democracy frees the spirit of man to achieve, to build, and to create. It's the only system consistent with the decent and humane values at the heart of our societies. Democracy means government derives its just powers from the consent of the governed. It means freedom of speech and religion, the freedom of assembly and the rule of law. It's more than a form of government, it's a way of life, an ideal which seems to be a process yet is an end in itself. It's not the easiest system, but it is the most just and it brings a better and freer life for all. The spirit of democracy is not found in great halls or in marching armies, but is enshrined in the hearts of the people. Juan Bautista Alberti, the father of the Argentine Constitution, said it well. The Constitution, liberty, authority are not written. They are realized. They are not decreed. They are created. They are made by education. They are not made in the Congress. They are made in the house, in the home. They don't live on paper. They live in the man. Today is an exciting time to be an American and I mean all of us from the north slope of Alaska to the tip of Tierra del Fuego. More people here are living in democracy than ever before. 90% of this hemisphere's population lives in democracies or in countries in transition to democracy. This trend, however, is threatened by Marxist Leninists who continue with the heavy support of the Soviet Union and Cuba to undermine freely elected governments and democratic movements. In Nicaragua, communists who were just one faction in the broad coalition that pledged to replace their former dictatorship with democracy quickly seized control of the organs of power. The vast majority of those fighting for true democracy in Nicaragua for freedom of speech, religion and press actively opposed the former dictatorship and the Nicaraguan people are joining the ranks of the freedom fighters. Nearly three times as many men are fighting the communists right now as the Sandinistas had fighting Samosa before they seized power. The free people of this hemisphere must not stand by and watch the communist tyranny imposed on Nicaragua spread to the free lands of the Americas. We, like you, support the search for peace through the efforts of the Contadora Group strongly believing that if all 21 objectives were implemented including the genuine democratization of Nicaragua the Central American nations could live in peace and democracy. Mr. President, as leaders of two great nations dedicated to democracy and committed to human rights we're concerned not only with our own freedom but also the cause of freedom throughout our hemisphere. San Martin, a great freedom fighter of his day once said in the last corner of the earth that I might find myself I will be ready to sacrifice my existence for liberty. Today democracy draws the people of the United States and Argentina and all other Americans closer in a bond of friendship and shared ideals. I welcome you President Alfonso as an elected representative of your people and as a man committed to the political liberty we cherish so deeply. Mr. President, I wish to begin by expressing my gratitude to you for the warm perception you are granting to the President of the whole Argentines. Mr. President, I wish to begin my statement by expressing my gratitude to you for the warm perception you are granting to the President of the whole Argentines. Mr. President, I wish to begin my statement by expressing my gratitude to you for the warm perception you are granting to the President of the whole Argentines. As you have said, it's very important that we meet at this historical time when a real wave of democracy is going through Latin America. This is our hope, Mr. President. People of Latin America actually live in that respect and actually enjoy the prerogatives and the liberty that the people of the United States enjoy. That's on the other hand what our founding fathers wanted for us. Both the founding fathers of the United States and those of Argentina. That's precisely for the men that gave us independence fought for. Starting with General Washington in the north, the General San Martín in Argentina. To accompany these processes of democratization with tangible achievements in the economic field that allow new democracies to respond to the requirements of social democracy. As you have said, Mr. President, it is necessary that these democracies actually achieve tangible economic results so necessary to also achieve social democracy. That's why next to hope, fear is also there in Latin America. Fear that arises from unsatisfied expectations from our peoples. Our democracies have inherited very difficult charges in the economic order. The debt that in my country reaches the 40 billion dollars and that in Latin America reaches the 400 billion dollars that of course conspires against democratic systems. Mr. President, is no doubt one of the big differences between our two countries. For us, the philosophy you just mentioned, the philosophy of the state of law, the respect of human rights, that is equal to both of us. A man, Mr. President, to be called such thing, not only has to have just the right to exercise its fundamental liberties, he also has to have the possibility of live a dignified life. That's why, Mr. President, in Latin America, we are ready to govern with the austerity that our times are demanding. We are making the necessary adjustments to supress the obstacles of our economy. We cannot make adjustments that will actually impose sacrifices on those who have less. It's different from those developed countries in which the GNB is received by only 50 percent. In our countries, it doesn't reach it in the 40 percent. And to ask from our peoples in that precise sector a bigger effort, there is no doubt to condemn them to marginality, to extreme poverty, to misery. Of course, then it would mean that the demagogues that are always there would find in the arms those simple satisfactions that democracy couldn't grant. That's why, Mr. President, it has been very important for me to listen to your welcome and remarks, because you've shown a deep understanding of our problems. I am indeed persuaded that it couldn't be otherwise. I am indeed persuaded that the United States understands that the development of democracy is, of course, entrenched in our country. That's why there's been great expectations about the dialogue that we will start today. We will talk about the present and we will talk about the future. We, two presidents elected by the will of the people, will get together. We will, of course, talk about bilateral subjects and also those items that regard the continent as a whole. And, of course, in our dialogues, the subject of Nicaragua and Central America will not be absent. I am convinced that it's through dialogue that we will be able to reach peace. The basis of the principle, the long-standing principle of international law in Latin America of non-intervention, that will give us, of course, the possibility of democracy and pluralism in democracy to succeed, without extra-continental interventions, and affirming, of course, the freedom of man. We will talk about all this, Mr. President, and, as I said, there will be two men that will be two men freely elected by the will of our peoples, so, Mr. President, it will be a dialogue of both our peoples. That way, and because of them, we will try to reach solutions. We will work for them, for our peoples, and we will try to build the future that our peoples deserve.


Hey curlfriends, I'm Bianca Renee and you're watching Bianca Renee today and today. I'm wearing a fur coat in the spring Why you ask because I feel like I had the channel my inner cookie lion for today's review This is TPH by Taraji P. Henson the actress that you might know from Empire Cookie Lion She's also was in hustling flow. She was in think like a man She was in what men want hidden figures Google her, but she's another Black actress that decided to make a natural hairline the only kind of like Thing about that is we've ever really seen Taraji rock her natural hair And maybe that's why she created a line because she didn't like how products worked on her hair Maybe that's why she's always in wigs and weaves. Oh No, but here I am trying out the product No, it's gonna be an unbiased video because one I went out and bought these products with my own money I ordered them from Target during quarantine. So I had to just you know pick and ship So fortunately all these products range from 10 to $15. So I was like, okay Taraji at Target making it affordable. I'm all for it. You also know I'm a sucker for good packaging Look at these cute colors. Love the packaging these different types of unique nozzles Definitely caught my attention now for the big test that you guys know I have to check for is the ingredients But fortunately once I did my digging all the products that I purchased are sulfate paraben silicone free Thank God. I noticed that once you even pick up the bottle There's no ingredients on the back of this shampoo and the conditioner It is on the back of these two bottles. It's not on the back of this hair mask Nor is it on the gel? So it's like why would you put it on some but not the others and then as I did my detective work and I had to look underneath and I had to peel off This little what looks like, you know the price tag scanner thing bruh Thank God, I still have 20 20 vision so one even though I love the look of the bottles I don't like the thing ingredients are like hidden Underneath the price tag you have to literally take off the whole sticker and there's more Ingredients on the sticky part of the sticker Why though I did not purchase all the products she released 18 products all at once That's a pretty intense in-your-face type of launch We usually get like a shampoo a conditioner and a styler, but she gave us a lot to choose from so I didn't want all of them I just chose the ones that really took out to me that I thought would work best for my hair type now are these products New not that new I'm a little late to the game, but I'm kind of glad because every single review I've seen People don't like these products. I think I've seen maybe one positive review And I think two of you wrote me on Instagram But that's gotta it so I wasn't you know too inclined or excited to jump into trying something that everybody hates But I'm not saying I'm gonna set up this review with a bias like negative attitude. I kind of just came in like Why do I have so many foe for a coach you ask? Don't worry about it. So without that being said I am gonna have an open mind So I can see how these products really work for me now the first thing to try is the edge control Let's grab this one. So the edge control is called slick. It's for curly and coily hair This is the first edge control. I've seen in a squeeze tube. So that's interesting Little pop top like that So I'm gonna treat this like toothpaste very thick toothpaste on my little toothbrush Okay, there we go got a little bit there. Oh very thick so far so good little swoop there Let's get some more Slow this comes. Oh, you got to work out. So use the edge control. I'm not the baby hair slayer That I want to be squeak. It's pretty shiny. It's like the down We'll see how long they stay down I'll try to come back at the end of this video later on tonight now Let's move on to the shampoo and conditioner that are made for your scalp. So starting off with the master cleanse I'm just going to twist the nozzle and apply this directly to my scalp the very first thing that you will notice with these products Is the smell the smell is so Strong and I'm glad I'm not alone in this once I watched some other reviews I noticed that everybody hates the smell. It smells like a super strong Cologne not perfume Cologne of somebody's uncle This is somebody's uncle's cologne and you guys know I'm very big on smell So that could turn me off a product alone, but I continued because the nozzle is so cool So why don't you twist the top open? You'll see this is a very watery consistency like there's no slip in this at all It's not creamy at all. It literally feels like water So I do think that the tri tip applicator is very unique. It's a very cooling sensation It has which hazel water eucalyptus oil and tea tree oil I do usually like a product that lathers kind of makes me feel like it's clean This I didn't feel like I was using enough or not because it doesn't bubble up and I also didn't really think it should travel down to the lengths of my hair So I kind of feel like it's as great for your scalp But it also made me want to use a shampoo After using it for the rest of my hair and I don't want to feel like I have to use two products to Necessarily clean my hair, but that's kind of what this product left me feeling so after I rinse it out my hair felt you know Clean at least my roots did but the rest of my hair was kind of untouched then I moved on to the conditioner the same twist nozzle and It's also Very strong smell the conditioner has aloe shea butter eucalyptus oil and peppermint So more great ingredients, especially for your scalp same tri tip applicator This is really interesting because usually you don't always apply your conditioner to your scalp Shampoos for the scalp conditioners for the lengths of your hair, but you also don't want to dry scalp So I do like the idea of conditioning your scalp So I did apply it the same as a shampoo and I did have a slight You know tingling sensation, but nothing crazy like normal scalp products once again I didn't feel like I could use this on the length of my hair So I ended up just squeezing it into my palm. It's a very Lightweight cream conditioner not very thick at all and I smoothed this down one side of my hair to see how much slip It had and see if I could detangle the tangling was pretty rough I would not say this product has great slip, but I also think it's really only for your scalp So now am I supposed to use another conditioner after using my conditioner? And it's kind of doing a lot. So overall conclusion on these two products. I love the color I love the applicator bottle.  Predict a minute So after detangling was pretty much a fail of the mint condition on one side of my hair I decided not to detangle the other side so I could see how much slip the Hair mask has this is the mother earth a Moisturizing clay mask supposed to soften define and de-friger hair for wavy Curly and coily hair. So now we're gonna a little bit more specific for curly textured hair Kaolin clay coconut oil and apple cider vinegar. All right Really liking these ingredients. Let's give it a smell They're just so strong. I Thought there had to have been one person in that production meeting I was like and everyone just looked at Rajee like no, we think it's perfect Rajee. We think it's perfect You should listen to the intern consistency is Like a clay, you know, it's pretty thick orangey beige color. It's like spread it on both sides of my hair and it wasn't That easy to detangle with but it was much better than the mint condition So I put in my hair and left it on for 20 minutes that I rinsed it out Once I rinsed it out I was pleasantly surprised to see that my curls actually looked very moisturized. They did look defined It was very shiny. So I was pleased with the mask After I rinsed out my mask now time to apply a Styling product. So of course I had to get the gel I wasn't really interested in the styling milk because usually milks Don't do much for my hair. They don't have enough hold or enough moisture So I was like and it had silicone. So it was definitely a pass for me But the gel is called tough cookie. Love it clever cookie lion. I get it but the styling defining gel supposed to slick shape and define for curly and coily hair and infused with Biobub flaxseed and castor oil Every time I sniff these I get a slight headache. Oh I'm not even that sensitive to smells. So if you're someone that's like really sensitive to scents and smells fragrances Don't even look at these products when you're in target. Just like run past them But it has a very watery Consistency it did feel good applying to my hair I feel it does have actually kind of a good slip for being a styling product and for being A gel I was able to rake it in smooth it scrunch it and get some good definition and it looked pretty promising Just off of first impression Then I had dried about 85% and then it was time to diffuse grab my diffuser on medium low heat I diffused it. This is how my hair turned out Alright, the gel dried to a nice cast give me a good hold for definition and Fortunately when I smelled my hair it didn't Really smell too strong like the scent doesn't last forever. So that was good And I really liked how to find my curls looked So far so good. The next product I wanted to try is her leave-in conditioner called Ryder dye Love the name and this is a detangling leave-in conditioner The tango condition protect for all hair types and it's a spray leave-in I did try this on day two when my hair was a little bit more dry So starting off on refreshed damp curls. I just added some water then I grabbed my Ryder dye leave-in conditioners spritzing it all over my hair and even the leave-in has this Darn scent somebody was so in love with this scent. They were like put it in everything just sprinkle a little bit in everything But after I will say my curls looked very shiny and very moisturized and I was able to detangle I usually never detangle on my refresh days, but I accidentally was just because it was a gliding through So I did like the slip in the leave-in and then I put on the gel So I raked in some more gel smooth and scrunched and these are my results looking very good. I got some volume I got a lot of definition. It looks a little extra shinier than it did on the first day I'm very Surprisingly pleased with both of these stylers aside from the smell But here's the funny thing about this gel the very first line it says always up for the challenge tough cookie never Crumbles or flakes and it's funny that there will be that bowl to put that on the package Because the number one complaint I've seen all over YouTube is that this gel flakes Everybody has actual video footage of just their shirts covered in white little speckles They could shake it out and you could see all these little white flakes all over the place Flake here than the friend that says I'll let you know if they're coming to your party So I was already really nervous about that, but I purposely wore black for you guys and I'm gonna shake it out extra hard To show you don't know why if anything I have more of white fur on here than I do white flakes But I mean I have a couple little dots But that's honestly like a normal thing with Amy product that I use especially on this day three hair So I've applied this gel three days in a row and that's the worst that I've seen It's just a couple flakes here and there I almost feel like left out, but then I thought maybe they are pairing it with the style milk Which does have silicone which could create product build-up and then maybe the cream and the gel Aren't friends which is very possible, but then I saw my friend Raina's video aka happy curl happy girl And she only used the gel and even she experienced flakes There goes my theory. I don't know I don't know why some people are getting flakes and some people aren't but the most Hilarious thing on this bottle is that it says use a nickel sized amount a nickel a Nickel-sized really girl. Is this for curly hair? Who is this claiming? Curly and coily hair it should just be illegal at this point to put a nickel size a dime size any type of metal coin sized amount as a suggestion on a bottle. We're not gonna do it We never are. We're gonna open this bottle and we're gonna scoop for our life and the last two products that I got in her line are the tph honey fresh a clarifying shampoo with moisture and Her make it rain a hydration rich conditioner. So let's hop back in the shower applying this to wet hair this shampoo Has the same Darn it smells like pine. It has willow bark extract aloe and honey Nothing sweet about this, but I did like that this one actually lathered So now I got my bubbling sensation I thought I felt more comfortable applying this to the lengths of my hair So I thought my hair is getting a really good clean now and once I rinse it out It did feel like squeaky clean not very moisturized even though my curls still looked nice But it was like an actual clarifying clean that I think is important to have every blue moon So I was actually satisfied with shampoo aside from the not preferable smell Moving on to the conditioner has aloe quinoa avocado oil and moringa oil. So now let's try to detangle with this one Alright Promising promising. I am seeing some good slip here. I'm liking it way more than the mint condition So this one I do feel like is for the actual lengths of your hair It had enough slip to where I felt comfortable Finger detangling here's how my curls looked after detangling both sides pretty moisturized defined. I'm happy with it So after that wash day I think I applied more of the leave-in conditioner and the gel and then yesterday I applied just the gel and then today I refreshed again with the leave-in conditioner and the gel and these are my results today I'm very happy with how defined my curls look. My curls are soft There's no crunch so I was able to get that hold and then diffuse it away to get to this look right here And I was happy to use it all week long And I don't smell the smell So as long as you can get past that initial application It eventually goes away So in conclusion should you run out and buy these products? Well, no not right now because we're all in quarantine and these products are not worth dying for Should you order them immediately? Probably if I had to like go back and repurchase I probably would only buy the gel I don't know why I didn't get the flaking results that so many other people did but it worked really well for me The edge control Let's look It's feeling a little soft already, so I don't know if this would be like a long lasting edge control update the edge control Did not last it's already done. It's only been a couple hours Anything the edge control might be flaking Now the rest of the line. I mean they did their job. I Think they worked. I just don't know if you need them because you can get these same type of results From other brands without getting a migraine from the smell If you happen to be over 50 years old and someone's grandma that likes the smell of strong cologne By golly, you're gonna love these products I just don't see anyone under the age of 20 wanting to smell like this Like you should be wanting to smell like bath and body works lotion. Those are the scents you should strive for Nothing like this. I mean I'm 30 and I don't like this Smell these products. Actually, I'm posting this video on my birthday I'll be 31 today. It's my birthday What do you know? Happy birthday to me? This wasn't a birthday video at all So those are all of my opinions about the TPH by Taraji line Let me know what you guys think are you one of the people that absolutely Hate these products or are you one of the token few that actually enjoy it? Let me know in the comments below and since today is my birthday I will gladly accept the free birthday gift of Giving this video a thumbs up hitting that subscribe button maybe following me on Instagram at miss beyond grenade and tiktok because We all just got to get on tiktok. So, you know, but all of those presses are highly welcome That's all I really want for my birthday. I post new videos every week So I'll see you guys next time. Thanks for watching beyond grenade today


great shending for the ceremonial bonding of the bill with district president said forever and ever. In the name of... For the living veterans who carry the stories and legacies of bravery and valor, especially of their fallen comrades. Through them, you learn the heroism of Filipinos, even the smallest and simplest contributions they gave for the motherland. Their presence is an honor for all of us.


Hey Okay, so I Know a lot of you people work a lot with notebooks, which is good, but As you probably know The work can be completely frustrating and monotonous and just crappy before you get a result So here's an example of I hate stand this way Here's an example of what you need to do to create that ugly 1980s bitmap thing in the middle So import a bunch of libraries We're gonna use map plot lib here use some obscure style To find your figure your axes and all that stuff and then set all your colors and you probably Don't just write this code You probably take hours to figure out exactly what you want And this is probably the simple version of hours or days worth of work And at the end of it you get this thing which is You know not really Not really bootstrap type like 2017 web design So wouldn't this be nicer? So pixie dust is an extension mainly written by a colleague of mine another developer advocate in my group and I just Implemented the mapping part he did all the tough part about reverse engineering Jupiter notebooks and figuring out how To write new Python code in the sort of inside the kernel and extend it in amazing ways So with pixie dust you get one command display and it takes your data frame Either spark data frame or pandas data frame and Gives you a gooey to work with it. You can make it a table you can do bar charts and line charts and scatter plots and histograms and adding support to Stash it to different databases that we support our favorite IBM databases on the cloud and Also do mapping and that's the focus of what I'm going to talk about So how many people do mapping on a daily basis geospatial work just a few good It's always part of the reason um, you know, you can do Obviously when you're going to do really high-end stuff you're going to get in and Customize it yourself and you're going to want the control you get with a lot of code Or the the kind of control you can only get with coding it yourself But if you're kind of new to it and you just want you know You have a latitude and longitude field in your data You want to see what it looks like or you want to do a lot of exploratory data analysis before you spend all that time on your final product The pixie dust extension can be a great way to just play around before you devote a lot of time to The custom code-based work and that applies to the charting the bar charting and the line charting as well so, you know, I think of pixie dust as a tool to sort of Give you just as much Or devote just as much time as you want to at the right stage of the project project so at the beginning of a Getting a beginning of a project when you just want to sort of get a feel for your data Look at a few things you don't want to have to stop Switch context and go and read books for three hours and figuring out like all the all the options in the PLT command All right, you want to sort of play with your data You want to be focused on your subject matter and understanding that and then when you get You know overlapping text and on your on your graphs and you want to fix that and really make that nice You can do save that all to the end when you're when you're just thinking and brainstorming You want some easy-to-use tool and This looks pretty good it actually right out of the box So I'm gonna talk a little bit. So that's the problem. I think this is a great solution to that It's an open pixie dust in an opening source extension. We're looking for lots of help with making it better and You don't have to run it on IBM cloud I'll talk a little bit about that it can just run on its own in Jupiter You can download Jupiter notebooks set everything up yourself and go yourself and use it But let me talk a little bit about what we do so I'm in I'm a developer advocate for the Watson data platform Which is a combination we used last year. We were cloud data services We're responsible for all the online databases managed databases that IBM offers a DB to on cloud and cloud in great no sequel database and dash DB column data store things like that and This year we kind of merged with cloud and Watson a little bit and our responsibility is more Now it's more than databases and analytics and we're talking more about some of the cognitive stuff from Watson But the you can't really read this back there But the core pieces of what we do our data engineering data science analysis and app development and we try to bring those all together so Eliminate a lot of the friction of starting of doing all that stuff yourself and have it all in one in one managed service offering so You know That's the whole big picture and then we have data services that we're adding like we bought the weather company last year and You know making it as big companies do a one-stop shop But today I'm just going to talk about data science really and the flagship offering there is Oh forgot to do my animations So yeah, we got a lot of weather data from buying weather company and Twitter Partnership and adding Watson machine learning stuff and geo is my specialty So data science our main offering flagship offering in data science is called the data science experience not very creative And we call it DSX But all DSX really is is Real convenience tool it combines gives you a web-based interface to a Jupyter notebook and it fires up spark instances automatically along with object storage, which is kind of like Amazon S3 so as soon as you start up a project in DSX you have spark Place to store files and a Jupyter notebook environment running right away Which is a really nice thing if you're well you most of you sounds like you probably have set that up on your own and That can be no fun so So for those of you who don't know much about notebooks Just talk about so a Jupyter notebook is Not just a coding environment, but it's also a place where you can combine code with markdown text and Interactive HTML to really create Final presentation product around around your data engineering and data science work Started off the idea started off, you know hundreds of years ago scientists have been documenting their work for a long time and They'd write notebooks. That's where the name came from So you'd have all these scientific notebooks where people are writing down their experimental results and drawing little graphs and things like that and Then I forget who invented MATLAB Carl I can't remember this name, but this is amazing guy We owe a lot to MATLAB took the idea of this sort of analog notebooks and brought it into the digital world back in maybe the 80s, but I think the 90s and the MATLAB notebook is really the Probably the direct heritage of Jupyter notebooks You could do a lot of coding in there and get you know results right away in a in a graph and a visualization put in pictures and helper things and MATLAB is still an amazing product and So out of that grew a whole sort of family of data science notebook types. There's not just Jupyter. There's Zeppelin and some other things but Since we since our company Focused on supporting Jupyter. That's what we built pixie dust for And I'm talking about visualizations and particularly map visualization But there are a lot of other pieces to pixie dust which make your Jupyter notebook work a little bit more pleasant Package manager it can import while I'm going to talk about all these very quickly because I'm already almost halfway through package management visualization cloud integration a scala bridge, which is really cool I'll extensibility embedded apps so the package manager Can install spark packages or jars without modifying a config file Just we do that. That's really nice one simple API for display which I'm going to talk more about Data export into files CSV JSON XML or your favorite online cloud IBM database Scala bridge if you use this, I don't do scala So I don't know how amazing this is but I hear that sharing variables between Python and scala You know if you want to use a library really good scala library, but you're working in Python You can go back and forth as an amazing feature Try to make this animate quickly so I can go through it quickly Extensibility with HTML jcss and javascript And embedded apps, so this is something we're building so We're still building this out right now. So once you're able to sort of programmatically control your data frame and build some of these graphics Why not construct an app? Why not really take advantage of the DOM and build out a whole? Basically a whole web web application within your Jupyter notebook Which is fed live from dynamic data from data frames It's all based on the fact that you have these data frames these objects variable objects some stored in your Jupyter notebook that can Be exposed and operated on computationally and Then rendered with anything you can do in HTML and javascript to CSS CSS So now I'm going to switch to a demo Let's hope everything works well Sorry, this is a little bit blurry in the background so this is the data science experience and You'll see it's not very the fact that it's Jupyter isn't hidden very much Everything below here is pretty much like the Jupyter notebook. You'll see on your desktop So I'm just going to I have some code here You can install it from Pi Pi, so I commented out pip install pixie dust import pixie dust So we bring in this library So you've got two mapping libraries in here Google Maps and Map box and that's what I'm going to talk about mainly So Google Maps has a nice little developer API for letting you make maps based on named named fields So let's say you have a bunch of international data and you have country names and you have values in another field That's what Google Maps is good at or you have a US data And you have state or county names and you have values you want to map That's what Google Maps is good at map box is better at mapping data with geographic coordinates Whoop so I forgot to talk a little bit about this so the first thing we do we import pixie dust We run the pixie dust comes with a few sample data sets built in which I'm going to take advantage of So if you run the sample data command with no no parameter it returns a list showing you the data sets available I'm going to grab the total population by country data set from the UN or from the World Bank that I have in here And that was number three. So I run sample data again with the value of three It creates a spark data frame And then I run the display command with the data frame as the single parameter And you'll see this sweet looking map with no code And not just a map, but as you hover over it pops up pops up the name of the The field name and the value in this case This is a nice exam. Obviously. I use good sample data So you pop up the name of the country and the population value you probably can't see back there And as you move over here You'll see this is all this is in us. This is all directly from the Google Maps API So all we're really doing here is feeding the Google Maps JavaScript library, which is all in this cell with the data frame and I'll show you so If you go in here, there are options here. I could have given the map a title so global Population And this is where I picked out my fields. This is a lot more fun than writing code so you can just drag and drop these guys here and Here's an important thing So you can choose what sampling of your data to use So here I'm going to choose that I'm all this has to happen in memory So you don't want to use a terabyte of data in your browser So you can pick the number of rows to display probably I'm using one thousand right now Which covers all the countries in the world so that that actually grabs all the data But if you had millions of records, you know that you were guaranteed to only get back a thousand In your browser in memory and you could up that to ten thousand which would probably be fine But I know this works for this and one thing to note about that. It's not the number of rows that are going to come back are not The number of rows in your data set, but it's the number of rows after you do this Aggregation command of some count or something like that so you can actually operate on the whole data set and As long as you know that less than this amount of rows is going to be the result so that's cool, but You know if you're doing real work you probably have Data with latitudes and longitudes in it So I'm gonna I just pulled down a few months worth of home sales data from red friend one day and use that to build a Another sample data set we put in here So I'm gonna pull that into a spark data frame really quick and I'm gonna run this Display command again How much time do I have and ooh we get a nice so pixie dust fires up the Grabs the map box client-side JavaScript library takes all the data transforms it into Geo JSON As you heard Mike Bostock talk a little bit about Because D3 uses Geo JSON as a spatial data format So does map boxes client-side library Translates it into Geo JSON add some basic Styling styling thematic styling Cartographic Whatever you want to call it. It's a JSON file that describes how to cartographically style the points And then it also uses map box to pull in this base street layer underneath for some context So instead of just getting a map with your data back you actually get all the streets for free so these are So it's it's doing a little bit of deconfliction for to give you a clean map and it's clustering points If they overlap so as you move out, you'll see all these numbers are how many points are clustered there But as you zoom in you'll get individual points, and then you can see the price of the home sale So these are all home sales over a million dollars in northeastern Massachusetts in a over a few months period So you can start to see patterns what you can also do here. We have a few options. You can just see Just see all the points not thematically Just hover over get the values. I showed you that coropleth map, which is thematic or you can do a heat map more of a heat map style so that Spatial patterns jump out more visibly and That's all defined all you have to do is have a latitude and a longitude field in your data You drag those over here, and then you put some numeric field as your value to style on and Just like anything else you get some you get aggregation there. Oh Forgot to show you so You'll need a free You'll need a free Access token from map box to make this work. You can get that on their website the The help button explains all that Well, let me just quickly show you so in addition to the mapping which is sort of the most complex thing You can just click on the table button and see the data as a table and you can go back and forth So here's a nice if you've ever used notebooks the Tabular output is kind of crappy. So this is a much nicer way to see your data in a table and then you can go in here and the idea is that At any point in time you might want to see your data as any one of these types of visualizations I don't think this one will make sense really Yeah But it's kind of fun to play with this you see like the relationship between home price and number of bathrooms things like that And go back to the map. So That is the demo and all worked so for Programmers who I'd like to court your participation on the project As I mentioned earlier This all works off all the renderers. We're calling all these different visualization styles renderers They all work off of a spark data frame Which is exposed to the code and in my case in mapping I need to translate that spark data frame in the GOJ sign because that's sort of the lingua franca of web-based mapping and I Know if you chose a thematic coropleth style map I need to quickly Generate five quantiles Just chose that because that's the most common thing you do that Which is obviously in a really easy thing for for Python to do and then we So the data is in Geo JSON the styling the credit graphic styling is in another Style type of JSON file we create that and then we combine it all into a ginger to template So pixie does adopted ginger to as a templating engine so you can use variables. You don't just have to spit out html You can reference variables from your Python code within the html to bring data and and Then we show it all in the output of a notebook cell And the magic of notebook cells is that you can embed any html JavaScript and CSS inside them So you can do amazing things you can take that as far as you want and we're pushing it pretty much as hard as you can In our case Only for the mapping for some reason map boxes Library doesn't like being embedded in a div so you have to had to put it in an iframe But that's so that happens So we have an iframe that gets shown before we embed the map view dot html inside that iframe and Then we just as I mentioned before we call the base mapping service from map box to show a really pretty street map underneath so future of this particular part of pixie dust is probably adding more support for Other companies maybe a Esri support for mapping if you want to in addition to the map box and Google Right now. We're just doing points. It would be nice to support polygons And then do you have more cartographic visualization options like a lot of data not a lot of natural occurring data like weather patterns or Hurricanes or sort of erosion erosion likelihood is more suited to a sort of a Hexbin type view rather than a Rather than a hard line view points points lines and polygons are really meant for Manmade features not really environmental things like rainfall patterns and things like that So having some support for continuously changing data visualizations is is In the future and then animated visualization So if you want to model if you want to see plume dispersion That's something pretty big now with all the with all the things happening in subways and or you know flooding The way water disperses across the surface those are the kind of things those are the kind of scientific areas you'd want and animated Spatial temporal visualization and that's that's a lot harder than what's happened so far, so please help and That's what I've got so go out and use pixie dust install it try out data science Data science experience or try it on your own in your local notebooks and Let me know how you like it or if you want to get started helping us write some code Thanks


Okay. Thank you. So, welcome everybody. For the sake of those who are joining for the first time today, my name is Tito, and I'm leading cyber administrators attached to the University of Oslo. I'm based in Nairobi. So, we want to continue the topic that we heard last week that is LXD. And LXD is an engine. It's an engine that runs containers, you know. It's just another, you know, we have Docker. Docker is very popular.  So, LXD is an engine that runs Linux containers or rather LXD because LXD stands for Linux containers. Docker containers are very slim. They do what you want them to do. They don't have much packages in them, while LXD containers have libraries. It emulates a whole complete operating system. So, last week we talked about how you could manage LXD containers with LXD client. Yeah, it's a tool that interacts with LXD engine with over the API. LXD engine exposes an API. It's exposing over the Unix socket, or you can expose that also over the network. But then when you run LXD commands, normally from within the host, you are interacting with LXD engine over the API, you know, Unix socket clients. Yeah. So, and that socket is sitting. Are you all seeing my screen? Yes, we can see your screen. Okay. It's somewhere in VAR, SNAP, I don't know, LXD. Let's check what is there. Somewhere here.  You can do pretty much everything. The surrounding LXD system, you can create containers, stop containers, restart containers, and you can run, you can do things within those containers. And that was demonstrated last week. However, you could expose that API over the network. Let me just exit from this server and to LXD remote list. And you see I have around six remotes. There's one for images. It's hosting images remotely. And there is these local units. This is now the Unix socket that I was talking about. You can use this API to interact with LXD containers locally. And then there is these, which is connecting to an LXD server running somewhere else. I have two remotes here that runs containers. One is main and another one is Octiplex. These other two are pretty much images repositories. So I could say LXD list and nominate the remotes that I want to say this one. And it will list containers that are running from this remote. So if I change that to the first one that we had here, this one, it will list different containers that are running on these other remotes. Notice that they are not the same. They are containers running on different systems, different server systems. So here, notice that I'm connecting not locally but over the network. So my local clients here is in this MacBook and I'm just running LXD clients here. It doesn't have, there's no LXD engine here. So those are the two ways that you can interact with LXD exposed API. So today we want to talk about Ansible. It's offering a way also that you can manage LXD clients. And our DHI is two server tools. We have two versions of the tools. We have tools that were running bash scripts and the tools that we are using Ansible to, you know, to manage our deployment. So the bash scripts really, if you get into the details is that it's using LXD command line within the scripts. You can, you know, if you go through the scripts, you notice that whenever something is whenever we wanted to do something within the container, we were connecting with LXD and then do things inside the container and then, you know, finish what we were doing. Yeah, that means it's using LXD clients, you know, under the hood. But with Ansible, we are not using LXD clients. How are we connecting with Ansible? That is something that we want to talk about also today. So I'm going to take you through our tools. And these are our tools. With these tools, you can do deploy DHI's tool and its components, you know, application stack, you know, it has one database and then the instance itself, and then other optional items like proxy and monitoring. You can pretty much deploy that with Ansible. So Ansible itself has building blocks. It has items, things that build, makes Ansible complete. And one of those things is modules. I'm going to just edit one of the files that we have here. It has a list of tasks like this one. It has a list of tasks. And on the very top is just a task, the name of your task. And then there is that a few directives here, like become directive. You instructing Ansible that within this task, the task is ending down here. You want to become, you want to innovate rights. That is the purpose of this line here. And that also you could define variables within that task. And then this one here is the module. This one here is one of the modules that I wanted to talk about. It's a building block of Ansible. And what are the modules? The modules are really called written and they are performing particular tasks. Like this module here, its main purpose is just to create container. It's LXP container. It's used to create container. And it has so many things that you're just creating container, but then it has attributes that you want your created container to have. If you follow through this one task here is that you could even state devices that you want for the created container. And this is just one of them. You can also say add other device that you want your created container to have. And you can specify where you want to get your images plus other parameters, as you can see here. So this is just one of the modules. And if we check another task here, is that it has so many tasks. You can see it's a list of, it's a YAML syntax, arranging tasks into lists. You know, this is one of the tasks and then this is another one. And the list goes down, down, down, down, down until I guess to the very end.  I see your hand raised. This question that has been thinking about for a long time. So I know Ansible, it was developed by Red Hat, right? So now do you think any time maybe in the future these guys from Red Hat might want to push a license on Ansible? What will happen with this installation in the future? Will it remain open source for a long time or for eternity? One is that Ansible is open source and major players within Ansible world is Red Hat. They're starting the Ansible thing. But then if you go to the community and even list the modules that are currently available out there, then you notice that core modules, the core modules of Ansible are nothing compared to the community modules. So it's open source. It's something that is community oriented. If I open another tab here and say Ansible doc and then I want to list type modules. See, sorry, type modules. Ansible doc and then type module or you can just Ansible doc and then list because it defaults to modules. This will give us so many modules. And the way they are organized is that they have fully qualified module name. And they are, you see the first one that we see here is just Amazon AWS EC2 modules and there are so many. There are so many, you know, these are open source and they are not even developed by Red Hat themselves. These are developed by Amazon AWS and after that we have Ansible built in here, you see. These are now the ones that comes with them with a default installed for Ansible. These are the building modules. And after that, we have other modules that are developed by different players. Like AWS here, AWS is, there's another way also you can manage Ansible using Ansible Tower. You all know Ansible Tower. It's web interface that you can interact and manage your Ansible host from it. You know, you can log in to the Ansible Tower and then you can just pretty much do things in an interactive manner. You don't use command line. Right now, our tools are using Ansible command line but Ansible Tower is a tool that is developed by Red Hat and it's licensed. You cannot, it's under the license but then AWS is the open source version of it. You see here and it has modules also surrounding the same. Yeah, so I think Ansible, major players that do develop Ansible are Red Hat and they, it is something that it's outsourced, it's an open source. Anybody that wants to develop their staff on top of Ansible can do that. And that is why you are able to see all these modules that we have right now here and the list goes on and on. Like in our tools, the modules that we use are community general modules. We just try and see if I can, community general. Yeah, these are the modules that we are leveraging, that we are using. And these modules are developed by community but they're not even hooked to Red Hat themselves. They just give you the co-utilities but then everything else that you want to do, you can do yourself. Okay, I think that's enough. At least we should say that we are safe then. Can you confirm that we are okay for the next generation using Ansible? The good thing is right now Ansible is open source too. It's not proprietary. So when we were at that, at your question, we were able to see modules that are available for us because we were talking about modules. So when we get back to this, you see Ansible's built-in set back, set fact, it's a built-in module meaning it comes with the initial install of Ansible. And one of the modules that I can use to demonstrate what modules mean, what we talk about when we talk about module, what we mean is the ACT module. Normally, when you're setting up something, say on a Linux system or on a Red Hat system, you manage your packages pretty much with ACT, right?  It can be, say, Tomcat 9 or something that you are dealing with. And that pulls the package from the apt repository and it installs into your system. So this task here that I've just highlighted is using the same apt module. And you just give the name of the app packages that you want to install. And this is a list. You can just have it this way or you could even make it nicer by saying that the modules that I want to install are name, you just give this text a list, you know, a list of items that you want to to install. And then you put your list here like now and zip. And then another one is Tomcat 9. And then another one is Tomcat 9. You know, something like this. This, it does the same thing. It does the same thing. You can, mine is just done within single line, but you can put it this way. It also work. So it will use apt module and then the name of the packages that you want to install. And then it will just iterate through the list and install all those packages that you want. But then this is just another version that you could make this look like. Yeah, so this is another module here. It's called file module. And the reason why you see them very simple that they just portrait in a very simple way is that they're Ansible built-in modules. Otherwise, another way you can write this is like this. Ansible built-in apt. This is the fully qualified collection name. You just mean you just put in writing it in a way that it has fully qualified collection name. Otherwise, you could just write it this way and it will work because it is a built-in module. This way you can also make this look like this Ansible built-in file and it will work. So for the built-in modules like file here, apt here and even start here, you don't have to specify fully qualified collection name. But then there are other modules that are not built-in. For instance, the one that we checked in a few seconds, this one, is not a built-in module. That's why you need to really define the fully qualified collection name. It's from community collection and community general LXD container. So that is one of the built-in blocks of Ansible modules. And another one is connection. One of the reasons why we wanted to have tools that's using Ansible is because of the connection. Our batch clips that we had before can deploy the HHS-2 instance. It's 15 hours. But from within the same host, what if you are in an environment where you have a database running on its own dedicated server or a virtual machine, you have proxy sitting somewhere else, you have application server sitting somewhere else and also monitoring server sitting somewhere else. And then you are given a central server in Ansible, we call it controller. And you're told that we want you to deploy the HHS-2 and you have these components over the network. You will not be able to use your, I mean our batch clips in that scenario. And that is where Ansible comes in. It supports connection, it supports different connections. You know, one is SSH. That if you are on an environment like that, you can connect to these components with SSH and then do things on those instances, but over SSH.  And you want to deploy your HHS-2 from just into that host. You don't even want to deploy the HHS-2 within content. You just want to deploy the HHS-2 into that host, you know, boombox. And in that scenario, you use local connection. That means wherever connections that you are making it to the local host, you don't connect to something that is sitting somewhere. Or you could even connect to LXD instance. You could even connect to the LXD engine with Ansible. That is what we are advocating, that whenever you are setting up your LXD in a host, you use LXD containers. That is the third connection. And also, Docker, it supports a connection plugin that enables you to interact with Docker instances so that you can spawn any Docker container name that you want and then you do things within that container. And we could even list supported connection plugins with Ansible, Ansible doc, and then list. We are listing, we just want to list, and then of type connection. And this is a list of connection plugins that are supported. The very first one is local connection plugin. See, and you see as I said here. And I know Docker is somewhere here. And there's also HTTP API. You know, you can connect to an HTTP API endpoint and do stuff with Ansible. It's something that I'm currently even working on with Zabix because I want to enable users support, you know, my tools, I want my tools to support Docker monitoring, Zabix monitoring. Right now we are using Union and we want to explore how we can incorporate Zabix into our tools. And here is LXD. This is the one that is enabling us interact with LXD hosts. You see LXC here. It's not even the only way you could interact with LXD hosts. You can also use LXC if you want. And if you have Kubernetes, you can use Ctl also, you know. Docker, you know, you can manage Podman containers. What is Kubernetes? Sorry. You have Podman connection plugin. And all these other connection plugins are supported. So right now our tools are supporting three connection plugins that is LXD, local and SSH. If we just see what we have with LXD.yaml tasks, see here that we are instructing this particular task that connection plugin that we want to use is local. Because when you are creating a container, you are just creating it within the local host that you are sitting on. That is why you are not connecting anywhere.  But other things that runs, you know, to do things within containers, like updates, and pretty much things that you do. Even our task here is using LXD plugin. It's using LXD connection to interact with those containers. Yeah. That is another thing that you could have a discussion around Ansible. And there's a variable that we are enabling users to decide which connection plugin they want to use. It's not something I'd call it. You could change within inventory host. There's a variable here where you can define the type of connection that you want to use. It's called LXD connection here and we are here, as you can see. So this connection plugin, this is the default. We want to support LXD by default.  Otherwise, you could change these to SSH. And in future, we want to include Docker and even other things that comes along the way. Something else that we want to talk about that comes when you are talking about Ansible is inventory. What is inventory? Inventory is a list of servers. With Ansible, you can manage a long list of servers. And those servers are defined within an inventory file. Those list of servers are defined within the inventory file. So this is our inventory here, as you can see. And at the very top here, up to this line, is a list of servers. And they are grouped. We have web servers put under that. And then we have database servers and then we have instances. These are just two application instances. We create containers running particular instance and then monitoring. For monitoring, we are using union right now, but in future we want to add also subjects. It's something that I'm working on right now. Now these files are just variables, you know. You could define your variables within the inventory file and there are so many other places that you could define your variables in Ansible. And let me just get to this directory. Yeah. You see, these are all places you could define your variables in. And we, we, in our standard install, we do group Ansible variables within one location that is an inventory file. But there are so many other places like more than 23 other places that you could define your variables. Okay. We want to have them done on a single file here. Inventory host file. We have it open here. Yeah. And then there are filters. Filters is just an Ansible way that enables you to manipulate data when you are running your playbook. And for instance here, you have M64, you have variables that are false, like this one created DB, it's yes, it's either yes or no, you know. And you want these variables to always be a Boolean. You want it to be either true or false, always. And for you to do that, you can use a Boolean filter. Let me just see where I've used that. And here, here we are. You see here, we have this variable, it's create database. But then we want to ensure that this variable that we have here is always a true or false. You know, we want to make sure that it's a Boolean all the time. So this is a filter. It enables you to manipulate your data. This is also being used with the two templates. We could spend a whole hour talking about Ansible filters. And let's see if we can list even things Ansible doc. I don't know if you have type filters. We have type filters Ansible doc of type filters. And then you can just list. See, we have so many filters. Filters helps you manipulate data as you are running your playbooks. And then finally, there are other things like test, you know, that you could use with Ansible. We can talk about that in future. But right now, I want to just give you a brief demonstration on how you could create LXD containers with Ansible. And then after creating those containers, you can do things within those containers. It is what we are doing with Ansible scripts. We are creating containers, and then we do things inside those containers, which is installing Postgres. When we are dealing with Postgres container, installing Tomcat 9 when we are dealing with Tomcat container, right? Any question up to that point? Hello Tito, can you hear me? Yes. Okay, this is actually, thank you for taking us through. But I have been having a hard time. Connect the files. I think that's one of the most that I'm getting hard. Like, before when we use the LXD, we are being shown that this file connects here and when it may be. This file is going to that file. It's going to reveal a certain DC command and the story. So you can precisely recall that after when one line is going to go to another line, maybe it is going to look for another file. So I was also trying hard to know in Ansible. Is it also working in that way? Because there have been some parties and probably we might like to look to those files and see what content that they are there. Yes. Yeah, that is what happens with Ansible. When you, I'm actually sitting on my project directory here, as you can see. And within this project directory, there is Ansible configuration file here, Ansible CFG. Within this file, you can instruct Ansible where you have your playbooks. You can instruct Ansible where you have your roles. I've not even talked about roles, you know, and the main playbook that we run here is the HS2.yaml. It's just few contents of the HS2.yaml. This is the playbook that you run and it deploys the HS2 application stack for you. And as you can see, it is grouped into roles. You see there is a role that deals with Postgres and then there is a role that deals with the HS2. And then the last two are proxy and monitoring. This last two roles is going to set up proxy for you. It's not mandatory, it's optional. If you have a role, maybe you have your proxy configurations managed somewhere else and you just want to run your application server here. Then you don't have to, you don't have to run this kind of role. And then there is also monitoring. Maybe you have your already established monitoring infrastructure in your environment. And you just want to do that manually. Then you don't need to include this role. This is just a way of grouping tasks that are related to one another. Like here, we have Postgres role. These are tasks that are related in a way that, you know, it surrounds setting up Postgres, connecting to that Postgres instance, either with NXD or as I said, and installing Postgres from, you know, maybe you can just even check what is really happening within this Postgres instance. What is Postgres role doing? And these roles are within roles directory, you know, it is the default path that you could potentially put down to your roles. And this content here, we have this. So I'm told by default from the project directory knows that I am to look for the roles from within this directory.  When that is completed, it gets to DHS2 role, you know, and to proxy and finally to monitor it. This order is not to be, you know, you cannot today decide that you want to have these on top like here. Because your DHS2 role depends on having Postgres container setup. And then you have to start that your DHS2 setup not to, you know, create, sorry, not to use this database here. You want to use some database running elsewhere. But then if you're going to be using a database defined here, then it means your Postgres role needs to come fast. Because that way it's going to connect to Postgres, your Ansible is going to connect to your Postgres instance, create a database. And then if you create a database variable is true, then it will create a database there and then create a database role and then that role is going to have user name and password. And once that is set up, even the plugins that we normally support, you know, in our standard DHS2 installation, it will create all those. And then after that, it goes to creating your DHS2. And at that moment, the database is already set up, it's just waiting for connections. And then sadly is proxy. Once you have your DHS2 setup correctly, everything works well and Postgres is set up and it works well. You can now move on to proxy because proxy at the end of the day is connecting to your instances. Your instances are connecting to Postgres. So it follows the dependency. Like your DHS2 role is depending on Postgres. So Postgres needs to come fast.  You want to manage, you want to monitor all these instances. So that's why it comes last. Otherwise, if this one comes fast and you don't have your containers that runs Postgres DHS2 and proxy, you know, it will fail because it wants to connect to those instances. So that's why it comes last on this list. And then we get to one of the roles, say P, Postgres, Pim, Roles, Postgres, Task, and then Main. This is the Main. Main is actually the, it's the find that Ansible files within the role. It doesn't see other files. It sees the Main. And then within the Main, you call other files now. You call other files within the Main. And then it follows this order. Okay. It follows this order that you define that it will, it will include tasks specific to the connection that you used. And then after that, it's these are the couple of tasks you see Postgres installed. And the connection that you're using, there are things that needs to happen. That is Postgres SQL installation. Even if you're using connection, as I said, or connection LXT, you need to install Ansible, sorry, you need to install Postgres there. You need to sort of update and then install those packages and run tasks within that instant irrespective of whether it's a container or an integrated host. These are, these are the common tasks. And then the first tasks here are very specific to the type of connection that you're using. This is the, this is a variable.  It's a way that we are including, including tasks dynamically. Because if you go to this directory here that we talking about, I just did it right now here is just get into that directory and list content. We have LXD.yamon and then you have this asset.yamon. So if your Ansible connection is as I said, then this playbook is going to be included. You see, and it has things. Sorry. I said there's a set instead of LXD. If your Ansible connection is LXD, this playbook is going to be called. And these are the things that are specific to, they are very specific to the LXD connection that if your connection is LXD then you need to create container. This is why this task here, LXD container create and then after that it does some other tasks within that container. Otherwise, if your Ansible connection is as such, then this, this is going to be called in that order. And these are the things that I want to do with the remote host that I'm connecting with as I said, see notice that I want to enable firewall, but before that I enable SSHB port 22. This is the default. Otherwise, it needs to check SSHB for variable. Otherwise, if that is not defined, then it's using the default which is 22. So these tasks are executed in the order that your playbook is actually calling them. And there is dependencies. I don't know if that answers your question. Yes, yes, a little bit. I think I'll be having, I need to take my time to go through each and every other. Because I think the most important we also have seen it, we need to know the order which is executed the test and which needs to be executed last. That's the most important. So, yeah, let's, because I see time is moving very fast. Let's just stop through the, the demonstration real quick so that things that we're doing here would make sense. I'm going to SSHB to my local host here, local server running here. And then I have some few playbooks here. I'm going to delete this test container. Let's see, remove test. And then we're going to spin it up with Ansible. I'm going to use, we have two playbooks here. One is create container. See this. And on very top of it, we have var prompt. It's going to prompt us to supply the container name. And then it's going to prompt us to supply the containers IP address, you know, whatever that we want. But then notice that within this var prompt, they are defaults. If you don't do anything, you just press enter, then it's going to default to DHS2. It's going to default to default container name DHS2. And if you don't do anything also, it's going to default to the IP address 1.30. This is another way of defining your variables. This is a var prompt. It's prompting user to supply variables during the play runtime. And then we have var. These are variables that you want to statically, you know, you want to force them to, you're defining them statically here. That Ansible connection is going to be local. And then your network is this, you know, just for demonstration purpose. Otherwise, I have set up a network prior to this call, you know, and Ansible, I have initiated my LXD environment, and it's using this network, you know. And then notice that even within this, I am doing some, I'm adding some other DHS2 functions that gives me a gateway out of the LXD network, you know. And things like name here is taking a variables that we just defined here. We said this is container name. It's prompting us to supply container name. And this is where it starts being used within the same playbook. And also IP address. This is a prompt that we got here. IP address, and it's going to use it down here. Yeah. So if we run this Ansible playbook create container. You see it's prompting me to give container name. I can say server admin. If I don't supply name here, it should default to DHS2. And then it asks me for the IP address. Notice that it defaults to the 30, but then you can put something else say 80. And then it will create my container based on these details that I supplied here. So it's creating container now. So we are not using LXC here. LXC command like tune, but we're using Ansible. And you see now container is created. And if I do LXC list, we see server admin container is created. And it has the address that we just supplied here. And this is really what's happening within my Ansible scripts. I'm creating containers with with with with with this module. This module here it's called Ansible Community General LXT. This is the module that is helping you to create container. And you are delegating to local host and these are much more things that you can do Ansible and one of them is delegated to that you want this task to run within my local local computer. I'm not connecting anywhere to create container. I'm just connecting to myself to create this this container. Okay. So container is created now server admin container is created, but then in my in our scripts we want to do things within that container we want to install Tomcat 9. We want to install Postgres for instance we want to install a new name and so many other things we want to run firewall you know. Yeah, so this is another another role that another task that I have here in playbook that I have installed packages this one here. So we have this it's going to install Tomcat 9 for instance for demonstration Tomcat 9 and notice that connection that we are having is LXT now it's not just local it's LXT. So within this very specific task, we are using LXT. You can argue also that up here we have local connection, but that is defined, you know, the way Ansible works is that variables that are defined within a task are going to override. They are going to, you know, override Ansible that are defined on top of the play, you know, on the play level. These are the task specific variables they take lead. So if I just try is accessing this endpoint on my browser. Right now. Tomcat endpoint 8080. It's nothing. There's not that service is not listening. It's not installed, so to speak. But then after running this against I want to delegate to this. You see, I delegated to host before but I want to delegate to server admin container and run Ansible playbook install packages. This is connecting to our Tomcat container. Sorry, our server admin container and it's installing Tomcat 9. That is what we do to our containers with the Ansible scripts. We are installing things. And even add any security running uncomplicated firewalls within containers. Exposing only those ports that we want to be export from those containers. Okay. Another security add any that we do within our Ansible scripts with Ansible you can interact with the firewall can pretty much interact with everything within within your host.  And then what happens to the group access to that file. What happens to other, you know, other other access to that file. You can also start Ansible that you want those pretty defined, you know, in detail, permission defined in detail for a file you can do that with Ansible. And it's done. So right now if I go to my browser and access 8080, it works. It means we have Tomcat installed on that. This is just for demonstration but in production environment, we installed Tomcat, we, we even disabled this page, you know, the default Tomcat page and then we get, we do pretty much so many things it's a custom kind of custom configured Tomcat instance that suits our environment. The first task that we did here is just getting container and the second one is doing things within that container and we've just installed Tomcat nine and it's worked. So today we've just checked Ansible NXD and had a very brief demonstration on how it works. Unless the time is up, we can take a few questions and then we can, we can call it a day. You're breaking? Do you guys hear him well? I personally can't hear him. We are not hearing him. Yeah. If we can have like this record and go back because there's too much information in a very few very limited time for me to debate if we can have like kind of record or if maybe you have CPT we can go back and try to learn more or to master what you have, you have shown that. Uh huh. Yeah, before we started this call we recorded, we recorded our sessions. They're going to be uploaded into YouTube. Yeah. Yes. So I want us to just can even repeat sessions like this talking about Ansible every now and then until we all of us really understand what really happens behind the scenes and generally speaking it's just getting container and then doing things within those containers. That is what we are doing with our installed scripts and those are the major things that I have demonstrated within this very short time. Any comments? For me, no comments. I think it needs some more practicing. Because as the previous essay has a lot of learning over a few times, I think we need to do more practice on that. Okay. What do you want us to talk about next week? Yeah, of course I remember in one of the suggestions that I said earlier that we have been doing this server and the probably come up with the some automated script to help us quickly set up the DHS too. But one thing I think that's very important that you have to look at is how we can do it in offline. Like taking an example that you are going to a country that is totally offline. Maybe there is internet restriction, you can access the work.  I think that's another important thing that you might need your support. Okay, we can talk about that next week. I have something to talk about around that. We want to talk about what do we do in a gap environment. We went with Ansible and LXD. I'm going to talk about that, but with Ansible and LXD or just LXD, you know. And I'm going to talk about how you could set up DHS too within a container and then export that container into a file. And then you work with it either in a flash disk and then you can just log into the other server with a very fresh environment and just import that image. And it should have your old setup of DHS too. You don't need to install anything. It has your packages. It's just like you work with your working DHS to instance within a flash disk, bundled into an LXD container. Because if it is on your laptop and you can access to that server, you can just copy that file over as a search and just import as a container. And if you had set it up to have all those packages, it should just be having all those packages again. Is it not so? No, so I think Tito, what the question that he's asking, I think that... A gap environment. He's talking about a gap environment, right? Where you don't have any time. Say for instance, I log into this instance, okay? As I said, once again, 2.patsy.patsy.  So you basically have to like install the LXE in the local one. Yeah, I have assumed something. I have assumed that your... Yeah, that's exactly because you... That's an extra term. Yeah, but also I know I have actually used before that I mean the ISO image, the ISO image that has much packages that on a very remote environment you mount that ISO image and then you install your packages from that ISO image. I've used that before, but then you need to Okay, you have to prepare the ISO image of the LXE, okay, that's exactly what I'm trying to do.  I've used that before, that's another way. I think that answers this question because that exactly the next thing you might ask now is how do we create those ISO images? Okay, what? Yeah, it's a good, it's an interesting topic to talk about also. Also, there is as a search, how you can add an as a search, something that we can also talk about. So, I think we can enough, come up. Yes, I have my own question was that with Ansible, the web server that we have was and the engines, well I don't know if the Apache 2 is now working because it is working now. Yeah, it is working now. When we had our initial Ansible tool set up before, you remember the time that I demonstrated how you could set up the HRS tool with Ansible. At that time, we didn't have the Apache module was not working then, but then I have actually completed developing it and it works right now. So, within this, that's as a search, sorry, there is proxy. So, now, yeah, now even my install scripts right now are using Apache 2 because I was testing otherwise before we were using in the next. I'm also thinking of something like proxy, it's another proxy that's out there and it's very robust. Yeah, and right now you don't have to give full path of your, of your DHS 2.1 file, you can just give the fashion. As long as you have internet connection, it will pull the release file and then it will choose the version that you want. You can even change this to 2.9 and it will install your latest version. Right, so it's pretty much looking simple for the end user. However, you put the, if you don't want to use version and you have your own file, then you can say, you can say the HRS 2.1 file and give path to where you have your, your, your DHS 2.5. Yeah, for the cases of custom made, although you build your custom DHS 2.1 and you want to deploy it, then you can just put it here, like you want to deploy your DHS 2.1 from custom one file. Yeah, otherwise for the most use cases of public use cases, they want to just deploy DHS 2 instance developed from University of Oslo and they can just define the fashion that they want and boom, they get that. This, this goes up, this goes up as in, you cannot, you cannot deploy 2.9 and then take it back to 2.7 later on. No, because you can deploy 2.7 and then you go 2.8 or you can only upgrade, so to speak. Okay. So I think we can stop at that point today. Yeah, what do you think? So we, yes, yes, I think this is fine. Can we have both videos? Okay, I'll ask our, our channel manager, the one who's my manager is to channel to get all those videos to the, to the, to the channel. Yeah. But then they are recorded there, we have offline files that, that can just be uploaded to that channel. Okay. Yeah. Okay, thank you. Thank you for joining and please inform others to just be available on this call so that we can talk about so many things, so many other things. You can even talk about Linux, basic administration. You can, how you can navigate here and there within a very fresh install of Linux. Sure, sure. Thank you. I hope next time we'll be too many. Okay. Bye. Thank you for coming also. Thank you. Bye-bye. Bye.