Procedimentos

Exceto quando mencionado, as pesquisas feitas seguem os procedimentos descritos aqui, que por sua vez são baseados no e-mail enviado por adfeno.

Coleta dos endereços de e-mail

Os endereços de e-mail estão disponíveis nos arquivos .csv feitos pelo TSE para cada ano, por exemplo, podes baixar o do ano de 2020 — arquivos estes que podem ser acessados indiretamente tanto pelo site do TSE quanto pelo seu repositório, para ambos os casos, vejam a respectiva nota para saber como baixar os dados caso este link esteja quebrado ou queiram saber como chegar a este arquivo de forma alternativa sem usar software não livre —, cada uma das tabelas tem o campo NM_EMAIL que precisamos.

Sobre este campo, o TSE cometeu os seguintes erros:

  • Segundo os padrões internacionais de envio de e-mails RFC 5322 (seções 3.2.3, 3.2.4, 3.4.1), a notação descrita pela RFC 5234, e Korokithakis (2018), a parte local/nome de usuário do endereço é sensível à capitalização (letras minúsculas ou maiúsculas levam a diferentes caixas de e-mail), mas o TSE optou por transformar todos os endereços em letras maiúsculas. Para resolver isso, tentou-se transformar todo o e-mail para letras minúsculas.

  • Parece que o TSE não usou validação de e-mails usando mensagens de e-mail normais (via SMTP) na ocasião do registro, ou usou um que dependia apenas do servidor HTTP e do conjunto HTML + JavaScript, este último que não é recomendado, segundo Korokithakis (2018). Assim, nota-se que alguns dos endereços podem ter erros visíveis de grafia para provedores que já conhecemos.

Feitas estas observações, tendo os arquivos .csv e usando o arquivo consulta_cand_2020_AC.csv como exemplo, vais precisar de uma cópia do interpretador da linguagem estatística GNU R e do pacote/biblioteca adicional data.table visível para o mesmo interpretador, com isso pronto use do script presente na próxima subseção e dos exemplos na subsequente.

Script para pegar os e-mails

Recomenda-se salvar este como pegar_emails.r.

## pegar_emails: Coleta endereços de e-mail dos candidatos aptos segundo TSE
## Copyright (C) 2018, 2020  Adonay “adfeno” Felipe Nogueira https://libreplanet.org/wiki/User:Adfeno
## 
## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License.
## 
## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License along with this program.  If not, see http://www.gnu.org/licenses/.

## Argumentos:
##  * 1: arquivo .csv.
##  * 2 (opcional): texto para selecionar as condições dos campos/colunas, usando sintaxe do GNU R.
##      Se ausente, `DS_SITUACAO_CANDIDATURA == "APTO"` é usado.
##      Exemplo:
##      DS_SITUACAO_CANDIDATURA == "APTO" & (NM_UE == "RIO BRANCO" | NM_UE == "CRUZEIRO DO SUL")
## 
## Resultado
##  * Saída padrão: lista contendo somente os e-mails, separados por “, ” (uma vírgula seguida de um espaço), terminada por uma quebra de linha (line feed, LF).

## Exemplo de uso:
## Rscript --verbose "pegar_emails.r" "consulta_cand_2020_AC.csv" "e-mails.txt"

## Carrega a biblioteca data.table, para tratar de grandes tabelas de forma mais rápida.
library(data.table)

## Lê o arquivo .csv conforme descrição em “leiame.pdf” e armazena este em um quadro de dados padrão do GNU R.
dados <- read.csv(file = commandArgs(trailingOnly = TRUE)[1],
    header = TRUE,
    sep = ";",
    na.strings = c("#NULO#",
        -1),
    fileEncoding = "Latin1")

## Converte o quadro de dados do GNU R para tabela de dados do data.table, otimizando assim a leitura e definição dos dados.
dados <- data.table(dados)

## Se um segundo argumento não for fornecido…
if (is.na(commandArgs(trailingOnly = TRUE)[2])) {
    ## Usa a condição padrão (`DS_SITUACAO_CANDIDATURA == "APTO"`, que retorna a lista de valores lógicos (verdadiro/TRUE ou falso/FALSE) caso o candidato esteja apto.
    condicoes_das_colunas <- 'DS_SITUACAO_CANDIDATURA == "APTO"'
} else {
    ## Se há um segundo argumento, usa-se deste, não importa se está correto ou não.
    condicoes_das_colunas <- commandArgs(trailingOnly = TRUE)[2]
}

## `eval(parse(text = …))` transforma um texto em parte de código. `which` enumera quais posições são verdadeiras/TRUE. Efetivamente, cria-se uma lista com o número das linhas dos candidatos aptos (por padrão) ou com base nas condições especificadas.
candidatos <- which(dados[,
    eval(parse(text = condicoes_das_colunas))])

## Coleta os endereços do campo NM_EMAIL, `unique` remove duplicatas, `tolower` transforma os endereços em letras minúsculas, `paste` com `", "` formata o texto de saída com uma vírgula e um espaço repetidamente para cada ítem da lista, `cat` com `"\n"` finaliza com quebra de linha. `sep = ""` evita que `cat`e `paste`coloquem espaços ontre os itens quando não queremos.
cat(paste(tolower(unique(dados[candidatos,
                        NM_EMAIL])),
        ", ",
        sep = ""),
    "\n",
    sep = "")

Exemplos

Candidaturas no Rio Branco ou em Cruzeiro do Sul (AC)

Mesmo que você altere os critérios, guarde o resultado do comando caso queiras enviar os e-mails, tendo em vista que podes precisar dele para os exemplos posteriores.

Rscript --verbose "pegar_emails.r" "consulta_cand_2020_AC.csv" 'DS_SITUACAO_CANDIDATURA == "APTO" & (NM_UE == "RIO BRANCO" | NM_UE == "CRUZEIRO DO SUL"'

Mostrar somente e-mails com servidores possivelmente incorretos

Isto expande o exemplo anterior, de modo a listar somente os endereços de e-mail que podem estar registrados incorretamente ao menos no tocante ao nome de domínio do servidor/fornecedor do endereço (parte após o arroba).

Rscript --verbose "pegar_emails.r" "consulta_cand_2020_AC.csv" 'DS_SITUACAO_CANDIDATURA == "APTO" & (NM_UE == "RIO BRANCO" | NM_UE == "CRUZEIRO DO SUL" & ! grepl("@((gmail|hotmail|icloud|live|outlook)\\.com|yahoo\\.com(\\.br)?|(bol|terra|uol)\\.com\\.br|riseup\\.net|hyperbola\\.info)$", NM_EMAIL, ignore.case = TRUE)'

Com base nesta lista, recomenda-se que verifiques se os fornecedores existem e faça as correções no arquivo da lista de e-mails.

A título de exemplo, para um teste preliminar da existência dos provedores, podes usar o seguinte comando, cujo programa já vem instalado por padrão pelo pacote dnsutils no GNU+Linux Trisquel:

dig +short -t "MX" "bol.com"

Isto deve retornar ao menos uma linha com algum endereço (qualquer que seja, numérico ou não), indicando que existe ao menos um fornecedor de e-mail associado àquele nome de domínio. Se isto ocorrer, não é necessário ajustar nada.

Todavia, NM_EMAIL pode ter servidor de e-mail que, apesar de similar a um conhecido, também pode supostamente aceitar e-mails naquele domínio. O exemplo anterior é um destes casos, devido à similaridade com bol.com.br. Nesse cenário, recomenda-se enviar o e-mail a todos os endereços possíveis.

Remover e-mails com servidores possivelmente incorretos (preterido)

Cuidado: isto pode remover endereços legítimos!

Rscript --verbose "pegar_emails.r" "consulta_cand_2020_AC.csv" 'DS_SITUACAO_CANDIDATURA == "APTO" & (NM_UE == "RIO BRANCO" | NM_UE == "CRUZEIRO DO SUL" & grepl("@((gmail|hotmail|icloud|live|outlook)\\.com|yahoo\\.com(\\.br)?|(bol|terra|uol)\\.com\\.br|riseup\\.net|hyperbola\\.info)$", NM_EMAIL, ignore.case = TRUE)'

Envio das mensagens

Durante o envio da mensagem, adfeno optou por preenchê-la da seguinte forma:

  • Campo To (Para em português brasileiro): colocou o e-mail da eleicoes2018@lists.libreplanetbr.org (lista de e-mails/discussão), para pelo menos ter um destinatário visível.

  • Campo Reply-To (Responder a): idem ao anterior, a razão disto é tentar evitar que os candidatos respondam particularmente ao ativista que enviou a mensagem, uma vez que se entende que este já participa da lista de discussão atual e além disso se justifica pelo fato de que o membro do grupo não precisaria repassar a mensagem recebida para a lista e traria mais transparência à resposta pois o membro não precisaria ser questionado sobre alegada modificação da resposta.

  • Campo Bcc (Cco): endereços dos candidatos contidos no arquivo de texto puro, a razão para estarem aqui é para dar a chance de um candidato não precisar expor seu e-mail ao público (ou a outros candidatos), uma vez que os arquivos da lista estão disponíveis a todos os não membros e assim tentando não deixar visível tal endereço para possíveis ataques pessoais contra um candidato. A desvantagem é que isto pode colocar a mensagem em uma posição descriminatória quando avaliada pelo provedor de e-mails que receberá ela, podendo classificá-la como spam ou simplesmente descartá-la — espera-se que com uma mensagem explicativa e transparente expondo os motivos ao remetente.

No tocante ao corpo da mensagem, sugere-se usar o seguinte modelo:

Prezad@ candidat@,

Encaminho a seguir — em nome dos coletivos LibrePlanet Brasil, FSF América Latina e do Projeto GNU — algumas questões sobre tuas propostas, particularmente relacionadas ao software livre. Desde já contamos com tua concordância para a publicação das respostas em <http://wiki.libreplanetbr.org/Eleições/2020/>.

Software livre é todo programa de computador que respeita as liberdades do usuário de executar, estudar, auditar, adaptar, copiar, modificar e distribuir o programa e as melhorias.  Não confundir com software gratuito: a questão é liberdade e, se não puder ser usado, vendido ou explorado comercialmente, não se qualifica como software livre. Para maiores detalhes sobre a definição de software livre, veja Stallman (2015), Hill (2015), Lima (2013), Buckman e Gay (2002).

Software livre é software que, usado no poder público, respeita a soberania, a economicidade, a livre concorrência e permite favorecer agentes econômicos locais, sem abrir mão da excelência técnica (OLIVA; REZENDE, 2013).

Na esfera privada, evita a invasão de privacidade, o abuso dos efeitos de rede de protocolos não interoperáveis e das restrições contratuais nos arranjos exclusivos de distribuição de software privativo de liberdade.

Para todos os usuários, evita a perda de controle sobre os próprios dados, computações e dispositivos computacionais, sendo assim, possibilitando sempre o controle do ambiente material (LIMA, 2013, RANDAL, 2016, VILLA, 2016).

Desde antes de o termo ser cunhado, software livre vem sendo desenvolvido e compartilhado por comunidades de pesquisadores, empresas, colaboradores individuais e curiosos em geral.  Comunidades de usuários e desenvolvedores se formam ao redor dos programas de maior sucesso, realimentando os esforços neles investidos.

Outras comunidades se dedicam a aspectos sociais, políticos e éticos do software livre, com preocupações quanto à indevida influência de grandes empresas desenvolvedoras de software ou de uma rede social centralizada sobre o dia a dia de usuários individuais, corporativos e governamentais (GERWITZ, 2017, BENKLER, 2017); à segurança e confiabilidade de programas não auditáveis e sem transparência, sejam de origem corporativa ou governamental; ao reforço das desigualdades e das dependências fomentadas pelo software privativo de liberdade, especialmente quando ofertado em caráter não oneroso a instituições educacionais (LENON; GOMES; PRETTO, 2011), nos moldes de formação de usuários do tráfico de drogas; à corrupção facilitada pelos arranjos exclusivos de fornecimento (monopólios de fato, senão de direito, já que eventuais redistribuidores de um determinado programa privativo de liberdade estão todos a jusante de um único fornecedor último) e pelos lucros exorbitantes advindos da venda de licenças de custo efetivo zero.

A todas essas comunidades nos interessa conhecer teus planos caso seja eleit@.  Especificamente, perguntamos, e desde já solicitamos permissão para publicar suas respostas:

1. Quais os planos para aumentar a adoção de software livre no poder público?

2. Que medidas pretendes tomar para que o poder público deixe de impor ou mesmo ofertar a cidadãos naturais e jurídicos aplicativos privativos de liberdade (ex: cálculo de impostos, e-documentos, consultas ou transações online com bancos públicos), substituindo-os por software livre?

3. Que outras propostas tens para promover a adoção e difusão de software livre na esfera privada?

4. Quais as propostas para conter e reverter a cooptação de setores públicos no sentido de entregar a corporações nebulosas os dados pessoais de cidadãos que deveriam ser mantidos sob a guarda do Estado? (exemplo: e-mail e armazenamento de dados em geral terceirizados para provedores de Serviços como Substitutos do Software em escolas, hospitais e defensorias públicas).


# Referências


BENKLER, Yochai. Degrees of freedom, dimensions of power. 2017. SFLC Fall Conference. Disponível em: <https://downloads.softwarefreedom.org/2017/conference/0-keynote.webm>. Acesso em: 31 jan. 2018.

BUCKMAN, Richard E.; GAY, Joshua. A note on software. In: FREE SOFTWARE FOUNDATION, INC. Free software, free society: selected essays of Richard M. Stallman. 3. ed. Boston: GNU Press, 2002. cap. A, p. 271–273. Disponível em: <https://shop.fsf.org/books-docs/free-software-free-society-selected-essays-richard-m-stallman-3rd-edition>. Acesso em: 11 dez. 2016.

GERWITZ, Mike. The surreptitious assault on privacy, security, and freedom. 2017. LibrePlanet. Disponível em: <https://media.libreplanet.org/u/libreplanet/m/the-surreptitious-assault-on-privacy-security-and-freedom/>. Acesso em: 2 set. 2017.

HILL, Benjamin Mako. Access without empowerment. 2015. LibrePlanet. Disponível em: <https://media.libreplanet.org/u/libreplanet/m/access-without-empowerment-benjamin-mako-hill-6bd1/>. Acesso em: 20 dez. 2016.

LENON, Wilkens; GOMES, Alex Sandro; PRETTO, Nelson de Luca. Universidade e software livre: a academia e o compartilhamento do conhecimento. 2011. Fórum Internacional Software Livre. Disponível em: <http://hemingway.softwarelivre.org/fisl12/high/sala41e/sala41e-201107010910.ogv>. Acesso em: 30 set. 2017.

LIMA, Leonardo Santos de. Cultura do software livre e desenvolvimento: uma análise sobre potencialidades e limites diante e adiante da “nova economia”. Revista Crítica de Ciências Sociais, n. 102, p. 71–88, 2013. Disponível em: <http://rccs.revues.org/pdf/5462>. Acesso em: 2 ago. 2017.

OLIVA, Alexandre; REZENDE, Pedro Antonio Dourado de. Da preferência constitucional pelo Software Livre. 2013. Disponível em: <https://www.fsfla.org/ikiwiki/texto/pref-const-br-swl.pt.html>. Acesso em: 1 set. 2018.

RANDAL, Allisson. Free software, free society. 2016. LibrePlanet. Disponível em: <https://media.libreplanet.org/u/libreplanet/m/free-software-free-society/>. Acesso em: 20 dez. 2016.

STALLMAN, Richard Matthew. Free software and your freedom. 2015. Seattle GNU/Linux Conference. Disponível em: <http://audio-video.gnu.org/video/2015-10-24--rms--free-software-and-your-freedom--seagl--speech.ogv>. Acesso em: 1 set. 2016.

VILLA, Luis. Stallman, Nussbaum and Sen: putting “freedom” in context. 2016. LibrePlanet. Disponível em: <https://media.libreplanet.org/u/libreplanet/m/stallman-nussbaum-and-sen-putting-freedom-in-context/>. Acesso em: 20 dez. 2016.

Tendo pelo menos uma mensagem destas enviada, podes salvá-la como modelo deixando apenas um destinatário no campo Bcc (Cco) para lembrar de tal parte, não precisar repetir o processo de apagar todos os vários destinatários neste e sem o trabalho de colar o texto da mensagem novamente.

Apresentação dos resultados

Abstem-se de inserir todos os endereços aqui pois o referido arquivo já os contém, exceto em casos de possível divergência.

Procedimentos e resultados

Notas

  1. #baixar-dados-pelo-site-do-tse
    Pelo GNU IceCat com LibreJS ativo, acesse o site do TSE, na seção Eleições clique em Eleições 2020. Na próxima página, no menu lateral, em Eleições, clique em Estatísticas. Após carregar a tela seguinte, próximo de Outras estatísticas, clique em Repositório de dados eleitorais. Com isso, você estará no repositório do TSE, no menu lateral do repositório, clique na opção Candidatos, escolha o ano atual, e clique em Candidatos (formato ZIP).