20100708

Selecionando uma linha no acme pelo shell

Para atingir o mesmo efeito de clicar em :n com o botão 3, pode-se fazer pelo shell:
echo -n $line > /mnt/acme/$wid/addr
echo 'dot=addr' > /mnt/acme/$wid/ctl
Onde $line é o número da linha e $wid é o número da janela.

20100705

Judiciously placed print statements

A trabalhar numa arquitetura na qual o gdb não está sendo muito amigável [1] e por conta de preguiça, precisei saber todas as funções que eram chamadas diretamente num determinado programa escrito em C (linux/gcc).
Para tal desenrolei em rc(1) usando sed(1) do Plan 9 from User Space:
for(i in *.c) {
 sed 's/^{$/{\nprint("%s >>>\\n", __FUNCTION__);/g;' $i > $i.new
 mv $i.new $i
}

Por ser uma rotina ingênua alguns erros surgiram em declarações de structs e enums, mas comparado ao benefício, me parece valer a pena.

[1] Bibliotecas dinâmicas + gdb para mips rodando em 386 = .dynamic section for "/lib/libm.so.6" is not at the expected address (wrong library or version mismatch?)

ps: O título é uma alusão à "The most effective debugging tool is still careful thought, coupled with judiciously placed print statements." de Brian Kernighan.

Remoção de usuários no Ubuntu 10.04 Netbook Edition

A remoção de usuário só foi possível utilizando o deluser(1). A ferramenta do GNOME reclamava que o usuário ainda estava logado mesmo depois de certificar-me que o mesmo não estava e, por desencargo de consciência, reiniciar a máquina.