A resposta do Ministério da Saúde

Ontem eu falei de como não conseguia mandar minha pergunta ao Ministério da Saúde. Como eu não desisto fácil, usei o email que achei para uso de imprensa para mandar minha pergunta e acabei recebendo resposta. Acompanhe a conversa:

Eu:

Recebi um email de dengue@combatadengeu.com.br com uma mensagem sobre a campanha e alguns links. Essa mensagem partiu do Ministério? Onde/como meu email foi obtido?

Saúde:

De: Andréa da Cunha Rocha
Para: gustavo@noronha.eti.br
Cc: COMUNICAÇÃO INTERATIVA
Assunto: Dúvida sobre dengue
Enviada em: Wed, 23 Feb 2011 18:57:08 +0000 (02/23/2011 03:57:08 PM)

Gustavo,

O Ministério da Saúde realiza ações nas redes sociais, incentivando parceria com blogueiros e internautas. Mas a mensagem a qual você se refere não foi enviada pelo Ministério. Pode ser algum spam. Agradecemos o alerta e averiguaremos a procedência de tal e-mail.

Continuamos à disposição para o esclarecimento de quaisquer dúvidas sobre saúde!

Att.,

Saúde

De: Andréa da Cunha Rocha
Para: gustavo@noronha.eti.br
Cc: COMUNICAÇÃO INTERATIVA
Assunto: Cancelar: Dúvida sobre dengue
Enviada em: Wed, 23 Feb 2011 19:14:44 +0000 (02/23/2011 04:14:44 PM)

Andréa da Cunha Rocha deseja cancelar a mensagem “Dúvida sobre dengue”.

Saúde:

De: Andréa da Cunha Rocha
Para: Andréa da Cunha Rocha , gustavo@noronha.eti.br
Cc: COMUNICAÇÃO INTERATIVA
Assunto: RES: Dúvida sobre dengue
Enviada em: Wed, 23 Feb 2011 19:36:54 +0000 (02/23/2011 04:36:54 PM)

Gustavo,

Desculpe-nos, houve um equívoco na informação. Realmente, o e-mail que você recebeu foi enviado pelo Ministério da Saúde. Esta é uma ação de combate à dengue que está sendo realiza em todas as redes sociais.

Estamos à disposição!

Att.,

Eu:

De: Gustavo Noronha Silva [mailto:gustavo@noronha.eti.br]
Enviada em: quarta-feira, 23 de fevereiro de 2011 18:50
Para: Andréa da Cunha Rocha
Cc: COMUNICAÇÃO INTERATIVA
Assunto: Re: RES: Dúvida sobre dengue

Oi Andréa,

Obrigado pela atenção! Você sabe me dizer de onde meu e-mail foi obtido?
Eu não me lembro de ter-me cadastrado em nenhuma lista de correio do
Ministério da Saúde.

Eu me cadastrei no site da campanha Dilma, no entanto, no ano passado. A
mensagem de email que eu recebi tinha alguns links que apontavam para o
domínio dilma.com.br, inclusive o link que poderia ser clicado para não
receber mais os emails. É possível que tenha vindo do banco de dados
deles o meu endereço de email?

Obrigado,

Saúde:

De: Andréa da Cunha Rocha
Para: Gustavo Noronha Silva
Cc: COMUNICAÇÃO INTERATIVA
Assunto: RES: RES: Dúvida sobre dengue
Enviada em: Wed, 23 Feb 2011 22:29:03 +0000 (02/23/2011 07:29:03 PM)

Prezado Gustavo,

Não sabemos lhe informar sobre isto, pois o envio de e-mail marketing já está incluso no contrato da agência licitada para prestar o serviço.

Continuamos à disposição para o esclarecimento de dúvidas sobre saúde.

Att.,

Ah, então tá, né…

Fico muito mais tranquilo que tenha sido só o Ministério que contratou uma empresa de “e-mail marketing” que obteve meu endereço de email de sabe-se lá onde. Vocês não? Não?

C-A-B e Magic SysRq

Isso era pra ser comentário de um post no blog do Eriberto, mas como ele exige login para fazer comentários e reiniciar a senha que eu obviamente esqueci demorou muito, vai um post mesmo.

