After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 4.8 MiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 102 KiB |
After Width: | Height: | Size: 613 KiB |
After Width: | Height: | Size: 227 KiB |
After Width: | Height: | Size: 207 KiB |
After Width: | Height: | Size: 59 KiB |
@ -0,0 +1,411 @@
|
||||
<!doctype html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
|
||||
<title>ActivityPub</title> |
||||
|
||||
<meta name="description" content="Por que você deveria aprender Rust"> |
||||
<meta name="author" content="Julio Biason"> |
||||
|
||||
<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); |
||||
} |
||||
|
||||
.white { |
||||
background-color: white !important; |
||||
} |
||||
</style> |
||||
</head> |
||||
|
||||
<body> |
||||
<div class="reveal"> |
||||
<div class="slides"> |
||||
<section> |
||||
<section data-background="_images/activitypub-logo.png" data-header> |
||||
<h2 class="semi-opaque">ActivityPub</h2> |
||||
</section> |
||||
</section> |
||||
|
||||
<section> |
||||
<section> |
||||
<img src="_images/avatar-20170726.png" alt="Me" style="float:left;width:200px;" class="no-border"> |
||||
|
||||
<div> |
||||
<ul class="empty"> |
||||
<li>Júlio Biason</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><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li> |
||||
</ul> |
||||
</div> |
||||
</section> |
||||
</section> |
||||
|
||||
<section> |
||||
<section> |
||||
<img class="stretch" src="_images/internet.jpeg" alt=""> |
||||
|
||||
<aside class="notes"> |
||||
Para entender ActivityPub -- e porque ele existe -- |
||||
precisamos dar um passo atrás e entender a internet. |
||||
|
||||
A internet foi criada para ser "anarquica", no |
||||
sentido que não haveria um ponto central; se algum |
||||
ponto da rede fosse destruído por uma bomba nuclear |
||||
(porque assim eram os anos 60), outros pontos |
||||
continuariam funcionando. |
||||
</aside> |
||||
</section> |
||||
|
||||
<section> |
||||
<img class="stretch" src="_images/federation.png" title="(do latim: foederatio, de foedus: “liga, tratado, aliança”) ou Estado Federal é um Estado composto por diversas entidades territoriais autônomas dotadas de governo próprio."> |
||||
|
||||
<aside class="notes"> |
||||
De certa forma, as coisas funcionavam de forma |
||||
"federada", cuja definição do dicionário para |
||||
"federação" é: "(do latim: foederatio, de foedus: |
||||
“liga, tratado, aliança”) ou Estado Federal é um |
||||
Estado composto por diversas entidades territoriais |
||||
autônomas dotadas de governo próprio." |
||||
|
||||
(E como eu sou fã de Jornada nas Estrelas, eu |
||||
sempre lembro da "Federação dos Planetas Unidos", |
||||
que tinha o mesmo significado: vários planetas, |
||||
cada um com suas políticas, mas cada um funcionando |
||||
da forma que quisesse.) |
||||
</aside> |
||||
</section> |
||||
|
||||
<section> |
||||
<img class="stretch" src="_images/email.png" alt=""> |
||||
|
||||
<aside class="notes"> |
||||
Um dos exemplos mais básicos de federação ainda em |
||||
uso é o email: Existem vários servidores/serviços |
||||
de email por aí, cada um tem suas definições do que |
||||
é spam (ou como um email é definido como "spam"), |
||||
quotas de espaço, aliases -- enfim, uma série de |
||||
políticas -- mas os serviços conversam entre si |
||||
para garantir que todos possam receber emails, |
||||
mesmo estando em serviços (com políticas) |
||||
diferentes. |
||||
</aside> |
||||
</section> |
||||
|
||||
<section> |
||||
<img class="stretch" src="_images/xmpp.png" alt=""> |
||||
|
||||
<aside class="notes"> |
||||
Outro exemplo de federação é o XMPP, um protocolo |
||||
criado para comunicação instantânea que era |
||||
utilizado pelo Hangouts a muito tempo (hoje não é |
||||
mais, é um protocolo fechado). |
||||
</aside> |
||||
</section> |
||||
</section> |
||||
|
||||
<section> |
||||
<section> |
||||
<img class="stretch" src="_images/silo.jpeg" alt=""> |
||||
|
||||
<aside class="notes"> |
||||
Infelizmente, a pouco tempo (em termos de tempo |
||||
de vida de internet), o modelo começou a mudar |
||||
para um modelo de "Silos", onde tudo fica no mesmo |
||||
lugar (mesmo que o "mesmo lugar" sejam vários |
||||
computadores em vários lugares). |
||||
|
||||
A ideia de coisas com "políticas diferentes que |
||||
trabalham em forma de aliança" foi esquecida e |
||||
agora boa parte das coisas que nós queremos |
||||
compartilhar acaba ficando sob uma única política. |
||||
</aside> |
||||
</section> |
||||
|
||||
<section> |
||||
<img class="stretch" src="_images/all-eggs.jpeg" alt=""> |
||||
|
||||
<aside class="notes"> |
||||
Basicamente estamos colocando todos os ovos no |
||||
mesmo sesto. |
||||
</aside> |
||||
</section> |
||||
|
||||
<section> |
||||
<img class="stretch" src="_images/all-eggs-broken.jpeg" alt=""> |
||||
|
||||
<aside class="notes"> |
||||
Basta lembrar o que acontece toda vez que algum |
||||
juiz diz que é para bloquear o WhatsApp. |
||||
|
||||
(O resultado é que explodem os cadastros no |
||||
Telegram, que sofre do mesmo problema.) |
||||
</aside> |
||||
</section> |
||||
</section> |
||||
|
||||
<section> |
||||
<section> |
||||
<img class="stretch white" src="_images/ActivityPub-logo.svg" alt=""> |
||||
|
||||
<aside class="notes"> |
||||
E assim como temos o XMPP para conversas |
||||
instantâneas, temos o ActivityPub para ações |
||||
"sociais" -- no sentido de "coisas que fazemos com |
||||
nossas vidas". |
||||
</aside> |
||||
</section> |
||||
|
||||
<section> |
||||
<img class="stretch" src="_images/socializing.jpeg" alt=""> |
||||
|
||||
<aside class="notes"> |
||||
Apesar dos pesares, humanos são seres sociais e, |
||||
apesar dos pesares, a internet é uma forma de |
||||
socialização. |
||||
</aside> |
||||
</section> |
||||
|
||||
<section> |
||||
<h4>Mas O Que é ActivityPub</h4> |
||||
|
||||
<ul> |
||||
<li class="fragment">Protocolo certificado pela W3C.</li> |
||||
<li class="fragment">Baseado em HTTP e JSON.</li> |
||||
<li class="fragment">Tem vários conceitos iguais ao email.</li> |
||||
<li class="fragment">Composto de outros protolocos (como WebFinger, ActivityStreams, ActivityVocabulary e JSON-LD).</li> |
||||
</ul> |
||||
</section> |
||||
|
||||
<section> |
||||
<h4>O Que é ActivityPub</h4> |
||||
|
||||
<ul> |
||||
<li class="fragment">Actors <span class="fragment">(Person, Bot, Company)</span></li> |
||||
<li class="fragment">Notes</li> |
||||
<li class="fragment">Images</li> |
||||
<li class="fragment">Links</li> |
||||
<li class="fragment">(e mais, definidos no Vocabulary)</li> |
||||
</ul> |
||||
</section> |
||||
|
||||
<section> |
||||
<h4>ActivityPub</h4> |
||||
|
||||
<pre><code class="hljs json" data-trim> |
||||
{"@context": "https://www.w3.org/ns/activitystreams", |
||||
"type": "Person", |
||||
"id": "https://social.example/alyssa/", |
||||
"name": "Alyssa P. Hacker", |
||||
"preferredUsername": "alyssa", |
||||
"summary": "Lisp enthusiast hailing from MIT", |
||||
"inbox": "https://social.example/alyssa/inbox/", |
||||
"outbox": "https://social.example/alyssa/outbox/", |
||||
"followers": "https://social.example/alyssa/followers/", |
||||
"following": "https://social.example/alyssa/following/", |
||||
"liked": "https://social.example/alyssa/liked/"} |
||||
</code></pre> |
||||
</section> |
||||
|
||||
<section> |
||||
<h4>ActivityPub</h4> |
||||
|
||||
<pre><code class="hljs json" data-trim> |
||||
{"@context": "https://www.w3.org/ns/activitystreams", |
||||
"type": "Create", |
||||
"id": "https://social.example/alyssa/posts/a29a6843", |
||||
"to": ["https://chatty.example/ben/"], |
||||
"actor": "https://social.example/alyssa/", |
||||
"object": {"type": "Note", |
||||
"id": "https://social.example/alyssa/posts/49e2d03d", |
||||
"attributedTo": "https://social.example/alyssa/", |
||||
"to": ["https://chatty.example/ben/"], |
||||
"content": "Did you finish reading that book?"}} |
||||
</code></pre> |
||||
</section> |
||||
|
||||
<section> |
||||
<h4>ActivityPub</h4> |
||||
<pre><code class="hljs json" data-trim data-line-numbers="7"> |
||||
{"@context": "https://www.w3.org/ns/activitystreams", |
||||
"type": "Person", |
||||
"id": "https://social.example/alyssa/", |
||||
"name": "Alyssa P. Hacker", |
||||
"preferredUsername": "alyssa", |
||||
"summary": "Lisp enthusiast hailing from MIT", |
||||
"inbox": "https://social.example/alyssa/inbox/", |
||||
"outbox": "https://social.example/alyssa/outbox/", |
||||
"followers": "https://social.example/alyssa/followers/", |
||||
"following": "https://social.example/alyssa/following/", |
||||
"liked": "https://social.example/alyssa/liked/"} |
||||
</code></pre> |
||||
</section> |
||||
|
||||
<section> |
||||
<h4>ActivityPub</h4> |
||||
<pre><code class="hljs json" data-trim data-line-numbers="8"> |
||||
{"@context": "https://www.w3.org/ns/activitystreams", |
||||
"type": "Person", |
||||
"id": "https://social.example/alyssa/", |
||||
"name": "Alyssa P. Hacker", |
||||
"preferredUsername": "alyssa", |
||||
"summary": "Lisp enthusiast hailing from MIT", |
||||
"inbox": "https://social.example/alyssa/inbox/", |
||||
"outbox": "https://social.example/alyssa/outbox/", |
||||
"followers": "https://social.example/alyssa/followers/", |
||||
"following": "https://social.example/alyssa/following/", |
||||
"liked": "https://social.example/alyssa/liked/"} |
||||
</code></pre> |
||||
</section> |
||||
|
||||
<section> |
||||
<h4>ActivityPub</h4> |
||||
<pre><code class="hljs json" data-trim data-line-numbers="9"> |
||||
{"@context": "https://www.w3.org/ns/activitystreams", |
||||
"type": "Person", |
||||
"id": "https://social.example/alyssa/", |
||||
"name": "Alyssa P. Hacker", |
||||
"preferredUsername": "alyssa", |
||||
"summary": "Lisp enthusiast hailing from MIT", |
||||
"inbox": "https://social.example/alyssa/inbox/", |
||||
"outbox": "https://social.example/alyssa/outbox/", |
||||
"followers": "https://social.example/alyssa/followers/", |
||||
"following": "https://social.example/alyssa/following/", |
||||
"liked": "https://social.example/alyssa/liked/"} |
||||
</code></pre> |
||||
</section> |
||||
|
||||
<section> |
||||
<h4>ActivityPub</h4> |
||||
<pre><code class="hljs json" data-trim data-line-numbers="10"> |
||||
{"@context": "https://www.w3.org/ns/activitystreams", |
||||
"type": "Person", |
||||
"id": "https://social.example/alyssa/", |
||||
"name": "Alyssa P. Hacker", |
||||
"preferredUsername": "alyssa", |
||||
"summary": "Lisp enthusiast hailing from MIT", |
||||
"inbox": "https://social.example/alyssa/inbox/", |
||||
"outbox": "https://social.example/alyssa/outbox/", |
||||
"followers": "https://social.example/alyssa/followers/", |
||||
"following": "https://social.example/alyssa/following/", |
||||
"liked": "https://social.example/alyssa/liked/"} |
||||
</code></pre> |
||||
</section> |
||||
|
||||
<section> |
||||
<h4>ActivityPub</h4> |
||||
<pre><code class="hljs json" data-trim data-line-numbers="11"> |
||||
{"@context": "https://www.w3.org/ns/activitystreams", |
||||
"type": "Person", |
||||
"id": "https://social.example/alyssa/", |
||||
"name": "Alyssa P. Hacker", |
||||
"preferredUsername": "alyssa", |
||||
"summary": "Lisp enthusiast hailing from MIT", |
||||
"inbox": "https://social.example/alyssa/inbox/", |
||||
"outbox": "https://social.example/alyssa/outbox/", |
||||
"followers": "https://social.example/alyssa/followers/", |
||||
"following": "https://social.example/alyssa/following/", |
||||
"liked": "https://social.example/alyssa/liked/"} |
||||
</code></pre> |
||||
</section> |
||||
</section> |
||||
|
||||
<section data-background='_images/thats-all-folks.jpg'> |
||||
<div class="semi-opaque"> |
||||
<ul class="empty"> |
||||
<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><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li> |
||||
</ul> |
||||
</div> |
||||
</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> |