{"id":4880,"date":"2017-06-09T17:00:00","date_gmt":"2017-06-09T17:00:00","guid":{"rendered":"https:\/\/bitsebots.blogs.sapo.pt\/4880.html"},"modified":"2017-06-09T17:00:00","modified_gmt":"2017-06-09T17:00:00","slug":"o-regresso-do-aleph-bot","status":"publish","type":"post","link":"https:\/\/blog.alchimista.pt\/?p=4880","title":{"rendered":"O regresso do Aleph Bot"},"content":{"rendered":"<p><a title=\"Por Eric Benacek from Paris, France (Bot) [CC BY-SA 2.0 (http:\/\/creativecommons.org\/licenses\/by-sa\/2.0)], undefined\" href=\"https:\/\/commons.wikimedia.org\/wiki\/File%3ABot_Sketch_Eric_Benacek.jpg\"><img decoding=\"async\" style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/0\/08\/Bot_Sketch_Eric_Benacek.jpg\/256px-Bot_Sketch_Eric_Benacek.jpg\" alt=\"Bot Sketch Eric Benacek\" width=\"256\" \/><\/a><\/p>\n<p>\u00a0<\/p>\n<p><strong><em>Ap\u00f3s uma paragem que durou anos, o Aleph Bot, o bot anti-vandalismo que faz companhia ao Salebot regressa ao activo.<\/em><\/strong><\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0O\u00a0<a href=\"http:\/\/pt.wikipedia.org\/wiki\/Usu%C3%A1ria:Aleph_Bot\">Aleph_Bot<\/a>\u00a0come\u00e7ou a operar em 2010, tendo como base o c\u00f3digo do\u00a0<a href=\"https:\/\/es.wikipedia.org\/wiki\/Usuario:AVBOT\">AVBOT<\/a>, um rob\u00f4 desenvolvido por\u00a0<a href=\"https:\/\/es.wikipedia.org\/wiki\/Usuario:Emijrp\">Emijrp<\/a>, um editor da Wikip\u00e9dia em Espanhol, e era precisamente por l\u00e1 que operava. Tratava-se de um c\u00f3digo extremamente interessante, onde, em compara\u00e7\u00e3o com o do\u00a0<a href=\"https:\/\/pt.wikipedia.org\/wiki\/Usu%C3%A1rio(a):Salebot\">Salebot<\/a>, outro rob\u00f4 anti-vandalismo que opera na pt.wp, trazia inova\u00e7\u00f5es como a diferencia\u00e7\u00e3o do tipo de edi\u00e7\u00e3o &#8211; edi\u00e7\u00e3o de testes, vandalismo ou branqueio de p\u00e1gina, avisos espec\u00edficos para o tipo de edi\u00e7\u00e3o, assim como o reportar de utilizadores que apesar dos avisos reincidem nas edi\u00e7\u00f5es.\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0Apesar de no in\u00edcio a adapta\u00e7\u00e3o \u00e0\u00a0wikip\u00e9dia Lus\u00f3fona ter corrido a bom ritmo, a verdade \u00e9\u00a0as\u00a0especificidades da wikip\u00e9dia em l\u00edngua espanhola estavam embutidas\u00a0no c\u00f3digo, n\u00e3o separadas em vari\u00e1veis, e se \u00e9 verdade que houve uma tentativa de reescrever essas especificidades\u00a0em vari\u00e1veis localiz\u00e1veis, com o passar do tempo o c\u00f3digo do Aleph foi divergindo da vers\u00e3o original cada vez mais, at\u00e9 ficar complicada a sua manuten\u00e7\u00e3o, e deu-se a inevit\u00e1vel deprecia\u00e7\u00e3o.<\/p>\n<p>\u00a0A ideia de criar um novo c\u00f3digo surgiu ainda o Aleph estava ao servi\u00e7o, aproveitando as ideias do AVBOT mas num c\u00f3digo mais flex\u00edvel, e onde as vari\u00e1veis de configura\u00e7\u00e3o estivessem o mais longe poss\u00edvel do c\u00f3digo, permitindo mais flexibilidade, e ao mesmo tempo, que o c\u00f3digo pude-se ser usado noutros projectos. A primeira tentativa deu-se com o python 2.7, assentando no <a href=\"https:\/\/en.wikipedia.org\/wiki\/Twisted_(software)\">Twisted<\/a>, e indo buscar as mudan\u00e7as recentes ao irc. Foram bons tempos, mas ao mesmo tempo momentos frustrantes, com imensos\u00a0<strong>UnicodeDecodeError<\/strong> a saltitar por tudo o que era canto. Aliado a isto, noticias de uma poss\u00edvel deprecia\u00e7\u00e3o do servido de mudan\u00e7as recentes no irc deixaram-me relutante em continuar por um caminho que poderia estar condenado, ent\u00e3o a certo ponto decidi aguardar, e o Aleph caiu na penumbra.<\/p>\n<p>\u00a0<\/p>\n<p>Uns tempos mais tarde, decidi voltar \u00e0 carga, desta vez come\u00e7ando do zero, e j\u00e1 com o python 3. E que diferen\u00e7a tremenda. Por muitas discuss\u00f5es em redor da quest\u00e3o py3\/py2, a verdade \u00e9 que especialmente para trabalhar com artigos da wikip\u00e9dia, o py3 \u00e9 uma enorme lufada de ar fresco, tirando, \u00e9 claro, o caso particular das predefini\u00e7\u00f5es do wikitexto, onde chego a ter p\u00e9rolas como esta: \u00a0&#8220;{{{{Subst:{0}{3}.css|{1}|{2}|{3}}}}}&#8221;.format(msg, ptitle, oldid, aleph_warns, bv)<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0Se o irc j\u00e1 tinha recuperado o seu estatuto de intoc\u00e1vel, o\u00a0<a href=\"https:\/\/wikitech.wikimedia.org\/wiki\/RCStream\">RCStream<\/a>\u00a0apresentava-se como uma excelente alternativa, at\u00e9 porque fornecia mais informa\u00e7\u00e3o do que o irc, e de uma forma mais estruturada, ent\u00e3o o c\u00f3digo que estava a nascer foi adaptado\u00a0para usar este novo sistema. Infelizmente teve um tempo de vida curto, porque pouco depois de come\u00e7ar a usa-lo, foi depreciado em favor do\u00a0<a href=\"https:\/\/wikitech.wikimedia.org\/wiki\/EventStreams\">EventStreams<\/a>. Neste caso, a modifica\u00e7\u00e3o n\u00e3o foi muito custosa.<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0Como \u00e9 \u00f3bvio, a parte mais custosa de todo o processo \u00e9 determinar se uma edi\u00e7\u00e3o deve ou n\u00e3o ser revertida, e como o bot tenta fazer a distin\u00e7\u00e3o entre edi\u00e7\u00f5es de teste ou vandalismos \u00f3bvios, as complica\u00e7\u00f5es aumentam. Na implementa\u00e7\u00e3o actual, que espero vir a descrever mais pormenorizadamente\u00a0no futuro, h\u00e1 uma contabiliza\u00e7\u00e3o das express\u00f5es problem\u00e1ticas que ocorrem nas linhas adicionadas e removidas, e ap\u00f3s o saldo entre as duas, contabiliza-se a pontua\u00e7\u00e3o. No final, todas as express\u00f5es encontradas d\u00e3o origem a uma pr\u00e9-classifica\u00e7\u00e3o\u00a0do g\u00e9nero\u00a0{&#8216;T&#8217;: -12, &#8216;G&#8217;: 2, &#8216;V&#8217;: 0}. Com esta classifica\u00e7\u00e3o, o passo seguinte \u00e9 determinar a classifica\u00e7\u00e3o da edi\u00e7\u00e3o e o seu valor, entrando ent\u00e3o um sistema de an\u00e1lise\u00a0de pontua\u00e7\u00e3o. De uma forma simples, se a pontua\u00e7\u00e3o de vandalismo ou teste \u00e9 inferior\u00a0a um valor definido, a edi\u00e7\u00e3o \u00e9 classificada como tal, se for superior ao limite definido, \u00e9 classificada como boa, e se ficar entre um intervalo definido como limbo, tenta usar o\u00a0<a href=\"https:\/\/www.mediawiki.org\/wiki\/ORES\">ORES<\/a>\u00a0( um sistema de intelig\u00eancia artificial), para verificar se a edi\u00e7\u00e3o deve ser revertida.<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0No caso de revers\u00e3o, ocorre ainda a verifica\u00e7\u00e3o se o pen\u00faltimo editor n\u00e3o \u00e9 o bot, ou o Salebot, a fim de evitar guerras de edi\u00e7\u00f5es, a revers\u00e3o e a posterior notifica\u00e7\u00e3o. Ao enviar a notifica\u00e7\u00e3o, o bot verifica se existem mais avisos, e futuramente ser\u00e1 implementado um sistema de notifica\u00e7\u00e3o na wiki quando se verifica que h\u00e1 um utilizador j\u00e1 com in\u00fameros avisos. Na verdade, a partir do momento em que o c\u00f3digo estabiliza e os bugs com o <strong><em>core code<\/em><\/strong> do bot desaparecem, a ideia \u00e9 implementar um sistema de notifica\u00e7\u00f5es na wiki de situa\u00e7\u00f5es que conv\u00e9m an\u00e1lise humana, nomeadamente os tais editores com muitos avisos, ou edi\u00e7\u00f5es do bot revertidas. Na pr\u00e1tica, o Aleph \u00e9 eternamente um projecto em curso.<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0Paralelamente ao desenvolvimento do c\u00f3digo em si, h\u00e1 um painel de controlo em desenvolvimento em\u00a0<a href=\"https:\/\/tools.wmflabs.org\/aleph\/\">https:\/\/tools.wmflabs.org\/aleph\/<\/a>. Recorrendo ao\u00a0<a href=\"https:\/\/www.mediawiki.org\/wiki\/Help:OAuth\">OAuth<\/a>, \u00e9 poss\u00edvel utilizadores da wikip\u00e9dia autenticarem-se, e no caso de serem administradores, conseguem parar o Aleph. H\u00e1 alguns dados sobre o estado do script no\u00a0<a href=\"https:\/\/wikitech.wikimedia.org\/wiki\/Help:Tool_Labs\/Grid\">grid engine<\/a>, que por agora apenas s\u00e3o despejados sem grande tratamento, mas o plano \u00e9 que a partir desse painel se tenha acesso \u00e0s an\u00e1lises do bot, assim como controlar alguns dos seus par\u00e2metros.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00a0 Ap\u00f3s uma paragem que durou anos, o Aleph Bot, o bot anti-vandalismo que faz companhia ao Salebot regressa ao activo. \u00a0 \u00a0 \u00a0O\u00a0Aleph_Bot\u00a0come\u00e7ou a operar em 2010, tendo como base o c\u00f3digo do\u00a0AVBOT, um rob\u00f4 desenvolvido por\u00a0Emijrp, um editor da Wikip\u00e9dia em Espanhol, e era precisamente por l\u00e1 que operava. Tratava-se de um c\u00f3digo [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_siteseo_robots_primary_cat":"","pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-4880","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=\/wp\/v2\/posts\/4880","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4880"}],"version-history":[{"count":0,"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=\/wp\/v2\/posts\/4880\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4880"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4880"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4880"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}