sábado, 5 de dezembro de 2009

Configurando BIND para utilizar o servidor DNS Público do Google

O Google lançou esta semana o Google Public DNS, visando aumentar a velocidade de resolução de nomes de Internet.

A resolução de DNS (Serviço de Resolução de Nomes) é responsável por converter o nome de um site em endereço IP (www.google.com --> 64.233.163.163). Esse serviço é utilizado sempre que seu computador precisa de um endereço de Internet. Cada vez que um novo nome é convertidio em endereço IP, o resultado desta conversão é guardado em uma tabela de acesso rápido em seu computador para agilizar acessos futuros, ou seja, uma tabela cache ou simplesmente cache.

Um exemplo simples é resolver www.google.com. A primeira vez que você acessar o domínio, o serviço de DNS de seu computador vai verificar o cache local e retornar o endereço IP, mas como é a primeira vez que você tenta acessar o Google hoje, não vai encontrar este nome de domínio em sua tabela cache. Quando isso acontece, uma requisição será feita ao seu servidor de DNS.

Um servidor de DNS também faz um cache dos últimos domínios pesquisados, porém vai recorrer aos Root Servers da Internet caso também não tenha o domínio cadastrado. E assim funciona o DNS e toda a Internet como a conhecemos hoje. A grande questão é entender o problema que o Google Public DNS Resolve.

O primeiro problema é que o tempo de acesso entre computadores na Internet pode ser medido em milisegundos (uma eternidade em termos de transmissão de dados :-) ). O tempo de resposta (Round Trip Time - RTT) é simplesmente o tempo que um computador demora para enviar um pacote e receber a resposta de outro computador. Ou seja, o tempo que o computador A leva para receber a resposta do computador B. Um caso prático é o tempo exibido pelo comando ping. O comando ping envia um pacote usando o protocolo ICMP e espera a resposta do outro sistema, imprimindo o tempo entre a requisição e o recebimento da resposta. Quanto mais distantes os computadores, maior o tempo de acesso. Este efeito é causado pelos meios de transmissão (fibra, satélite, cabos, etc) e pelo roteamento da Internet.

Quando um servidor de DNS não encontra um nome de domínio/host em sua tabela cache, este precisa realizar uma nova pesquisa. No caso de www.google.com, a primeira pesquisa será ao servidor responsável pelos domínios .com sobre o endereço dos servidores do Google. Só então seu servidor fará outra pesquisa, desta vez perguntando o endereço de www ao servidor de google.com. A coisa piora quando você tem nomes com vários níveis, mas o servidor faz um cache destas requisições de forma a evitar todo esse trabalho a cada acesso. O tempo de resposta de cada uma destas pesquisas é igual ao tempo de resposta entre os servidores mais o tempo para processar a resposta propriemente dita.

O problema que o Google Public DNS resolve é centralizar de forma Googleludiana toda essa informação. Isso significa poder utilizar a rede global da Google para armazenar e atualizar estas tabelas de conversão. Outro ponto é responder as requisições de forma muito rápida, coisa que o Google é campeão em fazer. Vários provedores de acesso tem mega-caches de domínios, porém a atualização deste cache é um outro problema. O Google pretende resolver o problema dos grandes caches e ainda aumentar o nível de segurança do serviço de resolução de nomes (DNS).

Um exemplo: imagine que o tempo de resposta entre seu servidor de DNS é igual a T. Para responder o endereço IP de www.google.com, teríamos algo como 3T ou 4T. Considere que no caso do Brasil, com redes lentas, esse T é bem grande (>100ms). Pense também que uma simples página web pode ter dezenas de nomes a resolver. Isso causa um atraso enorme ao tempo total de carga da página. Usando o serviço do Google, o tempo de resposta se aproxima de T (uma vez que as tabelas cache do Google tendem a ser maiores e mais rápidas que a do seu pobre ou rico servidor).

Uma descrição completa do problema e da solução pode ser encontrada neste link.

Agora, como usar isso. A tentação pode ser de simplesmente trocar o IP do seu servidor de DNS para 8.8.8.8 e 8.8.4.4. Esta solução é muito interessante e é descrita nas páginas do serviço, mas o melhor mesmo é configurar seu servidor local de DNS para utilizar este serviço. Isto minimiza o tempo de acesso de todas as máquinas da rede e como o tempo de acesso ao servidor local é muito menor que acessar o servidor do Google, o tempo de resolução de domínios ficará bem baixo.

Para quem usa o Bind no Linux sem ter o mesmo configurado como servidor de domínios local ou principal, simplesmente como cache de DNS, basta adicionar as seguintes linhas no /etc/bind/named.conf (o endereço pode mudar de acordo com a sua distribuição Linux).

Adicione as linhas com os servidores do Google (em negrito) logo depois de directory, dentro de options:

