|
|
|
@ -7,11 +7,12 @@
|
|
|
|
|
|
|
|
|
|
<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"> |
|
|
|
|
<link rel="stylesheet" href="dist/reset.css"> |
|
|
|
|
<link rel="stylesheet" href="dist/reveal.css"> |
|
|
|
|
<link rel="stylesheet" href="dist/theme/night.css" id="theme"> |
|
|
|
|
|
|
|
|
|
<!-- Code syntax highlighting --> |
|
|
|
|
<link rel="stylesheet" href="reveal.js/lib/css/zenburn.css"> |
|
|
|
|
<link rel="stylesheet" href="dist/highlight/zenburn.css"> |
|
|
|
|
|
|
|
|
|
<!-- Printing and PDF exports --> |
|
|
|
|
<script> |
|
|
|
@ -160,10 +161,12 @@
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h4>"Vamos fazer um browser em Python!"</h4> |
|
|
|
|
<img src="_images/tng-deanna-troi-mosaic.jpg" class="stretch"> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<!-- tudo agora é script python --> |
|
|
|
|
<section> |
|
|
|
|
<h4>"Vamos fazer um browser em Python!"</h4> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<!-- simulador de hardware, pra entregar projeto antes do resto --> |
|
|
|
@ -254,6 +257,10 @@
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<!-- surgiu a chance de trabalhar junto de novo --> |
|
|
|
|
<section> |
|
|
|
|
<img src="_images/tng-lavelle-promotion.webp" class="stretch"> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<!-- ... mas virou objective-c --> |
|
|
|
|
<section> |
|
|
|
|
<img src="_images/ent-tpol.webp" class="stretch"/> |
|
|
|
@ -263,8 +270,15 @@
|
|
|
|
|
Objective-C. |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
<!-- framework em cima do flask --> |
|
|
|
|
<!-- consuela --> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<img src="_images/tng-q-snap.gif" class="stretch"> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
E finalmente surgiu o projeto em Python, com Flask. |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<img src="_images/consuela-lemon-pledge.gif" class="stretch"> |
|
|
|
|
|
|
|
|
@ -277,6 +291,13 @@
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<!-- Django --> |
|
|
|
|
<section> |
|
|
|
|
<img src="_images/tng-troi-cowboy.webp" class="stretch"/> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
E em Django. |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Nova Separação</h3> |
|
|
|
@ -326,7 +347,7 @@
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<p><code> |
|
|
|
|
pip install --break-system-packages |
|
|
|
|
pip install <span class="fragment">--break-system-packages</span> |
|
|
|
|
</code></p> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
@ -374,6 +395,14 @@
|
|
|
|
|
</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 |
|
|
|
@ -383,26 +412,61 @@
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<!-- ferramentas pra python não estão mais sendo escritas em Python (ruff, uv, Pyright) --> |
|
|
|
|
<h3>Para Python, não Python:</h3> |
|
|
|
|
<ul> |
|
|
|
|
<li><code>ruff</code>: Rust</li> |
|
|
|
|
<li><code>uv</code>: Rust</li> |
|
|
|
|
<li><code>Pyright</code>: JavaScript</li> |
|
|
|
|
<li>(<code>ruff-ls</code>: Rust)</li> |
|
|
|
|
</ul> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<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> |
|
|
|
|
|
|
|
|
|
<!-- parece estar indo pro lado certo, mas extremamente lento (falta de interesse?) --> |
|
|
|
|
<section> |
|
|
|
|
<h3>Algumas melhorias...</h3> |
|
|
|
|
<ul> |
|
|
|
|
<li>GIL-less Python</li> |
|
|
|
|
<li>JIT hook</li> |
|
|
|
|
</ul> |
|
|
|
|
|
|
|
|
|
<p class="fragment"> |
|
|
|
|
Cadê melhor API para integração com C/C++? |
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
<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> |
|
|
|
|
<p>Rust:</p> |
|
|
|
|
<h3>Rust:</h3> |
|
|
|
|
<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 sair de moto sem usar capacete e protetor</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> |
|
|
|
@ -439,12 +503,12 @@
|
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<script src="reveal.js/lib/js/head.min.js"></script> |
|
|
|
|
<script src="reveal.js/js/reveal.js"></script> |
|
|
|
|
<!-- <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> |
|
|
|
|
// Full list of configuration options available at: |
|
|
|
|
// https://github.com/hakimel/reveal.js#configuration |
|
|
|
|
Reveal.initialize({ |
|
|
|
|
controls: true, |
|
|
|
|
progress: true, |
|
|
|
@ -455,16 +519,18 @@
|
|
|
|
|
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 } |
|
|
|
|
] |
|
|
|
|
// 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> |
|
|
|
|
|
|
|
|
|
<!-- vim:ts=4:sw=4:sts=4:et --> |
|
|
|
|