My presentations, using Reveal.js (mostly in Portuguese).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

722 lines
28 KiB

<html>
<head>
<meta charset="utf-8" />
<title>Desculpe Python, Não Sou Eu, É Você</title>
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
6 days ago
<!-- <link rel="stylesheet" href="dist/reset.css"> -->
<!-- <link rel="stylesheet" href="dist/reveal.css"> -->
<!-- <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 -->
1 week ago
<link rel="stylesheet" href="dist/highlight/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="lib/js/html5shiv.js"></script>
<![endif]-->
<style type="text/css" media="screen">
.happy {
color: yellow;
}
.reveal section img {
border: none;
}
.reveal ul.empty {
list-style: none inside;
}
.revel ul.empty li {
display: block;
}
.cursor {
background-color: #666;
color: white;
}
img {
max-height: 90%;
}
td.seen {
font-style: italic;
font-weight: bold;
}
.semi-opaque {
background-color: rgba(0, 0, 0, 0.7);
}
.sidebyside {
display: flex;
}
.side {
flex: 1;
}
</style>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-background="_images/dear-john.jpg" data-header>
<h2 class="semi-opaque">
Desculpe Python, Não Sou Eu, É Você
</h2>
</section>
<section>
<h2>Quem?</h2>
</section>
6 days ago
<section data-background="_images/me-background.png">
<div class="semi-opaque">
<h3>Júlio Biason</h3>
6 days ago
<ul class="empty">
<li>Programador a 30 anos</li>
<li>Programando em Python desde 1998</li>
<li>Praticante de mototerapia</li>
<li>Trekkie</li>
</ul>
</div>
</section>
<section>
<h3>JulioBiason.me</h3>
<ul>
<li><a href="https://presentations.juliobiason.me/">Presentations</a></li>
<li><a href="https://blog.juliobiason.me/">Blog</a></li>
<li><a href="https://git.juliobiason.me/">Git</a></li>
<li><a href="https://resume.juliobiason.me/">CV/Resumé</a></li>
<li><a href="https://books.juliobiason.me/">Books</a></li>
</ul>
<p class="fragment">+ <a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></p>
<p class="fragment">+ julio.biason@pm.me</p>
</section>
<section>
<h3>O Flerte</h3>
</section>
<section>
<!-- C para bolsa, ainda não num relacionamento abusivo -->
<img src="_images/tng-selar.webp" class="stretch">
<aside class="notes">
Então, tava eu lá na univerdade, fazendo minhas
coisinha na bolsa de inicialização científica, vivendo
com C, que apesar de não dar muito certo, e ter seus
momentos meio abusivos, eu respeito pacas até hoje...
</aside>
</section>
<section>
<img src ="_images/tng-duras-sisters.gif" class="stretch">
<aside class="notes">
... e teve momentos em que eu precisava de ajudar pra processar os
resultados desses programas em C, e aí o pessoal me falou do AWK...
... mas AWK era esquisitão, até fazia as coisas que eu
precisava, mas não era uma conversa em que os dois
falavam de forma simples e clara...
</aside>
</section>
<section>
1 month ago
<img src="_images/ds9-ishka.gif" class="stretch">
<aside class="notes">
Também me falaram de Perl, mas só pra ver como ele
conversava, já dava pra ver a gente nunca ia se
entender direito.
</aside>
</section>
<section>
<img src="_images/tng-marina.gif" class="stretch">
<aside class="notes">
... até que alguém falou "Fala ali com Python". E,
nossa, a conversa rolou solta.
</aside>
</section>
<section>
<h3>O Início do Relacionamento</h3>
</section>
<section>
1 week ago
<img src="_images/tng-deanna-troi-mosaic.jpg" class="stretch">
</section>
1 week ago
<section>
<h4>"Vamos fazer um browser em Python!"</h4>
6 days ago
<small>
- Bando de sem-noção na universidade, eu incluso.
</small>
1 week ago
</section>
1 month ago
<section>
3 weeks ago
<!-- simulador de hardware, pra entregar projeto antes do resto -->
<img src="_images/graph.png" class="stretch">
1 month ago
<aside class="notes">
Teve um projeto de hardware que eu tava trabalhando na
parte de apresentação dos dados, a parte do hardware e
inteface com a mesma não tava pronta, nós fizemos um
"simulador" das respostas da interface e entregamos o
projeto antes do hardware!
</aside>
</section>
<section>
<h3>Relacionamento Sério</h3>
</section>
<section>
<img src="_images/sydney.jpg" class="stretch">
<aside class="notes">
Em 2007, por causa do nosso relacionamento, a gente foi
parar na Austrália, em Sydney.
</aside>
</section>
3 weeks ago
<section>
<img src="_images/tilefile.jpg" class="stretch">
<aside class="notes">
A empresa era chamada Tilefile, e a gente trava
trabalhando no backend, antes de Django, antes de
Flask, e fazendo coisas malucas, como guardar os dados
como pickle, e depois adicionando uma camada que lia de
um banco de dados e retornava no mesmo formato do
pickle.
</aside>
3 weeks ago
</section>
<section>
<img src="_images/mitter.png" class="stretch">
<aside class="notes">
... e, depois de um dia juntos no trabalho, eu chegava
em casa e ficava mais tempo com Python, trabalhando num
cliente para o Twitter, antes de ser X, e mais antes
ainda deles fecharem a API.
</aside>
</section>
<section>
<img src="_images/tng-deanna-ricker-bridge.gif" class="stretch">
<aside class="notes">
Assim, a gente tava o tempo todo junto no trabalho...
</aside>
</section>
<section>
<img src="_images/tng-deanna-riker-off-bridge.gif" class="stretch">
<aside class="notes">
... e em casa.
</aside>
3 weeks ago
</section>
<section>
3 weeks ago
<h3>Separação Não Prevista</h3>
</section>
<section>
<img src="_images/snw-chapel.webp" class="stretch">
<aside class="notes">
Aí eu tive que voltar pro Brasil, e a gente teve que se
separar.
O que eu consegui foi um trabalho em PHP, mas por baixo
dos panos eu tentei fazer uma integração de uma
biblioteca em C++ em Python, e aprendi da pior forma o
quão horrível a biblioteca ctypes é.
</aside>
</section>
<section>
<h3>A Volta da Paixão</h3>
</section>
2 months ago
<!-- surgiu a chance de trabalhar junto de novo -->
<section>
<img src="_images/tng-lavelle-promotion.webp" class="stretch">
</section>
1 week ago
2 months ago
<!-- ... mas virou objective-c -->
<section>
<img src="_images/ent-tpol.webp" class="stretch"/>
<aside class="notes">
Mas o projeto em Python acabou virando 1 ano de
Objective-C.
</aside>
</section>
1 week ago
<section>
<img src="_images/tng-q-snap.gif" class="stretch">
1 week ago
<aside class="notes">
E finalmente surgiu o projeto em Python, com Flask.
</aside>
</section>
1 week ago
3 weeks ago
<section>
<img src="_images/consuela-lemon-pledge.gif" class="stretch">
<aside class="notes">
Quando eu finalmente consegui voltar a programar com Python,
fizemos um framework em cima do Flask chamado "Consuela", que
eu fiquei sabendo anos depois que a empresa para qual eu fiz
ainda estava usando.
</aside>
</section>
<!-- Django -->
<section>
<img src="_images/tng-troi-cowboy.webp" class="stretch"/>
1 week ago
<aside class="notes">
E em Django.
</aside>
</section>
<section>
3 weeks ago
<h3>Nova Separação</h3>
</section>
6 days ago
<section>
<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>
<h3>Mais do Mesmo</h3>
</section>
6 days ago
<section>
<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>
6 days ago
<!-- <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>
6 days ago
<section>
<h3>O Começo das Brigas</h3>
</section>
3 weeks ago
<!-- Múltiplas versões, incluindo não-mantidas -->
3 weeks ago
<section>
<div class="sidebyside">
<div class="side">
<img src="_images/tng-deanna-riker-hug.gif" style="float:left;width=200px">
</div>
<div class="side">
<img src="_images/tng-deanna-riker-hug-2.gif" style="float:right;width=200px">
</div>
</div>
3 weeks ago
<aside class="notes">
A máquina de testes usa Python 3.6.
Usuários instalam as versões mais novas.
Tem que funcionar em todas.
6 days ago
("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.
3 weeks ago
</aside>
</section>
<section>
<img src="_images/tng-enterprise-explodes.gif" class="stretch">
3 weeks ago
<aside class="notes">
6 days ago
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.
3 weeks ago
Gerado EXE (com Nuitka) começou a explodir o Git.
</aside>
</section>
6 days ago
<section>
<img src="_images/ds9-dax-bathlet.jpg" class="stretch">
<aside class="notes">
Adivinha quem veio me salvar desses problemas?
</aside>
</section>
2 months ago
<section>
<p><code>
1 week ago
pip install <span class="fragment">--break-system-packages</span>
2 months ago
</code></p>
6 days ago
<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>
1 month ago
</section>
2 months ago
1 month ago
<section>
<img src="_images/tos-kirk-what.gif" class="stretch">
</section>
<section>
<img src="_images/tng-picard-slow-facepalm.gif" class="stretch">
6 days ago
<aside class="notes">
Quer dizer que não tem uma forma de isolar instalações
de Python?
</aside>
1 month ago
</section>
<section>
<img src="_images/tos-kirk-slap.gif" class="stretch">
6 days ago
<aside class="notes">
POR QUE DIABOS EU TENHO QUE USAR VIRTUALENV ENQUANTO
QUE O DEBIAN NÃO PRECISA?
</aside>
2 months ago
</section>
<section>
<h3>Despedida</h3>
</section>
6 days ago
<section>
<img src="_images/tng-data-goodbye.gif" class="stretch">
</section>
<!-- rust tá resolvendo tudo de forma melhor, mesmo que mais trabalhoso -->
<section>
<img src="_images/friendship-py-ended.jpg" class="stretch"/>
3 weeks ago
<aside class="notes">
Mesmo com o trabalho que é fazer, Rust tem resolvido as
coisas de forma muito melhor.
Perdi na sintaxe, ganhei em todos os demais aspectos:
Eu consigo facilmente compilar para qualquer Linux (e
até pra Windows a partir do Linux), eu posso atualizar
a linguagem sem problemas.
</aside>
</section>
<section>
6 days ago
<img src="_images/tng-picard-sigh.gif" class="stretch">
</section>
<section>
6 days ago
<h2>Falando sério...</h2>
</section>
3 weeks ago
<section>
6 days ago
<h3>O Projeto</h3>
<p>
Não é o que a maioria dos projetos consegue fazer, com
ambiente isolado (container) ou que roda em máquinas
específicas (CD).
</p>
<small class="fragment">
... o que não quer dizer que instalar e controlar
dependências nesses ambientes seja muito melhor; só
estão "escondendo" o problema.
</small>
3 weeks ago
</section>
<section>
6 days ago
<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?
1 week ago
6 days ago
Cadê PyPI privado?
</aside>
</section>
<section>
<img src="_images/bruno-rocha-uv.png" class="stretch">
<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>
<h3>Melhorias Recentes</h3>
<ul>
<li>GIL-less Python</li>
<li>JIT compilation</li>
</ul>
<aside class="notes">
GIL-less Python pode melhorar performance,
mas a gente sabe que o que precisa de performance
está em C, e eles mesmos tem os controles
de threads do lado deles. GIL-less Python
facilita pra integração desses usos
(e não porque vai ser mais rápido em Python)
JIT... De novo, performance vem de C, e
considerando o eco-sistema, é bem difícil
de conseguir alcançar algo parecido com o
que é o Lua -- e muito menos Java, que tem
40 anos de pesquisa em como fazer um JIT.
</aside>
</section>
<!-- <section> -->
<!-- <h3>Problema de HTTP:</h3> -->
<!-- <p> -->
<!-- Anos de surras com wget/curl/etc me ensinaram como -->
<!-- autenticar a requisição e como fazer pip sem -->
<!-- precisar que usuário se autentique. -->
<!-- </p> -->
<!-- <aside class="notes"> -->
<!-- Por sorte eu sei como URLs funcionam, e sei como fazer -->
<!-- uma requisição HTTP autenticada que funciona em -->
<!-- qualquer lugar. -->
<!-- </aside> -->
<!-- </section> -->
3 weeks ago
2 months ago
<section>
<!-- ferramentas pra python não estão mais sendo escritas em Python (ruff, uv, Pyright) -->
1 week ago
<h3>Para Python, não Python:</h3>
2 months ago
<ul>
<li><code>ruff</code>: Rust</li>
<li><code>uv</code>: Rust</li>
<li><code>Pyright</code>: JavaScript</li>
1 week ago
<li>(<code>ruff-ls</code>: Rust)</li>
2 months ago
</ul>
</section>
1 week ago
<section>
<img src="_images/python-poetry.png" class="stretch">
1 week ago
<aside class="notes">
Só pra ter uma ideia: Poetry, que é o primeiro
gerenciador de pacotes pra Python a suportar
o pyproject, costuma entrar em loops e ficar
30 minutos resolvendo dependencias.
O npm é em JavaScript -- JavaScript! -- e resolve
dependencias muitíssimo mais rápido (e olha que é
JS e tudo tem 2000 dependências!)
</aside>
</section>
<section>
<img src="_images/disc-earth.jpg" class="stretch">
</section>
<section>
<img src="_images/federation-blocks.jpeg" class="stretch">
</section>
1 month ago
<section>
1 week ago
<h3>Rust:</h3>
1 month ago
<ul>
<li class="fragment">... não me deixa cruzar a rua sem olhar pros dois lados<span class="fragment"> mesmo que a rua seja de mão única</span></li>
<li class="fragment">... não me deixa sair de moto sem usar capacete e protetor<span class="fragment"> mesmo que seja pra tirar a moto da garagem</span></li>
1 month ago
<li class="fragment">... não me deixa tomar banho se não tiver o tapetinho pra não escorregar no chuveiro</li>
</ul>
</section>
<section>
<strong>... mas é bom ver alguém que tá se preocupando comigo e não que
me deixe ser "porra louca" e me deixe na mão na hora de lidar com
os outros.
</strong>
</section>
<!-- o que acontece quando C++/Java tiver uma interface bacana pra AI/ML/Data Science? -->
<!--
2 months ago
<section>
<p>Ferramentas de ML/AI são em C++.</p>
<p class="fragment">C++ é complicado de programar.</p>
<p class="fragment">Mas como Python é só uma cola...</p>
<p class="fragment"><strong>o que vai acontecer quando
alguém insano o suficiente escrever um Jupyter em C++?
</strong></p>
</section>
-->
<!-- <section> -->
<!-- <img src="_images/py-so-2024.png" class="stretch"> -->
<!-- </section> -->
2 months ago
<!-- <section> -->
<!-- <img src="_images/so-salary-2024.png" class="stretch"> -->
<!-- </section> -->
2 months ago
6 days ago
<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>Eu não entendo porque olhar GIL e JIT quando tem
esse problema <strong>a anos</strong>.</li>
6 days ago
<li>A sintaxe é o que tá segurando Python no mercado.</li>
</ul>
</section>
<section>
<img src="_images/federation-blocks.jpeg" class="stretch">
</section>
<!-- <section> -->
<!-- <img src="_images/tng-picard-paranoia.webp" class="stretch"> -->
<!-- </section> -->
<section>
<img src="_images/tos-kirk-with-and-without-team.jpg" class="stretch">
</section>
2 months ago
<section data-background='_images/thats-all-folks.jpg'>
6 days ago
</section>
</div>
</div>
6 days ago
<script src="reveal.js/lib/js/head.min.js"></script>
<script src="reveal.js/js/reveal.js"></script>
<!-- <script src="dist/reveal.js"></script> -->
<!-- <script src="plugin/highlight/highlight.js"></script> -->
<script>
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
// showNotes: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// Optional reveal.js plugins
6 days ago
dependencies: [
{ 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/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/zoom-js/zoom.js', async: true },
{ src: 'reveal.js/plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>
1 week ago
6 days ago
<!--
vim:ts=4:sw=4:sts=4:et
-->