O post dele trata da ida embora da combinação Control-Alt-Backspace, que matava o X. Essa combinação ir embora é uma coisa boa, na minha opinião por vários motivos, o principal deles sendo que eu já derrubei meu X várias vezes sem querer fazendo um comando no Emacs ou no Bash ;D. Se uma combinação desse tipo era tão importante e precisava ser intuitiva é melhor a gente parar de zoar a Microsoft fazendo camisas com C-A-del e começar a zoar a nós mesmos =P.

Depois ele diz que “Novidade: agora é AltGR PrintScreen K.”. Não é bem assim. Essa combinação existe desde sempre e é um dos comandos do chamado Magic SysRq do Linux. Essa combinação específica serve para matar todos os processos do virtual terminal atual, que acaba por ser o suficiente para conseguir algo semelhante ao C-A-B. Outras combinações são AltGr+SysRq+e, que manda um SIGTERM pra todo mundo, AltGr+SysRq+i, que manda um SIGKILL pra moçada, AltGr+SysRq+s que faz um sync de emergência (manda pro disco tudo que tá em memória esperando pra ir pro disco), AltGr+SysRq+u, que remonta os sistemas de arquivo em modo leitura, e AltGr+SysRq+b que dá reboot.

As combinações mágicas precisam estar habilitadas no Linux (estão na maioria das distribuições, por padrão) e podem te ajudar a sair de um “travamento”, mesmo que seja reiniciando o sistema de forma limpa, sem risco de perder dados.

AIKO – usando 3G vivo com GNU/Linux

De mudança para o Rio de Janeiro, procurando garantir que eu tenha Internet sempre, contratei da Vivo (eu gosto de mudar de operadora, porque acho todas ruins) um plano 3G ilimitado. O serviço, devo dizer, me deixou satisfeito até agora. A banda é razoável, a latência é ruim, mas é suficiente pra eu trabalhar com ssh em hosts remotos, ler email via IMAP, usar IRC e jabber tranquilamente.

O modem que eu comprei foi um AIKO 83D, porque na caixinha tem escrito que ele suporta ‘Linux’. O mais engraçado foi que a atendente primeiro me disse que não tinha como funcionar, aí eu falei que no site da Vivo diz que tem um modem que funciona hah.

Antes de falar o que eu fiz, vejamos o que o manual diz. Ele diz que eu preciso entrar no site nacional da Aiko e baixar o ‘driver’ para Linux. De fato lá estava o driver para ‘Linux’, ou melhor, para ‘Ubuntu’. Eu sou um pessimista quando se trata de empresas falando de ‘driver’ ou ‘discador'; normalmente eu espero que seja algo mal-feito, mal-acabado, e algumas vezes destrutivo. A Aiko não me decepcionou =(.

Dá uma olhada no conteúdo dos ‘drivers':

kov@abacate /tmp> tar ztpf BVIVO_PC_LinuxUI1.0.0B01_tmp081023.tar.gz 
LinuxUI/install.sh
LinuxUI/MCManager.tar.gz
kov@abacate /tmp> tar ztpf Ubuntu.tar.gz 
Ubuntu/
Ubuntu/libaudio2_1.9.1-1_i386.deb
Ubuntu/libqt3-mt_3.3.8-b-0ubuntu3_i386.deb

Não é engraçado que você tenha que instalar esses debs? Aí tem o tal do MCManager, que parece mais interessante. Ele tem um driver pro Linux, que você tem que compilar, e uma tonelada de arquivos com propósitos cada um mais interessante que o outro. O manual de instalação para ‘Ubuntu’ é bem divertido. Olha esse ponto:

7- Conecte o Modem ao discador e espere. Pode ser que a gaveta do CDROM se abra, feche-a.

Haha. Não, sério. É preciso muito esforço pra ser tão amador =D. Quando é que as empresas vão começar a fazer as coisas direito, contribuir os drivers ou definições certas pra Linux/hal/udev fazerem todo o trabalho certinho? Repitam depois de mim: um discador tosco, feito em qt3 não é substituto para o Network Manager ou o que quer que a minha distribuição use para se conectar à Internet.

Como eu faço questão de o meu sistema ficar limpo, não segui as instruções. Achei em buscas na Internet várias soluções, especialmente de usuários de Ubuntu, para fazer o modem funcionar, e aqui está o que eu fiz. O modem Aiko 83D é um daqueles dispositivos USB que são 2 em 1. O padrão é ele ser um “CD-ROM” virtual, que contém os ‘drivers’ pra Windows. Para que ele se torne modem, é preciso fazer um ‘mode switch’. Eu instalei, portanto, o pacote usb-modeswitch e coloquei a seguinte configuração para o udev:

kov@abacate ~> cat /etc/udev/rules.d/00_aiko-modem.rules 
ACTION!="add", GOTO="ZTE_End"

SUBSYSTEM=="usb", ATTRS{idProduct}=="2000",
ATTRS{idVendor}=="19d2"

RUN+="/usr/sbin/usb_modeswitch -v 0x19d2 -p 0x2000 -V 0x19d2 -P 0x0057 -m 0x01 -M 55534243123456782000000080000c85010101180101010101000000000001"

GOTO="ZTE_End"

SUBSYSTEM=="usb", ATTRS{idProduct}=="0057",
ATTRS{idVendor}=="19d2"

RUN="modprobe usbserial vendor=0x19d2 product=0x0057"
MODE="660", GROUP="dialout"

LABEL="ZTE_End"

O que essa coisinha linda faz? Quando ele detecta o dispositivo com id de vendor 19d2 e id de produto 2000, ele roda o usb_modeswitch com aquela linha de comando mágica que eu achei por aí, pra mudar a configuração desse modem. O engraçado é que a Aiko teve a manha de fazer a cagada bem cagadinha, e o product id 2000 é usado para uma enorme quantidade de modems diferentes, que exigem mágicas diferentes. Chique demais =). De qualquer forma, depois de o modo ter sido trocado, é como se o dispositivo com id de produto 2000 fosse desconectado, e um novo dispositivo, com id de produto 0057 fosse conectado. A regra do udev faz, então, que o driver de serial da USB seja carregado com as opções necessárias e deixa as permissões arrumadas.

Depois de configurar isso aí, você já pode colocar o modem e se você for sortudo como eu, até aqui já resolvemos metade do problema. Agora o modem já vira modem, e já vai ficar com a luzinha verdinha, que significa que ele conectou na rede de celular. Agora precisamos fazer o Network Manager querer usar o bichinho. O network manager confia no udev pra dizer pra ele que dispositivos seriais têm capacidade de agir como modem GSM. Temos que ensinar pro udev, então, que esse aqui faz. Na verdade a gente só precisa convencer o udev a verificar se ele tem as capacidades!

O udev usa um arquivo de “configuração”, chamado /lib/udev/rules.d/77-nm-probe-modem-capabilities.rules. Eis o conteúdo do meu, agora:

kov@abacate ~> cat /lib/udev/rules.d/77-nm-probe-modem-capabilities.rules
# do not edit this file, it will be overwritten on update

ACTION!="add|change", GOTO="nm_modem_probe_end"
SUBSYSTEM!="tty", GOTO="nm_modem_probe_end"

DRIVERS=="serial_cs|nozomi", IMPORT{program}="nm-modem-probe --delay 3000 --export $tempnode", GOTO="nm_modem_probe_end"

# Only probe known mobile broadband drivers
DRIVERS=="option|sierra|hso|cdc_acm|qcserial", GOTO="probe"
KERNEL=="ttyUSB3", GOTO="probe"

GOTO="nm_modem_probe_end"

LABEL="probe"

# Don't probe new-style beagleboard cdc-acm ports
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0525", GOTO="nm_modem_probe_end"

SUBSYSTEM=="tty", SUBSYSTEMS=="usb", DRIVERS=="?*", ENV{NM_MODEM_DRIVER}="$attr{driver}"
SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="?*", ENV{NM_MODEM_USB_INTERFACE_NUMBER}="$attr{bInterfaceNumber}"
SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="?*", ATTRS{idProduct}=="?*", IMPORT{program}="nm-modem-probe --vid 0x$attr{idVendor} --pid 0x$attr{idProduct} --usb-interface $env{NM_MODEM_USB_INTERFACE_NUMBER} --driver $env{NM_MODEM_DRIVER} --delay 3000 --export $tempnode", GOTO="nm_modem_probe_end"

LABEL="nm_modem_probe_end"

