Elmord's Magic Valley

Software, lingüística e rock'n'roll. Às vezes em Português, sometimes in English.

Posts com a tag: life

Words of wisdom by Tim Pulju

2015-09-06 20:58 -0300. Tags: life, mind, random, em-portugues

Tim: … I'm gonna pick number 3 … also because if I just agree with everyone else and we're all correct then I attain no glory from that, but if I disagree with everyone else and I'm correct then I'll have great glory, and I think I'll put it in my gravestone, so I'm gonna say that number 1 and number 2 are correct and number 3 is false.

[…]

Trey: Now, on to Tim's great glory, did you consider the possibility of great shame?

Tim: I did, but I've lived with great shame for so much of my life that it won't be no great burden to add further shame to myself.

Language Made Difficult, Vol. XVII

(By the way, o Tim Pulju apresentou uma TED talk mui bacaninha chamada The Uncanny Science of Linguistic Reconstruction em 2011.)

1 comentário / comment

Mail, mail, mail

2015-08-10 23:13 -0300. Tags: comp, rant, life, em-portugues

Como é o causo de quando em quando por aqui (e provavelmente mais quando do que se me apercebe), este post tem o objetivo único e exclusivo de reclamar da vida (com uma e outra informação útil solta, talvez, e meramente incidental). Com este anteaviso, prossigo o relato.

Até agora, o meu cliente de e-mail favorito era o Claws Mail. Agora parando para pensar, faz pelo menos uns 10 anos que eu uso o Claws Mail (quando eu comecei a usá-lo, ele ainda se chamava Sylpheed-Claws), e durante a maior parte desse tempo, eu fui um cliente satisfeito.

Eu sempre preferi manter cópia dos e-mails localmente, então eu baixava os e-mails via POP. (Além disso, no 3G era simplesmente inviável usar IMAP.) Em algum momento no ano passado, o INF resolveu defasar o POP em favor do IMAP. Durante um certo período, o POP simplesmente ficou fora do ar (desconfio que isso não tenha sido intencional). Além disso, o sistema anti-spam, que anteriormente marcava as mensagens como spam adicionando [***SPAM***] ao subject, passou a mover as mensagens para uma pasta Junk, que não vem pelo POP. Como é da natureza dos anti-spams marcar coisas como e-mails de confirmação de inscrição como spam, ficar sem ver essa pasta não era factível. Conclusão: tive que migrar para o IMAP.

Turned out, entretanto, que o suporte ao Claws a manter as pastas de IMAP sempre sincronizadas para uso offline era menos que excelente (e acho que nessa época eu ainda usava 3G), então usar o IMAP da INF diretamente não era viável. Além disso, nesse meio tempo eu comecei a ler e-mail pelo celular, e ter as contas não-sincronizadas no celular e no PC estava meio desagradável. A solução que eu encontrei então foi usar um programinha chamado OfflineIMAP, que permite manter uma mailbox local sincronizada com um servidor IMAP. Diferentemente dos fetchmails da vida, a sincronização do OfflineIMAP é bidirecional: mudanças em qualquer uma das pontas são propagadas para a outra. O problema é que o OfflineIMAP só suporta mailboxes no formato Maildir, e o Claws só suporta mailboxes no formato MH. A solução comumente adotada nessa situação é instalar um servidor IMAP local (eu usei o Dovecot), fazer o OfflineIMAP sincronizar o servidor IMAP remoto com o servidor IMAP local (ao invés de uma pasta Maildir), e apontar o cliente de e-mail para o IMAP local. Deu um trabalhinho, mas consegui.

Um inconveniente disso é que se você quiser atualizar os e-mails manualmente ao invés de esperar o próximo momento de atualização, é necessário mandar um sinal para o processo (pkill -USR1 offlineimap). Outro inconveniente é que o OfflineIMAP não consegue identificar que uma mensagem foi movida para outra pasta; na sincronização, ele deleta a mensagem original na outra ponta e faz upload da mensagem para a pasta nova. A primeira conseqüência disso é que não é possível mover coisas para a pasta Junk localmente, porque o IMAP da INF não aceita fazer uploads de mensagens novas para a pasta Junk, apenas que mensagens de outras pastas sejam movidas para ela. A outra conseqüência é que e-mails grandes movidos localmente precisam ser uploadeados novamente, o que é lento e sujeito ao famoso trancaço da INF, uma doença que afeta todos os serviços da INF (IMAP, POP, HTTP, SSH, you name it) desde absolutamente sempre, em que o servidor da INF esquece da conexão e o upload/download simplesmente trava. Baixar os e-mails por POP via 3G era algo que quase sempre exigia múltiplas tentativas (e como POP não suporta "resumar" o download de uma mensagem, os e-mails de 5MB da lista da graduação com PDFs e fotos de produtos à venda eram algo especialmente lamentável, em particular porque normalmente eu não tinha o menor interesse nos e-mails de 5MB em questão). Bons tempos. Mas o problema ainda persiste, em escala menor, com os uploads desnecessários de mensagens de 5MB do OfflineIMAP. Mas ok, no geral, tudo funciona mais ou menos bem.

O problema é que agora o Claws Mail não estava mais notificando a chegada de mensagens novas. As it happens, a idéia do Claws de o que é uma mensagem nova em uma conta IMAP depende da flag "Recent" mantida pelo servidor; essa flag diz se uma mensagem já foi de alguma forma vista por um cliente. Se uma mensagem não possui essa flag, o Claws não a considera como uma mensagem nova, mesmo que ela esteja não-lida. De certa forma faz sentido, porque se você já abriu a mailbox em um outro aparelho e viu que a mensagem estava lá (mesmo sem tê-la aberto), você já sabe que ela existe e não precisa ser notificado. O problema é que a flag Recent é de inteiro controle do servidor IMAP – ela é removida automaticamente quando uam mensagem é "vista" e um cliente IMAP simplesmente não tem como readicionar a flag –, e o OfflineIMAP, no processo de baixar as mensagens para o servidor local, "vê" a mensagem. Well, fuck.

Na verdade o problema no Claws é pior, porque o Claws não aplica filtros automaticamente a mensagens que não sejam novas. Ok, dá para fazer a filtragem diretamente no servidor, configurando os filtros pelo webmail do serviço. O problema é quando o filtro deveria mover a mensagem para fora da mailbox. Por exemplo, eu tinha uma regra que movia todas as mensagens da CONLANG Mailing List para uma mailbox local (onde eu mantenho todo o archive da lista). Além de não aplicar os filtros a mensagens vistas, o Claws também não aplica filtros a mensagens novas que não estejam na Inbox da mailbox. Isso quer dizer que se eu adiciono um filtro no webmail para mover as mensagens da CONLANG para uma pasta "Conlang", e um filtro local para mover as mensagens novas em "Conlang" para o archive local, o filtro local não funciona.

Eu fiquei convivendo com essa situação assim mesmo por um bom tempo. Há uns meses atrás, eu me irritei com o Claws e fui ver se achava um outro cliente de e-mail que me agradasse. O primeiro que eu tentei foi o Thunderbird, que na ocasião eu não gostei não lembro mais por que razões específicas. No processo de procurar um cliente de e-mail novo eu acabei lembrando do Gnus, que foi o motivo original pelo qual eu acabei começando a usar o Emacs. No fim, eu resolvi parcialmente o meu problema com o Claws comentando fora o teste que limitava os filtros apenas à Inbox, larguei de mão o Gnus, e tudo ficou bem (com o efeito colateral de que eu comecei a usar o Emacs, so: yay). It soon turned out, entretanto, que a versão do RSSyl (o plugin leitor de feeds do Claws) que veio na versão que eu recompilei do Claws estava falhando em atualizar alguns feeds (na verdade ele parecia só estar perdendo um feed específico, o Little Strange World, mas eu não sabia quantos mais ele podia estar perdendo sem eu saber), então eu acabei voltando a usar o Claws pré-compilado do Debian e convivendo com seus defeitos. Era desagradável não ter barulhinho de notificação e ter que mover as mensagens da CONLANG para o archive local manualmente (eu acabei parando de mover), mas estava dando para engolir.

A última gota foi na última sexta-feira. Eu recebi um e-mail no começo da tarde com o subject "Matricula 2015/2 - URGENTE", me informando que eu não havia feito a matrícula nesse semestre e me pedindo para "nos informar uma posição a respeito". Isso me deixou bastante alarmado; eu achei que não era necessário me reinscrever na Dissertação de Mestrado, pois no Trabalho de Graduação na INF o camarada só se inscreve no semestre inicial e não é necessário fazer nada no semestre seguinte para continuar matriculado. Respondi explicando a situação e perguntando o que deveria fazer. Algum tempo depois, responderam-me da secretaria informando que eu deveria realizar a matrícula. A essa altura, entretanto, o período de matrícula já tinha encerrado há uma semana, então não era possível fazer isso pelo Portal do Aluno. Às 17h08 mandei um e-mail perguntando como eu deveria fazer a matrícula, e fui trabalhar no bendito código da minha dissertação. Turns out que às 17h09 tinha vindo uma resposta, perguntando em que disciplinas eu gostaria de me matricular, mas eu só vi isso por volta das 17h45, pois o Claws não notificou. A secretaria fecha às 17h30, o que significa que um problema que eu poderia ter resolvido no mesmo dia só seria resolvido na segunda (at best) por conta da tosquice do meu cliente de e-mail. Just kill me.

Eu passei o resto da sexta-feira tentando resolver o problema dos e-mails novos, e foi então que eu descobri o causo da flag Recent e o fato de que, como ela é controlada pelo servidor, não tem muito o que fazer (talvez haja alguma gambiarra, mas não encontrei). Resolvi então tentar usar o Claws direto com o IMAP da INF e evitar o OfflineIMAP, já que agora eu não uso mais o 3G. O que aconteceu foi algo ainda mais bizarro: algumas mensagens estavam sendo remarcadas como novas depois de já terem sido vistas (mas não lidas). Além disso, as mensagens que estavam sendo filtradas no servidor não estavam sendo marcadas como novas (não sei se porque o Claws considerou que mensagens novas fora da Inbox não eram dignas de serem chamadas de novas, ou se porque o sistema de filtragem no servidor acaba marcando as mensagens como "vistas" como efeito colateral, ou se por algum outro motivo). A essa altura eu enchi o saco do Claws e fui catar um cliente de e-mail novo.

(No processo de tentar figure out os problemas eu descobri uma porção de coisas legais, entretanto; a principal delas é que você pode usar o comando:

openssl s_client -crlf -connect servidor:porta

como uma espécie de netcat para abrir uma conexão SSL, e dar comandos de IMAP via terminal. Por sinal, eu achei bem mais conveniente fazer isso de dentro do Shell mode do Emacs do que por um emulador de terminal. But I digress.)

Thunderbird

Eu resolvi dar uma segunda chance para o Thunderbird/Icedove. And boy is it terrible. Para começar, o Thunderbird não faz a distinção entre mensagens novas e não-lidas que o Claws (quando funciona) faz; não existe um comando para saltar para a próxima mensagem nova, apenas para a próxima não-lida, o que é um problema porque eu tenho o costume de deixar mensagens que requerem atenção futura como não-lidas e não quero desmarcá-las sem querer enquanto leio mensagens novas. By the way, o atalho para ir para a próxima não-lida (N) não funciona quando você não está com uma pasta aberta (se você está na paginazinha da conta, por exemplo).

"Ah, mas você pode marcar as mensagens como 'starred' ao invés de marcar como não-lidas", right? A diferença é que uma pasta com uma mensagem não-lida aparece em negrito e com o número de mensagens não lidas ao lado do nome, o que me chama atenção para o fato de que há alguma pendência ali. Uma pasta com mensagens starred não mostra nenhuma indicação de que contém mensagens starred; o Claws pelo menos mostra um "✓" nos ícones das pastas que contêm mensagens marcadas, o que é bem pouco perceptível no meu tema com fundo preto, mas é melhor que nada. Por falar em tema, diversos elementos da interface do Thunderbird ignoram o meu tema e mostram elementos com cores incompatíveis, seja meramente destoantes do restante, seja com o texto da cor certa e o fundo da cor errada (e.g., branco no fundo cinza). Tudo bem que o meu tema é um arquivo gtkrc hacked together de qualquer jeito cinco anos atrás que eu basicamente nunca mais mexi, mas a maioria dos programas funciona relativamente bem com ele. Anyway.

O programa simplesmente não foi pensado para ser usado com o teclado. Coisas como alternar entre headers completos e simples não possuem um atalho de teclado; para adicionar um atalho, é necessário instalar um addon (!). O atalho do "quick filter" (o equivalente do search do Claws) é Ctrl+Shift+K; no Claws, é /. Aliás, o termo de pesquisa se perde quando se troca de pasta, e não tem histórico; no Claws o termo fica até a caixa ser fechada (com Esc, por exemplo), e ↑/↓ percorrem os últimos termos usados. Navegar pela lista de mensagens com as setas automaticamente seleciona a mensagem para visualização (o que a marca como lida, obviamente); no Claws, isso é configurável. O Claws permite habilitar o comportamento que era o default em aplicativos GTK 1, em que se pode parar sobre um comando de um menu qualquer e pressionar uma tecla para associá-la como atalho para aquele comando; assim, a maioria dos keybindings pode ser facilmente customizada. Alguns elementos da interface do Claws parecem ter sido projetados especificamente para funcionar bem com isso; por exemplo, o menu "Edit > Advanced" da janela de composição de mensagens contém entradas que parecem não fazer muito sentido em um menu, como "Move to beginning of line" e "Delete a word backward", até que você se dá conta de que eles estão ali para que você possa associar as teclas de atalho de sua preferência a esses comandos. Esse é o tipo de atenção a detalhes que torna o Claws totalmente excelente. Eu na verdade fiquei meio chocado com o fato de que um programa da idade do Thunderbird tenha tantos gaps de funcionalidade/usabilidade. Talvez o usuário no público-alvo do Thunderbird tenha expectativas diferentes da interface. I don't know.

On the bright side, o Thunderbird tem um search global por todas as pastas, que o Claws não tem. Além disso, a sincronização do IMAP para uso offline funciona direito. Finalmente, o Enigmail (add-on do Thunderbird para uso de PGP) parece ser fácil de usar. Acho que isso resume o que eu tenho de bom para dizer sobre o Thunderbird.

Ah, right, o problema das notificações: por algum motivo, o Thunderbird também não está mostrando notificações quando chegam mensagens novas (o que me dá alguma esperança de que o problema seja elsewhere e eu consiga corrigi-lo e voltar a usar o Claws), mas pelo menos eu achei um addon que permite adicionar um ícone à systray com o número de mensagens não-lidas em pastas selecionadas, o que resolve parcialmente meu problema. (O Claws também tem um plugin para adicionar um ícone à systray, mas ao invés de mostrar um número ele mostra um ícone não-customizável e horrível de perceber se está indicando a presença de mensagens não-lidas ou não.) A outra "vantagem" do Thunderbird é que eu achei ele tão ruim de usar que eu provavelmente vou continuar procurando outra solução ao invés de me acomodar com os problemas como eu fiz com o Claws por um ano e tanto.

Gnus

And then there is Gnus. Como dito anteriormente, o Gnus foi o que me levou a mexer no Emacs de novo, mas eu acabei largando ele de mão, em parte porque eu achei que tinha resolvido meu problema com o Claws, em parte porque configurar o Gnus é um tanto quanto não-trivial (e aprender a usá-lo também), especialmente para mim que não tinha praticamente nenhuma experiência com o Emacs então. Agora que eu já estou há mais de dois meses usando o Emacs (estou-vos devendo um post sobre isso, por sinal) e já estou relativamente habituado à criatura, acho que está na hora de dar uma segunda chance ao Gnus.

O Gnus é bastante bizarro, na verdade. Ele faz uma porção de coisas que fazem sentido em um news-reader, mas not so much em um mail-reader. Por exemplo, por padrão ele oculta "grupos" (pastas) que não têm mensagens não-lidas, e oculta as mensagens lidas em um grupo. Eu passei o último sábado quebrando a cabeça tentando configurar o dito cujo, e turns out que o problema que eu passei mais tempo tentando resolver era um bug no Gnus (que aparentemente eu vou ter que reportar uma hora, pois não achei nenhuma menção dele na Internet). Fazer ele funcionar com duas contas de e-mail, e escolher a conta apropriada para mandar mensagens dependendo do contexto, salvar a mensagem enviada na pasta apropriada, etc., é algo que eu tenho que olhar com calma como se faz. Pelo menos o conceito do Gnus de uma mensagem vista aparentemente é independente de o que o IMAP acha que foi visto, o que já é um bom começo. Apesar de ser complicado e cheio de bizarrices, eu tenho a sensação de que o Gnus é suficientemente hackable/customizável para eu conseguir fazê-lo fazer o que eu quero (de certa forma isso é meio verdade sobre o Emacs como um todo). Se eu for bem-sucedido, provavelmente vou postar um tutorial de configuração por aqui.

EOF

Well, esse post ficou bem maior do que eu esperava. Mas agora que eu já escrevi, vou publicar e eras isso. Já que você chegou até aqui, leve umas músicas como recompensa.

3 comentários / comments

FISL 16

2015-07-11 23:27 -0300. Tags: comp, life, freedom, em-portugues

Nos últimos quatro dias ocorreu o 16º Fórum Internacional do Software Livre. Minha proposta de palestra sobre o lash não foi aceita (o que por um lado foi bom, porque o projeto anda meio dormente devido a obrigações mestrariosas e má administração temporal), mas eu assisti uma porção de palestras, a maioria das quais foram bem boas. Também encontrei o Marcus Aurelius por lá, que trabalhou como voluntário na tradução do site do FISL para o esperanto, e troquei umas palavras com seu Lucas Zawacki, que estava no espaço do Dumont Hackerspace (e que ganhou a Hackathon EBC/FISL 16 com o aplicativo Pautaí, por sinal; congrats!).

Eis um resumo das palestras que eu assisti por lá. O site do FISL contém a programação completa, com link para os vídeos da maioria das palestras.

Dia 1

Email criptografado: usando GPG e icedove para criptografar sua correspondência, por Felipe Cabral

A idéia era que fosse uma oficina, mas acabou sendo mais uma palestra sobre conceitos básicos de PGP. Também foi visto um programinha chamado Seahorse (pacote seahorse no Debian) para gerar e administrar chaves de PGP e afins. Eu fui na palestra achando que ia aprender alguma coisa que me ajudasse a fazer o PGP funcionar no Claws Mail. Turns out que no Thunderbird/Icedove, tudo o que é necessário para fazer o PGP funcionar é instalar o add-on Enigmail (pacote enigmail no Debian), seguir os passos de configuração que serão apresentados depois que o Enigmail é instalado, e ser feliz. Me deu até vontade de experimentar o Thunderbird de novo, mas tem que ver isso aí. Meanwhile, continuo unenlightened quanto ao Claws.

Half my life with Perl, por Randal Schwartz

O autor do Programming Perl (a.k.a. Camel Book), entre outros, e atual host do podcast FLOSS Weekly, conta sua vida e seu envolvimento com o Perl. Foi uma palestra bem interessante, mesmo eu não conhecendo grandes coisas do Perl e sua comunidade.

Negócios em Software Livre, isso existe?, por Vagner Fonseca

Uma palestra sobre como ganhar dinheiro vendendo serviços baseados em software livre para empresas, tais como suporte, customização de programas livres de acordo com as necessidades da empresa, soluções de monitoramento de rede e de uso de recursos, entre outros. Também foram discutidos tipos de contrato (por projeto, por hora, contrato de suporte) e quando cada tipo vale a pena (basicamente, cobrar por projeto só vale a pena para coisas bem simples e punctuais, caso contrário corre-se o risco de algo demorar muito mais do que o previsto e o cidadão acabar efetivamente pagando para trabalhar; em contrato de suporte se cobra menos do que em um contrato por hora, mas tem-se a estabilidade e se consome um tempo mais limitado por semana em uma empresa, então é possível atender mais de uma ao mesmo tempo), entre outras coisas.

"Enemy spotted - Applying infovis at security field", por Felipe Afonso Espósito

Uma palestra sobre visualização de dados e como isso pode ser usado com dados de segurança. Não tenho muito mais o que comentar.

Let's Encrypt: Uma Autoridade Certificadora Gratuita e Automatizada, por Seth Schoen

Seth Schoen, membro da EFF, falou (em português!) sobre o andamento do Let's Encrypt, uma iniciativa da EFF, Mozilla, University of Michigan e outros para criar uma autoridade certificadora e um mecanismo para obtenção e validação automática e gratuita de certificados digitais, e instalação automática em servidores web, eliminando uma barreira que existe atualmente para se usar HTTPS. A data prevista para o serviço ser disponibilizado para o público é 14 de setembro deste ano.

Eu pretendia assistir a APIs em Tempo Real Usando Websockets em PHP, mas a sala lotou e eu não cheguei a tempo. Ao invés disso, eu e o Marcus ficamos tentando entender as entranhas do cua-mode do Emacs, inter alia.

Dia 2

Encontro de Hackers GNU

Alexandre Oliva (FSF Latin America), Felipe Sanches, e Deborah Anne Nicholson (Open Invention Network, MediaGoblin) falaram sobre uma porção de projetos relacionados com liberdade digital. Entre eles, o Twister, uma plataforma peer-to-peer de microblogging, e MediaGoblin, uma plataforma descentralizada de compartilhamento de mídia. Também foram mencionadas algumas idéias de projetos que seriam interessantes de criar, como uma plataforma peer-to-peer para distribuição de código (eu mencionei que já existe um projeto nesse sentido).

Outra idéia interessante que o Alexandre Oliva mencionou é que os ambientes computacionais modernos são pouco programáveis (sounds weirdly familiar), e que seria interessante criar uma biblioteca que facilitasse para o usuário descobrir que funções o programa chama quando se clica em algum botão ou menu e tornasse esses programas programáveis. O conceito é parecido com o que eu vejo como ideal de ambiente computacional, mas eu nunca tinha pensando em pôr essa funcionalidade em uma biblioteca, ao invés de algo mais fundamental. É uma abordagem interessante de se pensar.

O Felipe Sanches também comentou a questão de firmware aberto, as dificuldades envolvidas em reverse-engineering de firmware e hardware, e a necessidade de incentivar o compartilhamento de informação sobre técnicas de engenharia reversa.

Programação Orientada a Objetos em C puro: o caso do htop, por Hisham Muhammad

O autor do htop falou sobre as técnicas de programação que usou no desenvolvimento desse programa, em particular o uso de orientação a objetos em C. Eu já sabia um pouco sobre o assunto, mas a palestra valeu a pena mesmo assim. Mais para o final, o Hisham falou sobre o uso de collections para gerenciar "ownership" de ponteiros (alocação e liberação de memória) em C, e como isso torna a gerência manual de memória do C menos horrível de se usar. Por fim, ele falou sobre o dit, um editor de texto que ele escreveu reusando componentes do htop.

Assinatura digital e o padrão ICP-Brasil, por Paulo Cesar Barbosa Fernandes

Uma palestra sobre o padrão brasileiro de assinaturas digitais, seus aspectos legais, e algumas informações gerais sobre o uso de assinaturas digitais. Talvez a coisa mais importante que eu aprendi na palestra é que uma assinatura digital obtida adequadamente seguindo o padrão ICP-Brasil tem o valor legal de uma assinatura de papel (embora ainda haja legislação a ser atualizada para levar isso em conta).

Desvendando o IPv6: Tecnologia indispensável para o Futuro da Internet, por Lucenildo Lins de Aquino Júnior

Nada muito aprofundado tecnicamente, mas foi uma boa palestra. O mais surprising aqui foi saber que uma boa parte do tráfego da Internet já é em IPv6, inclusive no Brasil (pelo menos em São Paulo), mas não lembro mais os números. Até me deu alguma esperança de que teremos o bendito IPv6 em alguns anos.

What's new in systemd in 2015, and what's coming in 2016, por Lennart Poettering

Exatamente o que o título diz. Foram mencionadas funcionalidades de configuração de rede, resolução de DNS, containers, e todas essas coisas que nós nos perguntamos se deviam mesmo fazer parte do systemd, mas isso fica para outra discussão.

Finding a Great Project to Work On, or Great People to Work on Your Project, por Deborah Anne Nicholson

Uma palestra muito boa sobre, entre outras coisas, como fazer com que um projeto seja "welcoming" a novos colaboradores, especialmente não-desenvolvedores (pessoas envolvidas com tradução, documentação, divulgação, arte, etc.). Alguns dos tópicos mencionados são coisas que deveriam ser senso comum, mas infelizmente não são, tais como ter uma descrição de o que é o projeto na página inicial, links para mailing lists, FAQs, informação de contato, etc. Outro ponto mencionado é que se você como desenvolvedor não tem grandes skills comunicativos, encontre uma pessoa para fazer esse papel no seu projeto. Also, incentive e recompense os esforços dos colaboradores. Provavelmente é melhor assistir o vídeo do que eu tentar explicar (talvez eu tenha skills comunicativos sub-ótimos).

Acho que esse foi o melhor dia do FISL para mim.

Dia 3

Ocorreu uma miniDebConf (conferência sobre o Debian) durante esse dia na sala 41D.

Debian: o que é, e como funciona, por Antonio Terceiro

Uma palestra introdutória sobre o Debian, que no entanto me ensinou sobre uma porção de recursos online do Debian que eu não conhecia, tais como o blog Bits from Debian, o Ultimate Debian Database (que é mais útil para desenvolvedores do Debian), um pastebin, a página com informações para se tornar um novo membro do Debian, páginas onde se pode navegar pelos fontes do Debian e fazer buscas textuais no código, e um security bug tracker.

Não sou programador, como posso ajudar o Projeto Debian?, por Luiz Guaraldo

Não lembro mais o que foi visto nessa.

Containers and systemd, por Lennart Poettering

Uma palestra sobre o suporte a containers do systemd. A palestra começou com "everyone knows what containers are", except I didn't, então embora as funcionalidades apresentadas tenham parecido interessantes, eu meio que fiquei boiando sobre como as coisas funcionam.

Empacotamento de software no Debian, por João Eriberto Mota Filho

Uma palestra muito boa sobre o processo de criar um pacote Debian, cobrindo as ferramentas utilizadas, o ambiente de empacotamento, os arquivos que se deve editar, etc. Se você pretende criar um .deb na vida, assista.

Dependências de pacotes de código fonte, por Thadeu Lima de Souza Cascardo

Essa palestra pode ser resumida a "pacotes de fonte possuem dependências". Foram vistos alguns conceitos como dependências de compilação vs. dependências de execução, mas nada do que eu esperava ver foi visto, tal como como baixar pacotes fonte e suas dependências e compilá-los usando as ferramentas do Debian. A palestra terminou com o palestrante debugando um script em Perl que ele escreveu para calcular as dependências recursivas de um pacote fonte, e eu fui embora fazer outras coisas pelo mundo.

Dia 4

Decidi almoçar em casa e só consegui chegar às 13h e pouco no FISL.

Javascript e as novidades nas funções em ES2015+, por Felipe Nascimento de Moura

Cheguei uns 10 minutos atrasado na palestra. Ficou bem pouco claro para mim o que eram coisas novas do JavaScript vs. coisas que já existem. Foram vistas features como generators (que o Firefox já suporta há mais de oito mil anos, mas agora eles vão entrar no EcmaScript oficial, com uma sintaxe levemente diferente), execução assíncrona, setInterval para executar ações periodicamente, "arrow functions" (uma sintaxe nova para funções anônimas, e que captura o valor de this), e outras coisas que ya no recuerdo más.

HTTP: passado, presente e futuro, por Luiz Fernando Rodrigues

Aprendi o suficiente para querer me informar melhor sobre o HTTP/2, but that's it.

Programming Efficiently, por Jon "Maddog" Hall

A palestra foi mais sobre a importância da eficiência em programação, e não sobre técnicas de programação eficiente. O Maddog também falou sobre o fato de que muita gente sai de uma escola/faculdade sem saber como funciona o hardware, que o Raspberry Pi foi criado para ser uma máquina "hackable" e boa para o aprendizado, e que ele usou alguns Banana Pi para montar um cluster pequeno, barato e com bom poder computacional que pode ser usado para ensinar high-performance computing e afins. A palestra foi bem boa, embora não fosse sobre o que eu pensei.

How much of your computer is non-free, and how worried should you be?, por Matthew Garrett

Palestra sobre o fato de que nossos dispositivos contêm bem mais processadores do que normalmente a gente pensa, normalmente rodando software proprietário que não temos nem como ver nem como modificar. Exemplos particularmente alarmantes são HDs (com uma menção de uma galera que conseguiu fazer um HD bootar um kernel Linux) e SD cards. Worse still, muitos desses dispositivos só aceitam firmwares assinados pelo fabricante, usualmente encriptados, o que nos impede de analisar e controlar o comportamento desses dispositivos. Recomendo assistir o vídeo.

Archlinux: Você no comando, por Israel Lopes dos Santos

Uma palestra introdutória sobre o Arch Linux, explicando a filosofia da distribuição, o gerenciador de pacotes, o fato de que criar um pacote para o Arch é relativamente fácil e que qualquer um pode submeter um pacote para o Arch User Repository (AUR). Na seção de perguntas, um cidadão resolveu criticar o uso de "Linux" ao invés de "GNU/Linux" de uma maneira indireta/irônica que o palestrante não entendeu. Foi bem desnecessário; ser indireto e irônico não ganha ninguém à causa, na minha humilde opinião.

That was it. 9/10 would go again.

3 comentários / comments

lash status update

2015-05-14 23:42 -0300. Tags: comp, prog, pldesign, lash, life, em-portugues

Faz quase dois meses desde o primeiro commit do lash. O status do projeto é o seguinte:

No decorrer dessa última semana, o parser original, baseado na biblioteca Comparse de parser combinators, foi substituído por um parser descendente recursivo escrito à mão. Os motivos principais para a reescrita foram que a Comparse não mantém informação de linha e coluna dos elementos parseados, aparentemente não tem suporte nenhum a error reporting (o parser simplesmente "backtracka" quando se depara com um erro, até que o parser inicial backtracka e devolve #f), e o parser estava com uns comportamentos estranhos diante de algumas entradas (o que não é culpa da Comparse, mas não tinha por que eu perder tempo debugando se eu já teria que reescrever o parser uma hora ou outra pelos outros motivos citados). O handling de espaços e newlines no parser antigo também estava o caos, enquanto no atual aparentemente tudo funciona como deveria nesse quesito.

O parser novo reconhece quase toda a linguagem prevista para a "release inicial", lança exceções nos pontos certos do código ao encontrar erros de sintaxe (embora as exceções ainda não sejam muito descritiva, mas já é um começo), e armazena a linha e a coluna de cada construção nos nós da árvore sintática (com pequenos erros, mas nada difícil de resolver). O código ainda está meio crude, e tem muita coisa que ainda dá para refatorar (e.g., repetições que estão codificadas como loops explícitos ao invés de uma construção que abstraia a repetição), mas isso vai ir se resolvendo ao longo do tempo. De repente as partes mais abstratas do parser podem até virar uma biblioteca de parser combinators no futuro (com a diferença de que eu estou usando uma struct mutável e exceções ao invés de uma mônada para manter o estado do parser e indicar erros, o que seria meio unusual para uma biblioteca de parser combinators, mas whatever; ninguém disse que seriam parser combinators funcionais).

O parser novo reconhece mais construções do que o resto do shell é capaz de executar (por exemplo, pipelines, redirects, &, &&, ||, $()... em outras palavras, praticamente todas as funções do shell), o que de certa forma é bom, porque me compele a implementar as coisas que faltam. Nos últimos dias o desenvolvimento anda numa taxa mais ou menos ok (para mim), e acho que é mais ou menos realista prever uma release 0.1* mais ou menos funcional para julho. Pelo menos é (mais ou menos) isso que eu espero. Isso é bom, porque em um momento de otimismo em março eu submeti uma proposta de palestra para o FISL sobre o shell e, na vaga possibilidade de ela ser aceita, até lá seria bom o shell estar num estado usável. (Eu submeti a proposta sob a premissa de que se tudo desse errado com o shell e eu fosse aceito era só pedir para tirarem a palestra, mas a essa altura acho que isso não será mais necessário. Tudo isso assumindo que eu seja aceito, o que seria muito doido, na real.)

Comecei a usar a wiki do projeto no GitHub para fazer anotações. O plano que ela venha a conter:

Para editar a wiki é necessário criar uma conta no GitHub, aparentemente, mas acho que podemos conviver com isso. Contribuições são sempre bem-vindas.

Quanto à linguagem do shell, algumas coisas mudaram:

Durante o desenvolvimento do novo parser eu descobri um "bug" no Chicken que faz com que variáveis criadas com define dentro de um cond sejam declaradas como globais. A galera na mailing list parece ser da opinião de que isso não é um bug e sim uma feature, entretanto. Meanwhile, eu resolvi o problema no lash redefinindo o cond para wrappear as cláusulas em um (let () ...) implícito (o que cria um "scope boundary" que torna as definições locais), e de brinde ainda lançar uma exceção se nenhuma cláusula for verdadeira. Scheme, yay.

Enquanto o lash anda às mil maravilhas, o mestrado vai por água abaixo, mas isso é assunto possivelmente para outro post.

_____

* No momento eu não estou numerando as versões, mas pelo esquema de numeração previsto (<major>.<minor>.<número de commits desde o último update do minor>), estaríamos na versão 0.0.31. Parece bastante, mas é porque eu tenho o hábito de commitar loucamente enquanto estou mexendo no código.

1 comentário / comment

Ideogramas

2015-04-17 22:52 -0300. Tags: random, life, lang, em-portugues

me; hahahah, ganhei meu dia aqui
me: abri uma página que era pra ter um ícone de "loading"
µ: hm
me: mas a modinha agora é usar fontes com ícones ao invés de imagens
me: só que o meu browser tá setado pra forçar a usar as minhas fontes ao invés das da página
µ: hm
me: aí o loading virou um ideograma rotatório
µ: hsauoihasoihauias
me: e tu não vai achar graça nenhuma nisso, mas eu curti horrores :P
me: hmm, pelo visto tu achou graça :P
µ: HSAUOHSAIOSAHAOSIHASUOUI
µ: sim
µ: imaginei um ideograma chines significando "paz mundial que se iniciou na cozinha de um homem simplorio" rodando na tua tela

(Eu ainda não descobri que ideograma é esse, by the way.)

Update: O codepoint oficial do caractere (𤃉) é U+240C9. Consegui chegar nele procurando pelos componentes (氵厂禾禾心) no MDBG e depois no CHISE (que eu não conhecia até então). Mas ainda não descobri o que ele significa (o caractere mais próximo que encontrei com significado foi "trickle, drip; strain; dregs").

P.S.:

[Idegrama rotatório de significado desconhecido]

8 comentários / comments

Mind dump

2015-04-10 01:34 -0300. Tags: comp, prog, pldesign, lash, life, mind, ramble, music, em-portugues

Coloquei o lash no GitHub, for what it's worth. Eu me pergunto se foi uma coisa sensata publicar ele agora, mas já faz um tempo que eu vinha anunciando que ia publicar "em breve", então coloquei lá de uma vez. (Além disso, esses dias eu quis mexer nele fora de casa e não tinha o código.) O código está em um estágio bem inicial – vergonhosamente inicial, dado que já faz umas três semanas que comecei a trabalhar nele, e o que eu fiz até agora eu provavelmente poderia ter feito em uns três dias se tivesse tido a disciplina de trabalhar nele semi-diariamente. Por outro lado, o projeto está andando para frente, mesmo que devagar, o que já é melhor do que todos os anos anteriores em que eu disse "puxa, eu queria fazer um shell" e não escrevi uma linha de código. So, that's progress. Além disso, na atual conjuntura eu provavelmente deveria tentar relaxar um pouco a cuca e me preocupar menos com isso; afinal, isso é um projeto pessoal e eu não devo nada para ninguém. No final das contas, megalomanias de dominação mundial à parte, o principal afetado pelo bom sucesso do projeto sou eu mesmo.

Eu cheguei à brilhante e inaudita conclusão de que eu vou ter que reduzir bastante minha atividade twittereira e internética em geral se eu quiser começar a fazer alguma coisa produtiva com a minha vida (onde escrever um shell e estudar línguas obscuras contam como coisas produtivas). Por outro lado, a Internet atualmente é responsável por uns 95% das minhas interações sociais, especialmente agora que eu não tenho mais aulas, coisa que faz uma certa falta, a despeito da minha fama de anti-social. A solução provavelmente é (shudder) sair de casa e falar com pessoas.

Eu também cheguei à conclusão (igualmente brilhante) de que muita coisa nessa vida é questão de criar hábitos. Por exemplo, até algumas semanas atrás eu costumava usar toda a louça da casa até não ter mais louça limpa, momento em que eu aplicava o garbage collector e lavava tudo (ou, dependendo da preguiça, só o que eu precisasse na hora). Eu me dei conta de que isso não estava sendo muito conveniente e resolvi começar a lavar as coisas logo depois que uso, ou antes de ir dormir. No começo era meio ruim ter que me "obrigar" a fazer isso, mas agora eu já me habituei e isso não me incomoda mais tanto (além do que, como a louça não acumula, normalmente o esforço de lavar é pequeno). Talvez seja uma questão de criar o hábito de sentar uma hora do dia para programar/estudar/whatever. O flip side disso é que a gente também se habitua ao longo da vida a uma porção de coisas que a gente deveria questionar e/ou atirar pela janela, não só hábitos acionais como também (e principalmente) hábitos mentais. Estas são minhas (brilhantes e inauditas) palavras de sabedoria do dia. (Tecnicamente todo hábito é mental, mas deu pra entender. Acho.)

Escrever o lash em Chicken Scheme tem sido uma experiência bastante agradável. Eu estou aprendendo (a parte não-R5RS d)a linguagem "as I go", mas até agora a linguagem não me deixou na mão, a implementação é estável e gera executáveis pequenos e razoavelmente rápidos, e o sistema de pacotes funciona. (Rodar chicken-install pacote e consistentemente ver o pacote ser baixado e compilado sem erros era quase chocante no começo. O fato de que as bibliotecas são shared objects (a.k.a. DLLs) de verdade e carregam instantaneamente também muito alegrou o espírito, especialmente dada minha experiência anterior com bibliotecas em Common Lisp.) A única coisa que deixa um pouco a desejar é o error reporting, mas nada "deal-breaking".

Eu me dei conta de que uma das coisas que eu mais gosto em linguagens "dinâmicas" é a habilidade de rodar um programa incompleto. Eu já meio que escrevi sobre isso antes, mas eu já não lembrava mais quão deeply satisfying é poder rodar um programa pela metade e ver a parte que foi escrita até o momento funcionando. Por outro lado, é bastante incômodo errar um nome de função ou os argumentos e só descobrir o erro em tempo de execução. Faz muito tempo que eu acho que o ideal seria uma linguagem com análise estática de tipos, mas em que erros de tipo gerassem warnings ao invés de impedir a compilação, e que permitisse a declaração opcional dos tipos de variáveis e funções. Uma dificuldade que eu via nisso até agora é que enquanto em uma linguagem dinâmica os dados costumam ter uma representação uniforme em memória que carrega consigo alguma tag indicando o tipo do dado, e portanto é possível chamar uma função com argumentos do tipo errado e detectar isso em tempo de execução, em uma linguagem estaticamente tipada convencional os dados costumam ter uma representação untagged/unboxed e de tamanho variável, o que tornaria impossível compilar um programa com um erro de tipo sem violar a segurança da linguagem (e.g., se uma função f recebe um vetor e eu a chamo com um int, ou eu rejeito o programa em tempo de compilação, o que atrapalha minha habilidade de rodar programas incompletos/incorretos, ou eu gero um programa que interpreta o meu int como um vetor sem que isso seja detectado em tempo de execução, o que provavelmente vai causar um segfault ou algo pior). Porém, esses dias eu me dei conta de que ao invés de compilar uma chamada (insegura) a f(some_int), poder-se-ia simplesmente (além de gerar o warning) compilar uma chamada a error(f, some_int), onde error é uma função que avalia os argumentos e lança uma exceção descrevendo o erro de tipo. O resultado prático é que o executável gerado roda até o ponto em que é seguro rodar (inclusive avaliando a função e os argumentos) e interrompe a execução no ponto em que seria necessário chamar a função com um argumento de tipo/representação incompatível. Melhor dos dois mundos, não? Vai para o meu caderninho de idéias para a Linguagem Perfeita™.

Eu ia escrever mais umas notas sobre a vida, mas ultimamente eu ando mui receoso quanto a publicar coisas da minha vida pessoal – o que provavelmente é uma boa idéia. É fácil esquecer que qualquer um, no presente ou no futuro, pode ler o que a gente escreve nessa tal de Internet. Eu também já falei sobre isso mil vezes antes, which makes it all the more surprising que eu ainda tenha que me relembrar disso ocasionalmente. Anyway.

Unrelated com qualquer coisa, conheci recentemente uma bandinha chamada Clannad, na qual eu me encontro totalmente viciado no momento. Também conheci uma coisa totalmente excelente chamada Galandum Galundaina, uma banda mirandesa com certeza.

12 comentários / comments

Oi, UOL, e a engenharia social fdp

2015-01-21 23:39 -0200. Tags: life, worldly, treta, em-portugues

Meus amigos, falcatrua é uma arte[2], e é tanta que eu resolvi criar uma tag treta só para catalogá-la.

Para quem vive falando de privacidade e cuidado com dados pessoais, eu consegui ser bem trouxa hoje caindo no golpe do UOL. E eu me dei conta de que é possível manipular as pessoas por telefone de uma maneira que não é possível (pelo menos não com a mesma facilidade) pela Internet. Relato aqui as falcatruas e o que eu aprendi com elas.

Primeiro ato

Depois de ter que cancelar a minha linha da GVT por falta de disponibilidade no meu endereço novo (que é uma história à parte, cuja moral pode ser resumida em reclame com a Anatel e não aceite meias soluções), eu contratei uma linha telefônica e banda larga da Oi. No dia em que eu fiz o pedido, a atendente me informou que o UOL me ligaria para oferecer o provedor e eu poderia dispensar se não quisesse. Alguns dias depois, uma vendedora do UOL ligou para o meu celular (sim, a Oi, não contente em apenas divulgar o número da linha nova, passou meu celular também para o UOL) e eu informei que não tinha interesse. So far, so good.

Hoje o técnico da Oi veio ligar a linha. Uma ou duas horas depois, eu recebi uma ligação no número novo. A pessoa informou seu nome e disse (não lembro exatamente os detalhes) que ia fazer a confirmação de alguns dados para a ligação da Internet e passar algumas informações. Em nenhum momento ela afirmou ser do UOL. Depois de me passar um telefone da central de atendimento, me pedir uns dados, informar uma senha e meia dúzia de outras informações, a mulher me pediu, com uma série de rodeios e palavras elegantes, um número de cartão de crédito. Informou ainda que a cobrança viria pela conta do telefone, e o número não precisava ser de um cartão em uso, podia ser um antigo, era só para ter uma "referência". Depois de enrolar e perguntar uma ou duas vezes para que mesmo ela precisava do cartão, eu disse que não tinha o cartão à mão para informar o número. Ela então me perguntou se eu tinha uma conta bancária para informar, que era um procedimento de segurança da empresa pedir essa informação, que precisava fazer isso para ativar o serviço de Internet, etc. No fim eu forneci o número da conta, julgando que essa informação não era tão crítica por si só. A pessoa confirmou todos os dados de novo e desligou.

Depois de ponderar sobre a estupidez que eu tinha acabado de fazer, resolvi tentar descobrir quem tinha me aplicado o golpe, procurando na Internet pela única informação identificável que a pessoa me forneceu: o telefone da central de atendimento fornecido: 0800 771 7774. Com isso, descobri não só que o número é do UOL, como também este post no Facebook:

“ALERTA A TODAS AS PESSOAS QUE ASSINARAM A OI VELOX”

Assim que assinamos a Oi Velox, recebemos ligações de pessoas q dizem ser da Oi, se apresentam dizendo que fazem parte da oi Velox, (SÃO EXTREMAMENTE CONVINCENTES ), mas são da empresa UOL, que por meio de bandidagem fazem com que os clientes da Oi Velox assinem esse provedor, mas tem um jeito de saber quando são eles quem ligam, eles confirmam seus dados e no final pedem CARTÃO DE CREDITO, pra cobrar pelo acesso, CUIDADO, sempre q alguém ligar na sua casa falando q é da Oi Velox, “DESCONFIEM”, e quem caiu nessa empresa q na verdade é uma quadrilha, liguem pra UOL pelos números 4003-2002 (regiões metropolitanas) e 0800 771 7774 (demais cidades). Não é necessário pagar por provedor de acesso, a própria Oi Velox pelo numero 103-31 já te dão o acesso a internet. e por favor, liguem na Oi central de Reclamações e denunciem isso, pq já passou da hora dessa pouca vergonha acabar... COMPARTILHEM, PRECISAMOS UNIR CONTRA ESSES BANDIDOS, depois de reclamarem na Oi, liguem tb pra ANATEL E DENUNCIEM PELO TEL: 1331.

UNIDOS FAZEMOS DIFERENÇA....

entre inúmeros outros resultados falando da falcatrua. Em seguida, eu liguei para o atendimento da Oi, perguntei sobre a instalação do ADSL, agendei a visita técnica (hoje ligaram só a linha telefônica, sem ADSL), e informei que não queria nenhum provedor e perguntei se aparecia no sistema deles o UOL como provedor. A atendente informou que a contratação do provedor é independente da Oi e eles não têm como consultar essa informação.

A seguir, liguei para o UOL para saber se eles tinham feito a contratação do serviço e dizendo que eu não tinha a intenção de contratar nenhum serviço do UOL e não tinha autorizado nenhuma contratação. Depois de me perguntar e eu informar detalhes sobre a ligação que eu recebi, e me perguntar que empresa tinha me ligado (eu informei que a pessoa não tinha informado, mas passou um 0800 que era do UOL), a atendente informou então que fez um pedido de "cancelamento". Eu então perguntei se seria emitida alguma cobrança. A atendente disse que "já tinha me informado que fez o cancelamento". Eu disse que "mas se o serviço foi cancelado, é porque um dia ele existiu; se um dia ele existiu, pode ser cobrada alguma coisa; eu quero ter certeza de que o UOL não vai me cobrar nada". A mulher ainda me "xingou" por ter fornecido dados sem saber quem tinha ligado (cara de pau também é uma arte), aparentemente querendo implicar que o UOL não tinha nada que ver com isso (mas ela acabou de registrar um pedido de cancelamento! Cancelamento do quê, se o UOL não tinha nada que ver com isso?). "O UOL não vai me cobrar nada então?", eu perguntei, e ela respondeu "já disse que não" (embora esse fosse o primeiro momento em que ela disse que não). Eu agradeci e desliguei. Não sei se o UOL grava as ligações, mas se grava, pelo menos ficou um registro explícito da pessoa dizendo que nenhuma cobrança seria emitida.

Depois disso eu fui no banco ver se tinha como bloquear a adição de faturas em débito automático. A pessoa do banco disse que não tem, só tem como bloquear convênios individuais, depois que eles foram adicionados (coisa que eu já sabia que dá para fazer pelo próprio terminal do banco); que se for adicionado algum débito automático ele provavelmente aparecerá nos "lançamentos futuros" do extrato, e aí eu posso cancelar; e que se eu só vir que entrou a cobrança depois de ela já ter sido debitada, também é possível cancelar e reaver o dinheiro, mas demora alguns dias. Também aproveitei para bloquear o crédito do meu cartão, que eu não uso anyway.

Segundo ato

À tarde, eu recebi uma ligação do suporte técnico da Oi. A atendente me informou que se me ligassem pedindo informações bancárias eu não as devia passar, pois o UOL e o Terra estavam ligando dizendo que são da Oi e pedindo essas informações, mas a Oi nunca pede esses dados e manda qualquer cobrança pela conta do telefone. [Eu não sei se a Oi deixou as coisas saírem do controle e agora está tentando remendar a situação, ou se eles só querem passar a imagem de que estão fazendo alguma coisa a respeito desse problema com os provedores para evitar que a Anatel coma o fígado deles, mas na verdade pretendem manter a situação como está. Anyway.]

Depois (ou antes, não tenho mais certeza), a atendente confirmou alguns dados pessoais, e perguntou se a instalação do ADSL já estava agendada (por puro acaso eu já tinha feito isso pela manhã ligando para a Oi, vide acima). Tendo feito tudo isso e informado que qualquer cobrança viria pela conta, informou ainda que seria cobrado apenas o valor do plano mais R$ 9,90 do suporte técnico, que o suporte técnico não tinha fidelidade e podia ser cancelado quando eu quisesse, e que ela ia me passar para a ouvidoria apenas para confirmar a contratação do serviço, que eu só teria que informar os três primeiros dígitos do meu CPF, e que qualquer dúvida que eu tivesse eu devia perguntar antes de ser transferido para a ouvidoria, pois lá eles não responderiam dúvidas, apenas confirmariam a contratação. "Essa confirmação é em relação só ao suporte?", eu perguntei. "É para a liberação do serviço", ela respondeu, e disse mais algumas coisas que não lembro mais. Do jeito que ela falou, deu a entender que se tratava da liberação do ADSL. Felizmente a Anatel deve ter andado caindo de pau em cima da Oi nos últimos tempos, que é o provável motivo de haver essa confirmação em separado com a ouvidoria. "Ok, pode transferir". O cara da ouvidoria confirmou alguns dados (again), me pediu os três primeiros dígitos do CPF, e me perguntou se eu "confirmava a contratação do serviço de suporte técnico da Oi por R$ 9,90 por mês, que é opcional e não afeta em nada o uso dos outros serviços da Oi". Eu disse que se o serviço era opcional, então eu não tinha interesse. O cidadão agradeceu e desligou.

Uns tantos minutos depois, a atendente anterior me ligou de novo, dizendo que eu não tinha confirmado e perguntando o que tinha acontecido. Eu informei que o cara da ouvidoria tinha dito que o serviço era opcional e então eu disse que não tinha interesse. Ela reclamou que "mas eu informei o senhor que era necessário confirmar o serviço, etc.". Eu disse que tinha entendido que era a liberação do ADSL que eu tinha que confirmar. Ela me explicou em linguagem ambígua que era a liberação do serviço de suporte técnico, que se eu precisasse de suporte eu tinha que ter contratado, etc. Eu disse "bom, se um dia eu precisar de suporte eu contrato então". Ela disse "não é bem assim", que se eu não contratasse naquele momento eu renunciava ao serviço e não poderia contratar depois. Eu disse que tudo bem e ela desligou.

Análise

Infelizmente eu não fiz gravações dessas conversas, porque elas seriam um ótimo material de estudo (e depois desses episódios eu estou pensando seriamente em arranjar um aparelho de telefone capaz de gravar ligações). O ponto interessante dessa história toda é que evidentemente há técnicas sendo usadas intencionalmente para ludibriar as pessoas:

Honestamente eu não sei se os tons de voz foram calculados para maximizar o poder de manipulação, ou se essas pessoas estavam fazendo isso naturalmente. O fato é que esses vendedores provavelmente recebem treinamento extra de manipulação, e convém ficar com um pé atrás e atento a essas artimanhas (que são extremamente sutis e fáceis de não notar quando não se está procurando por elas) ao tratar com vendedores e outras fontes de manipulação.

Umas lições de vida, portanto

Uma política "óbvia" que eu hei de ter de agora em diante é (obviamente) não fornecer dados bancários, de cobrança ou de outra forma sensíveis em qualquer ligação que eu não tenha iniciado. (Você intencionalmente ligar para a operadora para pôr a conta em débito automático, por exemplo, é uma situação em que é legítimo passar esses dados por telefone.) Eu digo "óbvio" entre aspas porque até ontem se alguém me perguntasse se devia passar dados bancários para alguém que lhe ligou eu diria "óbvio que não, né", mas mesmo assim eu fiz isso hoje, porque na situação com o nervosismo e a dúvida e a aparência legítima da coisa toda é mais fácil se deixar levar do que parece. "Será que não é a Oi mesmo? Será que eu não preciso fazer isso para virem ligar o bendito ADSL? Como eu vou dizer pro atendente 'não quero passar esses dados porque isso pode ser um golpe', e se for o atendente de verdade?" Por isso é importante ter uma política explícita de não fornecer esses dados de forma alguma se não foi você que iniciou a ligação e não está falando com um conhecido (e mesmo assim). Assim como o vendedor pode lhe dizer que "é uma política de segurança pedir essa informação", você também pode dizer que é uma política de segurança sua não dar essa informação. Se você quiser justificar (e você não tem que), pode dizer que há muito golpe hoje em dia, e você prefere não correr o risco. Se você ficar com receio de ofender o atendente legítimo (e você não tem que), ou ele disser "mas eu sou o atendente legítimo", você pode bancar o paranóico e dizer que telefone é um meio inseguro, muito fácil de interceptar (é só subir num poste ou abrir um armário e escolher os fiozinhos certos), e você prefere não fornecer essa informação por telefone porque alguém pode capturá-la e usar para algum fim ilegítimo. Pronto. E da próxima vez me mostre o certificado SSL.

A outra lição importante a ter sempre em mente nessas e noutras situações é que provavelmente estão tentando te manipular, existem métodos eficazes para isso, e você deve estar atento a eles para não se deixar levar. (Especialmente quando um atendente está tentando nos constranger ou compelir a fazer algo, lembrar disso acalma e ajuda a pensar direito.)

E assim acaba o conto. (A história da GVT, que é mais de incompetência do que de falcatrua, fica para outro post.)

26 comentários / comments

Yeah, I code-switch heavily

2014-11-02 02:31 -0200. Tags: lang, life, ramble, em-portugues

Semana passada eu resolvi ir no Verda Kafo (evento esperantista que ocorre no último sábado de todo mês em Porto Alegre), depois de alguns meses de sumiço. Um verdkafano perguntou como ia o meu mestrado, e o Marcus mencionou que o meu blog tinha a resposta. A pedidos, eu passei a URL para ele e mais um dos participantes. Foi só algumas horas depois disso que eu pensei "bá, vão me encher o saco no próximo Verda Kafo por causa das frases em inglês strewn in no meio dos textos", mas aí já era tarde.

Esse fenômeno de alternar entre línguas em um mesmo diálogo ou em uma mesma frase é denominado code-switching.* O artigo da Wikipédia menciona uma porção de explicações sociológicas de por que as pessoas code-switcham. No meu caso, entretanto, for most part, acho que nenhuma das explicações apresentadas se encaixa. Eu simplesmente acho mais fácil dizer algumas coisas em inglês, às vezes porque a sintaxe do termo em inglês é diferente, às vezes sem nenhum motivo aparente. A grande maioria das coisas que eu leio são em inglês, e eu passo boa parte do meu tempo lendo, então acho que não é de admirar. Em tempos de outrora, quando eu estava aprendendo esperanto e o usava com mais freqüência, era bastante comum eu achar mais fácil dizer algumas coisas em esperanto do que em português, primariamente graças ao sistema de composição e derivação supimpa (eu ainda uso "X-ilo" ocasionalmente, onde X é uma palavra em português ou em esperanto, para me referir ao "utensílio de fazer X"), mas às vezes também porque a minha cuca queria dizer alguma coisa com uma estrutura sintática e o português exige outra. Um exemplo "clássico" disso com o inglês são frases como she was named after a tree, que eu nem tenho certeza de como dizer em português ("ela foi nomeada segundo uma árvore" doesn't quite cut it (como se diz "doesn't quite cut it" em português?)).

Poder-se-ia alegar que isso representa a decadência do português e o efeito do imperialismo estadunidense. Eu não sei. Em primeiro lugar, a identidade da língua portuguesa está bem saudável, já que são poucos os falantes de português que fazem code-switching. Em segundo lugar, assim como eu acho mais fácil dizer certas coisas em inglês, há uma porção de outras coisas que eu acho mais fácil dizer em português. Acontece simplesmente que, nas situações em que meus interlocutores falam tanto português quanto inglês, a conversa se dá primariamente em português (evidentemente), então é raro eu ter a oportunidade de falar inglês com frases em português strewn in. (Cabe notar que eu só atravesso termos em inglês quando eu sei que o interlocutor os há de entender, já que, imaginem vocês, comunicação exige entendimento entre as partes. Porém, em alguns casos eu tenho que fazer um esforço extra para dizer certas coisas em português ao invés de falar da maneira que me é mais confortável.)

Por fim, enquanto eu estava ideando este post, eu pensei comigo mesmo: "Seriously, tu tá te justificando pela maneira como tu escreve no teu próprio blog? Que diabos é isso, um blog de gente se explicando?" Não era nem para eu ter que escrever isso (de fato, eu não tenho que escrever isso), mas enfim.

_____

* Segundo o artigo, o uso de múltiplas línguas na escrita é chamado de linguagem macarrônica, mas aparentemente o termo é mais usado para descrever certas formas literárias em que a mistura tem algum propósito especial, freqüentemente humorístico. No caso aqui do blog, entretanto, geralmente o meu uso de inglês atravessado no meio do texto simplesmente reflete a maneira como eu falo quando sei que o interlocutor entende ambas as línguas. No geral, eu tendo a fazer isso mais nos posts mais "pessoais" e menos nos posts mais informativos. Acho.

7 comentários / comments

State of the life

2014-10-17 01:37 -0300. Tags: life, mind, academia, mestrado, home, em-portugues

As pessoas gostam de dizer que o tempo passa rápido. Eu nunca concordei com essa afirmação; para mim, um ano sempre levou um ano inteiro para passar. Mas esse ano em particular está se puxando em termos de neverendingness. Para futuras consultas, e para quem tiver interesse, deixo aqui um registro simplificado dos fatos.

Em janeiro deste ano, meu pai se mudou para um apartamento em Porto Alegre, e eu, que até então morava em uma casa alugada de solidez questionável, me mudei para a recém desocupada casa. Após uma série de acidentes vivenciosos, cuja enarração está fora do escopo deste livro, encontrei-me por volta de julho dividindo a casa com meu pai e minha irmã, compartilhando com esta última um quarto de 2×2,5m, e tendo que cuidar da mesma no período da tarde. Uma vez que essa obrigação conflitava com a necessidade de comparecer à UFRGS para a bolsa do mestrado e a essas alturas eu já estava perdendo as estribeiras, em uma última tentativa de salvar um pouco da minha sanidade mental, falei com meus orientadores sobre a possibilidade de trancar a matrícula. No fim das contas, ficou combinado que eu poderia continuar realizando as atividades do mestrado remotamente (já terminei todos os créditos necessários (que a partir deste ano são 12, e não 24), e agora só me restam o Trabalho Individual e a dissertação e atividades relacionadas), eu fiquei mui faceiro, e ficou por isso mesmo.

Evidentemente, isso não foi nada produtivo, dada a falta de sossego e de coisas como uma mesa decente e isolamento e o fato de eu passar constantemente estressado ou cansado ou deprimido. Nesse meio tempo eu descobri que é possível comprar casas super-barato nas verdejantes terras de Viamãoheimr se o camarada não se preocupar com trivialidades como escritura e terreno em área verde, e comecei a catar locais para me mudar para no ano que vem. Depois de umas três ou quatro visitas a locais de solidez ainda mais questionável do que a anteriormente citada casa e em localizações pra lá de interessantes, eu larguei de mão essa idéia e decidi esperar até o fim do ano (quando eu me livro da obrigação de cuidar da criança) para alugar uma casa e me mudar.

No dia 15 de setembro, quando eu estava considerando trancar a matrícula pela (n+1)-ésima vez, eu me dei conta de que se eu alugasse uma casa suficientemente perto eu não precisaria esperar até o fim do ano para me mudar; eu podia me mudar agora e só ir para a outra casa à tarde. Até então eu estava tão fixado na idéia de comprar uma casa que isso nem me passou pela cabeça. Catei casa para alugar nas redondezas e encontrei uma elegante peça de 3×5m mais um banheiro para alugar por meia pataca. A saga para conseguir alugar esse bendito imóvel é uma história à parte que eu hei de postar em algum momento para a elucidação de todos os seres sencientes. Suffice it to say que sexta-feira da semana passada eu consegui me mudar para o lugar, e que turns out que 15m² são um tamanho bem razoável se bem utilizado e quando não se tem que dividi-lo com ninguém.

A situação está um pouco melhor desde que eu me mudei para cá. Por outro lado, até o fim do ano eu continuo tendo que brincar de babá às tardes e em outros momentos de interesse, entre outros eventos que me levam a questionar se o conceito de respeito pelo tempo dos outros existe na cabeça da população em geral ou se é alguma flutuação da minha imaginação, mas eu vou levando, pois é só até o fim do ano, e depois disso eu espero me sentir mais confortável em dizer não diante de proposições equiparáveis.

Quanto ao mestrado, by now I'm pretty sure de que eu não quero seguir a carreira acadêmica e viver de publicar papers. Aparentemente é possível ganhar uns bons trocos dando aula em instituições privadas de ensino superior sem ter que fazer pesquisa, e por enquanto este é o meu plano para depois que eu terminar o mestrado. (Para a minha definição de "uns bons trocos", pelo menos. Certamente não tanto quanto um professor titular de universidade federal, mas a carga horária é menor também. Eu não tenho a necessidade de ganhar rios de dinheiro e, contanto que eu ganhe o suficiente para levar uma vida decente e guardar uns trocados, eu prefiro ter mais tempo do que mais dinheiro. Eu me sinto um pouco desconfortável dizendo isso para as pessoas, porque é basicamente uma admissão de vadiagem, mas should it matter, se eu estiver me mantendo com meu próprio dinheiro sem pedir nada para ninguém? Enfim.) Eu tenho tido dificuldade em me motivar a fazer as atividades do mestrado, mas eu tenho levado, e o prognóstico de terminar isso tudo e deixar para trás é bastante animador.

By the way, lembram quando eu manifestei minha descrença pela idéia de que as aulas do mestrado "não são mais do mesmo"? Hell was I right. As predicted, as aulas são much the same thing (pelo menos as que eu tive). A melhor cadeira que eu fiz no semestre foi Programação Funcional Avançada, que nem era do mestrado (foi a cadeira que eu escolhi para realizar a Atividade Didática). Algoritmos e Teoria da Computação foi bacaninha também (em particular a parte de Teoria da Computação), mas nada muito diferente de uma cadeira da graduação. De resto, o semestre foi tolerável primariamente graças aos pães do Hélio. Also as predicted, a variedade de cadeiras (ou falta de) também limita as possibilidades de pegar apenas cadeiras em tópicos de interesse; aliás, os horários das cadeiras do mestrado são um tanto quanto mal-distribuídos (não há praticamente nenhuma cadeira às 8h30, por exemplo), o que aumenta a possibilidade de conflitos de horários entre cadeiras (semestre passado eu tive que escolher entre uma cadeira de programação paralela e uma de tendências em engenharia de software por conta do conflito de horários, por exemplo); soma-se a esse problema o fato de que a maioria das cadeiras é oferecida em apenas um dos semestres do ano, e que recomenda-se fortemente aos alunos cursarem todas as disciplinas no primeiro ano do mestrado. On the bright side, esse ano o PPGC resolveu reduzir o número de créditos obrigatórios do mestrado para 12, o que permite realizá-los todos no primeiro semestre.

Also on the bright side, eu consegui (depois de muitas conturbações, primariamente na minha cabeça) escolher um tema de dissertação em um assunto que me interessa. Vai dar um baita trabalho para implementar, mas pelo menos eu vou aprender coisas pessoalmente úteis para mim no processo.

Do futuro, falamos depois.

6 comentários / comments

Título de capitalização como garantia de aluguel?

2014-09-18 21:33 -0300. Tags: life, home, worldly, treta, em-portugues

Meus amigos, falcatrua é uma arte.

Ao invés de exigir fiador, algumas imobiliárias permitem o uso de um título de capitalização como garantia de aluguel. A idéia é: você compra à vista um titulo de capitalização em um valor pré-combinado (normalmente cerca de 12 vezes o valor do aluguel), que fica servindo como garantia caso você não pague o aluguel (sim, você continua tendo que pagar o aluguel todo mês, mesmo já tendo pago o valor de um ano inteiro no título). No final de 12 meses, você pode resgatar "100% da reserva de capitalização corrigida mensalmente pela poupança mais TR" (fonte: folheto do PortoCap Aluguel; outras seguradoras/bancos oferecem condições análogas), e ainda concorre a prêmios e descontos em serviços residenciais.

Parece (meio que) uma boa, não? Afinal o rendimento é o mesmo da poupança, então dá na mesma deixar o dinheiro parado na poupança ou em um título. O truque está na expressão "100% da reserva de capitalização". Se você for parar para ler as condições gerais do PortoCap Aluguel, descobrirá que a reserva de capitalização é 94,1910% do valor do título; o restante é tomado como custos de sorteio (0,023354%) e despesas administrativas (5,785646%). A taxa de juros de capitalização é de 0,5% (basicamente a mesma da poupança). Assim, o rendimento do dinheiro que você recebe ao final dos 12 meses é:

That's right, as taxas de administração e sorteio são calculadas precisamente para que no final o dinheiro não renda absolutamente nada; você recebe a mesma coisa que depositou. Ou seja, se enquanto com R$ 6000 na poupança eu teria cerca de R$ 6370,06 um ano depois, com o título eu teria os mesmos R$ 6000. Se você resgatar o valor do título antes de um ano, você ainda perde dinheiro.

No site linkado pode-se ver que, além do título de 12 meses, existe um de 15. "Ah, esse rende mais", certo? Errado: a reserva de capitalização do de 15 meses é 92,7919% do valor do título, o que dá um rendimento de 0,927919 · 1,00515 = 1,0000022, i.e., 0,00% também.

Conclusão: pelo menos você "não está" perdendo dinheiro, mas a propaganda de que o título dá os mesmos rendimentos da poupança é misleading (o folheto não explica o que é nem quanto é a reserva de capitalização; o carinha da imobiliária ainda teve a cara de me dizer que o título "é muito melhor que a poupança"). "Não está" entre aspas, porque no tempo em que esse dinheiro ficou parado ele poderia ter rendido juros se fosse aplicado na poupança ou algum outro tipo de investimento. Seria mais honesto simplesmente dizer que o dinheiro é devolvido no final com correção pela TR, sem dizer que é corrigido pela poupança, ao invés de oferecer correção pela poupança e tirar exatamente a mesma quantia em taxas. (Dou-me conta agora, todavia, de que isso provavelmente é parte do mecanismo que faz você sair com menos dinheiro se tirar o dinheiro antes de um ano, i.e., quando o dinheiro ainda não "rendeu" até voltar à quantia original.)

That's #capitalfinanceiro for you.

(By the way, eu mencionei que se você conseguir tirar algum lucro nessa brincadeira (i.e., o pouquinho que a TR rende), há incidência de imposto de renda sobre ele, enquanto a poupança é isenta de imposto de renda até R$ 50 000?)

4 comentários / comments

Main menu

Posts recentes

Comentários recentes

Tags

em-portugues (213) comp (138) prog (68) in-english (51) life (47) unix (35) pldesign (35) lang (32) random (28) about (27) mind (25) lisp (23) mundane (22) fenius (20) web (18) ramble (17) img (13) rant (12) hel (12) privacy (10) scheme (10) freedom (8) bash (7) copyright (7) music (7) academia (7) lash (7) esperanto (7) home (6) mestrado (6) shell (6) conlang (5) emacs (5) misc (5) latex (4) editor (4) book (4) php (4) worldly (4) politics (4) android (4) etymology (4) wrong (3) security (3) tour-de-scheme (3) kbd (3) c (3) film (3) network (3) cook (2) poem (2) physics (2) wm (2) treta (2) philosophy (2) comic (2) lows (2) llvm (2) perl (1) en-esperanto (1) audio (1) german (1) kindle (1) old-chinese (1) pointless (1) translation (1)

Elsewhere

Quod vide


Copyright © 2010-2020 Vítor De Araújo
O conteúdo deste blog, a menos que de outra forma especificado, pode ser utilizado segundo os termos da licença Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International.

Powered by Blognir.