Konsole resize fix
25-Oct-08
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
Vou-me embora para Pasárgada
11-Jul-08
Vou-me embora para Pasárgada
Lá sou amigo do Reis
Novidades:
1 - Estou formado em Ciência da Computação pela UFPR.
2 - Estou deixando Curitiba. Após 22 anos na saudosa Curitiba estou deixando-a, e indo para Recife-PE.
Só tenho o que agradecer a esta magnífica cidade, à minha família que fica por aqui, e aos meus colegas da Mandriva, com os quais pude aprender bastante.
E esperar que este novo desafio seja tão bom e gratificante quanto o antigo.
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.
Aos colegas do planeta…
12-May-08
Receita de Bolo Brigadeiro
Ingredientes
- 1 xícara (chá) de açúcar
- 1 colher (sopa) de fermento em pó
- Meia xícara (chá) de chocolate em pó solúvel
- 2 xícaras (chá) de farinha de trigo
- 1 xícara (chá) de leite
- 5 ovos
Recheio
- Meia xícara (chá) de chocolate granulado
- Meia xícara (chá) de chocolate em pó solúvel
- 2 colheres (sopa) de manteiga
- 2 latas de leite condensado
Preparo:
Massa: Bata na batedeira, as claras em neve bem firme. Junte as gemas, uma a uma, e acrescente o açúcar. Despeje o leite aos poucos, sem parar de bater. Incorpore, por fim, delicadamente a farinha peneirada com o Chocolate em Pó e o fermento. Despeje em uma fôrma redonda (28 cm de diâmetro) untada e enfarinhada e leve para assar em forno quente (200º C) por aproximadamente 40 minutos. Deixe esfriar e corte-o ao meio.
Recheio e cobertura: Leve o Leite Moça, a manteiga e o Chocolate em Pó ao fogo, mexendo sempre. Quando ferver, abaixe o fogo e deixe cozinhar, sem parar de mexer, por cerca de 6 minutos ou até formar um creme consistente. Cubra uma metade do bolo com este creme, arrume a outra metade, espalhe o restante do brigadeiro com uma espátula ou faca e espalhe o chocolate granulado em toda a superfície. Leve para gelar e sirva.
E tenho dito!
Go Speed, Go away from here!
12-May-08
Duas horas a menos de vida e oito reais mais pobre, posso dizer que assistir Speed Racer acrescentou-me algo: Atualizei meu conceito de lixo.
E tenho dito!
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);
}
É uma cilada Bino!
06-May-08
http://www.informationweek.com/news/software/linux/showArticle.jhtml?articleID=207…
Acho que vale a pena ler os comentários antes de ler o texto:
Yes, the fact that the writer thinks that MEPIS is based on Mandriva shows how little knowledge he has, and how poorly researched his paper is..
Bug closed…
17-Apr-08

Dá um real ae, dá um real ae!
14-Apr-08

O que não se faz por uns trocados?


