I'm Marc Fontaine, and this is a behind-the-scenes look at the service design show. The show which helps you to stay one step ahead by talking to the people that are actually shaping the service design field. We talk about the current state of the industry, exciting new developments and the challenges up ahead. We bring you a brand new episode every two weeks on Thursday. Subscribe to our channel and make sure you don't miss any episode.


Well, what's going on guys got Kyle here relating sports cars and we are ripping five boxes of the new 2023 select UFC This one is for Mr. Neil. Good luck Neil. Let's see what we got Neil B luck some select I'm a fan of select no matter the sport man Let's see it some fights on right now. I think actually Yeah, probably. I don't know who's fine tonight, but probably There's a tricolor of Roman delize Tricolor not numbered. That's a rookie there Damon Jackson Funny gravely. We got and new rookie of Alex Pereira like that and new and Red is come. I have number to 149.  I have to 149 Yeah, I like that see I like it and new Jordan Levitt rookie good rookie there This one is global icons Charles Olivera and tricolor not numbered is Usman again Sensations rose. We got purple steep a that one is number to 99 That's me on the planet about to take on John Jones soon Yeery that's your boy as well. I know that Neil yeery and So 49 we got sparks Jersey Colby Covington are on the relic blue Covington to 49 and this one is Chris Barnett rookie number to 199 on the blue Chris Barnett. Oh, I sleep that one. I don't know why I sleep that one, but That's one here to 99. We got auto Colby Covington on the red auto I saw in there Colby to 99 and we got a Roman delize a rookie numbered up to 25 tie-dye 14 to 25 nice one there another rookie Love the tie-dye and we got Josh Emmett tricolor Sensations Marvin Vittori silver is Chail Sonnen Global icon John Lee Lee and silver die-cut rookie. This one is John Cassaniata They only have these die cuts in a team all of football interesting shape die cuts Yeah Carol France Yon and blue this one is Shogun Hua to 249 Maricio. This is orange rookie Jelton Maldinho to 49 Orange rookie. So on his auto octagon action Misha Tate kind of like that one as well Like the face next to the action shot. It's a silver Brandon Royville riding Neil box to good luck, sir FC select came out yesterday See some fire for you if you get your way grabbing some spots for Personals tomorrow those will go with Matt tomorrow wait If you are watching don't have too too much time left We are full on personal tonight, but Matt will be ripping those starting at 10 a.m. Tomorrow. So not far from now Not far at all from now There's a light green this one is number to 75. It's gonna be Julian Arosa rookie Julian Arosa that looks like gold Come on now and new is Matt Sarah and gold is going to be poyanna Viana Plyanna Viana on the gold numbered five out of ten Nice gold there take a gold See some green. Let's see some black as well. See some low numbers. This one is Vincent a luke silver Jersey And blue rookie is going to be Mario Batista the 249 auto coming It is hubby nice one there on the purple auto hubby Nurmagomedov 25 out of 49 nice hit there Very nice one there Neil Habib to 49 on the auto Would not mess with this guy Nice hit there Neil Very nice and white is Corey Sandhagan to 125 Nice to be there. There's a global icon to be And try color Jack Shore rookie of Panero There's purple Volkanoski nice one there number to 149 All right a pound-for-pound best right now Volk Jamal Hill we got Kamaru Usman on the die-cut silver Appreciate your Bradley grabbing a spot in the national break cons McGregor Purple is to 99 at Brad Tavares McGregor courtside or octagon side Let's say either and Tracy Cortez on the tricolor Does it think it was octagon side last year a Marav go icons and silver rookie Lucas Almeida Maybe that's like a snapshot could be instead of the I didn't say snapshot It's another Habib There's a tricolor Bryce Mitchell Auto this one is Alexander Rakic on the octagon action signatures not numbered Alexander Rakic silver auto Silver of Gerald Mish mere mere shard shard shard Box three That's what I said, I said the first time tricolor of dust and diamond poor yay Right you guys to left in one football Got about 20 minutes or so to try to keep filming this one up or else it will probably have to go tomorrow with with mr. Sam Global icons glover. We've got a red to 175. That's Virna Jendi roba rookie. There's a white rookie nice one here to 125 Alex Pereira Nice one there the former champ I'm assuming You're saying concourse is the horizontal from here is the What'd be concourse? Yeah, I know the Interesting interesting. Yeah Oh, this one does say octagon side. Yeah, there's difference this must be like a Snapshot, baby, we got blue Tyler Santos to one ninety nine Tyler Santos Yeah, no, if they're saying concourse is horizontal there definitely not correct there's a and new steep a Jeff Neil silver This one is auto rookie auto Kyler Phillips Kyler Phillips on the silver rookie auto not numbered and Teal teal for Neil the 249 rookie Pira Rodriguez Teal for Neil icon's mackayev and Irene Aldana tricolor Interesting maybe just released. Yeah, I feel like they don't they don't like put out like partial music or incorrect Nice one here. It's a 99. We've got Jersey auto first Jersey auto peoder yon It's a 99 there on the Jersey auto I'm wondering if it's something like that's what they thought it was gonna be silver silver It was changed that release. Yeah, maybe they did it. I just seems weird like right now. I'm selecting The concourse, you know what concourse looks like there's a Pablo Costa Tricolor pretty similar to what? Yeah Blue yon shounen number two one ninety nine Ricky Petrosky, we've got Leon Edwards nice one there to 25 tie-dye Leon Believe he's a champ right now the welterweight division Leon to 25 tie-dye fighter warn slash used Silver Chris Curtis rookie silver global icons pewter yon And I cut Dominic Reyes Friday. There's box three Neil got two more for you. Good luck, sir Box four select UFC came out yesterday Let's see some fire a really nice cup of ebato already Among the month this one is the 49 red Jersey auto Jessica Andrade Red to 49 there on the Jersey auto got another red. This one is the 175 Alex Morano light green is rookie Vierna Jonda Roba 75 rookie zebra Zebra it is Drew Dober on the zebra super short print there nice one Neil Love the zebras out of select man. Some of the best Drew Dober on the zebra global icons spider and Izzy on the whites Izzy to 125 Sensations we got a tricolor rookie of Ignacio Bahamondes Brandon Moreno blue 2199 Just lost the belt He lost to the only guy he's lost to ever I think it's like three times to him not great Guys got his number there's a tricolor Santiago punzan ebio Yeah, I've got you got me on that one Donnie I gotta be close right there's the 49 nice one here. We got Jersey auto, but Neil Dariouche It's a 49 red Jersey auto there Neil Dariouche Silver Alex Perez. Um, no, I don't think so Matthew. I Got it. I got a few more in front of you. I'm not gonna get to as well Sorry about that sir, but we will get Matt'll be back at 10 a.m. On this same channel He'll be ripping some more than since a luke you'll be one of the first three or four up in the morning I do apologize. But yeah, we were Don't have time for that. We're going till two 299 we got Derek Brunson red Jersey Derek Brunson and silver Raphael dos años.  All right, Neil box five. Good luck, sir Select UFC righty. Good luck Neil.  I think that's one of your boys We'll mag this one for you for sure sir. I asked for the one-of-one. We got it Nice one there Gaichi one-of-one on the UFC tag. That's sweet-looking Magnat for you nice one Neil Got silver Tracy Cortez. Yeah, not bad Randy not bad Take a one-of-one Don't take it auto coming down nice one here We got signatures Michael Bisbing on these signatures there Retired Michael Bisbing and Bryce Mitchell silver. There's a silver of Carla as sparsa and Dicut rookie this one is Chris Gutierrez silver Silver rookie die cut. Yeah, I think so too mad. He's definitely not too old. I mean Get it going There's some good guys in that division though There's a Leon nice one there to 125 white Leon Edwards He's all going here now. Nice hit on the 101. We were asking for it got the Habibado as well This one is blue Ozdemir to 249 and new is Zhang Wei Li And Mackenzie Dern gonna be blue to 199 icons figurado. We got thug rose not numbered tricolor Thug rose my favorite all-time is probably BJ Penn I grew up watching him. It's probably my favorite all-time current fighter It's a tricolor figurado. I like steep a He's kind of kind of near in the end probably though Gsp we got steep a silver. I like bulk too. I really like volt Mack or Matt There's auto to 75 gonna be rookie blue auto Chris Curtis bulk is a beast Chris Curtis there out of the 75 and we've got a mongo med or sorry Muhammad a Mochaev to 175 rookie Muhammad Mochaev last pack here Neil. I Saw your boy on the back. I know he's your boy It is Drake is due Plessie on the back. I know that's your boy Neil Drake is due Plessie number to 249 light blue the teal for Neil Alrighty sir, that'll do it for your five boxes select UFC Thank you so much Neil as always sir. We'll get those right out to you


I think tonight went great, so we actually improved almost nine points from our last meet 12 days ago. We had a lot of old things that we worked on cleaning up and scoring better. We had a couple new feats go out, so new tumbling passes, new acro. We actually had a 9.95 start value in our seven element, which is crazy for a second year team. And I think, yeah, they really showed up tonight and they really performed and they really executed. Tonight it was really just, like I said, kind of showing up and making sure they show up and they show out. So talented and I wish that we had the numbers to do, you know, everything we want to do and more. But the biggest lesson we learned is that staying resilient and working hard and trusting each other and trusting this process pays off. As well as stepping up, too. I think everyone this week really stepped up and they did their part as a team when we came together. So that was really good to see. See the shirt there. That's our motto. It's not a buzzword. We're trying to prove that in everything that we do, every practice, every meet. So I'm excited this week. We have a short turnaround again, so we have about five days until our next meet.


