Capítulo Quarenta e Sete: Desenvolvendo um Aplicativo para Praticar
A sala dos computadores estava bastante silenciosa, não se via uma alma. Afinal, era período de férias de verão, e os estudantes dedicados à pós-graduação geralmente não precisavam dos computadores.
Ao passar e ligar o ar-condicionado, Lu Zhou escolheu um computador aleatoriamente, sentou-se e, digitando seu número de matrícula e senha, acessou o sistema com destreza.
O motivo de optar pela sala de informática da universidade era simples: os programas escritos em Python costumam ser executados em sistemas Linux, e aprender Python diretamente nesse ambiente era uma vantagem dupla.
Seu próprio notebook usado era tão ruim que até converter um artigo para PDF fazia o computador travar; jogar “League of Legends” era impossível — quando os outros já estavam duelando, ele mal conseguia sair da base. Instalar dual boot ou máquina virtual era impensável.
“Embora os livros expliquem tudo claramente, não imaginei que seria tão complicado de usar... De fato, o que está no papel e o que acontece na prática são coisas bem diferentes. Para realmente aprender, só praticando mesmo.”
Ao usar o sistema Linux pela primeira vez, Lu Zhou sentiu-se completamente perdido. Seguiu o manual da biblioteca por um bom tempo até conseguir se orientar.
Não há como negar que o sistema Windows tem motivos para dominar o mercado: seu ambiente gráfico permite que até um completo novato navegue facilmente.
Já o Linux é outra história; praticamente tudo é feito via linha de comando, só com o teclado. Felizmente, a universidade instalou uma versão com interface gráfica; caso contrário, Lu Zhou nem saberia para que serve o mouse.
Claro que as vantagens do Linux também são evidentes: sua enorme capacidade de personalização e segurança o tornam mais adequado para servidores do que o Windows. E, uma vez habituado à linha de comando, a produtividade supera a do Windows em múltiplas vezes. Por isso, muitas empresas perguntam se o candidato sabe usar Linux ao contratar programadores de servidores.
Depois de dominar o básico do Linux, Lu Zhou abriu o software Python, abriu o livro e ficou encarando a tela.
“Uma das aplicações do Python é escrever crawlers para web. Para testar o que aprendi, esse é um bom começo... Mas que crawler devo fazer?”
Lu Zhou mergulhou em pensamentos.
Pegar posts do Weibo?
Capturar tópicos dos fóruns?
Parece meio sem graça.
O pior é que, uma vez baixados, os dados não servem para nada, e nem há espaço para guardar tudo.
De repente, uma ideia surgiu: lembrou-se das dolorosas experiências de tentar comprar passagens de trem para voltar para casa. Não era culpa do computador lento, mas sim do site do Ministério dos Transportes, cuja interface era incrivelmente ruim.
“Usar um crawler para coletar informações das estações, trens e disponibilidade de bilhetes do site 12306... Isso parece promissor.”
Com essa ideia, Lu Zhou não perdeu tempo e começou a trabalhar.
Afinal, como exemplo típico de uso do Python, os modelos de crawlers estavam todos no livro, com sugestões de melhorias para os algoritmos conforme diferentes situações.
Mas, claro, o site 12306 não era um fórum comum, torná-lo alvo para iniciantes era um desafio considerável.
Mas apenas considerável; para Lu Zhou, que já havia dominado o livro inteiro, não era nada impossível. O crawler em si não era tecnicamente difícil; com menos de trinta linhas de código, ele escreveu todo o programa, que rodou perfeitamente, sem bugs.
Em seguida, começou a captura.
Copiou a URL do site para o código, executou o programa e gerou uma tabela de dados, importando-a para uma pasta previamente criada.
Logo, o ventilador do gabinete começou a zumbir, o computador ficou lento, linhas de código desfilaram na tela preta e os dados foram organizados na tabela.
Observando a pasta sendo preenchida, Lu Zhou, recostado na cadeira, refletiu:
“Python é realmente prático, não é à toa que tantos experts recomendam.”
Vendo as linhas de dados passando, sentiu quase uma ilusão de ser um hacker por um momento.
Mas era só ilusão, nem chegava a ser uma sensação real; afinal, aquilo não tinha nada a ver com técnicas de hacker. Extrair informações públicas de um servidor não é ilegal, no máximo consome recursos do servidor, o que pode irritar os administradores.
Por isso, muitos sites “mesquinhos” implementam sistemas anti-crawler: os mais avançados impedem qualquer coleta ou devolvem dados corrompidos; os mais simples monitoram o número de acessos e bloqueiam o IP.
O site 12306, porém, não era tão mesquinho. Imagine um gigante monopolista que nem liga para a experiência do usuário, se preocuparia com recursos do servidor? Desde que não derrubem o sistema, ninguém se importa!
Ao ver os dados dos trens acumulando-se na pasta, Lu Zhou pensou se não poderia usá-los para algo mais.
“Criar um site de venda de passagens? Parece um trabalho redundante...”
De repente, uma nova ideia surgiu.
E se...
Desenvolvesse um aplicativo para venda de passagens online?
A ideia espontânea brotou e rapidamente se firmou em sua mente.
Embora já existam vários apps terceiros para compra de passagens, não há um oficial. Se conseguisse criar algo único e vendesse para operadores interessados, talvez ganhasse algum dinheiro extra.
Quando o assunto envolve dinheiro, Lu Zhou ficou ainda mais motivado e começou a calcular mentalmente.
Tecnicamente, desenvolver um app completo, desde o front-end até o back-end, é um desafio bem maior do que escrever um simples crawler, mas não impossível. Além disso, os algoritmos que não souber resolver poderia consultar no sistema, gastando pontos para pesquisar, o que também é um processo de aprendizado.
Assim que cumprisse a tarefa de recompensas e desbloqueasse a inteligência artificial nível zero, essas experiências seriam valiosas.
Só que comprar e manter um servidor custaria caro; o gasto com energia elétrica e manutenção seria significativo...
E ele tinha menos de dez mil reais no banco, mal daria para começar.
Mesmo assim, mordendo os lábios, Lu Zhou decidiu superar essas dificuldades.
Se já havia recusado um salário anual de quinhentos mil, o que não poderia fazer?
Se fracassasse, serviria como exercício para o projeto da disciplina, não haveria problema algum.
Assim, Lu Zhou fechou o programa, não apressou-se a modificar o código, mas abriu um documento no Word e começou a desenhar o fluxo de desenvolvimento do app, como se estivesse montando o esqueleto de uma tese.
“A consulta de passagens deve coletar dados em tempo real, exigindo alta performance do servidor; o código precisa ser o mais limpo possível!”
“A interface pode ser simples, mas os dados precisam ser precisos e completos. Isso pode se basear nos apps terceiros mais populares, mas não pode ser uma cópia, precisa ter um diferencial...”
Pensando nisso, Lu Zhou passou algum tempo com o dedo indicador sobre o teclado, até continuar a digitar.
“Primeiro, a compra automática de passagens. Isso não é novidade; há tempos navegadores como Cheetah e 360 já oferecem essa função.”
“Mas um sistema automático de atualização de passagens... Nunca vi isso.” Recordando o último inverno, quando deixou para comprar os bilhetes tarde demais, os colegas ficaram quase meia hora apertando F5 até conseguirem algumas passagens para voltar para casa. Lu Zhou sentiu na pele a dificuldade das pessoas em garantir o retorno para suas famílias no Ano Novo.
Ao atualizar constantemente os dados do site, há uma chance, quase mística, de achar passagens disponíveis, algumas são devoluções de outros usuários, outras ele nem sabia de onde vinham, mas seria uma função interessante.
Por exemplo, definir um intervalo de tempo e alguns trens, deixando o servidor atualizar os dados para o usuário e, ao surgir uma vaga, fechar o pedido instantaneamente. Pelo que viu nos aplicativos de compra de passagens, nenhum tem essa função ainda.
E, em termos de algoritmo, não parecia difícil de implementar.
Pensando nisso, Lu Zhou ergueu os olhos para o relógio de parede.
Era uma da tarde!
Salvou o documento do Word, arregaçou as mangas e colocou as mãos sobre o teclado, cheio de energia.
“Hora de trabalhar!”