Arquivos Mensais:novembro 2006
Eventos, eventos, eventos…
Sumi, né?
Estou trabalhando demais esses dias, me preparando para a PHPConference e para o Workshop Produtividade Web 2.0. Além disso, semana que vem vou ministrar o curso de Javascript DOM e na semana seguinte o de Ajax.
Depois do dia 5 volto para este blog. Até lá
Design Patterns Representam Defeitos nas Linguagens de Programação
Design Patterns Representam Defeitos nas Linguagens de Programação. Interessantíssimo, vai te por para pensar.
Comissões em dólar por e-book grátis
Há algum tempo venho acompanhando, no blog do Janio, a história de um sujeito que escreve sobre marketing na Internet. O lance é que o camarada escreve e-books gratuitos para divulgar o próprio trabalho. A parte curiosa é que ele estava disposto a investir um dinheiro para que você leia o e-book dele. Agora, apareceu um outro com a mesma história.
Então o lance é o seguinte, se você clicar aqui, se cadastrar e fizer o download do tal e-book (ele chama de “report”, não de “e-book”, ou seja, é um relatório, não um livro) eu ganho um dólar. Tudo o que você vai precisar é de um nome e um e-mail válido. E mais, ao se cadastrar, você vai poder também ganhar um dólar para cada pessoa que indicar.
Em momento nenhum vai ser pedido um número de cartão de crédito ou coisa assim. Não é um truque. O que ele quer é uma lista de pessoas interessadas no produto dele, que vende treinamentos em marketing na internet. No começo eu não acreditei na história, mas o Janio recebeu as comissões no PayPal direitinho na campanha anterior. E o que o sujeito ganha com isso? Uma lista de e-mails de gente interessada em marketing na internet, claro. Naturalmente, você não vai colocar seu e-mail principal ali se não estiver interessado em receber propaganda
Mas, nesse caso, não é spam, é marketing de permissão, a diferença é que o sujeito está comprando sua permissão, o que é realmente inusitado.
Quer participar?
- Comece aqui. Preencha seu e-mail e seu nome, marque a caixinha “I accept” e clique em Submit. Você vai ser enviado para uma tela que pede o código de confirmação.
- Em seguida você vai receber um e-mail, com um link para o código de confirmação. Anote o código e preencha na tela anterior.
- Você vai poder então criar a sua senha.
- Em seguida, é pedido um cadastro, para o caso de você querer também divulgar o report e ganhar suas comissões.
- Para fazer o download do report clique em “get report” no menu.
Porque estou divulgando isso? Bom, por uma série de motivos, mas principalmente por dois. Claro, um deles é o dinheiro. Alguém aí não está interessado em dinheiro? O outro é a curiosidade. Quero saber se esse camarada, como o primeiro, vai realmente pagar essas comissões, quero entender de onde vem esse dinheiro e o que ele vai ganhar com isso, ou seja, o que ele vai tentar vender depois.
And the Oscar goes to…
Daniel Luz (que não deixou uma URL em seu comentário) é o grande ganhador do prêmio “Sem Projeto – o nerd mais sem o que fazer da internet brasileira.”
Ele estava online no domingo, às 02:32, resolvendo problemas de programação em meu blog. E resolvendo com excelência. Isso sem falar no comentário que ele deixou em outro post, com uma interessantíssima função de conversão para binário.
Parabéns, Daniel! Se puder, compartilhe conosco sua “biblioteca pessoal de funções.” E, se tiver um site, blog, ou outra URL onde possamos aprender mais com você, por favor, nos avise.
Agradeço também ao Peka, que resolveu (em PHP) o primeiro desafio.
E também ao Walter Cruz, ao TaQ, ao Flavio Kaminisse, ao Manoel Netto, ao Fabio Ortolan, ao Felipe Tonello e ao Cristiano Dias, pelos seus comentários, muito mais interessantes que meus posts. Aprendi um bocado, e me diverti um bocado com vocês.
Obrigado também a todos os que tentaram os desafios e não conseguiram. A maioria de vocês chegou bem perto. Gostei da brincadeira e logo que puder posto mais desafios aqui, enquanto isso, vocês podem se divertir com a dica do Daniel: The Python Challenge, muito bom, recomendo.
O nerd mais sem o que fazer da internet brasileira
Continuando a brincadeira sobre binário, esse aqui é um pouquinho mais complicado. Quem decifrar primeiro, e explicar para a gente como fez, recebe o prêmio “Sem Projeto – o nerd mais sem o que fazer da internet brasileira.”
00100111 01100111 01111010 01101001 01110000 01110000 01100101 01100100 00111010 01011100 01111000 00110001 01100110 01011100 01111000 00111000 01100010 01011100 01111000 00110000 00111000 01011100 01111000 00110000 00111000 01011100 01111000 01100010 01100011 01011100 01111000 01100001 00110101 01010100 01000101 01011100 01111000 00110000 00110000 01011100 01111000 00110000 00110011 01110100 01011100 01111000 00110000 00110000 01011100 01111000 00110000 00110101 01011100 01111000 01100011 00110001 01011100 01111000 01100011 00110001 01011100 01110010 01011100 01111000 00111000 00110000 00110000 01011100 01111000 00110000 01100011 01011100 01111000 00110000 00110011 01011100 01111000 01100011 00110000 01010101 00111100 01011100 01111000 00110000 00110000 01100010 01011100 01111000 00110000 01100110 01011100 01111000 01100011 00110110 01011100 01111000 01100001 00111000 01101001 01000010 01011100 01111000 01100110 00111000 01011100 01111000 00111000 00110100 01011100 01111000 01100011 01100001 01011100 01111000 00111000 01100001 01011100 01111000 00111001 00110000 01011100 01111000 01100011 00111000 01011100 01111000 01100110 00110100 01011100 01111000 01100100 01100011 01011100 01111000 00110001 01100100 01011100 01111000 01100100 00111001 01110100 01011100 01111000 01100100 01100011 00110010 01100100 01011100 01111000 01100100 00110001 01110010 01011100 01111000 01100011 00110011 01011100 01111000 00110000 01100011 00110101 01011100 01111000 00110001 00110110 01011100 01111000 00111000 00110111 01011100 01111000 01100001 01100010 01011100 01111000 01100101 00110010 00110101 01011100 01111000 01100011 00111000 01011101 01101000 01011100 01111000 00111001 00111001 01011100 01111000 00111001 00110110 01011100 01111000 00110001 00110000 01011100 01111000 00111000 01100100 01011100 01111000 00111001 00110011 01111110 01100001 01011100 01111000 00110001 00110000 01011100 01111000 01100011 01100110 01011100 01111000 01100011 00110111 01011100 01111000 01100100 01100001 01011100 01111000 00110111 01100110 01011100 01111000 01100001 00110010 01011100 01111000 00111001 00111001 01011100 01111000 01100011 00110011 00101110 00111100 01011100 01111000 00110000 00110000 01011100 01111000 00110000 00110000 01011100 01111000 00110000 00110000 00100111
Mais sobre binário
Vamos ver quem pode me ajudar com isso. Quer converter uma string ASCII para binário. É um problema relativamente simples. Em python, resolvi assim:
def toBin(intNum):
s=""
for i in [2 ** (7-n) for n in range(8)]:
s+={True:"1",False:"0"}[intNum>=i]
intNum=intNum%i
return s
print " ".join([toBin(ord(i)) for i in list("Teste")])
Não sei se é uma solução elegante, mas como fiz em menos de dois minutos, fiquei com essa mesmo. Existe um jeito mais prático? Um módulo que faça isso? E em outra linguagem?
(Não, eu não programo em binário
)
Você é um programador de verdade?
Streamming e download ao mesmo tempo.
Há um vídeo enoooorme na internet em que você tem muito interesse. Por exemplo, a palestra de tableless que eu publiquei esse dias. Você quer baixar e guardar o vídeo, mas ao mesmo tempo quer assistí-lo logo. Se você iniciar o download e tentar assistir via streamming ao mesmo tempo, vai consumir o dobro da banda necessária, o streamming vai ficar pausando a cada dois segundos e o download vai levar muito tempo. O que fazer? Não sei se há no Windows algum player que faça download e toque ao mesmo tempo. No linux eu resolvo assim, numa janela de terminal:
wget -c http://files.elcio.com.br/tableless.wmv
Em outra:
tail -c 10000000000 -f tableless.wmv |mplayer -
Explicando, o primeiro comando, o wget, faz o download do vídeo. O parâmetro -c faz com que, se o arquivo existir, o download seja continuado de onde parou. Isso é útil porque se o download for interrompido, depois você pode continuá-lo com o mesmo comando.
O segundo é uma concatenação de comandos Unix. A parte “tail -c 10000000000 -f tableless.wmv” é um comando e “mplayer -” é outro. O primeiro usa o tail, que imprime o final de um arquivo. Experimente, por exemplo:
tail /var/log/syslog
Você vai ver as últimas linhas do log do sistema. O parâmetro -c recebe um número, o número de bytes a imprimir a partir do fim do arquivo. Você pode colocar qualquer número que seja maior que o arquivo inteiro. O parâmetro -f faz o tail ficar esperando por conteúdo novo no fim do arquivo. Experimente rodar num terminal, por exemplo:
tail -f /var/log/syslog
Você vai ver as últimas linhas do syslog e o tail vai ficar esperando por conteúdo novo. Abra programas, execute ações no sistema, pare e inicie daemons e você vai ver as novas linhas aparecendo ali. A mesma coisa acontece como vídeo. O tail vai despejar na tela todo o conteúdo do arquivo, e vai ficar esperando. A medida que o wget baixa mais dados, o tail vai imprimindo o que chega.
O caracter |, chamado pipe, direciona a saída de um comando para outro. Assim, o tail, ao invés de imprimir os dados do vídeo na tela, os envia para o mplayer. Ao invés de indicar ao mplayer um arquivo ou url que ele deva tocar, colocamos como parâmetro um hífen (-) que diz que ele deve ler da entrada padrão. Assim, ele lê os dados que o tail envia para ele.
Percebe o que fizemos? Colocamos para trabalhar juntos três programas diferentes, escritos por pessoas diferentes, e tudo funcionou. As coisas geralmente são assim no Linux, porque os programas Unix são feitos para que você possa usá-los juntos. Se você quiser saber mais sobre isso, recomendo um livro, disponível gratuitamente online: The Art of Unix Programming, do Eric Raymond.
Alguém acessa isso aqui no domingo?
Mais coisas que a gente vê no Google Analytics: o número de acessos a este site aos sábados é metade de um dia de semana, e aos domingos um terço. Então vamos ver se hoje, domingo do feriadão, tem alguém online. Se você está lendo isso no dia 5 de Novembro, a qualquer hora, deixe um comentário aqui. Se possível, dizendo o que você está fazendo online no domingo do feriado prolongado.
Ubuntu 6.10
Já está todo mundo anunciando, foi lançado o Ubuntu 6.10, Edgy Eft. Parece que tem muita coisa interessante. Versão nova do Gaim, do F-Spot, do Firefox, do OpenOffice, sistema de boot novo, tema novo. E a versão server parece que tem bastante coisa interessante. Inclusive, automatizaram aquele truque, chatíssimo de se fazer, de o sujeito ter acesso ao pen-drive dele no Thin Client (olha aí, Diego, é disso que a gente precisa, né?)
Algumas pessoas me escreveram pedindo reviews, mas eu não vou instalar por enquanto. Não por medo, mas por praticidade.
Diferente do Windows, em que a versão nova é segredo até a véspera do lançamento e meia dúzia de pessoas teve acesso aos betas, no desenvolvimento da maioria das distribuições do Linux a nova versão é testada pela comunidade a cada passo do desenvolvimento. Assim, o Edgy já vem sendo testado por gente do mundo inteiro desde o início do seu desenvolvimento, até o último release candidate, semana passada. A versão final então é bastante estável, e posso instalar sem medo. Ou seja, não é como no Windows, em que você precisa esperar alguns meses antes de instalar uma versão nova numa máquina de produção.
Porque então eu não vou instalar logo o Edgy? Porque minhas máquinas estão funcionando, e muito bem, e eu tenho um milhão de outras coisas para fazer. Então, amigos, sinto muito, mas nada de review. Até porque vocês vão encontrar uma porção de reviews bem escritos pela web logo, muito logo.
Ah, de passagem, deixe-me aproveitar para dizer: que tal trabalhar desenvolvendo o Ubuntu? Em casa, ganhando em Euros e fazendo ocasionais viagens internacionais. Você está preparado?
Instalando Ruby-on-Rails no Ubuntu
Aqui eu já tinha o MySQL instalado. É meu Desktop de desenvolvimento, não a máquina de produção, então vou começar com o WEBrick, o servidorzinho embutido no Rails.
Vejam como foi difícil:
sudo apt-get install ruby libmysql-ruby
Feito.