#7 João Bueno | Pythonistas que você devia conhecer

perfil_gimp_tintec

João Bueno, mais conhecido como JS, é uma das pessoas de grande importância na linguagem Python. Trabalhando há anos com a linguagem, ter participado da diretoria da Associação da Python Brasil, contribuidor do software de edição de imagens GIMP, por isso o convido para compartilhar suas experiências.

Como conheceu Python, lá em 2001?

Eu já usava Linux há alguns anos – sempre gostei de ter controle do computador, de poder dizer para ele o que fazer. Eu sabia C, e outras linguagens que tinham caído em desuso nos ambientes gráficos – tanto do Linux quanto do Windows: nenhuma delas deixaria eu fazer uso das capacidades de multimídia de um computador como o que existia na época. Criar uma janela gráfica para poder se desenhar com o mouse em C é uma tarefa para algumas semanas. Alguns anos antes eu havia tentado aprender um pouco de Java: applets para Web eram até “tranquilos”, mas para programas desktop eu abandonei a tentativa de aprendizagem após alguns dias tentando instanciar uma classe “Rectangle” da biblioteca padrão sem ter sucesso (nem documentação).

Python para mim era mais um nome de linguagem dentre tantos outros que “quando eu tivesse tempo, iria estudar”: Perl, TCL, Awk, C++ … Meu maior interesse era aprender Perl – na época ainda era o que “impulsionava a Web”. Mas um dia comprei um guia rápido de Python (da Novatec -já está fora de catálogo há vários anos) – e lendo o mesmo, havia um diferencial: o que eu vinha embutido na linguagem e na sua biblioteca padrão permitiam o desenvolvimento rápido, sem muitos meandros, de aplicações simples. Me lembro até hoje como me chamou a atenção a documentação do módulo “random” nesse guia: enquanto nas outras linguagens na época (e até hoje, 2015), tudo o que você tem de “random” é um número entre 0 e 1, que cabe a você massagera com 3 ou 4 expressões distintas até você ter um uso pra ele: você nunca quer um número aleatório entre 0 e 1.

Você quer escolher um elemento de uma lista, quer um número inteiro entre 0 e o número de colunas da sua tela gráfica – quer um número prático. Python não só incluía chamadas diretas para todos os usos práticos possíveis de um número aleatório – mas também chamadas para várias distribuições estatísticas distintas de números aleatórios (uniforme, gauss, triangular, …)Essa e outras coisas me empolgaram bastante. Um ou dois meses depois fui começar um projeto para uma pequena empresa, e fiz em Python para Web, usando CGI.

E como começou a se interessar e colaborar com o GIMP?

(Para quem não sabe, GIMP é o GNU Image Manipulation Progam – um programa livre para manipulação de imagens e fotos com muitos dos mesmos recursos do mais conhecido na categoria, o Photoshop)

Isso foi um pouco mais tarde, em 2004. Eu já usava Linux e Software Livre há bastante tempo – e sempre tinha gostado de programas de imagens – que deixassem você usar o computador para desenhar – quando tive meu primeiro computador na década de 80, a vontade era ter uma impressora pra ele, para poder passar meus desenhos para o papel. Ainda para o PC XT,que não tinha ambiente gráfico, tive um “mouse” – só servia para os programas de desenho.

E em 2004 me bateu a questão de – “nossa eu uso todos esses programas em Software Livre, já é hora de eu começar a contribuir com pelo menos um projeto”. Bom, a minha opção foi o GIMP, do qual eu já era um usuário frequente. Fui atrás da documentação e do código fonte, e consegui compilar o programa e entrar em contato com a comunidade de desenvolvedores. A tradução também estava parada, num momento entre versões estáveis do programa, e mesmo as partes já traduzidas tinham problemas sérios. Então junto com minhas primeiras contribuições, ou tentativas, assumi também a tradução do programa.

Como foi essa experiência de dar um curso sobre edição de imagens(http://timtec.com.br/course/edicaoetratamento/)?

Esse curso foi interessante por se tratar de um “MOOC” (“Massive Online Open Course”) completo, voltado para público inciante na edição de imagens. O projeto tinha um patrocínio grande, e foi executado profissionalmente – acho que o mais marcante nele foi o contato com a produção de vídeo “em nível de TV”: a gente ia para o Estúdio, a equipe de gravação era completamente diversa das pessoas com quem eu conversava sobre conteúdo-, havia uma fase de pós-produção dos vídeos. Muita correria,e devido a própria natureza e público alvo do curso, era sobretudo um curso “leve” – bem pouco denso, de conteúdo fácil, com o básico, repetido, feito para quem estivesse abordando o assunto pela primeira vez.

Por um lado deu para matar a vontade de ensinar as pessoas a “mandarem no computador” que é o que eu gosto, mas só pela interface do GIMP. Claro que isso não é o suficiente pra mim, então mesmo sendo um curso básico, nas últimas aulas dou umas dicas de como criar plug-ins em Python para o GIMP, e modificar arquivos de SVG manualmente para o Inkscape 🙂

Brython, como ele é e o que tem de interessante?

Brython é uma implementação de Python feita para rodar no Browser – no lado do cliente.

Ele funciona traduzindo scripts em Python para Javascript no browser, depois da página ser carregada.

Quando conheci o projeto, em 2013, achei interessante só pelo fato de se poder usar a sintaxe do Python, mais legível, direto no navegador: sem chaves, delimitação por identação – e já funcionavam os “import”s que são uma mão na roda, sem falar nas sintaxes para formatação de strings: Python tem duas formas nativas, ambas implementadas no Brython, e em Javascript a única forma ainda é intercalar pedaços de strings com aspas e operadores “+” de concatenação.

Desde 2013 o projeto acelerou bem, e deixou de ser só uma “sintaxe python like” para uma implementação completa – que permite usar toda a sintaxe da linguagem, inclusive a construção “yield” e “yield from” , permitindo programação assíncrona sem callbacks explícitos.

Desde 2001 sou um fã de Python e isso tem vários motivos: a legibilidade, flexibilidade e previsibilidade da linguagem talvez sejam os maiores – Brython é um projeto que permite o uso de tudo isso no Client Side. Só a funcionalidade de “import” já é um grande diferencial em relação ao javascript “cru” que faz tudo num namespace único,e não tem qualquer suporte direto a módulos ou carregamento programático de partes de um programa. (Em javascript você tem que criar um elemento “script” no HTML, ou carregar um arquivo usando ajax e executa-lo com “eval”). Já o “import” é uma construção natural de qualquer programa minimamente mais complexo.

Ele ainda é um projeto que depende de tração de usuários e uma comunidade para chegar ao mainstream – mas creio que se comparado a projetos Javascript que já ganharam tração no passado, ele oferece muitas vantagens: hoje num projeto Web desenvolvedores tem que incluir vários, as vezes mais de 10, projetos distintos de javascript para ter um pouco mais de funcionalidade que a linguagem em si não tem (e o fato de não ter uma biblioteca padrão é,talvez, a raiz desse problema).

Brython é um projeto que não só oferece a tradução de Python para javascript, mas uma biblioteca padrão adaptada da própria biblioteca do Python (precisa de collections.OrderedDict? é só usar!)., e nessa fase de “aquecimento” o projeto está aberto inclusive a mais funcionalidades para integrar o conjunto (por exemplo, um módulo específico para facilitar a programação multimídia, no estilo feito com Pygame, mas usando o Canvas do html5);

O interessante de ter Python no browser é que alguns dos projetos de Javascript são completamente desnecessários – a biblioteca “underscore_js” ou “lodash” por exemplo, é composta de cerca de algumas dezenas de funções que, podem ser rescritas em 3 ou 4 linhas, quando não numa única expressão de Python – devido a coisas que quando você descreve parecem poucas – mas tem a ver com a maior formalidade e precisão dada aos objetos no Python e a evolução ordenada da linguagem.

O que é Plone e porque ele é tão importante?

O Plone é um sistema de gerenciamento de conteúdos – ou “CMS”: primariamente um sistema que pode ser usado para manter um portal de notícias no ar, alimentado por vários jornalistas e editores, e com milhões de leitores. Ele é totalmente escrito em Python e tira proveito de quase tudo que a linguagem oferece, sendo construído em cima do “Zope” – que é um servidor de aplicações bem completo, com ênfase em segurança, e granularidade de aplicações.

Plone tabém pode funcionar como plataforma Web para alguns projetos que se expandam a partir da idéia de um CMS.

Por outro lado, tem uma frase que costumo dizer sobre Plone: “O que Python tem fácil, Plone tem de difícil” : ele tem várias camadas, algumas existentes apenas por motivos históricos e uma complexidade razoável. Por outro lado, numa instalação limpa, atende a requisitos de acessibilidade, internacionalização e padrões Web -e está pronto para funcionar como um portal de notícias com quase nenhuma customização.

Ele tem uma importância grande par ao eco-sistema de Python por que permite uma contribuição entre projetos muito forte entre pessoas trabalhando em projetos diferentes em países diferentes. O Plone todo se divide em centenas de pacotes Python, todos licenciados sob a G.P.L. – que obriga as pessoas que fazem uso dos mesos a contribuírem suas evoluções no software de volta à comunidade. Isso acabou por criar um ambiente bem próspero para os desenvolvedores. (Algumas pessoas de fora podem se preocupante alguém se “apoderar” de um pacotinho em que elas trabalharam por 3 ou 4 semanas…mas esse pacotinho só faz alguma coisa por que está construído em cima de um trabalho sólido de dezenas de pessoas ao longo de mais de 10 anos – então na verdade, mesmo para quem tem um pensamento egoista, ainda sai bem barato)

Em uma de suas palestras, você afirmou que dá para fazer tudo com Python, realmente dá?

É uma plaletra que ministrei algumas vezes – e mesmo em palestras introdutórias de Python costumo perguntar ao público alguma área da T.I. que acham que Python não seja usado. E não há. Desde a automatização de tarefas em servidores, renderização e vídeo, computação científica, aplicações Web, big data, Python _de fato_ perpassa todas as áreas.

E ainda que em alguns nichos possa haver ferramentas mais especializadas ou melhores, Python é a ferramenta que vai atuar naquele nicho e permitir de forma transparente uma interface com todos os outros.

Precisa guardar suas expressões de matemática simbólica numa base SQL para exibir num portal Web? Python faz as três coisas, sem modificações necessárias.

Agora — nem tudo são tão flores assim – há um nicho importantíssimo – crucial, na verdade, em que Python está bem atrás: o desenvolvimento de aplicações “mobile” – tanto para Android quanto para IOs e outras plataformas. No espírito da pergunta “tem como fazer?” a resposta ainda é “sim” – há projetinhos de Python que permitem o desenvolvimento para Android, a o Kivy focado em aplicações multimídia multiplataforma – mas não há uma “grande plataforma unificada”.

A tendência é que Python se infiltre e caminhe por aí – ainda em 2015 foi formada uma lista de discussão justamente para debater a disponibilização e facilidades – ao estilo da ‘biblioteca padrão” de Python em dispositivos móveis.

Também é um segmento em que eu vejo o Brython em dois ou 3 anos começando a chegar de forma contundente: afinal, rodando no browser ele pode tirar proveito diretamente das APIs disponibilizadas em HTML5 para os vários recursos dos dispositivos móveis. (mesmo hoje, scritps em Brython abrem em funcionam sem problemas nos navegadores Android – e suspeito que no IOs também)

Se uma pessoa estiver aprendendo Python para web hoje, qual framework você indicaria (Django, Flask, Bottle, Web2py)?

É difícil dizer — primeiro, conforme você conhece a linguagem mais a fundo, percebe que os frameworks são “sabores” diferentes para criar aplicações Web: todos eles vão cobrir um conjunto de necessidades que as aplicações web tem em comum. Além dos frameworks citados há vários outros: pyramid, o próprio Plone, Tornado, web.py , watson…

Tradicionalmente se pensa em Flask, Bottle e Web2py como “microframeworks” por que potencialmente uma aplicação Web pode estar autocontida em um arquivo, e em Django como algo “maior e mais sofisticado para projetos maiores”…

Essa divisão é um tanto artificial: embora você não possa colocar um projeto django num único arquivo .py,ele pode ser contido num único “.egg” de Python. O Deploy também não depende em nada do número de arquivos, e em geral acontece com uma atualização do repositório GIT no servidor. E as aplicações com Django ficam bem estruturadas, fáceis de acompanhar, e fáceis de crescer.

Outros como Pyramid e Flask dão bastante flexibiidade quanto à persistência de dados, sistema de login, até o engine de templates – e essa é a tendência, eu creio: frameworks com componentes “plugáveis” em que você pode colcoar um componente que melhor atenda seu projeto, ou mesmo desenvolver um quando os existentes deixam de atender.

Para quem está começando, acredito que o Flask seja uma boa opção – ele tem bastante coisa já integrada e é escalável para projetos maiores – mas, uma coisa que eu sempre enfatizo é: entender a linguagem Python e “como funciona” uma aplicação web é mais importante que qualquer framework em particular.

No Centro de Treinamento da Novatec você fez o primeiro de curso de Flask, o que foi falado? E porque Flask?

Não deixei de dar ênfase aos princípios que citei acima/; o Flask oferece uma série de facilidades para se criar uma aplicação Web. A grande ênfase do curso, além do foco em chegar ao final com uma aplicação Web completa, ainda que simples, foi entender os princípios por trás de uma aplicação Web.

Por exemplo, é fácil abrir um tutorial de Flask e ver que se você coloca uma linha com “@app.route(‘/’) precedendo uma função que retorna o texto “Hello world”, você tem uma aplicação de “hello world” para a web.

Mas aí essa linha fica parecendo mágica – principalmente para quem não está já bem familiarizado com Python: o que faz essa linha? Quem é “app”? Ela é mesmo necessária? E se eu quiser fazer uma aplicação em Flask, mas quiser declarar minhas rotas de outras formas?

Esse curso então procurou dar uma base de Python, e de como funciona uma aplicação Web para que todos os participantes pudessem entender essas questões – e ver quanto mais coisas tem que ser feitas, se esse método não fosse empregado para declarar as funções da aplicação. E também por que, mesmo com todas as facilidades que o Flask traz, uma aplicação Web completa ainda depende de tantos outros pacotes, como flask-login – com as facilidades para gerenciar o login de usuários, e flask-wtf, para gerar formulários.

Tudo levado em consideração o Flask é um ótimo framework – desenvolvido quando Python já contava com anos de estrada, e outros frameworks estavam sofrendo com decisões de projeto tomadas anos antes. Flask teve a oportunidade de ter um “início do zero” quando as pessoas já tinham aprendido com os erros. Como consequência disso temos sua burocracia e tamanho reduzidos, e a possibilidade de usar vários módulos diferentes para tarefas com tecnologias diferentes.

Por exemplo: é bem “fora do caminho” você querer usar uma base de dados não relacional no Django. Em Flask, se você deseja ter alguns tipos de objeto persistidos em SQL e outros de forma não relacional, é só a questão de escrever os modelos de objetos de acordo – não precisa nenhuma mágica, nenhuma configuração para funcionar tudo.

Esses cursos sempre são uma oportunidade de aprendizado – não só para quem faz,mas também para o instrutor, que nesse ambiente de forte interação consegue perceber onde estão as principais dificuldades. É bem provável que em continuidade ao mesmo tenhamos em breve um tratando do Framework, e ensinando a chegar rapidamente nos resultados desejados – e sem nunca tratar um assunto como “mágico”.

Algumas palestras:

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s