Lua: a linguagem de script ideal

Outro dia eu assisti a palestra do Andy Wingo sobre Guile Scheme e em um dos slides, uma definição é utilizada para provocar o espectador, “a sloppy language with a slow implementation”. Acho uma forma interessante de começar o texto, pois nesse texto eu vou apresentar o porquê de eu achar lua a linguagem de script ideal.

Aqui, uso o termo script como uma linguagem cujo objetivo é complementar a linguagem principal do seu projeto. Motivos para usar uma linguagem de script seriam uma carga mental necessária menor para manter partes não críticas do projeto.

Simplicidade é importante. Eu estive trabalhando em 3 projetos de problemas/domínios diferentes escritos em soluções/linguagens diferentes (ou diferentes idiomas/sotaques dentro da mesma linguagem) nesses últimos meses e eu posso afirmar que a carga associada a troca de contexto mental que ocorre diariamente não é nada agradável, produtiva, ou benéfica da alguma forma. Você pode confiar no meu julgamento (se o texto fosse em inglês eu iria preferir a frase “believe me”). Alternar entre duas (!) linguagens complexas durante o desenvolvimento do projeto é… overkill.

No começo, achei que não ia querer usar Lua, por ser uma linguagem muito simples (tipo C) e que não respeita várias “boas ideias de programação” (e.g. reaproveitamento de código, abstração, expressividade etc). Mas acontece que mudei minha forma de pensar para focar mais em “isso é um jogo, lua vai ser usado só para scriptar fases, inimigos, etc”. Toda vez que a gente fosse manter o código de script, o que aconteceria seria atenção aumentada somente a uma parte do código (e.g. esse boss não está agindo como imaginei, o que será que aconteceu? vou olhar o código somente desse script e mais nenhum outro código!) e nada de pegar “conhecimento/abstrações” dos códigos antigos. Na verdade, criar padrões ou coisas do tipo poderia até atrapalhar, já que aumentaria a carga necessária para revisar um script que queremos ver independente dos outros. Essa lógica não é bem muito certa, mas penso nela ao me imaginar desenvolvendo o jogo por um longo prazo.

Lua é uma linguagem simples o suficiente para ter conseguido espaço dentro de um kernel “estabelecido”, o NetBSD. E não é incomum ver preocupações de segurança com coisas complexas e comportamentos implícitos, principalmente quando vindo de pessoas que vem de C ou de desenvolvimento de kernel. Mesmo assim, lua conseguiu um pouco de espaço nessa área frente a outras linguagens bem mais antigas e estabelecidas (como Python).

Lua é simples o suficiente para até ter sido escolhida como “linguagem de consulta” para a interface/programa Wireshark.

Lua também possui implementações bem rápidas.

E é isso, lua é tipo Go, medíocre por não tentar fazer nada, mas pelo menos não acaba errando demais e se torna bem simples. E pelos motivos expostos, considero lua a linguagem de script ideal dentre as que conheço.

Eu não confio no seu julgamento se você não critica sua linguagem de programação

A lógica por trás de tal filosofia é bem simples. Se sua linguagem de programação não possui defeitos, então não há nada para mudar nela, pois ela é perfeita, exatamente como está, imutável, nada precisa mudar. Entretanto, e essa é a parte da argumentação que é menos baseada em consequências lógicas e mais baseada em observações ao meu redor, ainda está para ocorrer o momento em que eu veja um entusiasta de sua linguagem de programação que considere negativo o lançamento de uma nova versão de sua linguagem de programação. Cada uma das mudanças que culminou no lançamento de uma nova versão de sua linguagem de programação era uma carência ou um defeito que existia em sua antiga versão, e os “fãs” só irão reconhecê-lo uma vez que o defeito é corrigido, pois sua linguagem é perfeita, sagrada, livre de questionamentos, um tabu quando se menciona a ideia de defeitos.

Pois bem, eu não acho essa posição de sua parte nenhum pouco honesta, e eu quis fazer esse texto para tentar fazer você refletir um pouco a respeito. Outro motivo é que eu estava há muito tempo sem escrever e esse foi um texto fácil para mim, que fluiu da minha mente para “o papel” encontrando nenhuma barreira ou barreiras imperceptíveis. Eu perdi muito pouco tempo para fazê-lo. É um texto de mera opinião.