options {
directory "/var/bind";


forwarders { 8.8.8.8; 8.8.4.4; };
forward only;


Depois disso, recarrege a configuração do Bind (/etc/init.d/named reload) e tudo feito. Agora você conta com seu cache local e com o serviço público do Google. A diferença é bem perceptível.

Você também pode obter um bom desempenho configurando os servidores do Google em seu roteador de acesso sem fio, mas isso vai depender da velocidade de resposta do mesmo. Vale experimentar!

quinta-feira, 29 de outubro de 2009

Windows 7 64 bits no iMac com Snow Leopard - BootCamp 3.0


A vida não é facil para quem tem um iMac e quer instalar o Windows 7 64 bits. A Apple decidiu que os drivers de 64 bits não poderiam ser instalados nos iMacs, só nos MacPros, mas tudo tem jeito :-D. Neste outro post, eu descrevi como instalar a versão 32 bits do Windows 7 RC, mas com o Boot Camp 2.1 do velho Leopard.

O problema é que eu gostei do novo brinquedo e comprei o Windows 7 Edição Familiar Premium. Eu já sabia que o RC seria destruído, então comecei preparado. A caixa chegou na segunda-feira, comprei por 56€ numa super-promoção ainda em Julho na PixMania.be! Por 56€ é uma opção muito interessante, não sei se teria feito o mesmo se tivesse que pagar os 99 que a Microsoft pede hoje. Backup feito, começa a aventura!

Usando a mesma partição do meu Windows 7 RC, eu apenas pedi ao BootCamp 3.0 do Snow Leopard para iniciar o CD de instalação Windows. Fiz o boot e instalei normalmente, usando o setup do Windows. O Windows 7 vem com dois DVDs, um com a versão 32 bits e outro com a versão 64. É bom olhar antes de dar o boot, porque não lembro de nenhum indicador visual de qual dos dois estava instalando (salvo no próprio DVD!).

Instalei o Windows 7 64 bits na mesma partição do Windows 7 32 bits RC, mas para minha surpresa o instalador disse que estaria movendo tudo para uma pasta Windows.OLD. Eu já estava preparado para começar do zero, aguardando a formatação do disco, coisa que não aconteceu. Tudo do Windows 7 RC antigo foi movido para a Windows.Old, inclusive o Program Files e outros diretórios.

Terminada a instalação, não tive qualquer problema no Mac, até precisar instalar o boot camp. A mensagem que apareceu é que a versão 64 bits dos drivers não é suportada na minha máquina: Boot Camp x64 is unsupported on this computer model.

Uma rápida visita no site da Apple, revela que os iMacs não estão na lista dos equipamentos suportados para os drivers de 64 bits do Windows Vista ! Uma rápida busca no Google, revela este artigo. Eu já havia lido outros, mas poucos sobre o problema da restrição do iMac. Meu iMac é modelo 2008. Antes disso, nem adianta tentar. Nao precisa baixar nada de sites estranhos, tudo que você precisa está no DVD do Snow Leopard. Um dos comentários do artigo diz que conseguiu instalar o BootCamp pelo arquivo .msi. Aparentemente é o setup.exe que verifica a restrição aos iMacs. O problema é que clicando no Boot Camp\Drivers\Apple\BootCamp64.msi no Windows Explorer ele não instala. O comentário também diz para executar em linha de comando privilegiada. Aí a coisa ficou esquisita, pois eu já era administrador do sistema. Lembrei que o Windows 7 é um primo próximo do Vista, chato mesmo.

O que precisa fazer:

  • A partir do menu iniciar, abra a pasta de acessórios e clique com o botão direito no Command Prompt. Escolha a opção de executar em modo privilegiado.
  • Na janela de comandos que abriu, vá para o diretório do BootCamp64, no meu caso o drive D: é o DVD-ROM:
d:
cd "\Boot Camp\Drivers\Apple"
msiexec /i BootCamp64.msi

Depois é só prender o fôlego e ter fé. A instalação do Boot Camp é assustadora. Telas pretas e piscadas alucinantes aconteceram no meu caso, mas é coisa rápida, bips também acontecem. Nada que não assuste durante a instalação de um novo Windows, principalmente instalando drivers do Vista 64 no Windows 7... mas já da para aguardar até os drivers nativos do Windows 7 serem lançados.

Um boa é que mesmo antes do Boot Camp ser instalado eu já tinha rede. Rede com cabo e sem fio funcionaram de primeira após a instalação. O som, o eject e a camera só funcionaram depois de instalar o BootCamp. Alias, o som não está tão bom assim. Uma dica é que o eject funciona pelo Windows Explorer, mesmo antes de instalar o Boot Camp. É só clicar no drive de DVD com o botão direito e selecionar ejetar.

A melhor surpresa foi poder acessar a partição do Mac pelo Windows Explorer. Isso é muito legal, principalmente quando você procura um arquivo que está no outro sistema.

Em relação a utilização de memória, aqui eu perdi uns 200 MB de cara, só trocando de 32 para 64 bits. O Windows 32 pedia uns 400 MB para mostrar o Desktop :-)... o 64 ja começa com 600MB. Era a desculpa que eu precisava para colocar mais 2G :-D

domingo, 25 de outubro de 2009

Capturando a saída interativa do interpretador Python em Python

Tudo tem que ser automatizado. Como estou escrevendo um pequeno livro sobre Python já há muito tempo, tenho que atualizar a versão da linguagem todo ano :-D. Com o Python 3.1 o problema ficou mais sério, pois agora tenho que testar os exemplos do livro com essa nova versão que não é totalmente compatível. O livro está sendo escrito em Latex, usando o TextMate e o Skim no Mac OS X. Eu fiz a besteira de inserir manualmente o código fonte Python no texto Latex, agora tenho que revisar os scripts um a um. Como vou revisar, aproveito para consertar e desta vez gravar os programas Python em arquivos separados.

Resolvi então utilizar o SCONS para ajudar na tarefa. Para isso, um builder customizado precisa ser criado. No SConstruct:
PYTHON_BIN="/opt/local/bin/python2.6"

python_output=Builder(action= '$PYTHON_BIN capture.py $SOURCE $TARGET',
                  suffix     = '.pyt',
                  src_suffix = '.py')

env = Environment(BUILDERS = {'python_output': python_output})
env["PYTHON_BIN"]=PYTHON_BIN

env.python_output("p1")

e depois o programa em Python que faz a captura, capture.py:
import pexpect
import sys

PYTHON_BIN="/opt/local/bin/python3.1"

interacao = file(sys.argv[1], "r").readlines()

python = pexpect.spawn(PYTHON_BIN)
python.logfile_read = file(sys.argv[2], "w")

for l in interacao:
   python.expect([">>> ", "... "])
   python.send(l)

python.sendline("exit()")
python.expect(pexpect.EOF)

O script capture.py recebe dois parâmetros: o nome do arquivo Python e o nome do arquivo de saida.
Para testar, crie um arquivo p1.py:
a=5
b=10
print(a+b)
c = a + b
d = c * a / 100
print(c,d)
for x in range(3):
    print ("Oi")

#Erro:
=d=d
rrrrr

Deve produzir a seguinte saída em p1.pyt:
Python 3.1.1 (r311:74480, Oct 24 2009, 17:11:04) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a=5
>>> b=10
>>> print(a+b)
15
>>> c = a + b
>>> d = c * a / 100
>>> print(c,d)
15 0.75
>>> for x in range(3):
...     print ("Oi")
... 
Oi
Oi
Oi
>>> #Erro:
... =d=d
  File "", line 2
    =d=d
    ^
SyntaxError: invalid syntax
>>> rrrrr
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'rrrrr' is not defined
>>> 
>>> exit()

Se você utilizar este arquivo, não esqueça de modificar as variaveis PYTHON_PATH. Eu uso MacPorts e devo especificar o caminho completo da versão de Python que quero utilizar. Isso evita problemas com outras versões instaladas no sistema, como o Python da Apple. Eu utilizei o Python 3.1 nos exemplos do livro, mas ainda uso o 2.6 para instalar meus módulos no Mac Ports.

Eu espero que isto ajude alguém com o mesmo tipo de problema: capturar a saída interativa de um programa como se fosse um terminal comum.

sábado, 24 de outubro de 2009

Aventuras com FSCK

Back-ups sempre vão bem... essa semana acabei perdendo 2 HDs. Um no PC, consegui retirar todos os dados e transferir para um servidor remoto. O outro, meu Ubuntu, Tambaqui de guerra.

Cheguei de manhã ao trabalho e vi que computador estava desligado. Como o Tambaqui é um pequeno servidor também, eu já o deixo ligado. Liguei o peixe e o boot ocorreu normalmente (eu sempre digo que só dá problema o que antes estava funcionando perfeitamente :-), senão ninguém viria com aquela desculpa-esfarrapada-padrão-de-quem-não-tem-backup: ontem estava bonzinho!).Olhando os arquivos depois do boot, vi que haviam vários arquivos com nomes estranhos com ??? e !!!!... sinal de problemas no sistema de arquivos, mas o fsck jurava que estava tudo bem :-)

Rodei então o init 1 para inicializar em usuário único. E lá rodei o fsck no menu do Ubuntu... que detectou vários problemas. Terminada a análise, fiz o boot e para minha surpresa o disco estava vazio !

Como já havia perdido um HD no dia anterior, disse: de novo! :-( Vi que a raiz tinha ido pro saco. Eu precisava apenas de dois diretórios com meus dados, prática que sigo já há alguns anos. Bom, dei uma olhada rápida no disco e constatei que estava mesmo vazio. Eu só consegui dar o boot com o CD do Ubuntu, mas não tive problemas em montar a tal partição. Começei a me preparar para reinstalar o Ubuntu quando vi que a partição não estava vazia.

Eu nunca acreditei muito no lost+found. Toda vez que tive problemas no Linux, encontrei apenas pedaços dos meus arquivos dentro do lost+found. Mas desta vez a coisa estava diferente. Entre estes pedaços estavam diretórios com nomes como #xxxxxx, milhares deles. Logo descobri aonde meus arquivos haviam ido parar.

Iniciei então o seguinte procedimento para procurar meus arquivos:
ls -laR lost+found > bigls.txt

O fsck havia recortado meus diretórios e deixado tudo em um só nível! A opção de gerar o arquivo bigls.txt era de justamente poder procurar com calma tudo que eu poderia salvar. O arquivo final tinha mais de 40MB ! Mas isso não é nada para o less. Utilizando a / para pesquisar, pude navegar no pequeno ls monstro que havia criado e logo detectar o que precisava ser salvo.

Depois, ficou fácil de mover os diretórios mais importantes para um disco de rede. O nome do arquivo eu pegava no bigls.txt, aberto em outra janela com o less. Simples e prático. Ainda estou recuperando as instalações que havia feito na máquina, pois não consegui quase nada do meu /etc (tomcat com ldap é chato).

Nessa nova instalação vou deixar um rsync rodando para o disco de rede... pelo menos dos dados e do /etc :-)

