|
|
|
<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">
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="reveal.js/css/reveal.css">
|
|
|
|
<link rel="stylesheet" href="reveal.js/css/theme/night.css" id="theme">
|
|
|
|
|
|
|
|
<!-- Code syntax highlighting -->
|
|
|
|
<link rel="stylesheet" href="reveal.js/lib/css/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);
|
|
|
|
}
|
|
|
|
</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>
|
|
|
|
|
|
|
|
<section data-background="_images/avatar-hd.png">
|
|
|
|
<div class="semi-opaque">
|
|
|
|
<h3>Júlio Biason</h3>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="semi-opaque">
|
|
|
|
<div>
|
|
|
|
<ul class="empty">
|
|
|
|
<li>Programador a 30 anos</li>
|
|
|
|
<li>Praticante de mototerapia</li>
|
|
|
|
<li>Trekkie</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
</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>
|
|
|
|
<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>
|
|
|
|
<h4>"Vamos fazer um browser em Python!"</h4>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<!-- tudo agora é script python -->
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<!-- simulador de hardware, pra entregar projeto antes do resto -->
|
|
|
|
<img src="_images/graph.png" class="stretch">
|
|
|
|
|
|
|
|
<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>
|
|
|
|
|
|
|
|
<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>
|
|
|
|
</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>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<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>
|
|
|
|
|
|
|
|
<!-- surgiu a chance de trabalhar junto de novo -->
|
|
|
|
<!-- ... 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>
|
|
|
|
<!-- framework em cima do flask -->
|
|
|
|
<!-- consuela -->
|
|
|
|
<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>
|
|
|
|
<h3>Nova Separação</h3>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<!-- java -->
|
|
|
|
<!-- rust do lado -->
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>Mais do Mesmo</h3>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<!-- django, mas nada de impressionante -->
|
|
|
|
<!-- rust do lado, de novo -->
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>O Começo das Brigas</h3>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<!-- Diana Troi e Luxwana Troi -->
|
|
|
|
<!-- Diana Troi quando perdeu a capacidade de sentir emoções -->
|
|
|
|
|
|
|
|
<!-- Múltiplas versões, incluindo não-mantidas -->
|
|
|
|
<section>
|
|
|
|
<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.
|
|
|
|
|
|
|
|
("Vou usar o Walrus operator! Olha que lindo!" "Não tem Walrus no 3.6")
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<!-- distribuição de coisas -->
|
|
|
|
<!-- packaging? what? exe quebra tudo -->
|
|
|
|
<section>
|
|
|
|
<img src="_images/broken-gif-Andy-Samberg.gif" class="stretch">
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
Install no WSL quebrava pacotes por culpa da versão do Python no sistema.
|
|
|
|
|
|
|
|
Gerado EXE (com Nuitka) começou a explodir o Git.
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<p><code>
|
|
|
|
pip install --break-system-packages
|
|
|
|
</code></p>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<img src="_images/tos-kirk-what.gif" class="stretch">
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<img src="_images/tng-picard-slow-facepalm.gif" class="stretch">
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<img src="_images/tos-kirk-slap.gif" class="stretch">
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>Despedida</h3>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<!-- rust tá resolvendo tudo de forma melhor, mesmo que mais trabalhoso -->
|
|
|
|
<section>
|
|
|
|
<img src="_images/friendship-py-ended.jpg" class="stretch"/>
|
|
|
|
|
|
|
|
<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>
|
|
|
|
<img src="_images/tng-data-goodbye.gif" class="stretch">
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<img src="_images/tng-picard-sigh.gif" class="stretch">
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h2>Falando sério...</h2>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<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>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<!-- ferramentas pra python não estão mais sendo escritas em Python (ruff, uv, Pyright) -->
|
|
|
|
<ul>
|
|
|
|
<li><code>ruff</code>: Rust</li>
|
|
|
|
<li><code>uv</code>: Rust</li>
|
|
|
|
<li><code>Pyright</code>: JavaScript</li>
|
|
|
|
</ul>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<!-- parece estar indo pro lado certo, mas extremamente lento (falta de interesse?) -->
|
|
|
|
<section>
|
|
|
|
<ul>
|
|
|
|
<li>GIL-less Python</li>
|
|
|
|
<li>JIT hook</li>
|
|
|
|
</ul>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<p>Rust:</p>
|
|
|
|
<ul>
|
|
|
|
<li class="fragment">... não me deixa cruzar a rua sem olhar pros dois lados</li>
|
|
|
|
<li class="fragment">... não me deixa sair de moto sem usar capacete</li>
|
|
|
|
<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? -->
|
|
|
|
<!--
|
|
|
|
<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>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<img src="_images/so-salary-2024.png" class="stretch">
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section data-background='_images/thats-all-folks.jpg'>
|
|
|
|
</section>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<script src="reveal.js/lib/js/head.min.js"></script>
|
|
|
|
<script src="reveal.js/js/reveal.js"></script>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
// Full list of configuration options available at:
|
|
|
|
// https://github.com/hakimel/reveal.js#configuration
|
|
|
|
Reveal.initialize({
|
|
|
|
controls: true,
|
|
|
|
progress: true,
|
|
|
|
history: true,
|
|
|
|
center: true,
|
|
|
|
// showNotes: true,
|
|
|
|
|
|
|
|
transition: 'slide', // none/fade/slide/convex/concave/zoom
|
|
|
|
|
|
|
|
// Optional reveal.js plugins
|
|
|
|
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>
|