Perfil

Luciano Ramalho @ramalho


Sobre mim

-

Propostas

[4h] De geradores com yield a co-rotinas com await: concorrência moderna em Python

Novidades como o acionamento de co-rotinas com `yield from` e os módulos `concurrent.futures` e `asyncio` representam um capítulo novo na evolução de Python, e são as melhores razões para migrar para Python 3. Esta palestra mostrará como essas ferramentas tornam a programação concorrente possível sem o gerenciamento manual de threads/locks e sem o inferno dos callbacks.

Também serão abordadas as novas sintaxes para programação assíncrona no Python 3.5, usando as palavras reservadas `async` e `await`.

Decifrando Decoradores e Descriptors

Desenvolvedores Python usam decoradores e descritores diariamente, mas muitos não os entendem bem o suficiente para criá-los (ou depurá-los). Decoradores são comuns em frameworks Web e bibliotecas de testes em Python. Descritores são a chave para os ORMs usados com esses frameworks, mas nos bastidores eles desempenham um papel ainda mais crucial no Python como o mecanismo que transforma funções simples em métodos vinculados (bound methods), definindo o valor do argumento self. Este tutorial é uma introdução suave a esses importantes recursos da linguagem, usando uma apresentação orientada a testes e exercícios. Serão abordadas melhorias no Python 3.6 que tornam a metaprogramação mais fácil de se fazer corretamente.

Fishbowl: Diversidade

Um fishbowl é um tipo de painel ou mesa-redonda muito democrático. Funciona assim: são oferecidas 4 cadeiras para quem quiser falar, sendo que uma delas deve sempre estar vaga. Após explicadas as regras, três pessas voluntárias se sentam e uma delas começa a falar. O microfone vai passando entre as três pessoas sentadas. Se uma quarta pessoa quer participar, ela senta na cadeira vazia. Uma das pessoas que já estava lá precisa obrigatoriamente levantar para oferecer a cadeira vazia para quem mais quiser participar. A dinâmica funciona super bem, e permite a expressão de opiniões diversas em um clima cordial, onde as pessoas são estimuladas a ceder a vez para outras se manifestarem.


Na PythonNordeste a Roselma Mendes organizou um fishbowl sobre Mulheres em TI que foi sensacional, ouvimos depoimentos impressionantes de mulheres e homems, e todos aprendemos muito sobre os desafios de ser mulher no mercado de informática.


O tema desse fishbowl seria "Diversidade": para conversar sobre o que é, como se relaciona com tolerância/intolerância, porque é desejável, e como promover.

Girando pratos: concorrência moderna em Python

Delegação de co-rotinas com `yield from` e `await`, o módulo `asyncio` e `concurrent.futures` representam capítulos novos na evolução de Python, e são as melhores razões para atualizar para Python 3. Esta palestra mostrará como essas ferramentas tornam a programação concorrente acessível até mesmo para programadores casuais, com aumentos dramáticos de desempenho em aplicações em rede.

Go e Python lado a lado

Sim, eu continuo adorando Python e amando a nossa comunidade!


Mas Go é muito legal, e surpreendentemente Pythonica! Há que diga até que Go segue o Zen do Python mais de perto!!! Eu discordo, mas mesmo assim vale a pena conhecer essa linguagem que tem fortes influências de Python e de outras linguagens, como Pascal e Modula 2, que influenciaram fortemente o design de Python também. Há muitos motivos para gostar de Go, mas os dois principais para mim são coisas que em Go é fácil fazer, mas em Python é uma encrenca:


* Gerar binários executáveis fáceis de distribuir.


* Fazer progragramas de alto desempenho que usam todos os núcleos da CPU para atacar problemas computacionalmente pesados.


Nessa palestra eu vou mostrar exemplos de código Python e Go lado a lado para você notar a diferença, as vantagens, e desvantagens de cada uma.


 

Iteradores e geradores: a preguiça como virtude

Entre as linguagens populares hoje, Python foi a primeira a ter um laço for inteligente, que sabe acessar diretamente os itens das coleções nativas também das criadas pelo usuário, sem depender de um índice numérico. Mas a inovação não ficou por aí: Python também popularizou o conceito de função geradora, um jeito muito mais simples de fazer objetos "iteráveis" do que o padrão de projeto "iterator" clássico. Nessa palestra básica vou mostrar como os iteradores e os geradores funcionam, e também mostrar alguns geradores poderosos que vêm prontos para usar na biblioteca padrão de Python. Você vai ver porque entender geradores é a chave para entender o jeito Pythonico de programar!

Micropython: Python em computadores pequeninos

MicroPython é um interpretador criado por Damien George que implementa a maior parte de Python 3 de um jeito tão compacto que roda em micro-controladores com kilobytes de memória. Começou com uma placa especial, PyBoard, fruto de um financiamento coletivo bem sucedido em 2015, mas hoje existem versões de MicroPython rodando em vários dispositivos diferentes, como o BBC micro:bit, as placas CircuitPython da Adafruit, e as populares e baratas placas baseadas nos chips ESP8266 e ESP32.


Nessa palestra vou mostrar um pouco do universo MicroPython através de demonstrações com alguns dispositivos.

Operações vetoriais com NumPy

O jeito Pythonico de processar grandes massas de dados com iteradores é excelente, mas para cálculos numéricos o NumPy oferece algo ainda melhor: operações vetoriais que se aplicam de uma vez só a tabelas inteiras de números, sem necessidade de iteração! Nessa demo de 5 minutos veremos o que isso signifca na prática.

O Poder dos Geradores: do `for` ao `yield` [50 minutos]

Como funcionam iteradores e geradores em Python, e como usá-los para processar grandes volumes de dados eficientemente.

Prática de conjuntos: como usar os tipos set e frozenset para simplicar a lógica

O tipo set é muito útil, mas nem todo mundo usa tanto quanto poderia. Um uso óbvio é eliminar duplicações, porque conjuntos contém apenas elementos únicos. Ao oferecer operações como intersecção e união, e testes eficientes de membro e sub-conjunto, o tipo set poupa muito trabalho de codificação com laços e condicionais aninhados, evitando potenciais bugs lógicos ou problemas de despenho. Trocar laços e condicionais por uma expressão com operações de conjuntos pode tornar seu código mais legível e eficiente ao mesmo tempo. Nessa palestra vamos ver que lógica booleana e teoria de conjuntos se relacionam fortemente, e por isso operações em conjuntos podem simplificar bastante a lógica em muitos algoritmos comuns. Depois veremos em detalhes as APIs dos tipos set e frozenset, bem como a sintaxe de set comprehension, e porque é excelente ter sobrecarga de operadores. Por exemplo a expressão matemática:


(A B) \ C


pode ser escrita em Python assim:


(a & b) - c


ou assim:


a.intersection(b).difference(c)

Prática de Conjuntos em Python

Essa palestra tem dois objetivos: (1) mostrar como os tipos set e frozenset podem poupar muito esforço de programação de lógicas simples ou complicadas e (2) mostrar como esses tipos são exemplos excelentes de uma API "pythonica" que aproveita alguns dos melhores recursos de Python: iteradores, argumentos opcionais, sobrecarga de operadores, mutabilidade e imutabilidade.

Pytest: a biblioteca mais Pythonica que eu conheço!

Pytest é como Python: é muito fácil de começar a usar, mas não se limita ao básico e também oferece soluções muito sofisticadas. Ao contrário do pacote unittest da biblioteca padrão, Pytest não exige que você crie classes para fazer testes -- sua caso de teste básico é uma simples função. Pytest é tão elegante que não precisa importar nada para começar, porque você pode usar a palavra reservada assert em seus testes, em vez de um monte de métodos assertIsso e assertAquilo!


Em caso de erro ou falha, Pytest consegue extrair as informações necessárias para gerar relatórios de erro detalhados e fáceis de entender. Depois do começo suave, você começa a descobrir os recursos avançados de Pytest, a biblioteca mais sofisticada de testes que existe em Python, criada originalmente para suportar o Pypy, o projeto de software livre mais complexo já feito em Python! Logo você vai se perguntar: porque eu não usei Pytest antes? (eu sei, é porque unittest tava lá pronta pra usar... mesma razão que leva pessoas codarem scripts imensos em bash e depois se arrepender... mas isso é outro assunto ;-).


Ah, sim, antes que eu esqueça: Pytest também sabe rodar seus testes legados em unittest, então você pode começar a usá-la hoje sem nenhum investimento.


Essa palestra vai dar um gostinho do que é programar testes automatizados com Pytest!


 

Python Assíncrono: tudo ao mesmo tempo agora

Python 3.4 incorporou um loop de eventos e a biblioteca AsyncIO. No 3.5 ganhamos 4 construções sintáticas novas: await, async def, async for e async with, junto com vários métodos especiais para suportar essas construções, como __aiter__ e __anext__. E agora temos o pacote uvloop, que traz para o Python o alto desempenho da biblioteca libuv -- o motor assíncrono do Node.js. Estamos mais preparados do que nunca para resolver problemas envolvendo alta concorrência de I/O. Vejam o que diz a engenharia de infra-estrutura do Facebook:


We are increasingly relying on AsyncIO, which was introduced in Python 3.4,
and seeing huge performance gains as we move codebases away from Python 2.


(Estamos contando cada vez mais com AsyncIO, que foi lançado no Python 3.4, e observando grandes ganhos de desempenho à medida que convertemos nosso legado de Python 2). Vamos falar sobre isso, e -- com sorte -- até ouvir depoimentos dos presentes sobre usos de AsyncIO!