Isto pode ser útil para quem trabalha com várias janelas de terminal.
O comando history do bash (também o CTRL+R) guarda apenas o histórico da última sessão aberta, o que é um problema para quem usa mais de um terminal (eu uso o conjunto Xterm + screen).
Para corrigir isto, adicione em seu .bashrc
export PROMPT_COMMAND=”history -a”
export HISTFILESIZE=2000
shopt -s histappend
Trabalhe com quantos terminais quiser, e guarde o histórico de todos!
[UPDATE 07/08/2008]: Tinha um erro na última linha. Obrigado André Matos e Sérgio Silva
WTF???
25-Jul-08
SU-8W com acentos no N800
30-Jun-08
Estive me perguntando porque os acentos não funcionam corretamente no SU 8W com o N800. Decidi investigar.
Quando eu estava tentando sincronizar o teclado com o N800 pude perceber que o SU 8W é um teclado pré-configurado, e com um pouco de paciência encontrei o arquivo de configuração do mesmo:
Após 5 minutos estudando a sintaxe, em 10 minutos é possível perceber que falta alguma coisa: Não há, pelo menos, as configurações para português, espanhol e italiano. Agora eu entendo porque a configuração de layout português não funciona.
Já que não existe uma configuração para o idioma definido, utiliza-se o us_intl, certo? Mas a primeira linha da definição do us-intl tem um comentário preocupante: “I can’t belive! It’s not intl”. Parece que a tafera não será assim tão simples.
Para propósito de teste, não criei um novo mapa de teclado para pt_BR e sim editei o us_intl. O resultado ficou aceitável, e finalmente é possível ter um teclado funcional em português. O resultado você pode entrar aqui.(Não esqueça de fazer backup antes de sobrescrever)
Nos próximos dias ponho aqui a solução definitiva.
Resltado final:

PiTracker - tracker de imagem em QT4.
18-Jun-08
Seguindo a linha do “Liberando trabalhos da UFPR“, estou liberando o código do PiTracker.
Projeto da matéria de Processamento de Imagens, o objetivo era fazer um tracker de pessoas em um determinado vídeo.
Na especificação havia:
- O vídeo será uma sequência de imagens PPM nomeada da forma <nome>_<seq>.ppm. Ou seja, se a sequência se chamar tracker, o primeiro arquivo será o tracker_00.ppm.
- O vídeo será testado em dois casos: No primeiro haverá uma pessoa, no segundo duas.
- As pessoas devem ser marcadas com cores diferentes, e a mesma cor para cada uma das pessoas.
- Em nenhum momento as pessoas se cruzam.
Assim fica fácil! =)
Segue algumas screen shots:




Como de costume, o código está no SVN em:
http://danilocesar.com/svn/pitracker/
E as imagens podem ser encontradas no site da matéria.
Liberando trabalhos da UFPR
01-Jun-08
Estou prestes a me formar, e lembrando-me de um convite do Arthur Furlan, decidi que estava na hora de liberar alguns trabalinhos legais que escrevi na faculdade.
Servidor/Cliente FTP usando raw socket.
Acho que este é o que será mais útil, principalmente aos meus colegas de Universidade.
Trabalho de redes1, a missão era implementar um cliente/servidor FTP baseado no Kermit utilizando raw sockets. Algumas pessoas fizeram utilizando UDP, mas ae fica sem graça né?! =)
Para controle de fluxo, foi implementado o pára-e-espera. Toda mensagem deve retornar um ack/nack. Obviamente, não há TCP nem IP, a “conexão” é feita sem endereçamento pelo cabo de rede. Os cabos devem ser ponto-a-ponto (até pode ser utilizado um hub, mas provavelmente ele mate todos os pacotes por serem inválidos).
Para detectar erros utilizo paridade-par (sux), e caso o cabo de rede seja removido e colocado depois de pouco tempo, o sistema deve continuar de onde parou. O arquivo final precisa ser consistente. Isto é muito complicado usando apenas paridade par, logo nas mensagens de fim de arquivo envio como dado o MD5, para garantir consistência.
O tamanho de cada arquivo nos pacotes está incorreto. Esta informação está sendo ignorada.
O resto está descrito no arquivo: Mensagens de atá 255 bytes, etc etc.
Como estava aprendendo GTK+ na época, fiz umas modificações para incluir uma interface gráfica. Ficou meio estranho pois incluí isto depois que o trabalho já estava pronto. De qualquer forma, para compilar esta versão, utilize o comando “make gui”
No Unix, o pacote deve ser puxado com o comando:
svn co http://danilocesar.com/svn/redes1
Outro dia publico outros códigos.
[]‘ s
Danilo Cesar
Auto-completar no python do Mac OsX
27-May-08
Certa vez o Ademar comentou que o python tinha auto-completar por padrão. Pessoalmente nunca tinha percebido isto, e conversando com o Ramiro percebi o porquê: Mac OS X e Windows não inicializam os módulos readline e o rlcompleter sozinhos.
Procurando um pouco vi que habilitá-los é fácil.
Primeiro edite o arquivo ~/.pythonrc
#Enable syntax completion
try:
import readline
except ImportError:
print "Module readline not available."
else:
import rlcompleter
readline.parse_and_bind("tab: complete")
Após isto, em seu ~/.bashrc adicione:
Agora inicie o python e faça o teste.
Hello world para Native-Symbian
06-May-08
Certa vez eu quis explicar a um amigo porque escrever código em python para celular era mais legal que escrever código em C (native-symbian e não OpenC). Acho que hoje talvez eu consiga.
Segue os exemplos:
Python
C++-Epoc
#include < eikapp.h >
#include < eikdoc.h >
#include < eikappui.h >
class CHelloWorldAppUi;
class CEikApplication;
class CHelloWorldAppView;
class CHelloWorldApplication : public CEikApplication
{
public:
TUid AppDllUid() const;
protected:
CApaDocument* CreateDocumentL();
};
class CHelloWorldDocument : public CEikDocument
{
public:
static CHelloWorldDocument* NewL(CEikApplication& aApp);
static CHelloWorldDocument* NewLC(CEikApplication& aApp);
~CHelloWorldDocument(){};
public:
CEikAppUi* CreateAppUiL();
private:
void ConstructL() {};
CHelloWorldDocument(CEikApplication& aApp){};
};
class CHelloWorldAppUi : public CEikAppUi
{
public:
void ConstructL();
CHelloWorldAppUi(){};
~CHelloWorldAppUi(){};
};
static const TUid KUidHelloWorldApp = {0×10005B91};
GLDEF_C TInt E32Dll(TDllReason )
{
return KErrNone;
}
EXPORT_C CApaApplication* NewApplication()
{
return (new CHelloWorldApplication);
}
CApaDocument* CHelloWorldApplication::CreateDocumentL()
{
CApaDocument* document = CHelloWorldDocument::NewL(*this);
return document;
}
TUid CHelloWorldApplication::AppDllUid() const
{
return KUidHelloWorldApp;
}
CHelloWorldDocument* CHelloWorldDocument::NewL(CEikApplication& aApp)
{
CHelloWorldDocument* self = NewLC(aApp);
CleanupStack::Pop(self);
return self;
}
CHelloWorldDocument* CHelloWorldDocument::NewLC(CEikApplication& aApp)
{
CHelloWorldDocument* self = new (ELeave) CHelloWorldDocument(aApp);
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
CEikAppUi* CHelloWorldDocument::CreateAppUiL()
{
CEikAppUi* appUi = new (ELeave) CHelloWorldAppUi;
return appUi;
}
void CHelloWorldAppUi::ConstructL()
{
BaseConstructL();
_LIT(message,”Hello!”);
CAknInformationNote* informationNote = new (ELeave) CAknInformationNote;
informationNote->ExecuteLD(message);
}
Dá um real ae, dá um real ae!
14-Apr-08

O que não se faz por uns trocados?
Relexões de um desocupado: Breve relato sobre peças de teatro:
PEQUENAS CAQUINHAS É MUITO BOM! MESMO!
Dentro de alguns minutos irei assistir a peça ‘Laranja Mecânica‘, adaptação do livro de mesmo nome. Atualizarei este post com a minha opinião quando voltar.
E que venha Tangos e Tragédias!
[Update 31/03/2008]: Laranja Mecânica é meio trash…
Extra, extra… Nokia adquire TrollTech
28-Jan-08
Sei que já está sendo bem divulgado, mas não custa nada divulgar aqui também.
Nos dias 22 a 26 de Outubro de 2007, o CEI, Centro de Estudos de Informática da UFPR, e o CATEI, Centro Acadêmico de Tecnologia da Informação da UFPR, estão realizando a a Semana da Computação. Nesta, será ofertado vários mini-cursos e palestras, dentre eles posso citar:
Palestras:
- Construindo e Construindo pacotes Debian
Será oferecida pelo Faw, do Debian-PR. Interessante para quem quer manter pacotes pro Debian, Ubuntu ou até mesmo pro Maemo - Overlays no OpenLDAP: facilitando a vida do administrador
Ofertada pelo Andreas, da Mandriva Conectiva. - IA vs Programação convencional
Cursos:
- PHP - Arthur Furlan - Trabalhei com o cara, ele é fera na parada.
- Python - Luiz Carlos Geron - Já fiz este curso, uma execelente forma de iniciar-se na linguagem.
- Programação em Qt - Gustavo Boiko - O Cara do Qt4 da Mandriva.
Faça sua inscrição, escolha o que quer fazer, e nos vemos lá!
ps.: Brincadeiras à parte, o Boiko prometeu-me provar durante o curso que QT é muito mais que um toolkit gráfico. Essa eu quero ver! =)
PHP e Null Bytes issues
24-Aug-07
Aparentemente esta verificação é bastante segura né?
Infelizmente não. O PHP usa o padrão de strings usado em C (aquelas terminadas com ‘\0′), o que gera um problema bastante conhecido chamado de Null Byte issue [1].
O que acontece se seu $_GET['teste'], aparentemente seguro, tiver um ‘\0′?
Sua função realpath vai verificar apenas o $_GET['teste'] e nem vai saber que existe um “.php”
Faça o teste:
http://localhost/labs/teste.php?teste=/etc/passwd%00
(%00 é o código hexadecimal aceito pelos browsers para o \0)
E o resultado:
Saiu hoje parte do resultado da campanha sobre hardware do Br-Linux. E o quesito foi: Mobilidade.
Vendo os resultados pude constatar uma coisa: O maior grupo de usuários de notebooks com linux no Brasil (dos que participaram da pesquisa) rodam Ubuntu ou derivados. E a maioria esmagadora roda um debian’s like (debian, ubuntu, Kurumin-nheca).
Fico um pouco triste pois esperava uma melhor classificação do Mandriva. Afinal, o OEM da Positivo é mandriva e estou usando a versão 2007-1 aqui em casa e a qualidade do SO é muito boa.
Há um tempo que venho percebendo problemas para executar vídeos com o Totem/Mplayer em meu notebook.
Esta a tentar assistir o vídeo do Marcelo e estes programas insistiam em finalizar sozinhos acusando o erro de alocação de recursos. A mensagem era a seguinte:
CPU: Intel(R) Pentium(R) M processor 1.60GHz (Family: 6, Model: 13, Stepping: 8)
CPUflags: MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1
Compiled with runtime CPU detection.
Can’t open joystick device /dev/input/js0: No such file or directory
Can’t init input joystick
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.
[Ogg] stream 0: video (Theora v3.2.0), -vid 0
Ogg file format detected.
VIDEO: [theo] 1026×769 24bpp 10.000 fps 0.0 kbps ( 0.0 kbyte/s)
open: No such file or directory
[MGA] Couldn’t open: /dev/mga_vid
open: No such file or directory
[MGA] Couldn’t open: /dev/mga_vid
[VO_TDFXFB] Can’t open /dev/fb0: No such file or directory.
[VO_3DFX] Unable to open /dev/3dfx.
———————————————————
Opening video decoder: [ffmpeg] FFmpeg’s libavcodec codec family
[theora @ 0x8939638]Missing extradata!
Could not open codec.
VDecoder init failed :(
Opening video decoder: [theora] Theora/VP3
VDec: vo config request - 1026 x 769 (preferred colorspace: Planar YV12)
VDec: using Planar YV12 as output csp (no 0)
Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
VO: [xv] 1026×769 => 1026×769 Planar YV12
Selected video codec: [theora] vfm: theora (Theora (free, reworked VP3))
———————————————————
Audio: no sound
Starting playback…
X11 error: BadAlloc (insufficient resources for operation)
MPlayer interrupted by signal 6 in module: vo_check_events
- MPlayer crashed. This shouldn’t happen.
It can be a bug in the MPlayer code _or_ in your drivers _or_ in your
gcc version. If you think it’s MPlayer’s fault, please read
DOCS/HTML/en/bugreports.html and follow the instructions there. We can’t and
won’t help unless you provide this information when reporting a possible bug.
Entrei várias referências a este problema, mas o que resolveu mesmo foi a solução que encontrei no fórum do fedora: Reconfigurar o drive i810, usado pela placa de vídeo, com a opção LinearAlloc.
E o Xorg.conf ficou assim:
Identifier “Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller”
Driver “i810″
BusID “PCI:0:2:0″
Option “LinearAlloc” “8160″
EndSection
E está pronto. Claro, só vai fucionar para quem usa i810. Mas já ajuda aos paraquedistas que caírem por aqui com o mesmo erro.

