<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Egoísmo duplicado]]></title><description><![CDATA[Fabrício Zuardi contra o mundo.]]></description><link>https://blog.fabricio.org/</link><generator>Ghost 0.11</generator><lastBuildDate>Fri, 10 Apr 2026 17:34:36 GMT</lastBuildDate><atom:link href="https://blog.fabricio.org/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Review Cheapino V2 Wired (AliExpress)]]></title><description><![CDATA[<p><strong>Loja:</strong> <a href="https://www.aliexpress.com/store/1104096852">Scorpio Store</a></p>

<p><strong>Produto:</strong> <a href="https://aliexpress.com/item/1005009786296143.html">NEW Cheapino V2 Wired Split Keyboard 36keys Portable MX Mechanical Keyboard Ergonomic QMK/Vial Hot Swap Kit Laptop Keyboards</a></p>

<p><strong>Variante:</strong> NO switch NO keycap</p>

<p><img src="https://i.imgur.com/miHCqJW.jpeg" alt=""></p>

<p>Comprei a versão sem teclas, o produto vem com case plástico de impressão 3D, cabo de rede que conecta as duas metades</p>]]></description><link>https://blog.fabricio.org/review-cheapino-v2-wired-aliexpress/</link><guid isPermaLink="false">758fd177-65d3-4c4c-aafa-ebb18c021170</guid><dc:creator><![CDATA[Fabricio Campos Zuardi]]></dc:creator><pubDate>Fri, 09 Jan 2026 15:13:52 GMT</pubDate><content:encoded><![CDATA[<p><strong>Loja:</strong> <a href="https://www.aliexpress.com/store/1104096852">Scorpio Store</a></p>

<p><strong>Produto:</strong> <a href="https://aliexpress.com/item/1005009786296143.html">NEW Cheapino V2 Wired Split Keyboard 36keys Portable MX Mechanical Keyboard Ergonomic QMK/Vial Hot Swap Kit Laptop Keyboards</a></p>

<p><strong>Variante:</strong> NO switch NO keycap</p>

<p><img src="https://i.imgur.com/miHCqJW.jpeg" alt=""></p>

<p>Comprei a versão sem teclas, o produto vem com case plástico de impressão 3D, cabo de rede que conecta as duas metades e adesivos de borracha para colar em baixo e fazer os pezinhos. Na placa tudo* já vem soldado e praticamente pronto para uso, bastando encaixar 36 "teclas" (switches MX, e caps/tampas, nesta minha montagem utilizei <a href="https://pt.aliexpress.com/item/1005007666734237.html">Akko V3 Pro Lavender Purple</a> e <a href="https://pt.aliexpress.com/item/1005006910173774.html">XDA2 Keycaps</a>) e conectar um cabo USB, que não vem incluso. <br>
<em>(* ver relato de um defeito na minha unidade abaixo)</em></p>

<p>É um produto que leva um tempo para montar antes de ser enviado, então tenha isto em mente, eu comprei na expectativa de que chegaria para o Natal, e quase cancelei por ansiedade quando observei demora no envio e notei que não atingiria o prazo. Acabei seguindo em frente mesmo assim e o produto chegou na primeira semana do ano.</p>

<p>O produto veio muito bem protegido, dentro de várias sacolas plásticas com ar, praticamente uma almofada.</p>

<p>Tive a infelicidade de receber uma placa do lado direito em que a "tecla Y" não computava, entrei em contato com o vendedor explicando o problema e ele foi bem responsivo e rápido no suporte, se dispôs a enviar uma placa de reposição caso eu necessitasse.</p>

<p>Felizmente consegui "resoldar" o conector e delicadamente o diodo, então acabei não precisando, mas senti confiança de que o vendedor cumpriria com sua promessa caso chegassemos a tanto.</p>

<p>E o preço foi bom, este vendedor era um dos mais baratos, na ocasião (R$249,78 com a taxa do L e desconto de black-friday), foi um dos fatores que me ajudou a encarar o prazo maior para envio. Como diz o nome "cheap", controlador barato, um RP2040-Zero na esquerda, sem frescuras de LED RGB, com fio. Projeto nota 10: <a href="https://github.com/tompi/cheapino">https://github.com/tompi/cheapino</a></p>

<p>Sobre o Cheapino, em comparação com outras opções de teclados ergonômicos "split", como o Corne en suas diferentes variantes, eu particularmente gostei do design do projeto e se encaixa no meu perfil, acho 36 teclas um bom balanço entre minimalismo e praticidade, mas não se enganem, a curva de aprendizado é brusca. Este já possui  suporte ao sofware de configuração <a href="https://get.vial.today/download/">Vial</a>, disponível para Linux, Windows e Mac OS, onde é possivel customizar muito completamente tudo o que for necessário, incluindo funções do dial, sentido horário, sentido antihorário e a pressionada (o dial tb é botão). Mas leia abaixo as considerações sobre firmware, que é importante.</p>

<p>Ainda não terminei de chegar numa personalização estável para o meu layout de teclado, camadas e combinações, no momento da escrita deste texto, minha configuração estava assim: <a href="https://gist.githubusercontent.com/fczuardi/7e4eeb8fae468f56ff82e3399694b83f/raw/45e91320b68dea4d582c05c0375e244205252ba3/fcz-cheapino.vil">download</a>. Mas a graça da coisa é ir descobrindo o que funciona bem e ir adaptando ao longo do tempo, o link foi uma referência, estas coisas são bem pessoais.</p>

<p><strong>Precaução importante:</strong> trocar o firmware por um oficial conhecido.</p>

<p>Dizem que o seguro morreu de velho, e comprando um item tão essencial para entrada de dados num PC, segurança tem que ser uma preocupação, vai saber por onde andou este microcontrolador antes de chegar na sua mão... é um tanto de paranóia achar que seu teclado de nicho virá com keylogger ou infectado por alguma outra brecha, sim, é. Mas substituir o firmware é uma precaução tão simples de fazer neste teclado com este chip que não custa nada, leva menos de um minuto.</p>

<p>Para o meu nivel de cuidado x preguiça, baixar o uf2 <code>cheapino_vial.uf2</code> daqui <a href="https://github.com/tompi/cheapino/releases/tag/v2.0">https://github.com/tompi/cheapino/releases/tag/v2.0</a>, ligar o USB enquanto segura o botão "boot" da plaquinha aonde o cabo entra, arrastar o arquivo para o drive que foi montado. Pronto (instruções retiradas <a href="https://github.com/tompi/cheapino/blob/master/doc/firmware.md">daqui</a>)!</p>]]></content:encoded></item><item><title><![CDATA[Então é Natal...]]></title><description><![CDATA[<p>Estamos em Dezembro, fim do ano praticamente. As crianças estão de férias e algumas encomendas da black-friday já começam a sair de Valinhos, polo norte, lar do bom velhinho Santa Claus, ou simplesmente papai Noel, para os lares daqueles bons meninos e meninas que se comportaram ao longo do ano.</p>]]></description><link>https://blog.fabricio.org/entao-e-natal/</link><guid isPermaLink="false">d3c7f5cf-93b7-4893-a5f4-25a4ab151f82</guid><dc:creator><![CDATA[Fabricio Campos Zuardi]]></dc:creator><pubDate>Sat, 13 Dec 2025 13:53:54 GMT</pubDate><media:content url="http://blog.fabricio.org/content/images/2025/12/20251213_081647.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://blog.fabricio.org/content/images/2025/12/20251213_081647.jpg" alt="Então é Natal..."><p>Estamos em Dezembro, fim do ano praticamente. As crianças estão de férias e algumas encomendas da black-friday já começam a sair de Valinhos, polo norte, lar do bom velhinho Santa Claus, ou simplesmente papai Noel, para os lares daqueles bons meninos e meninas que se comportaram ao longo do ano.</p>

<p>Exceto, claro, se você incluiu um carregador de celular junto na cartinha, pois nosso querido ministro e futuro candidato Haddad, ou simplesmente taxade, precisa também presentear os seus e neste caso um pacote com marcador de livro, iô-iô, fone de ouvido, chaveiro e outros cacarecos chineses pode cair na malha fina da Anatel, ou simplesmente anatoa, sem possibilidade de resgate pelos próximos 3 meses.</p>

<p>É aquela época do ano de tentar arrumar a bagunça do escritório que você não conseguiu o ano inteiro, jogar lixo fora, encaixotar lixo eletrônico velho para dar espaço ao lixo eletrônico novo. Natal, tempo de consumismo.</p>

<p>Nesta manhã chuvosa de sexta, me pego digitando num computador que o bom velhinho trouxe, não tive a coragem de trocar o meu confiável Thinkpad de quase uma década de serviços prestados por outro laptop. Ao invés de aposentá-lo eu decidi ter uma máquina de mesa para complementá-lo. </p>

<p>Comprei um mini-pc de <a href="https://www.youtube.com/watch?v=kAr2_FnJph4">especificações mais "modernas"</a> (relativamente ao menos, pois é uma máquina de 2023 comprada usada). Uma máquina com parafusos, slots para upgrade de memória e disco, outro laptop fatalmente significaria memória soldada e menos possibilidades de upgrade.</p>

<p>Ele veio com Windows mas já tratei de eliminar esta bomba nos primeiros minutos de uso. Coloquei um <a href="https://omarchy.org/">Omarchy</a>, que eu estava com vontade de provar, para ter uma experiência boa de um OS com Hyperland sem precisar cair num buraco de coelho infinito de configurações logo de cara. </p>

<p>Estou no meio de <a href="https://games.falafel.com.br/building-an-online-tabletop-game-devlog/">um freela grande</a> então não quero me distrair muito. Queria algo bem pronto para o uso, e isto me serviu. Assim como tem sido o caso do <a href="https://projectbluefin.io/">Bluefin</a> no laptop.</p>

<p>Mas numa sexta feira de dezembro é realmente difícil não se distrair, outro upgrade de hardware novo neste fim de 2025, com streamings e assinaturas abundantes, foi um "<a href="https://www.fiio.com/echomini">mp3 player</a>". Isto mesmo, parece que ter controle sobre sua própria coleção de músicas é uma tendência que está voltando com tudo (pelo menos para mim, para alguns isto nunca nem saiu de moda).</p>

<p>O que significa que parte da arrumação do escritório passa por desenterrar aonde raios estava um leitor de CDs externo para eu dar inicio à grande cópia de álbums físicos do fim do ano, sei que o buraco de coelho do áudio hifi e formatos com qualidade melhores que a de um "rip" lossless de CD existe, mas como eu disse, pragmatismo é uma virtude para quem possui tendência à distrações do tipo. Agora não é o momento.</p>

<p>Cá estou, num linux zerado, ripando um CDs usados, comprados numa feira da barganha qualquer, Terra Samba, Raul Seixas, Elis Regina, num PC usado que na minha opinião também foi uma barganha, para popular um "ipod" moderno, renascido como "chi-fi" player para entrar no ano novo com um setup diferente, longe ainda do minimalismo, mas com esperanças.</p>

<blockquote>
  <p>Eu quero uma casa no campo<br>
  Do tamanho ideal, pau a pique e sapé <br>
  Onde eu possa plantar meus amigos <br>
  Meus discos e livros e nada mais</p>
</blockquote>

<p>Feliz 2026!</p>]]></content:encoded></item><item><title><![CDATA[Trabalho]]></title><description><![CDATA[<p>Emprego, ocupação, ofício, profissão, serviço, função incumbêncïa, esmero, obra, faina, labutação, lida são alguns sinônimos da palavra "<a href="https://dicionario.priberam.org/trabalho">trabalho</a>". </p>

<p>A origem da palavra vem do termo em latim  <em>tripaliare</em> que significa torturar com o instrumento de tortura <a href="https://pt.wikipedia.org/wiki/Trip%C3%A1lio">tripálio</a>, do latim <em>tripalium</em>: que tem três estacas.</p>

<p>Hoje (escrevi este texto no feriado</p>]]></description><link>https://blog.fabricio.org/trabalho/</link><guid isPermaLink="false">38e341c3-3b7a-4539-ade3-e93f1f11c9a6</guid><dc:creator><![CDATA[Fabricio Campos Zuardi]]></dc:creator><pubDate>Fri, 09 May 2025 13:31:45 GMT</pubDate><media:content url="http://blog.fabricio.org/content/images/2025/05/markus-spiske-z02yFSgVRbA-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://blog.fabricio.org/content/images/2025/05/markus-spiske-z02yFSgVRbA-unsplash.jpg" alt="Trabalho"><p>Emprego, ocupação, ofício, profissão, serviço, função incumbêncïa, esmero, obra, faina, labutação, lida são alguns sinônimos da palavra "<a href="https://dicionario.priberam.org/trabalho">trabalho</a>". </p>

<p>A origem da palavra vem do termo em latim  <em>tripaliare</em> que significa torturar com o instrumento de tortura <a href="https://pt.wikipedia.org/wiki/Trip%C3%A1lio">tripálio</a>, do latim <em>tripalium</em>: que tem três estacas.</p>

<p>Hoje (escrevi este texto no feriado do dia do trabalho) é dia de lembrar e comemorar isto. Por sorte é um dia de folga, não de tortura. </p>

<p>Neste dia do trabalho, eu me encontro sem trabalho, no sentido de atividade profissional regular remunerada, mas não sem trabalho no sentido de obra, já que estou digitando este texto, com esmero diga-se, e a serviço de mim mesmo das pessoas que se depararem com ele. Estou na lida.</p>

<p>Meu trabalho atual tem sido exercitar e dar vazão à minha criatividade, seja em textos como este ou em poemas ainda não publicados. Ser escritor é um trabalho? A julgar pelo número de autores de sucesso que mantiveram seus <em>day jobs</em> antes de conseguir dedicação exclusiva para isto, talvez não.</p>

<blockquote>
  <p>We're living in a culture that sidelines the creative act. That says it's something for children or something for the retired. It's an indulgence. It's a little bit selfish. It's frivolous. It's decoration. It is a narrative that is actively harming us. It is repressing our innate instincts to create</p>
</blockquote>

<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/2XZ9z6OewR0?si=u3axxnUqExNuN6bW" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>  

<p><small>esta mulher é foda</small></p>

<p><a href="https://youtu.be/2XZ9z6OewR0?si=u3axxnUqExNuN6bW">https://youtu.be/2XZ9z6OewR0?si=u3axxnUqExNuN6bW</a></p>

<p>Outras atividades que têm me ocupado o dia são os estudos, estou cursando um <a href="https://vinteum.org/mastering/">seminário</a> e relendo o <a href="https://github.com/bitcoinbook/bitcoinbook">Mastering Bitcoin do Antonopoulus</a>, aprendi um framework de Javascriot novo (Svelte 5/Svelte Kit) para o <em>take-home</em> de um <a href="https://github.com/fczuardi/ln-nodes-info">processo seletivo</a> que foi interrompido no meio, entre outras coisas mais próximas do prazer do que da tortura.</p>

<p>Neste feriado tem show da Lady Gaga na TV e um show do <a href="https://massacration.net/">Massacration</a> para ir com uns amigos, estas atividades certamente são da categoria folga, não trabalho.</p>

<p>Em um restaurante famoso aqui da cidade, pregado num quadro de recados, tem um cartaz com uma versão simplificada e muito engraçada daquela frase atribuída a Confúcio sobre trabalhar com o que gosta, mas talvez por terem simplificado ficou ambígua e com margem para ser interpretada como "se você fizer só o que gosta, nunca trabalhará na vida"... pois não estão contratando.</p>

<p>Eu preciso voltar lá e tirar uma foto deste cartaz, pois de memória eu não consigo fazer justiça ao humor involuntário que este papelzinho continha, não sei neste momento as palavras exatas que usaram, só lembro da reação irônica que passou pela minha cabeça e me fez rir. Eu definitivamente vou voltar lá para ler de novo, e para comer também, já que a comida é <strong>muito boa</strong>. As cozinheiras devem gostar do que fazem, julgando apenas o resultado, é inquestionável que são boas. Se fazem por vocação além de apenas por remuneração eu já não sei.</p>

<p>Ha muito mimimi e textão de LinkedIn sobre como a <acronym title="Inteligência Artificial">I.A.</acronym>, vai tomar nossos empregos, o alarmismo e o medo são reações típicas. Usar a produtividade das ferramentas para que trabalhemos menos, ou encarar a substituição como algo positivo é um ângulo que eu não vejo ser muito explorado neste debate, a não ser em forma de piada, o que já é um começo, pois uma piada com fundo de verdade também gera sinapses, como esta sobre <acronym title="Universal Basic Income">UBI</acronym> "I for one am stoked":</p>

<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/6WAe0f74Q0s?si=PqqKvLVWHCInJn2W" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

<p><a href="https://youtu.be/6WAe0f74Q0s?si=PqqKvLVWHCInJn2W&amp;t=26">https://youtu.be/6WAe0f74Q0s?si=PqqKvLVWHCInJn2W&amp;t=26</a></p>

<hr>

<p><small>Header photo by <a href="https://unsplash.com/@markusspiske?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Markus Spiske</a> on <a href="https://unsplash.com/photos/toddler-pouring-sand-in-brown-wooden-fence-z02yFSgVRbA?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Unsplash</a></small></p>]]></content:encoded></item><item><title><![CDATA[Sobre máquinas de escrever e meu primeiro writerdeck]]></title><description><![CDATA[<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/QSzU3PVBnI4?si=2An3nQq9D513DQjj" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

<p><a href="https://youtu.be/QSzU3PVBnI4">https://youtu.be/QSzU3PVBnI4</a></p>

<h2 id="juventudeanalgica">Juventude analógica</h2>

<p>Ontem o algoritmo do Youtube me recomendou um vídeo sobre o <br>
<a href="https://www.instagram.com/oescribagarimpeiro/">Louis</a>, um jovem que vive em São Paulo e que é aficcionado por máquinas de escrever e outras tecnologias antigas. Gostei da descrição que ele deu de uma máquina de escrever como uma</p>]]></description><link>https://blog.fabricio.org/writerdeck/</link><guid isPermaLink="false">8faf45d3-49c8-4dc8-a4a5-dd243af4535c</guid><dc:creator><![CDATA[Fabricio Campos Zuardi]]></dc:creator><pubDate>Tue, 29 Apr 2025 19:20:09 GMT</pubDate><media:content url="http://blog.fabricio.org/content/images/2025/04/yukon-haughton-4ncwYUlNtEU-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/QSzU3PVBnI4?si=2An3nQq9D513DQjj" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