A ideia de fazer esse texto me veio após perder bastante tempo para escrever a pauta para um podcast que me convidaram a gravar. O tema do podcast seria a linguagem Rust, e eu, na minha mentalidade de blogueiro que ainda não sabe montar pautas, dediquei 4 páginas da pauta só para elaborar o quão C++ é uma linguagem ruim. Agora você precisa entender que a linguagem C++ foi minha linguagem favorita por 6 anos de tal forma que simplesmente não havia espaço para carinho a outras linguagens de programação, e que eu dediquei muito tempo de minha vida só para entender como eu poderia defender essa linguagem. Hoje em dia, C++ não perdeu meu carinho e ela ainda é minha solução favorita para metade dos problemas que resolvo. Ainda assim, 90% do tempo que dediquei para montar a pauta, foi para criticar C++, e em momento nenhum deixei espaço para que o consumidor daquela pauta/obra pudesse imaginar que eu tenho um apego tão grande por essa linguagem.

Acho que uma boa forma de terminar esse texto é ressaltar que sua linguagem só evolui se você corrigir seus problemas, e isso só vai acontecer uma vez que seus problemas sejam reconhecidos. A “linguagem perfeita” é um termo que só é usado por programadores imaturos, grupo do qual um dia eu também já fiz parte.

Impressões de um ebook reader

Resolvi fazer um texto com minhas impressões após ter testado um ebook reader. Resolvi fazer isso após ter tido uma experiência bem positiva com o mesmo, que foi inesperado para mim.

Qualquer ebook reader

Primeiro, uma clarificação. Um tablet é um tablet, e não um dispositivo especializado em leitura de livros que possui uma tela de e-ink otimizada para (1) evitar agressão a sua visão e (2) estender a duração da bateria a níveis espantosos. Logo, nada que se aplique a essas impressões se aplicaria a um tablet.

Segundo, eu achei que eu não gostava de ler, mas ebooks realmente são superiores a livros:

  • Muito leve, é possível segurar com uma única mão não importa em que posição você esteja.
  • Ocupa pouco espaço e carrega todos os seus livros, então você não precisa ter preguiça de ir até a estante para escolher o próximo livro para ler. Pode deixar sempre perto de você e tudo certo.
  • A página não dobra ou “cai” enquanto você está lendo. É sempre confortável.
  • Quando você está lendo aqueles livros mais densos, o livro não precisa usar uma fonte minúscula para economizar espaço. O tamanho da fonte é sempre confortável, pois é você que escolhe.
  • Marca a página para cada livro automaticamente. Nada de preocupação de colocar um marca página antes de largar o livro de lado enquanto se distrai com alguma outra tarefa como atender o celular por 5 minutos.
  • Dicionário. Nunca em minha vida eu fui uma pessoa que costumava ler com um dicionário do lado. Entretanto, acabei descobrindo essa função realmente útil. E melhor de tudo, você não precisa carregar o dicionário junto com seu livro para onde for. E algo tão bom quanto, não precisa sair gastando tempo procurando a palavra no dicionário.
  • Em uma semana eu terminei de ler a metade restante do livro que eu havia interrompido ano passado.
  • Há também uma vantagem que não sei se é muito bem explorada ainda. Assim como no Steam, atualizações são baratas. Assim sendo, toda essa bagunça de procurar por erratas podia diminuir.
  • Você não precisa pagar para ter livros clássicos da literatura cujo direitos autorais já expiraram. Só se você quiser pagar pela tradução de alguém.

Tentei ler HQs no ebook reader também, mas não achei confortável e para alguns desenhos, é melhor ter a experiência de perceber todas as cores e detalhes que o artista fez.

Dicas

Caso esteja procurando o melhor ebook reader e não esteja preocupado com o preço, a lista de funcionalidades que usaria para classificar um ebook reader como sendo versão de luxo seria:

  • Tela de alta resolução.
  • A tela não é minúscula como algumas versões mais baratas. 6 polegadas é um tamanho ótimo.
  • Touchscreen capacitiva.
  • Frontlight.

EDIT (2016/07/14):

E eu completei vários dias estando de posse de um ebook reader baseado em tela de e-ink. Não há muito mais há acrescentar, então nem vou criar um post novo. Só há dois novos comentários que quero fazer.

Dá para ler HQ/comic/mangá tranquilamente também, caso esteja no formato ePUB:

Foto do PocketBook Touch Lux 3 sendo usado para ler a comic 18 days

A câmera do celular não é muito boa, mas garanto que além de legível, a arte continua incrível

O segundo comentário que eu tenho a adicionar, é que você pode escolher uma tela de screensaver legal para funcionar como porta-retrato. Fotos de natureza (ex.: cachoeiras) trazem tranquilidade a algumas pessoas. Aí no meu ebook reader, eu uso como screensaver uma foto que trás tranquilidade para mim (uma brincadeira legal seria você tentar adivinhar o que é comentando por aqui).

Resenha: Introdução à programação com a linguagem C, por Rodrigo Paes

Livro "Introdução à programação com a linguagem C", por Rodrigo Paes

Como discutir programação sem discutir código-fonte? E o livro “Introdução à Programação com a Linguagem C” acerta nesse ponto, com exemplos iluminadores para os conceitos ensinados, e uma disposição de conteúdo gradual e simples que devem tornar o aprendizado efetivo. Como um professor dedicado, o autor deve ter aproveitado seu material, os seus alunos, como um experimento para encontrar exemplos que funcionassem.

Uma preocupação com simplicidade que omite ou adia a preocupação com certos conceitos nos capítulos iniciais. Uma decisão que permite o livro ser fácil de entender e ser tão curto quanto é. É o contrário da especificação da linguagem, apropriado para aprendizado. Entretanto, o livro não deixa de apresentar pequenas nuâncias nos conceitos durante o decorrer da leitura, que só ressaltam a preocupação em fazer os conceitos serem entendidos corretamente, ao explicitar uma consequência ou outra de cada regra, de forma lenta, sem sobrecarregar o aluno, de forma mais efetiva que não se perca em muitas informações para se lembrar. Essa preocupação é bem abrangente e cobre, por exemplo, segurança, terminologia e arquitetura. Um grande exemplo de como conciliar pragmatismo no ensino sem criar um aluno ignorante.

Os trechos “código comentados” ainda possuem o bônus de gradualmente (e de forma lenta, sem forçar sobrecarga de conteúdo), apresentar exemplos sutis de “dividir para conquistar”, “abordagem top-down” e outros bons conceitos para habilidades gerais de solucionar problemas, mas só quando a fundação da linguagem já foi bem explorada e o aluno já deveria estar melhor acostumado com questões de sintaxe, o que acho muito acertado no livro.

Todo o capítulo de recursão é um bônus a parte que estimula o aluno a quebrar a forma de pensar com a qual todo o resto do livro o acostuma e, assim, espero, o estimule a sempre procurar novas formas de resolver problemas e aprender mais, em vez de ficar limitado e satisfeito com o próprio livro.

Esse é um livro que eu recomendaria a qualquer pessoa que nunca teve contato com programação e deseja aprender a programar utilizando a linguagem C.

Amizade

Primeiro que, para quem esperar algo mais científico ou algo polêmico… vão perder a viagem. Esse aqui é um texto reflexivo que eu vou fazer. “Mas você não costuma fazer texto reflexivo…”, não costumo, mas já não é a primeira vez que faço. Meu blog possui sim alguns textos de mera opinião ou mera reflexão. Se você não está habituado dê uma olhada nos textos que eu tenho no meu blog, que existem outros segmentos, e entre eles aqueles que eu simplesmente dou minha opinião ou faço alguma reflexão para vocês e depois fico lendo comentário, porque eu acho isso legal.

Já há algum tempo que eu noto esse hábito que eu acho que existe das pessoas terem uma necessidade em classificar, e inclusive classificar outras pessoas. “Amizade é uma dessa que dura décadas”, “amigo é aquele que briga pelo outro”, “amigo é aquele que se sacrifica”, “amigo é aquele que tem coragem de dizer quando você está errado”, “amigo é aquele que se coloca no lugar do outro”, “amigo é aquele que já chega dando voadora”. Primeiramente que eu vejo essas definições como uma forma de “disputar por um título” e é um ato maldoso quando você tenta estimular alguém a participar dessa “competição por quem consegue mais poder”. “sangue do meu sangue”, “você é mais que um amigo para mim, você é um irmão” e coisas do tipo entram na mesma categoria para mim, um título desnecessário que deveria ser evitado.

E segundo que eu acho essa classificação desnecessária. “Ah, não vou brincar com fulano porque fulano não é meu amigo”. Ser amigo ou não, se você quer se divertir com fulano, você devia tirar o peso dessa tarefa de classificar de sua vida e assim você poderia aproveitar ela melhor. Eu não consigo pensar em uma situação onde essa classificação é útil para você. Na verdade, enquanto escrevia essa frase me veio a mente a palavra “guerra”, mas taí outra coisa que não é útil de verdade a não ser que você esteja disputando recurso.

Viver sem essa necessidade de classificar, me lembra aquele verso, “que seja infinito enquanto dure”. Se preocupar apenas com o que é importante, e não com as “promessas”, se concentrar no agora.

Pois então, há um amigo (ta-da! eu acabo usando a palavra para não ofender as pessoas) meu que ficava me enchendo o saco porque “eu não sei o que é um amigo”. Depois de pronto, vou mandar o link desse texto para ele. E vez ou outra ele volta com essa história para mim, me pressionando a pensar no assunto em momento esporádicos.

Pois então, se nenhuma experiência havia contribuído para me fazer pensar em “o que é um amigo”, talvez alguns eventos tenham contribuído para me fazer pensar “o que NÃO é um amigo”, e dessa forma me ajudar a classificar.

Há um discurso interessante que menciona esse poder de se descrever uma vez que os opostos são expostos do Alan Watts:

“And they’re always arguing with each other. And what they don’t realize is […] neither one can take his position without the other person because you wouldn’t know what you’re advocating [..]. And that’s the answer to philosophy. You see? I’m a philosopher and I’m not gonna argue very much because if you don’t argue with me I don’t know what I think.”

E a primeira parte da classificação de amizade na qual acabei pensando é de que amigo é aquele que possui o poder de lhe ferir. Ao longo do tempo, eventos acabaram lhe expondo, você possui fraquezas que são conhecidas. Você não tem o poder de ignorar os seus atos, pois ele possui o poder de chamar sua atenção de forma especial. Você se importa com ele, pois essa característica dá mais importância à relação. Pode até ser que você se importante tanto com ele que a forma que ele tenha de lhe machucar seja lhe ignorando. Não há intenções escondidas ou necessidade de negociações. A relação entre vocês é sincera. Ela pode abusar de você de forma que outros não podem. Mas apesar do perigo de manter essa relação que pode acabar em feridas, você permite a presença dela em sua vida, essa sendo a segunda parte da classificação de amizade.

Um detalhe importante dessa forma de pensar é que amizade deve ser encarado como uma decisão (ou “loucura do destino”) e de forma nenhuma você pode encarar amizade como uma dependência. Se há alguém de quem você depende, você não pode chamar essa pessoa de amiga, pois você não tem escolha. Entretanto, se você escolheu depender de alguém, aí é outra história.

Um outro detalhe igualmente importante da “minha classificação”, caso adotada, é que ela exclui de muitas pessoas o direito de chamar de amigo um cachorro. Pois é, tenho preconceitos com pessoas que se envolvem demais com cachorros ou gatos. Para mim começa a ficar errado a partir do momento que você começa a tratar o cachorro como humano e coloca perfume e outras coisas nele. Acho que é a partir desse momento que fica doentio.

Boost.Http and Beast.HTTP joining forces

The newest update to the Boost.Http is that I had a long meeting with Vinnie Falco about a possible collaboration and a few changes are going to happen.

The official announcement was sent to the Boost mailing list and is available in the gmane archives.

What this means:

  • A lot of work making changes so projects can hopefully be merged in the future.
  • API will break again.
  • The thing I wasn’t caring about, “HTTP/1.1 oriented interface”, will be provided on a higher-level than simply an HTTP parser. This is what Beast.HTTP already provides.
  • Beast.HTTP already provides WebSocket support and HTTP client support.
  • We’ll be using a new mailing list to coordinate further development and I invite you to join the mailing list if you’re interested in the future of any of these libraries or HTTP APIs in general.

Boost.Http parser project

I’ll develop a HTTP pull parser for Boost.Http during this summer.

The story starts with Boost not being selected for Google Summer of Code this year. I wanted more funding to spend time on Boost.Http and this was unfortunate.

However, funding from other sources was announced for three projects and Boost.Http was one of the selected projects.

I’d rather work on the request router, but I don’t have a strong design for a request router right now because I’m still experimenting. A weak design would translate on a weak proposal and I decided to propose a HTTP parser.

Misc

An interesting HTTP library that carries some similarities with Boost.Http was announced on the Boost mailing list: Beast.

Uisleandro is working on a request router focused on ReST services for Boost.Http: https://github.com/BoostGSoC14/boost.http/compare/master…uisleandro:router1?expand=1.

%d blogueiros gostam disto: