Browse Source

Merge branch 'release/20191114'

master
Julio Biason 5 years ago
parent
commit
27b7ab7af5
  1. BIN
      _images/processor-speed.png
  2. 3
      filosofando-testes.html
  3. 7
      fugindo-com-python-2.html
  4. 89
      intro-stream-processing.html
  5. 6
      porque-como-opensource.html
  6. 393
      porque-rust.html

BIN
_images/processor-speed.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

3
filosofando-testes.html

@ -71,7 +71,8 @@
<div> <div>
<ul class="empty"> <ul class="empty">
<li>Júlio Biason</li> <li>Júlio Biason</li>
<li>https://functional.cafe/@juliobiason</li> <li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
<li>julio.biason@pm.me</li> <li>julio.biason@pm.me</li>
<li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li> <li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li>
</ul> </ul>

7
fugindo-com-python-2.html

@ -86,7 +86,8 @@
<div> <div>
<ul class="empty"> <ul class="empty">
<li>Júlio Biason</li> <li>Júlio Biason</li>
<li>https://functional.cafe/@juliobiason</li> <li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
<li>julio.biason@pm.me</li> <li>julio.biason@pm.me</li>
<li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li> <li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li>
</ul> </ul>
@ -1075,8 +1076,8 @@ pares = (num
<section> <section>
<div class="semi-opaque"> <div class="semi-opaque">
<ul class="empty"> <ul class="empty">
<li>Júlio Biason</li> <li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
<li>https://functional.cafe/@juliobiason</li> <li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
<li>julio.biason@pm.me</li> <li>julio.biason@pm.me</li>
<li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li> <li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li>
</ul> </ul>

89
intro-stream-processing.html

@ -54,10 +54,6 @@
color: white; color: white;
} }
img {
max-height: 90%;
}
td.seen { td.seen {
font-style: italic; font-style: italic;
font-weight: bold; font-weight: bold;
@ -72,6 +68,11 @@
.reveal h1 { .reveal h1 {
font-size: 3em !important; font-size: 3em !important;
} }
.plain {
background-color: white !important;
padding: 10px !important;
}
</style> </style>
</head> </head>
@ -91,7 +92,8 @@
<div> <div>
<ul class="empty"> <ul class="empty">
<li>Júlio Biason</li> <li>Júlio Biason</li>
<li>https://functional.cafe/@juliobiason</li> <li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
<li>julio.biason@pm.me</li> <li>julio.biason@pm.me</li>
<li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li> <li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li>
</ul> </ul>
@ -117,45 +119,18 @@
<img class="stretch" src="_images/streamprocessing-aws.png" alt="Lista de pontos de presença da CDN da Amazon" /> <img class="stretch" src="_images/streamprocessing-aws.png" alt="Lista de pontos de presença da CDN da Amazon" />
<aside class="notes"> <aside class="notes">
</aside> Essa não é uma apresentação sobre CDN, mas como a
</section> apresentação requer algo que gere dados de forma
contínua, eu vou usar CDN como exemplo, até porque
<section> trabalhei com isso.
<h3>O que é uma CDN</h3>
</section> CDN nada mais é que um cache distribuído; ao invés
de todo mundo ir até o servidor de origem, os dados
<section> são entregues por um servidor mais próximo do cliente.
<img class="stretch plain" src="_images/streamprocessing-connection.png" alt="" />
Assim temos um sistema distribuído (vários servidores)
<aside class="notes"> que não tem pausa (porque os vários servidores estão
Numa conexão "normal", o seu computador conecta no o tempo todo entregando dados).
modem, que se conecta em um servidor do seu
provedor, que se conecta em outro servidor, que se
conecta em outro, que se conecta em outro até que,
finalmente, ele chega ao servidor que você
realmente quer.
</aside>
</section>
<section>
<img class="stretch plain" src="_images/streamprocessing-cdn.png" alt="" />
<aside class="notes">
Com uma CDN, ao invés do servidor do provedor
atravessar toda a internet até chegar ao servidor
de destino, o servidor da CDN verifica se ele tem o
arquivo requisitado e, se tiver, responde
imediatamente.
Quem sai ganhando com uma CDN?
- O usuário, já que a resposta vem mais rápida.
- O cliente da CDN, pois ele não vai precisar ter
um servidor ou uma banda larga para poder responder
todos os usuários, já que alguns vão ficar somente
na CDN.
- O provedor, já que ele tem que pagar qualquer
tráfego que saia da sua rede.
</aside> </aside>
</section> </section>
@ -195,6 +170,8 @@
</section> </section>
<section> <section>
<h2>"Read Ready"</h2>
<img class="stretch" src="_images/streamprocessing-read-ready.jpg" alt=""> <img class="stretch" src="_images/streamprocessing-read-ready.jpg" alt="">
</section> </section>
@ -324,6 +301,14 @@
</ul> </ul>
</section> </section>
<section>
<ul>
<li><strong>E</strong><span class="fragment">xtract</span></li>
<li><strong>T</strong><span class="fragment">ransform</span></li>
<li><strong>L</strong><span class="fragment">oad</span></li>
</ul>
</section>
<section> <section>
<p>Batch processing seria o caso de processar os dados de um dia.</p> <p>Batch processing seria o caso de processar os dados de um dia.</p>
@ -466,9 +451,9 @@ light.switch()</code></pre>
<section> <section>
<ul> <ul>
<li><code>(map lambda iterator)</code></li> <li><code>(map lambda iterable)</code></li>
<li><code>(fold lambda iterator start)</code></li> <li><code>(fold lambda iterable start)</code></li>
<li><code>(filter lambda iterator start)</code></li> <li><code>(filter lambda iterable)</code></li>
</ul> </ul>
</section> </section>
@ -525,15 +510,15 @@ light.switch()</code></pre>
</section> </section>
<section> <section>
<img class="stretch" src="_images/streamprocessing-streamprocessing.png" alt=""/> <img class="plain stretch" src="_images/streamprocessing-streamprocessing.png" alt=""/>
</section> </section>
<section> <section>
<img class="stretch" src="_images/streamprocessing-pipeline.png" alt="" /> <img class="plain stretch" src="_images/streamprocessing-pipeline.png" alt="" />
</section> </section>
<section> <section>
<img class="stretch" src="_images/unclephil-flinkpipelinereal.png" alt="" /> <img class="plain stretch" src="_images/unclephil-flinkpipelinereal.png" alt="" />
</section> </section>
<section> <section>
@ -625,8 +610,8 @@ light.switch()</code></pre>
<section data-background='_images/thats-all-folks.jpg'> <section data-background='_images/thats-all-folks.jpg'>
<ul class="empty fragment semi-opaque"> <ul class="empty fragment semi-opaque">
<li>Júlio Biason</li> <li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
<li>https://functional.cafe/@juliobiason</li> <li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
<li>julio.biason@pm.me</li> <li>julio.biason@pm.me</li>
<li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li> <li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li>
</ul> </ul>

6
porque-como-opensource.html

@ -71,7 +71,8 @@
<div> <div>
<ul class="empty"> <ul class="empty">
<li>Júlio Biason</li> <li>Júlio Biason</li>
<li>https://functional.cafe/@juliobiason</li> <li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
<li>julio.biason@pm.me</li> <li>julio.biason@pm.me</li>
<li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li> <li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li>
</ul> </ul>
@ -565,7 +566,8 @@
<div class="fragment semi-opaque"> <div class="fragment semi-opaque">
<ul> <ul>
<li>https://functional.cafe/@juliobiason</li> <li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
<li>julio.biason@pm.me</li> <li>julio.biason@pm.me</li>
<li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li> <li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li>
</ul> </ul>

393
porque-rust.html

@ -81,11 +81,11 @@
<h2 class="semi-opaque">Porque Você DEVE Aprender Rust</h2> <h2 class="semi-opaque">Porque Você DEVE Aprender Rust</h2>
</section> </section>
<aside class="notes"> <aside class="notes">
Eu ia falar do porque o pessoal deveria aprender Rust, Eu ia falar do porque o pessoal deveria aprender Rust,
mas acho que faz mais sentido dizer que o pessoal TEM mas acho que faz mais sentido dizer que o pessoal TEM
QUE aprender Rust. QUE aprender Rust.
</aside> </aside>
</section> </section>
<section> <section>
@ -95,7 +95,8 @@
<div> <div>
<ul class="empty"> <ul class="empty">
<li>Júlio Biason</li> <li>Júlio Biason</li>
<li>https://functional.cafe/@juliobiason</li> <li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
<li>julio.biason@pm.me</li> <li>julio.biason@pm.me</li>
<li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li> <li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li>
</ul> </ul>
@ -103,64 +104,64 @@
</section> </section>
</section> </section>
<section> <section>
<section> <section>
<h2>História</h2> <h2>História</h2>
<ul> <ul>
<li>Criada em 2006 por Graydon Hoare.</li> <li>Criada em 2006 por Graydon Hoare.</li>
<li>Patrocinada pela Mozilla em 2009.</li> <li>Patrocinada pela Mozilla em 2009.</li>
<li>Versão 1.0 em 2015.</li> <li>Versão 1.0 em 2015.</li>
<li>Versão atual: 1.37</li> <li>Versão atual: 1.38</li>
</ul> </ul>
</section> </section>
<aside class="notes"> <aside class="notes">
Parte burocrática da apresentação. Parte burocrática da apresentação.
PS: Pode ser que, quando você essa apresentação, 1.37 PS: Pode ser que, quando você essa apresentação, 1.38
não seja mais a versão atual; a cada 6 semanas, sai uma não seja mais a versão atual; a cada 6 semanas, sai uma
nova versão do compilador. nova versão do compilador.
</aside> </aside>
</section> </section>
<section> <section>
<section> <section>
<h2> <h2>
História História
<img src="_images/AYV1X0yv.png" alt="" style="width:100px;margin:0"> <img src="_images/AYV1X0yv.png" alt="" style="width:100px;margin:0">
</h2> </h2>
<p> <p>
Basic (com números e estruturado), dBase III Plus, Basic (com números e estruturado), dBase III Plus,
Clipper, Pascal, Cobol, Delphi (ObjectPascal), Clipper, Pascal, Cobol, Delphi (ObjectPascal),
C, C++, ActionScript (Flash), PHP, JavaScript, C, C++, ActionScript (Flash), PHP, JavaScript,
Python, Objective-C, Clojure, Java, Scala Python, Objective-C, Clojure, Java, Scala
<strong>, Rust.</strong> <strong>, Rust.</strong>
</p> </p>
<aside class="notes"> <aside class="notes">
Um porque de história sobre esse que lhes apresenta Um porque de história sobre esse que lhes apresenta
a linguagem: a linguagem:
Eu já trabalhei com todas essas linguagens. Fora Eu já trabalhei com todas essas linguagens. Fora
essas, eu ainda sei ler essas, eu ainda sei ler
- Perl - Perl
- Ruby - Ruby
- Haskell - Haskell
- Swift - Swift
</aside> </aside>
</section> </section>
<section> <section>
<img src="_images/my_opinion.jpg" alt=""> <img src="_images/my_opinion.jpg" alt="">
<aside class="notes"> <aside class="notes">
Alerta: Tudo aqui é a minha opinião sobre Rust e o Alerta: Tudo aqui é a minha opinião sobre Rust e o
contexto geral de linguagens de programação. contexto geral de linguagens de programação.
</aside> </aside>
</section> </section>
<section> <section>
<div> <div>
@ -172,23 +173,23 @@
-- Alan Perlis, "ALGOL" -- Alan Perlis, "ALGOL"
</div> </div>
<aside class="notes"> <aside class="notes">
Apesar de ter todas essas linguagens, eu ainda Apesar de ter todas essas linguagens, eu ainda
preciso passar essa frase do Perlis, porque preciso passar essa frase do Perlis, porque
realmente Rust mudou a forma como eu penso em realmente Rust mudou a forma como eu penso em
outras linguagens. outras linguagens.
Apesar do forte do Rust ser a proteção de memória, Apesar do forte do Rust ser a proteção de memória,
eu posso oficialmente dizer que agora eu entendo eu posso oficialmente dizer que agora eu entendo
generics muito melhor por causa da forma como o generics muito melhor por causa da forma como o
Rust trabalha. Rust trabalha.
</aside> </aside>
</section> </section>
</section> </section>
<section> <section>
<section> <section>
<h2>1. A Linguagem Mais Amada</h2> <h2>1. A Linguagem Mais Amada</h2>
<p> <p>
<a href="https://insights.stackoverflow.com/survey/2019"> <a href="https://insights.stackoverflow.com/survey/2019">
A linguagem mais amada segundo o StackOverflow A linguagem mais amada segundo o StackOverflow
@ -247,18 +248,18 @@
de alto nível que estamos acostumados com outras de alto nível que estamos acostumados com outras
linguagens. linguagens.
Honestamente, se surgir uma nova linguagem que Honestamente, se surgir uma nova linguagem que
tenha mais proteções de memória, com performance tenha mais proteções de memória, com performance
ainda melhor que C mas eu tiver que escrever uma ainda melhor que C mas eu tiver que escrever uma
lista encadeada mais uma vez, eu destruo todas as lista encadeada mais uma vez, eu destruo todas as
coisas tecnológicas ao meu redor... coisas tecnológicas ao meu redor...
E vou plantar batata. E vou plantar batata.
... porque aprendemos absolutamente NADA sobre ... porque aprendemos absolutamente NADA sobre
desenvolvimento. desenvolvimento.
</aside> </aside>
</section> </section>
</section> </section>
<section> <section>
@ -268,29 +269,29 @@
<section> <section>
<pre><code class="hljs rust" data-trim> <pre><code class="hljs rust" data-trim>
fn main() -&lt; int{ fn main() -&gt; int{
let a = 2; let a = 2;
a = 3; a = 3;
println!("{}", a); println!("{}", a);
0 0
} }
</code></pre> </code></pre>
<aside class="notes"> <aside class="notes">
Primeiro contato com Rust: assim como C, tem uma Primeiro contato com Rust: assim como C, tem uma
função `main`, que pode retornar um inteiro; para função `main`, que pode retornar um inteiro; para
atribuir variáveis, usa-se `let`. atribuir variáveis, usa-se `let`.
Uma coisa: Rust é "strong and statically typed", o Uma coisa: Rust é "strong and statically typed", o
que sigifnica que a linguagem tem tipos, mas por que sigifnica que a linguagem tem tipos, mas por
padrão o compilador tenta inferir o tipo. padrão o compilador tenta inferir o tipo.
Uma outra forma de escrever o let seria: Uma outra forma de escrever o let seria:
``` ```
let a: u8 = 2; let a: u8 = 2;
``` ```
</aside> </aside>
</section> </section>
<section> <section>
@ -321,11 +322,11 @@ fn main() -&lt; int{
| ^^^^^ cannot assign twice to immutable variable | ^^^^^ cannot assign twice to immutable variable
</code></pre> </code></pre>
<aside class="notes"> <aside class="notes">
... mas se tu olhar com calma, tu vai ver que não só o ... mas se tu olhar com calma, tu vai ver que não só o
compilador disse, claramente, o que era o problema... compilador disse, claramente, o que era o problema...
</aside> </aside>
</section> </section>
<section data-transition="fade"> <section data-transition="fade">
<pre><code class="hljs" data-trim data-line-numbers="5"> <pre><code class="hljs" data-trim data-line-numbers="5">
@ -338,20 +339,20 @@ fn main() -&lt; int{
| ^^^^^ cannot assign twice to immutable variable | ^^^^^ cannot assign twice to immutable variable
</code></pre> </code></pre>
<aside class="notes"> <aside class="notes">
... como também vai dizer como resolver o problema. ... como também vai dizer como resolver o problema.
</aside> </aside>
</section> </section>
<section> <section>
<img class="stretch" src="_images/Sorry-bout-that.gif" alt=""> <img class="stretch" src="_images/Sorry-bout-that.gif" alt="">
<aside class="notes"> <aside class="notes">
Ou seja, o compilador não só vai lá e diz: ERRADO! Ou seja, o compilador não só vai lá e diz: ERRADO!
... ele ainda dá uma dica de como resolver esse ... ele ainda dá uma dica de como resolver esse
problema. problema.
</aside> </aside>
</section> </section>
</section> </section>
@ -506,6 +507,14 @@ fn main() {
</aside> </aside>
</section> </section>
<section>
<h4>Drop</h4>
<pre><code class="hljs rust fragment">
pub fn drop&lt;T&gt;(_x: T) { }
</code></pre>
</section>
<section> <section>
<h3>Regras do Borrow Checker</h3> <h3>Regras do Borrow Checker</h3>
@ -547,36 +556,8 @@ fn main() {
</aside> </aside>
</section> </section>
<section data-transition="fade"> <section>
<pre><code class="hljs go" data-trim>presente := Presente { ... } <img class="stretch" src="_images/processor-speed.png" alt="">
canal &lt;- presente
&nbsp;</code></pre>
<aside class="notes">
Num exemplo em Go, criamos uma estrutura e passamos
essa estrutura para outra thread através de um
canal.
</aside>
</section>
<section data-transition="fade">
<pre><code class="hljs go" data-trim>presente := Presente { ... }
canal &lt;- presente
presente.abrir()</code></pre>
<aside class="notes">
... e depois de passar o presente pra outra pessoa,
nós abrimos o presente.
Mas se estamos entregando um presente pra alguém,
como é que estamos abrindo o presente?
O borrow checker não permite esse tipo de coisa:
Ele irá barrar a função atual de continuar
utilizando a variável porque, afinal de contas,
agora a região de memória pertence à outra função
(uma função que está rodando em outra thread).
</aside>
</section> </section>
<section> <section>
@ -598,8 +579,8 @@ presente.abrir()</code></pre>
<img class="stretch" src="_images/senta-que-la-vem-historia.gif" alt=""> <img class="stretch" src="_images/senta-que-la-vem-historia.gif" alt="">
<p class="fragment"><code>localtime</code></p> <p class="fragment"><code>localtime</code></p>
<p class="fragment"><code>SimpleDateFormatter</code></p> <p class="fragment"><code>SimpleDateFormatter</code></p>
<aside class="notes"> <aside class="notes">
A muito tempo atrás, eu estava ajudando uma colega A muito tempo atrás, eu estava ajudando uma colega
@ -779,11 +760,11 @@ OK(())
<section> <section>
<section> <section>
<h2>7. Generics/Traits</h2> <h2>7. Generics/Traits</h2>
</section> </section>
<section> <section>
<h3>Structs</h3> <h3>Structs</h3>
<pre><code class="hljs rust" data-trim> <pre><code class="hljs rust" data-trim>
struct Gift { struct Gift {
@ -797,34 +778,34 @@ struct Gift {
</aside> </aside>
</section> </section>
<section> <section>
<h3>Structs</h3> <h3>Structs</h3>
<pre><code class="hljs rust" data-trim> <pre><code class="hljs rust" data-trim>
let presente = Gift { package_color: "red", content: "A GIFT!" }; let presente = Gift { package_color: "red", content: "A GIFT!" };
</code></pre> </code></pre>
</section> </section>
<section> <section>
<h3>Structs Genéricas</h3> <h3>Structs Genéricas</h3>
<pre><code class="hljs rust" data-trim> <pre><code class="hljs rust" data-trim>
struct Point&lt;T&gt; { struct Point&lt;T&gt; {
x: T, x: T,
y: T y: T
} }
</code></pre> </code></pre>
</section> </section>
<section> <section>
<h3>Structs Genéricas</h3> <h3>Structs Genéricas</h3>
<pre><code class="hljs rust" data-trim> <pre><code class="hljs rust" data-trim>
let my_point = Point&lt;f32&gt;(x: 1.0, y: 2.0); let my_point = Point&lt;f32&gt;(x: 1.0, y: 2.0);
</code></pre> </code></pre>
</section> </section>
<section> <section>
<h3>Enums Generics</h3> <h3>Enums Generics</h3>
<pre><code class="hljs rust" data-trim> <pre><code class="hljs rust" data-trim>
enum Result&lt;T, E&gt; { enum Result&lt;T, E&gt; {
@ -835,7 +816,7 @@ enum Result&lt;T, E&gt; {
</section> </section>
<section> <section>
<h3>Traits</h3> <h3>Traits</h3>
<pre><code class="hljs rust" data-trim> <pre><code class="hljs rust" data-trim>
trait Summary { trait Summary {
@ -872,38 +853,38 @@ fn get_summary&lt;T&gt;(summarizable: T) -&gt; String
</section> </section>
</section> </section>
<section> <section>
<section> <section>
<h2> <h2>
<a href="https://doc.rust-lang.org/cargo/"> <a href="https://doc.rust-lang.org/cargo/">
8. Cargo 8. Cargo
</a> </a>
</h2> </h2>
<p>"Cargo is the Rust package manager"</p> <p>"Cargo is the Rust package manager"</p>
<p> <p>
"Cargo downloads your Rust package’s dependencies, "Cargo downloads your Rust package’s dependencies,
compiles your packages, makes distributable compiles your packages, makes distributable
packages, and uploads them to crates.io, the Rust packages, and uploads them to crates.io, the Rust
community’s package registry." community’s package registry."
</p> </p>
</section> </section>
</section> </section>
<section> <section>
<section> <section>
<h2>9. Tests</h2> <h2>9. Tests</h2>
<pre><code class="hljs rust" data-trim> <pre><code class="hljs rust" data-trim>
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
#[test] #[test]
fn testing() { fn testing() {
} }
} }
</code></pre> </code></pre>
</section> </section>
<section> <section>
<pre><code> <pre><code>
@ -916,7 +897,7 @@ running 1 test
test tests::testing ... ok test tests::testing ... ok
</code></pre> </code></pre>
</section> </section>
</section> </section>
<section> <section>
<section> <section>
@ -971,23 +952,23 @@ fn call_isan(num: &amp;str) -&gt; Result&lt;Success, Error&gt; {
</section> </section>
</section> </section>
<section> <section>
<h2>E agora?</h2> <h2>E agora?</h2>
<ul> <ul>
<li><a href="https://rustup.rs/">rustup</a></li> <li><a href="https://rustup.rs/">rustup</a></li>
<li><a href="https://doc.rust-lang.org/book/">The Rust Book</a></li> <li><a href="https://doc.rust-lang.org/book/">The Rust Book</a></li>
<li><a href="https://doc.rust-lang.org/stable/rust-by-example/">Rust By Example</a></li> <li><a href="https://doc.rust-lang.org/stable/rust-by-example/">Rust By Example</a></li>
<li><a href="https://play.rust-lang.org/?version=stable">Rust Playground</a></li> <li><a href="https://play.rust-lang.org/?version=stable">Rust Playground</a></li>
<li><a href="https://t.me/rustlangbr">Rust Brasil (Telegram)</a></li> <li><a href="https://t.me/rustlangbr">Rust Brasil (Telegram)</a></li>
</ul> </ul>
</section> </section>
<section data-background='_images/thats-all-folks.jpg'> <section data-background='_images/thats-all-folks.jpg'>
<div class="semi-opaque"> <div class="semi-opaque">
<ul class="empty"> <ul class="empty">
<li>Júlio Biason</li> <li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
<li>https://functional.cafe/@juliobiason</li> <li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
<li>julio.biason@pm.me</li> <li>julio.biason@pm.me</li>
<li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li> <li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li>
</ul> </ul>

Loading…
Cancel
Save