Entendendo o Controle de versão (SVN)

A finalizade do controle de versão é óbvia para qualquer pessoa envolvida em projetos onde o volume de informações é grande, e, é necessário manter uma cópia com segurança do resultado final. Mas o que muita gente não vê, é que o controle de versão é muito mais útil do que isto, na realidade, a principal utilidade dele não é manter a última versão, e sim um registro detalhado de *todas* as versões.
Um sistema de controle de versão separa cada inserção na “arvore” de informação, ela normalmente é chamada de “commit”. Cada commit, é uma gravação identificada na base de dados final, contendo a diferença das últimas alterações da arvore disponível na servidora, com as atualizações sendo enviadas.
No caso do SVN, cada atualização é atribuída um número único e progressivo, chamado revisão. Com esse “tageamento” de cada versão, é possível se requisitar ao SVN, uma versão de um dia específico, ou de uma pessoa em específico, até é possível solicitar ao SVN que mostre as diferenças entre uma revisão e outra.
O benefício desse número, é que, ao se fazer deploy de uma aplicação, não é necessário criar uma cópia dessa versão do software, pois basta se anotar o número da revisão em que esta versão deu origem, e poderá sempre requisitar ao controle de versão uma cópia exata.
O uso das pastas de tags e branches, tem outra finalidade.
As versões colocadas no tag, geralmente são versões consideradas estáveis, como por exemplo uma versão 1.0 de um produto, ou um marco grande, para facilitar.
Branches, são trabalhos paralelos, onde é necessário ter uma copia para se trabalhar em uma nova funcionalidade que quebra compatibilidade com a arvore atual, e exigirá um certo trabalho na hora de integrar com a versão original do produto. Também em branches se poe versões em que a compatibilidade não será restorada, como customizações para clientes e etc.

VIBENEWS – Do mIRC ao Twitter

Uma das épocas mais marcantes no desenvolvimento da cultura digital brasileira foi o surgimento das primeiras redes sociais online. Tive a felicidade de ser uma das pessoas responsáveis pela criação e manutenção de uma delas, chamava-se Redesul, popularmente conhecida como mIRC, pois era o programa necessário para entrar. Basicamente era uma rede de bate papo com uma estrutura social e hierárquica bem interessante. Naquela época a internet era bem diferente, sem o Google, Youtube, e a banda larga, a principal atividade quando conectado era conversar e trocar informação com outras pessoas, a melhor forma de se descobrir algo novo era realmente perguntar em algum #canal. Com o tempo, o mIRC tornou-se obsoleto, mas a evolução as vezes acaba trazendo de volta certas necessidades, um serviço bem semelhante vem sendo alvo da mídia e criando um fenômeno de interação social que deve mudar a forma como a informação é propagada, através dos seus 140 caracteres. O twitter trouxe de volta a noção de que atrás de cada computador existe um indivíduo e que no final das contas é dele que vem a informação, neste sistema o que importa é quem você segue ou por quem é seguido. Empresas e organizações vem usando ele como forma de se aproximar aos seus clientes, criando vínculos além da relação de compra e venda, conhecendo melhor o comportamento dos seus consumidores, e podendo responder a críticas e sugestões com agilidade.

Twittadas do dia 2009-10-16

  • @dxbr Your Telephone number is not working, witch number I can call to tell with someone at DealExtreme? in reply to dxbr #
  • @nortonmoom moldem Norton? Foi alfabetizado em ingles também?? in reply to nortonmoom #
  • RT @vjweedman: albert einstein, o gato do @piero_contezini http://flic.kr/p/77JJnZ // pousando de poltergeist #
  • Muito legal a integração do Google Docs com o Wordpress, da pra fazer o artigo no docs e publicar direto no blog. #wordpress #googledocs #
  • @HudsonPassos ensinando no vinil? Doido ein!! in reply to HudsonPassos #
  • Amo minha impressora de casa na exata proporção que odeio a da empresa. #
  • RT @xorna: to loco pra ficar loco // 2 !! #
  • @ila_fox o liquido no geral é apimentado, pelo menos os chineses que eu provei eram. in reply to ila_fox #
  • O @alexsetter é o usuário que eu gostaria que dominasse a Internet, nunca usar o IE é praticamente um puritano da web, virgem dos nerds. #
  • ótimo não ter de instalar os drivers bugados dos fabricantes de impressoras, CUPS TE AMO!! Apple te amo mais ainda por comprar o CUPS! #
  • Assinatura do iPhone Developer Program renovada, mais 1 aninho com acesso a coisas bem divertidas. #
  • Tá na hora de bloquear todos os meus followers bots, bye bye. #
  • Se você pensa em publicar seu arquivo na web, RapidShare não é um método público!! #rapidshare #fail #
  • praticamente odeio mash-ups, inclusive de house! #
  • Como faz pra arrancar essas janelinhas ridiculas de dentro do tweetdeck e dividir em mais de 1 monitor? AIR suporta multi head displays? #
  • @vjweedman por que ele diz boa noite sempre??? in reply to vjweedman #
  • @piuzocaa morning :o * #
  • #healthylifeproject já. #

Powered by Twitter Tools

VIBENEWS – De adeus aos livros

Há milhares de anos a única forma de passar o conhecimento de geração para geração foi a escrita, com o desenvolvimento do papiro e por fim o papel.
Com certeza a evolução da nossa espécie deve-se a capacidade de conservar o conhecimento através deles.
Porém a era dos livros como conhecemos está no fim, com os meios de comunicação onipresentes e a capacidade quase infinita de guardar informação dos computadores, é cada vez mais comum a escrita e a leitura de livros no meio digital. Os E-books, ou livro eletrônicos até pouco tempo eram um nicho de mercado para os entusiastas da tecnologia, pois a sua utilização era problemática, requerendo passar horas e horas na frente do computador, tornando a leitura cansativa e incômoda.
Com o desenvolvimento do papel eletrônico, um tipo especial de tela onde o aparelho não precisa estar emitindo luz para apresentar a informação, uma nova classe de aparelhos foi projetada para resolver este problema. chamados de E-Readers, estes aparelhos irão dar origem a próxima revolução digital, o fim completo da utilização do papel para transmitir informação. Neste ano, a Amazon lançou o Kindle 2, equipado com rede sem fio e acesso a rede celular, sem necessidade de contrato com operadora de telefonia. Ele é capaz de baixar automáticamente centenas de milhares de obras, acessar a wikipedia e até uma lista crescente de blogs. Empresas como a Apple, Fujitsu e Sony também estão apostando nessa tecnologia para distribuição de conteúdo. Na próxima decada escolas e universidades estarão utilizando em larga escala estes aparelhos nas salas de aula.

Twittadas do dia 2009-10-15

  • Feriado é foda, quebra o ritmo da academia, hoje não consegui fazer o treino padrão todo.. #healthylifeproject #
  • Camada de negócios até no Javascript, #whatcouldpossiblygowrong ? #
  • @gravz Continuaria minha vida normalmente! Em VEGAS! depois ia voltar pedindo esmola pra casa, isso sim. in reply to gravz #
  • Caixas de email com limites #FAIL. Gmail pessoas!! #
  • RT @vjweedman: este eh @piero_contezini em seu macbookpro em um momento artificial life http://flic.kr/p/77zeSS #
  • Que grosseria esse lance do wordpress auto se atualizar a si proprio e os plugins dele, por ftp. animal #wordpress rock. #
  • Wordpress 2.8 rodando, MUITO legal!! Update foi transparente, nem sei por que demorei tanto tempo. #
  • Quanto custa pra ligar pra hong kong? #
  • Sinistro, fui usar meu CC no Skype e de repente parei no netbanking pedindo senha, #BRADESCO #MEDO #SCAMMERS #PHISHING #
  • #dealextreme #fail tenho mercadoria "perdida" lá, 4 meses! #
  • Não entendo por que não tem um SVN com "back-end" pra Amazon S3. Apesar de saber que S3 é "eventualmente consistente". #ENTROPYSUX #
  • Zoco citado no blog da Cris Berger: http://www.crisberger.com.br/ #zoco #portobelo #

Powered by Twitter Tools

VIBENEWS – Computador Pessoal? (artigos anteriores)