How to style a Breton stripe top French women style lookbook. Today I'm sharing how to style a Breton top with 10 different outfit ideas. It's the French women style classic I love to borrow season after season. Now the other day I was looking through my capsule wardrobe and I realized I've developed a bit of a thing for Breton tops. So I thought it was about time I shared how I styled them all. Hopefully this video will give you lots of outfit ideas and inspiration and I would love to hear which was your favorite look I put together in the comments section below. So without further ado, let me show you outfit idea number one. So I'm going to start today with the easiest and probably most classic way to style a Breton top with my midwashed denim jeans. You could go with darker denim or I particularly love even lighter denim. I think those sun bleached vintage style pairs of jeans work really nicely with a Breton top. The choice is yours. I just personally really love that blue denim sat against a blue striped Breton. Here you can see I've added a leather jacket to give the outfit a little bit more edge and my flats are pretty gentle so I think that makes a nice contrast. It's a classic way to wear the Breton top and with good reason because I don't think it ever gets old. It's easy, very much a throw on everyday kind of look that in my humble opinion never fails to look chic with that recognizable French woman style. It's funny how this hugely popular style was originally thought up to spot French sailors when they'd fallen overboard. Then of course, given a new lease of life courtesy of Coco Chanel in her 1917 collection and the rest as they say is fashion history. Now when I'm feeling the need to make my feel a little bit smarter, a really easy trick is just to add a blazer over the top. As you can see here, I've added my herringbone blazer but in all honesty, any blazer would work. I've married the tone of my blazer with my straight leg jeans that I got from and other stories, added my ankle boots and a little proscien style handbag to finish. The outfits are a long way from the sailors of Northern France but it's nice to know something they created is still loved over 100 years later. I tend to have at least one Breton top in my capsule wardrobe every single season. I really find it that versatile. In winter, when I want a slightly lighter toned overall look I like pairing them with this wool blend pair of trousers I got from Cezanne. In summer, I'd probably switch those out for a pair of chinos or maybe beige jeans. The effect is still the same. It's clean, it's crisp and hopefully it's got a sprinkle of French woman style. I've added my super affordable classic white trainers with this look and my tan leather handbag. I love tan against Breton stripes. It's one of my favorites. And to finish, I added this cute little headband I bought from an independent creator I found on Etsy. I shall link all the clothing I featured in this video in the description box below so you can find those at the end of this video. Now I'm hesitant to call this a trend as such but I've noticed a lot of women recently starting to wear their jumpers over their shoulders and tied in a knot at the front. Just one look at Instagram and you'll know what I mean. This look seems to be everywhere at the minute. Now I wouldn't necessarily say it's a typical French woman style. It's just a look that happens to be a bit of a thing right now. It's practical at least, always having a jumper to hand if it gets cold. And I actually really like this kind of effortless chic look. I sometimes tie mine together with a bubble hidden underneath. I'm all for looking chic but I would find it really annoying if it fell off my shoulders every five minutes. So as you can see, I've tied in that brown tone of my jumper with the tan leather belts, caramel flats and a camel handbag to finish. Now obviously you could switch up the color of the jumper or cardigan you want to integrate into an outfit like this. A great pop of color would give this outfit a whole other vibe but I think it would work equally well. A bit of a hopeful evening wear look now. I am so missing catching up with my friends. So while I wait for lockdown three to finish, I'll just have to keep debating what I'm going to wear. And this outfit is a good contender. In fairness, I don't think a lot of people would necessarily think of wearing a Bretton top when they're heading out for dinner but I think it can absolutely work. French women just seem to have that neck of making whatever they put on look chic. It's a bit like Kate Moss or Jane Birkin but I think what it boils down to is not trying too hard which is hard, I know. Don't overdo it on your accessories. Leave your hair slightly messy and undone. And most importantly, make sure your outfit feels really comfortable. And I think it's that effortless attitude that comes off as great style. A Bretton top will always work for the office or Zoom meetings working from home of course. To jazz mine up a little bit, I went for that famous French woman style of adding a pop of red into my outfit. I got this pair from Everlane just before Christmas and I absolutely love them. Granted, they don't go with a huge amount of outfit ideas but I'm always really happy when I can include them. You could add a touch of red lipstick to bring the two tones together and I like styling it with my crossbody bag to make it feel more relaxed and everyday. Now this is probably quite a transitional outfit as is but you could very easily add in a winter coat if you need an extra layer. Camel would work nicely and I think a long line denim jacket would look great with an outfit like this as well. And I forgot to mention, if you're not already subscribed, I would really appreciate your support if you'd like to do so and don't forget to give the video a thumbs up. And also at the end of this video, don't forget to follow the link in the description box below where you can find my daily style pictures over on Instagram at fashion and style edit. One tone I love adding into the mix when I'm styling a Breton top would be brown. It's quite possibly my favorite shade and I seem to have an awful lot of it in my capsule wardrobe. Here I'm wearing a new pair of trousers in my closet. They're like a mixture of different brown tones all blended together. I've got my Forever sneakers on my feet to keep the look feeling comfy and then elevated it all back up again with my long camel coat and my handbag to match. I personally love the mixture in this outfit. The elegant polished coat sat against a very easygoing Breton top. The smart tailored trousers contrasted with something super chilled on my feet like a pair of trainers. I just love the way it all blends together. By the way, I should say actually if those trousers do need taking up, I am aware. I haven't got round to it yet because I'm kind of debating which is my favorite pair of shoes to wear them with and then I will get the Wonder Web out. So this outfit is just one big concoction of different styles and textures. It's elegant and laid back all at the same time. It's all my favorite things to play with when I put outfits together. Don't be afraid trying to integrate a color into your Breton top outfits. Sometimes it works, sometimes it doesn't but there's really no harm in having a go. And more times than not, I ended up finding new outfits that I love. I didn't plan this next look for example. I just kept playing with pieces in front of the mirror until it felt right. And I think the power of something feeling right is really underestimated. So with this look, I was particularly thinking of an extra layer when it gets a bit chilly outside. So I added my light pink mohair cardigan underneath. Then I added a deeper shade of pink with my jacket and I'd even layer maybe another shade of pink with the scarf. I think that would work really nicely as well. The burgh doesn't particularly match at any of the shades that I'm wearing but I think it's subtle enough to blend in nicely.  Just trying on different colors and different pieces even if you think they won't work. You might just surprise yourself with a whole new outfit idea that you love. I'm obviously generalizing here but when I think of French woman style I seem to imagine these effortlessly chic women with the confidence of a supermodel mooching about the shops. Of course there's always a story behind that image and I'm imagining we've all got the same insecurities but that's the aura they give off. Maybe they're just better at hiding it. Now I'll admit this isn't the most elegant jacket I have in my wardrobe but I really wanted to share how nice that deep khaki tone works against the Bretton stripe. It's one color and style combination that I'm personally really looking forward to seeing more of this year. And then I've taken it a step further and styled it with a lighter tone of khaki with this pair of trousers. It's surprising but all the tones work beautifully together. Again I work for brown leather with my handbag and simple trainers on my feet. It's obviously a very chilled out outfit but it feels on trend and really effortless which is what I aim for when I'm compiling outfits. When I think about how to style a Bretton top in a really elegant and sophisticated way often the easiest thing to do is to just keep it really simple. Bring it back to basics. Those core pieces in your capsule wardrobe that you know make you feel elevated. Here as you can see I've done just that with a fairly tonal look. Pairing my Bretton top with my straight leg crop trousers of which there are lots of different versions on the high street and some really beautiful and affordable pairs. And as you can see I've then layered my classic wool navy coat over the top. I like the texture of the wool coat against the cotton of my top and the silkiness to those trousers. One with my loafers and my handbag with a bit of a chain detail which I think ties in nicely with that gold on my shoes. You don't have to think of something super adventurous when it comes to making your outfits. Often the simple styles give off the chicest looks and I think that's what French women have mastered so well. I really hope you've enjoyed this video and most of all that it's given you lots of outfit ideas and inspiration. It's always really lovely to hear from you all so don't forget to let me know in the comment section below which was your favorite Bretton top outfit idea that I put together. Don't forget if you're not subscribed I would really appreciate your support and all the links to all the outfits I've featured in this video are in the description box below. I'll be back in a couple of days with some more outfit ideas and styling advice so hopefully I will see you then. Take care.


The secret of business and life is knowing a lot of really specific business things like counting and marketing and those are all true but that's not what separates successful people from non-successful. The reason I succeed is I never give up. Even the most famous people you're thinking these people have stared down. I read a book recently about Elon Musk just like three years ago. He was pretty sure he might lose everything. All of Tesla. He would lay on the floor. They would worry he would die. He would lay in his office nine hours straight with the lights off his face down because he was so overwhelmed thinking he's going to fail. But his one secret is and he said Charlie Munger says what happens we're in the river of life and if the river is behind me pushing me forward I swim and if the river is against me I swim. We never give up and you have to do that and that is more predictive of your success as an entrepreneur.


