 Procteur, c'est un outil qu'on a fait chez Aja où je travaille. En fait, en gros chez Aja on se crêpe énormément de données de sites gouvernementaux, de corporations, de fondations, etc. Et au bout d'un certain temps, en fait, certains IDS, certains systèmes de sécurité nous tagent comme étant probablement des hackers, ce qui n'est pas le cas. Et puis, en fait, on est bloqués des sites. Donc, en gros, notre serveur était juste blacklisté. C'était un peu chiant, on pouvait changer de serveur, mais à un moment donné, en fait, on se faisait blacklisté à chaque 15 minutes. On a essayé d'être plus gentil, réduire le flow de query. Rien à faire. Donc, on a décidé, on s'est posé la question, qu'est-ce qu'on veut faire ? On s'est dit, pourquoi pas utiliser tort, en fait ? Donc, ce qu'on a utilisé tort, notre but, en fait, c'était de se crêper de façon anonyme. Tart a la qualité de pouvoir nous rendre anonyme. Par contre, les endpoints de tort sont des fois de mauvaise qualité. Donc, en fait, on perd des requêtes qui se rendent pas. Donc, en fait, il fallait être capable d'avoir de la real ability quand même. Donc, là, il puisse, il doit changer assez fréquemment. On voulait avoir un système qui soit pluggable, qui soit quand même assez facile d'utilisation, qu'on puisse faire grandir si on avait besoin de se crêper plus et qui soit vraiment simple, en fait. Donc, on a décidé de créer tort, proctart pour tort. Et voilà, proctart, c'est le méchant dans Marvin. Tart, donc les réseaux tarts, je ne sais pas si tout le monde connaît. En gros, c'est vraiment assez simple. On se connaît que le réseau tart, le réseau tart a plusieurs endpoints et puis, en fait, on ne sait jamais vers lequel on va sortir. On est toujours assigné un endpoint lors de notre connexion. Il faut demander au réseau d'être renouvelé pour avoir un nouveau endpoint à chaque fois. Donc voilà. Donc, c'est ça qu'on utilise. Donc, je vais vous montrer un peu de quoi ça a l'air. En gros, ce qu'on fait, c'est qu'on a le code Python ici, du projet proctart qu'on a écrit. Donc, on a un script juste pour le lancer. Donc, c'est super simple. Ça utilise Agparser avec plein d'options pour pouvoir... Donc, en gros, c'est que tort est installé sur la machine une fois par des biens ou ce que vous voulez. Puis, nous, on va lancer plusieurs instances en parallèle et on va parler avec ces instances-là par le parsoc. Donc, c'est une connexion sock sur chacun de nos endpoints tort. Puis, par la suite, on va fournir au-dessus pour la couche applicative un port HTTP normal, donc 80-80, par exemple. Donc, je vais vous montrer ce que ça donne ici. Donc, si je pars proctart, par exemple... Non, c'est pas possible. Mon lechernel est activé. Donc, je lance proctart, voilà, tout simplement. Il m'a lancé ici, vous voyez, deux TAR, donc TAR0, TAR1. Donc, si je m'en viens ici... Ça, c'est l'adresse IP ici actuellement chez Shopify. Donc, si je recharge la page, si la connexion fonctionne... Ah non, il faut que je me connecte justement à mon endpoint. Donc, je m'en vais dans les préférences de Firefox. Ici, je lui dis manuellement vers le port 80-80. Et plus, si je recharge, bien sûr, ça marche pas. Ah! Restarting proxy, là, ça marche. Donc, là, si on tombe sur un endpoint TAR assez rapide, ça va être assez rapide. Et là, vous voyez, on a une nouvelle adresse IP. Si je recharge encore, je devrais avoir une autre adresse IP parce que j'ai lancé deux TAR différents. Et voilà. Donc, si j'arrête ça ici, je peux lancer... Ce que nous, on fait en général, c'est qu'on en lance 20. Et puis là, justement, l'initialisation va se faire. Mais en gros, ce que ça fait dans le code, c'est tout simplement, en fait, qu'on garde une liste de toutes nos sockets qui sont ouvertes, socks. Et puis, on va monitorer le L status de chacun. Donc si jamais un endpoint est fini par être de mauvaise qualité, parce que quelqu'un d'autre l'utilise aussi en même temps que nous, on va tuer automatiquement la socket et en repartir un autre de façon automatique. Ce qui nous permet, en fait, de scraper, par exemple, des sites comme le site du Revenu Canada, qui nous bloquait, par exemple, pour aller chercher les données de la Fondation Catania, par exemple. Et puis donc dans scraper à peu près 10 à 15 000 organisations par jour, en fait, grâce à ça, en fait. Donc voilà. Donc c'est un peu le but du projet. C'est un projet qui est actuellement en code fermé, parce qu'en fait, c'est vraiment un besoin interne. Et puis on pense, éventuellement, l'ouvrir, parce que c'est comme vraiment, en fait, on sait l'effet de demander. C'est Python Base, comme je vous dis, c'est ça dépend de tard. Nous, on lance tout ça en utilisant Upstart, parce qu'on est sur Revenu. On utilise la syntax cure puis Wiget. Donc en fait, en gros, ici, par exemple, mon scraper, qui est ici, qui est Gimlet, qui est un autre scrape. Donc on fait juste de définir ici la CTP proxy sur la ligne de commande. Et puis, par exemple, si je lance ça ici, ça va me scraper si je réussis à l'avoir. Le site du ministère de la Justice, ici on voulait avoir les dons qui sont faits au ministère de la Justice. Et donc voilà, ça passe par tard tout ça. Donc voilà, je vous remercie.