July « 2007 « Inércia Sensorial
AMPAI: Comprar o novo livro de Khaled Hosseini
Filed under: Geral — inerte @ 23:06
Hoje começarei uma série de artigos os quais espero terem vida curta. Chamam-se Aventuras do Meu Pai Aprendendo Informática. Meu pai não tem a mínima noção de como mexer no computador. Mas o trabalho exige, ele comprou um notebook (o Amazon PC AMZ A 101 V) e tenho dado aulas e ele.
O objetivo hoje, além de conferir os emails pessoal no BOL e na conta do trabalho pelo Outlook, os quais ensinei a ele semana passada, era comprar o novo livro de Khaled Hosseini. Ele não sabia o título, e apenas me disse que esse autor também escreveu O Caçador de Pipas. Ele achava que o livro foi publicado pela Editora Saraiva, então ao abrir o navegador ele digitou corretamente o endereço da empresa, mas no formulário de pesquisa (o qual não consigo fazer link pois os estúpidos comandantes do site da Editora usam frames) ele digitou "kaled hosseini" (sem a letra 'h', um erro normal).
Ele reclamou como a letra ficava pequena ao digitar. Poxa Saraiva, meu pai beira os 60 e usa óculos, ele não consegue ver direito. Cooperem.
Enfim, o site não retornou resultados, e nem sequer deveria, já que a Editora Saraiva não publica os livros desse autor. Disse ao meu pai:
РSe voc̻ quer pesquisar algo, use o Google.
Lá ele foi, e me perguntou:
Posso digitar "o último livro de Khaled Hosseini"?
Eu disse que sim, mas ele acabou digitando "o caçador de pipas." No meio dos resultados, ele viu o como se escreve o nome corretamente. Aliás, aqui cabe um parentêses, meu pai não sabia que cada link retornado é uma página, eu ensine a ele isso na semana passada, e que o texto é apenas um trecho da página que o Google tem guardada.
Eu queria ensinar a ele como copiar o nome e colar na caixa de resultados, e perguntei se ele gostaria que eu ensinasse uma coisa nova a ele, mas ele disse que eram dez e meia da noite e estava com sono, não queria aprender. Então eu colei "Khaled Hosseini" na caixa e eu mesmo cliquei em pesquisar. Isso que ele viu (clique para ampliar a imagem):
– Aí, Saraiva.com.br. Mas não é o livro que eu quero.
Sabendo que o AdWords trabalha com palavras-chaves, e imaginando que a Saraiva deve ter feito uma página apenas para o termo com o nome do autor, resolvi dar uma mão e incentivei ele a clicar, dizendo, quem sabe não aparece o que você quer? Ele disse que não, pois viu logo abaixo o resultado da Americanas, que dizia: "A Cidade do Sol". Ele lembrou então que esse era o nome do livro. Clicou no resultado, e ficou perdido. Não sabia mais o que fazer. Eu então cliquei no título do livro, o que trouxe essa página. Aqui, eu disse que ele poderia comprar o livro, bastava procurar como. Ele começou a ler a página desde o começo, falando em voz alta os nomes dos itens dos menus. CDs, DVDs, Livros… e me perguntou:
РAonde que eu ṇo acho?
– Mais embaixo.
Ele deu um Page-Down duas vezes e começou a ler o rodapé da página.
Finalmente ele viu o botão de comprar. Clicou no botão, colocou o CEP, depois clicou em prosseguir. Aqui o site da Americanas mostrou duas caixas, uma para já clientes colocarem o email e senha e outra para não clientes colocarem o CEP. Ele ainda não era cliente, então colocou o CEP. No cadastro, como deveria digitar muito e já era tarde, eu assumi para completar a compra.
Deixa-me concluir essa saga. Uma das coisas mais faladas por Jacob Nielsen é o modelo mental construído pelos usuários. Hoje eu pude ver isso de forma clara, sem falar das burradas das pessoas que fazem o site. Só para recapitular:
O link para o livro na página do autor no site das Americanas não era azul e sublinhado. Meu pai simplesmente não tinha a mínima idéia que ele poderia ser clicado.
A página especial para a pré-venda de A Cidade do Sol distraiu o meu pai. Procurando pelo botão de comprar, ele começou a ler a página desde o alto à esquerda. Tudo, tudo ali era inútil para que ele cumprisse a tarefa.
A Americanas perguntou o CEP para calcular o frete e depois, para registrar o usuário. Ele não entendeu porquê precisava digitar o CEP de novo. Aqui eu devo concordar com ele, porquê perguntar duas vezes?
E esse é o fim do primeiro AMPAI. Como vocês podem ver, meu pai é novato em informática. E observar ele mexendo no computador é fascinante, uma experiência altamente esclarecedora. Já entendi, em poucos dias, dezenas de problemas que usuários novatos têm com computadores. Alguns, admito, eu seria culpado por tabela nos meus próprios trabalhos. Mas espero superá-los!
Crivo de Eratóstenes em Python
Filed under: Python — inerte @ 12:56
Estou fazendo os desafios do Projeto Euler e nos dez primeiros já vi três com números primos. Meu primeiro algoritmo ingenuamente testava a primalidade de um número tentando dividí-lo por todos os números menores que ele.
Uma lista com 1.000 números primos dessa maneira gera em pouco menos de um segundo no meu computador. Já 2.000, mais de 9 segundos. E 10.001, como pedido por um dos desafios, eu nem tive paciência de esperar os cálculos acabarem. Minha primeira implementação foi a seguinte:
primo_lista = []
if primo(n):
primo_lista.append(n)
if len(primo_lista) == 1000:
def primo(n): for i in xrange(2, n): if n % i == 0: return False return True primo_lista = [] n = 1 while 1: if primo(n): primo_lista.append(n) if len(primo_lista) == 1000: break n = n + 1
Pocurando por métodos mais velozes achei dois, o Crivo de Eratóstenes e o Crivo de Atkin. O primeiro é mais simples, então decidi implementá-lo. O Crivo de Eratóstones é definido assim:
Escreva uma lista dos números entre 2 e o maior número que você quer testar a primalidade. Vamos chamá-la de lista1;
Escreva o número 2, o primeiro número primo, em outra lista que conterá os números primos encontrados. Vamos chamá-la de lista2;
Remova o 2 e todos os múltiplos dele da lista1;
O primeiro número que sobrar da lista1 é primo. Escreva ele na lista2;
Remova essa número e todos os seus múltiplos da lista1. A remoção pode começar da raiz quadrada do número, já que múltiplos menores foram removidos em passos anteriores;
Repita os passos de 4 a 6 até não restarem mais números na lista1;
A classe a seguir, escrita em Python, retorna uma lista com todos os números primos entre 2 e um número especificado (max_n).
max_n = 50
class CrivoDeEratostenes:
def __init__(self, max_n):
self.lista = range(2, max_n + 1)
self.primo_lista = [2]
self.crivo()
def crivo(self):
primo_n = self.lista[0]
max_n = self.lista[-1] + 1
self.lista.remove(primo_n)
for n in self.lista:
if n % primo_n == 0:
self.lista.remove(n)
if len(self.lista) > 0:
self.primo_lista.append(self.lista[0])
return self.crivo()
return self.primo_lista
print CrivoDeEratostenes(max_n).primo_lista
# [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
max_n = 50 class CrivoDeEratostenes: def __init__(self, max_n): self.lista = range(2, max_n + 1) self.primo_lista = [2] self.crivo() def crivo(self): primo_n = self.lista[0] max_n = self.lista[-1] + 1 self.lista.remove(primo_n) for n in self.lista: if n % primo_n == 0: self.lista.remove(n) if len(self.lista) > 0: self.primo_lista.append(self.lista[0]) return self.crivo() else: return self.primo_lista print CrivoDeEratostenes(max_n).primo_lista # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
Pesquisando sobre Eratóstenes na Internet, descobri que ele foi um animal. O grego viveu dois séculos antes de Cristo e conseguiu calcular com 16% de erro a circunferência da Terra. Leu nos papiros de Biblioteca de Alexandria (aonde foi Diretor) que o sol iluminava o fundo de um poço na cidade de Siena (hoje Assuã) ao meio dia do dia mais longo (o solstício) no verão daquele cidade, em 21 de Junho. Ou seja, a luz fazia um ângulo reto com a Terra.
Mas no dia 21 de Junho, quando era meio dia em Siena, o Sol projetava sombras em Alexandria. Eratóstenes conclui então que a Terra era redonda. O ângulo das sombras deu 7º12′, quase 1/50 dos 360º de uma circunferência, então a distância entre Alexandria e Siena multiplicada por 50 seria a circunferência do planeta.
Mandou um pessoal percorrer essa distância e eles voltaram com 925km. E 50 vezes 925 é 46.250 km, enquanto a Terra tem 40.076 km.