Konsole resize fix

Quem usa placa nvidia e KDE4 deve estar tendo problemas para redimencionar a janela do konsole.

Navegando pelo techbase encontrei uma solução:

nvidia-settings -a InitialPixmapPlacement=2 -a GlyphCache=1

Fica aí a dica!

[]’s

Histórico de múltiplas instâncias do bash

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

#Firulas de historico com o bash
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???

Agora pouco digitei um endereço errado e tive acesso à uma infeliz página:

WTF???

Outro teste:

OK, já passou da hora usar OpenDNS!

SU-8W com acentos no N800

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:

/usr/share/X11/xkb/symbols/nokia_vndr/su-8w

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:
SU 8W funcionando com acentos

PiTracker - tracker de imagem em QT4.

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:

Primeira pessoa aparecendo na imagem

Segunda pessoa aparecendo na imagem

Duas pessoas marcadas lado-a-lado

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

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

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:

export PYTHONSTARTUP=~/.pythonrc

Agora inicie o python e faça o teste.

Hello world para Native-Symbian

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

print “Hello World”

C++-Epoc

// Hello World in C++, Epoc style (for Symbian OS)
#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);
}

fonte: http://www.roesler-ac.de/wolfram/hello.htm

Dá um real ae, dá um real ae!

O que não se faz por uns trocados?

Sugestões para outro fim de semana em Curitiba..

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

A Nokia divulga suas intenções de adquirir a trolltech.

Com estas informações tenho duas perguntas:

Será a Nokia capaz de manter a qualidade da biblioteca QT?

Será que veremos uma licença LGPL para a libQT? Se isto acontecer, será o fim da libGTK?

Cursos e Palestras na Semana da Computação da UFPR

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

  1. if (file_exists(realpath($_GET[‘teste’] . “.php”))){
  2. echo ‘OK’;
  3. }
  4. else{
  5. echo ‘Fail’;
  6. }

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:

OK

[1] http://en.wikipedia.org/wiki/Null_character

Pesquisa de Hardware Br-linux, quesito mobilidade: Vencedor: Ubuntu! Eu já sabia!

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.

Mplayer/Totem Crashes… X11 error: BadAlloc

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:

MPlayer 2:1.0~rc1-0ubuntu9.1 (C) 2000-2006 MPlayer Team
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:

Section “Device”
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.