A Origem deste termo hoje presente na vida de todos vem do primeiro computador vendido em larga escala, chamado IBM PC (Personal Computer) no ano de 1981. Desde então o termo vem sendo utilizado para todos os equipamentos baseados na arquitetura IBM para microcomputadores pessoais. Mas a pergunta é, o que afinal é um PC? Se julgarmos pelo seu principal objetivo, até pouco tempo atrás não existiam PC’s de verdade. Chegamos as esta conclusão porque um computador pessoal deveria ser um equipamento capaz de ajudar uma pessoa em todas as tarefas possíveis em todos os momentos em que ela necessite, e não foi o que aconteceu.

Durante seus primeiros 20 anos de vida, o computador teve problemas sérios para atender a demanda crescente de seus utilizadores, não cumprindo a todas as expectativas dos mesmos por problemas técnicos devidos a sua arquitetura de baixo custo (problemas com peças, discos rigidos, montagem, falsificação) e a incapacidade da até pouco tempo inexistente “Arquitetura de Software” de lidar com as funcionalidades necessárias ao usuário.

A função primária deste equipamento seria ajudar uma pessoa a efetuar suas tarefas, porém o fato é que, até pouco tempo, ele atrapalhava. Quem nunca ouviu a frase: “A informática chegou para resolver problemas que antes não existiam”? Você já deve ter passado a noite inteira escrevendo um trabalho e no outro dia pela manha após salvar ele no seu disquete, ao tentar imprimir no xerox mais próximo constatou que o disquete simplesmente estragou e seu trabalho foi pro espaço… Isso sem contar que você provavelmente tinha uma impressora que misteriosamente se recusou a imprimir com algum erro do tipo “Erro Desconhecido, tente novamente”. Então o que podemos concluir é que, somente após 20 anos de computação pessoal é que eles estão realmente começando a nos ajudar, pois, com a conectividade disponível a todos hoje, é possível ter seus documentos impressos em qualquer parte do planeta, ser lembrado de todos os seus compromissos via SMS, guardar todos os seus documentos em um servidor online, suas fotos, enfim, tudo o que você precisa para viver com um nível considerável de imersão digital. Agora chegaram os Smartphones, e estes sim podem ser chamados de Computadores Pessoais. Eles te lembram dos teus afazeres, te acordam, lêem teus emails, notícias, localizam produtos, ruas, traçam rotas, fazem o que realmente uma maquina com a capacidade de processamento de um computador deve fazer, facilitar a sua vida. Nos próximos anos iremos ver uma mudança radical na forma como nós interagimos com o mundo Digital, com a fusão completa de todos os meios de acesso a informação em um único aparelho. Este sim eu acredito que irá dar jus ao nome que esse nosso amigo jurássico ao lado foi batizado, e as primeiras gerações deles já chegaram, como o iPhone e o HTC G1/Android.

Forçando o Apache do Macos X a rodar em 32 bits

Se você precisa, por algum motivo, rodar o apache em 32 bits, e toda vez que inicia a maquina ele acaba não funcionando, pois por padrão ele é rodado em 64 bits, aqui vai a solução:
No arquivo /System/Library/LaunchDaemons/org.apache.httpd.plist
Trocar a linha de execução do Apache, que por padrão é algo assim:
<string>/usr/sbin/httpd</string>
<string>-D</string>
<string>FOREGROUND</string>
Por estas aqui:
<string>/usr/bin/arch</string>
<string>-i386</string>
<string>/usr/sbin/httpd</string>
<string>-D</string>
<string>FOREGROUND</string>
Agora o apache irá funcionar, inclusive do painel de controle.

Essa situação é útil quando se tem módulos que não rodam em 64 bits, como eaccelerator, postgres, e também módulos dependentes de libs do ports, que ainda não estão com os makefiles alterados.

Olé Zoco!

zoco-oie

Aprenda a programar em 10 anos

O texto abaixo foi traduzido pelo meu amigo Augusto Radtke e é de autoria de Peter Norvig. É dirigido para todos que fazem ciência da computação, ou estudam em alguma área das ciências exatas ou tem interesse ou até mesmo em necessidade de aprender a programar.

Para quem já fez Inteligência Artificial na faculdade deve conhecer o Norvig do seu livro verde, o Artificial Intelligence, a Modern Approach, ou AIMA para os íntimos. Ele era chefe de desenvolvimento dos robôs que foram pra marte da NASA, agora trabalha no Google. Ou seja, ele sabe do que está falando! O texto é longo (uns 10 minutos de leitura).
Aprenda a Programar em Dez Anos
Peter Norvig
Tradução por Augusto Radtke
Porque todo mundo tem tanta pressa?