Quanto ao outro disco, rodando Windows XP... no meu velho notebook (2HDs perdidos em 2 meses e contando !)... também consegui montar o disco que nem boot mais tinha usando também o CD do Ubuntu. Ficou tudo muito simples porque o Ubuntu já identifica o disco Windows e é ultra fácil montá-lo, bastando clicar no volume correspondente no menu. Eu gosto muito de usar a linha de comando, mas confesso que gostei desta vez de utilizar as ferramentas gráficas no Ubuntu. Abri dois navegadores, um com a partição Windows e outro com um disco remoto usando Samba. A cópia foi tranqüila, bastando arrastar e soltar! Quem diria um dia fazer isso no Linux :-)

Um programa que ajuda a ver os problemas de boot no Windows é o testdisk. Ele detecta as partições e ajuda a reconstruir o setor de boot entre outras coisas. Pena que ele não está disponível pelo apt-get do Ubuntu 9.04. Mas no link acima tem uma opção para download. Basta baixar e desempacotar a versão binária. Um executável pronto (linkado estaticamente) já está pronto para ser utilizado.

Outro programa para o cinto de utilidades é o SmartMonTools. Ele acessa as informações do S.M.A.R.T. do seu HD e ajuda a decidir o que aconteceu. Claro que é melhor usar essa ferramenta antes de ter problemas, mas meu Windows XP resolveu morrer sem último suspiro. Cheguei de manhã e ele já estava morto, mas sem perda de dados. Nunca se sabe se é um problema de vírus ou simplesmente um defeito no HD que você não havia percebido. Esses utilitários ajudam a executar os testes mesmo post mortem. Claro, dependendo do estado do seu HD, porque se ele nem liga ou nem mesmo é detectado... esqueça.

segunda-feira, 14 de setembro de 2009

COOnan

Sem muito o que fazer, criei um novo personagem no universo dos bárbaros da programação: COOnan. COOnan é um bárbaro que vive em Java... na Indonésia :-D

Como todo bárbaro, poucas ferramentas são tudo que ele tem. Então OO serve pra tudo e não existe qualquer outra coisa no horizonte. Como uma fé inalienável, nada escapa a OO, salvo criação heréticas com nomes mais engraçados que o nome da ilha em que ele vive.

Tudo se resume em aplicações avançadas de OO. Criar uma interface ? Fácil, 5 arquivos e umas 12 classes já fazem o serviço. É classe por classe, objeto por objeto. Métodos gigantes e classes anônimas? não tem problema !

segunda-feira, 7 de setembro de 2009

Rico país pobre


Faz quase 3 anos que estou morando na Bélgica. Um pequeno país europeu, 3 vezes menor que Portugal, um pouco maior que o Estado de Alagoas. Vindo do Brasil, principalmente do Amazonas onde tudo é grande e longe, demora um pouco para entender as distâncias locais.

São pouco mais de 10 milhões da habitantes vivendo na Bélgica. Pra completar, fala-se 3 línguas: holandês, francês e alemão. Onde moro, fala-se francês. O conflito entre o norte (holandês) e o sul (francês) é crescente. A parte que fala alemão é muito pequena para criar problema, eles simplesmente estão lá.

Assisti um vídeo no The Progress Project, sobre o Nokia Data Gathering. O vídeo mostra uma iniciativa muito interessante de usar telefones celulares para coletar informações sobre dengue. Mas o que me chamou a atenção foi lembrar do estado de pobreza que a maioria dos brasilieiros vive. Como falei, moro agora em um pequeno país. O clima é ruim, recursos naturais quase não existem, hoje vive-se em paz, mas antes era cercado por inimigos por todos os lados. O que será que deu errado no nosso Rico País Pobre?

Eu lembro de viver muito bem em Manaus, mas em 2003, meu filho sofreu um "acidente" de carro. Foi levado para um hospital público (João Lúcio) e depois transferido para a Unimed. Uma das coisas que me chamaram atenção é que o hospital público era melhor equipado que a própria Unimed :-( Pior, parecia que o menino era culpado por ter se acidentado e o que a Unimed nos fazia o favor de aceitá-lo, mas isso é coisa passada... O importante é lembrar o estado de necessidades básicas no Brasil: educação, segurança e saúde.

Chegando na Bélgica, minha filha precisou ser hospitalizada. Hospitalizada aqui, porque acho que no Brasil teriam nos mandado para casa. O importante é que o médico decidiu sobre a hospitalização e assim ela foi hospitalizada. Dinheiro veio depois, primeiro a saúde. Considerando que isso aconteceu com um estrangeiro recém chegado e que não falava francês, nem tinha acabado de tirar todos os documentos, um milagre. Mas o caso mais sério estaria por vir, nossa filha Iris, nasceu com lábios leporinos.

Nessa época, já tínhamos todos os documentos, mas não estávamos esperando nada parecido. Ela fez todo os exames pré-natais (detectaram a má formação já no quinto mês de gestação), tivemos acompanhamento psicológico e até apresentaram fotos de bebês com o mesmo problema aos irmãos menores, já prevendo a rejeição que é comum nesses casos. No dia da cirurgia para corrigir os lábios (com 5 dias de vida!), me dirigi ao Hospital e perguntei quanto custaria, porque até então ninguém havia falado nada de dinheiro. A atendente me explicou calmamente: não tenho como dizer antes da cirurgia, o senhor receberá a conta depois de uns 3 meses em sua residência. Eu não sabia se ficava contente ou preocupado com isso. Conta enviada depois de 3 meses?!? Normal aqui, duro para brasileiro acreditar né? Perguntei a ela:
- Quanto custa em média? Eu tenho que me preparar para pagar isso.
Calmamente ela respondeu:
- Não tenho como informar, pois varia com a equipe e com o que acontecer durante a cirurgia. Por que isso é importante para o senhor? Se não puder pagar, o senhor vai deixar de fazer a cirurgia na menina? A questão financeira se discute depois, não se preocupe!
Calei. Já estava me preparando para vender o carro... meu cálculo foi o seguinte: se a visita do encanador custava 65€, imaginei a cirurgia plástica... voltei meu foco para Iris e para minha esposa. Pelo menos a primeira cirurgia estava garantida. Tudo foi realizado com ótimos resultados.
A segunda cirurgia foi realizada 4 meses depois. Essa foi maior e demorou muito mais tempo. Mas os resultados também foram ótimos. Hoje ela é um bebê de quase 2 anos, ainda em tratamento, mas feliz.

O objetivo de relatar esse tipo de experiência é tentar explicar ou entender as enormes diferenças entre nosso país e aqui. Jamais denegrir a imagem do Brasil ou dos médicos brasileiros, mas ressaltar aonde precisamos chegar.

Eu lembro de discussões sobre a riqueza de São Paulo ou de outros Estados brasileiros e me defronto com números de um país gigante, mas ao mesmo tempo pobre e anão. Mesmo São Paulo não é tão rica assim. Em termos de infra-estrutura, a começar pelo metrô, fica fácil de perceber as diferenças entre uma grande cidade rica (Paris) e uma grande cidade pobre (São Paulo). Com menos de 30 milhões de automóveis para quase 200 milhões de habitantes e um sistema de transporte precário, fica óbvio que a coisa não é tão rosa como alguns tentam se convencer. Claro, lendo isso na tela do computador já lhe separa da grande maioria dos brasileiros.

Mas como disse, já estou aqui há quase três anos e não é uma questão de competência pessoal ou resultado de um governo incorruptível (que nem aqui existe). O que será então a grande diferença entre estes dois países?

Minha opinião, humilde uma vez que não realizei um grande estudo, apenas observações do dia a dia; é que a grande diferença é no papel do estado em prover o básico para a formação de uma sociedade sadia. Já falei de saúde, o Brasil tem feito progressos, mas ainda está muito atrasado: os pobres sofrem nas mãos do atendimento público, sub-financiado e os ricos são reféns de planos de saúde, mas que resolvem os problemas mais básicos. Isso impede a melhoria de vida e do atendimento aos pobres, porque ninguém liga pros pobres, eles vivem em outro mundo, não é? Salvo em época de eleição.
Educação é outro ponto. Universidades públicas excelentes, mas escolas primárias e secundárias em tempo parcial. Não que não haja melhorias, mas na educação também temos dois sistemas paralelos: os ricos em escolas particulares e os pobres em escolas públicas. Quem estuda no grupo é o filho da empregada doméstica, então ninguém liga :-(
Segurança nem se fala. Olhando os índices de violência por bairro (fiz isso com os de Manaus em 2005) fica claro que os bairros mais violentos são os mais pobres. Isso fica pior em cidades onde os pobres são verdadeiramente excluídos, vivendo o mais longe melhor. Nos bairros ricos, os crimes também acontecem e são esses os combatidos e mostrados na TV!
Não é questão de ricos contra pobres, mas a existência de realidades paralelas no mesmo país. Se o sistema de saúde fosse realmente único, se todos tivessem que esperar o mesmo para ter uma consulta médica ou estudar nas mesmas escolas, a coisa seria diferente. Aí nos importaríamos realmente no que acontece no outro mundo. Pararíamos de enxergar os ricos como ladrões e os pobres como coitados... ou seria o inverso?
Isso tudo se resume em diminuir a desigualdade social. Na Europa, os ricos são muito ricos, mas também são muito poucos. Um engenheiro ganha de duas a três vezes mais que um operário e dependendo do país essa diferença é ainda menor! Nada como a diferença de 10 ou 20 vezes mais entre o salário de um engenheiro e o valor do salário mínimo. Depois não se entende o por quê da desigualdade !
Rico mora em condomínio fechado com segurança privada e faz compra em shopping centers... o problema de segurança é mais sério no trajeto entre estes pontos e o trabalho, mas é tolerado. Criamos dois mundos no mesmo país, uma fronteira imaginária entre ricos e pobres.

O que fazer? O que é pior, ser rico no país dos pobres ou pobre no país dos ricos? Temos que escolher e pensar no bem de todos. Violência se resolve com renda e emprego, mas as pessoas precisam de saúde, moradia e educação para chegar lá. Eu sempre achei programas como o bolsa família populistas e criado por políticos na época de eleição, mas hoje acredito ser o caminho para obtermos um equilíbrio social durante a formação da nossa sociedade. Hoje o valor do bolsa família ainda é muito baixo, sentiríamos mais resultados se o valor fosse próximo ao do salário mínimo. Não é tão utópico assim, é comum na Europa. Na Bélgica se chama alocação familiar e é pago por filho com idade entre 0 e 24 anos (se continuar estudando). Embora não tenha o nome de bolsa família é bem parecido. Na época de volta às aulas, depositam uns 50€ para ajudar nos gastos (aqui 150€ de material escolar é um escândalo e sai na TV... ai eu pagava muito mais que isso, uns R$1.000 a R$1.500!). Recebe-se 800€ de prêmio pelo nascimento (1200€ pro primeiro filho)... Até sair da faculdade, valores entre 95 e 200€ por mês/filho são depositados na conta da esposa (pro pai não comprar pinga!).

Temos um grande complexo de inferioridade como povo. Coisas como europeus são bons (fazendo referência aos brancos que nascem no Brasil) e todos os outros são vagabundos, corruptos ou simplesmente desajustados. Isso é um forma deslavada de racismo, mas que contamina nossa sociedade. É aceitar o estigma do jeitinho brasilieiro como algo gravado em nosso DNA. Alias, aqui, Brasil é tudo igual. Europeu é quem tem passaporte europeu e não importa a cor da pele.

Sabendo que não são somos predestinados ao fracasso como povo e que nem negros, portugueses ou índios tem qualquer coisa a ver com isso... o que nos falta? Assumir a responsabilidade pelos nossos atos e omissões e continuar a vida como agentes de mudança e não como vítimas da história.

Eu realmente acredito que o Brasil será um grande país num futuro próximo, pensando em 2050. As taxas de crescimento e educação vem melhorando, lentamente, mas continuamente. É preciso acreditar e identificar o que está realmente errado. Iniciativas como a Associação Amada, responsável pela divulgação do implante coclear em Manaus, mostram como chegar lá e o que fazer no caminho. É quando nossa sociedade se organizar para fortalecer suas bases e não apenas fazer carnaval (nada contra a festa, mas imagine um grande mutirão da educação ou barracões de matemática e ciências!). Feliz 7 de Setembro, dia da independência do Brasil.


domingo, 6 de setembro de 2009

Fotos panorâmicas com Hugin


Tô começando a gostar de fotografia de verdade. Esta fotografia foi criada com o software livre Hugin. Juntando-se 4 fotos normais, obtêm-se a vista panorâmica. Muito fácil de usar!

Tamanho original 3733x834


sexta-feira, 28 de agosto de 2009

Snow Leopard na área

Bom, a instalação finalmente terminou e o World of Warcraft continua funcionando. Quase 1 hora de instalação e uns 4 boots depois, tudo terminou bem. A instalação é toda automática, deixei instalando e fui ver televisão. Toda customização de cores, teclado, língua, dashboard etc foi mantida. O bom e velho Mac de sempre.




terça-feira, 25 de agosto de 2009

iTunes - Além da música

Hoje, revisitei o iTunes U. Pra quem ainda não conhece, o iTunes U é uma seção do iTunes Store com aulas de diversas Universidades. A quantidade de cursos vem crescendo e a qualidade é muito boa, embora eu prefira as aulas com vídeo aos podcasts.

Vídeos do MIT e Stanford? Tem lá e de graça. Eu procuro mais vídeos sobre matemática e estatística, séries de Fourier e outras coisas que preciso no trabalho, mas tem muito material sobre história, economia e biotecnologia entre outros. Alguns introdutórios, outros bem avançados, faltando as vezes cursos entre estes dois extremos, mas um ótimo recurso para se ter uma idéia do assunto ou simplesmente outra visão.

Fica a dica para quem estiver procurando o que assistir na televisão.


terça-feira, 14 de julho de 2009

A Era do Console

Ainda lembro dos "mágicos" da época do DOS. Aquele pessoal que criava seus prompts coloridos ou com gráficos inimagináveis para época (caracteres especiais e símbolos perdidos em páginas de código quase esquecidas). Lembro quando um colega comprou o MS DOS 5.0 e passamos uma tarde para configurar a tal página 850. O Manual dizia que os acentos do português só apareceriam corretamente nela. Tudo muito simples, apenas algumas linhas no CONFIG.SYS e outras no AUTOEXEC.BAT. É, o Word era modo texto. Depois disso, descobrimos que o teclado também tinha que ser configurado... mais linhas no AUTOEXEC.BAT. Claro que nada disso resolvia o problema de imprimir os acentos na impressora, isso era outra batalha!

Mas já era uma vitória ter maiúsculas e minúsculas... coisa opcional nos anos 80... acentos era luxo :-)

O livro dos mágicos era o manual do MS DOS. Coisa rara porque naquela época muita gente nem sabia que se vendia isso. Software ainda vinha com manual impresso e poucos liam. Os que liam se tornavam seres míticos, capazes de dominar o DOS e outros dinos da época como o SCO.

Depois disso eu ganhei um mouse, mas achava que só serviria para desenho :-D Mas eu estava enganado. O mouse e as GUI matariam o console em pouco tempo. Eram os anos 90... Windows 3... coisas cabeludas da época. Bom mesmo era usar o Amiga de outro colega com jogos e o poderoso Amiga OS. No PC só DOS e o Windows que rodava no DOS. Consumia tanta memória (RAMs de 1MB, HDs de 10 MB eram comuns) que não sobrava espaço para mais nada, QEMM que o diga. Meu micro não rodava Word for Windows, porque era um AT 286, mas o Windows enrolava nele... com o Windows 3.1 consegui um 486, 4MB de RAM e finalmente pude rodar o Word for Windows ! Antes eu me divertia com a sofisticação do write.exe... acentos impressos em qualquer impressora e documentos com qualidade de carta (essa é velha)! Mas o console continuaria reinando até o Windows 95.

Hoje com aplicativos Web e a tal da Web 2.0, o console perdeu a graça. Console só em sistema velho de farmácia ou posto de gasolina. Fosseis vivos escritos em Clipper. Eu ainda uso todo dia no Linux, no Mac e no Ruindows, gente não muda facilmente. A era do console acabou, mas que o bicho ajuda, ajuda.

Eu tentei escrever scripts com saída colorida em Python. Descobri que existem várias bibliotecas para isso, mas bibliotecas multiplataforma não achei nenhuma. Claro, quem que ainda trabalha com isso?

Curses, WConio e pequenos scripts abundam, mas todos precisam de módulos em C que são bem chatos de distribuir com o script, principalmente pro Ruindows.
Eu acabei por escrever um pequeno módulo para trocar a cor, limpar a tela e configurar o título da janela do console ou xterm. Até agora está funcionando no Linux e no Mac, mas falta unificar a parte Windows. No console do Windows não tem muito o que fazer, senão usar a ctypes para chamar algumas funções da kernel.dll. Apesar de usar a ctypes, dá pra mascarar a inicialização de acordo com o sistema operacional e fazer tudo em Python.

Acabei criando um projeto open source para isso. Pelo menos não vou esquecer o trabalho que deu, nem ter que fazer backup sozinho. Vou colocar os fontes aqui: http://code.google.com/p/colorconsole/

Fuçando essa arte quase esquecida, achei como mudar o prompt padrão do console do Windows XP. É bem simples, como tudo no Windows:
1. Você abre o regedit
2. Procura a chave [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\]
3. Crie uma entrada string com o nome PROMPT
4. Digite seu novo prompt, por exemplo: [%computername%]$S$P$G
5. Log off e log in, claro senão não seria o velho XP :-)
6. Se tudo deu certo, seu prompt padrão do Ruindows foi mudado!

Passo-a-passo aqui

Se você ainda usa o cmd.exe diariamente, vale a pena instalar o "Open Command Window Here" no Windows Explorer. Um power toy da Microsoft que pode ser baixado aqui. Como eles mudam o site deles a cada 4h, melhor procurar no Google.

domingo, 14 de junho de 2009

Computador Cebola

Um computador cebola é um notebook de trabalho que você tem há vários anos e que ainda não conseguiu trocar :-) Só de olhar, já dá vontade de chorar, como cebolas.

Toda empresa grande ou pequena tem um sacerdote dos micros ou responsável por TI. Normalmente o cara tem trabalho até a próxima geração e foge de novidades como o diabo da cruz... nada deve mudar. Os mesmos caras que condenaram sua empresa a usar o Windows 2000, porque o Windows XP não presta, Vista é heresia !

A fé torta desses caras é tamanha quando você vê que eles usam Mac Book Pros... mas que formataram o bicho e tiraram o melhor da máquina, o Mac OS X, para instalar qualquer outra coisa. Dá para imaginar um Mac Book Pro com Ubuntu ? Digo, só com Ubuntu ? É como comprar uma Ferrari para ir a feira.

Outra arma do pessoal de TI são os sistemas internos. Quer um HD novo ? Abra um ticket to sistema XYZ... Quando você tem sorte, o sistema deles é integrado com outros da empresa, se der azar, vai ter que se cadastrar :-)