<img src="http://blog.fabricio.org/content/images/2025/04/yukon-haughton-4ncwYUlNtEU-unsplash.jpg" alt="Sobre máquinas de escrever e meu primeiro writerdeck"><p><a href="https://youtu.be/QSzU3PVBnI4">https://youtu.be/QSzU3PVBnI4</a></p>

<h2 id="juventudeanalgica">Juventude analógica</h2>

<p>Ontem o algoritmo do Youtube me recomendou um vídeo sobre o <br>
<a href="https://www.instagram.com/oescribagarimpeiro/">Louis</a>, um jovem que vive em São Paulo e que é aficcionado por máquinas de escrever e outras tecnologias antigas. Gostei da descrição que ele deu de uma máquina de escrever como uma "máquina meditativa".</p>

<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/9PRub2BLs9s?si=tC3crJOcKjjKQuse" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>  

<p><a href="https://youtu.be/9PRub2BLs9s">https://youtu.be/9PRub2BLs9s</a></p>

<p>Para alguém com minha idade (45), o interesse por máquinas  de uma época pré-internet, pode ter sua origem na nostalgia, na saudade de outros tempos, quando havia <strong>menos acesso</strong>, mais inconveniências, mais rituais. Mas no caso de muitos jovens que <strong>já nasceram depois da internet</strong>, esta atração pelo analógico deve ter mais a ver com o desejo de experimentar este estilo de vida que eles só conhecem por relatos. Talvez seja uma reação ao mundo hiperconectado, dos scrolls infinitos, das redes, das telas preenchendo qualquer menor sinal de tédio, aquele papo conhecido. Nas palavras do próprio entrevistado: </p>

<blockquote>
  <p>"pessoas vivas, pessoas jovens... estão completamente exaustas de telas, de internet, de ter que ficar conectadas o tempo todo"</p>
</blockquote>

<p>Ainda pelo Youtube, este tema reapareceu em alguns <em>video-essays</em> (ensaios em formato de vídeo), nas minhas fugas da programação da TV aberta durante o domingo, a Globo em particular está uma chatice com esta história de comemorações dos 60 anos, até o Globo Rural inventou de fazer reportagens bregas sobre novelas...</p>

<p>Enfim, compartilho aqui estes exemplos deste sentimento, desta tendência, deste "espírito do tempo": um vídeo de um outro jovem explicando <a href="https://youtu.be/0dEJiQnotR8">porque jovens gostam de coisas velhas</a> e um sobre <a href="https://youtu.be/a8iOJkqYNpc">a importância da inconveniência</a>.</p>

<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/0dEJiQnotR8?si=qvI30oozgroryheD" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/a8iOJkqYNpc?si=2DN4b0ejBkSZs9ZR" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

<h2 id="mquinadeescrever">Máquina de escrever</h2>

<p>Voltando ao Louis e suas máquinas de escrever, eu sou uma pessoa que tem certa tendência de acumular tralhas, no meu apartamento tem muito livro de papel, tem pilhas de CDs, DVDs, eletrônicos diversos, projetos inacabados, materiais de costura, de crochê, instrumentos musicais, vários videogames antigos, TVs e monitores de tubo e etc, é um "ecoponto", tenho até uma máquina de somar, mas não tenho nenhuma máquina de escrever, ainda...</p>

<p><img src="https://blog.fabricio.org/content/images/2025/04/IMG_20250429_142456.jpg" alt="Sobre máquinas de escrever e meu primeiro writerdeck">
<small>soma e passa a régua</small></p>

<p>Ver aquele jovem exibir sua coleção e descrever as particularidades de cada tipo de máquina me deixou com certa vontade de adquirir uma, não vou negar... Abri os classificados locais (Facebook Marketplace) e um site de comércio de usados (Mercado Livre) para olhar as oportunidades, porém tenho a satisfação de declarar que consegui, pelo menos por enquanto, <strong>freiar o meu impulso consumista</strong>.</p>

<p>Não vou dizer que a idéia de ter uma "máquina meditativa", um aparelho que serve a um único propósito não me agrada, pelo contrário, acho bem atrativo estes representantes de uma vida com foco, com atenção. Gosto de ler jornal de papel tomando café, gosto do ritual de escolher e escutar um álbum de música inteiro... faz bem estes momentos de contemplação.</p>

<p>Uma máquina de escrever, para alguém que, como eu, gosta de escrever, é uma chance de ter este canal. De criar oportunidades para escrita focada e sem distrações. No entanto também significa <strong>abrir mão de muitas facilidades magníficas</strong> como o meu tecladinho mecânico, split e super confortável, bem como as inovações dos processadores de texto modernos, tais quais: a capacidade de mover o cursor ou mesmo o revolucionário e simples "<em>backspace</em>".</p>

<p>Decidi então construir uma "máquina de escrever" utilizando as tralhas que já possuo primeiro.</p>

<h2 id="resignificandoumipad">Resignificando um iPad</h2>

<p>Dentre os cacarecos do meu museu de lixo eletrônico, tenho um tablet relativamente velho, um <a href="https://en.wikipedia.org/wiki/IPad_Mini_2">iPad mini 2</a>, que foi comercializado entre 2013 e 2017, mas que eu comprei usado, já fora de linha, na minha cidade em meados de 2023 para brincar de fazer música com um controlador MIDI e um adaptador USB-Lightning OTG.</p>

<p>Este tablet me pareceu um bom candidato para ser usado como display da minha máquina. Uma vantagem de usar um iPad velho para isto é o fato dele já possuir uma bateria embutida, ou seja: portabilidade.</p>

<p>As desvantagens são o fato de precisar arranjar um software adequado e compatível com um iOS já abandonado (12.5.7), além do fato do iPad ser um computador completo e multipropósito, eu tenho jogos e aplicativos diversos instalados nele, as distrações estariam lá sempre a um "touch" de distância, talvez até aparecendo em forma de notificações caso eu não me discipline.</p>

<p><img src="https://blog.fabricio.org/content/images/2025/04/20250429_144420.jpg" alt="Sobre máquinas de escrever e meu primeiro writerdeck">
<small>there's an app for that</small></p>

<p>Tenho também um Kindle que eu pensei em usar. Escrever com uma tela de e-ink seria um coisa bem agradável, sei de alguns projetos com raspberry pi, <a href="https://forums.raspberrypi.com/viewtopic.php?t=62139">tipo este que usa VNC</a> mas <strong>eu descuidei e deixei o firmware atualizar</strong>, perdi a chance de <a href="https://kindlemodding.org/jailbreaking/">destravá-lo com um jailbreak</a>, então ele não pode por enquanto fugir muito dos destinos que a Amazon quiser para ele... malditos! (observação: sei que existem <a href="https://github.com/rberenguel/PiWrite">soluções baseadas em browser</a> que não dependem de jailbreak, fica para um outro post)</p>

<p>Vamos de iPad mesmo, o teclado externo eu consigo usar o adaptador USB que eu tenho, fui atrás de como travar ele em um único app, o chamado modo "quiosque" (como estas tablets de cardápio de restaurante, que não podem facilmente funcionar como tablet genérica). O último passo foi decidir qual <strong>software</strong> utilizar, escolher um "app" de escrita, notas, processador de texto, diário ou algo assim.</p>

<p>Apps destes existem aos montes, o desafio é encontrar um que funcione em <strong>iOS 12</strong>, já que o incentivo na Apple Store é para que os aplicativos suportem apenas as versões mais recentes do iOS. Por exemplo, eu não consigo instalar Youtube ou Netflix numa tablet de poucos anos atrás.</p>

<h2 id="sugestesdeaplicativos">Sugestões de aplicativos</h2>

<p>Experimentei 6 aplicativos, alguns nem abriram, outros dependiam de assinatura ou cobravam por funcionalidades básicas, outros tinham anúncios.</p>

<p>Os dois compatíveis com esta versão antiga do iOS que eu gostei e posso recomendar para alguém com objetivos parecidos são estes dois: <a href="https://pencake.app/">PenCake</a> e <a href="https://apps.apple.com/us/app/hanx-writer/id868326899?platform=ipad">Hanx Writer</a>.</p>

<p>O PenCake é um editor de Markdown, bem completo, gratuito, com dark mode e opção de sincronizar os textos na nuvem da Apple ou no Google Drive. O segundo, que eu considerei o mais apropriado para este propósito de "máquina de escrever" é um aplicativo do Tom Hanks, o ator e também amante das máquinas de escrever.</p>

<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/v9ppR7rbLp8?si=H9PJ6yr68o5wrFah" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>  

<p><a href="https://youtu.be/v9ppR7rbLp8">https://youtu.be/v9ppR7rbLp8</a></p>

<p>Este app, apesar de sem updates desde 2017 funciona razoavelmente bem, simula máquinas de escrever é gratuito  com uma opção de liberar algumas funcionalidades a mais, como fontes maiores, multiplos documentos, cores diferentes e mudança da cor de fundo por 10 dólares (por sua conta e risco, é um app abandonado)...</p>

<h2 id="modoquiosque">Modo quiosque</h2>

<p>Para ativar o "mode quiosque" e permitir que o iPad sirva exclusivamente para rodar um único aplicativo, sem possibilidade de distrações, o caminho é uma funcionalidade chamada "<a href="https://support.apple.com/en-us/111795">Guided Access</a>" que pode ser habilitada nesta versão do iOS pelo Settings, menu General > Accessibility > Learning > Guided Access. Uma vez habilitada, entre no aplicativo que deseja "travar" e aperte o Home Button três vezes seguidas.</p>

<p>O resultado está registrado <a href="https://youtu.be/QSzU3PVBnI4">no vídeo que abre este post</a>, deixem lá um like para dar uma moral :)</p>

<h2 id="maissobrewriterdecks">Mais sobre writerdecks</h2>

<p>Depois que entrei neste projeto de montar minha máquina de escrever, caí num grupo de Reddit chamado <a href="https://www.reddit.com/r/writerDeck/">/r/writerdeck</a> que funciona como ponto de encontro para pessoa e projetos com este mesmo intuito. O nome é uma variação do termo <a href="https://blog.rfox.eu/en/Hardware/Cyberdecks.html">Cyberdeck</a> que vem da cultura cyberpunk, seriam computadores portáteis, pequenos terminais usados por hackers ou algo nesta linha, outro nicho de projetos caseiros muito interessantes para se explorar.</p>

<hr>

<p><small>Header Photo by <a href="https://unsplash.com/@ydlh?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Yukon Haughton</a> on <a href="https://unsplash.com/photos/a-pink-flower-sitting-on-top-of-a-blue-typewriter-4ncwYUlNtEU?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Unsplash</a> <br>
</small></p>]]></content:encoded></item><item><title><![CDATA[Óculos]]></title><description><![CDATA[<p>Uma das últimas coisas que eu aproveitei meu plano de saúde para fazer foi ir ao oftalmologista <strong>pela primeira vez na vida</strong> (aqueles exames de renovar carteira de motorista não contam, obviamente).</p>

<p>Saí de lá com uma receita de lentes para poucos graus de <a href="https://en.wikipedia.org/wiki/Astigmatism">astigmatismo</a>. O próprio médico me disse</p>]]></description><link>https://blog.fabricio.org/oculos/</link><guid isPermaLink="false">7beb343c-95d0-4940-898c-cf3141c457c1</guid><dc:creator><![CDATA[Fabricio Campos Zuardi]]></dc:creator><pubDate>Fri, 25 Apr 2025 17:35:12 GMT</pubDate><media:content url="http://blog.fabricio.org/content/images/2025/04/_IMG_20250425_103324.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://blog.fabricio.org/content/images/2025/04/_IMG_20250425_103324.jpg" alt="Óculos"><p>Uma das últimas coisas que eu aproveitei meu plano de saúde para fazer foi ir ao oftalmologista <strong>pela primeira vez na vida</strong> (aqueles exames de renovar carteira de motorista não contam, obviamente).</p>

<p>Saí de lá com uma receita de lentes para poucos graus de <a href="https://en.wikipedia.org/wiki/Astigmatism">astigmatismo</a>. O próprio médico me disse ser opcional usar óculos, já que o grau é pequeno, mesmo assim eu encomendei uns para ter a experiência.</p>

<blockquote>
  <p><strong>Nota gramatical</strong>: Eu encomendei uma única unidade, já que a palavra óculos, assim como "férias" e "parabéns" já são palavras no plural, há frases que deixam um mistério no ar mesmo. "Eu encomendei uns..." Uns quantos? Devo tratar sempre como um par, tipo um par de meias. Enfim... aprender isto também faz parte do meu novo cotidiano, de pessoa madura que usa (um par de) óculos.</p>
</blockquote>

<p>Sempre admirei pessoas que usam, acho a estética bacana, gosto de comprar óculos de sol vagabundos na praia, mas usar <strike>um não-escuro</strike> uns não-escuros, apenas para "fazer graça" ou para parecer mais inteligente me parecia <em>cheating</em> (trapaça), ainda é um tabu e provavelmente um desrespeito com quem precisa de verdade.</p>

<p>Mas hoje eu consegui minha autorização. Faço parte do clube finalmente! E muitas coisas novas eu estou podendo viver por conta disso: ter que limpar, enxugar gotas d'água na chuva, lembrar onde deixei etc, mas vou começar pela principal delas: <strong>enxergar melhor</strong>!</p>

<p>Sim, apesar da opcionalidade do uso, segundo meu médico, eu não sabia de fato o que eu estava perdendo em termos de riqueza de detalhes no mundo, para quem só vê tudo sempre levemente embaçado, aquilo é o mundo. Por falta de ter um parâmetro de comparação, eu sempre considerei que a pintura impressionista que eu enxergava em tudo era apenas a realidade. E agora, tendo acesso à definição 4k, eu me pergunto se esta clareza toda é de fato a realidade também...</p>

<p>Tipo, ninguém consegue sem uma luneta enxergar muitos e muitos metros de distância, por melhor que sua visão seja, ninguém sem uma câmera com visão noturna consegue ver no escuro, será que os óculos que eu tenho hoje apenas corrigiram um problema e me colocaram no mesmo patamar que uma criança saudável tem, ou será que esta correção foi um pouco além e deu para mim algo que qualquer humano só conseguiria com assistência mesmo? Fica a dúvida...o fato é que corrigir esses poucos graus já fez grande diferença em diversas situações, e eu pretendo usar para ter este acesso com bastante frequência, mesmo sem precisar.</p>

<p>Encerro com um pequeno clipe, dirigido pela minha sobrinha, com cenas de um passeio que fizemos durante o feriado, ainda deslumbrado com o acessório e aprendendo os acordes da famosa música dos Paralamas.</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/8CWCFdvSrcU?si=LdsntHrBHe5pCTUH" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

<p><a href="https://youtu.be/8CWCFdvSrcU">https://youtu.be/8CWCFdvSrcU</a></p>]]></content:encoded></item><item><title><![CDATA[De volta à pista]]></title><description><![CDATA[<p>Há umas duas semanas terminou meu contrato com a empresa onde passei meus últimos anos trabalhando <em>full-time</em>. Isto significa que estou naquela fase mista de entre-empregos: uma mistura de férias, sabático e aposentadoria. O que é uma excelente desculpa para eu <em>escrever mais</em> por aqui.</p>

<p>Não sei se alguém ainda</p>]]></description><link>https://blog.fabricio.org/de-volta-a-pista/</link><guid isPermaLink="false">938e1871-0230-499c-82d9-5bddff4747e6</guid><category><![CDATA[social-media]]></category><category><![CDATA[music]]></category><category><![CDATA[rss]]></category><category><![CDATA[falafel]]></category><category><![CDATA[instagram]]></category><category><![CDATA[conceptack]]></category><category><![CDATA[nostr]]></category><category><![CDATA[mail]]></category><category><![CDATA[linkedin]]></category><dc:creator><![CDATA[Fabricio Campos Zuardi]]></dc:creator><pubDate>Thu, 24 Apr 2025 20:51:36 GMT</pubDate><media:content url="http://blog.fabricio.org/content/images/2025/04/andraz-lazic-Wh9ZavMYeIw-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://blog.fabricio.org/content/images/2025/04/andraz-lazic-Wh9ZavMYeIw-unsplash.jpg" alt="De volta à pista"><p>Há umas duas semanas terminou meu contrato com a empresa onde passei meus últimos anos trabalhando <em>full-time</em>. Isto significa que estou naquela fase mista de entre-empregos: uma mistura de férias, sabático e aposentadoria. O que é uma excelente desculpa para eu <em>escrever mais</em> por aqui.</p>

<p>Não sei se alguém ainda lê blogs, ou se em 2025 ainda há quem assine ou saiba o que são RSS feeds (ainda mais fora do contexto de podcasts). Mas o Google bot ainda passa por aqui, e registrar meus pensamentos no ciberespaço é algo que sempre tenho vontade de fazer—especialmente fora dos jardins murados das nossas queridas plataformas (Instagram, LinkedIn, Twitter). Vez por outra, acho que é o correto.</p>

<p>Estes posts para assoprar a poeira do blog são sempre muito parecidos: é impossível prever se a próxima atualização virá amanhã, mês que vem ou daqui a três anos. Aproveito então para deixar alguns links onde você pode me encontrar nesses sites de terceiros:</p>

