 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 !