The press secretary keeps asking President Biden, please stop playing with your food.  But he can't help it. He's really feeling his oats, literally. I'm feeling my oats. Share the oats. Please stop, Mr. President. You're making a mess. You're making a mess. But I, for one, am totally okay with President Biden feeling his oats. However, I do think we should draw the line when he starts grabbing ours.   We've already given you far more oats than you need to play with over there. Come on, man. If you try making that oatmeal castle in your bowl any larger, it'll just fall over again. They just do it over and over and over again. Haven't you learned from the last thousand times?


What's going on guys? It's your boy dpj here today for another destiny video and today we have top five Titan special plays of the week now if you guys do enjoy the video do drop a like and Appreciate the support so meet any badass clip you've got to the email I'll just link to the top of the video description and I'll catch you on that next one The life of that all they'll be bringing the baby into the shells man. I don't know oh Mate I just called every player on the opposite side of the team. Do you want that clip?  I killed every single one of them Sure with you in your cop uniform and then the one of you at a convention. They look very different people.


Beautiful, fearless vampire warrior Selene has been taking down lichens and enemy vampires for centuries. In Underworld Blood Wars, she faces her most violent, vicious foes ever. But how did she get here, and how will she survive? For hundreds of years, the brutal and highly dangerous Selene devoted herself to the lichens' blood-soaked ruin. But her life changed course when she fell in love with Michael, a hybrid with both vampire and lichen DNA. Modern-day humans captured Selene while she was pregnant with Michael's child, and she birthed their hybrid daughter Eve in captivity. The two were tragically separated. Ultimately, Selene lost everyone she loved. Hunted by both races, Selene found an ally, in David, a fellow vampire who joined her to track down her powerful hybrid daughter. But war rages on, and in Blood Wars, the stakes have never been higher. An outcast being hunted on all sides, Selene must stop at nothing to find her daughter. She is summoned by Samira, a powerful vampire from the Eastern Coven, to train a new army of death dealers being ready to take on a terrifying threat. The lichen armies are strengthening and unifying under a leader more ferocious and fearsome than any before him, Marius. A lichen with seemingly insurmountable power, Marius wants to track down Selene and her daughter to get his hands on her precious hybrid blood. His goal? To build a hybrid lichen army so powerful that it will cut down the vampire race forever. The vampires need Selene and her arsenal of super-powered burrettas, shurikens and knives to put a stop to the brutal lichen force. But who can she trust? With most of her own out to destroy her and enemies hiding at every turn, Selene must rely now more than ever before on her killer instincts, courage, and keen intelligence to survive. If Selene is to win this war, she must fight harder, go farther, and risk more than any death dealer in history ever has before. In Underworld, Blood Wars.


You know what most people are doing, isn't self-care, it's actually after-care, and after-care isn't sustainable. Where in your self-care, self-compassion, self-love, do you need to move from it being after-care, after the damage and hurt and pain has occurred? Where is it after-care? Where does it need to move to be proactive care? Because prevention is better than cure on so many things in our lives. Where do you need to think about I'm doing too much after-care and not enough self-care in your life today? Love you guys.


