20110524

Matrizes no Python como lista de listas

Precisávamos de uma implementação de matrizes no Python e lista de listas foi a idéia imediata.
Sabíamos que as seguintes interações funcionavam para copiar uma lista.

>>> a = [1,2,3]
>>> b = a[:]
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
>>> b[1] = 5
>>> b
[1, 5, 3]
>>> a
[1, 2, 3]

Com base nisso, tentamos o mesmo com matrizes.

>>> a = [[1,2,3], [4,5,6]]
>>> b = a[:]
>>> b
[[1, 2, 3], [4, 5, 6]]
>>> b[1][1] = 7
>>> b
[[1, 2, 3], [4, 7, 6]]
>>> a
[[1, 2, 3], [4, 7, 6]]

No entanto, vê-se que b[1] e a[1] são o mesmo objeto. A solução, ainda utilizando lista de listas, é copiar as listas internas (linhas da matriz) manualmente, como no exemplo seguinte:

>>> a = [[1,2,3], [4,5,6]]
>>> b = []
>>> b.append(a[0][:])
>>> b.append(a[1][:])
>>> b
[[1, 2, 3], [4, 5, 6]]
>>> b[1][1] = 7
>>> b
[[1, 2, 3], [4, 7, 6]]
>>> a
[[1, 2, 3], [4, 5, 6]]

20110223

Instalando mysql no Ubuntu 9.10 mesmo com CARMEN

Tentar instalar mysql numa máquina com CARMEN pode ser um problema, como descrito em https://bugs.launchpad.net/bugs/684685.
Comentei na issue, mas repito aqui: /usr/bin deve ser anterior a /usr/local/bin no PATH do root, já que CARMEN tem um utilitário chamado logger que conflita com logger(1) usado pelo mysql.

20110107

Conserto de erros de linkedição em mipsel

Um erro recorrente quando da linkedição para alvos mips little-endian é:

$xxx/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/bin/ld: non-dynamic relocations refer to dynamic symbol memcpy
$xxx/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/bin/ld: failed to set dynamic section sizes: Bad value

Resolve-se o dito cujo adicionando -fPIC à compilação.

20101122

Conflito entre toolchain Go e Inferno

Na linkedição de um programa trivial em Go, o seguinte erro ocorria:
freesg: symtab: not defined
freesg: esymtab: not defined
freesg: pclntab: not defined
freesg: epclntab: not defined

Em $HOME/bin havia um linker Go antigo, o que causava o problema. Removido este, problemas diferentes apareceram. Estes, por fim, eram devidos ao caminho para o linker da árvore do Inferno ser anterior ao caminho do Go em $PATH.

Como o kencc do Inferno não é usado a menos que se vá mexer no kernel, optei por deixar o caminho deste sempre posterior ao do Go.

20101031

Mapeando a tecla Windows para Control no X

% cat $HOME/.xmodmap
add control = Super_L

20100926

ROOT e pyROOT no Ubuntu

No Ubuntu 8.10, para usar ROOT e pyROOT é necessário instalar root-system-bin, root-system-common, root-plugin-python e libroot-python-dev.
Após isso, um
import ROOT
no python deve funcionar.

20100910

Hg através de proxy SOCKS5

Adicione ao $HOME/.ssh/config

Host repository-host
        ProxyCommand /bin/nc -X5 -x socksproxy:port1 %h %p
        Compression yes

Aprendi em http://blogs.sun.com/cwb/entry/using_the_opensolaris_mercurial_repository