Se você enjoar de falar com o sacerdote de plantão, um jeito de se livrar deles é perguntar sobre backups. Se o cara for de TI mesmo, vai desaparecer em menos de 5s, claro dizendo que é você quem deve fazer os backups... naqueles discos compartilhados de rede com 1GB para tudo que você tem :-)

Mas, o mais legal mesmo é quando você tem que escrever um relatório dizendo que o Cebola está lento. Eu recebi o meu com 1GB de RAM, mas consegui fazer o upgrade para 2 GB (30€!). Falta o HD encantado (320GB - 40€), pois o HD do Cebola é muito lento e pequeno (100GB). Claro que um cebola desses não é tão ruim, mas experimente rodar o Visual C++ 2005 em uma máquina virtual (Virtual PC) com 512 MB de RAM ou ressucitar o NetBeans das profundesas do HD. Rodar, roda, tudo funciona. Agora se o mais caro nessa história toda é o tempo do desenvolvedor, por que não ter máquinas melhores ? Vejo um Mac Book Pro no fim do tunel...

Outro fator é o stress de chegar de manha e acordar o Cebola. Eu tenho um ritual de chegar e dar o boot, correr para fazer café (é... aqui você faz tudo mesmo) e depois voltar para fazer o login, beber mais café, abrir o Firefox e o Thunderbird... mas aí já não tem mais copo grande o suficiente para tanto café. Acho que o coitado do Cebola leva uns 5 minutos para fazer tudo isso! E o Cebola é temperamental. Se você importuná-lo durante esse ritual matinal, o tempo pode dobrar. Se quiser deixar o Cebola realmente contrariado, deixe o Skype inicializar automaticamente... aí sim, o dia foi pro saco.

Uma coisa boa do Cebola é que o pior é logo pela manhã, depois disso é uma máquina aceitavél e confiável. Acho que problema é o HD cansado do bicho mesmo e o cretino do Windows XP que não sabe acessar o disco. O Cebolinha, irmão mais velho do Cebola, roda Linux. Com 1GB de RAM não tenho problema e olha que deixo o Tomcat rodando! Falar nisso eu instalei o Windows 7 no meu Mac, mas deixei o Mac OS X :-) Até agora tudo bem. Fico sem saber se realmente a diferença é o hardware bom ou se a Microsoft esqueceu de deixar o Windows 7 lento, mas isso eles devem corrigir nos primeiros service packs :-D