<ul>
<li><strong>LinkedIn</strong>: <a href="https://www.linkedin.com/in/fabricio">@fabricio</a>
<ul><li><em>#opentowork</em>, aliás—de preferência freelas ou jobs que possam ser disponibilizados como Open Source, relacionados com Bitcoin ou que paguem em Bitcoin, Euro ou Dólar.</li>
<li>Tenho uma newsletter por lá chamada <a href="https://www.linkedin.com/newsletters/7046943686747664384/">Trombeta Plebéia</a>, que eu deveria repostar aqui, mas sempre esqueço.
<ul><li>E também um <a href="https://t.me/trombetaplebeia">grupo de Telegram</a> de "links candidatos", onde posto links que podem ou não terminar no boletim.</li></ul></li></ul></li>
<li><strong>Instagram</strong>: <a href="https://www.instagram.com/concept.ack/">@concept.ack</a>
<ul><li>Tenho uma conta privada também, mas é fechada. Este perfil público é do meu projeto artístico-musical <a href="https://conceptack.com">Concept ACK</a>.</li></ul></li>
<li><strong>Twitter</strong>: <a href="https://twitter.com/fczuardi">@fczuardi</a>
<ul><li>Usando cada vez menos, tentando desmamar e utilizar mais o <a href="https://blog.fabricio.org/nostr/">Nostr</a>.</li></ul></li>
<li><strong>Nostr</strong>: <a href="https://primal.net/p/npub1qe066sd43fjyudqesjsdh5p7k88cafprldvmafqd9zvnd7j27m0sxhwxvr">npub1qe066sd43fjyudqesjsdh5p7k88cafprldvmafqd9zvnd7j27m0sxhwxvr</a></li>
<li><strong>Mailing List</strong>: Tenho uma <a href="https://groups.io/g/falafel">lista de e-mails</a> bastante secreta, vazia e abandonada, que utilizei para escrever sobre um programa de incentivo para financiar programadores open source (o Falafel Fellows). Pretendo reativá-la e voltar a escrever sobre isso em breve—quem sabe? Já enviei por lá alguns textos curtos (cartas) e posso voltar a fazê-lo.</li>
</ul>

<p>Também voltei ao Slack do <a href="https://opensanca.com.br/">Open Sanca</a> e estou empolgado para levar um evento de Bitcoin para lá. Mais notícias sobre isso em breve também.</p>

<p><small>Photo by <a href="https://unsplash.com/@andrazlazic?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Andraz Lazic</a> on <a href="https://unsplash.com/photos/two-men-typewriting-Wh9ZavMYeIw?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Unsplash</a> <br>
      </small></p>]]></content:encoded></item><item><title><![CDATA[Compartilhar gravações de tela na nuvem]]></title><description><![CDATA[<p><strong>Gravar a tela</strong> é uma necessidade tão comum que muitos sistemas operacionais incluem atalhos e
ferramentas para isso por padrão. Quando essa necessidade surge, normalmente não é apenas para guardarmos um registro localmente, mas sim para <strong>demonstrar algo para outras pessoas</strong>.</p>

<p>Isto leva a um segundo trabalho: o de fazer</p>]]></description><link>https://blog.fabricio.org/captura-de-tela/</link><guid isPermaLink="false">1e1087da-43e1-406d-9ec0-69cbe0faa606</guid><dc:creator><![CDATA[Fabricio Campos Zuardi]]></dc:creator><pubDate>Mon, 02 Sep 2024 18:45:35 GMT</pubDate><content:encoded><![CDATA[<p><strong>Gravar a tela</strong> é uma necessidade tão comum que muitos sistemas operacionais incluem atalhos e
ferramentas para isso por padrão. Quando essa necessidade surge, normalmente não é apenas para guardarmos um registro localmente, mas sim para <strong>demonstrar algo para outras pessoas</strong>.</p>

<p>Isto leva a um segundo trabalho: o de fazer o upload para algum lugar e depois compartilhar o endereço de onde o vídeo foi armazenado.</p>

<p>Recentemente fui apresentado a uma ferramenta <strong>simples</strong> chamada <a href="https://github.com/goshops-com/clipshare">Clipshare</a>, que é multiplataforma, é <strong>software livre</strong>, e que junta estas duas funcionalidades: grava e já sobe para a nuvem. Abaixo vai um guia rápido de como instalar e configurar ela.</p>

<h2 id="download">Download</h2>

<p>O executável do Clipshare pode ser baixado na página de <a href="https://github.com/goshops-com/clipshare/releases">Releases</a>. Aqui está o link para a versão 1.0.0: <a href="https://github.com/goshops-com/clipshare/releases/tag/v1.0.0">https://github.com/goshops-com/clipshare/releases/tag/v1.0.0</a></p>

<p>A seção "Assets" contém os links para as diferentes plataformas (Windows, Mac, Linux).</p>

<h3 id="configuraoinicial">Configuração inicial</h3>

<p>Esta ferramenta funciona com qualquer provedor de armazenamento em nuvem que ofereça uma API compatível com S3, neste exemplo vou usar a nuvem da <a href="https://console.magalu.cloud">Magalu Cloud</a> como exemplo, onde criei um <strong>"bucket"</strong> de nome <code>fcz-clipshare-demo-2024</code> na região <strong>Nordeste 1</strong> (<code>br-ne1</code>). Criei um arquivo de texto de nome <code>.env</code> com o seguinte conteúdo:</p>

<pre><code>ACCESS_KEY=MINHA_ACCESS_KEY_AQUI  
ACCESS_SECRET=MINHA_ACCESS_SECRET_AQUI  
ENDPOINT=https://br-ne1.magaluobjects.com/  
REGION=br-ne1  
BUCKET_NAME=fcz-clipshare-demo-2024  
ACL=private  
PRESIGN_URL=true  
PRESIGN_URL_EXPIRY=86400  
</code></pre>

<p><strong>Importante</strong>: Troque os valores de <code>ACCESS_KEY</code>, <code>ACCESS_SECRET</code> e <code>BUCKET_NAME</code> para os da sua conta.</p>

<p>Neste exemplo de configuração acima, eu escolhi subir os vídeos para um bucket <strong>privado</strong> (<code>ACL=private</code>), porém disponibilizando <strong>links de acesso temporários</strong> (<code>PRESIGN_URL=true</code>) válidos pelo tempo de <strong>1 dia</strong> (<code>PRESIGN_URL_EXPIRY=86400</code> segundos). Uma descrição mais detalhada de cada opção pode ser encontrada na <a href="https://github.com/goshops-com/clipshare/blob/main/README.md">página do projeto</a>.</p>

<h3 id="rodandooprograma">Rodando o programa</h3>

<p>Para lançar o programa, no Linux, utilizando as variáveis de ambiente do arquivo .env eu utilizo o seguinte comando:</p>

<pre><code>env $(cat .env | xargs) ~/Downloads/clipshare-1.0.0.AppImage  
</code></pre>

<p>Se tudo der certo um novo ícone aparecerá na barra de tarefas do computador. Clicando nele, você terá acesso às opções de escolher o microfone e câmera, caso necessário, além de iniciar/parar a gravação.</p>

<p><img src="https://blog.fabricio.org/content/images/2024/08/Screenshot-from-2024-08-30-14-48-04.png" alt=""></p>

<p>Ao fim da gravação, o vídeo será enviado para o bucket e um navegador vai abrir o endereço temporário <br>
do vídeo, dali basta copiar este endereço da barra de localização e compartilhar.</p>

<h3 id="depoisdecompartilhado">Depois de compartilhado</h3>

<p>Os vídeos gerados ficam no seu bucket até segunda ordem, mesmo que o link temporário de acesso tenha expirado. Isto pode ser útil caso você precise fazer o download de algum deles no futuro, mover para outras hospedagens, ou trocar de classe de armazenamento para economizar dinheiro. Esta ferramenta simples não cuida de nenhum processo de limpeza regular, tenha isto em mente.</p>

<p>Para remover um bucket da nuvem por completo, com todos os arquivos nele armazenados, você pode usar o <a href="https://rclone.org/commands/rclone_purge/">comando purge da ferramenta rclone</a>. Ou o <a href="https://docs.aws.amazon.com/cli/latest/reference/s3/rm.html">comando rm da aws cli com a opção --recursive</a></p>

<p>Caso prefira apenas mudar a classe de armazenamento dos vídeos já compartilhados após serem vistos, siga <a href="http://docs.magalu.cloud/docs/object-storage/how-to/cold-storage#modificar-a-classe-de-armazenamento-de-um-objeto-de-standard-para-cold_instant">este outro documento</a>.</p>

<h2 id="remixe">Remixe</h2>

<p>Se achou parte deste artigo útil, por favor replique, este texto está licenciado sob a <a href="https://creativecommons.org/licenses/by/4.0/deed.pt">Creative Commons Atribuição 4.0</a>.</p>]]></content:encoded></item><item><title><![CDATA[Object Storage na Magalu Cloud com Terraform]]></title><description><![CDATA[<p><small><strong>[Update 5 de Junho]</strong> este tutorial foi adaptado e publicado na <a href="https://docs.magalu.cloud/docs/object-storage/tutorials/tofu/">documentação oficial da Magalu Cloud</a>!</small></p>

<h2 id="infraestruturacomocdigo">Infraestrutura como Código</h2>

<p><a href="https://pt.wikipedia.org/wiki/Infraestrutura_como_C%C3%B3digo">Infraestrutura como código</a> (<a href="https://en.wikipedia.org/wiki/Infrastructure_as_code">IaC</a>) é o nome dado a prática de utilizar arquivos de configuração em repositórios de código para descrever a infraestrutura de recursos computacionais (servidores, redes, armazenamento, bancos de</p>]]></description><link>https://blog.fabricio.org/magalu-s3-terraform/</link><guid isPermaLink="false">46d0a3a2-9ea2-439c-ba58-c735cb750737</guid><category><![CDATA[cloud]]></category><category><![CDATA[terraform]]></category><category><![CDATA[opentofu]]></category><category><![CDATA[s3]]></category><category><![CDATA[object storage]]></category><category><![CDATA[magalu cloud]]></category><dc:creator><![CDATA[Fabricio Campos Zuardi]]></dc:creator><pubDate>Thu, 23 May 2024 17:11:00 GMT</pubDate><media:content url="http://blog.fabricio.org/content/images/2024/05/3122542562_59d249b293_c.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://blog.fabricio.org/content/images/2024/05/3122542562_59d249b293_c.jpg" alt="Object Storage na Magalu Cloud com Terraform"><p><small><strong>[Update 5 de Junho]</strong> este tutorial foi adaptado e publicado na <a href="https://docs.magalu.cloud/docs/object-storage/tutorials/tofu/">documentação oficial da Magalu Cloud</a>!</small></p>

<h2 id="infraestruturacomocdigo">Infraestrutura como Código</h2>

<p><a href="https://pt.wikipedia.org/wiki/Infraestrutura_como_C%C3%B3digo">Infraestrutura como código</a> (<a href="https://en.wikipedia.org/wiki/Infrastructure_as_code">IaC</a>) é o nome dado a prática de utilizar arquivos de configuração em repositórios de código para descrever a infraestrutura de recursos computacionais (servidores, redes, armazenamento, bancos de dados, acessos, DNS, etc).</p>

<p>É comum em empresas que consomem serviços de nuvem o uso da ferramenta <a href="https://www.terraform.io/">Terraform</a> para organizar 
 configurações de infraestrutura e para automatizar os provisionamentos dela.</p>

<h2 id="osurgimentodaluvem">O surgimento da Lu-vem</h2>

<p>Por aqui, temos uma nova nuvem em construção, a <a href="https://magalu.cloud/">MagaluCloud</a>, que é também a empresa onde eu atualmente trabalho. É um projeto ambicioso, uma nova cloud pública, com duas regiões no Brasil, com suporte em português, preços em Reais e com muita gente boa no time.</p>

<p>Um dos primeiros produtos oferecidos por esta nuvem é o de <a href="https://magalu.cloud/object-storage/">Object Storage</a>, que é uma solução escalável para armazenamento de dados compatível com o padrão <a href="https://aws.amazon.com/pt/s3/">AWS S3</a> da Amazon.</p>

<h2 id="opentofus3magalucloud">OpenTofu + S3 + Magalu Cloud</h2>

<p>Abaixo segue um pequeno tutorial de como utilizar o <a href="https://opentofu.org/">OpenTofu</a>, que é uma alternativa livre ao Terraform, para a criação e gerenciamento de recursos de Object Storage.</p>

<h3 id="prrequisitos">Pérrequisitos</h3>

<p>Este tutorial assume que você tenha:</p>

<ul>
<li>uma conta da Magalu com acesso ao <a href="https://console.magalu.cloud">console da nuvem</a></li>
<li>um sistema Linux (exemplo: <a href="https://ubuntu.com/desktop">Ubuntu</a>)</li>
<li>a ferramenta <a href="https://opentofu.org/">OpenTofu</a> numa versão igual ou superior a <code>v1.7.1</code></li>
</ul>

<h3 id="projetoemduloraz">Projeto e Módulo Raíz</h3>

<p>Vamos começar criando uma pasta para nosso projeto e um módulo de configuração raíz:</p>

<pre><code class="language-shell">mkdir tutorial-tofu  
cd tutorial-tofu  
echo "terraform {}" &gt; main.tf  
tofu validate  
</code></pre>

<p>Apesar de válida, esta configuração raíz está vazia. Módulos de Terraform utilizam plugins chamados de <a href="https://opentofu.org/docs/language/providers/">Providers</a> que são extensões instaláveis que permitem o uso de diferentes produtos de diferentes nuvens.</p>

<p>Para este tutorial, vamos utilizar o provider <a href="https://registry.terraform.io/providers/hashicorp/aws/latest">hashicorp/aws</a> (licença <a href="https://github.com/hashicorp/terraform-provider-aws/blob/main/LICENSE">MPL v2.0</a>), que habilita o uso de fornecedores de Object Storage compatíveis com o padrão S3. Para isto vamos aumentar nosso <code>main.tf</code> para ficar assim:</p>

<pre><code class="language-terraform"># main.tf

terraform {  
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "5.50.0"
    }
  }
}

provider "aws" {  
  # Configuration options
}
</code></pre>

<p>E utilizar o comando abaixo para instalar este plugin:</p>

<pre><code class="language-shell">tofu init  
</code></pre>

<p>Voltaremos na linha comentada acima após criarmos um "profile aws" com credenciais de acesso no passo a seguir.</p>

<h3 id="configuraodascredenciais">Configuração das credenciais</h3>

<p>Por ser compatível com S3, o Object Storage da nuvem da Magalu funciona também com autenticação por API Key, no console você pode criar uma chave destas indo em <a href="https://console.magalu.cloud/object-storage?tab=1">Início > Object Storage > API Key</a>, botão "<a href="https://console.magalu.cloud/object-storage/api-keys/new">Criar API Key</a>"</p>

<p><img src="https://blog.fabricio.org/content/images/2024/05/Screenshot-from-2024-05-24-06-17-20.png" alt="Object Storage na Magalu Cloud com Terraform"></p>

<p>Esta chave possui duas informações importantes para serem configuradas na sua máquina: <strong>ID</strong> e <strong>Secret</strong>. Para este tutorial, vamos declarar estas variáveis num arquivo de configuração de perfis da aws, que deve estar localizado no caminho <code>~/.aws/credentials</code>, vamos dar o nome deste perfil de <code>tutorial-tofu</code>, substitua os textos em caixa alta <code>COLE_AQUI_O...</code> no exemplo abaixo pelo conteúdo do ID e do SECRET da chave recém criada:</p>

<p><img src="https://blog.fabricio.org/content/images/2024/05/Screenshot-from-2024-05-23-15-17-19.png" alt="Object Storage na Magalu Cloud com Terraform"></p>

<pre><code class="language-shell">mkdir -p ~/.aws  
cat &lt;&lt; EOF &gt;&gt; ~/.aws/credentials  
[tutorial-tofu]
aws_access_key_id = COLE_AQUI_O_ID  
aws_secret_access_key = COLE_AQUI_O_SECRET

EOF  
</code></pre>

<p>O padrão destes perfis de aws é utilizar a nuvem da Amazon. Para funcionar com a nuvem da Magalu, é preciso mudar os campos <code>endpoint_url</code> e <code>region</code>, neste exemplo vou utilizar a região "Brasil - Nordeste 1", a <code>br-ne1</code>:</p>

<pre><code class="language-shell">cat &lt;&lt; EOF &gt;&gt; ~/.aws/config  
[profile tutorial-tofu]
endpoint_url = https://br-ne1.magaluobjects.com/  
region = br-ne1

EOF  
</code></pre>

<p>Se tudo deu certo, podemos voltar ao módulo raíz do nosso projeto e incluir este nome de perfil como o campo <code>profile</code> do bloco que configura o provider <code>aws</code>:</p>

<pre><code class="language-terraform">provider "aws" {  
  profile                     = "tutorial-tofu"
  skip_region_validation      = true
  skip_requesting_account_id  = true
  skip_credentials_validation = true
}
</code></pre>

<p><small>(este alinhamento dos sinais de igual é culpa do <code>tofu fmt</code>, não me xinguem)</small></p>

<p>Estes outros três atributos (skip isto, skip aquilo, skip aquilo outro) serão necessários também para o nosso caso, detalhes sobre cada um deles podem ser consultados na <a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs#skip_credentials_validation">documentação do plugin</a>.</p>

<h3 id="primeirobucket">Primeiro Bucket</h3>

<p>Finalmente, podemos criar o primeiro recurso de nossa infraestrutura: um bucket para armazenarmos objetos dentro, vamos criar um novo módulo de configuração, um arquivo: <code>resources.tf</code></p>

