Depois de alguma resistência, muita conversa com o meu PO (product owner para quem não conhece Scrum) Fabio Akita, acabei aqui em casa em um caso perfeito do uso do GIT.
Há um tempo atrás, comecei a mexer no pacote PAM PGSQL. Ele serve para o sistema procurar informações de usuários em uma base Postgresql. O que eu realmente queria é que o Postgresql tivesse o seguinte comportamento:
1) Um cliente começa uma autenticação no Postgresql, o postgresql passa essa autenticação para o PAM
2) O PAM analisa os módulos, e após passar por módulos adicionados por mim, voltasse a autenticação para o Postgresql
3) O banco autenticasse o cliente usando a pg_shadow
Basicamente queria a autenticação normal do Postgresql, porém com o PAM no meio do caminho, para usar o módulo pam_abl por exemplo.
Baixei o código fonte do projeto e saí programando. Até um certo momento que fiz um arquivo .spec para o projeto. Tirando o código que fiz para a autenticação acima, o resto era de boa utilidade para o projeto, então fiz mais duas cópias do projeto: uma "pristine" e outra só o patch do spec, para enviar para o projeto. Nesse ponto estou com 3 diretórios no computador: o original, um só com o spec e os patches para este funcionar, e outro com a minha cópia de trabalho.
O tempo passou e o dono do projeto lançou outra versão. O que acontece agora? O meu projeto está desatualizado. Não tem mais importância porque descobri que apaguei a cópia errada e não tenho mais o código. Aff.
Usando o git nesse caso seria uma mão na roda:
* baixo a primeira versão do projeto
* adiciono ao git
* crio um branch para o meu devel
* crio um branch para trocar patches com o dono do projeto
* baixo o projeto novo
* atualizo o meu desenvolvimento
Isso em comandos fica (o diretório é dentro do projeto):
git init
git add .
git commit .
git tag -a 0.6.5
git branch pg-pam-pg
git checkout pg-pam-pg
Tá, eu sei, roubei alguns comandos, mas a idéia é essa. Ainda acho que não tem nada de errado com o Subversion, pois se tem um projeto que não pretende abrir, não tem vantagem clara o git, mas sempre é bom conhecer outras ferramentas.
Em tempo. Refiz o patch e ficou muito melhor dessa vez!
sexta-feira, 17 de outubro de 2008
quarta-feira, 8 de outubro de 2008
Notificações no postgresql
Notificações são simplesmente eventos no Postgresql. Não é novidade para ninguém o uso de notificações: O unix possui o comando kill para mandar sinais para processos, Java Beans é baseado em eventos para atualizar as visões, ou seja, até aqui nenhuma novidade.
As vantagens que vejo em notificações em bancos de dados são para esses tipos de sistema:
* Aplicações com caches locais
* Replicação
As notificações eliminam a necessidade de pooling, que além de chato de fazer, pode sobrecarregar a base de dados.
Infelizmente em java a arquitetura do JDBC, apesar de muito bem feita, tem limitações e enviar eventos assíncronos é uma delas, mas outras linguagens como Python não possuem essa limitação.
Para implementar em java notificações, nada melhor que a documentação do driver: Listen / Notify
Em python, as linhas gerais são essas:
import psycopg2
import psycopg2.extensions
from select import select
conn = psycopg2.connect('dbname=ze')
conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
cur = conn.cursor()
cur.execute('LISTEN evento')
select([cur], [], [])
O código ficará travado até receber uma notificação de evento. O código está bem simples, mas em produção várias situações devem ser tratadas:
Apesar de quando a conexão morre o select retorna, pode existir alguma situação que isso não aconteça, então coloque um timeout e cheque a conexão (conn.status, conn.closed, cur.isready() etc.). O evento ficará ativo até alguma atividade no banco zerar ele (pode ser um 'select 1').
As vantagens que vejo em notificações em bancos de dados são para esses tipos de sistema:
* Aplicações com caches locais
* Replicação
As notificações eliminam a necessidade de pooling, que além de chato de fazer, pode sobrecarregar a base de dados.
Infelizmente em java a arquitetura do JDBC, apesar de muito bem feita, tem limitações e enviar eventos assíncronos é uma delas, mas outras linguagens como Python não possuem essa limitação.
Para implementar em java notificações, nada melhor que a documentação do driver: Listen / Notify
Em python, as linhas gerais são essas:
import psycopg2
import psycopg2.extensions
from select import select
conn = psycopg2.connect('dbname=ze')
conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
cur = conn.cursor()
cur.execute('LISTEN evento')
select([cur], [], [])
O código ficará travado até receber uma notificação de evento. O código está bem simples, mas em produção várias situações devem ser tratadas:
Apesar de quando a conexão morre o select retorna, pode existir alguma situação que isso não aconteça, então coloque um timeout e cheque a conexão (conn.status, conn.closed, cur.isready() etc.). O evento ficará ativo até alguma atividade no banco zerar ele (pode ser um 'select 1').
segunda-feira, 6 de outubro de 2008
Atulização profissional
É... já se passou 5 anos desde que formei e não fiz nada de atualização profissional. Quer dizer, tirei uma certificação e só.
O problema está que eu no final da faculdade aprendi a me virar, e sempre que fazia curso ficava frustado por ser básico demais. Outra coisa que estou levando muito em consideração é o seguinte: depois que se tem um emprego legal, o peso de certificações cai demais. Na minha opinião elas valem muito no início e depois vão valendo cada vez menos, a medida que se tem um monte de projetos no currículo e as melhores vagas são por indicação.
A minha estratégia agora é atacar uma pós. Não gosto muito de MBA, apesar de que algumas pessoas falarem que para mim seria legal. O que eu queria mesmo é um título de mestre, porém não fiz uma boa rede de contatos com professores na faculdade, e nem era um aluno exemplar. Terei que fazer um MBA mesmo ou então procurar alguma faculdade mais fácil de entrar no mestrado.
Apesar de tudo isso não fiquei parado. Aprendi python e estou começando a ficar bom nisso (na minha opinião, devo saber quase 1/3 de Python do que sei de java) e reaprendi C, mas enquanto não entregar algum projeto com essas tecnologias, é o mesmo que não ter feito nada.
O problema está que eu no final da faculdade aprendi a me virar, e sempre que fazia curso ficava frustado por ser básico demais. Outra coisa que estou levando muito em consideração é o seguinte: depois que se tem um emprego legal, o peso de certificações cai demais. Na minha opinião elas valem muito no início e depois vão valendo cada vez menos, a medida que se tem um monte de projetos no currículo e as melhores vagas são por indicação.
A minha estratégia agora é atacar uma pós. Não gosto muito de MBA, apesar de que algumas pessoas falarem que para mim seria legal. O que eu queria mesmo é um título de mestre, porém não fiz uma boa rede de contatos com professores na faculdade, e nem era um aluno exemplar. Terei que fazer um MBA mesmo ou então procurar alguma faculdade mais fácil de entrar no mestrado.
Apesar de tudo isso não fiquei parado. Aprendi python e estou começando a ficar bom nisso (na minha opinião, devo saber quase 1/3 de Python do que sei de java) e reaprendi C, mas enquanto não entregar algum projeto com essas tecnologias, é o mesmo que não ter feito nada.
sexta-feira, 3 de outubro de 2008
Assinar:
Postagens (Atom)