metalstream

Quinta 13 Agosto 2009 at 6:57 pm A um 1 atrás eu me formei (mas até hoje não busquei o diploma) e como projeto final, eu fiz um cliente Jabber/XMPP que armazena links de feeds XML (RSS ou Atom) no PubSub, tudo em JavaScript. Que no fundo é um cliente que agrega feeds XML a cada contato. Meu primeiro orientador achou que eu estava pirando muito e podou um tantão o que eu iria implementar. Em apenas dois dias eu fiz o cliente, usando como base um exemplo da jsjac. Fiz uma extensão da jsjac que chamei de pubsub.js e outra para recuperar as fotos dos usuários chamada vcard.js. Usei a jQuery pra fazer algumas coisas no cliente, mas como não pude pirar muito naquela época, tá tudo bem simples. Espero voltar a mexer nesse projeto logo.

Rodei um demo aqui: http://metalstream.alucinados.com/

E quem quiser mandar patch, eu uso git, é só rodar um:
git clone http://git.alucinados.com/git/metalstream.git

Alguns screenshots dele funcionando:
Login:
Login
Cadastrando um Feed:
Cadastrando um Feed
Lendo um Feed:
Lendo um Feed

patch pro zoneminder

Quinta 04 Junho 2009 at 7:47 pm Eu uso o ZoneMinder aqui em casa, que é um software para CFTV (Circuito Fechado de Televisão). Tempos atrás eu bloguei falando do zoneminder. Hoje, quando atualizei para versão 1.24.1-1 notei a seguinte mensagem:
Warning: Cannot modify header information - headers already sent by
(output started at /usr/share/zoneminder/lang/pt_br.php:751) in
/usr/share/zoneminder/includes/functions.php on line 97

Na hora eu já imaginei o que era. Abri o arquivo "/usr/share/zoneminder/lang/pt_br.php" e lá estava, uma linha em branco aṕos a tag ?>, que é a tag que fecha comandos PHP. Olhei os outros arquivos de línguas e alguns deles também possuíam a linha em branco. Então, lá vou eu fazer um patch pra corrigir esse erro. Pensei um pouco, fiz alguns testes e não consegui. Como sou preguiçoso fui logo perguntar pra alguns amigos que também não puderam me dar uma solução na hora. Daí, evitei a fadiga e encontrei o comando abaixo:
sed '${/^$/d}' arquivo

Esse comando só removia uma única linha, eu tinha casos mais de uma linha... Procurei mais e achei um exemplo bem legal:
sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' arquivo

Com esse comando, era só eu fazer um loop nos arquivos de línguas, gerar um novo arquivo com as modificações, executar o diff para comparar as mudanças e salvar num arquivo para enviar pros mantenedores do zoneminder. Acabei escrevendo o script abaixo:
#!/bin/bash

files=$( find . -name "*.php" )

# remove as linhas em branco do final do arquivo e cria um arquivo temporário
for file in $files; do
sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' $file > "$file.new"
done

# faz a comparação entre o arquivo antigo e novo e salva
for file in $files; do
diff -burN $file "$file.new" >> patch.metal
done

# remove os arquivos temporários
find . -name "*.new" | xargs rm

Aṕos executar o script acima, abri o arquivo gerado, o "patch.metal" e fui conferir. Aparentemente tudo certo, agora vou abrir o bug e torcer pra ele não ficar mais de um ano pra ser fechado.

UPDATE:

Bug reportado, #531910, agora vamo ver...

Como alterar um commit feito no Git que esta no meio da árvore?

Quarta 27 Maio 2009 at 4:48 pm ( comecei a escrever esse post em 02 de setembro 2008; mas só agora publicando, antes tarde do que nunca =P )

Como alterar um commit feito no Git que esta no meio da árvore?
Fiz essa pergunta pro kov na mesma época que comecei a escrever e essa foi a resposta dele na época:

Primeiro é preciso criar uma tag para identificar o commit que você quer editar.
Nesse exemplo, estou editando o commit 'a9851296d5eb52161fcb151d58f4aaee3f9ce416' e criando a tag 'bad'

git tag bad a9851296d5eb52161fcb151d58f4aaee3f9ce416


Colocar o commit no topo
git checkout bad


Agora é fazer as modificações nescessárias...


Adicionar os arquivos editados no HEAD
git add 'arquivos alterados'


Refazer o commit
git commit --amend


Reconstruir o histórico
git rebase --onto HEAD bad master

git checkout master


Recentemente ele me mostrou outras maneiras mais elegantes. Mas fica pra quem quiser deixar nos comentários =D

Pyro (PYthon Remote Objects)

Sexta 28 Setembro 2007 at 4:53 pm

Pyro



Encontrei o Pyro quando precisei desenvolver um sistema usando chamadas RPC para matéria de Sistemas Distribuídos.

Pyro (PYthon Remote Objects) é um framework para o desenvolvimento de sistemas distribuídos, escrito em python. A licença na qual ele é distribuído é a MIT Software License. O Pyro é uma super alternativa à RMI, DCOM, etc.

Jogo da Velha usando sockets

Terça 28 Agosto 2007 at 8:18 pm Semestre passado cursando a disciplina Redes II, tive que desenvolver um Jogo da Velha usando sockets. E como sempre deixo tudo pra última hora... Virei a noite/madrugada na casa do cascardo e conseguimos fazer uma versão inicial, e até bem jogável, do Jogo da Velha. Usamos GTK2 e Glib2. Era parte do TP fazer uma pequena documentação. O Jogo é GPL.

Player 1

Player 2

Plataforma Xemele

Domingo 18 Março 2007 at 6:48 pm Quem bloga os males espanta! ( já diziam vários amigos meus =P )

Quem se lembra da Plataforma Agregadora Xemele?!

CMS "Quântico" + Agregador XML/Jabber "Boto"

A Pesquisa e Desenvolvimento dela ainda continua mesmo depois de 3 meses sem mexer em código e com a nossa equipe (eu, Thiago Silva, Marcos Machado, Daniel Pádua) desfeita.

Conversando com todos eles, acabei tirando o desenvolvimento do Quântico/CMS de dentro do minC e coloquei no GNA. Agora o código esta mais "aberto", de fácil acesso e eu não preciso me preocupar com gerenciamento de servidor...

A idéia é rodar um wiki e usar o domínio xemele.org com tudo que nós já produzimos de documentação.

Pra baixar os fontes do Quântico/CMS:

Checkout via SVN protocol (TCP 3690):
svn co svn://svn.gna.org/svn/xemele/trunk xemele

Checkout via http:
svn co http://svn.gna.org/svn/xemele/trunk xemele

Links do Projeto:

Instando o Quântico/CMS
Manual de Desenvolvimento Quântico/CMS
Manual de Utilização do Quântico/CMS
Arquitetura do Quântico/CMS
Agenda de Produção
GNA TODO

feed2book

Sábado 02 Dezembro 2006 at 6:52 pm Semana passada eu voltei a mexer no meu "gerador de livro" e cabei rebatizando o projeto para . A idéia inicial do projeto era imprimir o "alma alucinada" em "formato livro". Agora, eu quero deixar ele funcionando pra qualquer blog. (super treta) =P

O próximo passo do projeto, é criar serviços como:

A pessoa cadastra seu feed ( ou ). (Uma espécie de agregador, tipo o bloglines). Com isso, essa pessoa pode editar os posts, trocar a ordem, apagar outros... Fazendo assim todo um esquema de edição...

Ela ainda pode querer acrescentar outros textos ao livro. Seria algo como recuperar todos as publicações que possuem a "Lua" e acrescentá-los ao livro.

Com a edição pronta, essa pessoa pode escolher o tipo de papel, cor, etc. E ainda, pode cadastrar um endereço pra onde o livro deve ser entregue. Esse livro, pode até mesmo ser um presente pra outra pessoa...

Resumindo: produção + edição + impressão + distribuição

Quero pirar em serviços assim, quem quiser ajudar será bem vindo =)

Hospedei o código do feed2book no . Eles também usam o , mesmo motor do . Lá tem um , então rola de navegar no código ou então baixá-lo. Estou usando ...

Checkout via protocolo SVN (TCP 3690):
svn co svn://svn.gna.org/svn/feed2book/trunk feed2book

Checkout via http:
svn co http://svn.gna.org/svn/feed2book/trunk feed2book


Pra quem quiser ir testando => http://metal.alucinados.com/feed2book

Também criei uma lista de discussão, é só chegar chegando...

Super Console Firefox

Segunda 30 Outubro 2006 at 4:24 pm Extensão foda do que habilita um super de erros, bem melhor do que original que vem na versão 1.5.

Ele divide os erros em categorias facilitando a vida do desenvolvedor. Fundamental para designers ou programadores, principalmente depois que o resolveu complicar o listando erros de junto com erros de .


segue o link: https://addons.mozilla.org/firefox/1815/

php-gettext

Terça 20 Junho 2006 at 1:54 pm O hansfn respondeu meu post no fórum do Pivot. Eu já tinha conversado com ele via ICQ e já sabia que ele era contra o GNU Gettext no Pivot. Mas não sabia porque; Agora, eu sei...

Só não queria que ele fosse o primeiro a responder o meu post, mas neh... Agora, depois de quase 1 mês, duvido que mais alguém do Pivot Team vai ter coragem de falar algo =(

Com a resposta dele, eu fiquei sabendo que existe uma implementação escrita em PHP para o GNU Gettext, o php-gettext. Essa implementação lê diretamente os .MO (binários) e é uma alternativa, incompleta, ao módulo GNU Gettext.

Pesquisei no repositório da debian pra ver se alguém estava usando o php-gettext. E não é que tinha: moniwiki, squirrelmail, tutos. Mais uma lib que nenhum dos mantenedores separou...

Como estou empacotando o scuttle, fui ver como ele usava o GNU Gettext e descobri que ele também usa o php-gettext.

Decidi mandar um email pra lista de Aplicações WEB da debian perguntando qual a política para o GNU Gettext, já que existe um módulo pra ele no PHP, e esse módulo já é compilado no PHP da debian. Só que até agora não tive respostas...

E como o cascardo disse: "Se não existe política, faça ela você mesmo!". E é o que eu estou fazendo, abri um ITP (Intent To Package) para o php-gettext, já fiz o pacote e coloquei ele como dependência no pacote do scuttle. E logo que ele cair na unstable, vou abrir um BUG pra cada sistema (moniwiki, squirrelmail, tutos) fazer o mesmo...

Pivot com GNU Gettext

Quinta 01 Junho 2006 at 11:44 am O sistema que eu uso para gerenciar esse Blog, é o Pivot. Apanhei um tantão para traduzir o Pivot 1.30 RC2 para o Português/Brasil, pois eu não sabia quais string foram adicionadas ou alteradas.

Conversando com o hasfn, que faz parte do Pivot Team, ele me indicou o sistema que ele usa para gerenciar as traduções. Achei confuso... Esse sistema de Array do Pivot é muito tosco, eu prefiro GNU Gettext =D

Eu sou desenvolvedor, então tenho familiaridade com códigos. O sistema de Array de Línguas não deixa pessoas que não sabem programar à vontade na hora de traduzir... É bem mais agradável isolar as strings.

Hoje eu postei no fórum do Pivot um script para conveter o Sistema de Array Línguas para GNU Gettext. Vamo esperar e ver o que vai rolar.