<pre><code class="language-terraform"># resources.tf

resource "aws_s3_bucket" "first_bucket" {  
  bucket_prefix = "tutorial-bucket"
}
</code></pre>

<blockquote>
  <p><strong>Nota</strong>: Utilizei o campo <code>bucket_prefix</code> ao invés do campo <code>bucket</code> para nomear nosso primeiro contêiner pois, assim como na AWS, os nomes de buckets na Magalu Cloud também são globais e devem ser únicos, portanto ao invés de inventar um nome único, forneci só um prefixo e deixei para o provider a tarefa de preencher o resto do nome com um numero aleatório único.</p>
</blockquote>

<p>Neste ponto, já podemos utilizar o comando <code>tofu plan</code> para planejar o provisionamento:</p>

<pre><code class="language-shell">tofu plan  
</code></pre>

<p>Este comando lista as mudanças nos recursos que serão necessárias para refletir o estado final descrito nas  configurações declarativas do projeto. No nosso caso, ele listará a criação de um bucket: "<code># aws_s3_bucket.first_bucket will be created</code>"</p>

<p>E posteriormente aplicar este plano:</p>

<pre><code class="language-shell">tofu apply -compact-warnings  
</code></pre>

<p>Ele vai exibir o plano novamente e pedir para você digitar <code>yes</code>.</p>

<p>Se tudo der certo este processo deve terminar com uma mensagem parecida com esta:</p>

<pre><code class="language-shell">Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
</code></pre>

<p>O estado deste novo recurso pode ser consultado com os comandos <code>tofu state list</code> e <code>tofu state show</code></p>

<p>A criação deste bucket pode ser verificada também pela listagem do console via navegador:</p>

<p><img src="https://blog.fabricio.org/content/images/2024/05/Screenshot-from-2024-05-23-17-39-05.png" alt="Object Storage na Magalu Cloud com Terraform"></p>

<p>Lembre-se de mudar a região para "Brasil -Nordeste 1" caso seu console esteja em outra região:</p>

<p><img src="https://blog.fabricio.org/content/images/2024/05/Screenshot-from-2024-05-23-17-40-19.png" alt="Object Storage na Magalu Cloud com Terraform"></p>

<h2 id="maisrecursosobjetos">Mais recursos: objetos</h2>

<p>Agora que temos um resource do tipo <code>aws_s3_bucket</code> criado, vamos utilizar um resource do tipo <code>aws_s3_object</code> para adicionar dois arquivos dentro deste bucket:</p>

<pre><code class="language-terraform"># resources.tf

resource "aws_s3_bucket" "first_bucket" {  
  bucket_prefix = "tutorial-bucket"
}

resource "aws_s3_object" "first_bucket_objects" {  
  for_each = tomap({
    file1 = "./main.tf"
    file2 = "./resources.tf"
  })
  bucket = aws_s3_bucket.first_bucket.id
  key    = each.value
  source = each.value
}
</code></pre>

<p>Um <code>tofu plan</code> vai nos dizer:</p>

<pre><code>Plan: 2 to add, 0 to change, 0 to destroy.  
</code></pre>

<p>E o posterior <code>tofu apply</code>:</p>

<pre><code>Apply complete! Resources: 2 added, 0 changed, 0 destroyed.  
</code></pre>

<p>Pronto, os dois arquivos estão na nuvem. Um <code>tofu state list</code> deve mostrar agora 3 resources:</p>

<pre><code>$ tofu state list
aws_s3_bucket.first_bucket  
aws_s3_object.first_bucket_objects["file1"]  
aws_s3_object.first_bucket_objects["file2"]  
</code></pre>

<p>State do segundo object:</p>

<pre><code>$ tofu state show 'aws_s3_object.first_bucket_objects["file2"]'
# aws_s3_object.first_bucket_objects["file2"]:
resource "aws_s3_object" "first_bucket_objects" {  
    arn                = "arn::s3:::tutorial-bucket20240523203657781600000001/resources.tf"
    bucket             = "tutorial-bucket20240523203657781600000001"
    bucket_key_enabled = false
    content_type       = "application/octet-stream"
    etag               = "01d689431df57be26625e8fb41ac04d2"
    force_destroy      = false
    id                 = "./resources.tf"
    key                = "./resources.tf"
    source             = "./resources.tf"
    storage_class      = "STANDARD"
    tags_all           = {}
}
</code></pre>

<h3 id="desprovisionandotudo">Desprovisionando Tudo</h3>

<p>Tão importante como saber criar coisas na nuvem, é saber como limpar tudo para no fim do mês não receber uma surpresa na conta do cartão de crédito. Este tutorial não estaria completo se não ensinasse como apagar estes recursos todos, por mais baratos que sejam:</p>

<pre><code>tofu destroy  
</code></pre>

<pre><code>Destroy complete! Resources: 3 destroyed.  
</code></pre>

<h3 id="configuraoeestado">Configuração e Estado</h3>

<p>Como visto acima, o comando <code>tofu state</code> tem funções para mostrar o que o sistema sabe sobre a instalação real da infraestrutura descrita no código dos módulos de configuração. Ter a declaração em arquivos de como as máquinas deveriam estar e saber como elas de fato estão são duas coisas diferentes, esta segunda parte é o "state", o estado da instalação.</p>

<p>Na minha config eu declarei que a instalação tinha que ter um bucket com um certo prefixo no nome e dois objetos dentro, com o caminho dos arquivos locais para cada objeto.</p>

<p>O estado vai ter bem mais informação que isto, como por exemplo o nome completo que o bucket recebeu, as etags de cada objeto e vários outros detalhes.</p>

<p>Um <code>ls</code> no diretório do projeto vai mostrar a existência de dois arquivos gerados que descrevem o estado atual e o estado anterior da minha instalação:</p>

<pre><code class="language-shell">terraform.tfstate  terraform.tfstate.backup  
</code></pre>

<p>Um <code>less</code> no arquivo atual, depois do destroy, vai mostrar que o estado atual não possui nenhum recurso por exemplo:</p>

<pre><code class="language-shell">$ less -F terraform.tfstate
{
  "version": 4,
  "terraform_version": "1.7.1",
  "serial": 7,
  "lineage": "51390cb1-af8e-d82b-99d6-1bb5da876657",
  "outputs": {},
  "resources": [],
  "check_results": null
}
</code></pre>

<h3 id="compartilhandooestadocomotime">Compartilhando o estado com o time</h3>

<p>Num cenário onde várias pessoas vão trabalhar na mesma infra, ter as configs e este estado apenas local na máquina de quem executou o plano por último não é o ideal. Ao mesmo tempo, <a href="https://developer.hashicorp.com/terraform/language/state/sensitive-data">por conter informações sensíveis</a>, não é recomendado colocar os arquivos <code>tfstate.*</code> num repositório git, especialmente se este repositório for público.</p>

<p>Uma possível saída para coordenar este trabalho em grupo e compartilhar de maneira privada o estado da instalação, é usar a funcionalidade de <a href="https://opentofu.org/docs/language/state/remote/">estado remoto</a>, que suporta várias opções de onde armazenar este estado, implementados por diferentes <a href="https://opentofu.org/docs/language/settings/backends/configuration/">backends</a>.</p>

<p>Vamos então finalizar este tutorial com um exemplo de como configurar o OpenTofu para armazenar o estado remotamente num bucket de S3 da Magalu Clloud, utilizando o backend "<a href="https://opentofu.org/docs/language/settings/backends/s3/">s3</a>".</p>

<p>Primeiro, vamos criar um bucket novo só para isto, num arquivo novo <code>state-bucket.ft</code>:</p>

<pre><code class="language-terraform"># state-bucket.tf

resource "aws_s3_bucket" "state_bucket" {  
  bucket_prefix = "tutorial-state-bucket"
}
</code></pre>

<pre><code class="language-shell">tofu apply  
</code></pre>

<p>Agora vamos exibir na tela o nome do bucket gerado para copiar e usar na config do backend depois:</p>

<pre><code>tofu state show aws_s3_bucket.state_bucket  
</code></pre>

<p>E finalmente, de volta no <code>main.tf</code> adicionamos este bloco <code>backend "s3"</code> ao bloco <code>terraform</code> </p>

<pre><code># main.tf

terraform {  
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "5.50.0"
    }
  }

  backend "s3" {
    bucket                      = "NOME_DO_SEU_BUCKET_DE_STATE_AQUI"
    key                         = "the_state"
    region                      = "br-ne1"
    profile                     = "tutorial-tofu"
    skip_region_validation      = true
    skip_requesting_account_id  = true
    skip_credentials_validation = true
    skip_s3_checksum            = true
  }
}

provider "aws" {  
  profile                     = "tutorial-tofu"
  skip_region_validation      = true
  skip_requesting_account_id  = true
  skip_credentials_validation = true
}
</code></pre>

<p>E para instalar o backend:</p>

<pre><code>tofu init  
</code></pre>

<blockquote>
  <p><strong>Nota</strong> num cenário mais real talvez o bucket de state não viveria no mesmo projeto, ou teria alguma prevenção tipo   <code>lifecycle { prevent_destroy = true  }</code>, ou seria criado manualmente. Eu criei junto aqui apenas para facilitar o tutorial.</p>
</blockquote>

<h3 id="consideraesfinais">Considerações finais</h3>

<p>IaC e OpenTofu podem ajudar na organização e manutenção de sistemas na nuvem.</p>

<p>Esta introdução, apesar de ser na cloud da Magalu, utilizou um provider genérico de S3, optei por fazer assim para demonstrar compatibilidade, porém existe um <a href="https://registry.terraform.io/providers/MagaluCloud/mgc/latest">provider  de Terraform da MagaluCloud</a>, que inclui outros recursos, como máquinas virtuais por exemplo, documentação <a href="https://docs.magalu.cloud/docs/terraform/overview">aqui</a>.</p>

<p>O tema é vasto, e eu não sou nenhum expert no assunto, escrevi este texto por estar também conhecendo este mundo. Se houver demanda posso continuar esta série, <a href="https://terragrunt.gruntwork.io/">Terragrunt</a> por exemplo é uma ferramenta que eu já ouvi falar mas nunca testei pessoalmente.</p>

<h2 id="remixe">Remixe</h2>

<p>Se achou parte deste artigo útil, por favor replique, este texto está licenciado sob a <a href="https://creativecommons.org/licenses/by/4.0/deed.pt">Creative Commons Atribuição 4.0</a>.</p>

<hr>

<p><small>Foto do cabeçalho: <br>
<a href="https://flic.kr/p/5KVR7J">Homemade Tofu - Cocoro Cafe, QVM AUD10 set</a> by <a href="https://www.flickr.com/photos/avlxyz/">Alpha</a>, on Flickr</small></p>]]></content:encoded></item><item><title><![CDATA[Notas e Outros Sucedidos Transmitidos por Relés]]></title><description><![CDATA[<p>Sexta feira passada montei uma breve introdução sobre o protocolo <a href="https://github.com/nostr-protocol/nostr">nostr</a>, aqui vai a gravação:</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/sM8ikVOH_9k" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

<p><a href="https://youtu.be/sM8ikVOH_9k">https://youtu.be/sM8ikVOH_9k</a></p>

<p>Foto do cabeçalho: <a href="https://unsplash.com/@dpreacherdawn?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Dawn McDonald</a> on <a href="https://unsplash.com/s/photos/ostrich?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>]]></description><link>https://blog.fabricio.org/nostr/</link><guid isPermaLink="false">0653cd1b-88e3-47f9-8dd8-a3fafc4f2d06</guid><category><![CDATA[bitcoin]]></category><category><![CDATA[liberdade]]></category><category><![CDATA[freedom]]></category><category><![CDATA[social-media]]></category><category><![CDATA[self-soverein-identity]]></category><category><![CDATA[autonomia]]></category><category><![CDATA[soberania]]></category><category><![CDATA[openweb]]></category><dc:creator><![CDATA[Fabricio Campos Zuardi]]></dc:creator><pubDate>Fri, 17 Mar 2023 02:18:59 GMT</pubDate><media:content url="http://blog.fabricio.org/content/images/2023/01/dawn-mcdonald-OFkc44-12kw-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://blog.fabricio.org/content/images/2023/01/dawn-mcdonald-OFkc44-12kw-unsplash.jpg" alt="Notas e Outros Sucedidos Transmitidos por Relés"><p>Sexta feira passada montei uma breve introdução sobre o protocolo <a href="https://github.com/nostr-protocol/nostr">nostr</a>, aqui vai a gravação:</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/sM8ikVOH_9k" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

<p><a href="https://youtu.be/sM8ikVOH_9k">https://youtu.be/sM8ikVOH_9k</a></p>

<p>Foto do cabeçalho: <a href="https://unsplash.com/@dpreacherdawn?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Dawn McDonald</a> on <a href="https://unsplash.com/s/photos/ostrich?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>]]></content:encoded></item><item><title><![CDATA[Micro frontends em 2023, Parte II: Module Federation e NextJS]]></title><description><![CDATA[<p>Esta é a segunda parte de uma série, leia também a parte I em: <a href="https://blog.fabricio.org/p/02923977-03af-42a7-a520-f86ffe968a3d/">Micro frontends em 2023, parte I: Quando usar?</a></p>

<h2 id="opesdeimplementao">Opções de implementação</h2>

<p>São muitas as implementações possíveis: pacotes npm compartilhados entre projetos; <em>ESModules</em> via <em>tag</em> <em>script</em>, <em>iframe</em>, <em>importmaps</em>, <em>web components</em>, <em>url rewriting</em>, <em>NextJS Multi Zones</em>, etc. Mas</p>]]></description><link>https://blog.fabricio.org/micro-frontends-em-2023-2/</link><guid isPermaLink="false">19f0db3e-2660-4fc3-8af9-624ee7871be4</guid><dc:creator><![CDATA[Fabricio Campos Zuardi]]></dc:creator><pubDate>Mon, 23 Jan 2023 15:48:03 GMT</pubDate><media:content url="http://blog.fabricio.org/content/images/2023/01/steve-harvey-fw3gyWK00Kc-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://blog.fabricio.org/content/images/2023/01/steve-harvey-fw3gyWK00Kc-unsplash.jpg" alt="Micro frontends em 2023, Parte II: Module Federation e NextJS"><p>Esta é a segunda parte de uma série, leia também a parte I em: <a href="https://blog.fabricio.org/p/02923977-03af-42a7-a520-f86ffe968a3d/">Micro frontends em 2023, parte I: Quando usar?</a></p>

<h2 id="opesdeimplementao">Opções de implementação</h2>

<p>São muitas as implementações possíveis: pacotes npm compartilhados entre projetos; <em>ESModules</em> via <em>tag</em> <em>script</em>, <em>iframe</em>, <em>importmaps</em>, <em>web components</em>, <em>url rewriting</em>, <em>NextJS Multi Zones</em>, etc. Mas neste primeiro guia vou documentar uma delas em específico: <a href="https://webpack.js.org/concepts/module-federation/">webpack module federation</a>.</p>

<h2 id="passoapassocomdoisprojetosnextjs">Passo-a-passo com dois projetos NextJS</h2>

<p>Vamos montar o seguinte exemplo, um <span style="color:darkorange">site base</span> principal (o hospedeiro, o <em>host</em>, o <em>app shell</em>, a <em>container application</em>) representada abaixo na cor laranja (app1), com um <span style="color:darkviolet">mini-app</span> remoto (o módulo, o <em>remote</em>) representada em violeta (app2), embutido dentro, este módulo vem de outro site. Ambos os sites são projetos <a href="https://nextjs.org/">NextJS</a>.</p>

<p><img src="https://blog.fabricio.org/content/images/2023/01/host-remote-2022-11-10-1010-1.png" alt="Micro frontends em 2023, Parte II: Module Federation e NextJS"></p>

<h3 id="1criarosdoisprojetosnextjs">1. Criar os dois projetos NextJS</h3>

<pre><code class="language-bash">npx create-next-app app1  
npx create-next-app app2  
</code></pre>

<h3 id="2instalaropluginmodulefederationnextjsmfeobundlerwebpack5nosdoisprojetos">2. Instalar o plugin @module-federation/nextjs-mf e o bundler webpack 5 nos dois projetos</h3>

<p>Existe um pacote que facilita um pouco a configuração de module federation em projetos Next, o <a href="https://www.npmjs.com/package/@module-federation/nextjs-mf">@module-federation/nextjs-mf</a>. Este plugin já foi proprietário e pago um dia, mas atualmente <a href="https://github.com/module-federation/module-federation-examples/issues/2253">é livre e gratuito</a>. Isto me confundiu muito pois varios resultados do Google e exemplos online ainda usam a referência dele no registry de pacotes fechados PrivJS.</p>

<pre><code class="language-bash">cd app1  
yarn add @module-federation/nextjs-mf webpack  
cd ../app2  
yarn add @module-federation/nextjs-mf webpack  
cd ..  
</code></pre>

<h3 id="3criarummdulonoprojeto2">3. Criar um módulo no projeto 2</h3>

<pre><code class="language-bash">cd app2  
mkdir src/components  
vim -p src/components/ModuleA.tsx src/pages/index.tsx  
</code></pre>

<p><strong>app2/src/components/ModuleA.tsx</strong></p>

<pre><code class="language-tsx">export default function ModuleA() {  
  return &lt;h2 style={{ color: "darkviolet" }}&gt;Módulo A from app2&lt;/h2&gt;;
}
</code></pre>

<p><strong>app2/src/pages/index.tsx</strong></p>

<pre><code class="language-tsx">import ModuleA from '@/components/ModuleA'

export default function Home() {  
  return (
    &lt;ModuleA/&gt;
  )
}
</code></pre>

<p>Para testar suba o servidor de desenvolvimento na porta 3001:</p>

<pre><code class="language-bash">yarn dev -p 3001  
</code></pre>