Entre em qualquer livraria, você vai ver Aprenda Java em 7 dias assim como diversas variações oferecendo lições de Visual Basic, Windows, Internet e por ai vai, em dias ou horas. Eu fiz a seguinte pesquisa na Amazon.com:
CODE
pubdate: after 1992 and title: days and

(title: learn or title: teach yourself)

e encontrei 248 entradas. As primeiras 78 eram livros sobre computadores (número 79 era Learn
Bengali in 30 days). Troquei “dias” por “horas” e encontrei resultados incrivelmente similares: 253 livros, 77 de computadores, seguidos de Teach Yourself Grammar and Style in 24 Hours no número 78. Do total de 200, 96% eram livros de computadores.

A conclusão é que ou as pessoas estão com muita pressa de aprender sobre computadores, ou computadores são extremamente fáceis de aprender do que qualquer outra coisa. Não há livros de como aprender Beethoven, ou Física Quântica ou até adestramento de cães em alguns dias.

Vamos analisar o que um título como Learn Pascal in Three Days
pode significar:

* Aprenda: Em três dias você não terá tempo de escrever programas significantes, e aprender com seu sucesso ou fracasso. Você não terá tempo para trabalhar com um programador experiente e entender o que é conviver neste ambiente. Em resumo, você não terá tempo para aprender muito. Logo eles só podem estar falando a respeito de entendimento supercial, como disse Alexander Pope, aprender pouco é uma coisa perigosa.
* Pascal: Em três dias você deve ser capaz de aprender a sintaxe do Pascal (isso se você já conhece uma linguagem similar), mas não vai aprender muito sobre como utilizar essa sintaxe. Em resumo, se você era, vamos dizer, um programador Basic, você pode aprender a escrever programas no estilo Basic usando a sintaxe do Pascal mas não aprender em que o Pascal é bom (ou ruim). Então, qual o ponto? Alan Perlis disse certa vez: “Uma linguagem que não afeta a maneira que você pensa sobre programação, não vela a pena ser aprendida”. Um ponto é se você precisar aprender um pouco de Pascal (ou algo como Visual Basic ou Javascript) porque você precisa interagir com alguma ferramenta existente para uma tarefa específica. Mas nesse caso você não esta aprendendo a programar, você está aprendendo a como resolver essa tarefa.
* em três dias: Infelizmente, não é suficiente, como veremos a seguir.

Aprenda a Programar em Dez Anos.

Pesquisadores (Hayes, Bloom) tem demonstrado que leva em torno de dez anos para desenvolver perícia em qualquer de uma variedade de áreas, includindo jogar xadrez, compor músicas, pintar, tocar piano, nadar, jogar tênis e pesquisar neuropsicologia ou topologia. Aparentemente não há atalhos: até Mozart, que foi um prodígio musical aos 4 anos levou mais 13 antes de compor música de primeira classe. De outra forma, ou Beatles parecem ter disparado nas paradas em primeiro lugar com a aparição no show do Ed Sullivan em 1964. Mas eles estavam tocando em pequenos clubes em Liverpool e Hamburgo desde 1957, e mesmo que eles conseguiram uma aparição em masa, o primeiro grande sucesso mesmo, Sgt. Peppers, foi lançado em 1967. Samuel Johnson pensa que pode levar mais do que dez anos: “Excelência em qualquer departamento pode ser alcançada apenas com o trabalho de uma vida toda; não é possível compra-lá por menos.” E Chaucer reclamou: “vida tão curta, leva tantu pra aprender.” Sim, é “tantu”, e não “tanto”, um dia você entende.

Então aqui vai minha receita para sucesso na programação:

* Aprenda inglês. Leia o original deste texto. Essa tradução só está aqui para exercitar o meu inglês, não o seu. (Nota do tradutor)
* Se interesse por programação, e faça porque é legal. Tenha certeza que isso continue a ser legal para você dedicar dez anos nisso.
* Converse com outros programadores; leia outros programas. Isso é mais importante do que qualquer livro ou curso de treinamento.
* Programe. O melhor tipo de aprendizado é aprender fazendo.
Colocando de uma forma mais técnica, “o nível máximo de performace individual em um domínio é não é alcançado automaticamente em função de uma experiência extendida, mas sim aumentado mesmo por indivíduos extramente experientes por um esforço deliberativo de melhorar.” (p. 366) e “o aprendizado mais efetivo requer uma tarefa bem definida com uma dificuldade apropriada para o indivíduo em particular, dado que exista um retorno sobre a experiência e oportunidades de repetição e correções de erros.” (p. 20-21) do livro
Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, que é uma referência interessante deste ponto de vista.
* Se você quiser, gaste quatro anos em uma universidade (ou mais em uma pós-graduação). Isso lhe dará acesso a alguns empregos que requerem alguma formação e um grande entendimento do campo de trabalho, mas se você não gosta muito de ir para escolha, você pode (com alguma dedicação) conseguir alguma experiência similiar sobre esse tipo de trabalho. Em qualquer caso, apenas ler livros não será suficiente.
“Educação em ciências da computação não faz de ninguém um gênio em programação tanto quanto estudar pincéis e pigmentos não fazem um bom pintor.” diz Eric Raymond, autor de The New Hacker’s Dictionary. Um dos melhores programadores que eu já contratei tinha apenas o segundo grau, e ele produziu vários softwares incríveis, tem seu próprio grupo de discussão,
e fez dinheiro suficiente em ações para comprar seu próprio clube nortuno.
* Trabalhe em projetos com outros programadores. Seja o melhor programador em alguns projetos, seja o pior em outros. Quando você é o melhor você testa suas habilidades para liderar um projeto, e para inspirar outros com a sua visão. Quando você é o pior aprende o que os mestres ensinam e o que não gostam de fazer (porque eles fazem você fazer por eles).
* Trabalhe em projetos após outros programadores. Esteja envolvido em entender um programa
escrito por outro. Veja o que é preciso para entender e consertar quando o programador original não esta por perto. Pense em como desenvolver seus programas para que seja fácil para quem for mante-lós após você.
* Aprenda pelo menos meia dúzia de linguagens de programação. Includa na lista uma linguagem orientada a objetos (como Java ou C++), uma que seja de abstração funcional (como Lisp ou ML), uma que suporte abstração sintática (como Lisp), uma que suporte especificação declarativa (como Prolog ou C++ com templates), uma que suporte co-rotinas (como Icon ou Scheme), e uma que suporte paralelismo (como Sisal).
* Lembre-se que há um “computador” em “ciência da computação”. Saiba quanto tempo leva para o seu computador computar uma instrução, carregar uma palavra ad memória (com e sem cache), ler palavras consecutivas do disco rígido, procurar por uma nova posição no disco.(As respostas estão aqui.)
* Se envolva no esforço de padronização de uma linguagem. Pode ser o comite ANSI C++, ou na padronização de programação na sua empresa, se utilizaram identação com 2 ou 4 espaços. Em qualquer caso, você aprende o que outras pessoas gostam em uma linguagem, o quanto eles gostam e talvez um pouco do porque eles gostam.
* Tenha o bom senso de cair fora desse processo de padronização tão rápido quanto possível.

Com tudo isso em mente, é questionável o quão longe você pode ir apenas lendo livros. Antes que do meu primeiro filho nascer eu li todos os livros de Como Fazer e ainda me sentia como um novato. Trinta meses depois, quando nasceu meu segundo filho, voltei aos livros para relembra? Não, ao invés disso resolvi utilizar minha experiência pessoal do primeiro filho, que se tornou muito mais útil do que milhares de páginas escritas por especialistas.

Fred Brooks, em seu trabalho No Silver Bullets identificou um plano em três partes para encontrar grandes projetistas de software:

1. Sistematicamente identifique os melhores projetistas o quanto antes.
2. Atribua um orientador de carreira responsável pelo desenvolvimento cuidadosamente de um plano de carreira
3. Promova oportunidades para desenvolvedores em aprendizado interagir e estimular uns aos outros.

Isto assumo que algumas pessoas já possuem as qualidades necessárias para ser um grande desenvolvedor de software; o grande trabalho é apenas coloca-los no caminho correto. AlanPerlis coloca de forma mais sucinta: “Qualquer um pode ser ensinado a esculpir: Michelangelo poderia ser ensinado a não esculpir. É o mesmo com grandes programadores”.

