FISL

O FISL tá como sempre, muito bom, muito animado, a cada dois passos um conhecido, um amigo querido que não vejo à muito tempo =). Eu estava no processo de mudança pra BH quando o call for papers foi fechado, então não propus palestra nenhuma, mas acabei ajudando cordenando três mesas (2 delas sobre Java, e uma sobre Mozilla, mas eu prometi que não ia dar minhas opiniões pessoais sobre tais tecnologias lol =D).

A partir de agora não tenho mais nada de obrigação no FISL, só ver palestras legais (estou ouvindo Theodore Tso falando sobre ndiswrapper nesse momento) e me divertir. Conheci mais gente que trabalha com o Yves no Google e todos são muito interessantes e divertidos! Vi muita gente do MDS, também, e alguns amigos queridos que deixei em Brasília. Reencontrar o pessoal do Debian Brasil foi muito bom, também… muito tempo sem vê-los!

Do ponto de vista da produtividade: como sempre, praticamente inexistente. Se eu tinha alguma pretensão de programar alguma coisa para WebKit, isso ficou pra trás tem tempo. Pelo menos consegui ler uns capitulozinhos do livro de C++/QT4 que eu coloquei na minha bookshelf do Safari. Comecei a ler porque decidi que preciso conhecer mais de C++ para realmente entender o que estou fazendo com WebKit, e escolhi um livro que citasse QT4 por uma quantidade de motivos diferentes… entre eles o fato de que é bom conhecer seus peers ;).

Tem dias em que eu sinto vergonha de ser brasileiro…

Pois é… lá vai a merda da justiça brasileira de novo fazer cagada, e censurar um domínio inteiro por motivos arbitrários… http://naoaobloqueio.wordpress.com/. Não basta fazer censura, o que já seria ridículo por si só, tem de fazer burrada.

Obviamente o juiz que expediu essa ordem judicial não tem a menor noção de como funciona a Internet e de como um bloqueio desse tipo é feito. Até aqui tudo bem. A parte assustadora é que ele também nem tentou saber.

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á!

Voltando à ativa…

Debconf8! Eu vou!

I'm going to DebConf8, edition 2008 of the annual Debian developers meeting

Já estou com um notebook novo. É um HP Pavilion dv2670br, em que tudo funcionou somente usando software livre, inclusive a webcam, o leitor de impressões digitais e as funcionalidades de hibernação/suspensão. As placas todas são intel, o que faz com que os drivers de som, gráfico e rede estejam disponíveis e integrados nos projetos relevantes. Com excessão, obviamente, do firmware necessário para a placa wireless =(. Intel, você estão quase 100% de parabéns! =)

Na verdade, para que suspensão funcionasse automaticamente pelo gnome-power-manager eu precisei usar um quirk, e o contribuí de volta como patch para o XML do hal-info. Isso significa que novas versões do hal-info já vão funcionar automaticamente com esse notebook. Com o fantástico GNOME 2.22 rodando quase todo, graças ao maravilhoso trabalho do time de empacotamento do GNOME do Debian, meu desktop está me dando muita alegria! Viva o desktop livre!

Continuo me preparando, claro, para o dia em que o KDE vai fazer o GNOME simplesmente perder a importância, como profetisou o KDHélio no último evento do LinuxChix =D.

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.

Ano novo começou quente!

Tantas histórias de ano novo já que se eu fosse contar tudo ia ficar chato demais (e olha que sou eu pensando isso!). Troquei o cerejinha em um siena, que tá muito bão de andar. Já tem 1.800km rodados o bichinho e só estou com ele há duas semanas! Esse final de semana, por exemplo, ele participou de uma inusitada aventura em São Paulo. Fomos eu, Lincoln e Lívia, na cara e na coragem.

Carro Novo

Tirei uma fotenha do estado do bicho depois da viagem (veja aí ao lado, ele é o de trás). Impressionante. O mais louco foi encontrar o rootsh no meio do trânsito de São Paulo, com certeza, e acabar tomando cervejas fenomenais na casa dele, tocando com a guitarrinha nova do Lincoln as notas do Frets on Fire!

O trabalho novo, programando com Django está muito bom até agora; já aprendi bastante, e gostei bastante da ferramenta. Voltando um pouco a fita, o meu último trabalho para o MDS foi ajudar na migração dos servidores para o novo datacenter, em Uberlândia, que aconteceu com um sucesso que eu não esperava. Foi divertido rever meus amigos de BSB e trabalhar com os ambientes que eu conheci por tanto tempo.

Nós em Uberlândia

Agora, a coisa tá ficando muito interessante por aqui… com o Yves vindo trabalhar em BH, no Google, e também o Gustavo Franco (mais alguém?!) o número de gente True de BH está aumentando consideravelmente, e vamos ter chance de fazer muita coisa legal!

O substituto do gksu demorou, mas vem aí!

E já estava na hora! O gksu, embora na época tenha feito uma enorme diferença na usabilidade de desktops GNOME de sistemas não-red hat não parece se encaixar na atual estrutura do desktop livre. As novas estruturas de gerenciamento de dispositivos removíveis foram as primeiras a mostrar uma forma mais inteligente de tratar tarefas que necessitam de maiores privilégios: o que eles fizeram foi separar a política do mecanismo, que aliás é uma das primeiras boas práticas em que se deve pensar ao projetar sistemas.

A idéia é que as aplicações que desenham janelas e permitem que o usuário decida o que quer não precisam de nenhum privilégio maior, e não é bom que se tenha todo o código da GTK+, por exemplo, rodando como root. Uma ferramenta menor, e somente com as dependências realmente necessárias faz o trabalho sujo de, com privilégio de root, executar as tarefas que necessitam dele; no caso dos dispositivos removidos esse é o pmount, mais recentemente o gnome-mount.

Agora esse modelo está sendo trazido de maneira mais geral para os nossos desktops livres, através do PolicyKit. Eu já estou lendo a documentação e os posts de blog para reescrever o gksu para usar o PolicyKit como base. Isso vai fazer com que ele pare de ser um wrapper para su e sudo, finalmente, com um design muito mais elegante. Ainda haverá aplicações que terão de rodar com uid 0 por algum tempo. Eu, particularmente, vou começar desde já a torcer para que o gksu deixe de ser necessário o mais rápido possível =).