<p>e acesse <a href="http://localhost:3001/">http://localhost:3001/</a></p>

<p><img src="https://blog.fabricio.org/content/images/2023/01/Screenshot-from-2023-01-22-00-37-15.png" alt="Micro frontends em 2023, Parte II: Module Federation e NextJS"></p>

<h3 id="4configurarabuilddoapp2paraexporumremoteentrycontendoomdulo">4. Configurar a build do app2 para expor um remoteEntry contendo o módulo</h3>

<pre><code class="language-bash">vim next.config.js  
</code></pre>

<p><strong>app2/next.config.js</strong></p>

<pre><code class="language-js">const { NextFederationPlugin } = require("@module-federation/nextjs-mf");

/** @type {import('next').NextConfig} */
const nextConfig = {  
  reactStrictMode: true,
  webpack(config, options) {
    const { isServer } = options;
    config.plugins.push(
      new NextFederationPlugin({
        name: "app2",
        remotes: {},
        filename: "static/chunks/remoteEntry.js",
        exposes: {
          "./ModuleA": "./src/components/ModuleA",
        },
        shared: {},
      })
    );
    return config;
  },
};

module.exports = nextConfig;
</code></pre>

<p>Para testar se o arquivo <code>remoteEntry.js</code> está sendo exposto corretamente suba o servidor de desenvolvimento:</p>

<pre><code class="language-bash">yarn dev -p 3001  
</code></pre>

<p>e acesse <a href="http://localhost:3001/_next/static/chunks/remoteEntry.js">http://localhost:3001/_next/static/chunks/remoteEntry.js</a></p>

<p>Se aparecer um arquivo grande e enigmático, é porque deu certo, pode fazer o bundle de produção e manter este servidor no ar:</p>

<pre><code class="language-bash">yarn build  
yarn start -p 3001  
</code></pre>

<h3 id="5configurarabuilddoapp1parausaromduloremotodoapp2">5. Configurar a build do app1 para usar o módulo remoto do app2</h3>

<p>Em outro terminal:</p>

<pre><code class="language-bash">cd ../app1  
vim -p next.config.js src/pages/index.tsx  
</code></pre>

<p><strong>app1/next.config.js</strong></p>

<pre><code class="language-js">const { NextFederationPlugin } = require('@module-federation/nextjs-mf');

/** @type {import('next').NextConfig} */
const nextConfig = {  
  reactStrictMode: true,
  webpack(config, options) {
    const { isServer } = options;
    config.plugins.push(
      new NextFederationPlugin({
        name: 'app1',
        remotes: {
          app2: `app2@http://localhost:3001/_next/static/${isServer ? 'ssr' : 'chunks'}/remoteEntry.js`,
        },
      })
    );

    return config;
  },
}

module.exports = nextConfig  
</code></pre>

<p><strong>src/pages/index.tsx</strong></p>

<pre><code class="language-tsx">import dynamic from "next/dynamic";  
import styles from "@/styles/Home.module.css";

const ModuleA = dynamic(() =&gt; import("app2/ModuleA"), {  
  ssr: false,
});

export default function Home() {  
  return (
    &lt;&gt;
      &lt;main className={styles.main}&gt;
        &lt;header&gt;App1 Header&lt;/header&gt;
        &lt;nav&gt;
          &lt;h2&gt;App1 Menu&lt;/h2&gt;
        &lt;/nav&gt;
        &lt;ModuleA /&gt;
        &lt;footer&gt;App1 Footer&lt;/footer&gt;
      &lt;/main&gt;
    &lt;/&gt;
  );
}
</code></pre>

<p>suba o servidor do app1 para testar se funcionou:</p>

<pre><code class="language-bash">yarn dev -p 3002  
</code></pre>

<p>e acesse <a href="http://localhost:3002/">http://localhost:3002/</a></p>

<p><img src="https://blog.fabricio.org/content/images/2023/01/Screenshot-from-2023-01-22-00-38-37.png" alt="Micro frontends em 2023, Parte II: Module Federation e NextJS"></p>

<h2 id="repositrio">Repositório</h2>

<p>O código desta demo se encontra em <a href="https://github.com/fczuardi/host-remote-nextjs-mf">https://github.com/fczuardi/host-remote-nextjs-mf</a></p>

<p>Para correções dúvidas e discussões, tanto do código de exemplo quanto desta série de blog posts, use a <a href="https://github.com/fczuardi/host-remote-nextjs-mf/issues">página de issues</a> lá.</p>

<h2 id="prximospassos">Próximos passos</h2>

<p>Este passo a passo foi só uma tentativa de demonstrar um conceito utilizando código, este exemplo foi um bem básico onde a Application Shell consome módulos de outro servidor, mas extender ele para que haja um app3, ou para que o app1 exponha alguns componentes para a app2 são outras possibilidades também. A app principal poderia por exemplo ser a responsável pelos widgets do Design System, ou um MFE só para isto poderia ser outra opção, um módulo para as strings de localização pode dar a chance de updates simples de texto não requererem uma nova build do site todo, agrupar os hooks de consumo de serviço em outro módulo, etc... As fronteiras e os contratos nos pontos de interface entre os módulos vão variar de caso a caso.</p>

<p>Ter uma separação de responsabilidades com espaço para donas diferentes cuidarem de diferentes produtos no mesmo site é um caminho arquitetural que eu sinto que alguns projetos maiores já estão trilhando, então é bom conhecer o conceito e ter no repertório :)</p>

<p>PS: Mas e os <a href="https://samnewman.io/patterns/architectural/bff/">BFFs</a>? Bom, este é um outro assunto para um outro momento, eu acho que na mesma filosofia de dar autonomia para times menores que queiram experimentar com diferentes stacks, trabalhar com unidades separadas pode ser um caminho também, algo como a figura abaixo.</p>

<p><img src="https://blog.fabricio.org/content/images/2023/01/mfe-deployment-units-2022-11-10-1010-1.png" alt="Micro frontends em 2023, Parte II: Module Federation e NextJS"></p>

<h3 id="referncias">Referências</h3>

<p>Alguns outros textos / abas abertas sobre o tema para quem quiser ler mais: <br>
<small></small></p>

<ul>
<li><a href="https://en.wikipedia.org/wiki/Tanenbaum%E2%80%93Torvalds_debate">Tanenbaum–Torvalds debate</a> (Jan 1992)
<ul><li>clássico debate "Linux is Obsolete" entre Tanenbaum e Torvalds, a respeito de microkernel vs monolithc system</li></ul></li>
<li><a href="https://martinfowler.com/articles/microservices.html">Microservices: a definition of this new architectural term</a> (Mar 2014)
<ul><li>bem completo no contexto de microservices, as partes "Organized around Business Capabilities" e "Decentralized Governance" são boas</li></ul></li>
<li><a href="https://twitter.com/derberq/status/910056617881817089">Lukasz Gornicki on Twitter: "@mpjme you still at Spotify? can you confirm if they are still using iframes and postMessage for the micro frontend architecture?" / Twitter</a> (Sep 2017)
<ul><li>MPJ sobre Spotify abandonando microfrontends em favor de um big monorepo para todos</li></ul></li>
<li><a href="https://martinfowler.com/articles/micro-frontends.html">Micro Frontends</a>
<ul><li>texto de onde tirei a definição usada na parte I, lista como benefício a capacidade de incrementalmente atualizar um software legado parte por parte</li></ul></li>
<li><a href="https://speakerdeck.com/squer/micro-frontends-in-the-wild">Micro Frontends in the Wild</a> (Jan 2020)
<ul><li>varios slides bem ilustrativos, como o <a href="https://speakerdeck.com/squer/micro-frontends-in-the-wild?slide=51">51</a>, o <a href="https://speakerdeck.com/squer/micro-frontends-in-the-wild?slide=53">53</a>, o <a href="https://speakerdeck.com/squer/micro-frontends-in-the-wild?slide=49">49</a>, o <a href="https://speakerdeck.com/squer/micro-frontends-in-the-wild?slide=8">8</a> e o <a href="https://speakerdeck.com/squer/micro-frontends-in-the-wild?slide=5">5</a></li></ul></li>
<li><a href="https://medium.com/swlh/webpack-5-module-federation-a-game-changer-to-javascript-architecture-bcdd30e02669">Webpack 5 Module Federation: A game-changer in JavaScript architecture</a> (Mar 2020)
<ul><li>post do maintainer do plugin para next usado no passo a passo (e criador do module federation do Webpack), esta mesma pessoa trabalha numa <a href="https://app.medusa.codes/">ferramenta</a> comercial voltada a module federation e <a href="https://twitter.com/scriptedalchemy">twitta bastante</a> sobre estes temas</li></ul></li>
<li><a href="https://medium.com/frontend-at-scale/an-introduction-to-micro-frontends-1a43edb4c38e">Frontend Architectural Patterns: Micro Frontends</a> (Sep 2020)
<ul><li>tem um <a href="https://miro.medium.com/max/720/1*Je29xvH6eIwO1Bqa1mtpew.webp">meme legal</a></li></ul></li>
<li><a href="https://www.cuelogic.com/blog/micro-frontends-part1">Micro Frontends – Revolutionizing Front-end Development with Microservices</a> (Nov 2020)
<ul><li>fala da divisão por business domain e tem <a href="https://www.cuelogic.com/wp-content/uploads/2020/11/01-Gif-768x432.gif.webp">um diagrama que vale por mil palavras</a></li></ul></li>
<li><a href="https://www.mercedes-benz.io/2023/01/05/you-might-not-need-module-federation-orchestrate-your-microfrontends-at-runtime-with-import-maps/">You Might Not Need Module Federation: Orchestrate your Microfrontends at Runtime with Import Maps</a> (Jan 2023)
<ul><li>fala sobre usar Import Maps ao invés de Webpack Module Federation
</li></ul></li>
</ul>

<p><small> <br>
Foto do cabeçalho <a href="https://unsplash.com/@trommelkopf?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Steve Harvey</a> on <a href="https://unsplash.com/photos/fw3gyWK00Kc?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a> <br>
  </small></p>]]></content:encoded></item><item><title><![CDATA[Micro frontends em 2023, parte I: Quando usar?]]></title><description><![CDATA[<h2 id="aviso">Aviso</h2>

<p><em>Este é um texto em duas partes com um pouco das minhas descobertas sobre implantação da arquitetura de micro frontends, num contexto de aplicações <a href="https://pt-br.reactjs.org/">React</a> embutidas em um aplicação maior (um host, uma application-shell) feita usando <a href="https://nextjs.org/">NextJS</a>, em Janeiro de 2023</em>. Se a frase anterior soa grego para você,</p>]]></description><link>https://blog.fabricio.org/micro-frontends-em-2023/</link><guid isPermaLink="false">02923977-03af-42a7-a520-f86ffe968a3d</guid><category><![CDATA[react]]></category><category><![CDATA[frontend]]></category><category><![CDATA[microfrontend]]></category><category><![CDATA[teams]]></category><category><![CDATA[code]]></category><category><![CDATA[architecture]]></category><category><![CDATA[nextjs]]></category><dc:creator><![CDATA[Fabricio Campos Zuardi]]></dc:creator><pubDate>Sun, 22 Jan 2023 21:33:00 GMT</pubDate><media:content url="http://blog.fabricio.org/content/images/2023/01/steve-harvey-xWiXi6wRLGo-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<h2 id="aviso">Aviso</h2>

<img src="http://blog.fabricio.org/content/images/2023/01/steve-harvey-xWiXi6wRLGo-unsplash.jpg" alt="Micro frontends em 2023, parte I: Quando usar?"><p><em>Este é um texto em duas partes com um pouco das minhas descobertas sobre implantação da arquitetura de micro frontends, num contexto de aplicações <a href="https://pt-br.reactjs.org/">React</a> embutidas em um aplicação maior (um host, uma application-shell) feita usando <a href="https://nextjs.org/">NextJS</a>, em Janeiro de 2023</em>. Se a frase anterior soa grego para você, pule esta postagem e a próxima. Em breve voltaremos à programação normal do blog :)</p>

<h2 id="oqu">O quê?</h2>

<p>Uma definição de micro frontend curta e em Inglês, copiada de um <a href="https://martinfowler.com/articles/micro-frontends.html">outro artigo bem completo</a> sobre o tema:</p>

<blockquote>
  <p>"An architectural style where independently deliverable frontend applications are composed into a greater whole"
  -- Cam Jackson (19 de Junho de 2019)</p>
</blockquote>

<h2 id="porqu">Por quê?</h2>

<p>Neste primeiro texto da série, convém começar tentando responder às perguntas: Para que alguém usaria uma arquitetura de micro frontends? Qual problema esta estratégia busca solucionar?</p>

<h2 id="modularizaoetimesverticais">Modularização e times verticais</h2>

<p>Para mim, falando de código, este modelo ataca o problema da divisão de responsabilidades, o problema da separação de escopos. Por meio da modularização, dividindo um sistema grande em pedaços(módulos) menores que sejam mais independentes, mais simples de entender, mais fáceis de manter e de testar isoladamente.</p>

<p>Outra face deste mesmo tema é a da colaboração entre pessoas. A divisão das responsabilidades não só a nível de tecnologias, mas a nível de <em>business domain</em> (domínios/áreas do negócio), <em>business capabilities</em>. Por exemplo, ao invés de ter equipes divididas entre <em>backend</em>, <em>frontend</em> e <em>devops</em>, ter equipes dividias por domínios ou funcionalidades, cada uma trabalhando em escopos menores, porém de ponta a ponta (incluindo a UI).</p>

<p><img src="https://blog.fabricio.org/content/images/2023/01/End-to-End-Teams-with-Mcrofrontends-768x375.png" alt="Micro frontends em 2023, parte I: Quando usar?">
<small><a href="https://www.cuelogic.com/blog/micro-frontends-part1">fonte: Tapan Vora</a></small></p>

<p>Esta abordagem abre espaço para a possibilidade de atribuir a construção e manutenção de <strong>diferentes unidades</strong> isoladas de um sistema a <strong>diferentes times de desenvolvedoras</strong>. Cada grupo usando os processos de revisão/testes/publicação, linguagens de programação e ferramentas que melhor couber, de acordo com cada tipo de problema/contexto/maturidade do módulo... (o que pode descambar para uma Torre de Babel, é verdade, mas este já seria outro assunto).</p>

<p><img src="https://blog.fabricio.org/content/images/2023/01/Screenshot-from-2023-01-22-12-57-09.png" alt="Micro frontends em 2023, parte I: Quando usar?">
<small><a href="https://speakerdeck.com/squer/micro-frontends-in-the-wild">fonte: David Leitner</a></small></p>

<p>Dividir um "<strong>monolito</strong>" é algo que pode não fazer sentido no começo de um projeto, ou numa empresa pequena. Aplicações monolíticas possuem muitos pontos positivos. Principalmente enquanto a base de código é ainda pequena e a carga cognitiva para a entrada de uma colaboradora nova é baixa, enquanto o tempo de deploy é rápido, enquanto as burocracias e os gargalos são poucos. Para <em>frontend</em> vale a mesma ideia que vale no <em>backend</em>, começar com um monolito e esperar um momento de dor para só então quebrar em módulos (<em>microservices</em>, <em>micro frontends</em>) não tem nada de mais, é uma estratégia boa.</p>

<p>E com esta introdução eu poderia encerrar o texto por aqui, com uma simples sugestão que é a segura para grande parte dos cenários: <em>não use micro frontends!</em></p>

<p>Mas outra recomendação possível seria algo do tipo: <em>use micro frontends quando isto for uma vantagem</em> (exemplo: proporcionar mais agilidade ou menos interdependência entre times).</p>

<h2 id="resumo">Resumo</h2>

<p>Eu gostei do abstract <a href="https://fosdem.org/2023/schedule/event/microfrontends_react/">desta palestra</a> que acontecerá no próximo <a href="https://fosdem.org/2023/">FOSDEM em Fevereiro</a>:</p>

<blockquote>
  <p>Traditionally, web applications are built as monoliths. Complex applications are typically organized into smaller packages, but these are still bundled and built together as part of the given application deployment. Micro-frontends allow developers to break out from this model by allowing a single web application to be split into multiple projects that are built, deployed and updated separately and served from different web -servers but still able to seamlessly integrate with the given application.Large projects tend to have lots of teams and collaborators working on different parts of the same application within the same code repository. Managing and coordinating releases can be difficult, since everyone involved with the project works towards the same release schedule.</p>
</blockquote>

<h2 id="monamassa">Mão na massa</h2>

<p>Na parte II desta série eu implemento um exemplo simples com dois frontends em NextJS que compartilham módulos. Continue clicando no link a seguir: <a href="https://blog.fabricio.org/p/19f0db3e-2660-4fc3-8af9-624ee7871be4/">Micro frontends em 2023, Parte II: Module Federation e NextJS</a></p>

<p><small>Foto do cabeçalho <a href="https://unsplash.com/@trommelkopf?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Steve Harvey</a> on <a href="https://unsplash.com/photos/xWiXi6wRLGo?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></small></p>]]></content:encoded></item><item><title><![CDATA[Satsconf 2022]]></title><description><![CDATA[<p>Terça feira passada, aconteceu em São Paulo a primeira Satsconf, uma conferência sobre tecnologia que reuniu pessoas interessadas no avanço do dinheiro da internet (ou <a href="https://knowyourmeme.com/memes/magic-internet-money-bitcoin-wizard">dinheiro mágico da internet</a>), o bitcoin. </p>

<p>O "sats" do nome da conferência vem da abreviação de satoshis<sup id="fnref:1"><a href="https://blog.fabricio.org/satsconf-2022/#fn:1" rel="footnote">1</a></sup>, assim como cents é a abreviação de</p>]]></description><link>https://blog.fabricio.org/satsconf-2022/</link><guid isPermaLink="false">5bb22da5-fb34-4847-bffe-0a5bffa60a67</guid><category><![CDATA[bitcoin]]></category><category><![CDATA[meetup]]></category><dc:creator><![CDATA[Fabricio Campos Zuardi]]></dc:creator><pubDate>Sat, 12 Nov 2022 19:34:50 GMT</pubDate><media:content url="http://blog.fabricio.org/content/images/2022/11/IMG_20221108_091859-1.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://blog.fabricio.org/content/images/2022/11/IMG_20221108_091859-1.jpg" alt="Satsconf 2022"><p>Terça feira passada, aconteceu em São Paulo a primeira Satsconf, uma conferência sobre tecnologia que reuniu pessoas interessadas no avanço do dinheiro da internet (ou <a href="https://knowyourmeme.com/memes/magic-internet-money-bitcoin-wizard">dinheiro mágico da internet</a>), o bitcoin. </p>

<p>O "sats" do nome da conferência vem da abreviação de satoshis<sup id="fnref:1"><a href="https://blog.fabricio.org/satsconf-2022/#fn:1" rel="footnote">1</a></sup>, assim como cents é a abreviação de centavos.</p>

<p>Eu tive a grande felicidade de poder estar lá, venci a preguiça e as justificativas mais óbvias para não ir e fui me encontrar com a "<a href="https://satsconf.com.br/palestrantes/">minha tribo</a><sup id="fnref:2"><a href="https://blog.fabricio.org/satsconf-2022/#fn:2" rel="footnote">2</a></sup>". Encarando o transtorno de uma viagem "bate-volta" cansativa para a capital, em dia útil, numa semana intensa do trabalho, com prazos e entregas se apertando e se acumulando.</p>

<p><img src="https://blog.fabricio.org/content/images/2022/11/IMG_20221108_091908.jpg" alt="Satsconf 2022"></p>

<p>Ah, conferências... que saudades que eu estava! Que coisa boa poder estar numa aglomeração de novo, acho que foi a minha primeira depois da pandemia (até tive outra, interna da firma, mas nao contou, por ser fechada). Eu amo demais estes encontros de gente criativa e maluca! IRContros, semanas da computação, Barcamps, Hackathons, viagens do Ônibus Hacker, festivais de música, FISL, Latinoware, CC Summit, Campus Party, CaiPyra... <em>meetups</em> em geral. Caramba, como fez falta, como foi chato não poder mudar de cenário e não poder <em>conhecer gente</em> ao vivo nestes últimos anos (quantos foram? três? caralho...).</p>

<p>Por um lado o isolamento da pandemia ajudou a gente a acelerar um tanto nossa migração para o mundo da informação. Digitalizamos ainda mais nossas rodinhas e isto foi fantástico. Suprimos a carência e a necessidade de socialização com grupos de Telegram, Discord, Spaces de twitter, podcasts, zooms, google meets, longos áudios de Whatsapp e tal. Mas poder estar presencialmente juntos, para alguém da minha geração, ainda faz muita diferença. É ótimo poder encostar, abraçar, rir, envergonhar-se, se esforçar no Inglês e Portunhol para se comunicar com estrangeiros, estar diante de gente nova, ao vivo e na altíssima definição e largura-de-banda que é este "modo" chamado mundo físico.</p>

<p><img src="https://blog.fabricio.org/content/images/2022/11/IMG_20221108_144735.jpg" alt="Satsconf 2022"></p>

<p><img src="https://blog.fabricio.org/content/images/2022/11/FJIMG_20221108_174203.jpg" alt="Satsconf 2022"></p>

<p>Nossas tribos, nosssas subculturas, são uma fatia grande de quem somos, <strong>ter uma galera</strong> que compartilha as mesmas referências, memes e piadas internas de algum contexto, seja ele o nicho que for <strong>é importante</strong>. O skate, a bike, o metal, o RPG, o poker, a capoeira, o pingue-pongue, o crochê, o futebol, a orquestra, o seminário de filosofia, o badminton, a igreja, o happy hour recorrente, o pagode, o basquete, a faculdade, o subreddit, as comunidades de projeto open-source, o motoclube, as linguagens de programação, a yoga, as jogatinas de tabuleiro, o clan do jogo online, a rave, o inferninho indie, enfim... os rolês. E eu admito que para um observador externo, um rolê sobre <strong>dinheiro</strong> (mesmo bitcoin sendo o melhor dinheiro já descoberto) é algo muito esquisito.</p>

<p><img src="https://blog.fabricio.org/content/images/2022/11/IMG_20221108_210947-1.jpg" alt="Satsconf 2022"></p>

<p><img src="https://blog.fabricio.org/content/images/2022/11/IMG_20221108_102748.jpg" alt="Satsconf 2022"></p>

<p>O encontro desta semana foi um deste nicho formado pelas herdeiras de Satoshi Nakamoto, Hal Finney, Nick Szabo, Ross Ulbritch, Shafi Goldwasser <br>
e tantas outras. Um nicho de origens <em>cypherpunks</em> e libertárias, mas que, como toda boa subcultura, possui a chance/perspectiva de crescer e tornar-se <em>mainstream</em>, virar a norma.</p>

<p>Se um dia a <a href="https://nakamotoinstitute.org/mempool/hyperbitcoinization/">hiperbitcoinização</a> chegar, vai parecer estranho que em 2022 houve um encontro de "<a href="https://discord.gg/AwyMCRSS">bitcoinheiros</a>", pois bitcoin será então algo que usamos sem pensar, sem saber, assim como hoje usamos a internet, assistimos tv ou falamos Inglês, não será um assunto especial ou uma área de especialização, vai só fazer parte do dia-a-dia. Mas neste estágio em que estamos, em que "we're still early™", a identificação das pessoas como parte de um grupo especial é fundamental.</p>

<p><img src="https://blog.fabricio.org/content/images/2022/11/Fb-Y6Z_XwAMDkUh.jpg" alt="Satsconf 2022"></p>

<p>Gostei de ter ido e voltei com um caderninho cheio de anotações, muitas idéias e alguns novos contatos, ainda preciso de um tempo para digerir tudo, experimentar, refletir e quem sabe escrever mais sobre os muitos temas que ouvi neste dia que passei fora de casa. Por enquanto deixo só este singelo testemunho pessoal, o agradecimento a todos da organização impecável e o sentimento de que precisamos nos reunir e <a href="http://idomyownstunts.blogspot.com/2008/10/keep-talking.html">conversar mais</a>, tanto online quanto offline. Trocar idéias, desenhar soluções para os prolemas de escala, combater <a href="https://en.wikipedia.org/wiki/Fear,_uncertainty,_and_doubt">FUD</a> e etc.</p>

<p>É hora de persistir e caminhar com humildade no sentido de consolidar nossos valores <strong>comuns</strong>. Na minha visão, os de descentralização, soberania, privacidade, resistência à censura e liberdade individual. Estes são <strong>inegociáveis</strong>.</p>

<p><img src="https://blog.fabricio.org/content/images/2022/11/IMG_20221108_203412.jpg" alt="Satsconf 2022"></p>

<p>O radicalismo e a "<a href="https://bitcoinmagazine.com/culture/what-toxic-bitcoin-maximalism-means-to-onlookers">toxicidade</a>" tem o seu papel nestas lutas, assim como respeitar e aceitar a diversidade de lugares de onde cada um vem no que diz respeito aos outros valores secundários é tudo parte de uma grande equação (<em>hat tip</em> para o <a href="https://twitter.com/LetaHODL">Leta</a> que me pareceu adorar equações).</p>

<p>Tudo bem ser vegetariano, ou ser estritamente carnívoro, tudo bem não escovar os dentes bochechando óleo de coco, ser ou não ser Olavista, usar frigideira de teflon, ou inox, ou <a href="https://twitter.com/nvk/status/1579214520656236545">ferro fundido</a>, aceitar uma urna eletrônica opaca ou mesmo ter sujado a mão de merda e cravado o 13 nela (como eu cofesso que fiz), tudo bem brincar com uma ou outra altcoin, afinal... quem nunca? O mundo real tem muitas nuances, individualidades e complexidades. E há uma beleza nisso.</p>

<p>Trilhar esta estrada é um desafio grande, achar um <strong>balanço</strong> entre ter bons alicerces e ao mesmo tempo não se fechar numa bolha intolerante que repele quem se beneficiaria dos princípios requer esforço. Separar o dinheiro do Estado tem que ser uma luta de <strong>todos</strong> (todes?... ha, zoeira).</p>

<p><img src="https://blog.fabricio.org/content/images/2022/11/FIXES-THIS.jpg" alt="Satsconf 2022"></p>

<p>Há um ajuste fino sobre como propagar estes valores de uma maneira acessível e <a href="https://en.wikipedia.org/wiki/Nonviolent_Communication">receptiva</a>. E felizmente nesta terça eu só encontrei pessoas bem amigáveis, foi um dia com uma atmosfera boa. As turmas de 20/21 são ótimas!! &lt;3</p>

<p>Mal posso esperar o próximo :)</p>

<p><a href="https://photos.app.goo.gl/W5ZQZhX2siviFLco8">outras fotos do evento Satsconf2022</a></p>

<hr>

<div class="footnotes"><ol><li class="footnote" id="fn:1"><p>Satoshi é a menor fração da moeda bitcoin (BTC), que, diferente dos centavos de reais, que são duas casas decimais, no bitcoin são 8 casas depois da vírgula. Um satoshi são 0,00000001 bitcoins, 1 BTC são cem milhões de satoshis. No momento da escrita deste texto R$ 1,00 valia aproximadamente 1115 satoshis. Satoshi Nakamoto é o pseudônimo usado pelas autoras do paper "Bitcoin: A Peer-to-Peer Electronic Cash System" apresentado ao mundo em <a href="https://en.wikipedia.org/wiki/Bitcoin#History">31 de outubro de 2008</a> <a href="https://blog.fabricio.org/satsconf-2022/#fnref:1" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:2"><p>Página arquivada do <a href="https://archive.ph/DCjFw">lineup da Satsconf 2022</a>. <a href="https://blog.fabricio.org/satsconf-2022/#fnref:2" title="return to article">↩</a></p></li></ol></div>]]></content:encoded></item><item><title><![CDATA[Abaixo o Cadastro!]]></title><description><![CDATA[<p>Já vimos que para além da <em>buzzword</em>, <a href="https://blog.fabricio.org/vamos-falar-sobre-web3/">o tema <strong>Web3</strong> pode servir de gancho para reflexões  sobre <strong>descentralização</strong></a>.</p>

<p>Parte desta conversa, de espalhar o poder, passa pelas contas de usuários e pelo fim da coleta de dados pessoais.</p>

<p>Um outro modelo para identidades digitais é possível. Um que não seja</p>]]></description><link>https://blog.fabricio.org/abaixo-o-cadastro/</link><guid isPermaLink="false">b6f39d99-d8f9-4d3b-b714-8b821be6809c</guid><category><![CDATA[web3]]></category><category><![CDATA[autonomia]]></category><category><![CDATA[self-soverein-identity]]></category><category><![CDATA[p2p]]></category><category><![CDATA[did]]></category><category><![CDATA[self-sovereign]]></category><category><![CDATA[privacidade]]></category><category><![CDATA[w3c]]></category><category><![CDATA[bitcoin]]></category><category><![CDATA[ssi]]></category><category><![CDATA[vc]]></category><category><![CDATA[privacy-by-design]]></category><category><![CDATA[autossoberania]]></category><dc:creator><![CDATA[Fabricio Campos Zuardi]]></dc:creator><pubDate>Thu, 05 May 2022 06:15:13 GMT</pubDate><media:content url="http://blog.fabricio.org/content/images/2022/05/luis-cortes-cIR9T7GUy8k-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://blog.fabricio.org/content/images/2022/05/luis-cortes-cIR9T7GUy8k-unsplash.jpg" alt="Abaixo o Cadastro!"><p>Já vimos que para além da <em>buzzword</em>, <a href="https://blog.fabricio.org/vamos-falar-sobre-web3/">o tema <strong>Web3</strong> pode servir de gancho para reflexões  sobre <strong>descentralização</strong></a>.</p>

<p>Parte desta conversa, de espalhar o poder, passa pelas contas de usuários e pelo fim da coleta de dados pessoais.</p>

<p>Um outro modelo para identidades digitais é possível. Um que não seja impulsionado pela <strong><a href="https://pt.wikipedia.org/wiki/Publicidade_direcionada">publicidade direcionada</a></strong>, comércio de dados pessoais e que não incentive a vigilância. Um modelo que seja baseado em <strong>privacidade</strong> e <strong><a href="https://blog.fabricio.org/soberania-individual/">autossoberania</a></strong>.</p>

<p>Este modelo alternativo é conhecido pelo nome em inglês <a href="http://www.lifewithalacrity.com/2016/04/the-path-to-self-soverereign-identity.html">Self Sovereign Identity</a> (SSI), e muita gente boa trabalha <a href="https://www.w3.org/2020/12/did-wg-charter.html">nos padrões</a> e nas soluções tecnológicas para torná-lo viável. É um trabalho que traz esperanças para quem, como eu, odeia cadastros.</p>

<p><acronym title="Too Long Didnt Read">TLDR</acronym>: <a href="https://blog.fabricio.org/abaixo-o-cadastro/#sumrio">Sumário</a>.</p>

<h2 id="sociedadeenxerida">Sociedade enxerida</h2>

<p>Eu moro numa cidade relativamente pequena, mas com muitas farmácias. </p>

<p>E é quase impossível comprar qualquer produto da prateleira, por mais inofensivo que seja, como uma escova de dentes ou um mero sabonete, sem ser importunado com a famigerada pergunta:</p>

<blockquote>
  <p>Você já tem cadastro no sistema?</p>
</blockquote>

<p>Lojas de departamento, especialmente em shoppings, também sofrem deste mal.</p>

<p><img src="https://blog.fabricio.org/content/images/2022/05/cartao-da-loja.jpg" style="width: 60%; text-align: center;" alt="Abaixo o Cadastro!"></p>

<p>Conheço uma pessoa que desistiu de comprar um par de meias porque era simplesmente <strong>impossível</strong> comprar no dinheiro sem informar o número de telefone e o CPF.</p>

<p>Um. Par. De. F****ndo. Meias.</p>

<h3 id="crieumacontaparacontinuarlendo">Crie uma conta para continuar lendo</h3>

<p>Esta intromissão exagerada não se limita ao <strong>mundo físico</strong>. No <strong>mundo digital</strong>, a bisbilhotagem e a sanha da xeretice são ainda mais amplas e desproporcionais. </p>

<p>Faça um teste. Numa aba privada, abra a página inicial do Google, ou um link de notícias qualquer. Ser barrado, ou pelo menos incomodado, com um lembrete de que você não se identificou, é a regra. Receber o conteúdo sem impedimentos é a excessão.</p>

<div style="display:grid; grid-template-columns: 24% 25% 25%; column-gap: 10%;">  
<img src="https://blog.fabricio.org/content/images/2022/05/google-anonymous.png" alt="Abaixo o Cadastro!">

<img src="https://blog.fabricio.org/content/images/2022/05/folha-anonymous.png" alt="Abaixo o Cadastro!">

<img src="https://blog.fabricio.org/content/images/2022/05/estadao-anonymous.png" alt="Abaixo o Cadastro!">  
</div>

<p>Exemplos de sites, apps e serviços que exigem um cadastro no sistema deles não faltam. Privados, públicos, nacionais, internacionais, grandes, médios e pequenos.</p>

<h2 id="tudoonline">Tudo online</h2>

<p>A própria distinção nos exemplos acima, entre mundo físico e mundo digital não cabe, pois o sistema da farmácia e o da loja de departamentos, estão conectados com a Internet também.</p>

<p>Não existe mais um único dia de nossas vidas em que não interagimos com múltiplos sistemas e aparelhos conectados e que coletam dados pessoais (seja com ou sem nosso consentimento).</p>

<p>Laptops, celulares e videogames (e seus <a href="https://pt.wikipedia.org/wiki/Sistema_operativo">SO</a>s <a href="https://pt.wikipedia.org/wiki/Software_propriet%C3%A1rio">proprietários</a>) já exigem cadastro para as funcionalidades mais básicas deles. É parte do <em>setup</em> inicial criar estas contas. É o fluxo obrigatório apresentado desde a primeira vez que são ligados.</p>

<p><img src="https://blog.fabricio.org/content/images/2022/05/XXEverywhere.jpg" alt="Abaixo o Cadastro!">
<small>Cadastros, cadastros em todo canto</small></p>

<p>E mesmo aparelhos que não possuem <strong>nenhuma razão</strong> para estarem online, estão. Este é um assunto que merece um post sozinho, não me aprofundarei aqui, mas uma navegada no blog <a href="https://twitter.com/internetofshit">@internetofshit</a>, que coleciona exemplos de IoT (Internet das Coisas, <a href="https://youtu.be/Rn3t2FqsYYk">Internet dos Alvos</a>), passa uma noção do tanto de coisas conectadas<sup id="fnref:1"><a href="https://blog.fabricio.org/abaixo-o-cadastro/#fn:1" rel="footnote">1</a></sup> que nos cercam.</p>

<p>Informar alguns dados aqui e ali é algo <strong>normal</strong>; é aparentemente inofensivo; é quase inevitável; <em>todo mundo</em> faz; o Google é gratuito; me ajuda com mapas; já teve como lema a frase "<a href="https://en.wikipedia.org/wiki/Don't_be_evil">não seja mal</a>"; dá para confiar; ninguém na farmácia quer me sacanear; o coitado do vendedor de roupas ganha mal e precisa bater a meta de cadastros; posso até ganhar descontos se eu dedurar mais 3 amigos… </p>

<p>Se preocupar com o destino destes dados é coisa de paranóico, certo?</p>

<p>Ou será que falhamos enquanto espécie? Normalizamos a invasão de privacidade, perdemos o controle e fomos longe demais?</p>

<p>Não sei, toma aqui um cupom de desconto para comprar lanche e vamos esquecer disso… "Alexa, acender a luz da sala".</p>

<h2 id="comovocconseguiuomeunmero">Como você conseguiu o meu número?</h2>

<p>Ninguém mais tem nome na <a href="https://pt.wikipedia.org/wiki/Lista_telef%C3%B4nica">lista telefônica</a>, ainda assim, quem tem celular, invariavelmente recebe ligações de bancos e operadoras de telefonia todo santo dia no Brasil.</p>

<p>Esta <strong>praga</strong> atinge até números de celular, <strong>recém adquiridos</strong>. Ao atender uma chamada destas é difícil não inciciar o diálogo perguntando: "Como você conseguiu meu número?"</p>

<p>Telemarketing é chato? Sim. Mas não é a única e nem a pior consequência de concentrarmos informações pessoais em sistemas com bases de dados <strong>conectadas</strong> à Internet e a disposição de <a href="https://www.youtube.com/watch?v=wqn3gR1WTcA">parceiros</a>.</p>

<h3 id="semandaremmensagempedindodinheironosoueu">Se mandarem mensagem pedindo dinheiro, não sou eu</h3>

<p>Dados permanentes, como o número de CPF, ou dados chatos de trocar, como o número de telefone, uma vez comprometidos, comprometidos ficam, para sempre, é uma via de mão única, é irreversível, a pasta de dentes não volta para a bisnaga.</p>

<p>O número de informações vazadas em circulação só aumenta, se tornam cada vez mais baratas e mais disponíveis para fraudes em massa, falsificação, roubo de identidade, empréstimos, compras e ataques de personificação. Nem <strong>bebês</strong> escapam, alguns brasileiros já praticamente <a href="https://g1.globo.com/distrito-federal/noticia/2015/07/familia-do-df-descobre-nome-sujo-de-bebe-de-1-ano-ao-abrir-poupanca.html">nascem com o CPF sujo</a>.</p>

<iframe src="https://player.r7.com/video/i/600b740819d2244a24000d29" width="640" height="360" frameborder="0" loading="lazy" allowfullscreen></iframe>  

<p><a href="https://noticias.r7.com/jr-na-tv/videos/golpistas-clonam-cpf-e-deixam-um-bebe-de-sete-meses-com-o-nome-sujo-22012021">Reportagem da série CPF – Devolvam Meu Nome</a></p>

<p>O mundo mudou rápido e nós não nos adaptamos na mesma velocidade. Precisamos de atenção a novos cuidados que não eram necessários<sup id="fnref:2"><a href="https://blog.fabricio.org/abaixo-o-cadastro/#fn:2" rel="footnote">2</a></sup> em tempos analógicos. É muito fácil esquecermos que a internet é um lugar extremamente perigoso e nos expormos até sem querer<sup id="fnref:3"><a href="https://blog.fabricio.org/abaixo-o-cadastro/#fn:3" rel="footnote">3</a></sup>.</p>

<h2 id="correratrsdoprejuzo">Correr atrás do prejuízo</h2>

<p>Houve avanço nos cadastros em sites e serviços online — logins federados, consentimentos seletivos e revogáveis, gerenciadores de senhas, autenticação em dois passos, leis de proteção de dados —, estamos caminhando.</p>

<p>Mas ainda estamos perdendo a corrida. Ainda deixamos nossas informações por aí, longe da nossa posse, ainda temos que <strong>confiar nos sistemas de outros</strong> para guardarem estes dados sensíveis.</p>

<p>Grandes plataformas concentram muita informação cobiçada em grandes "<a href="https://pt.wikipedia.org/wiki/Data_Lake">lagos de dados</a>" (<a href="https://web.archive.org/web/20220428124905/https://twitter.com/CaioAlmendra/status/1519659860220162048">fossa de dados</a>), o que é uma má idéia. Mesmo as instituições mais poderosas e modernas, com dinheiro para contratar as melhores engenheiras, <a href="https://www.vice.com/en/article/akvmke/facebook-doesnt-know-what-it-does-with-your-data-or-where-it-goes">não sabem como lidar com os dados que coletam</a>.</p>

<p>É preciso avançar na direção de abandonar a dependência e confiança em entidades centralizadas. Mover os nossos perfis, nossas preferências e nossos históricos para fora das grandes plataformas. Trazê-los para perto, carregá-los conosco.</p>

<h2 id="ondeenfieiminhacarteira">Onde enfiei minha carteira?</h2>

<p>No mundo físico, carregamos conosco um punhado de credenciais. Que são documentos emitidos por entidades e que atestam informações a nosso respeito, tais como: a data de nascimento, a aprovação em um teste de direção, o time de futebol do coração, a nacionalidade, o recebimento de uma vacina.</p>

<p>Diferentes lugares que eu frequentar podem aceitar ou não o valor da informação atestada nelas. E me dar algum benefício, como meia entrada no cinema por exemplo.</p>

<p><img src="https://blog.fabricio.org/content/images/2022/05/menino-bilhete-escola2-1.jpg" alt="Abaixo o Cadastro!">
<small><a href="https://pt.wikipedia.org/wiki/%C3%89_verdade_esse_bilete">é verdade esse bilhete</a></small></p>

<p>No mundo digital, é mais raro conseguir transportar credenciais de um site para outro, sempre temos que "refazer a carteira de motorista" para cada nova estrada ou cidade que formos visitar (malditos cadrastros!). E mesmo em dois sites que reconheçam uma mesma informação atestada por uma entidade em comum (o nome da minha conta no Google por exemplo), a credencial não está comigo, está com o provedor de identidade (neste caso, o Google).</p>

<p>Um modelo mais parecido com o primeiro, é o que vem sendo trabalhado no padrão <a href="https://en.wikipedia.org/wiki/Verifiable_credentials">Verifiable Credentials</a> (VC).</p>

<blockquote>
  <p>The W3C VC model parallels physical credentials: the user holds cards and can present them to anyone at any time without informing or requiring the permission of the card issuer. Such a model is decentralized and gives much more autonomy and privacy to the participants.
  <small> Wikipedia </small></p>
</blockquote>

<h2 id="desafiosdawebpssnowdenhttpsptwikipediaorgwikiedward_snowden">Desafios da web pós-<a href="https://pt.wikipedia.org/wiki/Edward_Snowden">Snowden</a></h2>

<p>Alguém construindo um site ou serviço hoje, tem que se fazer as perguntas abaixo: </p>

<ul>
<li>Como eu desenho um produto levando em conta a privacidade? (<a href="https://en.wikipedia.org/wiki/Privacy_by_design">Privacidade desde a concepção</a>)</li>
<li>Como eu desenho um produto que não exige um cadastro?</li>
<li>Qual é a versão daquilo que eu quero construir, que <strong>não tem</strong> um botão <em>Sign Up</em> (Cadastre-se)?</li>
<li>Eu consigo atender meus clientes de uma maneira que seja possível contornar, evitar ou combater <a href="https://bitcoiner.guide/nokyconly/">KYC</a>?</li>
</ul>

<h2 id="identidadeoqueosoutrosfalamsobrevoc">Identidade é o que os outros falam sobre você</h2>

<p>Existe uma discussão profunda sobre o que é identidade, mas para fins práticos, não vou entrar nela. </p>

<p>Para muita coisa na vida, identificadores e certificados acabam servindo de resumo para identidade, se eu escrever "Aurora" na coleira de uma cachorrinha e ela se perder. Alguém que a encontrar pode consultar a coleira e confirmar comigo se ela é a mesma cachorra que eu procuro me perguntando: "Qual o nome da cachorra que você procura?"</p>

<p><img src="https://blog.fabricio.org/content/images/2022/05/mymum.jpg" style="width:560px" alt="Abaixo o Cadastro!"> <br>
<small><a href="https://www.etsy.com/listing/825368001/please-call-my-mum-she-will-be-crying?click_key=a4bb85cd8b60b71f06f2de78847577b460eeaaf0%3A825368001&amp;click_sum=9c4e6c86&amp;ga_order=most_relevant&amp;ga_search_type=all&amp;ga_view_type=gallery&amp;ga_search_query=funny+dog+tag&amp;ref=sr_gallery-1-20&amp;pro=1">SweetWilliamLondon</a></small></p>

<p>Porém mais de uma cachorra pode ter o mesmo nome escrito na coleira, a palavra "Aurora", sozinha, não é um identificador <strong>único</strong>.</p>

<p>É comum recorrer a instituições centralizadas, tipo a <a href="https://www.prefeitura.sp.gov.br/cidade/secretarias/saude/saude_e_protecao_ao_animal_domestico/index.php?p=272497">prefeitura de São Paulo</a> para conseguir um <acronym title="Registro Geral do Animal">RGA</acronym> que seja único, mas aí estaríamos voltando com a dependência que queremos eliminar.</p>

<p>Uma solução mais <strong>descentralizada</strong> para este problema, seria eu colocar um pequeno cadeado na coleira e guardar a chave num cofre da minha casa. Se algum dia eu precisasse <strong>provar</strong> que a cachorra encontrada é a mesma cachorra que foi perdida, eu teria que abrir o cadeado. E neste caso, eu nem precisaria escrever uma informação pessoal na coleira, como o nome dela ou o número de telefone. Privacidade desde a concepção!</p>

<p><img src="https://blog.fabricio.org/content/images/2022/05/FRRW7IDX0AAiX5M.jpg" style="width:560px" alt="Abaixo o Cadastro!"> <br>
<small><a href="https://twitter.com/SeedMint21/status/1518934554840600579">https://twitter.com/SeedMint21/status/1518934554840600579</a></small></p>

<p>No mundo digital este par cadeado-chave é um par de <a href="https://pt.wikipedia.org/wiki/Criptografia_de_chave_p%C3%BAblica">chaves criptográficas</a>, e qualquer um pode construir <a href="https://learnmeabitcoin.com/technical/hd-wallets">quantos deles precisar</a>, é coisa bem simples e <strong>independente</strong>, não precisa registrar na prefeitura, no google ou em nenhuma outra entidade externa. É puramente matemático, único<sup id="fnref:4"><a href="https://blog.fabricio.org/abaixo-o-cadastro/#fn:4" rel="footnote">4</a></sup>, e pode ser gerado <em><a href="https://seedsigner.com/">offline</a></em>.</p>

<p><blockquote class="twitter-tweet"><p lang="und" dir="ltr"><a href="https://t.co/YDHp4XSzi7">pic.twitter.com/YDHp4XSzi7</a></p>&mdash; Rijndael (@rot13maxi) <a href="https://twitter.com/rot13maxi/status/1509169063150465025?ref_src=twsrc%5Etfw">March 30, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p>

<h2 id="identidadeoquevocrevelasobrevoc">Identidade é o que você revela sobre você</h2>

<p>Na Internet, <a href="https://en.wikipedia.org/wiki/On_the_Internet,_nobody_knows_you%27re_a_dog">ninguém sabe que você é um cachorro</a>, então se parte da minha identidade é ter como cor favorita o amarelo, eu posso manter esta informação em segredo comigo e a revelar seletivamente para <a href="https://pt.wikipedia.org/wiki/Criptografia_de_ponta-a-ponta">apenas quem eu quiser</a> que saiba disso. O controle deste dado é meu.</p>

<p>Com uma ajuda da matemática, eu posso inclusive entrar em clubes digitais que aceitem amantes das cores do conjunto "amarelo ou vermelho"(um outro assunto fascinante para outro post) <strong>sem revelar</strong> qual das duas é minha cor favorita. E o clube nunca seria alvo de alguém aparecendo lá com um mandato judicial para que revelem quantos ou quais dos membros gostam do amarelo porque esta informação não existe concentrada em nenhum sistema.</p>

<p style="text-align: center">  
<img src="https://blog.fabricio.org/content/images/2022/05/no-data-no-breach-1024x572.jpeg" style="width: 580px" alt="Abaixo o Cadastro!">  
<small>Não tem como acontecer um vazamento de dados. Se você não guarda nenhum dado.</small>  
</p>

<h2 id="sumrio">Sumário</h2>

<p>Vivemos num momento onde a coleta de dados pessoais é excessiva. Atividades banais como a compra de um par de meias estão a cada dia mais difíceis de se realizar sem deixar rastros e sem dar satisfações para redes bisbilhoteras. </p>

<p>Esta coleta excessiva, o armazenamento descuidado e a centralização das plataformas trazem consequências danosas que vão desde uma mera chateação de telemarketing até casos mais graves de golpes, roubo de identidade e perseguição.</p>

<p>É possível diminuir os danos causados pelos cadastros. A matemática pode ajudar no desenho de sistemas mais seguros, sem donos e que coloquem o controle sobre a criação de identidades digitais e o controle sobre a divulgação seletiva de dados nas mãos das pessoas.</p>

<h2 id="bnus">Bônus</h2>

<p>Um vídeo em Inglês, muito bem feito, da Dr. Ann Cavoukian feito para a Microsoft<sup id="fnref:5"><a href="https://blog.fabricio.org/abaixo-o-cadastro/#fn:5" rel="footnote">5</a></sup>. </p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/vYzDn8Ws4as" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>  

<p><a href="https://www.youtube.com/watch?v=vYzDn8Ws4as">https://www.youtube.com/watch?v=vYzDn8Ws4as</a></p>

<div class="footnotes"><ol><li class="footnote" id="fn:1"><p>Exemplos:<a href="https://twitter.com/sdbaral/status/1517976257388032000">elevadores</a>, <a href="https://twitter.com/doctorow/status/1518394016655577088">cardápios</a>, <a href="https://twitter.com/drbarnard/status/1500145131894231046">fogões</a>, <a href="https://twitter.com/HardPass4/status/1499151496449077250">grelhas</a>, <a href="https://twitter.com/c8ters/status/699701086656077825">lâmpadas</a>, <a href="https://twitter.com/isislovecruft/status/1487947074901463040">lava-louças</a>, <a href="https://twitter.com/RMFifthCircuit/status/1485816947572887552">torneiras</a>, <a href="https://twitter.com/Hasitier/status/1483747332709617664">baterias de furadeira</a>, <a href="https://twitter.com/imageryan/status/1484160109840326657">geladeiras</a>, <a href="https://twitter.com/pikelet/status/1476739760764841987">impressoras</a>, <a href="https://twitter.com/internetofshit/status/1470503089761398791">chaves de carro</a>, <a href="https://twitter.com/worldwise001/status/1468314462704869387">quiosques de autoatendimento</a>, <a href="https://twitter.com/SamsungUK/status/1453432765656059907">tvs</a>, a <a href="https://twitter.com/sheeraf/status/1445099150316503057">fechadura prédio do Facebook</a>… <a href="https://blog.fabricio.org/abaixo-o-cadastro/#fnref:1" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:2"><p>Todos andamos com uma máquina fotográfica no bolso hoje, e nossos cartões de crédito continuam saindo de fábrica "dando mole", contendo todos os dados (os 16 dígitos, a data de validade e o código de confirmação) impressos e explicitamente visíveis neles. <a href="https://blog.fabricio.org/abaixo-o-cadastro/#fnref:2" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:3"><p>Como o caso do general <a href="https://pt.wikipedia.org/wiki/Augusto_Heleno#Exame_de_coronav%C3%ADrus">Augusto Heleno</a>. Que publicou foto de um exame de Covid que trazia dados pessoais no twitter, e foi cadastrado em múltiplos sistemas que ele não escolheu. <a href="https://blog.fabricio.org/abaixo-o-cadastro/#fnref:3" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:4"><p>Tão absurdamente improvável de se repetir, se gerado com boa aleatoriedade, que pode ser chamado de único.  <a href="https://blog.fabricio.org/abaixo-o-cadastro/#fnref:4" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:5"><p>Porque sei que nossa tendência é ouvir mais a pessoas de terno e resumos com a palavra "<em>business</em>" no título. <a href="https://blog.fabricio.org/abaixo-o-cadastro/#fnref:5" title="return to article">↩</a></p></li></ol></div>

<p><small>Foto do cabeçalho por <a href="https://unsplash.com/@luiskcortes?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Luis Cortés</a> no <a href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a> <br>
  </small></p>]]></content:encoded></item><item><title><![CDATA[NFT e Smart Contracts]]></title><description><![CDATA[<p>Continuando a conversa <a href="https://blog.fabricio.org/vamos-falar-sobre-web3/">sobre Web3</a>, deixo aqui duas apresentações recentes que preparei sobre dois assuntos em específico: NFTs e Smart Contracts:</p>

<p><a href="https://youtu.be/B0jk7PoxHlw">NFT em (quase) 10 minutos</a></p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/B0jk7PoxHlw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<p><a href="https://youtu.be/FpxMANUK1S0">Smart Contracts em (quase) 10 minutos</a></p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/FpxMANUK1S0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>]]></description><link>https://blog.fabricio.org/nft-e-smart-contracts/</link><guid isPermaLink="false">8d9cf359-31d6-497f-a105-b94e0dc5fa43</guid><category><![CDATA[web3]]></category><category><![CDATA[nft]]></category><category><![CDATA[smart contracts]]></category><category><![CDATA[bitcoin]]></category><category><![CDATA[ethereum]]></category><category><![CDATA[blockchain]]></category><dc:creator><![CDATA[Fabricio Campos Zuardi]]></dc:creator><pubDate>Thu, 28 Apr 2022 21:46:37 GMT</pubDate><content:encoded><![CDATA[<p>Continuando a conversa <a href="https://blog.fabricio.org/vamos-falar-sobre-web3/">sobre Web3</a>, deixo aqui duas apresentações recentes que preparei sobre dois assuntos em específico: NFTs e Smart Contracts:</p>