Bonsoir, Morayane Piton. Hi, Moncho Python. Est-ce que là, on va bien mon écran? Ok, je me signe que oui. Ok, c'est ça. Merci d'être là. Tout le monde, ce soit avec nous. Bienvenue à Morayane Piton 98. Molusk West Falling. C'est toujours la misère pour notre événement, mais bon. Hi, everybody. Welcome to Moncho Python 98. West Falling. Molusk. Anyway. Ok, c'est ça. C'est notre dernier événement de l'année. Alors moi, j'ai déjà m'habillé ici. Je vais déjà commencer à l'ouvrir, parce que là, aujourd'hui, on fait notre dernier événement avant l'année. Je vous invite à faire la même chose. Je suis sûr que Yannick, mon collègue, il l'a déjà voulu aussi la sienne. So welcome to the last event before the end of the year. So I already have my beer open. We're gonna celebrate this last one. Let me taste. Ok. Je vais juste profiter de l'occasion pour que vous souhaitez... J'aurai tant de fêtes. Je sais qu'on est juste en novembre, mais vu qu'on va plus se voir d'ici avant la fin d'année, mais je vous souhaite un sureer tant de fêtes, puis prenez du temps pour profiter de ce moment-là avec votre famille au nom de l'organisation. Je vous souhaite un sureer de fêtes. Et je veux juste prendre un moment pour que vous soyez heureux, prendre du temps pour profiter de ce moment-là avec votre famille. Ok. Et pour... C'est un bon réputant. On veut que tout le monde soit... Tout le monde s'amuse et tout ça, mais on a quand même le code de conduite qui est, il faut être gentil avec le monde. On aime ça, partagé. Et si vous voyez quelque chose qui n'est pas correct, vous pouvez nous envoyer un message sur Slack ou vous pouvez mettre un commentaire sur notre YouTube channel, mais notre équipe va faire en sorte de régler ce problème. À Montréal plutôt, à Montréal-Python, nous avons le code de conduite. On veut que tout le monde soit gentil avec le monde. Si vous voyez quelque chose qui n'est pas correct, vous pouvez nous envoyer un message sur notre Slack channel ou sur notre YouTube channel. Et nous allons essayer de fixer ce problème. Ok, c'est bon. Je n'ai pas d'autre chose à annoncer. On va commencer tout de suite avec notre première présentation. Je vais juste arrêter le chèque-screen ici. Je vais ajouter tout de suite la présentation. Je vais emmener notre premier présentateur ici à Vlad. Oui, bienvenu. Comment allez-vous ? Je suis bien. Je vais juste faire une introduction. Il vient de loin. Il est ukrainien. On sait que chez eux, en ce moment, ce n'est vraiment pas facile. Alors, laissez-moi... aidez-moi à lui donner un peu d'amour s'il vous plaît. Ok, je n'ai pas fini. Je veux juste prendre un moment pour accueillir Vlad parce qu'il est très loin de nous. Maintenant, il vient de l'Ukraine. On sait que ce n'est pas facile à l'Ukraine. Donc, aidez-moi à donner un peu d'amour à Vlad. Ok, je n'ai pas fini. Je vais vous prendre le contrôle de l'événement. Je vais vous voir un peu plus tard. Je peux commencer ? Oui, oui, oui. Ce jour, j'ai travaillé sur un projet intéressant. J'ai travaillé sur le projet Scrappy. Je pensais sur comment intégrer Flask avec Scrappy parce qu'on peut utiliser différents libraries sur Scrappy comme request pour des données. Mais ce n'est pas confortable parce que Scrappy est beaucoup plus powerful, beaucoup plus utile, beaucoup plus confortable. Donc, j'ai trouvé l'option de comment faire ça. Je veux commencer par... de voir ce qu'est-ce qu'est-ce qu'est-ce qu'est-ce qu'est-ce qu'est-ce qu'est-ce qu'est-ce que c'est? Un petit peu d'arguments. Flask est une framework de micro-web. Il n'a pas d'abstraction de données, d'une validation, d'autres compagnies. Il n'a qu'un petit détail, des petits trucs qui peuvent être plus grands. Il peut nous aider à développer un grand projet et un projet aussi powerful. Scrappy est une framework de web et d'oppositions et il a besoin d'attendre des données sur le site web ou les APIs. Un project Scrappy, l'architecture, est construite autour des spiders qui sont self-containés, et sont donné un set d'instructions. Following the spin of other Don't Repeat Yourself frameworks such as Django, it makes it easier to build and scale large crawling projects by allowing developers to use their pods. So the main question is how to integrate these tools together. And I found the solution and solution is Crotchet. Crotchet, c'est un library MIT that makes it easier to use Twisted from regular blocking code. Some use cases include easily used Twisted from blocking framework like Django and Flask, of course. Write a library that provides a blocking API but use Twisted for its implementation. Put blocking code to Twisted more easily by keeping backwards compatibility layer. And allow normal Twisted programs that use threads to interact with Twisted more cleanly from their threaded parts. For example, this can be useful when using Twisted as VCAG container. So let's focus on the first inclusion and it is exactly what we need. So firstly, we need to create Scrappy project and Spider we need. So here we can see a tree of directories and files. It is already created Scrappy project and Spider as well. Here we have main Spiders and first file is in it Spider. The file contains script that generate and prepare parameters for requests, for following requests and the second one, the second file, it is the main Spider that extracts data we need. So the step two is creation of less project directory and set settings. So here we have another tree and other directories and here we have some couple of main files and first of them up.py We can call it like a controller. Also here we used PostgreSQL so I also created a credentials file for the database and the next file is a database dispatcher. It's like when Scrappy extract all data and put it into database this file we use for extracting the data from from database and models Yes here we have PostgreSQL database PostgreSQL database creation inserting and exception and maybe the most important thing for my subject is Scrappy site.py The file contains a crachet script that the script trigger the Scrappy project, Scrappy spiders and Scrappy spider execute the code separated from Flask and when it finished it put the data to database and Flask can retrieve the data and show to the user So here we can see the main files the crachet script for example here we importing necessary packages and libraries for Scrappy then we import model and database dispatcher model to insert extractor data and the third step we need to install initialize crachet and crawler run I created it like class class build so we have a class function inside of it first of all the first function is parse data it is the main function that triggers spider and send extractor data when spider had put all data into database then we have crawler result here Scrappy opens the function when data is extracted and all crawling process is finished so when when crawling process is finished we need to save data and this function save it the next function called Scrappy Scrappy it is initialize signal and parse final function trigger selected spider and parse URL to extract data from call back to select function to determine if extracting is finished so here we have dispatcher.connect attribute and we need to pass function what will be used when the crawling process is finished and site signal to trigger spider then we trigger spider I use crawlerunder.crawl and here we put spider class and URL to parse then we ask it to call back when crawling process will be finished and in this function finish scrape this function determine if extracting data is finished so small code I think it is understandable and I want to show you a result here we have Flask API Scrappy project so I run it let me run it it looks like just simple site with two forms first to update database it means extract data and second to show what we extracted and let me just put needed URL it works for a special site let me click on update we need to wait a little bit because these projects works separated but one trigger another yes crawler process is finished and we can see the data from site we put it into this form for example we can see what we extracted we can see the name of product type of price currency photo of the product and deep link to the site so for example for this position we extracted this product and we can see on the live site if we extracted it correctly and it seems it was correct also I put the project to dithub and if you want to deep into the code find out how it works exactly from all files from scrappy and flask and see all process you can just follow the URL to my dithub and it will be great for me to link it in as well so my presentation is finished maybe questions so far okay alright thank you let me bring up Yannick he is going to take care of questions hi Yannick hello thank you so much for the presentation Vladislav everyone you can ask your questions in the youtube comments or on Slack if you are with us on Slack and I will be happy to relay those out loud to Vladislav so when people are thinking of their questions I don't see any questions exactly right now I have a question for you Vladislav so by going with Twisted I assume that you can have more concurrent processing and the main motivation is probably to get more performance out of your scraper is that the main motivation can I break you could you please tell slowly because you have not excellent english it's my second language no problem and I confess I'm a little excited because that was an exciting presentation so you decided to integrate with Twisted was the motivation to get more parallel processing out of Twisted to get more performance out of your scraper yes at least it's more comfortable to use a scraper because we can set parallel requests and it's easy to do it using a scraper unless you use a request library for example soap or LXML to extract data it's also in my point of view terrible and better to use selectors and X-pass it's more also it's more comfortable so my motivation was based on it and what kind of performance improvement did you see by going with Twisted instead of just playing scrappy sorry so did you see a big speed up by starting to use crochet and Twisted compared to just playing scrappy yes of course it takes about a couple of seconds to send a lot of requests and get data unless you just request library yes it's more faster than use request as we say very good there is a question by Luciano who is asking for a clickable github link for the project we will get that in the comments in just a moment Luciano and everybody else don't be shy you can ask questions on YouTube comments or on Slack I don't see any questions on Slack right now let me see maybe we can if you want to post the github link in the private chat here on stream yard I will relay it to the YouTube comments so that Luciano and the others can click on it sure it should be on your right hand side yes I see excellent thank you very much let me put that right here and that should be visible for everyone alright so I don't see any other questions so I think that your presentation was clear thank you so much for joining from so far and I hope that you guys will see some resolution terrible event that is going on in your country thank you thank you for the opportunity alright thank you Vlad and Yannick let me move you guys from the thing and let's move up to another hi Jeanette hello how are you yes yes so I let you take care of the things ok see you later ok so I'm going to talk about some just various Jupiter lab plugins that I've been using lately on on the screen here so I'm going to just do a little bit of introduction about who I am if you're still using Jupiter notebook I'm going to do a quick demo on the difference between plain Jupiter notebook versus Jupiter lab I'm going to do a couple of very simple plugins and then a couple of fancier ones and they're just going to be real quick how do you install them and what do they look like and not too much technical debt demo on each individual one because I had kind of a thing do I want to go through a lot of things really quickly in terms of plugins and debt I kind of went for quantity over quality so hopefully not too low of a quality but yeah more for quantity here so hi I'm Jeanette I am a Python data engineer in the Seattle area I work in an engineering R&D department at a company called EchoDine that makes radar this is the part we probably talk about your speaker's very impressive background my very impressive background I remember way back in the dark ages and then I took like 20 years off to raise my kids and then I did a data science boot camp to get some current skills and then I went back into the work port and so when I was thinking about what could I give a talk on that's really changed over the three years that I've been doing Python and one of the things that's really changed is how do I install my Jupiter working environment so you're going to just see how I install statements here I'm not sure that's a bad slide so the first part is Jupiter notebook versus Jupiter lab so when I did my data science boot camp we were all just using Jupiter notebook it's kind of the tried and true you know pip install jupiter run jupiter notebook it has improved quite a bit since the famous you know I don't like jupiter notebooks talk but it's still very much a do one thing at a time user experience it's kind of a longer ways away from you know integrated development environment Jupiter lab you pip install jupiter lab you run it with the command jupiter lab instead of just you have jupiter notebook it has an improved notebook experience but more importantly it's made to multitask so you can open notebook but you can also open python source files and terminals and csv and mark down an html so plain demo so this is jupiter notebook I just got a simple notebook in here I'm not sure why it's not fair so I just importing the polymer penguins dataset you know just a simple like data science training dataset I'm loading it and doing a few simple things you know look at the notebook look at the data like a quick histogram I did a a group buy here and made a table and I saved the female penguins on the dv island to csv file in jupiter lab okay so in jupiter lab the first thing you'll notice is if I want to go through and get you know say to my file over here I would need to do you know open it takes me somewhere else I click on my read me it opens up a new tab it kind of it gets it's really clunky to switch back and forth whereas in jupiter lab there you have all of your files are in one place and you can just click on them and open them here's the csv I created here's my markdown it also has a markdown review so if you want to these tabs are besides also I want to this install on there I wouldn't say it's a mutual destruction there it's probably going to install but whatever you can see how it's going to look when it gets rendered at the same time and there's just a whole bunch of different things that you can open in here you can open csv you can open you know here I had a json file you can kind of browse through it there's actually several labors of the json thing you can play the plain json there's editor if you actually want to edit your json by hand there's things specific to react in vega and yeah and then the other thing if you start building your jupiter notebook and you've discovered that you've created a really large function you kind of know that it should be in a separate file and not embedded in your notebook but it's really hard in the old notebook interface to do that whereas it's very easy to have notebooks on the side and Python files and run them simultaneously another cool trick I'm going to do one more here they made this table of what you found on each island in this penguins data set and as I'm going through my analysis I keep losing track of what's my data set size for each of these these buckets you can put it out and create a new view for it and just kind of keep that view off to the side so you don't lose track of those value counts while you're trying to build your notebook and if you decide gosh you know I really wanted the island names to go across the columns and the species to go species to go across the columns instead of the rows and you can push up let's go back and run this I have so many virtual environments it's not even funny but yeah when I update that cell my view of that output always changes and so it's just a more sophisticated environment right out of the box it concludes a table of content so if I had a really long notebook I could scroll from spot to spot scrolling can be done either by your markdown tags or by the code or by both you just kind of toggle on here and I think I'm going to go on to some of the plugins from there unless people have questions about the regular Jupyter lab environment okay so after you could start doing just pip and cell Jupyter loud I kind of started playing around with additional plugins and so this is going to this next demo is pip and cell with jupyter lab jupyter lab execute time and ipympl so that execute time is what it sounds like here so every time I run a thing it tells me how many seconds it took to implement it but yeah it's just running the same things ipympl is what takes your plots from map plot lib and turns them into interactive plots so if I wanted to grab things and re scroll it or resize it and then maybe I like that be the best and then I'll download that so that that's the one that I'm going to paste into my final report today ipympl has a lovely demo notebook that you can get from the repo on github this is just their demo notebook and it shows a little bit more of what you can do with it besides my little histogram plot in my demo notebook but the one that I use all the time is this guy right here because I work with radar data and radar data is very three dimensional you have the radar on one point and you have targets in 3D space around it over time and so being able to take my 3D plots and spin them around to the which way the radar was pointing and look at how my data is changing over time it's something I use all the time and again once you get you know the size and the zoom and the various things that you can adjust done you take a picture of it and put it on your slide or your report or whatever you're going to do with it so then getting fancy the next demo I'm going to do is jupiter lab gith which is kind of what it sounds like you can integrate git into jupiter lab that one should be in this tab and let's go to that so what I've added here is this little git tab and so I can say oh what's changed you know if I'm going to add something to stage it or whatever I can see what I've changed before we need to make that bigger we've got code in it maybe you might want to read see what I've changed in my function I can add things and then if I want to commit it here I can and it actually has a couple of options we can create a new commit or amend a new commit a lot of times I'm doing anything fancy though I'll usually just be in a terminal git stash and things are not available in the GUI yet and so with this one you can see all your branches here I just made a quick demo so I didn't really create branches and things and things but it also works go back here I didn't change one let's go open we'll get an example and run it and then maybe I'll change my mind and say that's really not enough let's look at the first 20 rows instead the little orange there means that my output is not in sync with the code so it's kind of a little warning to me that I need to read on that cell and then git should be telling me hopefully I'll better save it first it now tells me that my notebook changed I can see that the metadata changed here and then here's like an output that was added usually when I check things in the get I'm going to strip most of the output because if you don't strip the metadata and the output it just makes your git history kind of messy and then it hides all the cells that didn't change so that it's a really quick and easy way if you're saving things to git regularly while you're working breaks it's easy to go back and say oh what did I change since the last time it was working and then the git diff is also available and that will get icon at the top of the notebook and then gosh I'm talking way too fast sorry the last one I wanted to show so as you try as I've kind of gotten used to more and more plugins this is an example of a language server language servers are kind of like how the integrated development environments work with Jupyter or with really any IDE so for this one when I installed JupyterLab, the language server protocol I actually have to install the language server there's several of them I'll talk about them when I switch to the demo tab but the language server actually is a plugin to the plugin and then I put the flakate and wrote plugins into my plugins now my plugin has a plugin which has two plugins so that one is a little bit harder it took me a little bit longer to figure out how to do that and how to get the plugins that gave me the output that I was looking for without stuff that was too annoying but there's no tab there for the demo so the I'll just start here with some of the things that you can do with it so it's like showing me these little or underbars actually let's start with just kind of understanding language servers so when you first install the language server did you build up LSP if you want to see if it actually fully initialized which is the little thing down here and it did initialize if it didn't there's a little link right here to the documentation which tells you all of the language servers that are available let's put that one bigger too let's try to put that in dark mode ok well we'll just go with it so there are several different things you can have a python language server a language server an r-language server robot framework bash docker sql javascript and typescript markdown iphone githubflipard markdown githubflipard markdown some of the html json yaml and various hints on how to install them the most easy one to start with python lsp server is one that if you used a spider itaeteool that's the one they use and then pywrite if you heard of that one is from microsoft and that's what was inside of vscode if you've ever used the vscode language server des erreurs. Et puis, j'ai juste un Python 1 installé au moment, donc c'est pourquoi je vais vous montrer ça. Je veux savoir ce que ces orange choses signifient. Vous pouvez un peu de hover sur elles, et puis convertir la string au numéro à un point de floating si possible. C'est comme si, je ne suis pas sûr, mais c'est pourquoi ça m'a dit ça. Oui, ceci ici, c'est suggéré que je devrais avoir un espace après ma comma. Oh, mon Dieu, c'est trop petit. Alors, le autre chose qu'on peut faire, c'est un panel de diagnostics. Et ils vont vous montrer toutes les choses que c'est en déliné. Donc, vous savez, peut-être que je veux avoir un espace là-bas. Si vous me dites que j'ai un espace improtesté, je vais le fixer. Et des choses comme ça. Et je vais peut-être faire un test pour ça. J'ai pas besoin d'aide, j'ai pas besoin d'aide, je te vois. the tab helps chose you the instructions and it also shows you which one you're on. So, right now I need to enter a value for a. So, let's make that one two. And then I need to enter value for B. And that's really nice for the longer things like This is something like, Kanda's SSV, there are enough command line options in there for Like any CSV file but you have to remember them all and so it's really nice to be able to See that help really quick and say okay. What was the thing with the header has a different name and you need to rename a column or I need to have a special you know type conversion or something like that on a column you could remember those things really easily and get the documentation up while you're typing and Those also work inside the notebook So again if I can Which It's giving me a hint there with the line that there's hope Give me the documentation and Yeah, the examples everything's great from the docs The other thing that's really handy It's because Python's an interpreted language. It's Most of the stuff that you install you actually have the source for so if you're confused about what something does Having a language server means you can go and hit command be or control be depending on your operating system I go look up the source really quickly And again, the late language server has loaded all the libraries and my virtual environment figured out what it has source for And so when I say jump to definition, it just goes there and I could say oh I had this question about What what what other options are there because I didn't you know, I just didn't pay anything. Oh, okay I can do these these other two options and this is what they do and here's the docs and maybe You know, I've decided that this function here my some doesn't have a great name. I Can't use I can remain that to Some Just really good to have a language server for things like refactoring But yeah, that's The main functions of having a language server added to Jupiter lab And yeah, I was nervous and talk way too fast and I apologize But yeah, I'd love to Answer any questions Sort of the conclusion slide here You know a plain Jupiter notebook is kind of how people get started in learning Python But Jupiter lab when you start using it out of the box helps you grow from just having a simple notebook with a view of only one thing To doing multiple file projects To doing best practices like creating your markdown documentation to adding you know a get repo behind it to You know like having like a refactoring tool from a language server where you can remain variables I didn't talk too much about this, but if there's time and people are interested We can talk a little bit about you know, kind of exploring and finding Various plug-ins. It's really good to not just blindly click So this little puzzle piece here is like a directory of plug-ins It's usually best not to just click on the install button It's usually best to go and click on the documentation first And see if it has documentation and how the author of that plug-in Recommends that you install it I find it's if you can just install it straight from pip that seems to be a little more bulletproof than Flicking on install inside of jupiter lab and hoping the jupiter lab reveals itself correctly and everything else So I usually just want to track down those documentation things first to make sure that I'm installing it the way the author intended to install it. Okay. I think I'm going to stop there and take questions All right. Thank you very much. I mean I learned a lot a lot more with you than with my professor Thank you You know, I thought it was gonna take me a lot longer and I think I was nervous and I talked way too fast Yeah, okay, I just gonna bring back Yannick And he's gonna take care of the question Thank you again, Janet You know, I've got that too. Like sometimes I get really excited about something and my flow Accelerates and people have to remind me to scroll up But that was very interesting and I will remind everyone you can type your questions on YouTube or on Slack and I will be really happy to relay them to Janet. There is one question already I will repeat this in French. Alors tout le monde, vous êtes bienvenue à taper vos questions pour Janet, soit sur YouTube ou sur Slack et puis je vais relier ces questions-là de Vivoit So Janet, the first question is by Luciano and he's asking if there is a difference between the regular runtime. I'm not sure if he's referring to the regular CPython runtime or the Jupyter notebook runtime and the Jupyter labs runtime There, they're both based on IPython If I can go back within Jupyter lab, if something, and I haven't had this problem In a while, but if you did have a problem where something did not seem to be working I haven't used it in so long. I'm not sure where it goes You can go to Launch Classic Notebook So if something's not displaying the same way in Jupyter lab versus Jupyter notebook, that's kind of your escape hatch So I have not recently had to use the escape hatch, but definitely when I was new to Jupyter lab some things were different I think Ipy NPL, I think you have a separate notebook extension that you run to get those interactive map plot libs things in Jupyter notebook versus Jupyter lab and there might be some different you know notebook extensions that exist in notebooks that don't exist in lab yet or that are lab extensions that don't exist in notebook and you might want to switch back and forth and so that's kind of your escape hatch Mm-hmm. Excellent. And to cover the differences with the CPython runtime, I guess there are the magic magic percentage commands that would be inside both Okay Yeah, so if I want to here in the back to one of my own Yeah, that's a good quick Yeah, you can use magic in here if you want to. Let's make one Ah On the right on that obviously that's not what I wanted to have happened so Let's go run the magic for debugging it and go The 10 I wanted to debug by by by cell or whatever those magics that you use in Jupyter notebook also work in Jupyter lab Very cool And it would be the same as the ipython magics, but something we won't have in plain CPython Yeah, these are these are ipython notebooks. And so yeah, these aren't CPython Excellent, so hopefully that answers Luciano's question I don't see any other question right now. So don't be shy Everyone you can ask your questions. I have a comment It was a very very pleasantly surprised by the the git integration plug-in you showed because you didn't show us how bad plain git is at doing a diff of a Jupyter notebook because it's JSON and and if you try to look at a Regular diff on github. It's absolutely un readable while this is fantastic. Like we see exactly what changed because I think The Jupyter notebook is probably all on one line. It's very minified JSON so so when you try to diff it with command line tools or Git hub or git lab. It's absolutely un readable while this is very good Yeah, this is a this is a lot of fun. Like it's it's the kind of No books aren't specifically git friendly because you know all of those dips to those better data wind up in your git history But at least you can look at it graphically, which is really nice. And you actually do have a choice In output sometimes so my my diff here Can be displayed as h10 dollars plaintexte, for example, which is like kind of like mind-boggling Am I met my dad metadata here? I can see that I had You know that the timer Installed when I ran this so the time change by if you know a second to whatever and change some metadata Which would be really annoying to have any of this story Did you get a chance to try this plug-in to resolve a git conflict? So I say I see the two column format sometimes sometimes when you have a conflict with the upstream It's easier with a three column format. I don't know that supported by this plug-in. Um, I Know that the underlying this is actually on base on a package called envy diff And I know that there is a conflict manager in envy dip, but I don't think you can get to it from within Jupiter lab I think you'd have to run it Let's see if I can go from the main page So version control integration We have this merge driver setting that you can make So you can say To diff a Jupiter notebook you have to dig when these diff commands to In your in your back gate config, and I don't have any of that set up in this demo environment So many do put our labs, but yes, if you go to the actual envy dime Documentation, there is a way to create a merge conflict tool Pour note Excellent and then I presume looking quickly at that documentation that I would resolve my my diff conflict on the common line invoking Diff merge, which will invoke the The tools, yeah. Yeah, and then it opens up its own little I don't know what's underneath it You have probably like a plastic zip or something to open up a new web browser tool for you Okay, very cool. Excellent. Let me see real quick if we have other questions Mais pourquoi est-ce que ça pourrait être la conclusion de cet événement ? Ok. Je ne vois pas d'autres questions. Merci encore, Janet. C'était une très enlightnante, très dynamique présentation. J'ai vraiment aimé. C'est probablement un peu trop rapide, comme je l'ai dit, mais j'ai hâte d'apprécier. Merci beaucoup d'inviter moi. Merci, Janet. Ok. Je pense qu'on est pas mal finis, Janet. Oui, ça conclut pas mal. Qu'est-ce qu'on voulait faire aujourd'hui ? Je pense que ça voudrait la peine de mentionner ceux qui voulaient faire la programmation en personne. On a notre événement de la semaine prochaine, qu'on a dû malheureusement allumer. Donc on n'aura pas notre journée de prog en personne, ça me dit projet, mais on vous revient là-dessus vers la fin du mois de janvier ou début février. On va annoncer une nouvelle date et puis on va se rencontrer en personne, puis on va coder ensemble. Oui, puis on vous invite tout le monde à y aller, parce que c'est ça, plus de monde, plus de fun. Et c'est ça, je t'ai gardé là pour des mots de fin. J'imagine que je n'ai pas ou rien oublié parce qu'on n'a même pas notre horaire de l'année prochaine. On ne peut pas rien annoncer là, sauf que on va toujours annoncer des affaires plus tard. Tu veux répéter un peu tout ça en anglais ? Oui, je répète tout ça en anglais, puis je jette ici un petit lien dans le bas de la page qui est aussi cliquable dans la description sur Meetup. Donc après ce petit mot de la fin là, on va se rencontrer en 5 à 7 virtuel pour prendre une bière et célébrer la fin de l'année. Mais je répète en anglais ce que Dieu vient de nous raconter. Donc, on a eu le temps d'apprécier notre date de programmation en personne. C'était pour la prochaine semaine. Ne t'inquiète pas, on va mettre un nouveau date pour l'année prochaine sur le calendrier et on va vous le laisser savoir. Donc, follow-us sur Meetup, c'est le meilleur endroit pour trouver un nouvel événement. Et on n'a pas encore notre calendrier pour l'année prochaine. Alors, nous, l'honneur, nous, Zerg, nous sommes en train de réaliser ce qu'il y a dans les holidays, mais en même temps, nous allons annoncer tout les événements sur Meetup. Alors si vous êtes suivant nous sur Meetup et le lien avec nous sur Meetup est dans la description de cette vidéo sur Youtube, vous verrez tout ce que nous faisions dans l'avenir. Et maintenant, le moment que vous avez tous été attendu, c'est la fin de l'année prochaine. à la bas de l'écran et cliquer sur la description de la vidéo YouTube. Nous allons juste prendre un drink, c'est tout pour ça. C'est tout pour vous et nous allons parler de tout ce qui vient de moi. Ouais, n'oubliez pas de mettre votre drink et d'appuyer à Sankasset. Excellent ! Bonne soirée à tous et à la prochaine fois !


Hi, this is Caroline for Science and Tech News. There's always something happening with the museum's team. Let's go find out what they're up to. In the past two days, we've formed five teams of people to work on a pilot testing workshop, where each team was in charge of developing, creating their own prototypes of specific interactives that we got to test this afternoon on the floor with visitors. And to observe what works, what doesn't work, and hopefully inspire us for the new museum with the types of interactives and activities that we could develop for our visitors.


A quick intro, so Abdul is the founder of Ray Lambda. He has been working on DevOps for the last 10 years and has extensive experience in managing Kubernetes at scale in the cloud as well as on-prem for software companies and enterprises. Over to you, Abdul. Thanks, thanks, Pavitra, for the intro. And before we start, I would like to thank the organizers for putting together this event and for allowing me to present a session here. We'll be talking about, or rather I'll be talking about Kubernetes networking today. How do pods talk with each other in a distributed kind of system which Kubernetes is? A quick introduction. I've been doing DevOps, SRE, Platforms Engineering for the last 10 years now. I've been working on Kubernetes for almost four to five years, and I run a company called Ray Lambda. We provide DevOps, SRE Consulting. That's my email address, and if you want to reach out to me on Twitter, that's my handle. The agenda for today, so we'll quickly start with a brief introduction about Kubernetes, a very high-level introduction. And after that, we'll talk about pods. What are pods? How do pods talk to each other? How do pods running on the same node talk to each other? How do pods running on different nodes talk to each other? We will quickly see an example of overlay networks, and then we'll jump to services and see how the communication using a service IP or a cluster IP happens, and what is the role that IP tables plays in it. And if time permits, we'll also do some Q&A in the end. So what is Kubernetes? Kubernetes is an open source container orchestrator. Container orchestrator is nothing but a piece of software that is able to do almost anything, and everything that you can do with the container, right? Create new containers, delete containers, fetch logs, do some monitoring. Make sure that proper environment variables are associated with the containers that you want to run in proper environment. Two important features that Kubernetes kind of makes available to its users is autoscaling and self-healing. It allows you to autoscale the application as well as infrastructure. So you can use HPAs. Yeah, so autoscaling. Am I audible? Hello. OK. Yeah, I guess it works. So HPAs, VPS for your application workload autoscaling, you can use cluster autoscaler. And Keda, there was a talk around Keda today for autoscaling your infrastructure as well. There are tools like Carpenter, which are pretty amazing. And you should try it out if you're using normal cluster autoscaler. Self-healing, using probes like liveness probes, readiness probes, Kubernetes also provides you self-healing. And it will always try to ensure that the desired state of the system and the actual state of the system is in sync, right? So for example, if you want five pods of your Ruby application running and one of them crashes, Kubernetes will make sure that it brings up one more pod on any of the nodes where there is capacity available. Cool. So let's talk about pods. What is a pod? A pod in Kubernetes is basically a group of one or many containers, which is guarded by C groups and isolated by namespaces. What do we mean by that? So technically, there is no such thing as a container. What we refer to as a container is just a process which has some C groups and some namespaces guarding and isolating it. For example, if you want to run an application on a node and you want that app to consume no more than two cores of CPU and 4GB RAM. So you can use C groups, which is a Linux kernel feature, you can say, to ensure that the process will never cross two cores and 4GB usage. Similarly, if you want that process to not be able to look at any other files on the system or any other network on the host, you can isolate that process using namespaces, which again is a Linux kernel feature or functionality. So any process that is bound with these C groups and namespaces is known as a container. That's what a container is. And in the world of Kubernetes, it does not directly deal with individual containers, but rather it groups the containers together in pods. So pod is a group of one or many containers. Pods are atomic. What do we mean by that? A pod cannot be broken down. It is the smallest possible deployable unit that Kubernetes has. So either the entire pod will be deployed to a node or nothing will be deployed to a node. It will never happen that 30% of the workload is running on node one for a given pod and 70% of the workload is running on node two. It's either the full pod or nothing. And pods are ephemeral. Pods come and pods go. They don't have any individual identity. These points are important and we will come to them probably later. So the networking model, Kubernetes networking model, one of the properties of Kubernetes networking model is that every pod gets its own unique IP. Or rather, it's a requirement, more a requirement than a property. So every pod gets its own unique IP. It's known as IP per pod. And these IP addresses should be routable from every other pod. So what does this mean? Let's take an example. You have a VM, VM one, that VM has its own IP address. There are two pods running on the VM. These two pods also have their own IP addresses. And every pod should be able to talk to every other pod using the pod IP. So pod A should be able to talk to pod C using the pod IP. Irrespective of whether this pod C is running on the same node or different node. Now, who is responsible for assigning these IP addresses to the pod? It's not Kubernetes. It is a CNIPlugin. What is a CNIPlugin? A CNIPlugin is a container network interface plug-in. We will talk about it in a bit detail later. But Kubernetes does not deal with assigning IP addresses. It just assumes that this is the case, that every pod will be able to talk to every other pod using the pod IP. All containers in a pod share the same network namespace. So we spoke about network namespaces, right? So what does this basically mean is that pod A has a dedicated network namespace. Pod C has a dedicated network namespace. And all the containers running in pod C are part of the same network namespace, which means the Java application running here should be able to talk to the Datadog application using localhost, right? Because it's part of the same network stack. What it also means is you cannot have any other application running on either pod 3000 or pod 8126 in pod C, right? Although you can have an application running on pod 3000 on the same VM. But inside a pod, you cannot have clashing ports because it's more like a VM in itself, right? It's a dedicated network namespace. Cool. So when you're dealing with Kubernetes, there are three different types of IP ranges that you will come across. If you've ever set up a cluster, you must have come across this. There is a host IP range, which is the IP that the nodes get assigned. And who is responsible for this? The cloud provider is responsible for assigning these IPs. There is a pod IP range, which get assigned to the pod. And who is responsible for pod IPs? I just said, the CNI plugin, right? The CNI plugin is responsible for assigning and managing pod IPs. And there's a third range of IPs, which is a service IPs. This is where Kubernetes plays some role, and it does the job of managing service IPs. So a fundamental question, how does a pod get an IP address? Don't get scared by this. You can just follow this slide maybe later. Top to bottom, left to right. If you see when a pod gets scheduled on the node, the first thing that it does is it will make a call to the CRI plugin, the container runtime interface plugin. Just like CNIs, we have CRIs, right? So in this example, we are looking at container DCRI plugin. So it makes a call to the CRI plugin. The CRI plugin will basically create a sandbox ID, a unique ID for that pod. And it will also create a name space, network name space. Cool. So it will create a sandbox ID and a pod network name space. It will pass on these details to the CNI plugin. Why does it do that? Because the pod needs an IP address. Every pod should get a unique IP address, right? And who is responsible for creating pod IPs? The CNI plugin is responsible for creating the pod IPs. There are multiple plugins available in the market, Flannel, Calico, et cetera. Flannel is one of the popular ones which gets used. So when the CNI plugin gets the sandbox ID and the network name space, it will process that information, create an IP address, pass it back to the CRI. And the CRI kind of then goes out and downloads the image and runs the container and whatever, right? So this is how the IP address gets assigned to a pod when it is created. Next fundamental question, how does a pod talk to another pod using the pod IP, right? How does the communication actually happen? So let's take a simple example. You have a VM, an EC2 instance running on Amazon, a single node which is running two pods, pod A, pod B, right? So as we know that every pod will have its own dedicated network name space, right? NS is network name space. Pod A has its own network name space. Pod B has its own network name space. There's a special network name space here known as the root network name space, right? Now what does this root name space do? It is responsible for all the traffic that comes in and goes out of the node, right? And it is associated with the primary network interface of that machine. So if you want to visualize, just think of this laptop, right? If you want to connect this laptop to the internet, one way to do it is you would plug in a LAN cable, right? RJ45 port, whatever. And that would be our network interface, the actual physical interface for the network. And all traffic has to either that has to go in or come in or go out has to go through this cable. And that is the root name space of your node, right? One more thing that the CRI would do or rather the CNI would do is it would create virtual ethernet pairs, v-ith pairs, right? So you can think of this as a pipe. One end of this pipe is attached to the root name space, root network name space. And the other end of this pipe is attached to the pod name space. Why is this pipe created for the transfer of data between the root name space and the pod name space, OK? So this is known as virtual ethernet pair. It is always created in a pair, right? Because it's a pipe and there are two ends. So let's say pod A wants to talk to pod B. So the source IP, this is a TCP packet that you see here. We've stripped out all the other layers. We're just interested in the source and destination address. So there's a source IP of 1.10. There's a destination IP of 2.10, right? The packet gets placed on the virtual ethernet pair. It then gets transferred to the bridge. What is a bridge? Think of a bridge as a switch, network switch, or maybe a router. It's not a router, but imagine if there was a router here and all of our devices would have been connected to that router. If I'm running Nginx on my machine here, you can talk to this Nginx via the private IP. And how does this communication happen? It happens via the router. So similarly, you have a bridge here, right? And all communication between all the network interfaces on the same node have to happen via the bridge device. So the packet gets placed on the bridge. The bridge checks, OK, fine. This destination IP, I know about this IP. It is belonging to a virtual ethernet pair that I've created. And there's a pod B running on the machine. Let me send the packet there. And pod B happily receives the packet and processes it. That's good enough for a single node running two pods. But what if we have two pods running on two different nodes? How would the packet travel in that case, right, in a multi-node setup? You'll see a lot of these diagrams. And it might get boring. But yeah, I mean, my talk is about networking, and networking is boring. So let's say in this case, you have two nodes, two EC2 instances, node 1 and node 2. Pod A wants to talk to pod C in this case, OK? And we'll trace the route that the packet takes, OK? So the packet starts at the interface of pod 0. It moves to the bridge. The bridge looks at the destination IP, which is pod C. It has no idea about this IP address because there are only two pods running here, pod A and pod B. So it will place that packet on the interface and let the default gateway decide what to do with it. What is the default gateway? Since these are EC2 instances, the default gateway here, or the router here, is something that AWS manages for you. So this packet is sent to AWS, and AWS sends this packet to node 2, OK? Now here, there's something interesting that happens. If there are just two nodes in your cluster, node 1 and node 2, in that case, maybe this makes sense that the packet leaves from here and it gets placed on node 2. But let's say if there are 1,000 nodes in your cluster, how will this packet know? Because this packet just has pod AIP as source and pod CIP as destination. How would this packet know that it has to go to node 2 and not node 222 or node 99? So to answer that question, if you've ever looked at, so this is an example node, EC2 instance. And this screenshot shows a node which is attached to a cluster. You see there are two categories of IPs here. One is the private IP address, and second one is secondary private IP address. So these are your IP addresses. This is the IP address of your root namespace, the actual IP of the node itself. And these IPs are IPs that belong to the pods that are assigned to that node. Who assigns IP to a pod? A CNA plugin assigns IP to a pod. Which CNA plugin is used in AWS EKS? VPC CNA plugin by default is used by AWS EKS, right? So the CNA plugin already knows which IP is assigned to, which node. And that's how AWS is able to figure out automagically that if the destination IP is pod C, it has to go to node 2, right? Once it reaches this node 2, I guess things are pretty much the same. It goes to the bridge. The bridge knows the destination IP. It sends it to the virtual ethernet pair. And pod C basically processes the packet. But there is a serious limitation to this. If your pod IPs are being created inside the same subnet, if you look at this here, the subnet is same, right? 192.152.2, 192.152.182. It's picking the IP address from the same subnet that your VPC is created from. So if you have a cluster, which is created, and now you want to scale the number of pods that you want to run inside that cluster, you might get into a position where you no longer have IPs available in your subnet. So in that case, something called as an overlay network helps you. Now, what is an overlay network? We'll not get into the depth of how and what an overlay network does. But at a very high level, it creates an isolated layer of network on top of your existing network, right? So that you get an abundance of IP addresses. One way to solve this problem would be to create a new VPC with a larger range and move your entire application to this new VPC, sort of a blue-green deployment. But it's not feasible. And it's not scalable because even that has a limit. You might reach a limit there as well. So let's consider the same example with an overlay network. What happens here? So if you see there is an extra block, a Flannel0 block, in your root name space, in all the devices, right? So Flannel runs as a binary. And it is one of the CNI plugins, open source CNI plugins. So again, pod A wants to talk to pod C. So source is pod A, destination pod C. It goes to the VEAT pair. The packet moves to the bridge. Now, before sending the data out, if you are using Flannel, Flannel is going to intercept this packet. Look at the data. See, OK, fine. This is source and destination are both pods. Let me just add the source and destination node IPs. So instead of AWS deciding what is the destination node for a given pod IP, your Flannel here is going to make that decision. So it will just add or rather encapsulate a source and destination block on top of your existing payload, OK? So after this is kind of encapsulated, this packet leaves the machine through its zero interface on node 1. It goes to node 2. And the reverse happens here. So it again goes back to Flannel0, or rather the Flannel device running on node 2. Since Flannel is a distributed setup running throughout your cluster, it does keep a track of which packet is encapsulated. And it will intercept those packets and do the reverse of what happened here on node 1, right? So instead of source and destination node IPs, they get replaced with pod IPs, right? Or rather, the encapsulation is removed. They are not replaced. The encapsulation is removed from the packet, right? And again, the same journey, it goes to the virtual ether net pair, which knows about pod C and pod C finally receives the packet, OK? What if the pod IP address changes? This is wrongly worded, but let me put it this way. All the examples that we saw, they were directly using pod IP addresses, right? Pod A was using the IP address of pod C to communicate. But pods are ephemeral, right? Pods can come and go. If you want to deploy a new version of a pod, the old one gets deleted and new one gets created. So it's always not a good idea to use pod IP addresses directly for any sort of communication within your cluster. So what should we do in that case? We should use something called as a service, right? I guess if you have used Kubernetes, you must have used a service. Pod deployment service, these three things are kind of the very basic building blocks that you start with. So what is a service? Service is an abstraction for a group of pods, right? All of us know that. This is a sample YAML for a service. So you see that we named the service Hello Kubernetes. And this is the important block, the selector block. What does this tell Kubernetes? It says, find all the pods that have label with key equal to app and value equal to Hello Kubernetes. And group this together for me, right? And what do you do after creating the group? Create a cluster IP for them. Now, this cluster IP is an interesting concept, right? It's a virtual IP. It does not point to anything in specific, right? So if there are no pods that have these labels, you will still have a cluster IP, which will point to nothing, right? Which will point to void, because it's a virtual IP. So when you create a service, there's one more implementation level detail known as endpoints in Kubernetes, which is nothing but the list of IP addresses. But let's not get into that. We'll just quickly see how a pod will talk to another pod, but this time using a service IP address, rather than the pod IP. What changes? Again, the same example. We are on node 1. Pod A, again, is looking for pod C for some reason. But this time, we are not using the IP address of pod C. We are using the service IP, right? Or the cluster IP, or virtual IP for pod C, OK? The packet is placed on the virtual ethernet pair. It goes to the bridge. And before it leaves the machine, it gets intercepted by IP tables. IP tables is a, we all know IP tables as a firewalling solution or a software that does firewall, right? And any firewall will have access to all incoming and all outgoing data, OK? But IP tables can do more than just firewalling. We'll just quickly look at what it does for us. So if there is a rule, so when the IP tables intercepts our packet, and if it finds that there is a rule defined for the destination IP, right, a service IP, it will modify the destination IP address and replace it with one of the pods IP for that service, right? So for example, we saw the image where there was one service and there were three pods, right? So it just picked one of the pod IPs at random and it modified or translated the destination IP. And this activity is known as DNAT. Why DNAT? Because we are playing with the destination IP here. And we are doing a destination network address translation, OK? So far, so good. The packet then eventually goes to the interface, the E0 interface and leaves the machine. But a thing to note here is that in case of Flannel, we did not modify the packet. We did not change any data. We just added one more layer. We encapsulated the data and we decapsulated the data. So that was fine. But here, we are actually changing. We are making changes to the packet itself, right? The destination IP is being changed. It is being translated. So when the packet traverses back, we have to kind of undo those changes as well, right? And same IP table is going to do that for us, right? So when the packet is coming back, it will have source as the pod C001 IP and the destination will be pod A, right? Because this is the backward journey. What IP tables will do, it will replace the source IP, which is pod C001 IP, and make it SVC CIP, which is the cluster IP. Now, there's one interesting thing that I just skipped in the previous slides is about contracts, or rather, connection trackers, which is, again, a Linux functionality, where your operating system keeps the track of all the address translations that it does. And that's how Kubernetes, or rather, Linux will know. The IP tables will know that this is the particular incoming packet that I have to fix, or rather, do SNATting, right? Source SNATting, source network address translation. And finally, the packet comes back to pod A, and the journey is complete. This is the algorithm that your IP tables will basically just follow, simply when you create a new service. So if it finds any destination IP to match with an existing service IP, it will pick one of the pods for service A and replace the destination IP for that packet, right? And do the translation. So yeah, I guess that was it for today. And I had to rush a bit, because there were some time constraints. But if you have any questions, feel free to ask now, or maybe you can reach out to me over email or Twitter or whatever. Am I audible? Yeah, so actually, I had to frame this question in my mind a bit. So I've been trying to understand CNI for quite some time. I'm assuming CNI is a piece of software which allows the container run to make calls, to assign to do things like assign IP address. And so in one of yours, you showed that Kubernetes first speaks with container D, and then container D makes some call to VPC CNI. So what happens after that? Because based on what I have read so far, VPC CNI needs additional plugins where software like V works or other such things come. And where does VPC CNI figure in this whole flow? I'm not sure if I totally understand your question here, honestly. But to answer the first part of your question, the CRI plugin will send that those sandbox IDs and network names visited to the CNI plugin. And the CNI plugin eventually will return with the IP address of the pod. That's what we saw in the diagram there. Obviously, these plugins do a lot more than what we just saw here, because we were focused on networking between two pods. So I'm going to answer the first part of the question. Yes, the CRI plugin will talk to CNI plugin and get the IP address details. And if you want to go in slightly more detail, the CRI plugin would, I guess, then create a pause container, which does a lot of provisioning for the pod, setting up the C groups that we spoke about, setting up the namespaces. That happens via a pause container through CRI plugin. So these two things work very close to each other. Maybe we can connect offline and discuss your VPC CNI specific question. But yeah, I hope that answers at least the first part. Yeah, on a high level. Yeah, thanks. Thank you.


Alright, you are still watching Waze. Canada's Agriculture Day is on February 15th and we are deliciously excited to celebrate in the best way possible by eating good agricultural products and acknowledging farmers. Can you believe that Canada is the fifth largest exporter of agricultural and agriculture food in the world? This alone makes Canada's agricultural day unique and so important to everyone who consumes agricultural products, allowing us to celebrate the farmers who produce them. Hey, Canada! You know we said we are farmers so we have to celebrate ourselves. I mean farming is one career or would I call it one business that oh my god it takes a lot of patience and you know for something as important as farming because without food right you can't you can't survive and that food cuts across so whether it beats cash I mean crop beats animal whatever type of farming you know everything is hinged on food. I always say jokingly that any business you want to do right now if it is related to food you understand you are very sure of as I mean you're very sure of patronage so I mean this is one important part of human existence agriculture and I don't understand why a country that has so much arid land that is blessed with land that can bring multiple yields we're not taking how can Canada and all of these places be so as they are being celebrated we should be celebrating our own because again yes because Nigeria is also blessed you know we have the land we have everything but we don't you know so sometimes when I see these kind of days it just it just breaks my heart that because we we truly can produce what we consume we have the market we have the land we have everything so what's stopping us? This actually reminds me of the debates we used to do when I was in primary and secondary school I'm going to say farmers are better than doctors you know and I always take the side of farmers because I like you rightly said without food how would we survive? Without farmers doctors who cannot exist. I'm not talking about food not just food now your clothes I mean from cutting you know everything and culture cuts along a very long span of survival there are so many things that are very that are bent on agriculture everything and in Nigeria I think we need to start taking advantage of like you rightly said the arid land that we have we don't maximize it I don't know I don't know why even your cosmetics your whatever you know with your drugs what where does it come from? Misi what do you want to say about agriculture? Okay agriculture is something that we we started learning about when we were in primary school as far back as you know primary school but we didn't understand the importance of it till we became adults so yes our culture is so important in our in our daily survival but we do not tap into the resources that we actually have in Nigeria to grow the industry and I think it cuts across the the types of agriculture we have which has to do with livestock arable what's called the vegetation crops that we have as well we do not work with what we have currently but I think if we pay more attention to what we are supposed to pay attention to in agriculture we'll be able to grow the the industry and give cognizance to it the way it deserves. Absolutely so on that note Misi what did you find for us in the news today? Okay my news is on emotions are running high actually just like Chineno said earlier that a lot of things are currently happening in Nigeria that you know we have to keep our heads up the topic that actually caught my attention was three-fied killed as residents stage protests over the capacity of Naira and Nodes so this is so important you know because I went out this afternoon I tried to get some fruits but I couldn't buy fruits because the house man stated that he didn't have he wouldn't collect the old notes so imagine people who are under this kind of pressure every day wanting they don't have the access to technology because they are not tech savvy and they want to buy things and they cannot afford to buy these things and here they are in adult state currently today there was a riot in adult state because of this not only in adult state because of the Naira Nodes and scarcity but also in Delta state so you see like they say in back in the days they'll say um Bendel not a carry last basically so yes Bendel number one we've proceeded the mark again and we are out there again making some noise and causing a lot of mayhem because we want our notes I haven't seen a situation whereby a country cannot have access to its legal tender Nigeria keeps hitting the bar and making things difficult for her citizens because we've practically be in queue for practically everything we can actually think about ranging from NIN, BDN, POS, fuel and you just name it I think it's only air that Nigerians having queued to breathe in currently but I would I totally understand that there are some you know hidden agenda basically in respect of this but I think there should have been a better way to go about this bearing the fact that when two elephants are fighting which in this case is CBN and uh and uh the politicians or CBN and Supreme Court they should have found a way to go about this in a proper way that would not you know bite the Nigerian populace so hard you know it's interesting how you're mentioning Kash not right now is currently king in actual fact you know how so even right now governors right because again the court order came out today saying that the the supreme court see holds the fact that CBN should suspend this and maintain that the old notes remain legal tender so I was seeing a video of Dakua Beodo on his way on a campaign trail then he now said he stopped by a fuel station because he heard that they were rejecting um the old narrow note and he insisted that the day the businesses should collect the old narrow notes so the question I'm having is why all this rank up right because now governors are instructing businesses to not stop the collection of the old notes CBN has told banks where these businesses will take the money to so like you know the confusion is too much in the air and I think you know for me I would just appeal to Nigerians this is not the time to pick up arms because what you're doing is you're just scratching the surface if you want to solve a problem solve it from the root this is clearly a a problem of leadership right it's a leadership problem we've always said it but this is it's just it's just you know like re-emphasizing the fact that everything rises and falls on leadership and now we're seeing why it's very important that we we vote in the right people into positions of power but your story I hope that I just really hope that these people that are carrying out this protest and all of destroying all of these things really know or they come to the realization that that's not actually the solution to all of this however on this whole violence notice well um it was reported that today Naguda market through Larry local government error there was an attack on deputy governor princess or if he sees campaign train so that's the current deputy governmental candidate for labor party and um I don't know if we have that video it was quite a bloody one where the guy I think he was stabbed in his head or something and he was literally bleeding and then I'm asking myself so does it mean that people cannot just go ahead and continue their campaign in peace because we know that yes that market is dominantly a an apc you know um what do I call it now they are apc members or they are people that support apc but then what happened to freedom so does it mean that other parties can't go ahead and do their campaign because they know that is dominantly it's an apc dominated error I don't think that this is fair at all it's so interesting that so when I did a vox pop for a company and they were talking about you know the Naira whatever so by time we got there people mainly they saw cameras they came you know they had called the market leader that was not even there you say no no no what are they doing here so there is a network right and because if you had if they had listened to the audio from that woman's video she was saying that even the ear lodger said you can't come into this market that this is an apc state yeah it's very sad the only thing I want to say to people is you see whether you like it or not right tempers will flare my own is that just try as much as possible to be safe because the truth is some people have taken certain things as yeah like it is their birthright yes the entitled is an thank you is an entitlement that's what I'm looking for all right in the light of the same violence because again this is the period this is the season yes and again don't forget that because of all of these things happening people are agitated people are apprehensive people are tense people are afraid so again some people when they are afraid is either they fight or they fly you know so that is so that is the that is what is happening so when you see attacks like this this is as a result of panic I don't know what to do ha they are winning they are this they are that you see things like that happening but again they said a um an age to the gubernatorial candidate for PDP uh daco's sarumi um sorry daco sarumi's age was shot dead right the police um states have commenced an investigation into the death of two in adenegi one of the eight of the prominent PDP oh he's a chieftain sorry chief daco sarumi um this guy was 47 years old was reportedly shot dead by suspected courtes in aghege area of lego state it was gathered that the disease was shot at right in front of his house at oye wole road aghege when the government invaded the area and shot him at close range so i mean these are the kinds of things that we've seen over the years when it comes to our politics when people are desperate you know they take to violence they take to killings they take to that um so i'm just saying to anybody be careful you know watch your you know because again nigeria hasn't gotten to that point where if one person dies we all come out to say no you know we we just move on like nothing happened so by all means if you can this is the time to really be very vigilant you know pray too pray because prayer is very important but be very vigilant and be careful be calculated you know be strategic about your support for whichever candidate that you're supporting okay so on that note to take a break i want us to discuss this school crisis in chrysland stay with us we'll be right back