@ -29,7 +29,7 @@
< / script >
< / script >
<!-- [if lt IE 9]>
<!-- [if lt IE 9]>
< script src = "lib/js/html5shiv.js" > < / script >
< script src = "lib/js/html5shiv.js" > < / script >
<![endif]-->
<![endif]-->
< style type = "text/css" media = "screen" >
< style type = "text/css" media = "screen" >
@ -53,7 +53,7 @@
background-color: #666;
background-color: #666;
color: white;
color: white;
}
}
img {
img {
max-height: 90%;
max-height: 90%;
}
}
@ -67,220 +67,211 @@
background-color: rgba(0, 0, 0, 0.7);
background-color: rgba(0, 0, 0, 0.7);
}
}
.white {
.white {
background-color: white !important;
background-color: white !important;
}
}
< / style >
< / style >
< / head >
< / head >
< body >
< body >
< div class = "reveal" >
< div class = "reveal" >
< div class = "slides" >
< div class = "slides" >
< section data-background = "_images/activitypub-logo.png" data-header >
< h2 class = "semi-opaque" > ActivityPub< / h2 >
< / 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 data-transition = "slide" >
< 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 = "white 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 data-transition = "slide" >
< 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 >
< 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 data-transition = "slide" >
< 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 >
< section >
< section data-background = "_images/activitypub-logo.png" data-header >
< h4 > Mas O Que é ActivityPub< / h4 >
< h2 class = "semi-opaque" > ActivityPub< / h2 >
< / section >
< 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: WebFinger, ActivityStreams, ActivityVocabulary e JSON-LD.< / li >
< / ul >
< aside class = "notes" >
1. O protocolo é certificado (e padronizado) pela
W3C, o que deixa o protocolo aberto para
qualquer um implementar a sua própria versão (e
existem várias implementações, que eu vou falar
mais pra frente).
2. Apesar d'eu ter comentado o email, que usa um
protocolo específico, ActivityPub usa HTTP e JSON.
3. E apesar de ser HTTP e JSON, ainda aproveita
alguns conceitos do email -- e sim, eu estou
andando em circulos, mas peraí.
4. ActivityPub não é apenas um protocolo, mas é um
protocolo construido sobre outros protocolos,
como WebFinger para descoberta de informações de
usuários, ActivityStreams que descreve o formato
das atividades, ActivityVocabulary que inidica
quais ações existentes e os tipos de objetos
existentes e JSON-LD que define os formato dos
objetos em JSON.
< / aside >
< / section >
< / section >
< section >
< section >
< section >
< h4 > O Que é ActivityPub< / h4 >
< img src = "_images/avatar-20170726.png" alt = "Me" style = "float:left;width:200px;" class = "no-border" >
< h3 > Activity Vocabulary< / h3 >
< div >
< ul >
< ul class = "empty" >
< li class = "fragment" > Actors < span class = "fragment" > (Person, Bot, Service)< / span > < / li >
< li > Júlio Biason< / li >
< li class = "fragment" > Notes< / li >
< li > < a href = "https://functional.cafe/@juliobiason" > https://functional.cafe/@juliobiason< / a > < / li >
< li class = "fragment" > Images< / li >
< li > < a href = "https://t.me/juliobiason" > https://t.me/juliobiason< / a > < / li >
< li class = "fragment" > Links< / li >
< li > julio.biason@pm.me< / li >
< li class = "fragment" > ...< / li >
< li > < a href = "http://presentations.juliobiason.net" > http://presentations.juliobiason.net< / a > < / li >
< / ul >
< / ul >
< / div >
< aside class = "notes" >
< / section >
Existem atores que aplicam as ações (person, bot,
company/service), e as atividades tem coisas como o
compartilhamento de notas (texto), imagens, links e
outras coisas. Praticamente tudo que possa ser
pensando em compartilhar.
< / aside >
< / section >
< / section >
< section >
< section >
< section >
< h4 > ActivityPub< / h4 >
< img class = "stretch" src = "_images/internet.jpeg" alt = "" >
< h3 > WebFinger< / h3 >
< aside class = "notes" >
< pre > < code class = "hljs json" data-trim >
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/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 >
< 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 >
< 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: WebFinger, ActivityStreams, ActivityVocabulary e JSON-LD.< / li >
< / ul >
< aside class = "notes" >
1. O protocolo é certificado (e padronizado) pela
W3C, o que deixa o protocolo aberto para
qualquer um implementar a sua própria versão (e
existem várias implementações, que eu vou falar
mais pra frente).
2. Apesar d'eu ter comentado o email, que usa um
protocolo específico, ActivityPub usa HTTP e JSON.
3. E apesar de ser HTTP e JSON, ainda aproveita
alguns conceitos do email -- e sim, eu estou
andando em circulos, mas peraí.
4. ActivityPub não é apenas um protocolo, mas é um
protocolo construido sobre outros protocolos,
como WebFinger para descoberta de informações de
usuários, ActivityStreams que descreve o formato
das atividades, ActivityVocabulary que inidica
quais ações existentes e os tipos de objetos
existentes e JSON-LD que define os formato dos
objetos em JSON.
< / aside >
< / section >
< section >
< h4 > O Que é ActivityPub< / h4 >
< h3 > Activity Vocabulary< / h3 >
< ul >
< li class = "fragment" > Actors < span class = "fragment" > (Person, Bot, Service)< / span > < / li >
< li class = "fragment" > Notes< / li >
< li class = "fragment" > Images< / li >
< li class = "fragment" > Links< / li >
< li class = "fragment" > ...< / li >
< / ul >
< aside class = "notes" >
Existem atores que aplicam as ações (person, bot,
company/service), e as atividades tem coisas como o
compartilhamento de notas (texto), imagens, links e
outras coisas. Praticamente tudo que possa ser
pensando em compartilhar.
< / aside >
< / section >
< section >
< h4 > ActivityPub< / h4 >
< h3 > WebFinger< / h3 >
< pre > < code class = "hljs json" data-trim >
{"@context": "https://www.w3.org/ns/activitystreams",
{"@context": "https://www.w3.org/ns/activitystreams",
"type": "Person",
"type": "Person",
"id": "https://social.example/alyssa/",
"id": "https://social.example/alyssa/",
@ -292,17 +283,17 @@
"followers": "https://social.example/alyssa/followers/",
"followers": "https://social.example/alyssa/followers/",
"following": "https://social.example/alyssa/following/",
"following": "https://social.example/alyssa/following/",
"liked": "https://social.example/alyssa/liked/"}
"liked": "https://social.example/alyssa/liked/"}
< / code > < / pre >
< / code > < / pre >
< aside class = "notes" >
< aside class = "notes" >
Essa é a estrutura de um ator. Existem algumas
Essa é a estrutura de um ator. Existem algumas
opções importantes/interessantes aqui.
opções importantes/interessantes aqui.
< / aside >
< / aside >
< / section >
< / section >
< section >
< section >
< h4 > ActivityPub< / h4 >
< h4 > ActivityPub< / h4 >
< pre > < code class = "hljs json" data-trim data-line-numbers = "7" >
< pre > < code class = "hljs json" data-trim data-line-numbers = "7" >
{"@context": "https://www.w3.org/ns/activitystreams",
{"@context": "https://www.w3.org/ns/activitystreams",
"type": "Person",
"type": "Person",
"id": "https://social.example/alyssa/",
"id": "https://social.example/alyssa/",
@ -314,24 +305,24 @@
"followers": "https://social.example/alyssa/followers/",
"followers": "https://social.example/alyssa/followers/",
"following": "https://social.example/alyssa/following/",
"following": "https://social.example/alyssa/following/",
"liked": "https://social.example/alyssa/liked/"}
"liked": "https://social.example/alyssa/liked/"}
< / code > < / pre >
< / code > < / pre >
< aside class = "notes" >
< aside class = "notes" >
Essa informação sobre o ator (que eu estou
Essa informação sobre o ator (que eu estou
mostrando do originador da mensagem) tem alguns
mostrando do originador da mensagem) tem alguns
valores que são importantes.
valores que são importantes.
Por exemplo, the "inbox" tem as mensagens que
Por exemplo, the "inbox" tem as mensagens que
chegaram para esse usuário.
chegaram para esse usuário.
Obviamente, não necessáriamente qualquer um pode
Obviamente, não necessáriamente qualquer um pode
acessar o inbox, mas a informação pertence ao ator.
acessar o inbox, mas a informação pertence ao ator.
< / aside >
< / aside >
< / section >
< / section >
< section >
< section >
< h4 > ActivityPub< / h4 >
< h4 > ActivityPub< / h4 >
< pre > < code class = "hljs json" data-trim data-line-numbers = "8" >
< pre > < code class = "hljs json" data-trim data-line-numbers = "8" >
{"@context": "https://www.w3.org/ns/activitystreams",
{"@context": "https://www.w3.org/ns/activitystreams",
"type": "Person",
"type": "Person",
"id": "https://social.example/alyssa/",
"id": "https://social.example/alyssa/",
@ -343,20 +334,20 @@
"followers": "https://social.example/alyssa/followers/",
"followers": "https://social.example/alyssa/followers/",
"following": "https://social.example/alyssa/following/",
"following": "https://social.example/alyssa/following/",
"liked": "https://social.example/alyssa/liked/"}
"liked": "https://social.example/alyssa/liked/"}
< / code > < / pre >
< / code > < / pre >
< aside class = "notes" >
< aside class = "notes" >
Assim como o "inbox", existe o "outbox" que é tudo
Assim como o "inbox", existe o "outbox" que é tudo
que o ator enviou. Basicamente, essa é a lista de
que o ator enviou. Basicamente, essa é a lista de
todas as atividades do usuário específico.
todas as atividades do usuário específico.
< / aside >
< / aside >
< / section >
< / section >
< section >
< section >
< h4 > ActivityPub< / h4 >
< h4 > ActivityPub< / h4 >
< h3 > Activity Stream< / h3 >
< h3 > Activity Stream< / h3 >
< pre > < code class = "hljs json" data-trim >
< pre > < code class = "hljs json" data-trim >
{"@context": "https://www.w3.org/ns/activitystreams",
{"@context": "https://www.w3.org/ns/activitystreams",
"type": "Create",
"type": "Create",
"id": "https://social.example/alyssa/posts/a29a6843",
"id": "https://social.example/alyssa/posts/a29a6843",
@ -367,99 +358,94 @@
"attributedTo": "https://social.example/alyssa/",
"attributedTo": "https://social.example/alyssa/",
"to": ["https://chatty.example/ben/"],
"to": ["https://chatty.example/ben/"],
"content": "Did you finish reading that book?"}}
"content": "Did you finish reading that book?"}}
< / code > < / pre >
< / code > < / pre >
< aside class = "notes" >
< aside class = "notes" >
E uma atividade -- por exemplo, nosso ator acima
E uma atividade -- por exemplo, nosso ator acima
enviando um texto para outro ator.
enviando um texto para outro ator.
< / aside >
< / aside >
< / section >
< / section >
< section >
< section >
< h4 > ActivityPub< / h4 >
< h4 > ActivityPub< / h4 >
< img class = "white stretch" src = "_images/ActivityPub-tutorial-image.png" alt = "" >
< img class = "white stretch" src = "_images/ActivityPub-tutorial-image.png" alt = "" >
< / section >
< / section >
< section >
< section >
< h4 > ActivityPub< / h4 >
< h4 > ActivityPub< / h4 >
< h3 > Client to Server Activities< / h3 >
< h3 > Client to Server Activities< / h3 >
< p class = "fragment" >
< p class = "fragment" >
create, update, delete, follow, add, remove, like,
create, update, delete, follow, add, remove, like,
block, undo
block, undo
< / p >
< / p >
< / section >
< / section >
< section >
< section >
< h4 > ActivityPub< / h4 >
< h4 > ActivityPub< / h4 >
< h3 > Server to Server Activity< / h3 >
< h3 > Server to Server Activity< / h3 >
< p class = "fragment" >
< p class = "fragment" >
create, update, delete, follow, accept (follow),
create, update, delete, follow, accept (follow),
reject (to follow), add, remove, like, announce
reject (to follow), add, remove, like, announce
(reposting/boosting), undo
(reposting/boosting), undo
< / p >
< / p >
< / section >
< / section >
< section >
< section >
< h4 > ActivityPub< / h4 >
< h4 > ActivityPub< / h4 >
< h3 > Public< / h3 >
< h3 > Public< / h3 >
< p class = "fragment" > https://www.w3.org/ns/activitystreams#Public< / p >
< p class = "fragment" > https://www.w3.org/ns/activitystreams#Public< / p >
< / section >
< / section >
< / section >
< section >
< section >
< h4 > Suporte ao ActivityPub< / h4 >
< section >
< h4 > Suporte ao ActivityPub< / h4 >
< ul >
< li class = "fragment" > ForgeFed (Código, Github)< / li >
< ul >
< li class = "fragment" > PixelFed (Fotos, Instagram)< / li >
< li class = "fragment" > ForgeFed (Código, Github)< / li >
< li class = "fragment" > PeerTube (Videos, YouTube)< / li >
< li class = "fragment" > PixelFed (Fotos, Instagram)< / li >
< li class = "fragment" > HubZilla/Plume/WordPress ActivityPub Plugin (Blogging, WordPress)< / li >
< li class = "fragment" > PeerTube (Videos, YouTube)< / li >
< li class = "fragment" > DistBin (Snippets, Pastebin/Gist)< / li >
< li class = "fragment" > HubZilla/Plume/WordPress ActivityPub Plugin (Blogging, WordPress)< / li >
< li class = "fragment" > Diaspora (Social, Facebook)< / li >
< li class = "fragment" > DistBin (Snippets, Pastebin/Gist)< / li >
< li class = "fragment" > Microblog/Honk/Plemora/Mastodon (Micro-blogging, Twitter)< / li >
< li class = "fragment" > Diaspora (Social, Facebook)< / li >
< / ul >
< li class = "fragment" > Microblog/Honk/Plemora/Mastodon (Micro-blogging, Twitter)< / li >
< / section >
< / ul >
< / section >
< section >
< h4 > Suporte ao ActivityPub< / h4 >
< section >
< h3 > Mastodon< / h3 >
< h4 > Suporte ao ActivityPub< / h4 >
< h3 > Mastodon< / h3 >
< ul >
< li class = "fragment" > 2.629 instâncias< / li >
< ul >
< li class = "fragment" > 10.877.412 de contas criadas< / li >
< li class = "fragment" > 2.629 instâncias< / li >
< li class = "fragment" > 157.437 usuários ativos (última semana de novembro)< / li >
< li class = "fragment" > 10.877.412 de contas criadas< / li >
< li class = "fragment" > 1.562.887.737.129.765 toots< / li >
< li class = "fragment" > 157.437 usuários ativos (última semana de novembro)< / li >
< / ul >
< li class = "fragment" > 1.562.887.737.129.765 toots< / li >
< / section >
< / ul >
< / section >
< section >
< h4 > Suporte ao ActivityPub< / h4 >
< section >
< h4 > Suporte ao ActivityPub< / h4 >
< p >
< a href = "https://fediverse.party" > Fediverse< / a >
< p >
< / p >
< a href = "https://fediverse.party" > Fediverse< / a >
< / section >
< / p >
< / section >
< section >
< / section >
< h4 > Informações Técnicas< / h4 >
< section >
< ul >
< section >
< li > < a href = "https://www.w3.org/TR/activitypub/" > ActivityPub, W3C Recommendation 23 January 2018< / a > < / li >
< h4 > Informações Técnicas< / h4 >
< li > < a href = "https://nextcloud.com/blog/activitypub-the-new-standard-for-decentralized-networks/" > NextCloud: ActivityPub: the new standard for decentralized networks< / a > < / li >
< li > < a href = "https://hacks.mozilla.org/2018/11/decentralizing-social-interactions-with-activitypub/" > Mozilla Hacks: Decentralizing Social Interactions with ActivityPub< / a > < / li >
< ul >
< li > < a href = "https://activitypub.rocks/" > ActivityPub Rocks!< / a > < / li >
< li > < a href = "https://www.w3.org/TR/activitypub/" > ActivityPub, W3C Recommendation 23 January 2018< / a > < / li >
< li > < a href = "https://flak.tedunangst.com/post/ActivityPub-as-it-has-been-understood" > Honk: ActivityPub as it has been understood< / a > < / li >
< li > < a href = "https://nextcloud.com/blog/activitypub-the-new-standard-for-decentralized-networks/" > NextCloud: ActivityPub: the new standard for decentralized networks< / a > < / li >
< / ul >
< li > < a href = "https://hacks.mozilla.org/2018/11/decentralizing-social-interactions-with-activitypub/" > Mozilla Hacks: Decentralizing Social Interactions with ActivityPub< / a > < / li >
< / section >
< li > < a href = "https://activitypub.rocks/" > ActivityPub Rocks!< / a > < / li >
< li > < a href = "https://flak.tedunangst.com/post/ActivityPub-as-it-has-been-understood" > Honk: ActivityPub as it has been understood< / a > < / li >
< section data-background = '_images/thats-all-folks.jpg' data-transition = "slide" >
< / ul >
< / section >
< / section >
< section data-background = '_images/thats-all-folks.jpg' >
< div class = "semi-opaque" >
< div class = "semi-opaque" >
< ul class = "empty" >
< ul class = "empty" >
< li > < a href = "https://functional.cafe/@juliobiason" > https://functional.cafe/@juliobiason< / a > < / li >
< li > < a href = "https://functional.cafe/@juliobiason" > https://functional.cafe/@juliobiason< / a > < / li >
@ -485,7 +471,7 @@
center: true,
center: true,
// showNotes: true,
// showNotes: true,
transition: 'sli de', // none/fade/slide/convex/concave/zoom
transition: 'fa de', // none/fade/slide/convex/concave/zoom
// Optional reveal.js plugins
// Optional reveal.js plugins
dependencies: [
dependencies: [