Eu editei ele pra basicamente scanear o dispositivo ttyUSB3. Isso porque nenhum daqueles drivers é carregado para o modem. Alguns upgrades de kernel atrás, o dispositivo que servia como modem GSM era o ttyUSB2, e por algum motivo apareceu esse ttyUSB3 de uns tempos pra cá. Vai entender. Note que a primeira linha do arquivo é bem direta: não edite esse arquivo. Enquanto não houver uma forma sã de tratar todos esses modems de alguma forma genérica não vejo outro jeito, no entanto… talvez funcione se você copiar esse aquivo pra /etc/udev/rules.d e editar o de lá, mas eu não quis saber, e brutalizei =P. Você pode convencer o dpkg a não substituir esse arquivo nos upgrades rodando o seguinte comando:

# dpkg-divert --local --rename --divert /root/77-nm-probe-modem-capabilities.rules /lib/udev/rules.d/77-nm-probe-modem-capabilities.rules

Tosco. O que isso faz é mover o arquivo para /root, e os upgrades que vierem instalarão o arquivo novo no /root. Aí você pode copiar o arquivo de volta e editar que o dpkg não vai mais encostar nele. Não usem dpkg-divert indiscriminadamente =P!

Então, depois disso configurado assim, o network manager ficou feliz da vida, viu o modem e bastou adicionar uma conexão GSM com o telefone *99#, usuário e senha vivo, que tudo funcionou bonitinho.

Simples e (quase)bonito. Agora bem que a Aiko podia fazer o trabalho direito e ajudar a colocar configurações sãs no Linux/udev pra isso funcionar sem a gente ter trabalho. Que tal?

Banco do Brasil tendo problemas com sistemas?

Antes de ir pra Argentina eu habilitei meus cartões para uso no exterior. No dia em que eu precisei não estava disponível, bloqueou minha senha e tive de ir à agência. Segundo o atendente que me atendeu eu não tinha habilitado o cartão… hmm…

Desde ante-ontem que o Banco do Brasil tem idéias muito interessantes sobre qual o limite do meu cartão. Começou achando que era 0 para crédito, -2 para saque. Aí eu percebi que a fatura do meu novo cartão que não estava ainda em débito automático não tinha sido paga. Paguei e habilitei o débito automático. Aí a idéia dele mudou, eu teria 5 reais para saque. Bom… deixa pra amanhã. Entro de novo no site, agora tenho 72 reais para crédito e débito; mé… dou reload na página, 70 reais. Hein?! Deixa pra amanhã…. entro de novo, 71.

Enquanto eu chorava isso pra minha mãe fiquei sabendo que em julho ela teve uma experiência similar. Por causa de uma conta de 72 reais que ela tinha saldo mais que suficiente pra pagar, mas esqueceu, todos os cartões e limites dela foram bloqueados e o nome dela foi parar no spc e no serasa. Agora, pensa comigo, é o banco dela, o gerente dela tem o telefone dela e nunca ligou pra ela nem pra avisar do problema; esperar menos de um mês pelo pagamento de uma conta e tomar esse tipo de atitude parece sensato?

Claro que o meu problema pode ser só um problema nos sistemas do banco; eu sei que ante-ontem o sistema deles ficou caído um bom tempo; o lance do meu cartão ‘desabilitar’ foi precedido por erros 500 no site do banco, e o lance do meu cartão ficar sem limite nenhum foi seguido pelo mesmo sintoma.

Mais uma dessas e é bye, bye BB pra mim. E olha que eu até esse ano achava o banco bom.

Artigo sobre Zope/Plone

Eu vi no Planet GNOME hoje que o Joel Spolsky escreveu um artigo sobre os programadores do Zope/Plone… err… na verdade, o artigo dele é sobre os Astronautas da Arquitetura, e fala de gente que é justamente o tipo de gente que escreve o Zope hehe. Colegas desenvolvedores, não se deixem tornar astronautas da arquitetura; eu tenho visto muitos de nós flertando com esse lado de trevas da programação. Simple is beautiful.

livros recomendados e aprendendo sobre rede

Um livro que eu acabei de ler e achei muito bom foi o Zero Configuration Networking: The Definitive Guide. ZeroConf de fato é uma tecnologia interessantíssima, e com potencial fantástico. Leia e comece a brincar com bind e avahi!

Agora comecei a ler o Network Warrior, e estou achando sensacional. Eu sou um completo ignorante no que diz respeito a rede, especialmente rede física. Estou aprendendo algumas coisinhas úteis já nas primeiras páginas. Como eu não tenho um switch por perto pra brincar, instalei o pacote vde2, que é um ‘switch virtual’. Bonzinho o negócio… ele tem inclusive ‘plugs’ e ‘cabos’ virtuais, que você pode ligar nas portas do switch, e você pode ligar um switch no outro, criar vlans, fazer trunking e o caralho a quatro. Até suporte ao tal do spanning tree (que eu não faço a mínima idéia do que seja, ainda) ele tem. A única fraqueza que eu encontrei até agora é que ele aparentemente não tem configuração nem exibição de status de configuração de velocidade e “duplexness”.

History meme

The most recent meme in Planet GNOME is listing your most used commands using a clever command line hack. Here are mine, for my own user, and my root account:


$ history|awk '{a[$2]++ } END{for(i in a){print a[i] " " i}}'|sort -rn|head
115 ls
64 cd
48 svn
27 git
22 screen
20 rgrep
19 find
16 sudo
11 rm
10 less


# history|awk '{a[$2]++ } END{for(i in a){print a[i] " " i}}'|sort -rn|head
185 dzhandle
36 ls
32 aptitude
29 screen
22 dpkg
21 vim
17 cd
13 dd
13 apt-cache
11 iwlist

This definately shows that I’ve been hard at work on a Zope/Plone project =). More on that later!

PolicyKit rules, and, when error handling bites you

PolicyKit, as I said before, is the authentication/authorization framework that will finally replace the gksu hack with a real solution. I am playing with some test code to be able to perhaps contribute with that goal. Everything was going forward pretty nicely in my tests when I hit a blocker. I spent like two hours trying to figure out the problem. Here’s the code:


sender = dbus_message_get_sender(message);
pk_caller = polkit_tracker_get_caller_from_dbus_name(pk_tracker,
sender,
&dbus_error);
if(dbus_error_is_set(&dbus_error))
{
g_error("Failed to get caller from dbus: %s: %s\n",
dbus_error.name, dbus_error.message);
return NULL;
}

When my mechanism goes to check if the caller is allowed to run the action, I first need to get the caller, of course. That code was always failing with this error message:


** ERROR **: Failed to get caller from dbus: org.freedesktop.DBus.GLib.UnmappedError.CkManagerError.Code0: Unable to lookup session information for process '25594'

It took me a long time, and a lot of code reading on PackageKit to realize the real simple problem with my code: I was assuming that the DBUS error would only be set if polkit_tracker_get_caller_from_dbus_name failed, which is just not the case. The DBUS error was set, but the function actually worked, most probably getting the information it needed from some other thing than ConsoleKit. So that brings us to something like this:


sender = dbus_message_get_sender(message);
pk_caller = polkit_tracker_get_caller_from_dbus_name(pk_tracker,
sender,
&dbus_error);
if(pk_caller == NULL)
{
if(dbus_error_is_set(&dbus_error))
{
g_error("Failed to get caller from dbus: %s: %s\n",
dbus_error.name, dbus_error.message);
return NULL;
}
}

And, voi lá!

Chaves GPG comprometidas

Na madrugada de sexta-feira para sábado (15/03/2008) eu e o Lincoln tivemos nossas mochilas roubadas de dentro do carro do Lincoln na Savassi, em BH. Além da perda de muitos reais em hardware (minha câmera digital, meu modem/celular USB recém-comprado, um celular massa do Lincoln, além dos dois notebooks) as minhas duas chaves GPG estão agora comprometidas.

Infelizmente eu irresponsavelmente deixei o único certificado de revogação delas guardado em um HD USB que estava na mesma mochila e foi, portanto, levado também. As chaves com IDs 873F25F1 e 882A6C4B estão comprometidas e não devem ser confiadas. Eu vou criar uma nova chave assim que tiver um novo notebook, e dessa vez vou cuidar melhor do certificado de revogação.

Meu notebook era um HP pavilion dv1760br, sem o adesivo do windows, mas com o adesivo ‘intel inside’ e sem nenhum outro adesivo. O HD USB é um Freedom de 40GB. Eu vou postar o número serial do notebook aqui para referência, assim que estiver perto da nota fiscal.