domingo, 17 de maio de 2009

Windows 7 com BootCamp

Querendo jogar no Mac, acabei baixando o Windows 7 RC da Microsoft. A dúvida era se podia instalar com o BootCamp, fiquei sabendo que podia aqui.

As coisas mais importantes a fazer antes de começar são:
  1. Achar os discos de instalação do Mac OS X
  2. Fazer um back-up do sistema
  3. Imprimir as instruções do BootCamp
Os discos do Mac OS X são necessários para a instalação dos drivers. Backup sempre é bom e o Time Machine ajuda. As instruções do BootCamp tem umas 20 páginas, mas dá para imprimir 4 páginas por folha e salvar algumas árvores.

Feito isso, é só seguir as instruções. No meu caso, tudo correu bem, mas alguns momentos de fé foram necessários. Depois de copiar os arquivos, o Windows resolve dar o boot pela primeira vez. Eu recebi uma mensagem para dar o boot pelo CD, mas basta ignorar que o Windows do HD é iniciado.
Depois disso, ele pede para se atualizar e reinicia uma segunda vez.
O Wifi e a rede voltaram funcionando sem problemas, mas o micro estava sem som.
Os drivers do bootcamp ficam no disco 1 do Mac OS X. Execute o setup.exe.

Eu tive uma mensagem de erro nesse ponto, o erro 2229. Se isso acontecer com você, copie o disco 1 para uma pasta do Windows. Baixe um programa chamado orca.
Ele é um editor de arquivo .msi. O erro 2229 acontece porque o instalador recusa a versão do Windows 7. Depois de instalar o orca, abra o bootcamp.msi que você copiou do CD original do Mac OS X. Ele vai exibir uma lista a direita com várias opções, escolha "Launch Condition Table" e com o botão direito "Drop table". Grave o bootcamp.msi e execute o setup.exe que você copiou do CD. Agora o bootcamp deve instalar sem problemas, salvo os avisos do Windows 7 sobre incompatibilidade, etc.

Tudo funciona bem depois do bootcamp instalado, mas com alguns probleminhas. Eu consegui ter som e até fazer a câmera funcionar. O microfone funciona, embora não apareça no Skype por exemplo. Os drivers novos da placa de vídeo você consegue rodando o Windows Update pelo IE8. Até consegui jogar com essa nova instalação. Fora isso, até os overlays de volume, brilho e a tecla eject funcionam bem. O alt gráfico no meu maravilhoso teclado belga não funciona, mas as outras teclas sim.

Vale lembrar que o Windows 7 RC só funciona até março de 2010. Como só usarei para testar e jogar, não tem problema. Depois você pode instalar o Windows 7 que comprar ou simplesmente deletar a partição usando também o bootcamp.

No site da Apple, está disponível o bootcamp 2.1 (BCUpdateVista32), mas esse eu não consegui fazer funcionar.

Para registro, instalei usando o Mac OS 10.5.7. Ao dar o boot, pressiona alt para escolher entrar no Mac OS ou no Windows 7. Abrindo as preferências do sistema, discos de inicialização você pode configurar qual dos dois sistemas será o padrão.

Update: para instalar o bootcamp 2.1, siga as instruçoes desse post aqui. Basta abrir o regedit, achar o bootcamp services no registry e mudar Language para 0x409 ! Mais detalhes no post.


sábado, 25 de abril de 2009

Bitnami

Instalar pacotes open source no Windows não era fácil. Com o Bitnami, o trabalho fica bem mais próximo do Linux. Django, Ruby, Trac, tudo fácil de instalar.

quarta-feira, 22 de abril de 2009

Alterar nome de usuários com SVN

Eu precisei mudar o nome do usuário que fez commits no repositório SVN ao migrar de uma máquina para outra. No caso, o repositório havia sido criado para uso local, com usuários locais e depois integrado para uso do departamento.

Para trocar os nomes dos usuários:
1) Fazer um dump do repositório (até para backup) usando o svnadmin
svnadmin dump REPO_PATH > dump1

2) Utilizando o svndumptool.py:
svndumptool.py transform-revprop svn:author \
NOME_ANTIGO NOME_NOVO dump1 dump2

Onde dump1 é o nome do arquivo criado no passo 1 e dump2 o novo dump com o nome já trocado.

O svndump pode ser instalado e baixado daqui: http://svn.borg.ch/svndumptool/

domingo, 29 de março de 2009

Modularização

Esse vídeo é muito interessante e rápido de assistir. Conceitos como modularização e acoplamento são explicados de maneira prática e intuitiva. 
Eu aprendi a programar lendo manuais de computadores feitos no Brasil :-) Era a reserva de mercado. Primeira linguagem: BASIC... mas nada de visual ou mesmo do Quick Basic. Eu usava um TK85 e aprendi o Sinclair Basic. No segundo grau, resolvi cursar uma escola técnica de informática. Lá fui apresentado a outras linguagens: Pascal, C, Cobol, Clipper, Modula. Orientação a Objetos ainda era uma coisa distante, Borland C++ 1.0 e Turbo Pascal 6... bons tempos. A moda na época era programação estruturada, mas o vídeo abaixo resume tudo isso: