|
|
@ -7,9 +7,12 @@ |
|
|
|
|
|
|
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui"> |
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui"> |
|
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="dist/reset.css"> |
|
|
|
<!-- <link rel="stylesheet" href="dist/reset.css"> --> |
|
|
|
<link rel="stylesheet" href="dist/reveal.css"> |
|
|
|
<!-- <link rel="stylesheet" href="dist/reveal.css"> --> |
|
|
|
<link rel="stylesheet" href="dist/theme/night.css" id="theme"> |
|
|
|
<!-- <link rel="stylesheet" href="dist/theme/night.css" id="theme"> --> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="reveal.js/css/reveal.css"> |
|
|
|
|
|
|
|
<link rel="stylesheet" href="reveal.js/css/theme/night.css" id="theme"> |
|
|
|
|
|
|
|
|
|
|
|
<!-- Code syntax highlighting --> |
|
|
|
<!-- Code syntax highlighting --> |
|
|
|
<link rel="stylesheet" href="dist/highlight/zenburn.css"> |
|
|
|
<link rel="stylesheet" href="dist/highlight/zenburn.css"> |
|
|
@ -85,20 +88,18 @@ |
|
|
|
<h2>Quem?</h2> |
|
|
|
<h2>Quem?</h2> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<section data-background="_images/avatar-hd.png"> |
|
|
|
<section data-background="_images/me-background.png"> |
|
|
|
|
|
|
|
|
|
|
|
<div class="semi-opaque"> |
|
|
|
<div class="semi-opaque"> |
|
|
|
<h3>Júlio Biason</h3> |
|
|
|
<h3>Júlio Biason</h3> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="semi-opaque"> |
|
|
|
|
|
|
|
<div> |
|
|
|
|
|
|
|
<ul class="empty"> |
|
|
|
<ul class="empty"> |
|
|
|
<li>Programador a 30 anos</li> |
|
|
|
<li>Programador a 30 anos</li> |
|
|
|
|
|
|
|
<li>Programando em Python desde 1998</li> |
|
|
|
<li>Praticante de mototerapia</li> |
|
|
|
<li>Praticante de mototerapia</li> |
|
|
|
<li>Trekkie</li> |
|
|
|
<li>Trekkie</li> |
|
|
|
</ul> |
|
|
|
</ul> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
@ -174,6 +175,10 @@ |
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<h4>"Vamos fazer um browser em Python!"</h4> |
|
|
|
<h4>"Vamos fazer um browser em Python!"</h4> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<small> |
|
|
|
|
|
|
|
- Bando de sem-noção na universidade, eu incluso. |
|
|
|
|
|
|
|
</small> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
@ -311,22 +316,65 @@ |
|
|
|
<h3>Nova Separação</h3> |
|
|
|
<h3>Nova Separação</h3> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<!-- java --> |
|
|
|
<section> |
|
|
|
<!-- rust do lado --> |
|
|
|
<img src="_images/tos-kirk-sidelook.webp" class="stretch"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
Mas aí eu resolvi mudar de empresa, acabei caindo num |
|
|
|
|
|
|
|
projeto Java. |
|
|
|
|
|
|
|
</aside> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<!-- <img src="_images/voy-janeway-congratulations.webp" class="stretch"> --> |
|
|
|
|
|
|
|
<img src="_images/ds9-dax-kick-ass.gif" class="stretch"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
Por fora, eu comecei a olhar para Rust, porque era o |
|
|
|
|
|
|
|
burburinho que tava se falando na época -- e eu tava |
|
|
|
|
|
|
|
entediado com Java, e queria aprender algo novo. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"Uma linguagem que não muda a sua forma de pensar em |
|
|
|
|
|
|
|
programação, não vale a pena ser aprendida -- Alan Perlis" |
|
|
|
|
|
|
|
</aside> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<h3>Mais do Mesmo</h3> |
|
|
|
<h3>Mais do Mesmo</h3> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<!-- django, mas nada de impressionante --> |
|
|
|
<section> |
|
|
|
<!-- rust do lado, de novo --> |
|
|
|
<img src="_images/tng-troi-cowboy2.gif" class="stretch"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
Quando eu consegui voltar pro Python, eu voltei também |
|
|
|
|
|
|
|
com Django. E aí a situação já tava morna, era algo |
|
|
|
|
|
|
|
como "mais do mesmo", "caí na rotina"... |
|
|
|
|
|
|
|
</aside> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<h3>O Começo das Brigas</h3> |
|
|
|
<!-- <img src="_images/voy-janeway-correct.webp" class="stretch"> --> |
|
|
|
|
|
|
|
<img src="_images/ds9-dax-eyebrows.gif" class="stretch"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
Por algum motivo, eu continuei tentando aprender Rust. |
|
|
|
|
|
|
|
Várias coisas "clicaram" do jeito certo com a |
|
|
|
|
|
|
|
linguagem. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Teve inclusive um pequeno projeto que eu fiz com |
|
|
|
|
|
|
|
websockets que precisava de performance (dados vindos |
|
|
|
|
|
|
|
com muita frequencia) e que entraria com outro projeto |
|
|
|
|
|
|
|
em C++, mas controle de dependências em C++ é um porre |
|
|
|
|
|
|
|
do inferno, e eu estava preocupado que Python não teria |
|
|
|
|
|
|
|
a performance necessária. No fim, até meu chefe (que |
|
|
|
|
|
|
|
fez a parte em C++) disse que o código ficou bonito. |
|
|
|
|
|
|
|
</aside> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<!-- Diana Troi e Luxwana Troi --> |
|
|
|
<section> |
|
|
|
<!-- Diana Troi quando perdeu a capacidade de sentir emoções --> |
|
|
|
<h3>O Começo das Brigas</h3> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<!-- Múltiplas versões, incluindo não-mantidas --> |
|
|
|
<!-- Múltiplas versões, incluindo não-mantidas --> |
|
|
|
<section> |
|
|
|
<section> |
|
|
@ -347,26 +395,54 @@ |
|
|
|
|
|
|
|
|
|
|
|
Tem que funcionar em todas. |
|
|
|
Tem que funcionar em todas. |
|
|
|
|
|
|
|
|
|
|
|
("Vou usar o Walrus operator! Olha que lindo!" "Não tem Walrus no 3.6") |
|
|
|
("Vou usar o Walrus operator! Olha que lindo!" "Não tem |
|
|
|
|
|
|
|
Walrus no 3.6") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Não só isso, mas cada desenvolvedor tem uma máquina |
|
|
|
|
|
|
|
diferente, tem alguns ainda usando OpenSUSE15 (que |
|
|
|
|
|
|
|
perdeu suporte em 2018!) e não querem mudar porque para |
|
|
|
|
|
|
|
o que eles precisam fazer, funciona. |
|
|
|
</aside> |
|
|
|
</aside> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<!-- distribuição de coisas --> |
|
|
|
|
|
|
|
<!-- packaging? what? exe quebra tudo --> |
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<img src="_images/tng-enterprise-explodes.gif" class="stretch"> |
|
|
|
<img src="_images/tng-enterprise-explodes.gif" class="stretch"> |
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
<aside class="notes"> |
|
|
|
Install no WSL quebrava pacotes por culpa da versão do Python no sistema. |
|
|
|
Tentar distribuir scripts nesse ambiente é sofrimento |
|
|
|
|
|
|
|
que não termina mais. É versão diferente de Python, é |
|
|
|
|
|
|
|
diferenças entre distribuições. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Install no WSL quebrava pacotes por culpa da versão do |
|
|
|
|
|
|
|
Python no sistema. |
|
|
|
|
|
|
|
|
|
|
|
Gerado EXE (com Nuitka) começou a explodir o Git. |
|
|
|
Gerado EXE (com Nuitka) começou a explodir o Git. |
|
|
|
</aside> |
|
|
|
</aside> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<img src="_images/ds9-dax-bathlet.jpg" class="stretch"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
Adivinha quem veio me salvar desses problemas? |
|
|
|
|
|
|
|
</aside> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<p><code> |
|
|
|
<p><code> |
|
|
|
pip install <span class="fragment">--break-system-packages</span> |
|
|
|
pip install <span class="fragment">--break-system-packages</span> |
|
|
|
</code></p> |
|
|
|
</code></p> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
A gota d'água veio quando eu fui tentar empacotar um |
|
|
|
|
|
|
|
script dentro de um docker pra rodar por dentro do |
|
|
|
|
|
|
|
sistema de CI (e evitar todos os problemas que eu tava |
|
|
|
|
|
|
|
tendo até o momento). Peguei a versão mais nova do |
|
|
|
|
|
|
|
Ubuntu, criei meu docker file com "run apt update", |
|
|
|
|
|
|
|
"run apt upgrade", "run apt install python", "run pip |
|
|
|
|
|
|
|
install [pacote]" e fui agraciado pela mensagem que eu |
|
|
|
|
|
|
|
tenho que ter um virtualenv. |
|
|
|
|
|
|
|
</aside> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
@ -375,16 +451,30 @@ |
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<img src="_images/tng-picard-slow-facepalm.gif" class="stretch"> |
|
|
|
<img src="_images/tng-picard-slow-facepalm.gif" class="stretch"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
Quer dizer que não tem uma forma de isolar instalações |
|
|
|
|
|
|
|
de Python? |
|
|
|
|
|
|
|
</aside> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<img src="_images/tos-kirk-slap.gif" class="stretch"> |
|
|
|
<img src="_images/tos-kirk-slap.gif" class="stretch"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
POR QUE DIABOS EU TENHO QUE USAR VIRTUALENV ENQUANTO |
|
|
|
|
|
|
|
QUE O DEBIAN NÃO PRECISA? |
|
|
|
|
|
|
|
</aside> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<h3>Despedida</h3> |
|
|
|
<h3>Despedida</h3> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<img src="_images/tng-data-goodbye.gif" class="stretch"> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<!-- rust tá resolvendo tudo de forma melhor, mesmo que mais trabalhoso --> |
|
|
|
<!-- rust tá resolvendo tudo de forma melhor, mesmo que mais trabalhoso --> |
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<img src="_images/friendship-py-ended.jpg" class="stretch"/> |
|
|
|
<img src="_images/friendship-py-ended.jpg" class="stretch"/> |
|
|
@ -401,20 +491,42 @@ |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<img src="_images/tng-data-goodbye.gif" class="stretch"> |
|
|
|
<img src="_images/tng-picard-sigh.gif" class="stretch"> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<img src="_images/tng-picard-sigh.gif" class="stretch"> |
|
|
|
<h2>Falando sério...</h2> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<h2>Falando sério...</h2> |
|
|
|
<h3>O Projeto</h3> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>Não é o padrão de 90% das instalações do Python, em que |
|
|
|
|
|
|
|
ele pode ser completamente isolado (Docker) ou roda em |
|
|
|
|
|
|
|
uma máquina apenas (CD).</p> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<h3>Problema de HTTP:</h3> |
|
|
|
<p>... mesmo assim, quanto tempo se sabe que distribuição |
|
|
|
|
|
|
|
de pacotes é um porre e não se olha isso com seriedade?</p> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
Outro problema que pode se ter com pacotes é que a |
|
|
|
|
|
|
|
lista de dependências pode forçar atualizar coisas que |
|
|
|
|
|
|
|
a gente não quer. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Armin Ronacher -- Flask -- postou recentemente uma |
|
|
|
|
|
|
|
idéia de como ter múltiplas versões de um mesmo pacote |
|
|
|
|
|
|
|
num projeto. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Aliás, cadê vendoring? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Cadê PyPI privado? |
|
|
|
|
|
|
|
</aside> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h3>Problema de HTTP:</h3> |
|
|
|
<p> |
|
|
|
<p> |
|
|
|
Anos de surras com wget/curl/etc me ensinaram como |
|
|
|
Anos de surras com wget/curl/etc me ensinaram como |
|
|
|
autenticar a requisição e como fazer pip sem |
|
|
|
autenticar a requisição e como fazer pip sem |
|
|
@ -462,10 +574,6 @@ |
|
|
|
<li>JIT hook</li> |
|
|
|
<li>JIT hook</li> |
|
|
|
</ul> |
|
|
|
</ul> |
|
|
|
|
|
|
|
|
|
|
|
<p class="fragment"> |
|
|
|
|
|
|
|
Cadê melhor API para integração com C/C++? |
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
<aside class="notes"> |
|
|
|
GIL-less Python pode melhorar performance, |
|
|
|
GIL-less Python pode melhorar performance, |
|
|
|
mas a gente sabe que o que precisa de performance |
|
|
|
mas a gente sabe que o que precisa de performance |
|
|
@ -518,15 +626,39 @@ |
|
|
|
<img src="_images/so-salary-2024.png" class="stretch"> |
|
|
|
<img src="_images/so-salary-2024.png" class="stretch"> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2>Enfim...</h2> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<ul> |
|
|
|
|
|
|
|
<li>Gerenciamento de dependências é um porre a anos -- |
|
|
|
|
|
|
|
e isso ninguém quer botar a mão.</li> |
|
|
|
|
|
|
|
<li>Para aplicações isoladas, "distribuição" é ok. Não |
|
|
|
|
|
|
|
é pro resto.</li> |
|
|
|
|
|
|
|
<li>A sintaxe é o que tá segurando Python no mercado.</li> |
|
|
|
|
|
|
|
</ul> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<p>CodeShow: <a href="https://www.youtube.com/watch?v=tJYKrViTvJM"> |
|
|
|
|
|
|
|
O MAIOR PROBLEMA DO PYTHON FINALMENTE RESOLVIDO |
|
|
|
|
|
|
|
</a></p> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<small> |
|
|
|
|
|
|
|
Várias soluções criadas, <strong>nenhuma oficial</strong>. |
|
|
|
|
|
|
|
</small> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<section data-background='_images/thats-all-folks.jpg'> |
|
|
|
<section data-background='_images/thats-all-folks.jpg'> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
<!-- <script src="reveal.js/lib/js/head.min.js"></script> --> |
|
|
|
<script src="reveal.js/lib/js/head.min.js"></script> |
|
|
|
<!-- <script src="reveal.js/js/reveal.js"></script> --> |
|
|
|
<script src="reveal.js/js/reveal.js"></script> |
|
|
|
<script src="dist/reveal.js"></script> |
|
|
|
<!-- <script src="dist/reveal.js"></script> --> |
|
|
|
<script src="plugin/highlight/highlight.js"></script> |
|
|
|
<!-- <script src="plugin/highlight/highlight.js"></script> --> |
|
|
|
|
|
|
|
|
|
|
|
<script> |
|
|
|
<script> |
|
|
|
Reveal.initialize({ |
|
|
|
Reveal.initialize({ |
|
|
@ -539,18 +671,20 @@ |
|
|
|
transition: 'slide', // none/fade/slide/convex/concave/zoom |
|
|
|
transition: 'slide', // none/fade/slide/convex/concave/zoom |
|
|
|
|
|
|
|
|
|
|
|
// Optional reveal.js plugins |
|
|
|
// Optional reveal.js plugins |
|
|
|
// dependencies: [ |
|
|
|
dependencies: [ |
|
|
|
// { src: 'reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } }, |
|
|
|
{ src: 'reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } }, |
|
|
|
// { src: 'reveal.js/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, |
|
|
|
{ src: 'reveal.js/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, |
|
|
|
// { src: 'reveal.js/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, |
|
|
|
{ src: 'reveal.js/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, |
|
|
|
// { src: 'reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }, |
|
|
|
{ src: 'reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }, |
|
|
|
// { src: 'reveal.js/plugin/zoom-js/zoom.js', async: true }, |
|
|
|
{ src: 'reveal.js/plugin/zoom-js/zoom.js', async: true }, |
|
|
|
// { src: 'reveal.js/plugin/notes/notes.js', async: true } |
|
|
|
{ src: 'reveal.js/plugin/notes/notes.js', async: true } |
|
|
|
// ] |
|
|
|
] |
|
|
|
}); |
|
|
|
}); |
|
|
|
</script> |
|
|
|
</script> |
|
|
|
|
|
|
|
|
|
|
|
</body> |
|
|
|
</body> |
|
|
|
</html> |
|
|
|
</html> |
|
|
|
|
|
|
|
|
|
|
|
<!-- vim:ts=4:sw=4:sts=4:et --> |
|
|
|
<!-- |
|
|
|
|
|
|
|
vim:ts=4:sw=4:sts=4:et |
|
|
|
|
|
|
|
--> |
|
|
|