 On est en direct, Zuc? Je sais pas si Yannick y répond, mais bon. Ok, mais je vais juste faire une dingue. Je vais faire son vitreur. Est-ce que t'as parti, Yannick? Oui Zuc, on est en direct. C'est ici. C'est bon, est-ce qu'on est live, Yannick? On est live. On est bon d'abord. Désolé tout le monde pour le petit... Bonne soirée à tout le monde. Bienvenue à MP 102. C'est toujours le nom compliqué à prononcer, mais bon. C'est ça, c'est que... Je vais juste remercier tout de suite, avant qu'on s'oublier pour que nous recevions ici aujourd'hui. Merci à tout le monde aussi d'être là avec la neige, avec le froid, avec tout, tout, tout. C'est ça. La première annonce, c'est qu'on va avoir l'atelier de programmation. On va en avoir deux, la même journée. C'est un peu compliqué avec notre trucs au committop. Là, des fois, c'est un peu mélangeant, mais le premier atelier, c'est pour l'introduction à la programmation à bouton. Et le deuxième, mais vous voyez, c'est le traitement de données ici. On n'a pas beaucoup de place, fait que si vous êtes inscrit, puis après ça, vous changez d'idée, ça c'est bien de annuler les gens en votre place. Eh ben, la bonne nouvelle, c'est que... 3 pour 12 est là. Yeah ! C'est ça. Pourquoi je vous dis que 3 pour 12 est là ? C'est parce qu'on a besoin de traduire les documentations officielles depuis tant en anglais, le français. C'est pour ça qu'on va organiser un spin de traduction. Je ne sais pas si ça va être deux ou trois semaines, ça va dépendre de la volonté des gens. Mais édite est là. Si vous voulez, à ce moment-là, vous pouvez parler avec édite après. Ça, c'est le spin de traduction. Et aussi, si vous voulez parler de les nouveaux fonctionnalités dans les temps 3 pour 12, à notre prochain événement, vous pouvez aussi nous contacter. Et comme ça, mais comme ça, je ne sais pas. Je pense que c'est ça. Je n'ai rien oublié. Mais si j'oublie quelque chose, c'est sûrement que Yannick va me rappeler tantôt. C'est pour ça qu'on va avoir un workshop Python. Il y a deux workshops. C'est pour ça qu'on a des workshops. Juste prendre le temps pour voir un peu à la top, parce qu'on a deux workshops et c'est un peu merci à la top. Le premier, c'est l'introduction de Python. Et le deuxième, c'est en même temps. Et le deuxième, c'est le data analysis avec Python. Et on n'a pas beaucoup de place pour tout le monde. Donc, si vous ne pouvez pas faire le workshop, juste canceler votre place. Si quelqu'un d'autre peut prendre votre place. Et 3.12 est là, Python 3.12. Donc, à ce moment-là, on organise la production. C'est pas si j'ai bien traduit. Mais ça va être sur le 9 novembre. Et l'édit est ici. Si vous avez besoin de plus d'informations, vous pouvez parler avec l'édit. Ok, c'est ça. Donc, vous voulez commencer ? Oui. Oui, ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Ok. Hello everyone. On va faire la présentation en anglais. Mais si vous vous posez des questions, commentaire, en français, c'est bien peut-être. We're just going to tell you a little bit about totally what we do here. Thank you for being here. It's, I think, Dana, this is the first meetup that we've hosted here since Covid. So we're very excited to have so many people here. It's a lot of fun. I think it was posted in Slack and everyone was stoked in Slack that folks were coming back to the office. So, it was exciting. My name is Emily and I'm a project read on Plotton's professional services team. I'm Nathan. I'm a product manager and I was previously managing professional services. So we've been here for some time now. We've been going up on four years. Four years. So, it's probably about when the last one of these sessions was held. We're plot late. Just by a special hand, how many of you have had a lot of these graffing libraries? New show of hands. New show of hands. How many show of hands is that? New show of hands is dash. Ok, alright. It's pretty good. It's pretty good. We've got quality people. We saw a couple of hands. We saw a couple of hands. You've used dash. You've used dash. So, this is our guest, our guest punches, on the internet. We've grabbed a bunch of youtube tools, actually. We had Zunifiques, and Grappling Library library. On a un Python library, and dash, dash, for making, making, web dash, library, and Python and Python. So those are for libraries, libraries that live on the internet. And install them from and our own in the physical world. This has been heard, and others has been found by 13 of a few dozen, a few dozen here on Trial, and a few dozen here on Canada. Aimee et Nathan, s'il vous plaît, pardonnez-moi pour cette interruption, mais le son n'est pas working at all online. Qu'est-ce que vous pensez que les gens pourraient essayer d'être différents pour s'occuper ? C'est ça, c'est ça, c'est ça. En addition to giving access to all of the options in all into AS, it also adds some higher-level functions for creating more complicated charts. Juste a few lines of code. This chart here, the scatter plot and also the marginal x and y distribution charts, that's a pretty complicated chart. Javascript, javascript, but if you're creating an iPhone, which has added any other argument, you can get those charts and charts. And with KotlinJS and also Kotlin PY, all of the interaction. Let me try to just use my computer mic, is that better ? Yeah, yeah, sure. Does that work? Oh, this is much better, thank you. Okay, your thumbs up. Okay, cool, go. Okay. Go ahead. So that's the top layer on our data visualization tools. In addition to all the documentation that we have online for the POTLI libraries, there's also the POTLI community forum where people post questions, can answer each other, have conversations. We also have our community manager Adam, who's very active on the forums. So that's a great place to go for help questions about POTLI. And we also have our dash in 20 minutes tutorial, which is a new addition. So if you're looking for a place to get started with dash, this is the tutorial that we point people to and it'll walk you through creating a simple dash application. And then, in addition to our open source libraries, we also have our enterprise product, which is called dash enterprise, which is a deployment platform for dash applications. So it provides an easy way for a company to set up a server where their employees can create and deploy dash applications and share them with the rest of the company. And we have a bunch of enterprise tools that are built on top of that as well to provide different ways of exploring data. And I think that's what you're going to show a bit of. Yeah. Right now. OK. All right. So we actually, today was a pretty big day internally, because today was like, we press the release of 5.2. You'll see this is an internal dash enterprise instance that I'm looking at. And down at the bottom here, we're running on 5.2 has a lot of really cool new features that are baked into it. And this is what the platform looks like. So it's a data science development platform and deployment platform. It's designed for Plotly's tools. But actually, as a 5.2, you can, we're launching that you can deploy any type of application onto here. So you have streamload apps, you have dash applications, you have Django applications, all of them can live on dash enterprise. It's designed for teams. It's designed to be collaborative. We use it internally really heavily and professional services team customer facing products and demonstrations applications are all built through here, which is great. Some of the great features on here, we have an app catalog. So if you're looking to get started with a web framework, usually the first first thing you're going to look for is sample apps and demonstrations. Maybe I should pick the faster server. Oh, there we go. So we have hundreds of sample apps with different UI layouts, database connections. So like if you're looking to connect to Postgres or a remote like database, or if you're looking to integrate into Salesforce or anything like that, we have lots of examples that end. So really, depending on what you're trying to do, there's a quick start guide in here for it. I'll also add an exciting new feature that we have that we just launched. Middle of last week, I think this is our public documentation dash dot poli.com. There's a lot icon on the bottom right. This is ask AI so we're just launching an AI integration poli is with our open source libraries and with the community forum that Emily was talking about. It's pretty awesome because meant from day one, like gender, like GPT systems, like open AI are able to think they're cognizant of Plotly, they're cognizant of our tools and of our libraries, which is fantastic. So like, again, our slack exploded with people being like write me a dash app that can that's like singing a song or something like that, and it knows what to do. So now we're launching like an integrated system so you can ask a question. So this is great. Like a lot of people didn't raise their hand. But hopefully it takes that dash in 20 minutes down to like five. And it'll point you to documentation point you to examples. You can open multiple chats if you're interacting with it for a while. So here it'll point me to the tutorial. It'll explain the differences between, oops, I guess this was just the window and you can ask it all sorts of questions. So this is nothing new. I think if anyone's been paying any attention to the world for last year, but what's new here is it's really dedicated to Plotly's tooling, which is awesome. And of course it knows about the latest libraries and versions in here and I'll explain what's going on. So looking to get started, courage to play around with this, start interacting with it, see how it works and hopefully learn something. We also have our Dash Design Kit library in Dash Enterprise. Really what Dash Design Kit is about is, Dash is about building web apps with Node.js. Dash Design Kit is about building web apps with Node.js, HTML or CSS, which is awesome. So over folks that are over the day science background, usually you're not used to or familiar with building full stack applications and that's okay. The goal isn't to spend hours and hours and hours fiddling with CSS pointers. It's to make your data shine. That's our goal, is enable it. I think back in the day when we had Chart Studio as our flagship project, this was a great slogan, but certain institutions weren't such a big fan of it. Our slogan was free the data. That was kind of fun internally, but banks don't like when you say that, which makes sense. But that is still kind of true, because that's what it's about, is about freeing the data. There's these massive data sets that you have under the hood. How do you get people to go use those, interact with them, all that good stuff. So yeah, that's Dash. I'd highly recommend folks give it a shot if you haven't yet. If you are familiar with Python, the learning curve is really pretty small. It plays nice with all the tools you like. If you like pandas, boom, it just works. So that's great. Yeah, I think that's my main demo. We have some other new features that are coming out soon that will probably start marketing in the future. I didn't have time to get something good. I have a demo, but it's not, it's using internal data. So I'm not going to screen share it, but I can show it to people around here afterwards, so you can come ask. We have some new features launching this fall, like a new command line interface, a shortcuts menu with authentication and saving views to different models. And in here, you can see there's also some other new features coming, like viewer analytics. So if I look on a specific application, like Omar's application, we can view individual analytics for that app. And if, you know, this is a testing service and no one's really looking at anything, but this is really useful. You don't need to work with something like Google Analytics. You can keep all your data internal. That's a huge feature of Dash Enterprise. It's always going to be installed on customer cloud. So this isn't really a tool for like individuals to go try out a SaaS, something like that. It's all about like integrating teams and bringing teams together and then making sure that your data and your applications are secure and internally managed. And you want to add? The only thing I was going to add, if you go back to the slides, is that we're hiring. We have some open positions, which are shown there. Maybe talk to Dana. She can tell you more. And I think that's it. Thank you. Question. Hello. Are you guys remote, hybrid? Yeah, hybrid. Now, maybe you correct me if I'm wrong on this, but I'd say we're probably remote first at this point, but obviously we have this awesome office. The Pauly faces that you see on the back table, they raise your hand if you're from Pauly. And us, we're the regulars. So we're in here most days. If you're working on something related to Dash or Pauly, come knock and say hi. But I think that at this like usually office is pretty quiet day to day. Even though we do have Montrealers, don't come in. And if you have any questions about Pauly or Dash or anything, come talk to us. Yeah. I'm just curious. How do you explain to someone, if you're going to go back, do you have to kind of call them or something about RBI? All about flexibility. And it's all about integrating with existing tools. So like Power BI looker, you're always going to be constrained by what these toolkits offer and what integrations they offer. Dash, you're constrained by what Python offers, which is always going to be like massively more diverse. I don't need to wait for Microsoft to publish an update or Google to publish an update in order to get access to my data. I can just hook right into it. And obviously in terms of transformations and reusability and modularization, Python's a really powerful toolkit for that. Obviously, like it's top of mind for us to deliver really low code solutions. So we have App Studio coming out. We have a solution called Dashboard Engine, which brings cross-filtering directly into your applications with little to no additional code. And I'm happy to talk about those after I'm not going to, I don't have a presentation for them here again. It's just some internal data. But I think really it's all about customization and flexibility with the toolkit. Yeah. Yeah. Version of Python. Which version do you support? All versions. We are, I think we said we're not doing Chelsea Right 2.x. We're not supporting anymore, but 3.6 and up. 3.7 now. Yeah, 3.6 is the standard. But I will say too, we're really dedicated to backwards compatibility unlike some other folks in the Python space. So yeah, if you're, you don't need to worry about us dropping support for your app and then trying to deploy it in six months and it breaks. It'll still work. There's constantly conversations about backwards compatibility. It's really fun and exciting. Any other questions? Cool. Yeah. Anyway, you guys are going to be around. Yeah. Yeah. Yeah. So, thank you. Thank you. Ok, là en tout cas, tu veux partager ton écran? Oui. Check, il n'y a rien qui affiche. C'est fabuleux, mais je reviens. Ça, je peux changer ça, pas dans les écranes, mais je vais pas, je peux changer ça. Mais c'est pas la cible, c'est la cible, c'est la cible, c'est la cible, c'est la cible. Ok, je peux pas... je peux pas, je peux Polish.. Ah! en le dis, je peux, je peux, j'en peux, je peux? Moi, j'en peux. Oui? Oui, C'est bon, ok on voit, c'est éco parce qu'il y a peut-être que je suis coupé mon son, je sais pas si là les autres m'entend ou pas, alors est-ce qu'on m'entend anglais, Yannick ? Ok, c'est bon. Ok, bien notre prochain présentateur c'est Stan, il va nous parler de son projet en intelligence artificielle. C'est bon, go ahead. Ok, merci Duc. Donc pour cette présentation je vais parler en anglais parce que je préfère, c'est plus facile pour moi mais après j'accepte des questions en français donc ça va, c'est juste ma première fois je préfère parler en anglais. Ok, hi everybody, my name is Stan, this is my first time here, so great to be here. I'm going to take you through a bit about my presentation, my project in Python. To begin, I'm just going to reintroduce myself, I'm Stan, I'm a data analyst, data scientist with experience in financial analytics and people analytics. I really like those fields because I really like making people live happier, fuller lives, it's something that's important to me. So I try to make sure that what I'm doing kind of matches that and I'm also very interested in social issues so you can see from this intersection of gender and anything going on in the world is just something that's randomly interesting to me. So my presentation is about men's perceptions of their own masculinity. So I'll just start with the front slide, what do men think it means to be a man? So the project's goal is to develop an algorithm that predicts men's perceptions of their own masculinity from a survey of 1615 respondents. So the survey is actually from WNYC N538, it's a pretty large data set, but it goes through a lot of different survey questions post-metoo movement about how men see themselves in terms of their auto-perception. Ok, so understanding the problem, so I investigated the problem by looking at the way men think about their masculinity, applying two different regression models, linear and rich to train and predict data from 538, which is a popular website. They're known for their statistical analysis, political stories and insights, and all of this is like open source data, so it's very interesting and anybody would like to take a look should definitely take a look. And also the article, what do men think it means to be a man, is also an article that has major takeaways on 538's website. So some of the exploratory analysis on the presentation, so we can see that most men considered themselves to be somewhat masculine and followed by the men coming in about 600, and something we thought that they were very masculine. So we can see a huge drop off for not very, not at all, no answer, so not many people wanted to be seen as not masculine. You can also see that most of the data set was straight men, gay and bisexual at 10%, and other minorities in terms of sexual orientation occupied a very small sliver of the data set. And we can also see exploratory, just visualizing by race and age, you can see a distribution heat map of what was going on with the data, you can see most of the respondents white, and they were between the ages of 35 to 64 years of age. This is also just a GM mapping of where the data came from, where respondents answered from, so we can see that Texan and California occupied a large part of the data set. Obviously a huge population density there, and these are just the pre-processing kind of exploratory, pre-pre-processing exploratory analysis that I did. So going on to the results. So I applied an aggressive approach to data cleaning, so started off with a data set of about 1,615 samples, like N of 1,615, and ended up with a loss of over 1,000 rows. There were a lot of subset questions that I chose to remove for one reason or the other, being kind of my first foray into machine learning on this scale. I did that as a result, some of the results were pretty contradictory and exaggerated. We can see that the coefficients for Hispanic, men, black men, white men, straight men, you can see that there's a negative relationship between their responses and their presumed level of masculinity, which obviously doesn't make any sense. And also their negative regression scores, so R squared was negative 0.34, and the ridge regression was also at a negative, and the ridge regression is a really cool technique because it kind of constrains the model. So it removes all these extraneous and like far out values, so got it closer to a zero, which is still not great. So anyway, so conclusion and next step. So this was kind of something that was like a little side project for me and kind of ballooned into something that was like a bit bigger than I wanted to go into on my own. So that accounts for kind of the poor model performance because I've been like the dog that caught the fire truck. And so as somebody who's like newer into unsupervised machine learning, I'm looking for a partner to just complete the project because it's mostly almost done. Wanted to get like some mutual aid from this awesome group of people and then perhaps represent the data in a more robust form here and then co author some type of article on medium, followed by maybe some fame and glory when we're done. So yeah, so this was just a quick presentation of my data, which is still in a pretty naive state. But I just wanted to share, given that it's a Montreal Python group and I thought this would be a good place to come and look for just, you know, people want it to perhaps participate on this project and it's up on my GitHub. That's my email address in my GitHub. And I'm happy to take any questions now or after. But thanks for listening to me. Well, the coefficients basically so I ran a regression model. So the coefficients basically give you an association of, you know, is there a positive relationship with this specific variable or if there's a negative relationship with a specific variable and OK, OK, OK, so these are survey questions sorry. So the survey questions, for example, folks answered, you know, whether they're Hispanic, whether they belong to a non a race or ethnicity that was not specifically recorded black. Also, white straight other Asian. So yeah, these are just like different ethno demographic variables. So these are just showing a very negative correlation. So if you're Hispanic, showing like a coefficient like to the power, like to the order of a billion here, where, you know, you are less likely to be masculine, which doesn't make any sense. All these, like, are very aggressively negatively correlated to the target value, which is, you know, the masculinity itself. Oh, yes. So the masculinity was un ordered value or no value. So it was like, so if you look here, it's like somewhat masculine. So that's so then so then I am process it to be an ordinal value. So we had 01234 or whatever it was. So that's kind of boiling down like the target variable. So then, yeah, these are the related core coefficients, which are wildly incorrect. So, yeah. Oh, sorry. No, no, no, you didn't. Oh, it was how mad. So basically, it was, at the end of it, I was basically trying to predict how masculine somebody, a man would would consider himself to be based on a constellation of light values. Just like, maybe you're from Texas or maybe you're like this age or you saw like abuse in the workplace or et cetera, like how masculine a specific person would self identify as based on these series of questions from the WNYC survey. Thanks. Yes. Yes. Yes. Yes. Ok, so we have a deal then. Thanks so much. Ok, Ben. So, yeah, if anyone, if anybody would like to work with Stan to coding or I don't know whatever. So, we will send the information about Stan to everybody. Ok, thank you, Stan. Yeah, thanks. Our next presenter is going to be Guillaume, who wants to talk about how to manage mono repo in GIP. So, welcome Guillaume, I'll let you take care. Ok, bonjour. Mon nom c'est Guillaume Pratt, je travaille chez Artbox, puis je viens vous parler de Basel et de mono repo. C'est un sujet quand même dense, fait que, et si vous avez des questions, n'hésitez pas au feu et à mesure de les poser, ça va être plus dynamique comme ça. Et puis voilà. Donc, est-ce qu'il y en a parmi vous qui ont déjà de travailler, est-ce qu'il y en a parmi vous qui travaillent avec un mono repo qui savent que c'est en fait premièrement, oui. Plotli, un mono repo, yes. C'est tout. Ok, parfait. Est-ce que, est-ce que ce produit-là, c'est moi-là Basel, ça dit quelque chose à quelqu'un, pas du tout. Ok, ben, on va découvrir ensemble ce soir. Je vais juste danser ça ici. Oups. Ok, alright. Donc, c'est ça donc, mon rôle chez Artbox, c'est architecte de système grosso modo. Je suis en amont des projets en train de faire des prototypes, des expérimentations dans le but de réduire le risque des projets. Donc, j'ai évolué de développer un full stack architecte ça fait à peu près un an et demi, deux ans. Puis ça fait 13 ans que je travaille pour Artbox. Et j'ai un petit chapeau aussi là de responsabilité d'entretenir des builds. Et ce que je vais vous parler justement, c'est d'un outil qui permet de construire les logiciels pour les déployer en production. Et puis de gérer ça dans un contexte où est-ce qu'on a beaucoup de projets à gérer. Puis qu'on veut pouvoir les paquets de G pour pouvoir par la suite les déployer en production. C'est dans ce contexte-là que je parle de Basel et de mono repo. La compagnie Artbox a été fondée en 2005. C'est une vieterie dans l'info nuagé qui s'en veut dire comme sans français. Mais grosso modo, la compagnie offre une plateforme dans White Labo. Je pourrais en comment le traduire en français qui permet des clients comme le Cirque du Soleil de vendre ces billets de spectacle en ligne. Donc comme clients en aussi, les clients Montréal comme les Alouettes ou le CFM, les clubs de foot de Montréal. Ou le European Tour, le DGolf en Europe. Ou même au Mexique, la Taquilla qui est une vieterie au Mexique. Et on a un poste de développeur faustacoubert, si jamais ça vous parle, vous pouvez venir me parler après la présentation. Donc en 2018, ça fait cinq ans de ça. La situation c'est qu'on avait un dépôt guide par projet. Plus de 100 dépôts indépendants, donc à la fois des librairies et des projets. Des projets et des librairies partagées. Et on développait et on installait sur des serveurs un tas en des environnements virtuels. Est-ce que tout le monde sait ce que c'est un environnement virtuel ? Oui, c'est sans pétan. À titre de rappel, je sais, on est à Montréal pétan, bien sûr. Mais grosso modo, ça nous permet de faire une installation locale dans un repertoire de certaines librairies pour pouvoir faire installer des logiciels. Et nos diplomats, c'est nos serveurs, utilisaient les environnements virtuels. Ça nous a questionné quelques problèmes. Nos installations n'étaient pas reproductibles, pas juste si il y a une panne réseau. Mais si on ne spécifiait pas toute l'indépendance transitive, une dépendance transitive, c'est une dépendance de dépendance. Et comme dans notre sheet of requirements, on avait des oublies de dépendance de dépendance, on installait, puis tout d'un coup, il y avait une dépendance transitive qui était mise à jour sur Pay-Pay. Et puis là, pouf, ça brisait notre installation, ça fonctionnait plus. On avait une gestion qui n'était pas nécessairement facile non plus de dépendance parce qu'elles étaient spécifiques dans chacun des dépôts. Ça fait que ça fait beaucoup de projets. Si je n'ai pas remonté une corrective de sécurité sur une librairie, il fallait passer à travers tous les dépôts. Puis ça fait aussi des pour-requestes à faire sur beaucoup de dépôts pour pouvoir gérer nos projets. Donc en 2019, notre secteur développement en Vadim a dit qu'il en devrait passer vers la Monoropo. Monoropo, ce que c'est, c'est un projet, un seul dépôt guide qui contient tout le code de la compagnie, la documentation, les projets et les librairies partagées. Puis quand Vadim m'a proposé ça, au début, j'étais un peu ridissant parce que en fait, ça prend seulement un système de bulles pour pouvoir faire du Monoropo parce que sans système de bulles, c'est un petit peu difficile à gérer. Mais en examinant ça, en regardant Basel, ça a commencé par faire du sens, puis on ne cléait de l'avant et on ne l'a pas gratté. Mais je peux vous dire qu'au début, initialement, c'est ce que j'avais une certaine rédistance par rapport à ce projet-là. Il faut distinguer un Monoropo d'un monolithe. C'est ce que quelqu'un peut me dire, c'est quoi un monolithe dans la salle ? Duc, vas-y, vas-y. C'est maintenant plein d'applications. Peut-être qu'il y a une application qui fait plein de choses. Qui fait tout. Qui fait tout. Donc, par exemple, un monolithe frontaine, le frontaine va contenir toutes les fonctionnalités de la compagnie, qu'il y a la compagnie off, ou un monolithe backend, ça va être tous, tous, tous nos APIs vont être dans le monolithe. Mais Monoropo ne veut pas dire qu'on est en train de produire un monolithe. Parce qu'on peut avoir tous des petits projets, on peut même faire une architecture style micro-service, l'héberger dans un Monoropo. Donc, par exemple ici, c'est un extrait de certains packages qui sont produits par notre système de build, puis qu'on peut tous déployer de façon indépendante en production, même si on a un seul dépôt guide avec tous nos projets à l'intérieur. Mais pour gérer cette complexité-là, ça prend seulement un système de build, parce que, comme je disais, s'il y a 50 ou 100 ou plus de projets dans ta compagnie, de gérer ça à la main avec, tu sais, ça serait un peu, il n'y aurait pas d'avantage à migrer dans un Monoropo sans avoir aussi un outil de build qui nous permet de rendre les choses plus conviviales. Puis on a regardé différents outils de build, puis on a arrêté notre choix sur Basel, qui est un outil construit par Google, utilisé en interne par Google, ça s'appelle Blaze en interne chez Google, mais ils l'ont publié en licence open source en 2015. Puis même avant que Basel se aurait publié, il y avait des anciens Googlers, des anciens employés de Google qui s'ennuyaient de ce système de build-là puis qui ont en fait des émules, il y a Pants, je pense, Facebook a fait, les différentes compagnies ont fait des, au box, je pense, c'est un box que Facebook a fait. Mais Basel a une bonne communauté, surtout aujourd'hui. Et puis, je pense, c'est le choix le plus intéressant du marché présentement, publié en 2015, sous licence Apache 2.0, donc un de chez Libre, qui a été écrit principalement en Java, mais avec quelque chose qui ressemble à Python, qui n'est pas vraiment du Python non plus, c'est-à-dire Starlack, Starlack, qui est un dialecte de Python conçu spécifiquement pour Basel. On va voir des exemples de ça tout à l'heure. Puis en termes de support, de langage, etc., c'est pas mal tout ce que sur le marché peut être construit avec Basel. Donc par exemple, ici, Python, bien évidemment, Java Script et TypeScript, Java, puis le logo à côté, j'avais aussi Kotlin, qui est un langage qui roule sur la JVM, point net, c'est plus, Swift, si vous reconnaissez le petit logo du langage de Apple, etc. Mais surtout, ça supporte aussi les dépôts externes de ces langages-là, comme PyPy, ça nous permet de télécharger des paquets de chiptons en local sur sa machine, mais ça supporte les autres aussi, NPM, Maven, etc. Ça supporte toutes les plateformes bureautiques, mobiles. On peut construire aussi directement des images d'occurre ou OCI. Est-ce que quelqu'un sait c'est quoi une image OCI? Open Container Initiative, c'est comme l'évolution d'une image d'occurre, mais formée par un des normes, un groupe de compagnies. Il y a même des extensions de Bazelle qui s'intéressent au déploiement à travers Kubernetes, Amazon Web Service, mais je couvrirai pas ça, aujourd'hui. Qui utilise Bazelle? Vous reconnaissez sûrement les logos qui sont là. Ce sont toutes des compagnies qui ont présenté à BazelleCon 2022 l'année passée. C'est comme deux jours de conférences organisées par Google autour de ce produit-là. Google, bien évidemment, qui l'utilise dans son monopo à lui, mais aussi par exemple Stripe, qui est un processeur de paiement qui l'utilise plus de 1000 contributeurs dans un monopo avec du Java, du Cala et du Python, et plus de un million de langages, de lignes de code d'application. Donc comment on met en place Bazelle? On met la configuration, si on veut, dans notre monopo. On va mettre un fichier Workspace à la racine et des fichiers build. Le fichier Workspace va nous permettre de spécifier je prends une note pour les gens qui est dans la salle. Si vous avez de la misère sur ce truc que je vais vous inviter à avancer tantôt, j'ai testé et les trois premières rangées de chaise, ça va. Après ça, ça va être un peu plus difficile. Je vais avoir du code aussi à présenter. Donc le Workspace, c'est là qu'on va définir nos dépendances externes. Les extensions de Bazelle qu'on appelle des règles, ça va nous permettre de dire, moi je construis du Python, je construis du Java. Et dans le fichier build, c'est quelqu'un qui a déjà fait des makefiles traditionnelles avec en C, oui, ce qu'il y a d'autres personnes dans la salle. En tout cas, je vais faire par la moitié à ta mémoire à toi. Dans un makefile, on définit des cibles dans lesquelles on fait rouler des commandes. C'est la paranologie, c'est la même chose qu'on va faire dans le fichier build mais de façon un peu plus sophistique. Donc, grosso modo, une cible, ça peut être je veux construire un package, je veux construire un script, un binaire, etc. Ou même une image, pourquoi pas une image traditionnelle. Donc, je vais vous montrer ça. Je vais me reconnecter. Donc, j'ai mis l'écran le plus gros que je pouvais. Voilà. Donc, ça, par exemple, ici, c'est à la racine ce que je vais vous présenter c'est du code du monorepôt de hardbox, c'est du code réel que je vous présente. Et le fichier workspace ça ressemble un peu à ça. C'est là qu'on va définir, comme je disais, les dépendances externes. Par exemple, ici, je vais télécharger les règles pitons de la version 025 puis on a une certaine construction. Le détail n'est pas très important pour l'instant, mais seulement pour vous montrer que dans ce fichier je vais spécifier que je veux les règles pitons, je veux les règles Java, je veux les règles pour Go, qui sont là parce que pour un petit besoin spécifique. Donc, j'ai mis les dépendances externes que je spécifie ici. Et c'est là aussi en plus que je vais aller chercher que je vais spécifier mon fichier requirements.txt qui est juste ici. Donc, je spécifie que je vais utiliser ce fichier là qui contient puis on utilise pip-compile, je vais vous expliquer ce que c'est. Est-ce qu'il y en a qui savent ce que c'est pip-compile? Peep-compile quand j'ai déjà utilisé ça, non? Je vais vous expliquer. Ici, j'ai les dépendances explicites mes dépendances primaires plus toutes mes dépendances transitives de tous mes projets de mon monorepot. Donc, j'ai des centaines de dépendances ici que j'utilise et comme je vous rappelle, les dépendances transitives ce sont les dépendances de mes dépendances. Et donc pour tous les projets de monorepot je vais utiliser la même version de, par exemple, plus intéressante d'une paille. Donc, à chaque fois que je vais spécifier que je vais utiliser une d'une paille pour mon projet ça va être cette version là. Et puis ici, j'ai une dépendance transitive qui dépend de d'une paille. Ça va être aussi cette version là qui va être utilisée. Puis la manière dont ça marche c'est que j'ai un fichier.in ici dans lequel je spécifie mes dépendances. C'est mes dépendances primaires, celles que mes projets de mon monorepot utilisent. Puis l'outil pip-compile prend cette liste-là et produit le fichier sur les inversés comme ça. Voilà. Donc, on parle de la liste qui est à gauche et on produit cette liste à droite. Est-ce que quelqu'un qui a déjà vu cette syntaxe-là, t'il de égal? C'est plus une norme plutôt récente que ça fait quelques années. Ça veut dire, installe-moi la version compatible à cette version-là. Compatible, vous voulez en dire que par exemple ici, à Riadne ça veut dire plus grand égal à 0.20.1 et plus petit que 0.21. Dans le cas de cet autre libéré-là ici à AlphaShape, c'est plus grand égal à 1.3 et plus petit que 1.4. On fait varier le dernier chiffre. C'est ça que ça veut dire ici compatible. Puis comme les dépendances en piton, les projets en piton ne suivent pas toujours semvaire, semantic versioning, qui est très populaire dans l'univers JavaScript, il faut, pour chacune de nos librairies, décider c'est quoi notre zone de confort. Puis il y a des librairies comme par exemple SQL alchemy SQL alchemy on veut ici, on le met compatible à 1.3, parce que 1.4 a des changements non rétro-compatibles puis 2.0 aussi. Ça nous permet de pouvoir par la suite avec une ligne de commande on fait pip compile, moyen, majuscule ça me permet de mettre à jour les dépendances automatiquement dans le fond, basé sur les spécifications de compatibilité qui sont là. Donc ça c'est voilà. Est-ce que vous avez des questions jusqu'à présent? Parce que c'est quand même de l'information dense, oui! Il y a les possibilités de se tromper sur le rapport aux dépendances quoi que ce soit par exemple s'il y a une dépendance qui n'était pas vis-à-vis et à l'autuie qui est en fait la possibilité est-ce qu'il se passe avec une fréquence ça veut dire sporadie ou c'est quelque chose qui en fait des complètement pas poussés. Donc c'est quoi la mise à jour de la fréquence ou de la mise à jour de nos dépendances? Est-ce que c'est un peu sur la question? Bien idéalement c'est quelque chose qu'il faut réparer. Il y a deux choses qui peuvent nous faire en sorte qu'on met à jour nos dépendances en fond et premièrement si on roule un audit de sécurité par exemple avec Safety qu'on voit qu'on a des dépendances, qu'on a de trop de sécurité il faut les mettre à jour on est un peu forcé sur le web et puis l'autre chose c'est c'est une bonne pratique au moins peut-être à toutes les quelques sprints de rouler, des mises à jour et de retester pour rester il faut pas être trop en arrière ici il y a certaines librairies comme M. Alchimie on serait vraiment dû parce que c'est la version 2.0 c'est un mélange d'audits de sécurité des versions mineures des fois faire des tâches pour quand même ramener le code dans des versions majeures des projets. Est-ce que ça répond à la question ? Oui un peu c'est un peu important des trucs que l'on récourt en fait plutôt comme une série de microservice est-ce cela en fait c'est les buts en fait ou c'est que nous avions peut-être notre site Est-ce que je vous présente présentement c'est vraiment au niveau du build donc ça ne pourra pas avec l'architecture de ce qu'on déploie on n'est pas sur des microservice on n'est plus sur des services et pour essayer de répondre un peu je pense que la question que je lis en cléline est-ce que il y a toujours une seule version de nos dépendances pour tous nos services donc quand on fait une mise à jour d'une dépendance on s'applique à tous nos services à la fois Là j'entends bien reprendre le fonds en fait dans le bon nombre de fois avec un homme d'une manière d'auro pour ce sens Oui je vais continuer la présentation si jamais vous avez d'autres questions mais oui c'est ça on met à jour tout le monde en même temps. Est-ce qu'il y avait d'autres questions ok je vais poursuivre donc ça c'est pour le fichier workspace que je vous présentais je vais juste revenir en arrière donc dans ce fichier-là je spécifie je télécharge des règles c'est-à-dire des extensions en basselles et je spécifie les dépôts comme là j'ai spécifié un dépôt pour Python mais j'ai aussi un dépôt pour Java en fait avec ce fichier-là que je vais vous montrer je vais vous montrer que c'est le même principe donc je spécifie je dis un Maven Insta on est dans l'univers Java et là on voit des dépendances, des versions avec un chasse-somme donc c'est l'équivalent du log file de pip que je vous montrerai tantôt mais dans l'univers Java et même dans l'univers Java script aussi on prépare un log file d'un PM donc le même principe s'applique pour différents langages pour on peut construire en même temps plusieurs langages dans notre monopole l'autre type de fichier c'est des fichiers-build par exemple je vous montre ça ici et là on s'envoie un peu plus dans l'univers Makefair que au moins personne dans la salle connaissait donc par exemple ici je vais définir une cible qui va être en lien avec un fichier-piton qui s'appelle Accentlu aussi ce que je suis en train de faire ici c'est de définir une cible dans mon monopole par module-piton et ce que je suis en train de faire ici c'est un peu de ramener mes imparts-pitons dans un format qui va pouvoir être compris puis analysé par Basel et ça oui c'est d'ouvrage et ça faisait partie de mes réticences aussi au début de peut-être un peu maintenir on dirait en double des imparts puis les dépendances entre les modules de façon très très granulaire mais cette grande granularité va nous permettre de faire un gain incroyable quand on va passer au CI c'est-à-dire Continuous Integration ce qui va lancer les tests et faire notre but parce qu'il y a une cache distribuée dans le produit et cette cache va me permettre de raccourcir énormément à mon temps de but je vais vous le montrer tout à l'heure donc oui j'ai un peu de travail ce ne sera pas parfait non plus entre les modules pitons puis la définition dans Basel mais j'ai un gain vraiment intéressant à faire ça donc pour chacun de mes modules je vais définir mes cibles comme ça avec un format que je vais vous présenter ce n'est pas très important pour l'instant vous pouvez vous imaginer qu'il y a un arbre de dépendance que Basel construit sur toutes les cibles de mon monorepôt et que cette arbre de dépendance va être la clé pour ce que je vous disais les gains de temps important la réduction de temps important lors de mon CI et un dernier truc que je vais vous préparer à part ça par exemple on a aussi des fichiers point BZL on va définir des macros là vous pouvez penser en analogie de différents trucs par exemple une macro en C un pré-processeur qui va générer du code avant que le compilateur arrive ils ne vont plus penser à ça mais c'est marqué def puis ça ressemble à la Ducuton ce n'est pas pour rien parce qu'en réalité ce que je vous montre depuis tantôt c'est un langage de programmation qui s'appelle Starlac d'ailleurs le VSCO le reconnaît ici et tous les fichiers que je viens de vous montrer sont en fait codés en Starlac puis je vais commencer je vais juste vous faire la preuve de ça je suis dans un langage de programmation je peux faire print bonjour puis si je lance mon build je vais avoir bonjour ici donc je suis vraiment en train de programmer mon build je suis même dans un langage de programmation je peux faire des choses comme on connaît à Pistons comme une compréhension de liste donc ici par exemple je devrais maintenant avoir 1, 2 et 3 en input 0, 1 et 2 excusez-moi je commence à faire 0 et puis je l'hésise c'est un autre truc qui peut paraître étrange au début on est en train de c'est un langage de programmation qui ressemble à Pistons pour spécifier son build mais ça ouvre la porte à beaucoup de choses beaucoup de flexibilité beaucoup de puissance c'est là que vient beaucoup la puissance de base par exemple ici ma macro c'est comme un appel de fonction en Pistons et excusez-moi qu'est-ce qui se passe j'ai excusez-moi et puis par exemple ici je spécifie d'une image qui a des layers qui ont des finis un peu plus hauts donc en tout cas ça me permet de regrouper en commun d'assembler dans une macro de haut niveau des choses de plus bon niveau d'offrir au déplapeur on fait un peu du comme du débat on offre au déplapeur une abstraction de plus haut niveau pour pouvoir pour pouvoir spécifier des build d'image docker par exemple dans son application on peut spécifier le binaire principal avec un paramètre with docker y-all troop ça fait appel en arrière du code qu'on a programmé soi-même qui nous permet de construire automatiquement son image docker fait que ça nous permet de faire des choses très puissantes avec avec ce langage de programmation là finalement est-ce que vous avez des questions qu'est-ce qu'on a besoin de docker le délapeur qui roule dans la machine de téléphone ou en fait baser les histoires pour éviter les images bonne question puis Basel va construire les images docker en construisant des targes gz puis en les assemblant lui-même particulièrement avec le nouveau format rose aussi il y a certains outils en local qui vont être utilisés mais j'essaie de vulgariser puis simplifier au maximum on ne fait pas c'est très différent que de faire un docker dans un docker faire on va faire des étapes de run puis on va exécuter des commandes dans un environnement docker ici on va vraiment construire des targes gz avec des règles et assemblées ça va faire ça va nous faire nos layers la façon de réfléchir est différente mais c'est le temps d'introduire une chose c'est que un des objectifs d'utiliser docker ou un des objectifs excuse-moi pas docker mais basel une des choses que basel permet beaucoup plus facilement avec docker ou avec d'autres de construction d'avoir des bulles qui sont toujours reproduisibles puis après ça l'hermeticité d'un bulle c'est un concept encore une fois un peu étrange pour nous dans l'univers piton mais quand on est à l'échelle de google ça fait du sens on veut que ça soit facile de relancer le bulle d'un poste à l'autre de développeur on veut que le moins possible l'environnement local un développeur je vous donne des exemples très simples que vous avez peut-être vécu genre il y a un fichier requirements.it dans le projet et puis là un développeur pousse on utilise des environnements virtuels pour développer un développeur pousse ajoute une nouvelle dépendance une nouvelle version d'indépendance dans le dépôt puis bon par exemple tu fais ça de ton côté tu pousse requirements, tu ajoutes une nouvelle dépendance ou tu changes la version d'indépendance je fais un guide pool je obtiens ton code j'oublie de refaire mon environnement virtuel par exemple de faire pip install je lance mes affaires et ça ne fonctionne pas plus ah oui c'est vrai il faut que je fasse pip install parce que les dépendances sont changées mais dans le code de basel c'est géré pour nous et quand je vais faire un basel run basel build basel test on verra ces commandes plus tard si les dépendances changent mon environnement va se reconstruire automatiquement pour moi puis je n'ai rien autre à faire que par exemple guide checkout sur notre branche je lance les tests seul les tests affectés par les filles qui ont changé entre les deux branches vont lancer puis si les dépendances ont été mises à jour l'équivalent basel de mon environnement virtuel va se mettre à jour aussi puis quand je fais mon build aussi je vais avoir toutes mes dépendances package pour moi dans mon targe gz ça évite les problèmes que je vous mentionnais je disais on le déployait dans un environnement virtuel bien avec basel nos installations sont toujours reproductibles il y a des gros avantages ici est-ce que vous avez d'autres questions oui oui ça c'est un avantage et un inconvénient parce que tu peux casser les autres tout à fait puis on a essayé c'est possible techniquement avec basel de spécifier plusieurs fichiers point de nixité mais le problème avec ça c'est que si par exemple je vais attendez c'est un sujet il faut que je vous montre quelque chose par exemple ici c'est de cette façon-là ici je marque requirement.msql puis requirement point de barre un fichier ici en tout cas bref c'est pi3 depth lui il est défini dans mon workspace je fais mon installation de mes dépendances qui viennent de mon fichier requirements puis ton trou.txt j'ai un seul fichier spécifique toutes les versions complètes pour toutes les dépendances primaires et transitive de mon monde auparavant on avait plusieurs fichiers on se disait peut-être que pour les outils on peut mettre un fichier à part peut-être que pour tel projet à part qui doit répondre aux normes PCI on peut mettre des dépendances à part mais c'est qu'on finissait par importer les dépendances de plusieurs sources et là c'est vraiment avec des dépendances transitive qui peuvent être les mêmes avec des versions différentes dans les deux ensembles de dépendance là laquelle qui va gagner entre les deux c'est pour vraiment définir c'est pas nécessairement déterministe pour que ce soit déterministe toujours reproduisible on n'a jamais de problèmes en production un seul jeu de dépendance mais ça doit être inconvénient qu'il faut tout retester ça prend des tests intersalides tout c'est clair ça demande si on met à jour une librairie c'est un peu l'approche Big Bang ça c'est un compromis que nous on est prêts à faire pour avoir les avantages que je viens de mentionner je sais que les vols sont utilisés pendant des cours on est 15-20 développeurs on a décidé d'y aller d'expérimenter ça on a trouvé que même une petite équipe comme nous on a chez Hotbox on a trouvé plus d'avantages que d'inconvénients parce que c'est quoi le protocole mettons si tu casses le projet de Feltando je vais répéter des fois pour le stream c'est qu'est-ce qui se passe si on fait on met à jour une dépendance pis que ça cause le projet quelqu'un d'autre en fait au build quand tu as faite ta pull request ça va passer le build casse donc il faut que tu corriges ta pull request n'est pas mieux jable donc il faut que tu corriges si tu as introduit une mise à jour de dépendance il faut que tu corriges tout le monopropre dans ta pull request donc ton projet va payer ton projet va payer oui bien oui ben peut-être que pour la banque nationale parce que des workspace on peut en faire plusieurs dans Bazelle aussi donc peut-être qu'il y aurait plusieurs workspace nous on a vraiment tout mis sous dans un même plan y parce qu'à la taille qu'on est pis les projets qu'on a ça fait du sens mais c'est possible de faire plusieurs races c'est possible de faire un monopropre mais avec plusieurs workspace de construire le monopropre sur plusieurs workspace ça c'est possible c'est avec Bazelle donc à ce moment-là chaque workspace aurait son ensemble de dépendance si je sais pas peut-être que ce serait séparé par domaine pis c'est certaines applications clients pour les assurances et que ce serait dans un dans un workspace dédié pis y'a un autre workspace pour autre chose peut-être des workspace par équipe ça peut faire du sens si c'est possible la flexibilité existe mais là je vois plus l'utilité de les sommes si on peut avoir le workspace c'est comme si chacun aurait son propre impôt ben oui peut-être peut-être mais l'utilité du monopropre est là quand même je pense par simplification de pouvoir naviguer dans tout le code de la compagnie avoir une meilleure visibilité sur tous les projets pouvoir rouler tous les tests de tout tout le temps je pense qu'il y a quand même une utilité qui est là mais bon ce que je vous présente c'est vraiment dans le cadre plus de l'échelle de la compagnie qu'on est nous on trouvera ça intéressant c'est une mode question à réfléchir pour une compagnie de la banque on peut en parler après la présentation il l'utilise il l'utilise oui il l'utilise d'autres questions par rapport à ça juste pour vous dire le fichier workspace c'est en transition vers un autre système qui va être un peu plus simple je vous le mentionne je ne parlerai pas simplement pour vous le mentionner donc parlons justement des avantages des inconvénients de Basel on en a parlé beaucoup présentement le premier c'est la réduction du temps de passer en CIA donc l'attente dans une polyquestre que tous les tests que le build se fasse aussi dans le cas de notre monopropos sans aucune cache ça prend 42 minutes et le temps moyen de 7 minutes fait que ça déjà c'est une économie de 6 fois si on n'avait pas Basel ça prendrait beaucoup plus de temps à rouler tous les tests le temps le plus court que j'ai vu avecant qu'il n'y a pas au peu de changements de pas c'est autour de 3 minutes le pire temps observé dans les dernières semaines que j'ai vu c'est 23 minutes donc même quand on fait des changements profondeurs il y a un effet de cache qui est quand même assez assez intéressant pourquoi ça c'est là qu'est-ce qui permet ça c'est ce que je vous ai tout à l'heure le fait de spécifier très finement toutes les dépendances entre les différents modules pitons offrant ça que quand qu'un fichier qui est modifié seulement les tests affectés par ce fichier là vont être rouler et il y a une cache distribuée partagée par les différents agents de build aussi qui permet ça on l'a mentionné tantôt aussi nos installations sont reproductibles parce que l'archive par GZ contient toutes les dépendances c'est plus facile de naviguer dans le code je le remonte au riz tout à l'heure on peut faire des branches de fonctionnalité ça c'est grosso modo quand on fait une branche dans notre dépôt on peut travailler sur tous les projets en même temps et faire une polyquest qui contient du back end, du front end une visage aux dépendances un changement de changement de chez notre base design je n'ai pas plus besoin de faire une polyquest dans chacun de mes projets si je mets un jour une librairie je n'ai pas besoin de faire une polyquest qui cible chacun des projets je fais mon changement à un endroit je modifie tout mon code ça pour nous c'est avantageux parler de la gestion en dépendance c'est exactement ce qu'on discutait tout à l'heure on a juste son acetade un seul fichier à mettre à jour c'est à faciliter l'objet de sécurité en contrepartie c'est pas possible de faire la mise à jour pour un projet isolé et qu'il faut re tester tous les projets ça demande d'avoir des tests unitaires solides dans son projet une inconvénience d'un passage de basel je vous ai mis un nuage ici de concept ça représente le brouillard que moi personnellement j'avais dans lequel l'état dans lequel j'étais le brouillard dans lequel il faut naviguer pour apprendre basel mais je passe à travers je suis en vie je suis un utilisateur heureux donc ça se fait c'est juste pour tourner sur les bancs d'école c'est juste ça peut-être qu'il y aura un groupe de pratique de basel à Montréal maintenant je vais vous faire une démonstration sur l'expérience de développement avec basel vous êtes toujours d'attaque je sais que c'est très dense comme présentation qui veut me dire oui je suis d'attaque personne, oui ok merci ça m'encourage ok donc je vais vous montrer les quelques commandes moi c'est par basel clean parce que qu'est-ce que une petite build si on peut pas faire clean mais c'est juste pour pouvoir nettoyer l'état du dépôt avant de vous montrer le reste après ça on va faire un build je vais vous montrer run puis je vais vous montrer test c'est les commandes de base donc si je fais un basel clean puis je vais mettre moins ou moins à 5 juste pour que ce soit instantané bien ça va effacer les builds que j'avais fait précédemment et à 5 c'est juste qu'il le fait en arrière-plan basel build maintenant donc quand je fais un basel build je vais construire une cible ah j'ai oublié de vous montrer un truc qui est important excusez-moi pour que vous puissiez me suivre ce truc-là ici une étiquette de build ou un build label en anglais c'est un peu très étrange le premier fois qu'on voit ça mais en fait pas trop compliqué slash slash faire référence à l'emplacement du fichier workspace le deux points faire référence à l'emplacement du fichier build entre les deux il y a peut-être un package c'est un package basel c'est pas un package Python un package NPM c'est gros sur mon dos le chemin depuis la fichier workspace jusqu'au fichier build c'est le package dans le fichier build on a nos cibles donc après le deux points on peut mettre le nom de notre cible avec ça vous allez être outillé pour suivre ce que je fais donc je vais construire puis vous voyez le chevetable il y a une complétition nagique qui se fait je vais construire un de nos produits c'est le back end de la configuration qu'on a basel fait ces choses il exécute du code pour faire un targé z de tous mes fichiers puis de toutes les dépendances puis si j'examine le contenu de ça je vais voir différents trucs ça c'est les fichiers que je prends puis que je déploie sur mon serveur je peux lancer ce script là ici je peux lancer ce script là ici qui va lancer mon serveur puis en fait c'est plus facile de comprendre ça quand on vient d'un univers d'un langage compilé parce que ça c'est mon binaire que j'ai compilé mettons en place mon binaire en gros puis les run files mais c'est des fichiers de données qui sont packaging avec mon application puis dans le code des fichiers des langages interprétés comme Python c'est là que c'est un petit peu étrange de se mettre dans le mindset d'un outil qui est plus construit pour les langages compilés que les langages interprétés mais dans le code des langages interprétés c'est que le code source qu'on va fournir interprétés à Python et packaging comme donnie si on veut dans mon package donc là j'ai tout mon code source ici puis j'ai un script beau de bootstrap qui va lancer Python pour moi puis qui va lancer mon programme et toutes mes dépendances Python sont aussi spécifiées sont aussi incluses donc j'ai pas d'environnement virtuel sur mon serveur j'ai un répertoire avec toutes mes dépendances et j'ai un script pour partir le truc est-ce que ça vaut jusque là donc build ensuite j'ai test run excusez-moi je ne peux pas essayer de faire un run sur une cible comme ça ça ne fonctionne pas, il faut que je le prenne une cible qui est par exemple mon serveur de développement et puis là il faut il faut en fait que je le roule avec mon excusez-moi attendez il faut que je le lance de la bonne façon j'ai une variable d'environnement exporté pour ma configuration je voulais vous le montrer sans ça en premier lieu pour que vous puissiez voir la commande baser run et le nom de la cible puis là mon serveur donc ce que ça fait c'est que ça va faire le build dans premier lieu puis après ça ça va lancer l'exuctame que je vous ai montré par exemple ça fait build puis le dernier truc c'est test donc par exemple par exemple si j'ai un cible de test je la lance et puis il me dit que c'était déjà en cache pourtant j'ai fait un clean avant mais en fait c'est que j'avais spécifié une cache à distance ça c'est intéressant ici cette chose-là ça fait que si d'ocs sur ton ordinateur tu lances un test sur la branche puis que pour ça je checkerai la même branche puis je vais pas encore rouler le test mais je vais refaire le test puis je vais bénéficier du résultat de ton exécution sans le rouler moi-même ça c'est pas mal intéressant et si je refais mon clean puis que je relance le test normalement je crois que il devrait être exécuté oui c'est ça, pas le plus de fois si il est exécuté parce que j'ai pas de cache distance si je le relance à nouveau il est mis en cache GRPC ou une simple cache avec webdav donc la question c'était comment c'était pour parler à la cache distance soit en GRPC soit en webdav d'outre on a un simple serveur j'ai pu cn jinx ou en tout cas avec un plugin module webdav puis ça me fait notre cache distance c'est juste ici mais je pourrais t'en parler après à des mots je ne passerai pas trop de temps là-dessus je peux aussi lui dire que je ne veux pas mettre en cache mes tops ça peut être intéressant il faut vraiment exécuter le test localement là il va ignorer les résultats de la cache puis juste pour vous montrer que ici par exemple ça va être mis en cache à nouveau ReactZa ah oui parce que je lui dis de ne pas utiliser la cache bon bien sûr si je modifiais en fait j'ai utilisé un autre type de test puis je vais vous montrer justement les effets de cette cache si je prends une type comme ça ici ça vous permet de mieux comprendre ce que je vous disais tout à l'heure par exemple si je mets un autre type de modification là il va relancer le test mais là il est en cache c'est mon fichier de test mais si je modifie par exemple ici à Kant qui est un fichier duquel mon test dépend puis que je reroule et il va être reroulé à nouveau c'est là qu'on peut comprendre que l'arbre d'épendance qu'on construit avec les fichiers build il sert à ça il sert à éviter les tests qui n'ont pas besoin d'être quand c'est il y a quelques petits trucs que je veux vous mentionner rapidement mais j'ai étant amené l'heure si vous me posez des questions à la fin je reviendrai dans des tests sinon je vais passer rapidement par-dessus ça on est capable de faire des requêtes de visualiser la dépendance de faire des requêtes pour voir telle module dépend de telle module etc et on est aussi capable de visualiser d'analyser la performance d'un build si je passe rapidement sur ces points là on peut par exemple visualiser l'arbre de dépendance c'est un exemple ici une des cibles de mon dépôt je peux voir que ça dépend de telle et telle package et tel fichier etc et puis rapidement aussi si je vois sur ce site là puis j'ai prégénéré un fichier de profilage aussi les tests avec des fichiers de profilage j'ai généré un fichier de profilage avec ça qui continuait dans les profilages donc ici par exemple je vois le temps que ça a pris mes différents tests là c'est sur la route sur une machine avec 32 CPU 16 CPU, 2 blockards donc je vous ai aidé avec des trades on voit qu'il y a beaucoup de tests exécutés en parallèle puis ça nous permet de voir un peu là si notre test si notre exécution fonctionne bien ou pas donc en conclusion si je reviens sur qui note en conclusion pourquoi utiliser Basel et Moneuropo pour construire des projets habitants on a vu que ça permet une grosse réduction du temps de bulle qui est une commune des installations plus fiable en production que ça permet aussi de faciliter la navigation dans le code parce que je voulais pas me montrer finalement mais je peux venir ici et naviguer d'un projet à l'autre dans mon code dans VS Code ça permet aussi de une digestion centralisée des dépendances donc une seule version de mes dépendances c'est la fois simplifiée et complexifiée mais gestion d'indépendance mais le prix à payer dans tout ça c'est que l'apprentissage est quand même assez ardu je vous avais vu la présentation elle est très dense j'essaie de vous expliquer les principes de base de Basel mais juste ça déjà je suis conscient c'est extrêmement dense mais par contre pour des avantages que ça nous a amenés on peut mettre le move et on le pourriette donc voilà merci beaucoup est-ce que vous avez des questions ? parce qu'on a une question pour Kion ah oui une question d'abord pour access control est-ce que vous pouvez avoir access control dans d'un point ou c'est le même access control la question c'est est-ce qu'on peut avoir plusieurs access controls dans le monorepo ou dans le même dépôt pour tout le monde mais qu'est-ce que c'était par access control plus spécifiquement ici tu veux pas que tout le monde utilise et accès à tout le plus beau tu veux qu'on accède à une partie d'une autre place non non c'est ça non est-ce que par exemple un code d'utilisation pourrait être pour donner accès à du cas d'un consultant par exemple c'est pas d'une place non c'est pas c'est pas quelque chose je pense que ça peut je veux dire peut-être avec des certes modules de Git on peut être donné accès peut-être à une seule partie de code mais en tout cas c'est pas le setup qu'on a nous chez Artbox il faudrait regarder au niveau Git en tout cas comment partager j'ai l'impression que je copierais les fichiers et que j'enverrai un tarbal au consultant avec plus de modules dans ce cas-là mais c'est comme qui dit la philosophie du monopole c'est pas nécessairement c'est pas nécessairement le code d'utilisation sur les clients je pense qu'à ce moment-là des projets indépendants ça serait plus intéressant comme solution ok la question c'est est-ce qu'on peut construire dans le fond différents langages oui par exemple on a des fichiers Java pour un besoin spécifique puis ça aussi ce projet-là est construit dans le même monopole donc on construit déjà Python et Java avec le même système de build donc oui on peut pour la déployabilité il est test quand on change le code est-ce qu'il faut tout retester ou il va juste retester une partie et aussi la déployabilité si on change une partie de l'épau si on a plusieurs services et qu'il faut tous déployer on peut juste déployer le foyer ok donc pour la testabilité la première question c'est quand on fait des changements ce qu'il faut retester tous les services du dépôt bien la réponse ça dépend en quelle portion c'est-à-dire que là on est dans l'architecture et non pas dans le système de build c'est spécifique c'est des dépendances de façon fine par exemple tels services vont impacter tels autres services dans ton architecture à ce moment là tu vas pouvoir s'utiliser tes tests par exemple pour ne tester que les services impactés par ton changement puis d'un point de vue basel bien comme je vous montrais le temps de build considérablement réduit ça c'est parce qu'on a un abe de dépendance très granular tous les modules sont dans le monopos et donc basel grâce à sa cache distribuée c'est quel test rouler il n'y a pas besoin de rouler donc ça c'est pas la portion des tests pour la question du déploiement nous sur Outbox on a appelé pour faire de construire tous les projets tout le temps et donc en faisant une relâche on dit par exemple c'est la version 10.0.3 tous nos projets du monopos portent la version 10.0.3 c'est ce qu'on a décidé le mode de fonctionnement qu'on a décidé est-ce qu'il faut à ce moment là redéployer l'ensemble la stack la version 10.0.3 idéalement oui mais puis on a des outils qui nous permettent d'upgrader toute notre stack en même temps mais est-ce que c'est nécessaire ? non on a une vision claire puis là je suis plus dans l'architecture encore une fois que dans les dépendances basales mais c'est une vision claire des dépendances entre nos services puis nos projets dans notre code à ce moment là on peut sélectivement déployer des morceaux de notre infrastructure de notre architecture en production ça peut avoir des inconvénients si dans nos notes de relâche par exemple on avait mal spécifié que tel bout avait changé ça peut avoir des impacts en production ça nous est déjà arrivé des fois dans une équipe de ops qui fait le déploiement va choisir de déployer sélectivement certains morceaux mais des fois ça peut être aussi qu'ils font ça donc je dirais dans ce que je vous ai montré aujourd'hui ça ne couvre pas ça dans le détail je dirais c'est préférable de tout déployer mais si le déploiement est long par exemple puis qu'on a une bonne compréhension des interdépendances entre nos services on peut déployer sélectivement est-ce que ça répond à tes questions ? c'est vrai que c'est vrai que c'est bon, merci parfait mais faites pas comme Kiyom ok, programmé pas en Java c'est juste Kiyom c'est juste Kiyom qui veut que vous mourrez ça non ? en passant je suis désolé de le dire publiquement sur Youtube, j'aime pas cet engagement-là mais c'est pour un besoin spécifique et heureusement c'est pas beaucoup de ligne de code voilà, merci merci Kiyom je pense qu'on a fini je suis pas content encore c'est vrai que j'ai oublié de mettre mon... est-ce que c'est bon ? si tu veux dire le mot à la fin Yannix online ou qu'est-ce que je fais vas-y Duc, je te fais confiance donne-nous notre mot de la fin parce que là, c'est moi qui perd mon... ok c'est bon, est-ce que tu peux parler ? oui je peux parler mais vas-y, je te fais confiance Duc donne-nous le mot de la fin ok, bien, premièrement il y a plein de mots ici qui me demandent t'es haut mais... t'es... un peu partout je suis pas la meilleure personne pour répondre à cette question-là donc je suis à Mammoth Lake au pied des montagnes Sierra du côté Est et il commence à faire froid là j'ai eu de la neige avant vous plus tôt cette semaine et je vais me déplacer vers tout son demain ok, ben... une belle vie que t'as une petite vie ici, juste pour finir bon en tout cas, merci beaucoup tout le monde pour... pour votre temps t'es froid pis tout ça et de vous déplacer ici pour te chiller avec nous ben, thank you everyone for... to being with us and then... see you next time then super, et bien, il y a une dernière chose c'est qu'il y a des gens qui aiment ces gens de rencontre-là il faut le rappeler que on va peut-être prendre une pause et ça nous prendrait plus de gens qui vont se retrousser les manches et qui vont nous aider à organiser ces événements-là sinon, il va y avoir une pause d'événement et bien c'est pas plus grave que ça mais si vous voulez des événements on va se retrousser les manches c'est bon, on va y aller merci tout le monde bye bye