<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Andre Garzia</title>
    <description>The latest articles on Forem by Andre Garzia (@soapdog).</description>
    <link>https://forem.com/soapdog</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F146821%2F8708e349-c66d-4f10-bf79-0d59ddeab608.jpg</url>
      <title>Forem: Andre Garzia</title>
      <link>https://forem.com/soapdog</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/soapdog"/>
    <language>en</language>
    <item>
      <title>LiveCode is a modern day HyperCard</title>
      <dc:creator>Andre Garzia</dc:creator>
      <pubDate>Mon, 29 Jul 2019 11:11:59 +0000</pubDate>
      <link>https://forem.com/soapdog/livecode-is-a-modern-day-hypercard-2l91</link>
      <guid>https://forem.com/soapdog/livecode-is-a-modern-day-hypercard-2l91</guid>
      <description>&lt;p&gt;This post is a reply to &lt;a href="http://www.loper-os.org/?p=568"&gt;Why HyperCard had to Die — by Stanislav&lt;/a&gt;. I’m not saying the post is wrong, I am just presenting an alternative that is alive and working well. &lt;a href="https://www.livecode.com"&gt;LiveCode&lt;/a&gt; is a modern day HyperCard and everyone who used HyperCard will feel at home at it.&lt;/p&gt;

&lt;p&gt;LiveCode runs on macOS, Windows and Linux and can generate standalone binaries for all those platforms plus Android and iOS. You can get it from &lt;a href="https://www.livecode.com"&gt;https://www.livecode.com&lt;/a&gt; or you can get a GPL version of it from &lt;a href="https://www.livecode.org"&gt;https://www.livecode.org&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In this post, I will recreate the demo that Stanislav created on their post which was a simple four operation calculator. I hope readers will notice how familiar the environment is and yet how modern it became.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: I work for LiveCode.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l0SMFrYv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-start-center.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l0SMFrYv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-start-center.png" alt="LiveCode Start Center"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;LiveCode Start Center&lt;/p&gt;

&lt;p&gt;The first step is to create a stack.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wb0xQNoo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-new-stack.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wb0xQNoo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-new-stack.png" alt="Creating a new stack"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creating a new stack&lt;/p&gt;

&lt;p&gt;We name it &lt;em&gt;SmallCalculator&lt;/em&gt; using the &lt;em&gt;Stack Inspector&lt;/em&gt; that is available from the menu or with the &lt;em&gt;CTRL+K&lt;/em&gt; hotkey.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qZM9GVLS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-stack-with-name.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qZM9GVLS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-stack-with-name.png" alt="Naming the stack"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Naming the stack&lt;/p&gt;

&lt;p&gt;Lets drag &amp;amp; drop a field into the stack to serve as our LCD for the calculator.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QDBGrBfo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-new-field.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QDBGrBfo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-new-field.png" alt="Drag &amp;amp; Drop an object into the stack"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Drag &amp;amp; Drop an object into the stack&lt;/p&gt;

&lt;p&gt;Be aware that just like HyperCard, we’re working with a &lt;em&gt;stacks -&amp;gt; cards -&amp;gt; objects&lt;/em&gt; metaphor. All we’re doing here is targetting &lt;em&gt;card 1&lt;/em&gt; which is the first card on the stack. When I mentioned droping a field into the stack, it is actually creating a field on &lt;em&gt;card 1 of stack “SmallCalculator”&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KHjWnv8v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-set-field-name.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KHjWnv8v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-set-field-name.png" alt="Naming the field"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Naming the field&lt;/p&gt;

&lt;p&gt;To create the buttons we also drag &amp;amp; drop from the tools palette.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b7HSdx0E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-new-button.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b7HSdx0E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-new-button.png" alt="Creating and a button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creating and a button&lt;/p&gt;

&lt;p&gt;Lets name it and use the drag handlers to resize it (much like you’d do on a graphics design program).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7jN4xg5l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-button-with-name.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7jN4xg5l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-button-with-name.png" alt="Resizing and naming the button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Resizing and naming the button&lt;/p&gt;

&lt;p&gt;After that it is time to edit the script for the button. There are multiple ways to access the script of an object. The most discoverable one is using the menus.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GlgmOEC4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-menu-object-script.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GlgmOEC4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-menu-object-script.png" alt="Accessing the object script"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Accessing the object script&lt;/p&gt;

&lt;p&gt;I’m going to try to mimic the script of the original post as much as possible. Be aware that LiveCode language has many more commands and expressions available for it than HyperCard did and the way I am building this demo is not the optimal way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---sg8jjIG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-script-editor.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---sg8jjIG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-script-editor.png" alt="Editing the script for the button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Editing the script for the button&lt;/p&gt;

&lt;p&gt;Observe that just like HyperCard, you don’t need to compile a project to use it. On the top of the tools palette there are two different arrows. One is &lt;em&gt;design mode&lt;/em&gt; and the other is &lt;em&gt;interact mode&lt;/em&gt;. You can switch modes at any time you want. If you switch now and click the button three times, you’ll see the number &lt;em&gt;111&lt;/em&gt; in the &lt;em&gt;LCD field&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Now, we’re going to copy and paste enough buttons to build the number pad of the calculator. We’ll simply use CTRL+C and CTRL+V (or their CMD equivalents on a mac) to copy and paste them. I also took some time to move the objects around.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K9J33fnT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-number-pad.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K9J33fnT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-number-pad.png" alt="The number pad of the calculator"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The number pad of the calculator&lt;/p&gt;

&lt;p&gt;The next step is creating the operations buttons and the equal button. I just used copy and paste on the number buttons and gave them a name to match the math operation. The equal button was built by dragging and droping a new button from the tools palette into the stack.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kp8iS-rB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-operations-and-equal.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kp8iS-rB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-operations-and-equal.png" alt="Calculator with operations and equal button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Calculator with operations and equal button&lt;/p&gt;

&lt;p&gt;Now, it is time to write the script for the equal button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LzDjLZYz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-script-editor-equal.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LzDjLZYz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-script-editor-equal.png" alt="Script Editor showing the script for the _equal button_"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Script Editor showing the script for the &lt;em&gt;equal button&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Lets take our calculator for a spin.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a2Y57Chc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-calculator-expression.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a2Y57Chc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-calculator-expression.png" alt="The same math expression as the demo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The same math expression as the demo&lt;/p&gt;

&lt;p&gt;And the result after pressing equal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4sch0CSm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-calculator-result.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4sch0CSm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-calculator-result.png" alt="The same result"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The same result&lt;/p&gt;

&lt;p&gt;Now, lets deviate a bit from the demo and show something HyperCard never had. From the &lt;em&gt;File menu&lt;/em&gt; I’ve accessed the &lt;em&gt;Standalone Application Settings&lt;/em&gt; to configure how this stack will be deployed. I can from my windows machine deploy to macOS, Windows, Linux and Android. I can’t deploy for iOS for obvious (Apple argh) reasons. I will build only for Windows at this time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BfMHn95O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-standalone-application-settings.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BfMHn95O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/LiveCode-standalone-application-settings.png" alt="Standalone Application Settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Standalone Application Settings&lt;/p&gt;

&lt;p&gt;And this is the Small Calulator running on windows as a standalone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---G0RsWUh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/SmallCalculator-running.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---G0RsWUh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://andregarzia.com/img/shots/SmallCalculator-running.png" alt="SmallCaltulator.exe"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SmallCaltulator.exe&lt;/p&gt;

&lt;p&gt;I hope you did enjoy this post and are curious to take LiveCode for a ride. Every couple months some post appears on &lt;a href="https://news.ycombinator.com"&gt;HN&lt;/a&gt; or &lt;a href="https://lobste.rs"&gt;lobste.rs&lt;/a&gt; about HyperCard and I see a ton of people longing for it. I wonder how many of them are aware of LiveCode. I suspect many will love it as much as I do.&lt;/p&gt;

</description>
      <category>hypercard</category>
      <category>livecode</category>
      <category>desktopapplicationdevelopment</category>
    </item>
    <item>
      <title>Loanwords, Agriculture &amp; WebAssembly</title>
      <dc:creator>Andre Garzia</dc:creator>
      <pubDate>Tue, 26 Mar 2019 09:37:08 +0000</pubDate>
      <link>https://forem.com/soapdog/loanwords-agriculture--webassembly-3a53</link>
      <guid>https://forem.com/soapdog/loanwords-agriculture--webassembly-3a53</guid>
      <description>

&lt;p&gt;&lt;iframe src="https://player.vimeo.com/video/292461893" width="710" height="399"&gt; &lt;/iframe&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
   😻💖📢🚀 Loanwords, Agriculture &amp;amp; WebAssembly 😻💖📢🚀
&lt;/h2&gt;

&lt;p&gt;This is a little talk I've given at Mozilla as part of the TechSpeaker training program. I really enjoy it and plan to develop it further. In this talk I make a case for building more languages to target the front-end or client side as a way to keep our web ecosystem fertile. It is in part a cautionary tale against monocultures and how the deprive the environment from a sustainable future and a call to action to build little languages.&lt;/p&gt;


</description>
      <category>webdev</category>
      <category>plt</category>
      <category>webassembly</category>
      <category>talk</category>
    </item>
    <item>
      <title>Playing with P2P protocols and Firefox</title>
      <dc:creator>Andre Garzia</dc:creator>
      <pubDate>Wed, 19 Dec 2018 00:43:22 +0000</pubDate>
      <link>https://forem.com/soapdog/playing-with-p2p-protocols-and-firefox-3dab</link>
      <guid>https://forem.com/soapdog/playing-with-p2p-protocols-and-firefox-3dab</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Yg3O8n6hJqI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Old browsers can learn new tricks
&lt;/h1&gt;

&lt;p&gt;It is important that we evolve the browser towards the future we want. As mentioned in the video, I am heavily invested in the decentralization space and I want a user agent that unlocks agency in me, that allows me to browse the platforms I want while remaining in control of my digital life.&lt;/p&gt;

&lt;p&gt;We can augment &lt;a href="https://www.youtube.com/watch?v=LtOGa5M8AuU"&gt;our favorite independent browser&lt;/a&gt; by using &lt;a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions"&gt;Web Extensions (in Firefox they are called Add-ons)&lt;/a&gt; to add new features to the browser including supporting whole new protocols.&lt;/p&gt;

&lt;p&gt;In this video I use the following Add-ons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/dat-p2p-protocol/"&gt;DAT P2P Protocol&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Source: &lt;a href="https://github.com/sammacbeth/dat-fox/"&gt;https://github.com/sammacbeth/dat-fox/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/ipfs-companion/"&gt;IPFS Companion&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Source: &lt;a href="https://github.com/ipfs-shipyard/ipfs-companion"&gt;https://github.com/ipfs-shipyard/ipfs-companion&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/soapdog/patchfox"&gt;Patchfox&lt;/a&gt;, which isn't ready yet, so this link is for the sources on Github.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of them take over different protocol schemas such as &lt;code&gt;dat://&lt;/code&gt; and &lt;code&gt;ipfs://&lt;/code&gt; and &lt;code&gt;ssb:&lt;/code&gt;. I &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1428446"&gt;am the author of the patch that whitelisted those protocols&lt;/a&gt; for usage in Web Extensions, so I've been wanting to be able to use such add-ons since the day I made that patch. I think we should invest more in building these types of add-ons and molding our browser experience to support the peer-to-peer web instead of shipping many different electron-based Dapps each siloed in itself.&lt;/p&gt;

&lt;h1&gt;
  
  
  Towards a user agent that fosters decentralization
&lt;/h1&gt;

&lt;p&gt;I briefly mention on the video the experimentation going on on &lt;a href="https://github.com/mozilla/libdweb"&gt;Libdweb&lt;/a&gt;. This is a WebExtension that adds new APIs for other Web Extensions (aka WebExtension Experiment) and even though it is not on track for implementation or shipping, it is a wonderful toolkit that allows us to investigate what sort of experiences we can build inside the browser if the add-on authors have access to low level APIs.&lt;/p&gt;

&lt;p&gt;Libdweb adds support for the following things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TCP Sockets&lt;/li&gt;
&lt;li&gt;UDP Datagrams&lt;/li&gt;
&lt;li&gt;Filesystem access&lt;/li&gt;
&lt;li&gt;Streams of data&lt;/li&gt;
&lt;li&gt;Custom Protocols&lt;/li&gt;
&lt;li&gt;mDNS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, using those APIs a developer can build a full IPFS or DAT node inside Firefox (this has already happened and it is awesome). Recently, as a toy, I've built &lt;a href="https://github.com/mozilla/libdweb/tree/demo-httpd/demo/httpd"&gt;a little Web Server demo&lt;/a&gt; using those APIs. It is quite empowering to see your browser transforming into a server.&lt;/p&gt;

&lt;h1&gt;
  
  
  Final thoughts and request for feedback
&lt;/h1&gt;

&lt;p&gt;So, I hope you people enjoyed this little video. I am still working on Patchfox and hope to have it in some beta state soon. Lets build the decentralized web together, all of us, inside the same user agent.&lt;/p&gt;

&lt;p&gt;Please tell me what you thought about these ideas and the video. Reach out to me on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secure Scuttlebutt: &lt;code&gt;@gaQw6z30GpfsW9k8V5ED4pHrg8zmrqku24zTSAINhRg=.ed25519&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Mastodon: &lt;a href="https://toot.cafe/@soapdog"&gt;@soapdog@toot.cafe&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter: &lt;a href="https://twitter.com/soapdog"&gt;@soapdog&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also subscribe to my &lt;a href="http://andregarzia.com/feeds/all.rss.xml"&gt;RSS feed&lt;/a&gt; and be kept up to date with what I am up to and also subscribe to my &lt;a href="https://www.youtube.com/channel/UCrZBEFp11PB7TkryjS2LWHw"&gt;YouTube channel&lt;/a&gt; to see more videos related to decentralization, programming languages and the web.&lt;/p&gt;

</description>
      <category>firefox</category>
      <category>decentralization</category>
      <category>dat</category>
      <category>ipfs</category>
    </item>
  </channel>
</rss>
