20100618

Tamanho de arquivo em sistemas de arquivo OpenBSD

Na implementação de VOP_GETATTR, a struct vattr descreve os atributos de um arquivo. Dois campos descrevem tamanhos de arquivo:

1.vap->va_size: tamanho do arquivo em bytes. Pode ser visto, por exemplo, com ls(1).
2.vap->va_bytes: número de bytes gastos pelo arquivo na mídia que o contém. É mapeado no campo st_blocks de uma struct stat, ou seja, na prática é utilizado sempre como múltiplo do tamanho do bloco do sistema de arquivos. Pode ser visto com du(1).

Completion de nomes em sistemas de arquivos OpenBSD

O stubfs em changesets anteriores ao 14 ativava panic(9) quando o shell tentava completar um nome em um diretório sob sua gerência.
Ao tentar t<TAB> no shell, 't*' era passado para a rotina de lookup. Contrariando meu conhecimento prévio, me pareceu que a responsabilidade por completar o nome estava sendo passada para o código específico de sistema de arquivos. Felizmente minha hipótese estava errada.

O que ocorria é que stubfs não possuia implementação da operação VOP_READDIR(9) de modo que realmente era impossível para o shell conseguir completar o nome. O mesmo então passava o nome com coringa para que, em último caso, o sistema de arquivos pudesse fazer algo.

A partir do changeset 14 o problema não mais existe e o mecanismo de completar nomes funciona normalmente.

20100617

Inicialização de SIMPLEQ

Seja q uma SIMPLEQ de queue(3) (BSDs e Linux). Para inicializá-la após a declaração, pode-se fazer:
q.sqh_first = NULL;
q.sqh_last = &q.sqh_first;

SIMPLEQ_HEAD_INITIALIZER apenas inicializa quando da declaração.

20100607

Carmen no Ubuntu 9.10

Os procedimentos para se usar CARMEN versão 0.7.4-beta seguem.

Instalação

Tendo as bibliotecas necessárias, algumas mudanças devem ser feitas - aqui descritas em formato diff(1) com comentários. Como se deve imaginar, $original e $changed são os caminhos para os diretórios onde está CARMEN original e modificado respectivamente.

src/Makefile.conf - remove a flag Werror do compilador.
diff $original/src/Makefile.conf $changed/src/Makefile.conf
83c83
< CFLAGS +=  -Wall -W -Werror -D_REENTRANT
---
> CFLAGS +=  -Wall -W -D_REENTRANT
95c95
< CXXFLAGS += -Wall -W -Werror -D_REENTRANT
---
> CXXFLAGS += -Wall -W -D_REENTRANT

src/configure - elimina (porcamente) a verificação da existência da imlib.
diff $original/src/configure $changed/src/configure
273a274,275
>   return $gtk_config;
> 

src/camera/quickcam/Makefile - adiciona caminho para headers específicos de x86.
diff $original/src/camera/quickcam/Makefile $changed/src/camera/quickcam/Makefile
10c10
< IFLAGS += -I$(KERNEL_HEADERS_DIR)
---
> IFLAGS += -I$(KERNEL_HEADERS_DIR) -I/usr/src/linux-headers-2.6.31-16/arch/x86/include
23c23
<  $(CC) -c $(32BIT_MODE) -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_INTELCPU=1 -DHAVE_MMX=1 -I$(KERNEL_HEADERS_DIR) -o ccvt_mmx.o ccvt_mmx.S
---
>  $(CC) -c $(32BIT_MODE) -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_INTELCPU=1 -DHAVE_MMX=1 -I$(IFLAGS) -o ccvt_mmx.o ccvt_mmx.S

Configuramos com as 'C++ tools' e os 'python bindings', usando o novo servidor de laser e sem nenhuma base, já que o que nos interessa no momento é apenas simulação do robô.
Assim se está apto a rodar a configurar e compilar.

Simulação de uma caminhada

Baseado em http://carmen.sourceforge.net/doc/main.html. Cada comando em um shell diferente.
% cd $changed/bin # caso não tenha instalado
% ./central
% ./param_daemon -r pioneer-I ../data/freiburg.map # pioneer parece não existir mais
% ./simulator
% ./robot
% ./localize
% ./navigator
% ./navigatorgui
% ./robotgui

Na janela de navigatorgui:
Clique em Place Robot e escolha um local para o ponto inicial da caminhada. O segundo ponto pode ficar no mesmo local.
Clique em Place Goal e escola o ponto final.
Clique em Go e observe tanto a visão do cenário (navigatorgui) como do robô (robotgui).

Apt com proxy no Ubuntu

Para usar os proxies configurados em /etc/apt/apt.conf sem problemas no shell, deve-se apagar (unset) as variáveis de ambiente gerais relativas a proxy (http[s]_proxy, etc).