 C'est bon ? D'accord pour toi ? Attends, attends, attends. Ok, sorry, we refuse the event online, and that's it. C'est bon ? It's ok ? Perfect. Nice. Welcome, bienvenue tout le monde à Montréal Python 104. I'm Melanie, I'm a volunteer in Python Montreal and I switch between English and French. Sorry, my English is not perfect but I trade. Je vais vous faire un peu l'introduction de l'événement, et vous parlez un peu de Montréal Python. Et voilà, on va être ensemble, et ensuite on va pouvoir écouter deux conférences. Just to begin, who are you ? Pour qui c'est la première fois à Montréal Python ? Prespection in Montréal Python. Nice, welcome, thank you to come in the first time. Over question, vers student, étudiant ? Parce qu'il y a des étudiants, étudiant ? Ah, first go, nice. Donc vous êtes des professionnels dans le développement ? Ok, et qui parle français ? Ah, là ça, c'est un nice. Je peux peut-être pouvoir switcher pas mal en français et anglais ? Ok, c'est bon, ok. Perfect, merci beaucoup. Pour les nouveaux, faire un petit point de Montréal Python. C'est quoi Montréal Python ? C'est une association qui est depuis 2009, et on a retravaillé un peu sur notre slogan, à le but de se connecter, d'apprendre et de contribuer ensemble à Montréal Python, au langage Python. Et pour ça, on organise des conférences, des workshops, et on a une communauté en ligne, donc sur SAC, ou sur LinkedIn et Facebook. N'hésitez pas à nous suivre sur les différents sociaux. Je fais ma manage, c'est-à-dire network, et ça nous fera plaisir de vous accueillir à nos événements. L'événement et les événements sont organisés que par des bénévoles, qui sont un peu éparpillés partout. Je remercie Doug, qui a un bénévol à la technique. Et si vous avez envie de devenir bénévole, to start to be the volunteer, to help for, I don't know, video, organize the workshop, don't hesitate to communicate with us. For English, we have Pouchera, if you want to talk about volunteer. En français, vous pouvez venir me voir. So yes, that's it for Moëlle Organisée Volunteer. Et les conférences, on organise des conférences qui parlent de Python, et on a deux speakers qui sont aujourd'hui Robin et Andrew. Et on cherche toujours des speakers à chaque conférence. Si vous êtes intéressé à devenir speaker et à faire une présentation qui touche à Moral Vitton, pareil, n'hésitez pas à venir me voir, ou Bouchera. Ça nous fera plaisir de discuter avec vous et de peut-être venir là, à ma place, ce prochain événement. Donc voilà. Et les événements sont permis grâce à ce sponsor. Et aujourd'hui, c'est OCDA qui nous accueille gentiment à l'événement, qu'on les remercie beaucoup et peut-être qui veulent dire quelques mots sur l'organisme. C'est ça. Bonjour tout le monde, hi everyone, merci de vous être présenté pendant la soirée. Merci pour être ici, pour ce grand nombre de conférences. Je suis Marie-Claire. Je suis le directeur du marketing pour OCDA. Mon nom est Marie-Claire. Je suis la directrice marketing chez OCDA depuis 4 mois. Je suis très contente de faire partie de cette belle organisation créée à Montréal en 2011. On est une film d'innovation et de technologie qui fournit majoritairement des services dans le domaine du AI, l'intelligence artificielle, le design de l'expérience visataire, UX, UI et de conception logicielle. On est une innovation et de technologie de firmes qui spécialisent en software engineering, UX, UI design, artificial intelligence et robotics et une visère pour plusieurs industries pour nommer quelques-unes dans le secteur manufacturier, dans le domaine de la santé, dans la finité également finance donc si vous avez également des gens qui recherchent un emploi, on a plusieurs postes qui voient en ce moment donc avec une grosse pensance et donc n'hésitez pas à entrer dans un QR code qui vous amène directement sur notre page carrier. Si vous êtes en train de faire un travail et que quelqu'un vous intéresse en travaillant avec nous, nous avons beaucoup d'opinés maintenant, grâce à notre génération donc n'hésitez pas à passer la parole et vous pouvez nous suivre sur notre page LinkedIn. Merci de vous abonner à notre page LinkedIn avant que l'actualité de l'information aussi sur nos projets et notre belle culture d'entreprise donc je vais laisser la parole à mon collègue Cédric. Je vais laisser Cédric à cette page pour vous parler d'une grande opportunité. Merci et bonne transition. Merci. Hello everyone. If I do it in English, it's okay. I think I didn't develop this report. So yeah, just with technical point, I'm at OZDA for six months and together I'm lead on the project. We are using Python so just like Marguer told you we have open position in yours just for you to know. Where we are using Python for AI of course you will see that we are using for dot and spots so the two first time in English robots and we are using Python also with Django as a backend and yeah, let's see if you have any questions come after that. Check someone with OZDA t-shirt and you. Thank you. Super, merci beaucoup. On encore merci de nous accueillir ici dans son super bureau. On remercie aussi notre autre sponsor FGNR qui est un sponsor un peu plus annuel qui gère les serveurs et l'infrastructure de Montréal-Piton mais si vous travaillez dans une compagnie de la boîte compagnie et que vous souhaitez devenir sponsor, Benif sponsor from Royal Brighton. Welcome. On est maintenant entreprise pour notre support Montréal-Piton et pour cela vous pouvez parler de Noël en front de la place n'hésitez pas à aller le voir si vous voulez des informations ou pour les personnes qui sont en ligne à nous contacter sur nos réseaux sociaux et la dernière chose que je vais vous présenter c'est notre prochain évente ce n'est pas fini, ne partez pas mais notez le prochain évente donc c'est en mai 15 et Montréal-Piton est host par NAD, l'École nationale des arts numériques dans ce sublime bâtiment au centre de Montréal donc n'hésitez pas vous êtes bienvenue au prochain événement qui aura la même forme que celui-ci donc voilà je vais laisser ma place au premier SPK et bonne conférence je suis Robin Kurtz j'ai été un développeur de software depuis 2014 en 10 ans et les 3 dernières ont travaillé très très close avec le robot Spot from Boston Dynamics qui est le specialist de Spot un nom de fancy sur LinkedIn donc aujourd'hui on va parler de quelques points d'abord qui c'est puis je vais parler très très rapidement d'Osidia et de Boston Dynamics et ensuite on va parler de ce que c'est nous allons faire un exemple de codé les mains sont prises et ça va bien et si on a un moment on va ajouter des questions si non, je suis là après notre seconde parler si on veut Cool, donc quoi est Spot ? pour ceux qui ne savent pas ce que Spot est c'est un robot d'Osidia from Boston Dynamics c'est une plateforme très agile utilisée pour faire différents tasks d'inspection ou de data collection c'est une plateforme pour permettre aux développeurs de customiser ses capacités et le SDK ou le kit de développement permet aux développeurs d'adverter différents sensors ou différents composants sur le robot donc on va voir un petit peu mieux quand c'est à l'arrivée, mais le robot le part bleu est le robot base tout ce qui est à l'arrivée c'est des payloads donc je vais parler de ça juste un petit peu plus rapidement mais ce sont des sensors sur-bords de data collectors qui peuvent être changés par la utilisation donc c'est le robot, c'est un outil c'est un outil très fort mais pour aujourd'hui c'est juste un outil de plaisir pour nous qui est le robot de Boston Dynamics dans le regard d'Osidia ? Nous sommes un partenaire de la business de Boston donc nous sommes ici pour permettre aux différents entreprises pour tester le robot voir si il y a une bonne ROI avant d'aller sur le robot qu'est-ce que c'est juste un train qu'est-ce que c'est un 2-week PFC d'autres entreprises pour faciliter ce type de travail plutôt que de dire que c'est le robot de Boston Dynamics et de voir ce qu'il faut faire on veut que les gens puissent tester le robot et voir si c'est bon pour les outils de utilisation Cool ! Qu'est-ce qu'est-ce qu'est le spot SDK ? Le spot SDK est un petit peu différent c'est la documentation conceptuelle donc les outils de utilisation sont utilisés par le API il y a un library Python client donc c'est pourquoi nous sommes ici aujourd'hui c'est le site robotique mais je vais essayer de le faire c'est le sujet pour aujourd'hui ce library client est un peu différent c'est une introduction, un guide sur comment contrôler le robot et les sensor data comme je l'ai mentionné vous pouvez mettre des sensors sur le robot avec le SDK vous pouvez lire les sensors mais il y a aussi des sensors à l'intérieur c'est-à-dire les caméras et nous pouvons faire tout ce qu'on veut il y a aussi des exemples et des tutorials ce que nous allons regarder aujourd'hui puis il y a le payload ICD qui est l'interface control documentation donc ces cartes sont connectées à le robot avec ce 25 pin port c'est tout malade, fancier et il y a beaucoup de travail à faire donc il y a une documentation sur comment vous pouvez développer vos payloads pour le robot ce qui ne provient pas de tout ce que vous voulez c'est un robot il n'y a que 14 kg de weight on veut dire que vous vouliez faire un blender pour faire Margaritas quelque chose que Boss Dynamics a fait une fois vous pouvez faire ça vous voulez ajouter un armes, un armes robot vous pouvez faire ça, tout ce que vous voulez Cool, nous avons le protocole API donc c'est pour toutes les classes toutes les définitions et toutes les manières pour communiquer avec le robot c'est donc en utilisant le protocole enfin, il y a le spot STK qui est sur GitHub c'est public vous pouvez regarder vous pouvez regarder les exemples qu'ils ont j'ai posté 2 links je ne suis pas sûr si on va partager mais si non, ils sont très vite GoogleAway dev.bossdynamics.com ou www.bossin-dynamics.spotstk Cool, nous allons jeter à l'exemple de HelloSpot nous sommes tous allés avec l'exemple de Hello World c'est très similaire avant d'aller dans ça, il y a un peu de pré-requisites, c'est un peu drôle mais vous avez besoin d'une machine c'est Windows, MacOS mais on préfère avoutu vous devez aussi utiliser Python 3.6 à 3.10 c'est ce qui est soutenu vous pouvez faire ça dans un environnement virtual ou un container docker si vous préférez c'est ce que nous allons faire par défaut, le robot donne un network de Wi-Fi et je peux connecter j'ai une carte de Wi-Fi secondaire et j'authentique ce IP que nous avons en bleu et je peux communiquer le robot j'ai un connecteur sablé j'ai des commandes et c'est pour ça j'ai des variables et des variables donc le code que je vais faire je n'ai pas besoin je veux juste faire sure que c'est clair cool je vais juste passer à mon terminal c'est de la taille? c'est pas mal d'abord on va faire un ping du robot je ne partage pas ce écran pardon toujours des issues techniques présente share screen entire screen on va retourner à ça tu penses que j'ai pratiqué ça? je pense que c'est bon maintenant je vais ping le robot c'est un IP et on peut voir que nous ne sommes pas en train je ne suis pas en train c'est bon, nous sommes en train de ping c'est fantastique cool, donc maintenant on peut ping le robot c'est bon j'en peux? oui j'en peux je vais juste vous montrer où je suis c'est un peu difficile de voir mais on a le spot estigé directement sur ma machine nous sommes dans le spot Python et ce que nous voulons faire c'est créer un environnement virtual j'ai déjà fait ça je vais vous montrer donc on va créer un environnement virtual et ensuite je vais taper dans le environnement virtual et puis ici on peut faire une liste pour vous montrer ce que nous avons d'abord, nous avons des packages Boss Dynamics c'est l'API, le client, le corps et un peu d'autres choses dans cet exemple, on va faire une image, donc on a un pilot je ne vais pas trop loin dans les autres imports parce qu'ils ne sont pas trop importants maintenant que j'ai fait ça je vais cliquer le command c'est le spot je vais juste cliquer le premier c'est très clair que je n'ai pas normalement le type sur mon keyboard j'ai normalement un keyboard fancié donc ça fait de la vie beaucoup plus facile c'est là que j'ai appelé le file HelloSpot avec l'IP ou le nom d'un robot j'ai eu une erreur j'ai clairement prouvé que je savais que ça allait arriver donc on a un robot assert s'il vous plaît, s'il vous plaît s'il vous plaît, s'il vous plaît donc on va retourner à ma présentation on a quelques choses différentes d'abord, on a besoin d'un e-stop ce n'est pas d'un e-stop, c'est une émergence c'est ce qu'on veut, d'avoir un espace d'une émergence, d'un stop d'un robot, d'un moteur donc ce n'est pas d'un e-stop donc ce n'est pas d'un e-stop normalement, vous avez le tablette qui va être ici on a un red e-stop parce qu'on fait quelque chose d'un seconde script d'ailleurs, je ne vais pas trop enlever mais je veux juste vous rappeler qu'il y a une notion de l'émergence avec le robot c'est que vous pouvez seulement avoir un client connecter avec le robot à la fois donc si j'étais connecté avec le tablette et que je l'ai rendu, même avec le e-stop je ferais un autre erreur de dire que le robot est déjà émergence vous ne pouvez pas utiliser l'émergence parce qu'on ne veut pas que le robot soit ouvert c'est à dire qu'il y a un force donc c'est un peu intéressant puis, bien sûr, avant de envoyer un code pour le robot on va probablement savoir ce qui se passe en envoyant un code pour le robot il ne semble pas que c'est la meilleure idée donc on va prendre une étape et nous allons regarder le code rapidement Cool, donc on a le spot.py donc on va voir ça assez rapidement je ne veux pas vous enlever avec trop de la commonality que nous avons avec Python scripts bien sûr, nous avons tous nos imports je trouve un peu verbose comment ils le font et on va passer au bout donc, bien sûr, nous avons notre check pour faire sure que nous avons rendu ce file directement et pas importé parce que nous n'avons pas envie de communiquer avec le robot si nous sommes vraiment appelés à la script donc ça va être appelé la main script et la main script est assez simple c'est de parser l'argument donc, en ce cas, le script va prendre un dash-save ou un dash-save-path c'est pour l'image pour sauver l'image à un certain endroit tous ces exemples ont leurs propres arguments mais ça serait une façon dont nous pouvons customiser le script selon ce que nous faisons et puis, on fait le spot fonction donc on va juste aller au bout du file beaucoup de ça est très verbose j'espère que ça ne sent pas trop de magie black mais on va essayer d'expliquer un peu donc, on set un peu de logging si on veut un verbose logging puis on crée un SDK et on appelle ça quelque chose qui est spécifique pour les tasks que nous faisons donc, en ce cas, on crée le spot client puis on crée le robot avec le config ce qui est toutes les options donc quand on pars la ligne de command on crée un objet ou un dictionnaire de différentes options et c'est le config donc le nom est l'IP que j'ai utilisé puis on authentique avec le robot donc cette ligne ici, sur 49, est ok, j'ai l'application d'environnement si non, j'ai le prompt ou le CLI pour donner le nom de l'application puis on fait un time sync donc pour les robots, c'est très important que le computer et le robot sont en même temps de sync ou on peut avoir des expériences inutiles puis on a l'assert que l'on a vu ici donc on est certain que le robot s'est arrêté cela va nous protéger de plus en réalisant qu'on n'a pas d'environnement pour le robot puis finalement on a des clients donc le robot, comment le spot SDK fonctionne, c'est qu'il y a beaucoup de clients pour une fonction de l'application la première que nous avons vu ici c'est un client de robot state donc on est basically just checking ok, est-ce que j'ai l'access à l'accès au client pour qu'on ait le robot state et c'est pour ça que nous pouvons donner la position de la position et puis faire un transform donc comme je l'ai mentionné il n'y a qu'une liste donc si les listes étaient déjà portées par un autre client, nous aurions fallu ici et puis on est en train de faire sure que nous faisons un liste, on le reste donc on le reste et donc on peut continuer sur notre code si on ne l'a pas, on ne l'a pas puis on a un power-on puis on a un assert un petit peu de blogging juste pour notre bénéfice nous avons un stand de blogging donc on nous dit que le robot est en train c'est assez simple donc il y a des fonctions utiles ici on est en train de prendre le robot state donc on a l'access au client mais maintenant on est en train de prendre le state donc la function de la position de robot state est en train de prendre la position de la position donc on peut refermer la position pour un petit peu d'un transform c'est un peu plus confusant on parle de la géométrie et des positions de mouvement mais c'est pour créer une motion de tournage avec le robot et puis on crée un transform ou une trajectoire de 3 points où nous sommes dans la position 3 positions de la robot et on coupe les trajectoires et on envoie ça au robot donc ici on a des aidants math qui créent ce S3E pose on a des quaterniens si quelqu'un veut parler de ça Nicolas, mon meilleur ami ici j'ai eu le courage de parler de ça et puis on crée les points de tournage comme je l'ai mentionné il y a beaucoup de code verbose mais c'est juste pour vous mettre en place comment vous utilisez le robot puis on combine tous les points comme liste et puis on utilise plus de fonctionnalité pour vendre donc ici on a un stand avec un client de commande qui prend le contrôle du corps qui a tous les points de tournage je suis désolé pour ça mais sans visualiser avec le code, c'est très difficile puis après on a une image capture donc on a un autre client qui s'appelle l'image client et ça va nous permettre d'avoir une image de sources vous pouvez voir que c'est une liste on peut passer dans plusieurs images le corps de la robot a des caméras donc selon quelle image je veux je peux passer dans un liste des sources de caméras et puis ça fait un simple des displays ou peut-être de la saison sans faire du fancy avec l'argument de commande on va voir l'image sur la table puis on fait un comment de l'opérateur c'est juste pour des purposes de débug puis on appuie le robot et on se retrouve plus tard j'ai des questions on veut juste voir le robot cool donc je vais sur le terminal et si vous vous souvenez on doit faire le stop maintenant je suis dans un autre window et je suis dans le exemple de stop donc je vais faire le même genre de choses où je vais sourire le environnement virtual et je peux juste vérifier la liste j'ai des packages très similaires je n'ai pas de pilote anymore mais j'ai Pi Qt5 pour plus de l'expérience de Agoui mais on va le faire sans Agoui c'est plus simple donc on va faire Python 3 E-stop No Agoui et puis passer je dois vraiment mettre l'IP et l'environnement variable cool, donc maintenant j'ai le E-stop donc maintenant si j'ai besoin je peux protéger l'E-stop et le robot pour faire un stop d'urgence awesome, donc maintenant on va retourner à l'autre et on va juste on ne peut pas y aller on va rérun le commande Python 3, hello spot et puis l'IP donc maintenant on va faire un start de la liste on va pouvoir le robot on va prendre quelques secondes le robot se tourne le robot s'étend donc c'est ce genre de trajectory qu'on a sorry, c'est la trajectory donc on donne 3 points pour aller en haut et en bas et puis on a une photo qui est oh, c'est de Carl, prendre une belle photo une bonne photo, on va la sauver pour sûr, j'aime ça non, je dois la sauver sorry, c'est plus important clairement, ah ok, on va cool, donc là on va c'était assez excitant, j'espère donc maintenant ce que nous allons faire c'est que nous allons rérunner un code custom et nous allons espérer que ça fonctionne parce que de temps, j'ai prétendu donc avant de le faire je vais vous montrer un petit défi donc j'ai un spot et un dot vous voyez le nom c'est dot, c'est un robot c'est le spot, c'était le premier donc ici on va juste vous montrer ce que j'ai ajouté ici donc j'ai fait un simple import où j'ai importé bloc pour la trajectory commande et puis j'ai créé une fonction called move spot c'est probablement pas la meilleure façon de faire le robot mais c'est un très simple donc ce qu'on fait c'est qu'on utilise la commande robot commande et on fait une commande synchro où on donne un vx, un vy et un vrot donc qu'est-ce que ça? si on retourne à ma présentation c'est l'orientation du robot on peut le voir c'est un rôle forward c'est un x ou un forward c'est un x notre pitch ou notre y est allé à la droite donc selon si c'est posit ou négatif c'est la même chose avec le x si c'est posit c'est négo-forward et si c'est négatif c'est négo-backward et puis on a notre z ou le yon qui nous permet de faire des choses différentes donc pour ce cas, depuis qu'on est juste dealing avec un simple move commande on va juste jouer avec le x donc ça va prendre ces valeurs différentes qu'est-ce que c'est un v c'est une vitesse donc on donne une valeur de vitesse et puis on donne un time en secondes pour notre commande robot donc ce que nous faisons c'est que nous donnons une vitesse en time, en velocity en multiply en times on donne une distance donc ça nous donne une distance je fais un second time donc en théorie, si on a une vitesse on devrait avoir une distance c'est super précis cette fonctionnalité n'est pas pour ça donc ça peut être un meter mais on va essayer après ça on a un bloc pour le trajectory commande c'est juste que le robot ne fonctionne pas si ça ne fonctionne pas ou si ça ne fonctionne pas on nous donne un time out et puis on fait un fail donc on va nous protéger jusqu'à ce que cette action soit en train on va nous protéger donc ce que je vais faire c'est que je vais commenter ce mouvement juste parce que c'est un time out donc je vais prendre tout le twist et le turning part et on va sauver ici et on rename pour dot et on va voir j'ai les doigts s'il vous plaît il y a le robot ça n'était pas un meter mais il y a le robot c'était assez simple et on a pris une photo différente même lens mais une frame différente pour que les photos ne fassent pas il y a ça c'est ça j'ai reçu mon présentation juste pour que vous soyez je l'ai rempli je l'ai expliqué si on avait un problème je serais capable de faire les slides et pour les gens qui sont dans le présentation maintenant, le spot commandant c'est un exemple très rudimentaire de ce qu'on pourrait faire avec le robot il y a beaucoup de cool choses comme je l'ai dit, il y a le SDK c'est des différents exemples si vous êtes intéressés je dirais que vous devez regarder mais peut-être en quelques années il y aura beaucoup de robots et il y aura beaucoup de dogs et vous serez préparés merci beaucoup nous avons le temps pour des questions nous avons 5 minutes pour les questions on a une question je suis surpris que le SDK peut-être il y a des détails j'ai juste dit qu'il n'y a pas de walk 10 pas de steps c'est un argument est-ce que vous l'avez développé ? c'est une bonne question pour mon point de vue le SDK est assez étrange il y a des détails de walk c'est un robot il n'y a pas de walk c'est des détails de walk c'est des détails de walk mais vous pouvez aussi faire des choses plus compliquées il y a des détails de walk il y a des détails de walk il y a des apis duắc il y a des laigts partenaria n'y a pas de Banque j' replenirai de la Lahfe capacité je peux rentrer à ce convictions c'est l'IP et l'impact du réseau. Si je connecte avec ce réseau, je vais avoir le même IP et je peux envoyer ça à ce robot et ça va faire le travail. Qu'est-ce qu'il y a, si vous voulez, c'est comme ça que je veux faire avec le robot. Si je veux faire avec le robot, ou si je veux faire avec un robot virtuel, c'est comme ça que je veux faire. Oui, donc à l'intérieur de la box, Boss Dynamics n'offre pas d'un playground virtuel. C'est quelque chose que j'ai vraiment choisi quand je l'ai déjà vu. Je sais que c'est des entreprises qui ont fait leur propre chose. Je serais surpris si c'était quelque chose à un point, mais c'est quelque chose qu'il n'y a pas. Oui. Est-ce qu'il n'y a pas d'existence de localisation, d'implicité de localisation, d'objectif d'avoidance et d'implicité sur la plateforme ? Vous n'avez pas nécessairement d'instancher tout ça ? Oui, c'est ça. À l'intérieur de la box, le robot utilise ses caméras de détail, ou ses caméras IR sur chaque côté, pour créer un point-map. Et c'est aussi utilisé pour éviter l'absence de la box. Si j'étais en train de marcher, et d'être au-delà de l'avant, je pensais qu'il serait possible de marcher autour de moi. C'est aussi un point-map qui s'est joué à l'actualité d'être un mètre ou pas. La localisation est très tie à sa position actuelle sur Bouddha. C'est ça que c'est le frame du monde. Et puis le transfert est là-bas. Donc, il n'est pas nécessairement de faire un call-back pour vérifier si c'est bon ou non. Donc, vous devez faire ça aussi. Mais oui, l'absence d'avoidance est déjà construite. Mais c'est aussi une option, donc vous pouvez le tourner. Et avoir le robot marcher dans quelque chose si vous voulez. Vous avez des entreprises qui ont déjà utilisé l'absence d'avoidance pour vérifier l'absence d'avoidance ? Oui, pour sûr. Donc, le robot, à la base, c'est vraiment un tool d'inspection. Donc, à l'extérieur de la box, vous avez ce tablette que vous pouvez régister une mission automatique. Dans cette mission automatique, vous commencez à un endroit. On a un code fiduciel ou un code QR qui localise l'avoidance. Vous pouvez être dans la documentation aussi. Et puis vous dites que vous devez aller là-bas, aller là-bas, aller là-bas, aller là-bas, aller là-bas, aller là-bas. Et je peux faire une inspection de la facilité. Donc, pour dire, avec cette caméra thermique, vous pouvez prendre une photo d'un moteur, voir si le moteur est trop chaud. Nous pouvons prendre un audio et voir si il y a un bruit de bruit ou ce genre de choses. Donc, il dépend de l'absence d'avoidance. Nous avons fait un peu de différents projets. La plupart des projets que nous travaillons maintenant sont plus au nord, dans des sondes et d'autres facilities industrielles comme ça. Le bénéfice de l'avoidance est une quand c'est répétitif et un peu d'adulte. Donc, l'avoidance d'avoidance, l'avoidance d'avoidance et l'avoidance sont les 4 Ds des robotiques. Donc, il n'y a pas d'avoidance qu'il y a. Le aspect d'avoidance d'avoidance est un autre. Donc, si c'est une facilité d'avoidance, s'il y a un peu d'avoidance toxique dans l'air, il y a la génération de power de l'Ontario. Dans l'Ontario, bien sûr, il y a des robots qui ont des calculatrices, mais des comptes sur eux pour voir si il y a des liens de radiation. Donc, il y a cet aspect aussi. Nous avons fait un projet avec le STM où nous avons pris l'avoidance pour évaluer la clonflignesse de la métro-station, en regardant le graphite et ce genre de choses. Donc, là, nous avons déployé un modèle de vision computer pour détecter. Est-ce que le graphite est sur la wall, sont-ils des stickers sur la wall, est-ce que c'est le garbage sur le sol? Oui? Oh, pardon. Je vais rentrer. Je vais venir le prochain. Juste pour faire des expériences et ensuite pour rentrer. Donc, à l'extérieur, il n'y a rien avec la fonctionnalité base parce que le robot est très user-friendly dans le sens que vous n'avez pas besoin d'un software developer d'utiliser le robot. Ceci étant dit, si vous voulez coder quelque chose qui a des sortes de feedback, vous pouvez certainement le faire. Donc, il y a un cas où nous pouvons filmer un code qui vérifie toutes les caméras, qui regarde pour un humain et qui ne fait pas l'action base. Donc, c'est la folie de l'Humain. Donc, avec ce genre de logique, vous pouvez construire quelque chose qui pourrait faire un certain tasque dans certains contextes si vous avez vu quelque chose ou si vous avez sensé quelque chose ou quelque chose d'autre. Je ne sais pas si c'est une question. Oui, c'est vrai. Oui, je ne sais pas. Je n'ai pas envie de savoir comment la renforcement de l'enseignement et d'autres choses. Oh, la renforcement de l'enseignement. D'accord. Oui, donc, en fait, Bossa Dynamics a juste vécu avec un blog post sur la renforcement de l'enseignement. Je pense que c'est un peu tard pour le jeu. Je vais être honnête. J'ai vu quelques autres entreprises qui ont fait ça pendant un temps. C'est-à-dire qu'on ne sait pas combien de temps ils ont fait pour ça. Mais ils travaillent avec le robot. Et c'est ce que j'ai dit dans ce que je l'ai mentionné avant sur le nouveau API où vous pouvez contrôler les différents joints. Donc, avec la renforcement de l'enseignement, le robot n'est pas juste ce que je peux faire maintenant. Maintenant, il y a 5.4 km par heure. Mais avec la renforcement de l'enseignement, vous pouvez ouvrir tout ce que c'est plus utile ou je ne sais pas si c'est utile, c'est un robot dynamique qui peut aller sur un beaucoup plus vite et qui peut aller beaucoup plus vite. Donc, c'est vraiment le début de l'enseignement spécifique. Et c'est-à-dire qu'il s'est rempli tout ce qu'il y a dans le monde? Est-ce qu'il y a un coût qui peut s'améliorer? Je pense que je ne serai pas le meilleur de commenter sur ça, mais je pense que Python est assez bien utilisé dans ce pays. Il y a aussi C++. Donc, le robot dynamique a un SDK en C++. C'est beaucoup moins construit que le client. C'est-à-dire que le spot STK est très spécifique pour le robot. Il y a aussi Rust, qui peut aussi être utilisé. Il y a une compagnie qui s'appelle ClearPath, qui est un partner de Boston. Il s'est construit comme une abstraction pour utiliser Rust sur le robot aussi. Donc, ça dépend de ce que vous faites. Donc, ils font leur propre chose, pour sûr. Mais il y a aussi des overlaps avec d'autres compagnie. Quand il y a des vidéos et quelqu'un qui parle un langage, c'est pour ça qu'il y a un obstacle. Donc, peut-être, il n'est pas prêt à attendre les compagnies. On ne peut pas partager ce qu'ils font. C'est exactement. Par contre, on va voir ce que la compagnie est en train de faire. On va voir. On va voir où ça va. Vous avez dit que votre programme est en base de velocité et de la série. Est-ce que c'est la même chose que la compagnie ? Vous avez dit que c'est la même chose que la série ? Vous avez dit que c'est la même chose que la compagnie ? Oui. Donc, vous avez dit ça en fait, mais comme je le disais, c'est super user-friendly. À ce point, vous ne vous devez pas de code pour faire une compagnie basée. Vous vous vous abaissez la table et vous disiez « Ok, let's register ici. » Et puis, vous contrôlez le robot avec le joystick. Vous le disiez ici, vous le disiez ici. Vous le disiez pour donner une action. Et c'est tout simplement que vous recruez ça. Puis, ça nous donne un file d'autoroute. Ça peut être uploadé à la robot. Et puis, ça peut être schedulé sur un métier crône-job ou un système de schedule. Donc, en ce cas, vous n'avez pas de inquiétude sur l'aspect de la velocité. Le robot va s'adresser si il y a un objet dans sa route, il va se passer par l'objectif. Si c'est vraiment bloqué, vous pouvez tout simplement le dire, si vous voulez. Mais à ce niveau, sorry, c'est plus, c'est plus de settings. » Il n'y a pas de geolocation. Il n'y a pas de geolocation. Donc, c'est basically en utilisant un point cloud sur les caméras. Donc, à la base, vous pouvez voir 2 mètres autour d'eux. Et puis, nous avons ce payload, qui est le LIDAR. Ça donne 100 mètres de recognition. Donc, ça peut créer un point cloud d'entraînement du monde. Et c'est justement que c'est l'initiel que j'ai fait sur la registration. » Vous pouvez le faire. » Oui, exactement. Donc, à la base, vous pouvez utiliser ce point cloud logiciel, donc, vous avez un map et vous avez un LIDAR ou un point cloud map qui est overlayé sur la map 2D. Vous pouvez aller là-bas. C'est aussi possible que vous puissiez construire quelque chose d'autre. Vous pouvez utiliser un beacon ou un GPS. Je vous ai vu la main. » Et bien, c'est un démonaut qui s'accorde au didnto d'un stampé d'extrême motion, avec la base de la prélation de son damping et de la anticipation. » Donc, vous pouvez filmer ceci en en en en en en en en en en Comment est-ce qu'il y a de la sensibilisation de ces activités et de la sensibilisation d'une urbanaire ? Comment est-ce qu'il y a de la sensibilisation d'une urbanaire ? Oui, vous savez ce qu'il y a juste parce qu'il y a beaucoup de questions qu'on ne connaît pas l'accusé. Le robot est très blackbox. Même avec le SDK, la meilleure chose qu'on peut faire c'est qu'il y a de l'information du joint. Il y a des limitations. C'est-à-dire que si j'essaie de donner une position différente à l'extérieur de ses propriétés physiques, ça va me rire. Donc le SDK est très spécifique avec le robot. Et je ne sais pas exactement ce qu'il y a avec les joints différents. Je sais qu'il y a beaucoup de tests de sécurité. Si je couvre l'un des caméras, ça mérite d'avoir une perception de dégradation. Et puis il sera limité sur certaines choses. C'est un robot très sauvage. Ils ont travaillé sur ça pour des années. J'imaginais que c'est probablement un de ces agences. Et si il y a des problèmes avec les joints, ils vont vous le faire savoir. Or, ils ne vont pas vous utiliser le robot, selon comment c'est possible. Ok, donc si le robot s'occupe de la range, est-ce que c'est automatique, est-ce qu'il n'y a pas d'exception ? Ou est-ce qu'il y a des recourses ? C'est une exception d'exception. C'est-à-dire que c'est pour moi, comme le développeur de cette scripte, qu'il soit en train de faire quelque chose d'autre. Mais je peux intercepter cette erreur, que ça me donne, et être comme, ok, je vais faire quelqu'un d'autre. J'ai vu un autre robot. C'est une question. C'est une question ? Oui, c'est une question. Oui, c'est une bonne question. Tout le monde veut savoir ça. Donc à la base, juste la partie bleue, c'est environ 110 USD. Donc c'est assez expensif. Mais dans le bon contexte, faire le bon travail, c'est un peu différent. Tout le hardware qu'on voit ici, ce que je vais voir très rapidement, c'est près de 300 000 canadiens. Donc on a un thermocamera qui peut vous montrer un map de la haine de tout le monde. Il y a un map de la haine de tout le monde. Si tout le monde a un feu, ou tout le monde peut l'utiliser. C'est une image acoustique. C'est une caméra à l'intérieur et un microphone. Donc c'est un map de la couleur de l'audio, audio, sound that we, as humans, can't hear. So let's say you have a compressed air leak in the facility, well you can capture it with this and then you can do something about it before wasting all that money on compressed air. And then this, like I mentioned earlier, is that lidar. And then a modem to allow us to do 5G and LTE connection with robot. And then underneath there's a GPU and CPU combination to do any of our custom scripts. So we can run TensorFlow, we can run YOLO. I run YOLO now at the time as we wish. Well it's pricey, but it's fun. Thanks. Thank you so much. To change, please. And switch. Okay. It's gonna be a hard act to follow. Hi, welcome to my talk. My name is Andrew Francis and the name of the talk is part of the interruption. Prototyping a kinder, gentler interruption mechanism for voice assistant. Well the purpose of this talk is to prototype a form of interruption for voice assistant. It doesn't involve necessarily terminating the intent. A lot of voice assistants are really hard to, when they start to talk, they're just really hard to stop. And we're gonna get into that subject. So some of the things we're gonna touch on in this talk are Dialogflow ES Essential, Google Assistant. Actually, how many people know what Dialogflow or Google Assistant are? Okay. Basically, Google Assistant, well, there's two forms. Google Assistant is the hardware, essentially the hardware. There's also a software component to it. Dialogflow is a Google product that's used for building voice assistants. There's two flavors of it, ES and CX, but just keep in mind that Dialogflow is used for building, for designing voice, it's used for designing implementing voice apps. And for a while, it ran over Google Assistant. The next thing is a Python sound device library. It's essentially a shim over port audio. We're also sort of, we're not really gonna so much get into Python threading, but it's there. And last but not least, there's this area called conversation analysis, which we will get into quite a bit. Now, we'll get on to the motivations. Well, I've been, for the past two years on and off, I've been developing a voice application. The application's very, well, I'm just gonna say very simple. All it does is it manages your library books by voice. So I can tell it, hey, what's out and we go, well Andrew, you got this, blah, blah, blah, blah, blah, great, renew them. So I wanted, at one point, I wanted to add something called progressive response. We won't quite get into what progressive response is. So anyway, I wrote Google dialogue flow support. Hey, I, you know, how would I do progressive response and with dialogue flow ES? And they tell me, hey, Andrew, yeah, sure you can do progressive response. You just have to implement a custom integration. Going back to, I said a dialogue flow works on top of Google Assistant. Well, in this context, Google Assistant is considered an integration. In general, that is what an integration looks like. And they said, oh, just implement one of these. I went, whoa. So this essentially means you have to implement the input yourself. You have to implement the output yourself. Also, the little piece that's called your client app, depending on the sophistication of the integration, there's either very little happening in there or there's a heck of a lot happening there. For the most part, and all, and by the way, what's really important to note here is this is essentially full duplex. A lot of, not even voice-enabled apps aren't really, I wouldn't call them full duplex. You press a button, you talk, you press a button then the response comes. This is full duplex. And the folks that tend to write these sort of custom integrations are telephony companies. There's this other part that's cut off called detect request and the detect intent and detect intent response. So this is an API call that allows you to stream audio to the cloud and what it will do is it'll return back the intent and entities. And there is, yeah. So anyway, just to prove that that actually is, so anyway, this is, here's something very important when I talk about prototyping. I don't quite, I don't want to call what I'm doing an integration. I typically call it, for now just think of it as the runtime. This is the only piece of the runtime that I have not incorporated because streaming detect intent is a part of it is a generator and it's just ridiculously implemented. See that little global called done. That's really crazy because here's the other part of it where it, the first part implements the generator and the other part this is the generator. And for weird reasons you have to set done in in this loop to tell the generator to terminate or else you don't get the final output which, and I asked the Google engineer about that and he said, well yeah, that's a bit crazy. So it actually works like that. So this is the only piece of code that's actually not implemented in the runtime that I'm developing. So anyway, let's move on. The second motivation was in late November 2022 I was listening to a talk given by the Conversation Design Institute called should conversation design deal of interruption. It's given by three people. So, two of them are academics. I forgot from which university in England they are. But the third person is actually the second person Elizabeth Stoico. I guess she's an authority on conversation design. And the last person, Kathy Pearl, serve, I think she's the head of the head of Bard or whatever it's called right now. At Google. And she's famous for this book called Designing Voice Interfaces. So anyway, they're giving this talk and they're using something called conversational analysis to basically describe interruptions. And they mentioned this paper in passing. Well, I first saw it. I went, okay, this is interesting, but as a developer I really don't know what to do with this. I was listening to the conversation and I didn't know what to do with this. I was hoping that this talk would actually tell me how to implement interruption. Then a few months later for I revisited the talk and I just decided to read this paper. It's got a long window title and the paper would talk a lot about stuff like turn allocation and it sort of gives a conceptual framework for analyzing conversations like the core of it is turn taking. But I saw this word turn allocation and I looked at some of the rules and a little light bulb and off. Gee, turn allocation? Gee, this is a lot like an operating system scheduler. And then we're off to races. And I would say the big ideas from that paper and it's a really dense paper to read, but it's got some big ideas there. And it sort of concerns the notion of taking between two or more speakers. And they serve and they serve implied that there are rules. You could describe conversations with a set of rules. Rules and conversations have certain characteristics. One of them is usually we talk one at a time. There may be a little bit of overlap. But they're and also they're really at least the early conversational analysis papers from what I can gather. And they're really interested in the structural aspects of a conversation. Regardless of culture, what's actually being said. Another part of conversation analysis and I'm sure if I had a conversation analysis course they'd probably give me a D non minus for notation is you have this notation and you notice this open bracket this open bracket here. That denotes that someone was talking and they were interrupted. Also you see this 0.5 means 0.5 of a second past. There's much more notation but we're just going to use this for now. Also you notice at the end I just said assistant and left the blank. I'm going to ask you a question. Pretend this is your voice assistant. It's just renewed your book. You've asked it like how many books do you answer back? By the way a lot of voice assistants don't support this form of interruption. They tend to just terminate. But what's interesting is I'll add as a side note. Alexa if you're running Alexa with voice if you're running Alexa with audio playing music you actually could stop it say hey what time is it? It will turn down the music give you the time and then resume. But it's really ad hoc. Well actually it's really inconsistent what voice assistants do there. But here's this other part. So after the assistant has answered half a second has passed. What do you think the assistant should do next? How many of you think it should just resume reading the loan receipt? How many of you think it should ask do you want to continue listening to the loan receipt? Okay about half half. In general when asked people about their split. So anyway this is not necessary to understand how I'm going to implement this kind of general form of interruption but what really comes out of conversation analysis is yes okay the conversations are described in terms of term construction unit. A sentence could be a term construction unit. And then there's these transition relevant points. That's where like I'm speaking I've sort of stopped what I said and it's your turn. And usually the theory well it's arguing to minimize these gaps between when one person stops talking and never person starts talking. These gaps are small. They're measured from tens of milliseconds to about 300 milliseconds. The papers give a take but roughly if you this is like 50 years of research basically says that regardless of culture the gaps tend to be small. A gap of one second is often an indication that something's wrong. You know it's like hey can you like lend me 50 bucks and then the person you know just you know there's a gap of a second you know something's out. So in regard to voice assistance you probably really want to minimize your response time. You want to you want to be fast. So anyway that there's a really nice passage in that talk where Kathy basically says about interruption you should expand your mind your imagination and think what would make sense. Ok and the rest of this talk I'm going to take her up on that one. So anyway the example we're going to walk through you basically saw it already with that we're going to yeah that's ok I don't yes in the talk I'm going to do something different from that talk I'm going to walk through what I think a pragmatic example is. So in this example you know your voice assistance reading a long passage in the previous one it's a loan receipt it could be a book it could be a sec filing doesn't matter you're asking it short you interrupt it by asking it short questions how many more pages are there how much more time of this day doesn't matter you're just asking it short questions and you don't want it to necessarily terminate because you may say yeah ok keep on reading the CA literature refers to this type of interruption as relationally neutral interruption in that it's sort of like it's a fancy way of saying this is not a power move I'm not interrupting you to assert my authority over you or humiliate you or anything and then we get into a field of cooperative overlap and cooperative interruption but anyway so let's build let's build a system where the voice assistant is built on top of a special component I don't have a good name for what I'm doing I don't want to call it integration let's just call it the runtime and let's assume that a major responsibility of the runtime is to enforce term taking rules between two or more speakers so with the voice assistant I'm a speaker the assistant of the speaker oh ok and two or more speakers and we'll assume that term taking is akin to process scheduling in an operating system and again we basically have two important speakers because this was I had library books in my head I called the humans to patrons and the assistant the patrons tend to make the requests and the assistants either do some they respond to the requests or occasionally they may prompt the user for additional information and we'll make the assumption that the runtime can differentiate between speakers basically it can identify so in the runtime a conversation generates events and we're just going to say there's two important events there's when you start talking and when you stop talking and speakers can also register interests in events basically the speaker that wants to register an interest is the voice assistant we're going to assume that there's priorities this is a fancy way of saying if the speaker talks if the patron talks they get priority and then there's these other things that if there's a prompt it gets priority then responses and then weirdly enough for this system the timer timer is treated as a speaker but a low priority one and then we have rules and a rule can be based on anything the runtime knows about so maybe we have one voice system where we don't allow you to talk for more in two minutes or you can't have more than three or four back and forths could be anything about that it can glean from the state and a rule could be it could be we only have one speaker at a time the patron always initiates a turn and the speaker can interrupt a never speaker based on their priority it's just a fancy way of saying I can interrupt you this is an interesting one that I threw in it's not clear if the speakers know the rules of the system so again let's call these bunch this is not a part of CA literature but more involved for what I'm doing let's call this set of rules a regime and in this simple proof of demo we only care about the following attributes who speaking, the message type and time another thing is the patron can issue new requests before a responsive previous request has finished this is just a way of saying we're going to support a form of multitasking so now back to that should a that long-winded should a voice assistant interrupt one part of that talk may say well let's try to define interruption okay fine we'll define it basically interruption is one speaker active talking causes a current speaker to stop talking but we don't assume that this necessarily terminates the underlying process it's like a pause and a resume for music but we're generalizing it for everything that the voice assistant says we now know that this is not computer this is not generative AI here it's me drawing but this is essentially the stack and you can see that Sound IO will be used for generating the audio the turn taking is really the main component of what I'm developing and then there's the ASR which is for now stuff from google TTS stands for text to speech and at the top is really your voice assistant which that's where the high level dialogs done in the domain logic so this thing has a scheduler now we're going to dive into the API we're just going to deal with the core scheduler so you see the scheduler takes an event it could be like a a speaker is talking and it does its magic and it returns a tuple it basically says you should stop you have permission to start speaking you should stop speaking there's some helper functions raise hand, lower hand ask for permission basically in the code you'll see when the speaker wants to talk it will literally raise its hand so let's just walk this is more about the scheduler state so we care about the candidate that's a person that's asking for permission current is who's currently talking there's a ready list of people who are basically you've been paused there's another thing that we're not really going to use right now call rate wait for event so in this simple case if you that the current speaker the candidate's the assistant no one's speaking so it goes ahead and starts emitting audio and just to prove that there's some code you take a look at this you can see message start if no one's speaking I become the speaker I absolutely love the match I use it all over the place it's just gorgeous so anyway here's another case a candidate's the patron so someone's so a human starts to speak the assistant is droning on so what happens is what happens is the patron becomes the speaker the assistant is shoved on the ready list and basically the scheduler says to the patron stop speaking and we won't actually get into the mechanics because it's already a long talk yeah so we're going to shift gears processes don't like being interrupted in general they may be in an inconsistent state for example if I were to play if I did the audio what would happen is at one point you'd hear and neuro and then when the human's talking and then when it resumes it hear mansor what's happening is in the audio buffer level neuro mansor may be between two different data audio frames but this is a detail way down here yes we can fix this and there's library but you have to yeah we can fix it but there's a never issue it gets the real issue but we're just talking about the output the voice assistant yes it's outputting but it's also doing calculations itself it's processing when you interrupt it what are you doing to the underlying transaction that may be in an inconsistent state as well and you have to do something about it on the outside of the scope of this talk for now so anyway in conclusion the takeaway that I want is on the one hand we have this thing called conversation analysis but you know we can take some concepts from computer science and it really helps our understanding of how to implement stuff like this and after all at the end of the day suspending and resuming processes is a pretty well understood problem in operating system design however by implementing this stuff the assistants themselves really go up and they get much more complex thanks yeah I'll add one other thing about the scheduler itself it's actually based on who's heard Zinu it's an operating system by Douglas Comer it's one of these operating systems in a book used for teaching kids about operating systems so anyway any questions yes no no ok yes ok ok ich yes yes yes yes yes yes yes yes yes yes yes Donc, ce que vous demandez, c'est, comment j'ai déterminé la priorité ? Nous avons une addition de nombreux programmes de la priorité, avez-vous travaillé sur cette particularité ? Et quelle sort de complexité avez-vous joué ? Ok, ce sont des prototypes, Unfortunately, ce n'est pas trop difficile de faire un démon, mais pour maintenant, comme je l'ai dit, c'est très simple. On base la priorité simplement sur votre rôle, c'est-à-dire votre rôle, votre rôle et le type de messages. Une version de futur, comme si vous avez basé le scheduler, vous pouvez venir avec de nouvelles critères. C'est la façon dont je vais répondre à cette question. Je vais essayer de garder les choses très minimales, parce que c'est un concept prouvé de voir si ça fonctionne. Je ne sais pas si ça répond à votre première question. Je pense que vous répondez à la prochaine présentation. Maintenant, nous allons voir la deuxième question. Oui ? Oui, bien, quand vous introduisiez, si vous êtes en train d'introduire, si vous êtes en train d'introduire l'interprète pour l'interprète, vous introduisiez la vulnérabilité et la réponse humaine. Donc, en général, vous changerez la course de votre conversation. En tout cas, si vous voulez essayer de minimiser, vous avez mentionné de minimiser comment dire, la balance sur les pauses qui sont en train d'interprète. Mais, il y aura aussi des moyens d'utiliser la machine d'apprentissage et je pense que c'est possible d'interrupter la course ou la possibilité d'interruption pour que l'impact d'interruptions supplémentaires soit minimisé. Parce que si il n'y a pas d'interruptions non-lineares, si quelqu'un doit s'attirer, si vous vous introduisiez le système, cela peut profiter et changer la course de la conversation. Ok, je pense que... Je pense qu'il y a beaucoup d'interruptions. Mais je pense que peut-être je dois vous dire ce qu'il y a. C'est un prompt. En fait, c'est assez simple. À un moment, l'agent peut-être dire que vous pouvez choisir des couleurs suivantes. Vous savez, bleu, orange, gris, et vous dites, je veux bleu. Ce serait un exemple de prompt. C'est ce qu'un prompt est. Je ne vois pas d'injecter non-linear non-linear pour dire. Mais oui, j'ai un temps difficile de mouler. Ok, je comprends que le prompt est un sort de signal. Je vais juste vous demander une question. Il n'y a rien de mystique. Mais il y a des issues d'interruptions en prompt. Si je me suis dit que ce serait un talk d'une heure. Peut-être qu'une prochaine version je vais parler de l'agent d'interruptions en prompt. Interruptions en prompt sont intéressantes. Parce qu'il n'y a pas de casse quand vous choisissez les couleurs suivantes. Red, blanc, bleu, gris, gris. Je comprends. Je pense que vous avez des discussions sur la table. Et il y a de l'actualité de l'actualité d'interruptions en prompt pour changer l'interruption. Ok, je vais ajouter quelque chose qui est envers ma main. En fait, c'est plus envers ma main. C'est un concept prouvé. Mais si vous êtes en train d'identifier les utilisateurs, vous pouvez imaginer une discussion de groupe où un soutien de voix est le facilitateur. Et il dit, vous avez parlé trop beaucoup. On peut construire des systèmes comme ça. Donc ces scénarios sont dans ma main. Ils sont en train de construire des systèmes comme ça. Et c'est un concept prouvé. Et il y a des scénarios qui sont dans la main. Et c'est un concept prouvé. Et c'est un concept prouvé. Et c'est un concept prouvé. Et c'est un concept prouvé. Et c'est un concept prouvé. adel起 desания. Et c'est un concept selective c'est un Common le plus utile ludique. Et c'est un donkey et le plus Conven participant. En train de perspectives et de types. tout le pilote va juste créer un transcript et summariser. Donc tout ce que c'est, c'est ici. OK. C'est vous qui de s'attaché et enchanté en-là concernant les piquons? Oui, et je vais vous dire que la prochaine semaine, nous avons des sous-tracteurs. Ce ne sera pas un sous-tracteur normal. Il y aura deux salaires, un, il peut y avoir deux salaires aussi. Un sera un avec un type différent entre le Python et le Go. Et la deuxième sera un vision d'un computer. Et il y aura encore le Python et le Go. Oui, donc nous essayons de l'entraîner. Nous avons l'instruction d'une pièce. Donc, c'est le 9. Merci. Vous avez un spéciale? Oui, un spéciale. Ça sera après Montréal. C'est un spéciale audition? Oui, spéciale. Normalement, nous avons une discrétion à l'entraînement. C'est ce qu'on a fait avec les présentations. Je pense que je serai là ou avec l'application? Oui, c'est là. OK. Et bien sûr. Merci beaucoup. On va finir là-dessus. N'oubliez pas Montréal 105. En 15 mai, nous avons créé des avancements. Et merci d'être venu. Je vous dis, merci. Merci d'avoir été venu. Et merci d'avoir été venu.