<p><a href="https://youtu.be/B0jk7PoxHlw">NFT em (quase) 10 minutos</a></p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/B0jk7PoxHlw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<p><a href="https://youtu.be/FpxMANUK1S0">Smart Contracts em (quase) 10 minutos</a></p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/FpxMANUK1S0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>]]></content:encoded></item><item><title><![CDATA[Vamos falar sobre Web3]]></title><description><![CDATA[<p><small>also available in English: <a href="https://hackernoon.com/lets-talk-about-the-real-web3">Let's Talk about the 'Real' Web3</a></small></p>

<p>Quinta feira participei de uma conversa com dois colegas, sobre coisas relacionadas a esta <em>buzzword</em>, "web3".</p>

<p>Como faz tempo que não atualizo este site, resolvi aproveitar a temática e tirar a poeira daqui. Até para que alguém aterrisando neste blog</p>]]></description><link>https://blog.fabricio.org/vamos-falar-sobre-web3/</link><guid isPermaLink="false">cd1e0259-74e9-46b5-8f09-f57bc5f2ee3f</guid><category><![CDATA[blockchain]]></category><category><![CDATA[bitcoin]]></category><category><![CDATA[web3]]></category><category><![CDATA[nft]]></category><category><![CDATA[ethereum]]></category><category><![CDATA[hype]]></category><dc:creator><![CDATA[Fabricio Campos Zuardi]]></dc:creator><pubDate>Sun, 10 Apr 2022 15:13:49 GMT</pubDate><media:content url="http://blog.fabricio.org/content/images/2022/04/wioleta-zakrzewska-BZUo9Tf83HQ-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://blog.fabricio.org/content/images/2022/04/wioleta-zakrzewska-BZUo9Tf83HQ-unsplash.jpg" alt="Vamos falar sobre Web3"><p><small>also available in English: <a href="https://hackernoon.com/lets-talk-about-the-real-web3">Let's Talk about the 'Real' Web3</a></small></p>

<p>Quinta feira participei de uma conversa com dois colegas, sobre coisas relacionadas a esta <em>buzzword</em>, "web3".</p>

<p>Como faz tempo que não atualizo este site, resolvi aproveitar a temática e tirar a poeira daqui. Até para que alguém aterrisando neste blog hoje não fique com a impressão de que eu só falo de <a href="https://blog.fabricio.org/tag/videogame/">videogames</a> :)</p>

<p>Os assuntos de <em>blockchains</em> públicas, <acronym title="Organizações Distribuidas e Autonomas">DAOs</acronym>, soberania individual, software livre e cultura de internet são alguns que eu <a href="https://blog.fabricio.org/tag/web3/">acompanho com boa proximidade</a> e é uma área sobre a qual presto consultoria por aí, tanto profissionalmente quanto informalmente há alguns anos. Mas que ja faz tempo que não escrevo aqui neste canal.</p>

<h3 id="docomeoentodeondevemotermoweb3">Do começo então, de onde vem o termo Web3?</h3>

<p>Segundo a <a href="https://en.wikipedia.org/wiki/Web3">Wikipedia</a>, neste contexto, o termo veio do desenvolvedor Gavin Wood da rede Ethereum<sup id="fnref:1"><a href="https://blog.fabricio.org/vamos-falar-sobre-web3/#fn:1" rel="footnote">1</a></sup> em uma postagem de blog de abril de 2014: <a href="https://gavwood.com/dappsweb3.html">ĐApps: What Web 3.0 Looks Like</a>. </p>

<p>O primeiro parágrafo expõe muito claramente as motivações para um redesenho da web, abaixo com grifos meus:</p>

<blockquote>
  <p>As we move into the future, we find increasing need for a zero-trust interaction system. Even pre-Snowden, we had realised that <strong>entrusting our information to arbitrary entities on the internet was fraught with danger</strong>. However, post-Snowden the argument plainly falls in the hand of those who believe that large organisations and governments routinely attempt to stretch and overstep their authority. Thus we realise that <strong>entrusting our information to organisations in general is a fundamentally broken model</strong>. The chance of an organisation not meddling with our data is merely the effort required minus their expected gains. Given <strong>they tend to have an income model that requires they know as much about people as possible</strong> the realist will realise that the potential for convert misuse is difficult to overestimate.</p>
</blockquote>

<p>Um resumo possível dessa visão, lá de 2014, seria algo mais ou menos na linha &mdash; <em>bom, agora que temos Bitcoin<sup id="fnref:2"><a href="https://blog.fabricio.org/vamos-falar-sobre-web3/#fn:2" rel="footnote">2</a></sup>, podemos repensar se o modelo de financiar a web com a venda de dados pessoais, continua sendo um caminho aceitável</em>.</p>

<p>Esta época foi muito interessante em termos de conversas sobre as bases deste possível novo mundo, outros dois textos obrigatórios deste mesmo ano são o "<a href="https://nakamotoinstitute.org/mempool/everyones-a-scammer/">Everyone's a Scammer</a>", de Michael Goldstein, em setembro, e o "<a href="https://unenumerated.blogspot.com/2014/12/the-dawn-of-trustworthy-computing.html">The dawn of trustworthy computing</a>", de Nick Szabo, em dezembro (que já citei antes num <a href="https://blog.fabricio.org/trust-minimized/">outro post sobre <em>smart contracts</em></a> aqui do blog em 2015).</p>

<p><a href="https://twitter.com/elonmusk/status/1496252264171941888"><img style="height:450px" src="https://blog.fabricio.org/content/images/2022/04/web123.jpg" alt="Vamos falar sobre Web3"></a></p>

<p>Tanto na <a href="https://www.wired.com/story/web3-gavin-wood-interview/">entrevista do Galvin</a> linkada na Wikipédia, quanto <a href="https://ethereum.org/en/web3/">nos</a> <a href="https://ethereum.org/en/developers/docs/web2-vs-web3/">materiais</a> do site da Ethereum, os valores de <strong>descentralização</strong> e <strong>minimização da confiança</strong> são duas grandes componentes desta promessa de uma web reimaginada.</p>

<p>No mundo da utopia, o termo Web3 carrega uma promessa de substituir uma necessidade de confiança em poucos poderosos (<em>big techs</em> na Web2) por algo mais espalhado, auditável, resistente à censura, acessível (no sentido de <em><a href="https://www.pcmag.com/encyclopedia/term/permissionless">permissionless</a>), <a href="https://blog.fabricio.org/bitcoin-forks/#associaesvoluntrias">voluntária</a></em> e gerido pelos próprios participantes desta nova web. <em>“Less trust, more truth.”</em></p>

<h3 id="masweb3nonftondeentramosjpegsdemacaco">Mas web3 não é NFT? Onde entram os JPEGs de Macaco?</h3>

<iframe width="560" height="315" src="https://www.youtube.com/embed/N8f-BQFo7lw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<p>Crypto Curious - South Park <br>
<a href="https://youtu.be/N8f-BQFo7lw">https://youtu.be/N8f-BQFo7lw</a></p>

<p>É interessante o exercício de revisitar esta origem, reler os textos da época hoje, muitos anos depois, e se perguntar o que levou a ideia de uma web pós-Snowden <strong>virar sinônimo</strong> de coleções de imagens JPEG, ferramenta de marketing para empresas oportunistas, uma <a href="https://moxie.org/2022/01/07/web3-first-impressions.html#but-you-cant-stop-a-gold-rush">corrida-do-ouro</a> cheia de <em>vapourware</em>, projetos centralizados, golpistas e fraudes de todo tipo, enfim, um <em>hype</em> super danoso e distópico. </p>

<blockquote>
  <p>it seems worth thinking about how to avoid web3 being web2x2 (web2 but with even less privacy) with some urgency</p>
</blockquote>

<p>Moxie Marlinspike - <a href="https://moxie.org/2022/01/07/web3-first-impressions.html#but-you-cant-stop-a-gold-rush">My first impressions of web3</a></p>

<p>Se você tem duas horas e quer conhecer uma opinião bem crítica das NFTs sob um ponto de vista de um artista, eu recomendo assistir a este vídeo: "<a href="https://youtu.be/YQ_xWvX1n9g">Line Goes Up – The Problem With NFTs</a>", mesmo discordando de algumas partes (em velocidade 1.5 é bem tranquilo se você entende Inglês), mas se estiver sem tempo, assista apenas o capítulo 4, que é um excelente resumo de NFTs em 20 minutos:</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/YQ_xWvX1n9g" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<p>Line Goes Up – The Problem With NFTs <br>
<a href="https://youtu.be/YQ_xWvX1n9g">https://youtu.be/YQ_xWvX1n9g</a></p>

<p>Talvez seja o curso natural das <em>buzzwords</em> que carregam consigo grandes promessas, o de ser cooptada pelo marketing e de se esvaziar de sentido.</p>

<h3 id="halgumtrigonestamontanhadejoio">Há algum trigo nesta montanha de joio?</h3>

<p>Um <em>hype</em> tão grande quanto este merece atenção ainda assim?</p>

<p>Se você acompanha notícias sobre onde o <a href="https://pt.wikipedia.org/wiki/Capital_de_risco">venture capital</a> anda sendo investido, bem como o fluxo, entre diferentes startups, de pessoas/talentos (este sim o verdadeiro bem escasso) na área de tecnologia, este é um caso de onda "muito grande para ser menosprezada" (too big to overlook) nas palavras do jornalista Kevin Roose em seu <a href="https://www.nytimes.com/interactive/2022/03/18/technology/cryptocurrency-crypto-guide.html">guia de <em>crypto</em></a> para o New York Times. Ele escreve (e eu concordo):</p>

<blockquote>
  <p>I’ve also learned, in my career as a tech journalist, that when so much money, energy and talent flows toward a new thing, it’s generally a good idea to pay attention, regardless of your views on the thing itself.</p>
</blockquote>

<p>A título de comparação, durante a <a href="https://pt.wikipedia.org/wiki/Bolha_da_Internet">bolha das empresas ponto com</a>, a euforia e o medo de ficar de fora direcionou fortunas para <strong>muitas apostas erradas</strong> e o posterior estouro da bolha trouxe lições importantes para a nossa sociedade. Mas nem tudo foi fracasso, projetos como a <a href="https://www.wikipedia.org/">Wikipedia</a> e o <a href="https://archive.org/">Internet Archive</a> nasceram nesse período. E outros grandes sobreviventes, como Google e Amazon, parece que aproveitaram alguns benefícios de terem estado lá desde o início.</p>

<p>Considero importante observar, conhecer e até participar com critério, das subculturas, memes e tecnologias que fazem parte da vida dos jovens e <em>early-adopters</em> de hoje. Para esta geração, comprar <em>shitcoins</em>, ser hackeado, perder dinheiro, embarcar em empreitadas furadas, sonhar com Lamborghini, gastar a mesada com <em>skins</em>, é parte do caminho de se encontrar, encontrar pares, viver e crescer. De certa maneira, todas estas experiências ruins são também <strong>escolas</strong>.</p>

<p>Uma jovem que aprende <a href="https://www.rust-lang.org/">Rust</a> para escrever <em>smart contract</em> na Solana, ou alguma outra <em>altcoin</em> hoje, não terá disperdiçado totalmente sua energia, ela sairá com um conhecimento importante na bagagem. O mesmo vale para quem instalou Metamask para colecionar gatinhos e se decepcionou com o preço do "gás", essa pessoa teve contato com <a href="https://en.bitcoin.it/wiki/BIP_0039">BIP39</a>, teve algum treinamento e teve que parar para pensar sobre soberania individual. Um CEO, CTO ou diretor de empresa interessado em alguma <a href="https://www.investopedia.com/terms/p/permissioned-blockchains.asp">permissioned ledger</a> porque alguém de terno vendeu para ele uma "solução", pode eventualmente <a href="https://blog.fabricio.org/bitcoin-nao-e-smooth-jazz/">esbarrar com videos do Antonopoulos</a> e iniciar sua própria jornada individual rumo à pílula laranja. E assim por diante… Errar tentando ainda é mais educativo do que não tentar. Ou nas palavras do militar John Paul Jones, pai da marinha americana: "<a href="https://www.wisdomllp.net/the-blog/2020/7/25/those-who-do-not-risk-cannot-win">quem não arrisca não pode vencer</a>".</p>

<h3 id="recuperandootermo">Recuperando o termo</h3>

<p>Para fechar, acho importante reclamarmos de volta esta <em>buzzword</em> para ser novamente sinônimo de algumas idéias de autonomia, independência, sobreania, privacidade, liberdade de expressão… e direcionar nossos esforços para um mundo com menos poder concentrado, mais software livre, mais servidores caseiros, mais iniciativas robustas e <em>self-hosted</em>, enfim, uma <strong>verdadeira Web Pós-Snowden</strong>, afinal, como diz o André Staltz, em sua resposta <a href="https://moxie.org/2022/01/07/web3-first-impressions.html#how-i-think-about-1-and-2">a uma generalização</a> do Moxie Marlin: "<a href="https://staltz.com/some-people-want-to-run-their-own-servers.html">algumas pessoas querem rodar seus próprios servidores</a>".</p>

<p>Gosto desse tweet:</p>

<p><blockquote class="twitter-tweet"><p lang="en" dir="ltr">When an incumbent says &quot;Web3.0&quot;, they really mean the most nightmarish version of Web2.0 imaginable.<br><br>The real Web3.0 will be a grass roots movement, driven by sovereign individuals running open source software on commodity hardware connecting on P2P networks without permission.</p>&mdash; Start9 (EmbassyOS) 🏛️ (@start9labs) <a href="https://twitter.com/start9labs/status/1470063244576374786?ref_src=twsrc%5Etfw">December 12, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p>

<p><small>Foto do cabeçalho por <a href="https://unsplash.com/@wiozak?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Wioleta Zakrzewska</a> on <a href="https://unsplash.com/s/photos/diy?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></small></p>

<hr>

<h4 id="apndiceretrospectivadosltimosoitoanos">Apêndice: Retrospectiva dos últimos oito anos</h4>

<p>Da origem do termo Web3, naqueles primeiros anos após o presente de Satoshi para o mundo, até hoje, muita coisa aconteceu.</p>

<p>No campo da Ethereum, tivemos tokens <a href="https://ethereum.org/en/developers/docs/standards/tokens/erc-20/">ERC-20</a>; a onda das <a href="https://en.wikipedia.org/wiki/Initial_coin_offering">ICO</a>s; o <a href="https://www.gemini.com/cryptopedia/the-dao-hack-makerdao">hack da "The DAO"</a>; <a href="https://en.wikipedia.org/wiki/CryptoKitties">cripto-gatinhos</a>; <a href="https://eips.ethereum.org/EIPS/eip-721">ERC-721</a>; <a href="https://eips.ethereum.org/EIPS/eip-1155">EIP-1155</a> redes de segunda camada (<em>layer</em> 2) como a Polygon, outros <em>forks</em> e redes alternativas…</p>

<p>No campo da Bitcoin, com o qual eu particularmente tenho um maior alinhamento de valores, houve a <a href="https://youtu.be/ui9JwnB1d-k">guerra pelo tamanho do bloco</a>; os movimentos UASF (<a href="https://github.com/bitcoin/bips/blob/master/bip-0148.mediawiki">BIP148</a>) e <a href="https://bitcoinmagazine.com/technical/2x-or-no2x-why-some-want-hard-fork-bitcoin-november-and-why-others-dont">No 2x</a> que garantiram importantes <em>upgrades</em> no protocolo; a rede <em>layer 2</em> <a href="https://lightning.network/">Lightning Network</a> floresceu e continua evoluindo (vide a recente entrada do <a href="https://taproot.watch/">Taproot</a>); <a href="https://samouraiwallet.com/">wallets</a> e <a href="https://bisq.network/">exchanges</a> focadas em <strong>privacidade</strong>; projetos abertos de <a href="https://seedsigner.com/">hardware wallets</a> e <a href="https://getumbrel.com/#start">full nodes</a> caseiros com foco em usabilidade; <a href="https://blockstream.com/satellite/">satélite espacial</a>; <a href="https://youtu.be/41w_5K8iYpA">desmistificação</a> da mineração caseira; <a href="https://twitter.com/BitcoinMagazine/status/1513350714558320645?t=wzohBzaQeCW9fL0p7nBjNw&amp;s=19">El Salvador</a>; as comunidades brasileiras <a href="https://discord.gg/CCcXrXKr">andam conversando mais</a>… </p>

<p>E, claro, a ajuda que certas <a href="https://world.hey.com/dhh/i-was-wrong-we-need-crypto-587ccb03">arbitrariedades políticas</a> deram para acelerar a conscientização de que a separação entre dinheiro e estado é importante.</p>

<hr>

<div class="footnotes"><ol><li class="footnote" id="fn:1"><p>Ethereum: uma "<a href="https://fififinance.com/crypto/scamcoin#what-are-altcoins">altcoin</a>" que se propõe a ser um computador "descentralizado", ou, nas palavras do Gavin Wood: "<em>a completely generalised global transaction processing system</em>". <a href="https://blog.fabricio.org/vamos-falar-sobre-web3/#fnref:1" title="return to article">↩</a></p></li>
<li class="footnote" id="fn:2"><p>Há de se considerar o contexto, o texto do Gavin Wood foi escrito numa época em que as pessoas buscavam um "<a href="https://www.contravex.com/2014/03/19/there-is-no-bitcoin-2-0/">Bitcoin 2.0</a>", ele próprio acreditava que a Ethereum era esta evolução e estava vendendo esta ideia de que a rede concorrente dele era supostamente melhor. No meu resumo eu tomei a liberdade de usar Bitcoin, pois foi o projeto que de fato nos deu o que antes dele não havia, foi quem resolveu o problema de transferência de valor no ciberespaço. <a href="https://blog.fabricio.org/vamos-falar-sobre-web3/#fnref:2" title="return to article">↩</a></p></li></ol></div>]]></content:encoded></item></channel></rss>