Pessoal, o google me liberou mais convites pro wave eu e tratei de convidar o resto das pessoas que tinham pedido mas que ficaram de fora no sorteio. Acontece que ainda me restam 9 convites, e ai quem vai querer??? Dessa vez é sem sorteio, os 9 primeiros a pedirem vão levar!
Wave: mais convites!
Nov 3
modprobe nf_conntrack_ftp
iptables -A FORWARD -i ethX -s 192.168.0.0/24 -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -i ethX -s 192.168.0.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT
- ethX: interface da sua lan
- 192.168.0.0/24: faixa de ip da sua lan
Pronto, com esses 3 comandos seus usuários já estão livres para fazerem ftp passivo pra onde quiserem!
Wave: os convites chegaram!
Oct 21
Pessoal, é o seguinte, o google liberou uns convites pra mim, do post anterior 8 pessoas me pediram, mas por enquanto eu só tenho 5 convites, então eu fiz um sorteio, e os seguintes felizardos foram:
- Wagner Zacharias: wagnerzach@…
- Alexandre: amartani@…
- oLaCe: olacegrimore@…
- Caio Henrique: caio_henrique08@…
- Paulo Cruz: cruzpaulo@…
Os felizardos tem até o dia 28/10/2009 para se manifestarem confirmando que querem o convite, caso algum deles não se apresente eu farei um sorteio com os que ficaram de fora.
O contato deve ser por e-mail para contato<at>brunoribeiro.org, deve ser identificado o nome e o e-mail na listagem acima.
Um abraço! E vejo vocês no wave!
Pessoal, estou fazendo uma pesquisa, gostaria de saber de vocês, administradores de sistemas, qual é a ferramenta que está faltando para ser instalada em seus servidores? Alguém ai necessita de algum programa que realize a atividade X, Y ou Z?
Me ajudem com suas idéias! Obrigado!
Ps.: Ainda não esqueci daqueles que pediram convites pro wave não, mas é que ainda não liberaram convites lá.
Google Wave!
Oct 12
É pessoal, meu convite pra usar o google wave demorou mas chegou, queria saber se mais alguém ai está no wave, vamos trocar os ids pra ter mais gente com quem conversar lá! Os que quiserem convites deixem nos comments, assim que liberarem meus convites eu vou chamando.
Episódio piloto: O início
Em meados de 2006 depois de 3 anos cursando ciências da computação comecei a trabalhar como desenvolvedor em uma pequena empresa que tem o foco em servidores GNU/Linux. De início, minha função seria dar um gás nas pendências de desenvolvimento e aprender um pouco da parte de suporte à servidores e administração de redes, mas sempre com foco no desenvolvimento.
O entusiasmo era grande, afinal eu estava há um bom tempo sem trabalhar e a vida acadêmica não faz muito meu tipo. Nessa empresa tinha uma pessoa que era minha principal tutora e que foi responsável por me iniciar na linguagem de programação que hoje é a minha linguagem do coração, Python.
Comecei por pequenos projetos, já que eu não tinha muita experiência com Python, e aos poucos fui aprendendo cada vez mais sobre essa maravilhosa linguagem, dinâmica, simples, poderosa (batteries included!) e pra integrar com GNU/Linux é ótima! A maioria das ferramentas que eu desenvolvia deveria de ter integração íntima com ferramentas do sistema, o que me fez conhecer as entranhas de uma distribuição (Debian) como poucos conhecem e saber aproveitar melhor tudo que o sistema tinha para oferecer.
Durante algum tempo eu fui guiado por esse tutor, até que o mesmo saiu da empresa e eu me tornara o developer solo! Mal eu sabia da batalha que viria pela frente e das dificuldades que seriam desenvolver com uma equipe de um homem só.
Foi então que surgiu meu primeiro projeto e seria desenvolvido completamente do zero! Era um sistema que pudesse fazer replicação remota de servidores, fazendo com que tivéssemos uma cópia exata de um servidor localizado em outro lugar físico, que em caso de falha seria substituido por esta cópia. Pronto, diversão garantida, estudar a melhor forma de fazer essa replicação, criar rotinas de agendamento, arquivos de configuração pra cada servidor que precisasse ser replicado, logs, etc, etc.
A primeira versão do programa finalmente ficou pronta depois de alguns meses de programação e testes. Bem, estava pronta, o código era feio, não orientado à objeto, uma verdadeira zona! Funcionar até que funcionava, mas só eu entendia aquilo, hehehe.
E assim começou a saga do desenvolvedor solitário, com um programa que funcionava bem mas era mal escrito, não tinha documentação, sem controle de versão, etc, etc.
Cenas do próximo capítulo:
Após algum tempo de funcionamento do primeiro programa e a correção de problemas observados durante o uso, era chegada a hora de implementar novas funcionalidades e só restava uma decisão a ser tomada antes de por a mão na massa: Implementar no código atual ou reescrevê-lo de maneira mais inteligente e que facilitasse na adição de futuras funcionalidades?
Como diz o título, estou vendendo meu iPod Touch 8GB da primeira geração. Ele está em bom estado, a parte da frente não tem nenhum risco, já a de trás está bem arranhada por questão do material que a apple usou ter a característica de arranhar facilmente (a primeira vez que botei no bolso já arranhou). Ele tem quase 1 ano de uso, a garantia dele vale até novembro de 2009, com nota fiscal, foi comprado na fastshop. A bateria dura muito tempo, por cima eu chutaria umas 15 horas ininterruptas de mp3, pode ser que dure até mais, nunca parei pra medir. Quero R$250,00 + Frete. Aos interessados me contatar em ipod@brunoribeiro.org
Ps.: Vai jundo a caixa novinha dele, com os manuais, cabo pra conectar no computador, adaptador para dock e um negócio de plástico que eu nunca descobri pra que serve, tá até embalado hauhauahuha.
Seguem as fotos (sou péssimo fotógrafo hahaha):
Hoje enfrentei um problema difícil no trabalho, um cliente pediu para recuperar um backup de um banco que acidentalmente teve seus dados apagados, como levei algum tempo para juntar as peças e montar o quebra cabeça resolvi postar aqui pra compartilhar com todos essa experiência.
Então, vamos ao cenário:
- Cliente pede para recuperar o backup de um banco no MySQL
- Percebi que não tinhamos backup em dump daquele banco, somente backup em tarball de todo o /var/lib/mysql (normalmente é lá que ficam os arquivos contendo os dados e índices dos bancos de dados)
A partir deste ponto normalmente se pensa que basta recuperar o diretório com o nome do banco de dentro do tarball, ou seja extrair do tarball /var/lib/mysql/nome_banco. Acontece que isso geralmente funciona, mas para bancos com tabelas MyISAM. Bancos com tabelas InnoDB possuem uma pequena diferença no MySQL, seus dados não ficam autocontidos no diretório de nome do banco, mas sim dentro do arquivo /var/lib/mysql/ibdata1, este arquivo vai conter os dados de todos os bancos que utilizarem a engine InnoDB, e é justamente por causa disso que NÃO podemos restaurar o backup de um banco específico sobrescrevendo o ibdata1, pois senão iremos voltar dados para o passado no banco de dados de TODOS os usuários!!!
O que então precisamos fazer?
Pré-requisitos:
- Ter uma máquina extra (física ou virtual)
- O MySQL instalado nesta máquina extra e sem estar sendo utilizado em produção
A primeira coisa que devemos fazer é copiar para a máquina extra o /var/lib/mysql/ibdata1 e o /var/lib/mysql/nome_do_banco que foram extraídos do nosso tarball com o backup. Antes de fazer alguma alteração nos dados do MySQL vamos parar o banco com o comando (em distribuição debian):
invoke-rc.d mysql stop
Depois de parar o MySQL vamos fazer uma cópia do /var/lib/mysql só por precaução:
cp -a /var/lib/mysql /var/lib/mysql.20090617
Agora vamos sobrescrever o /var/lib/mysql/ibdata1 com aquele que extraímos do tarball e em seguida copiar o diretório contendo os demais arquivos do banco, aquele /var/lib/mysql/nome_do_banco.
Para garantir vamos ajustar as permissões:
chown -R mysql:mysql /var/lib/mysql/ibdata1 /var/lib/mysql/nome_do_banco
Neste ponto já podemos levantar o MySQL novamente:
invoke-rc.d mysql start
Nos logs do MySQL você vai perceber que ele vai acusar diversos erros, pois os dados de outros bancos que estão contidos no ibdata1 não possuem o seus respectivos diretórios no /var/lib/mysql, apenas ignore estes erros já que você está trabalhando em um sistema de produção, o objetivo aqui é conseguir um dump dos dados do banco que precisa ser recuperado.
O próximo passo então é gerar o dump dos dados com o comando:
mysqldump -uroot -p"senha_de_root" --databases nome_do_banco > dump.sql
Caso o MySQL te retorne erros de conexão ao executar esse comando você deve tentar novamente até conseguir, isso acontece por causa daqueles erros que citei anteriormente pelos bancos que não existem (comigo não foram mais do que duas tentativas).
Bem, é isso ai, agora já temos um arquivo com o dump de todos os dados contidos no banco que precisamos recuperar, basta enviar para o servidor de produção e importar, mas o comando pra fazer isso eu vou deixar como lição de casa!
Um abraço e até a próxima!
Muita gente vai querer me apedrejar depois de um título desses, mas é que quem me conhece sabe que não troco python por nenhuma outra linguagem. Já programei em Java no passado mas nunca gostei muito.
Enfim, estou fazendo meu TCC e meu projeto vai ser uma aplicação web para gerência de Sprints de software e pensei em fazer a GUI utilizando o Google Web Toolkit [1] ou somente GWT para os que já conhecem.
O GWT possibilita que você programe toda sua GUI em Java e depois compile para JavaScript. Muitos aqui vão perguntar: “tá certo, mas e por que não programar diretamente em JavaScript? Ainda mais que você não gosta de Java?”
E a minha resposta é a seguinte:
- Plugin para o Eclipse [2] desenvolvido pela própria Google
- Compatibilidade cross-browser sem precisar se preocupar
- Suporte à internacionalização e localização
- O Eclipse é cheio de frescuras (verificação de sintaxe, debugging, geração automática de trechos comuns de código, etc) que me ajudam, já que não sou tão íntimo com Java
- E outras vantagens
Até agora fiz somente o tutorial inicial [3] sobre GWT mas já deu pra pegar bem como funciona o negócio. Gostei e se até o final do meu TCC continuar gostando por que não utilizar para meus próximos projetos?
Fica ai a dica para o pessoal que programa bastante pra web e as vezes tem que se virar fazendo as interfaces bonitinhas pros usuários exigentes mas tem pouco tempo pra isso: dêem uma change ao GWT!
Ahhh e sem esquecer, toda a parte de servidor da minha aplicação web vai ser escrita em Python, utilizando o framework Django e sendo servido pelo Google App Engine [4]!
[1] http://code.google.com/webtoolkit/
[3] http://code.google.com/intl/en/webtoolkit/tutorials/1.6/gettingstarted.html
Como muitos já devem estar sabendo a esta hora é que o Google mostrou ao mundo seu mais novo projeto chamado Wave. Depois de assistir o vídeo [1] de 1:20h de duração notei que parece ser um projeto com bastante futuro pela frente.
O Wave é uma espécie de e-mail, instant messenger, editor de documentos, álbum de fotos, etc… e tudo de forma colaborativa! O mais interessante de tudo isto é que o Google planeja disponibilizar todo o código fonte da plataforma, de maneira que cada empresa vai poder ter seu servidor Wave pra alocar seus domínios e desfrutar de todas as ferramentas que o Wave disponibiliza. Eu vejo o Wave como um futuro substituto ao e-mail, uma vez que toda a integração que o Wave traz parece tornar a comunicação muito mais fácil.
Já baixei a API pra fazer robots em python e assim que sobrar um tempo vou começar a brincar com o Wave.
Só nos resta esperar quando o Google vai disponibilizar o código do seu servidor e cliente de referência para começarmos a botar em produção nossos próprios servidores Wave!
Pra se ter uma idéia do que pode ser feito com a API é só dar uma olhada no blog [2] de desenvolvimento do Wave.