Então vá em frente e compre aquele livro de Java; provavelmente você terá algum uso dele. Mas isso não vai mudar a sua vida, ou o seu conhecimento como um programador em 24 horas, dias, ou meses.
Referências

Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.

Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.

Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.
Respostas

O tempo aproximado de execução de várias operações num PC típico de 1Ghz no verão de 2001:
executar uma instrução simples 1 nseg = (1/1,000,000,000) seg
extrair uma palavra da memória L1 2 nseg
extrair uma palavra da memória RAM 10 nsec
extrair uma palavra consecutivamente do disco rígido 200 nseg
extrair uma palavra de uma nova posição o disco (busca) 8,000,000nseg = 8mseg
Apêndice: Escolha de Linguagem

Muitas pessoas tem me perguntado sobre qual linguagem devem aprender primeiro.
Não há resposta, mas considere estes pontos:

* Use os seus amigos. Quando me perguntam “que sistema operacioal devo usar, Windows, Unix ou Mac?” minha resposta geralmenet é: “use o que seus amigos usarem”. A vantagem é que você poder aprender com os seus amigos vence qualquer diferença entre sistemas operacionais ou linguagens. Considere também seus futuros amigos: a comunidade de programadores que você fará parte se continuar. A sua escolha possuia uma grande comunidade de usuários ou apenas uma comunidade morta? Existem livros, sites e fórums para encontrar respostas? Você gosta das pessoas desses fórums?
* Mantenha-se simples. Linguagens como C++ ou Java são desenvolvidas para utilização profissional por um grande time de desenvolvedores experientes que estão preocupados com a eficiência de execução de seus códigos. Como resultado, essas linguagens possuem partes complicadas desenvolvidas para essas circunstâncias. Você esta focado em aprender a programar, não precisa dessa preocupação. Você precisa de uma linguagem que foi desenvolvida para ser fácil de aprender e lembrar.
* Interaja. Como normalmente você aprenderia piano: de modo interativo, no qual você escuta uma nota logo que pressiona uma tecla ou de um modo automizado em que você escuta cada nota quando a música termina de tocar? Claramente, aprender interativamente é muito mais fácil, e assim é com a programação. Insista em uma linguagem com um modo interativo e use-o.

Baseado nesses critérios, minhas recomendações para uma primeira linguagem seria Python ou Scheme. Mas as suas circunstâncias podem variar, e existem
outras boas opções. Se a sua idade ainda tiver apenas um dígito, é melhor escolher Alice ou Squeak (aprendizes mais velhos podem gostar também). O importante é você escolher e começar.
Apêndice: Livros e outros recursos

Muitas pessoas me perguntam em quais livros e páginas elas devem aprender. Eu repito que “apenas ler livros não é suficiente” mas eu posso recomendar o seguinte:

* Scheme: Structure and Interpretation of Computer Programs (Abelson & Sussman)é provavelmente a melhor introdução a ciência da computação e ele faz ensinando a programar enquanto você aprende computação.
Você pode ver vídeos de aulas desde livro, assim como o texto completo. online O livro é desafiante e talvez algumas pessoas precisem de outra forma de aprendizado.
* Scheme: How to Design Programs (Felleisen et al.) é um dos melhores livros sobre como projetar programas de forma elegante e funcional.
* Python:Python Programming: Uma introdução a computação (Zelle) e também a linguagem Python.
* Python: Vários tutorials online estão disponíveis em Python.org.
* Oz: Concepts, Techniques, and Models of Computer Programming (Van Roy & Haridi)parece ser um sucessor moderno para Abelson & Sussman. É um tour pelas grandes idéias da programação, muito mais amplo que
Abelson & Sussman mas mantendo uma certa facilidade de leitura. Ele utiliza uma linguagem, Oz, que não é muito reconhecida mas serve como base para outras linguagens.

Notas

T. Capey informa que a página de Complete Problem Solver na Amazon agora possui “Teach Yourself Bengali in 21 days” e “Teach Yourself Grammar and Style” na lista de livros que “Consumidores que compram esse item também costuma comprar estes”.
Eu imagino que um grande parte das pessoas que visualizam esse livro vem dessa página.