<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">

<channel>

<title>Rosano / entries tagged &#34;zero data&#34;</title>



<link>https://rosano.ca/log/tag/zero-data/</link>

<generator>Hugo</generator>

<language>en-ca</language>



<lastBuildDate>Wed, 15 Apr 2026 09:09:02 +0000</lastBuildDate>

<atom:link href="https://rosano.ca/log/tag/zero-data/feed" rel="self" type="application/rss" /><item>
  <title>introducing memo</title>
  <link>https://rosano.ca/blog/introducing-memo/</link>
  <pubDate>Wed, 15 Oct 2025 11:01:56 +0000</pubDate>
  <guid>https://rosano.ca/blog/introducing-memo/</guid>
  <description>a notepad you can&#39;t edit</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>a notepad you can't edit</nugget><hr>
<div class="content"><p>I made a small web app called <a href="https://memo.rosano.ca">memo</a> to quickly jot down points, framing it as &quot;a notepad you can't edit&quot;.</p>
<p>Similar to a piece of paper, you just note things down without editing or 'managing' much.</p>
<p>There are no buttons for each item: you can only add new things, and then copy or delete everything.</p>
<p>The interface supports routines I describe in <a href="https://rosano.ca/blog/work-then-dont/">work, then don't</a>: capture points to deal with them later without distracting from whatever's happening at the moment.</p>
<p>Coming from other note taking apps like <a href="https://simplenote.com">Simplenote</a>, Apple Notes, or even <a href="https://hyperdraft.rosano.ca">Hyperdraft</a>, it's nice to not manage conflict: &quot;did I edit that already on another device?&quot;, &quot;I synced but the changes aren't here yet&quot;, &quot;I'd rather not think about that, let me make a new one and then copy/paste between later&quot;. Here, there's no need to trust in special sync — &quot;just add and it will come together&quot;.</p>
<p>I find that 'not editing' also means 'not judging', thus allowing things to flow out as easily as possible—it can easily be cleaned up later; this is useful in brainstorming, writing long-form, and other modes.</p>
<p>So it's a little box to type in that's always ready when opening the app, and it syncronizes points to other devices, and none of the data is held hostage by me because you can bring your own storage. Great, but that's it?</p>
<p>Well, it's a 'real' app that I use everyday, but I think it's also a useful example of interoperability with other tools.</p>
<p>If you want to edit or delete individual items, you can connect the same data to this simple <a href="https://listable.5apps.com">list app</a>; the changes will sync back to memo.</p>
<p>If you like checking things off as 'done', use this <a href="https://todomvc.0data.app">todo app</a>; they will show up completed <del>(crossed out)</del> in memo.</p>
<p>Some people want to keep everything forever, like a physical journal. Maybe someone could make another app that presents a nice 'archive'.</p>
<p>This is very primitive but it feels cool that separate apps work together pretty seamlessly. It's all possible because: 1) they each let you bring your own storage, and 2) they all share a similar format.</p>
<figure>
<p><img src="https://static.rosano.ca/home/blog/2025-10-15-introducing-memo/output.gif" aria-hidden="true">
</p>
<figcaption>three little web apps, sharing a filesystem</figcaption>
</figure>
<style>
figure {
  display: flex;
  flex-direction: column;
  margin: 0;
  width: unset;
}
</style>
<p>I think it would be nice if this was normal with apps and technology. The web is full of people making fun little tools but they're not connected to data in other places; I tend to imagine that by simply tweaking them to read and write data this way, we get some very cool new possibilities, and even give older projects new potential without much change.</p>
<p>Having different tools to deal with the same data is useful as an 'app user', but I love it as an 'app developer' because interop simplifies my life: I don't need to build <em>all</em> the features in my app — other apps can fill the gap, and together, we share one growing base of people who mix them in their workflows.</p>
<p>Try <a href="https://memo.rosano.ca">memo</a> or the <a href="https://todos-interop.0data.app">interop demo</a> and let me know what comes to mind.</p>
</div><p>
	<small>Tagged: <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/interop/">interop</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 12:01 pm, October 15, 2025" href="/blog/introducing-memo/"><time datetime="2025-10-15T12:01:56&#43;01:00" data-pagefind-sort="date[datetime]">12h01</time></a>

		
		<span>from <a href="/log/place/porto/">Porto</a> / </span>

		<span><a href="/log/country/portugal/">Portugal</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Wednesday, October 15, 2025 12h01</title>
  <link>https://rosano.ca/log/2025-10-15-introducing-memo/</link>
  <pubDate>Wed, 15 Oct 2025 12:01:56 +0100</pubDate>
  <guid>https://rosano.ca/log/2025-10-15-introducing-memo/</guid>
  <description>I made a small web app called memo to quickly jot down points, framing it as &amp;quot;a notepad you can&#39;t edit&amp;quot;.&#xA;Similar to a piece of paper, you just note things down without editing or &#39;managing&#39; much.&#xA;There are no buttons for each item: you can only add new things, and then copy or delete everything.&#xA;The interface supports routines I describe in work, then don&#39;t: capture points to deal with them later without distracting from whatever&#39;s happening at the moment.&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><p>I made a small web app called <a href="https://memo.rosano.ca">memo</a> to quickly jot down points, framing it as &quot;a notepad you can't edit&quot;.</p>
<p>Similar to a piece of paper, you just note things down without editing or 'managing' much.</p>
<p>There are no buttons for each item: you can only add new things, and then copy or delete everything.</p>
<p>The interface supports routines I describe in <a href="https://rosano.ca/blog/work-then-dont/">work, then don't</a>: capture points to deal with them later without distracting from whatever's happening at the moment.</p></nugget><hr>
<div class="content"><p>I made a small web app called <a href="https://memo.rosano.ca">memo</a> to quickly jot down points, framing it as &quot;a notepad you can't edit&quot;.</p>
<p>Similar to a piece of paper, you just note things down without editing or 'managing' much.</p>
<p>There are no buttons for each item: you can only add new things, and then copy or delete everything.</p>
<p>The interface supports routines I describe in <a href="https://rosano.ca/blog/work-then-dont/">work, then don't</a>: capture points to deal with them later without distracting from whatever's happening at the moment.</p>
<p>Coming from other note taking apps like <a href="https://simplenote.com">Simplenote</a>, Apple Notes, or even <a href="https://hyperdraft.rosano.ca">Hyperdraft</a>, it's nice to not manage conflict: &quot;did I edit that already on another device?&quot;, &quot;I synced but the changes aren't here yet&quot;, &quot;I'd rather not think about that, let me make a new one and then copy/paste between later&quot;. Here, there's no need to trust in special sync — &quot;just add and it will come together&quot;.</p>
<p>I find that 'not editing' also means 'not judging', thus allowing things to flow out as easily as possible—it can easily be cleaned up later; this is useful in brainstorming, writing long-form, and other modes.</p>
<p>So it's a little box to type in that's always ready when opening the app, and it syncronizes points to other devices, and none of the data is held hostage by me because you can bring your own storage. Great, but that's it?</p>
<p>Well, it's a 'real' app that I use everyday, but I think it's also a useful example of interoperability with other tools.</p>
<p>If you want to edit or delete individual items, you can connect the same data to this simple <a href="https://listable.5apps.com">list app</a>; the changes will sync back to memo.</p>
<p>If you like checking things off as 'done', use this <a href="https://todomvc.0data.app">todo app</a>; they will show up completed <del>(crossed out)</del> in memo.</p>
<p>Some people want to keep everything forever, like a physical journal. Maybe someone could make another app that presents a nice 'archive'.</p>
<p>This is very primitive but it feels cool that separate apps work together pretty seamlessly. It's all possible because: 1) they each let you bring your own storage, and 2) they all share a similar format.</p>
<figure>
<p><img src="https://static.rosano.ca/home/timeline/2025-10-15-introducing-memo1760526116/output.gif" aria-hidden="true">
</p>
<figcaption>three little web apps, sharing a filesystem</figcaption>
</figure>
<style>
figure {
  display: flex;
  flex-direction: column;
  margin: 0;
  width: unset;
}
</style>
<p>I think it would be nice if this was normal with apps and technology. The web is full of people making fun little tools but they're not connected to data in other places; I tend to imagine that by simply tweaking them to read and write data this way, we get some very cool new possibilities, and even give older projects new potential without much change.</p>
<p>Having different tools to deal with the same data is useful as an 'app user', but I love it as an 'app developer' because interop simplifies my life: I don't need to build <em>all</em> the features in my app — other apps can fill the gap, and together, we share one growing base of people who mix them in their workflows.</p>
<p>Try <a href="https://memo.rosano.ca">memo</a> or the <a href="https://todos-interop.0data.app">interop demo</a> and let me know what comes to mind.</p>
</div><p>
	<small>Tagged: <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/interop/">interop</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 12:01 pm, October 15, 2025" href="/log/2025-10-15-introducing-memo/"><time datetime="2025-10-15T12:01:56&#43;01:00" data-pagefind-sort="date[datetime]">12h01</time></a>

		
		<span>from <a href="/log/place/porto/">Porto</a> / </span>

		<span><a href="/log/country/portugal/">Portugal</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>fun with redirects</title>
  <link>https://rosano.ca/blog/fun-with-redirects/</link>
  <pubDate>Mon, 18 Mar 2024 12:23:11 +0000</pubDate>
  <guid>https://rosano.ca/blog/fun-with-redirects/</guid>
  <description>Owning my URLs and avoiding link rot since 2012.</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>Owning my URLs and avoiding link rot since 2012.</nugget><hr>
<div class="content"><blockquote>
<p>If you have a website, what are your earliest meaningful links that still work? I have almost no broken links at least since 2012 because I usually add a redirect whenever something changes.</p></blockquote>
<p>Redirects help links in a healthy web <a href="https://www.w3.org/Provider/Style/URI">resolve</a>, avoid <a href="https://en.wikipedia.org/wiki/Link%5Frot">rot</a>, and <a href="https://worrydream.com/TheWebOfAlexandria">last a long time</a>, but they also increase agency by letting own your data (own your URLs).</p>
<h1 id="own-your-links">own your links</h1>
<p>When I link to a platform I don't control, I try to at least use a URL that I do control. I have found this useful in recent years when switching my newsletter provider (<a href="https://rosano.ca/list">/list</a>), Mastodon instance (<a href="https://rosano.ca/mastodon">/mastodon</a>), or crowdfunding platform (<a href="https://rosano.ca/fund">/fund</a>)–I didn't have to change any links when that happened.</p>
<p>I'm considering even my Twitter account (<a href="https://rosano.ca/twitter">/twitter</a> in case the site goes bankrupt, and GitHub repositories (<a href="https://rosano.ca/hyperdraft-source">/hyperdraft-source</a>) or YouTube videos (<a href="https://rosano.ca/strolling-0172-video">/strolling-0172-video</a>) in case I start self-hosting; neither has happened yet, but if it occurs, I can easily update the destination once and point it somewhere else retroactively.</p>
<h1 id="self-hosting-a-link-manager">self-hosting a link manager</h1>
<figure>
	<img src="https://static.rosano.ca/home/blog/2024-03-18-fun-with-redirects/yourls.png"/>
	<figcaption>about 300 links managed with YOURLS</figcaption>
</figure>
<p>My links tend to be readable, but I like Derek Sivers' idea of making them <a href="https://sive.rs/su">short and speakable</a>. I use <a href="https://yourls.org">YOURLS</a> one-click self-hosted via <a href="https://www.cloudron.io">Cloudron</a> to manage my redirects which makes it easy to have both short and speakable if necessary; the links technically are something like <code>go.rosano.ca/whatever</code>, but because I own the data, I can make it further accessible under my root domain, as <code>rosano.ca/whatever</code> is often shortest, simplest, and most memorable. I also do the same contraction with blog permalinks so that <code>utopia.rosano.ca/interoperable-visions/</code> can be accessed at <code>rosano.ca/interoperable-visions</code>; I stick with <a href="https://ghost.org">Ghost</a>'s simple permalinks design of <code>/post-title-as-a-slug</code> and find it more readable and predictable.</p>
<h1 id="self-hosting-legacy-redirection">self-hosting legacy redirection</h1>
<p>For legacy domains and permalinks, I made a simple <a href="https://github.com/rosano/redirects/blob/master/main.js">single-file Node.js Express app</a> (<code>git push</code> self-hosted via <a href="https://caprover.com">CapRover</a>). There are about two dozen domains pointing to the same app to handle:</p>
<ol>
<li><a href="https://github.com/rosano/redirects/commit/3ed596df0fb4cebe5d32c231b4aecd44de091bbd">removing www.</a></li>
<li><a href="https://github.com/rosano/redirects/commit/52bf5d6ffe8dde9faadc0d71a524d76ec70be8ee">correcting old and mispelled domains</a></li>
<li><a href="https://github.com/rosano/redirects/commit/fbab1be533fc64ed01c0611b630eadb89c59e2a9">redirecting archived projects to a single page</a></li>
<li><a href="https://github.com/rosano/redirects/commit/43eeee14874ded0c16be6e82fcfd786fad4caf22">masking a domain that functions as a landing page</a></li>
<li><a href="https://github.com/rosano/redirects/commit/8a4ce8ed0c309dd4a40c57477e5df80d6fc2ba4f">redirecting PeerTube links to YouTube</a></li>
<li><a href="https://github.com/rosano/redirects/commit/41786338aee47c59e08ed6a7e03fd9a3b715c54e">redirecting gibberish slugs to friendly slugs</a></li>
<li><a href="https://github.com/rosano/redirects/commit/47a9439a5d523ea4cbbc6257e4e40e995c75dd8d">redirecting to the Wayback Machine</a> as a last resort, (but I may have done this one incorrectly, as it might cause some recursive issues).</li>
</ol>
<p>This is hopefully a graceful degradation that takes care to guide existing links somewhere useful. It also supports HTTPS so if you write <code>https://[OLD_DOMAIN]</code> it works, which is not the case when you 'forward' URLs via registrars like <a href="https://www.hover.com">Hover</a> who only support writing <code>http://[OLD_DOMAIN]</code>.</p>
<h1 id="static-versus-dynamic">static versus dynamic</h1>
<p>I love the simplicity of static sites and how they're basically free to keep alive forever, but all of my redirect pipework makes me feel forever tied to dynamic systems. It's possible to redirect via <a href="https://www.w3.org/TR/WCAG20-TECHS/H76.html">meta refresh</a> on a static page but I find it ugly to write and manage with HTML; I'm also not sure if all search engines understand them, although <a href="https://developers.google.com/search/docs/crawling-indexing/special-tags#refresh">Google claims to yet still recommends server-side redirects</a>:</p>
<blockquote>
<p>This tag, commonly called meta-refresh, sends the user to a new URL after a certain amount of time, and is sometimes used as a simple form of redirection. However, it is <a href="https://www.w3.org/TR/WCAG10-HTML-TECHS/#meta-element">not supported by all browsers and can be confusing to the user</a>. We recommend using a server-side <a href="https://developers.google.com/search/docs/crawling-indexing/301-redirects">301 redirect</a> instead.</p></blockquote>
<h1 id="conclusion">conclusion</h1>
<p>Maybe it's the librarian in me that finds it fun to have my stuff organized and moving along smoothly. I like the sense of ownership that comes with being able to direct links where I want, and the care to avoid throwing visitors into the weeds by making sure they land somewhere useful, always and forever.</p>
<hr>
	<p><small>If you want to keep reading, learn about the difference between fragile data and <a href="https://utopia.rosano.ca/durable-data/">durable data</a>, dream some <a href="https://utopia.rosano.ca/pointing-at-the-wrong-thing/">interoperable visions</a> with me, or marvel at how the person who wrote this needed <a href="https://utopia.rosano.ca/sixth-times-a-charm/">six tries to learn iPhone programming</a>.</small></p>
	<hr></div><p>
	<small>Tagged: <a href="/log/tag/technical/">technical</a>, <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/self-hosting/">self-hosting</a>, <a href="/log/tag/interop/">interop</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 8:23 am, March 18, 2024" href="/blog/fun-with-redirects/"><time datetime="2024-03-18T08:23:11-04:00" data-pagefind-sort="date[datetime]">08h23</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Monday, March 18, 2024 08h23</title>
  <link>https://rosano.ca/log/2024-03-18-fun-with-redirects/</link>
  <pubDate>Mon, 18 Mar 2024 08:23:11 -0400</pubDate>
  <guid>https://rosano.ca/log/2024-03-18-fun-with-redirects/</guid>
  <description> If you have a website, what are your earliest meaningful links that still work? I have almost no broken links at least since 2012 because I usually add a redirect whenever something changes.&#xA;Redirects help links in a healthy web resolve, avoid rot, and last a long time, but they also increase agency by letting own your data (own your URLs).&#xA;own your links When I link to a platform I don&#39;t control, I try to at least use a URL that I do control. I have found this useful in recent years when switching my newsletter provider (/list), Mastodon instance (/mastodon), or crowdfunding platform (/fund)–I didn&#39;t have to change any links when that happened.&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><blockquote>
<p>If you have a website, what are your earliest meaningful links that still work? I have almost no broken links at least since 2012 because I usually add a redirect whenever something changes.</p></blockquote>
<p>Redirects help links in a healthy web <a href="https://www.w3.org/Provider/Style/URI">resolve</a>, avoid <a href="https://en.wikipedia.org/wiki/Link%5Frot">rot</a>, and <a href="https://worrydream.com/TheWebOfAlexandria">last a long time</a>, but they also increase agency by letting own your data (own your URLs).</p>
<h1 id="own-your-links">own your links</h1>
<p>When I link to a platform I don't control, I try to at least use a URL that I do control. I have found this useful in recent years when switching my newsletter provider (<a href="https://rosano.ca/list">/list</a>), Mastodon instance (<a href="https://rosano.ca/mastodon">/mastodon</a>), or crowdfunding platform (<a href="https://rosano.ca/fund">/fund</a>)–I didn't have to change any links when that happened.</p></nugget><hr>
<div class="content"><blockquote>
<p>If you have a website, what are your earliest meaningful links that still work? I have almost no broken links at least since 2012 because I usually add a redirect whenever something changes.</p></blockquote>
<p>Redirects help links in a healthy web <a href="https://www.w3.org/Provider/Style/URI">resolve</a>, avoid <a href="https://en.wikipedia.org/wiki/Link%5Frot">rot</a>, and <a href="https://worrydream.com/TheWebOfAlexandria">last a long time</a>, but they also increase agency by letting own your data (own your URLs).</p>
<h1 id="own-your-links">own your links</h1>
<p>When I link to a platform I don't control, I try to at least use a URL that I do control. I have found this useful in recent years when switching my newsletter provider (<a href="https://rosano.ca/list">/list</a>), Mastodon instance (<a href="https://rosano.ca/mastodon">/mastodon</a>), or crowdfunding platform (<a href="https://rosano.ca/fund">/fund</a>)–I didn't have to change any links when that happened.</p>
<p>I'm considering even my Twitter account (<a href="https://rosano.ca/twitter">/twitter</a> in case the site goes bankrupt, and GitHub repositories (<a href="https://rosano.ca/hyperdraft-source">/hyperdraft-source</a>) or YouTube videos (<a href="https://rosano.ca/strolling-0172-video">/strolling-0172-video</a>) in case I start self-hosting; neither has happened yet, but if it occurs, I can easily update the destination once and point it somewhere else retroactively.</p>
<h1 id="self-hosting-a-link-manager">self-hosting a link manager</h1>
<figure>
	<img src="https://static.rosano.ca/home/blog/2024-03-18-fun-with-redirects/yourls.png"/>
	<figcaption>about 300 links managed with YOURLS</figcaption>
</figure>
<p>My links tend to be readable, but I like Derek Sivers' idea of making them <a href="https://sive.rs/su">short and speakable</a>. I use <a href="https://yourls.org">YOURLS</a> one-click self-hosted via <a href="https://www.cloudron.io">Cloudron</a> to manage my redirects which makes it easy to have both short and speakable if necessary; the links technically are something like <code>go.rosano.ca/whatever</code>, but because I own the data, I can make it further accessible under my root domain, as <code>rosano.ca/whatever</code> is often shortest, simplest, and most memorable. I also do the same contraction with blog permalinks so that <code>utopia.rosano.ca/interoperable-visions/</code> can be accessed at <code>rosano.ca/interoperable-visions</code>; I stick with <a href="https://ghost.org">Ghost</a>'s simple permalinks design of <code>/post-title-as-a-slug</code> and find it more readable and predictable.</p>
<h1 id="self-hosting-legacy-redirection">self-hosting legacy redirection</h1>
<p>For legacy domains and permalinks, I made a simple <a href="https://github.com/rosano/redirects/blob/master/main.js">single-file Node.js Express app</a> (<code>git push</code> self-hosted via <a href="https://caprover.com">CapRover</a>). There are about two dozen domains pointing to the same app to handle:</p>
<ol>
<li><a href="https://github.com/rosano/redirects/commit/3ed596df0fb4cebe5d32c231b4aecd44de091bbd">removing www.</a></li>
<li><a href="https://github.com/rosano/redirects/commit/52bf5d6ffe8dde9faadc0d71a524d76ec70be8ee">correcting old and mispelled domains</a></li>
<li><a href="https://github.com/rosano/redirects/commit/fbab1be533fc64ed01c0611b630eadb89c59e2a9">redirecting archived projects to a single page</a></li>
<li><a href="https://github.com/rosano/redirects/commit/43eeee14874ded0c16be6e82fcfd786fad4caf22">masking a domain that functions as a landing page</a></li>
<li><a href="https://github.com/rosano/redirects/commit/8a4ce8ed0c309dd4a40c57477e5df80d6fc2ba4f">redirecting PeerTube links to YouTube</a></li>
<li><a href="https://github.com/rosano/redirects/commit/41786338aee47c59e08ed6a7e03fd9a3b715c54e">redirecting gibberish slugs to friendly slugs</a></li>
<li><a href="https://github.com/rosano/redirects/commit/47a9439a5d523ea4cbbc6257e4e40e995c75dd8d">redirecting to the Wayback Machine</a> as a last resort, (but I may have done this one incorrectly, as it might cause some recursive issues).</li>
</ol>
<p>This is hopefully a graceful degradation that takes care to guide existing links somewhere useful. It also supports HTTPS so if you write <code>https://[OLD_DOMAIN]</code> it works, which is not the case when you 'forward' URLs via registrars like <a href="https://www.hover.com">Hover</a> who only support writing <code>http://[OLD_DOMAIN]</code>.</p>
<h1 id="static-versus-dynamic">static versus dynamic</h1>
<p>I love the simplicity of static sites and how they're basically free to keep alive forever, but all of my redirect pipework makes me feel forever tied to dynamic systems. It's possible to redirect via <a href="https://www.w3.org/TR/WCAG20-TECHS/H76.html">meta refresh</a> on a static page but I find it ugly to write and manage with HTML; I'm also not sure if all search engines understand them, although <a href="https://developers.google.com/search/docs/crawling-indexing/special-tags#refresh">Google claims to yet still recommends server-side redirects</a>:</p>
<blockquote>
<p>This tag, commonly called meta-refresh, sends the user to a new URL after a certain amount of time, and is sometimes used as a simple form of redirection. However, it is <a href="https://www.w3.org/TR/WCAG10-HTML-TECHS/#meta-element">not supported by all browsers and can be confusing to the user</a>. We recommend using a server-side <a href="https://developers.google.com/search/docs/crawling-indexing/301-redirects">301 redirect</a> instead.</p></blockquote>
<h1 id="conclusion">conclusion</h1>
<p>Maybe it's the librarian in me that finds it fun to have my stuff organized and moving along smoothly. I like the sense of ownership that comes with being able to direct links where I want, and the care to avoid throwing visitors into the weeds by making sure they land somewhere useful, always and forever.</p>
<hr>
	<p><small>If you want to keep reading, learn about the difference between fragile data and <a href="https://utopia.rosano.ca/durable-data/">durable data</a>, dream some <a href="https://utopia.rosano.ca/pointing-at-the-wrong-thing/">interoperable visions</a> with me, or marvel at how the person who wrote this needed <a href="https://utopia.rosano.ca/sixth-times-a-charm/">six tries to learn iPhone programming</a>.</small></p>
	<hr></div><p>
	<small>Tagged: <a href="/log/tag/technical/">technical</a>, <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/self-hosting/">self-hosting</a>, <a href="/log/tag/interop/">interop</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 8:23 am, March 18, 2024" href="/log/2024-03-18-fun-with-redirects/"><time datetime="2024-03-18T08:23:11-04:00" data-pagefind-sort="date[datetime]">08h23</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>durable data</title>
  <link>https://rosano.ca/blog/durable-data/</link>
  <pubDate>Wed, 21 Feb 2024 14:24:24 +0000</pubDate>
  <guid>https://rosano.ca/blog/durable-data/</guid>
  <description>Data ownership baked into how the system works, no goodwill needed, making people feel safe as in a long-term relationship.</description>
  <content:encoded><![CDATA[
  <div class="post">

<p class="feature-image"><img src="https://static.rosano.ca/home/tags/zero-data/test.jpg" aria-hidden="true"></p><nugget>Data ownership baked into how the system works, no goodwill needed, making people feel safe as in a long-term relationship.</nugget><hr>
<div class="content"><p>After the experiences that prompted my <a href="https://utopia.rosano.ca/encryption-rant/">encryption rant</a>, I have started to notice other moments when my digital stuff seems precarious, fleeting, as if slipping out of my hands; I hope to describe this a little and then consider some solutions.</p>
<h1 id="fragile-data">fragile data</h1>
<p>Encrypted messaging apps (like Signal and WhatsApp) can be <a href="https://utopia.rosano.ca/encryption-rant/">volatile</a>: you can easily lose access to your conversations; messages can fail to sync or deliver; your data might be secure with encryption, yet still trapped in an app.</p>
<p><a href="https://www.beeper.com">Beeper</a> and <a href="https://texts.com">Texts</a> help bring your messaging app data in one place, but export is not yet possible, even with open-source <a href="https://element.io">Element</a> and the half dozen <a href="https://matrix.org">Matrix</a> clients I've tried.</p>
<p>Platforms (like Discord, Slack, Telegram, or Facebook) don't let you own your messages: their systems can go offline and temporarily obstruct access; one of your contacts can delete their account and disappear your correspondence; smaller ones get <a href="https://ourincrediblejourney.tumblr.com">acquired or shut down</a>; you can only hope to get your data out or somewhere useful; your 'permalinks' (which you didn't own or control) break (remember that <a href="https://www.w3.org/Provider/Style/URI">cool URLs don't change</a>).</p>
<p>Microblogging platforms make it hard to own your posts: Twitter oscillates in states of chaos; Mastodon (or ActivityPub) ties them to whichever server you published from; Bluesky claims to let you move your data, but somehow it's not directly tangible.</p>
<p>Self-hosting gives you more control, but you still might end up losing stuff to 'export'. <a href="https://discourse.org">Discourse</a> will give you SQL that has 'everything', which you need technical expertise to 'do something'; <a href="https://datasette.io">Datasette</a> can be helpful to browse what you have and maybe convert to more accessible formats. <a href="https://ghost.org">Ghost</a> claims creators get &quot;access to 100% of their data&quot;, and WordPress claims you can &quot;Own your data, all of it&quot;, but both their exports only include what <em>they</em> consider important; to actually get 'everything', you need to have systems administrator expertise to export SQL and download your images or attachments, then more expertise once you have all that and want to 'do something'. <a href="https://twitter.com/andy%5Fmatuschak/status/1452438176996347907">Consider export harmful</a> unless proven otherwise.</p>
<p>I've been enthusiastic about <a href="https://0data.app">personal data stores</a>, but can admit it doesn't feel like it's <a href="https://utopia.rosano.ca/interoperable-visions/#there-but-invisible">in my hands</a>.</p>
<hr>
<p>Let's summarize 'fragile data' as:</p>
<ul>
<li>volatile access</li>
<li>limited or no export</li>
<li>data tied to a provider</li>
<li>unusable formats (needing technical expertise)</li>
<li>hard to see or manipulate data directly</li>
</ul>
<h1 id="durable-data">durable data</h1>
<p>I want to stop my stuff slipping out of reach as platforms change, depending on companies to stay around and hold it for me, or losing it to 'security', 'encryption', and 'export'. I want to have all my correspondence, publishing, and data, forever, defragmented from various networks and apps. I want to search my archive. I want to avoid being tied to a risky provider or format.</p>
<p>So far, the options that feel durable to me are email, files, Delta Chat, and git: they all continue to work, are supported by older systems and diverse new ones, and enable interesting possibilities via interop; the closest to 'future-proof' that I'm aware of.</p>
<h2 id="email">email</h2>
<p>Email will likely be around <a href="https://en.wikipedia.org/wiki/Lindy%5Feffect">for at least as long as it has been around</a> and remains ubiquitous and accessible to more people than any other data storage system. You can take your messages with you, switch providers, interact with everything in a variety of apps and clients.</p>
<p>Too bad many associate it with 'transactional B.S. from startups', 'marketing offers', 'newsletters one can't unsubscribe to', '10,000+ unread and no way to process'. Comprehensive solutions to <a href="https://en.wikipedia.org/wiki/Information%5Foverload">information overload</a> would be beyond the scope of what I'm writing (off the cuff, I can think of <a href="https://www.hey.com">technical</a>, <a href="https://calmtech.com">philosophical</a>, <a href="https://en.wikipedia.org/wiki/Email%5Fbankruptcy">social</a>, and <a href="https://en.wikipedia.org/wiki/Right%5Fto%5Fdisconnect">political</a> ones), but even if your main account isn't usable, it's easy and basically free to create a quiet new one to play with possibilities.</p>
<p>Email is a nice way to store data associated with a specific moment in time without considering how to structure files or tag items. Sometimes when I research an answer that I likely won't need anymore, I send myself an email instead of putting it in my notes. I would love to have a rich summary of activity on various platforms periodically archived there to maintain my history. Gmail used to harmonize chats and email by archiving and automatically grouping messages by conversation.</p>
<p>Email means copies. Using platforms with their own messaging system relies on the site to be online and hold your messages, while it's also possible for them to go offline (temporarily or permanently), erase data of someone who deletes their account, and sell or get acquired (sending your data who knows where). I used to delete emails with 'messages' sent on these platforms, but now I keep them as I don't trust the platform to do it for me.</p>
<p>Email is the original 'all your stuff in one place that you control', and as long it's designed to protect and respect your attention, it can serve an important function in supporting more durable data.</p>
<h2 id="files">files</h2>
<p>I don't like managing files and consider them a holdover from an older time, preferring interoperable apps (ideally as <a href="https://utopia.rosano.ca/interoperable-visions/#flexibility-through-pluralism">pluralistic lenses on data</a>), yet they remain a useful <a href="https://stephango.com/file-over-app">response to ephemeral software</a>. Files let you <a href="https://www.geoffreylitt.com/2021/03/05/bring-your-own-client.html">choose how to use them</a>, and can be moved between different devices or storage providers.</p>
<p>I don't like hand-editing CSV, reading JSON or XML or HTML, but I'll be able to 'do something' with them probably forever. Plaintext is the way to my heart, and also one of the most interoperable types out there.</p>
<p>There are so many common formats and it's not easy to get an ecosystem to agree on which ones to use. Despite their limitations, having the data stored this way liberates it from any app. Your data could be available in these formats through export or integrations, but ultimately the app developer chooses whether to make that available; some solutions could be to ask people nicely, pressure companies publicly, or <a href="https://beepb00p.xyz/myinfra.html">take it ourselves</a>.</p>
<h2 id="delta-chat">Delta Chat</h2>
<p>(Disclosure: I've done paid work in the past to help with this project. I write my own opinions here to describe how it relates to durable data.)</p>
<p><a href="https://delta.chat">Delta Chat</a> uses your existing email account as a messaging app, and lets you do many things you'd want to do with apps like Signal and WhatsApp.</p>
<p>Unlike other messaging apps: you can move your messages between providers as easily as email; if the app goes away or stops working, you'll still have access to your messages (even if encrypted); it can help defragment your social graph across various platforms; it supports <a href="https://webxdc.org">webxdc</a> as an emerging way to do 'app things', including collaboration; it requires no permission, no company, and &quot;no coins&quot; to participate.</p>
<p>As documented in <a href="https://utopia.rosano.ca/encryption-rant/">encryption rant</a>, it's easy to transfer devices and never leaves me with the feeling that my messages will disappear. And because the data is stored in my email account, it's not dependent on any app, including Delta Chat itself.</p>
<p>It's basically as durable as email, with extra features and benefits: one approach to 'email without crap'.</p>
<h2 id="git-and-github">git and GitHub</h2>
<p>GitHub still leans technical but is becoming increasingly accessible.</p>
<p>It turns git into version control you can see and lets you edit directly on the site without installing apps.</p>
<p>There are virtually infinite integrations and automations available.</p>
<p>Backup, replication, and copies are built into the underlying technology.</p>
<p>Git enables <a href="https://subconscious.substack.com/p/credible-exit">credible exit</a> from GitHub so you can take your files with you.</p>
<p>It's also collaborative and doesn't rely on a specific app's format of version control.</p>
<p>Connecting <a href="https://utopia.rosano.ca/github-as-storage/">GitHub as the storage backend</a> for apps would be a powerful way to enable backup and sync to multiple devices.</p>
<h1 id="building-for-ownership">building for ownership</h1>
<p>There's a reason why <a href="https://0data.app">Zero Data</a> defines data ownership specifically to mean 'having access without export or permission'. In the sea of shiny features advertised by apps, startups, and projects, it can be confusing to understand whether you actually have or own your stuff in the end.</p>
<p>'Encryption' helps avoid unauthorized access, but <a href="https://utopia.rosano.ca/encryption-rant/">your data could easily disappear</a>.</p>
<p>Many efforts that use the '<a href="https://www.inkandswitch.com/local-first/">local-first</a>' label focus on 'working offline', 'sync', and 'collaboration via CRDTs' without consideration for the seventh ideal of data ownership (perhaps leaving some company holding the data); in this way, plenty of Apple software could be misunderstood as 'local-first' while locking data into their ecosystem; <a href="https://dxos.org">DXOS</a> is the closest I've seen to doing local-first right.</p>
<p>Ideally, data ownership is not a coincidental byproduct of someone's goodwill, but rather baked into how the system works. It should go beyond a technical concept to make people feel safe and able to trust the space as they might in a long-term relationship.</p>
</div><p>
	<small>Tagged: <a href="/log/tag/technical/">technical</a>, <a href="/log/tag/interop/">interop</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 9:24 am, February 21, 2024" href="/blog/durable-data/"><time datetime="2024-02-21T09:24:24-05:00" data-pagefind-sort="date[datetime]">09h24</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Wednesday, February 21, 2024 09h24</title>
  <link>https://rosano.ca/log/2024-02-21-durable-data/</link>
  <pubDate>Wed, 21 Feb 2024 09:24:24 -0500</pubDate>
  <guid>https://rosano.ca/log/2024-02-21-durable-data/</guid>
  <description>After the experiences that prompted my encryption rant, I have started to notice other moments when my digital stuff seems precarious, fleeting, as if slipping out of my hands; I hope to describe this a little and then consider some solutions.&#xA;fragile data Encrypted messaging apps (like Signal and WhatsApp) can be volatile: you can easily lose access to your conversations; messages can fail to sync or deliver; your data might be secure with encryption, yet still trapped in an app.&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">

<p class="feature-image"><img src="https://static.rosano.ca/home/tags/zero-data/test.jpg" aria-hidden="true"></p><nugget><p>After the experiences that prompted my <a href="https://utopia.rosano.ca/encryption-rant/">encryption rant</a>, I have started to notice other moments when my digital stuff seems precarious, fleeting, as if slipping out of my hands; I hope to describe this a little and then consider some solutions.</p>
<h1 id="fragile-data">fragile data</h1>
<p>Encrypted messaging apps (like Signal and WhatsApp) can be <a href="https://utopia.rosano.ca/encryption-rant/">volatile</a>: you can easily lose access to your conversations; messages can fail to sync or deliver; your data might be secure with encryption, yet still trapped in an app.</p></nugget><hr>
<div class="content"><p>After the experiences that prompted my <a href="https://utopia.rosano.ca/encryption-rant/">encryption rant</a>, I have started to notice other moments when my digital stuff seems precarious, fleeting, as if slipping out of my hands; I hope to describe this a little and then consider some solutions.</p>
<h1 id="fragile-data">fragile data</h1>
<p>Encrypted messaging apps (like Signal and WhatsApp) can be <a href="https://utopia.rosano.ca/encryption-rant/">volatile</a>: you can easily lose access to your conversations; messages can fail to sync or deliver; your data might be secure with encryption, yet still trapped in an app.</p>
<p><a href="https://www.beeper.com">Beeper</a> and <a href="https://texts.com">Texts</a> help bring your messaging app data in one place, but export is not yet possible, even with open-source <a href="https://element.io">Element</a> and the half dozen <a href="https://matrix.org">Matrix</a> clients I've tried.</p>
<p>Platforms (like Discord, Slack, Telegram, or Facebook) don't let you own your messages: their systems can go offline and temporarily obstruct access; one of your contacts can delete their account and disappear your correspondence; smaller ones get <a href="https://ourincrediblejourney.tumblr.com">acquired or shut down</a>; you can only hope to get your data out or somewhere useful; your 'permalinks' (which you didn't own or control) break (remember that <a href="https://www.w3.org/Provider/Style/URI">cool URLs don't change</a>).</p>
<p>Microblogging platforms make it hard to own your posts: Twitter oscillates in states of chaos; Mastodon (or ActivityPub) ties them to whichever server you published from; Bluesky claims to let you move your data, but somehow it's not directly tangible.</p>
<p>Self-hosting gives you more control, but you still might end up losing stuff to 'export'. <a href="https://discourse.org">Discourse</a> will give you SQL that has 'everything', which you need technical expertise to 'do something'; <a href="https://datasette.io">Datasette</a> can be helpful to browse what you have and maybe convert to more accessible formats. <a href="https://ghost.org">Ghost</a> claims creators get &quot;access to 100% of their data&quot;, and WordPress claims you can &quot;Own your data, all of it&quot;, but both their exports only include what <em>they</em> consider important; to actually get 'everything', you need to have systems administrator expertise to export SQL and download your images or attachments, then more expertise once you have all that and want to 'do something'. <a href="https://twitter.com/andy%5Fmatuschak/status/1452438176996347907">Consider export harmful</a> unless proven otherwise.</p>
<p>I've been enthusiastic about <a href="https://0data.app">personal data stores</a>, but can admit it doesn't feel like it's <a href="https://utopia.rosano.ca/interoperable-visions/#there-but-invisible">in my hands</a>.</p>
<hr>
<p>Let's summarize 'fragile data' as:</p>
<ul>
<li>volatile access</li>
<li>limited or no export</li>
<li>data tied to a provider</li>
<li>unusable formats (needing technical expertise)</li>
<li>hard to see or manipulate data directly</li>
</ul>
<h1 id="durable-data">durable data</h1>
<p>I want to stop my stuff slipping out of reach as platforms change, depending on companies to stay around and hold it for me, or losing it to 'security', 'encryption', and 'export'. I want to have all my correspondence, publishing, and data, forever, defragmented from various networks and apps. I want to search my archive. I want to avoid being tied to a risky provider or format.</p>
<p>So far, the options that feel durable to me are email, files, Delta Chat, and git: they all continue to work, are supported by older systems and diverse new ones, and enable interesting possibilities via interop; the closest to 'future-proof' that I'm aware of.</p>
<h2 id="email">email</h2>
<p>Email will likely be around <a href="https://en.wikipedia.org/wiki/Lindy%5Feffect">for at least as long as it has been around</a> and remains ubiquitous and accessible to more people than any other data storage system. You can take your messages with you, switch providers, interact with everything in a variety of apps and clients.</p>
<p>Too bad many associate it with 'transactional B.S. from startups', 'marketing offers', 'newsletters one can't unsubscribe to', '10,000+ unread and no way to process'. Comprehensive solutions to <a href="https://en.wikipedia.org/wiki/Information%5Foverload">information overload</a> would be beyond the scope of what I'm writing (off the cuff, I can think of <a href="https://www.hey.com">technical</a>, <a href="https://calmtech.com">philosophical</a>, <a href="https://en.wikipedia.org/wiki/Email%5Fbankruptcy">social</a>, and <a href="https://en.wikipedia.org/wiki/Right%5Fto%5Fdisconnect">political</a> ones), but even if your main account isn't usable, it's easy and basically free to create a quiet new one to play with possibilities.</p>
<p>Email is a nice way to store data associated with a specific moment in time without considering how to structure files or tag items. Sometimes when I research an answer that I likely won't need anymore, I send myself an email instead of putting it in my notes. I would love to have a rich summary of activity on various platforms periodically archived there to maintain my history. Gmail used to harmonize chats and email by archiving and automatically grouping messages by conversation.</p>
<p>Email means copies. Using platforms with their own messaging system relies on the site to be online and hold your messages, while it's also possible for them to go offline (temporarily or permanently), erase data of someone who deletes their account, and sell or get acquired (sending your data who knows where). I used to delete emails with 'messages' sent on these platforms, but now I keep them as I don't trust the platform to do it for me.</p>
<p>Email is the original 'all your stuff in one place that you control', and as long it's designed to protect and respect your attention, it can serve an important function in supporting more durable data.</p>
<h2 id="files">files</h2>
<p>I don't like managing files and consider them a holdover from an older time, preferring interoperable apps (ideally as <a href="https://utopia.rosano.ca/interoperable-visions/#flexibility-through-pluralism">pluralistic lenses on data</a>), yet they remain a useful <a href="https://stephango.com/file-over-app">response to ephemeral software</a>. Files let you <a href="https://www.geoffreylitt.com/2021/03/05/bring-your-own-client.html">choose how to use them</a>, and can be moved between different devices or storage providers.</p>
<p>I don't like hand-editing CSV, reading JSON or XML or HTML, but I'll be able to 'do something' with them probably forever. Plaintext is the way to my heart, and also one of the most interoperable types out there.</p>
<p>There are so many common formats and it's not easy to get an ecosystem to agree on which ones to use. Despite their limitations, having the data stored this way liberates it from any app. Your data could be available in these formats through export or integrations, but ultimately the app developer chooses whether to make that available; some solutions could be to ask people nicely, pressure companies publicly, or <a href="https://beepb00p.xyz/myinfra.html">take it ourselves</a>.</p>
<h2 id="delta-chat">Delta Chat</h2>
<p>(Disclosure: I've done paid work in the past to help with this project. I write my own opinions here to describe how it relates to durable data.)</p>
<p><a href="https://delta.chat">Delta Chat</a> uses your existing email account as a messaging app, and lets you do many things you'd want to do with apps like Signal and WhatsApp.</p>
<p>Unlike other messaging apps: you can move your messages between providers as easily as email; if the app goes away or stops working, you'll still have access to your messages (even if encrypted); it can help defragment your social graph across various platforms; it supports <a href="https://webxdc.org">webxdc</a> as an emerging way to do 'app things', including collaboration; it requires no permission, no company, and &quot;no coins&quot; to participate.</p>
<p>As documented in <a href="https://utopia.rosano.ca/encryption-rant/">encryption rant</a>, it's easy to transfer devices and never leaves me with the feeling that my messages will disappear. And because the data is stored in my email account, it's not dependent on any app, including Delta Chat itself.</p>
<p>It's basically as durable as email, with extra features and benefits: one approach to 'email without crap'.</p>
<h2 id="git-and-github">git and GitHub</h2>
<p>GitHub still leans technical but is becoming increasingly accessible.</p>
<p>It turns git into version control you can see and lets you edit directly on the site without installing apps.</p>
<p>There are virtually infinite integrations and automations available.</p>
<p>Backup, replication, and copies are built into the underlying technology.</p>
<p>Git enables <a href="https://subconscious.substack.com/p/credible-exit">credible exit</a> from GitHub so you can take your files with you.</p>
<p>It's also collaborative and doesn't rely on a specific app's format of version control.</p>
<p>Connecting <a href="https://utopia.rosano.ca/github-as-storage/">GitHub as the storage backend</a> for apps would be a powerful way to enable backup and sync to multiple devices.</p>
<h1 id="building-for-ownership">building for ownership</h1>
<p>There's a reason why <a href="https://0data.app">Zero Data</a> defines data ownership specifically to mean 'having access without export or permission'. In the sea of shiny features advertised by apps, startups, and projects, it can be confusing to understand whether you actually have or own your stuff in the end.</p>
<p>'Encryption' helps avoid unauthorized access, but <a href="https://utopia.rosano.ca/encryption-rant/">your data could easily disappear</a>.</p>
<p>Many efforts that use the '<a href="https://www.inkandswitch.com/local-first/">local-first</a>' label focus on 'working offline', 'sync', and 'collaboration via CRDTs' without consideration for the seventh ideal of data ownership (perhaps leaving some company holding the data); in this way, plenty of Apple software could be misunderstood as 'local-first' while locking data into their ecosystem; <a href="https://dxos.org">DXOS</a> is the closest I've seen to doing local-first right.</p>
<p>Ideally, data ownership is not a coincidental byproduct of someone's goodwill, but rather baked into how the system works. It should go beyond a technical concept to make people feel safe and able to trust the space as they might in a long-term relationship.</p>
</div><p>
	<small>Tagged: <a href="/log/tag/technical/">technical</a>, <a href="/log/tag/interop/">interop</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 9:24 am, February 21, 2024" href="/log/2024-02-21-durable-data/"><time datetime="2024-02-21T09:24:24-05:00" data-pagefind-sort="date[datetime]">09h24</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>encryption rant</title>
  <link>https://rosano.ca/blog/encryption-rant/</link>
  <pubDate>Wed, 21 Feb 2024 14:23:43 +0000</pubDate>
  <guid>https://rosano.ca/blog/encryption-rant/</guid>
  <description>Robustly-secured data that can surprisingly vanish at a moments notice.</description>
  <content:encoded><![CDATA[
  <div class="post">

<p class="feature-image"><img src="https://static.rosano.ca/home/tags/zero-data/Screen-Shot-2024-02-14-at-11.30.50-copy-export.jpg" aria-hidden="true"></p><nugget>Robustly-secured data that can surprisingly vanish at a moments notice.</nugget><hr>
<div class="content"><p><small>👋 Heads up: if you're more interested in solutions, read <a href="https://utopia.rosano.ca/durable-data/">durable data</a>.</small></p>
<hr>
<p>This sort of 'complain-y' post fleshes out my <a href="https://mastodon.online/@rosano/110685716693430299">encryption thread</a> to highlight how data becoming inaccessible might feel to someone less tech-oriented than I am and who isn't going to document their experience; if you're a technology wrangler, read the rest of this while putting yourself in the shoes of someone whose relationship with owning data might be &quot;new phone, please send your number&quot;.</p>
<h1 id="encrypted-bricks">encrypted bricks</h1>
<p>In the end of 2023 I experienced the co-incidental deprecation of multiple messaging apps simultaneously. <a href="https://whatsapp.com">WhatsApp</a>, <a href="https://signal.org">Signal</a>, and <a href="https://www.beeper.com">Beeper</a> either suddenly stopped working or warned about 'going away soon'.</p>
<p><gallery><img src="https://static.rosano.ca/home/blog/2024-02-21-encryption-rant/2023.11.07-16.56.23.jpg" aria-hidden="true">
</gallery><gallery><img src="https://static.rosano.ca/home/blog/2024-02-21-encryption-rant/2024.01.26-at-07.19.54.jpg" aria-hidden="true">
 <img src="https://static.rosano.ca/home/blog/2024-02-21-encryption-rant/Screen-Shot-2024-02-17-at-10.06.50.jpg" aria-hidden="true">
</gallery><gallery><img src="https://static.rosano.ca/home/blog/2024-02-21-encryption-rant/2023.11.07-18.21.46.jpg" aria-hidden="true">
 <img src="https://static.rosano.ca/home/blog/2024-02-21-encryption-rant/Screen-Shot-2024-02-17-at-16.34.05.png" aria-hidden="true">
</gallery></p>
<figure><figcaption>removing native support for older systems</figcaption></figure>
<p>As a technologist, I can vaguely guess it's tied to something like 'availability of better encryption primitives or standards on newer versions of the operating system', but to a non-tech person it might be strange how WhatsApp says &quot;you can use their web version instead, without upgrading your computer, but the native version that was working yesterday 'needs to' stop working today because of 'security'&quot;.</p>
<p>This could nicely tie into imagined stories of planned obsolescence and 'Apple pushing people to always get new stuff' even if that might not be what's really happening here; without technical knowledge, how would you tell the difference?</p>
<p>Also weird how many of these run in Electron (Chrome) as web apps with some kind of server component, but they don't work in a normal web browser.</p>
<h1 id="volatile-updates">volatile updates</h1>
<p>It's fine that Beeper is no longer compatible with my older version of macOS, but not fine that the underlying self-update framework (<a href="https://github.com/Squirrel/Squirrel.Mac/issues/275">Squirrel</a>) forces an upgrade to a version that doesn't run on my machine: when is that ever desirable?</p>
<p>The threat of these workflow disruptions means one needs to keep backup copies of apps or lock them from being changed to prevent unintended updates.</p>
<figure>
<p><img src="https://static.rosano.ca/home/blog/2024-02-21-encryption-rant/Untitled-2-export.jpg" aria-hidden="true">
</p>
<figcaption>locking Element on macOS to prevent it from incompatible upgrades</figcaption>
</figure>
<p>locking Element on macOS to prevent it from incompatible upgrades</p>
<h1 id="moving-devices">moving devices</h1>
<p>Transferring both WhatsApp and Signal messages to a new phone, there's a scary thought (and real possibility) that all my messages could suddenly disappear because of 'security'. Since the app's transfer interface doesn't assure me of the correct path, I need to find the <a href="https://faq.whatsapp.com/209942271778103/">eight-</a> to <a href="https://support.signal.org/hc/en-us/articles/360007059752-Backup-and-Restore-Messages">thirteen-</a>step guide via a search engine and precisely follow it in order to understand and not mess up.</p>
<p>WhatsApp's transfer process simply didn't appear for me, but I was able to just re-register my number on the new phone (<a href="https://support.apple.com/en-us/HT204184#computer">restored from iOS full backup</a>) and unlock my data; phew, glad I didn't trust the <em>documented process</em> and relied on luck or a third party like Apple instead.</p>
<p>Signal's QR-code-based local network transfer is more straight-forward, but repeatedly failed at 99%, which although probably contains all my data, will not let me manage the last inch, thus leaving me locked out. After changing Wi-Fi networks, with a crash for success, it seemed to make it over safely.</p>
<p>Now, even though my messages are there at the moment, there's a lingering worry that my path was not acceptable for 'security' and so it might all get randomly taken away from me some day; this comes from seeing how message history is often not available on new linked devices. It doesn't matter whether my imagined story about possibly losing data is real. Does the experience make you feel safe? Does it reassure you that you have your data? Or does it threaten that you could become signed out and lose everything 'for your own protection'?</p>
<p><a href="https://delta.chat">Delta Chat</a> has the simplest device transfer and even an equivalent of 'changing your number'; the messages are also encrypted, yet I never worry about losing them.</p>
<h1 id="clean-by-accident">clean by accident</h1>
<p>If you can't afford larger storage capacity, you might find yourself managing space on your device. While cleanup up earlier in the year, I accidentally deleted Signal because my screen stalled — throw away your old, slower devices as they quickly become obsolete, right? — and my finger tapped and swiped perfectly because of muscle memory. My years of chat history were just gone. I have some messages on another linked device, but no possibility to export or transfer or merge because their desktop version is only 'linked' and not 'special', awaiting the next unfortunate accident; it sends the message that 'security' lacks agency.</p>
<h1 id="decentralized-if-you-know-how">decentralized if you know how</h1>
<p>Is the solution is an open standard like <a href="https://matrix.org">Matrix</a>? It's not so easy. Their <a href="https://joinmatrix.org">&quot;join&quot; explainer</a> is not as intuitive as other decentralized projects like <a href="https://joinmastodon.org">Mastodon</a>, <a href="https://joinpeertube.org">PeerTube</a>, or <a href="https://join-lemmy.org">Lemmy</a>. I don't believe a non-programmer would be able to do this without help, but assuming they sort through and understand the options of picking both a server and client, they will get stuck on errors like &quot;Unable to decrypt message&quot;, &quot;Verification failed&quot;, and the scary thought of losing messages if you log out.</p>
<p><gallery><img src="https://static.rosano.ca/home/blog/2024-02-21-encryption-rant/2023.11.23-at-14.31.33-1.jpg" aria-hidden="true">
 <img src="https://static.rosano.ca/home/blog/2024-02-21-encryption-rant/2024-02-14-at-12-12-14-1.jpg" aria-hidden="true">
</gallery><gallery><img src="https://static.rosano.ca/home/blog/2024-02-21-encryption-rant/2024-02-14-at-12-12-48-1.jpg" aria-hidden="true">
 <img src="https://static.rosano.ca/home/blog/2024-02-21-encryption-rant/IMG_E7520-1.JPG" aria-hidden="true">
</gallery></p>
<figure><figcaption>scary messages</figcaption></figure>
<p><gallery><img src="https://static.rosano.ca/home/blog/2024-02-21-encryption-rant/2024.01.03-at-10-20-25.jpg" aria-hidden="true">
 <img src="https://static.rosano.ca/home/blog/2024-02-21-encryption-rant/2024.01.03-at-10-20-37.jpg" aria-hidden="true">
</gallery></p>
<figure><figcaption>do these match?</figcaption></figure>
<p>Well, it was tricky to figure out how to trigger the Matrix verification process, but I managed to revive access to my Beeper messages with <a href="https://fluffychat.im">FluffyChat</a> (which really might be &quot;The cutest messenger in the Matrix network&quot;), and it's nice to have access to my data in a variety of web apps that will probably remain backwards compatible forever. Still, &quot;I managed to get it working&quot; is a hard sell for normal people.</p>
<h1 id="export-impossible">export impossible</h1>
<p>I still have yet to see a built-in way to export all my messages at once with Signal, WhatsApp, or any popular Matrix client. It's possible to <a href="https://unix.stackexchange.com/questions/505008/signal-desktop-how-to-export-messages">get a copy of some Signal Desktop messages</a> with tools like <a href="https://github.com/tbvdm/sigtop">sigtop</a> and <a href="https://github.com/signalapp/Signal-Desktop/issues/2516#issuecomment-442797638">sqlcipher</a> if you're comfortable typing into a terminal (I'm not). <a href="https://imazing.com">iMazing</a> lets you export messages and attachments from WhatsApp. Not being part of official app interfaces just feels like platform capture to me: data in, but not out.</p>
<h1 id="secure-complex-fragile">secure, complex, fragile</h1>
<p>Why does all this 'security' have to feel so fragile? What does it mean when 'robustly-secured data' can accidentally vanish at a moment's notice, or that I can back up my entire phone for peace of mind, except for 'secure things'? Should it be normal to expect people to simply upgrade their operating system to the latest version when it's known to likely cause a slew of random issues?</p>
<p>How are ordinary people supposed to feel good about this? There may be workarounds, and maybe I'm even just taking the wrong approach in everything I've documented here, but if someone like me can't figure it out, it's bad: for people outside the tech world with little time or capacity to deal with these kinds of issues, the seeming possibility of them occurring is scary and unsafe, even if not real; for software developers to treat these circumstances as mere 'policy' is not very empathetic.</p>
<p>It's important to give space and patience to technology under development as people make it work, but there's no feigning moral superiority in using 'alternative tech' until it includes a real foundation to stand on for people without this domain expertise. Fleeting personal data is like alternative tech's equivalent of platform enshitification and doesn't fill me with confidence to trust these systems or recommend my non-tech friends to do so.</p>
<h1 id="end-rant">end rant</h1>
<p>I hope to see more apps with comprehensive export or supporting personal data stores. And why not maximize compatibility where possible? If I can message all these platforms via Matrix bridges in a web browser, there's no reason to force an upgrade or brick my app.</p>
<p>Digital security should go beyond a technical concept: what if it made people feel safe, trusting the space as they might in a long-term relationship?</p>
<p>Are these stories of data becoming inaccessible just mine? If you have your own, be welcome to share. Maybe if the problems are documented, they're more likely to be fixed.</p>
<hr>
	<p><small>If you liked that, you might want to read <a href="https://utopia.rosano.ca/durable-data/">durable data</a> for some solutions, or interoperable visions in <a href="https://utopia.rosano.ca/pointing-at-the-wrong-thing/">pointing at the wrong thing</a>, or about different <a href="https://utopia.rosano.ca/levels-of-agency/">levels of agency</a>.</small></p>
	<hr></div><p>
	<small>Tagged: <a href="/log/tag/technical/">technical</a>, <a href="/log/tag/interop/">interop</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 9:23 am, February 21, 2024" href="/blog/encryption-rant/"><time datetime="2024-02-21T09:23:43-05:00" data-pagefind-sort="date[datetime]">09h23</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Wednesday, February 21, 2024 09h23</title>
  <link>https://rosano.ca/log/2024-02-21-encryption-rant/</link>
  <pubDate>Wed, 21 Feb 2024 09:23:43 -0500</pubDate>
  <guid>https://rosano.ca/log/2024-02-21-encryption-rant/</guid>
  <description>👋 Heads up: if you&#39;re more interested in solutions, read durable data.&#xA;This sort of &#39;complain-y&#39; post fleshes out my encryption thread to highlight how data becoming inaccessible might feel to someone less tech-oriented than I am and who isn&#39;t going to document their experience; if you&#39;re a technology wrangler, read the rest of this while putting yourself in the shoes of someone whose relationship with owning data might be &amp;quot;new phone, please send your number&amp;quot;.&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">

<p class="feature-image"><img src="https://static.rosano.ca/home/tags/zero-data/Screen-Shot-2024-02-14-at-11.30.50-copy-export.jpg" aria-hidden="true"></p><nugget><p><small>👋 Heads up: if you're more interested in solutions, read <a href="https://utopia.rosano.ca/durable-data/">durable data</a>.</small></p>
<hr>
<p>This sort of 'complain-y' post fleshes out my <a href="https://mastodon.online/@rosano/110685716693430299">encryption thread</a> to highlight how data becoming inaccessible might feel to someone less tech-oriented than I am and who isn't going to document their experience; if you're a technology wrangler, read the rest of this while putting yourself in the shoes of someone whose relationship with owning data might be &quot;new phone, please send your number&quot;.</p></nugget><hr>
<div class="content"><p><small>👋 Heads up: if you're more interested in solutions, read <a href="https://utopia.rosano.ca/durable-data/">durable data</a>.</small></p>
<hr>
<p>This sort of 'complain-y' post fleshes out my <a href="https://mastodon.online/@rosano/110685716693430299">encryption thread</a> to highlight how data becoming inaccessible might feel to someone less tech-oriented than I am and who isn't going to document their experience; if you're a technology wrangler, read the rest of this while putting yourself in the shoes of someone whose relationship with owning data might be &quot;new phone, please send your number&quot;.</p>
<h1 id="encrypted-bricks">encrypted bricks</h1>
<p>In the end of 2023 I experienced the co-incidental deprecation of multiple messaging apps simultaneously. <a href="https://whatsapp.com">WhatsApp</a>, <a href="https://signal.org">Signal</a>, and <a href="https://www.beeper.com">Beeper</a> either suddenly stopped working or warned about 'going away soon'.</p>
<p><gallery><img src="https://static.rosano.ca/home/timeline/2024-02-21-encryption-rant1708525423/2023.11.07-16.56.23.jpg" aria-hidden="true">
</gallery><gallery><img src="https://static.rosano.ca/home/timeline/2024-02-21-encryption-rant1708525423/2024.01.26-at-07.19.54.jpg" aria-hidden="true">
 <img src="https://static.rosano.ca/home/timeline/2024-02-21-encryption-rant1708525423/Screen-Shot-2024-02-17-at-10.06.50.jpg" aria-hidden="true">
</gallery><gallery><img src="https://static.rosano.ca/home/timeline/2024-02-21-encryption-rant1708525423/2023.11.07-18.21.46.jpg" aria-hidden="true">
 <img src="https://static.rosano.ca/home/timeline/2024-02-21-encryption-rant1708525423/Screen-Shot-2024-02-17-at-16.34.05.png" aria-hidden="true">
</gallery></p>
<figure><figcaption>removing native support for older systems</figcaption></figure>
<p>As a technologist, I can vaguely guess it's tied to something like 'availability of better encryption primitives or standards on newer versions of the operating system', but to a non-tech person it might be strange how WhatsApp says &quot;you can use their web version instead, without upgrading your computer, but the native version that was working yesterday 'needs to' stop working today because of 'security'&quot;.</p>
<p>This could nicely tie into imagined stories of planned obsolescence and 'Apple pushing people to always get new stuff' even if that might not be what's really happening here; without technical knowledge, how would you tell the difference?</p>
<p>Also weird how many of these run in Electron (Chrome) as web apps with some kind of server component, but they don't work in a normal web browser.</p>
<h1 id="volatile-updates">volatile updates</h1>
<p>It's fine that Beeper is no longer compatible with my older version of macOS, but not fine that the underlying self-update framework (<a href="https://github.com/Squirrel/Squirrel.Mac/issues/275">Squirrel</a>) forces an upgrade to a version that doesn't run on my machine: when is that ever desirable?</p>
<p>The threat of these workflow disruptions means one needs to keep backup copies of apps or lock them from being changed to prevent unintended updates.</p>
<figure>
<p><img src="https://static.rosano.ca/home/timeline/2024-02-21-encryption-rant1708525423/Untitled-2-export.jpg" aria-hidden="true">
</p>
<figcaption>locking Element on macOS to prevent it from incompatible upgrades</figcaption>
</figure>
<p>locking Element on macOS to prevent it from incompatible upgrades</p>
<h1 id="moving-devices">moving devices</h1>
<p>Transferring both WhatsApp and Signal messages to a new phone, there's a scary thought (and real possibility) that all my messages could suddenly disappear because of 'security'. Since the app's transfer interface doesn't assure me of the correct path, I need to find the <a href="https://faq.whatsapp.com/209942271778103/">eight-</a> to <a href="https://support.signal.org/hc/en-us/articles/360007059752-Backup-and-Restore-Messages">thirteen-</a>step guide via a search engine and precisely follow it in order to understand and not mess up.</p>
<p>WhatsApp's transfer process simply didn't appear for me, but I was able to just re-register my number on the new phone (<a href="https://support.apple.com/en-us/HT204184#computer">restored from iOS full backup</a>) and unlock my data; phew, glad I didn't trust the <em>documented process</em> and relied on luck or a third party like Apple instead.</p>
<p>Signal's QR-code-based local network transfer is more straight-forward, but repeatedly failed at 99%, which although probably contains all my data, will not let me manage the last inch, thus leaving me locked out. After changing Wi-Fi networks, with a crash for success, it seemed to make it over safely.</p>
<p>Now, even though my messages are there at the moment, there's a lingering worry that my path was not acceptable for 'security' and so it might all get randomly taken away from me some day; this comes from seeing how message history is often not available on new linked devices. It doesn't matter whether my imagined story about possibly losing data is real. Does the experience make you feel safe? Does it reassure you that you have your data? Or does it threaten that you could become signed out and lose everything 'for your own protection'?</p>
<p><a href="https://delta.chat">Delta Chat</a> has the simplest device transfer and even an equivalent of 'changing your number'; the messages are also encrypted, yet I never worry about losing them.</p>
<h1 id="clean-by-accident">clean by accident</h1>
<p>If you can't afford larger storage capacity, you might find yourself managing space on your device. While cleanup up earlier in the year, I accidentally deleted Signal because my screen stalled — throw away your old, slower devices as they quickly become obsolete, right? — and my finger tapped and swiped perfectly because of muscle memory. My years of chat history were just gone. I have some messages on another linked device, but no possibility to export or transfer or merge because their desktop version is only 'linked' and not 'special', awaiting the next unfortunate accident; it sends the message that 'security' lacks agency.</p>
<h1 id="decentralized-if-you-know-how">decentralized if you know how</h1>
<p>Is the solution is an open standard like <a href="https://matrix.org">Matrix</a>? It's not so easy. Their <a href="https://joinmatrix.org">&quot;join&quot; explainer</a> is not as intuitive as other decentralized projects like <a href="https://joinmastodon.org">Mastodon</a>, <a href="https://joinpeertube.org">PeerTube</a>, or <a href="https://join-lemmy.org">Lemmy</a>. I don't believe a non-programmer would be able to do this without help, but assuming they sort through and understand the options of picking both a server and client, they will get stuck on errors like &quot;Unable to decrypt message&quot;, &quot;Verification failed&quot;, and the scary thought of losing messages if you log out.</p>
<p><gallery><img src="https://static.rosano.ca/home/timeline/2024-02-21-encryption-rant1708525423/2023.11.23-at-14.31.33-1.jpg" aria-hidden="true">
 <img src="https://static.rosano.ca/home/timeline/2024-02-21-encryption-rant1708525423/2024-02-14-at-12-12-14-1.jpg" aria-hidden="true">
</gallery><gallery><img src="https://static.rosano.ca/home/timeline/2024-02-21-encryption-rant1708525423/2024-02-14-at-12-12-48-1.jpg" aria-hidden="true">
 <img src="https://static.rosano.ca/home/timeline/2024-02-21-encryption-rant1708525423/IMG_E7520-1.JPG" aria-hidden="true">
</gallery></p>
<figure><figcaption>scary messages</figcaption></figure>
<p><gallery><img src="https://static.rosano.ca/home/timeline/2024-02-21-encryption-rant1708525423/2024.01.03-at-10-20-25.jpg" aria-hidden="true">
 <img src="https://static.rosano.ca/home/timeline/2024-02-21-encryption-rant1708525423/2024.01.03-at-10-20-37.jpg" aria-hidden="true">
</gallery></p>
<figure><figcaption>do these match?</figcaption></figure>
<p>Well, it was tricky to figure out how to trigger the Matrix verification process, but I managed to revive access to my Beeper messages with <a href="https://fluffychat.im">FluffyChat</a> (which really might be &quot;The cutest messenger in the Matrix network&quot;), and it's nice to have access to my data in a variety of web apps that will probably remain backwards compatible forever. Still, &quot;I managed to get it working&quot; is a hard sell for normal people.</p>
<h1 id="export-impossible">export impossible</h1>
<p>I still have yet to see a built-in way to export all my messages at once with Signal, WhatsApp, or any popular Matrix client. It's possible to <a href="https://unix.stackexchange.com/questions/505008/signal-desktop-how-to-export-messages">get a copy of some Signal Desktop messages</a> with tools like <a href="https://github.com/tbvdm/sigtop">sigtop</a> and <a href="https://github.com/signalapp/Signal-Desktop/issues/2516#issuecomment-442797638">sqlcipher</a> if you're comfortable typing into a terminal (I'm not). <a href="https://imazing.com">iMazing</a> lets you export messages and attachments from WhatsApp. Not being part of official app interfaces just feels like platform capture to me: data in, but not out.</p>
<h1 id="secure-complex-fragile">secure, complex, fragile</h1>
<p>Why does all this 'security' have to feel so fragile? What does it mean when 'robustly-secured data' can accidentally vanish at a moment's notice, or that I can back up my entire phone for peace of mind, except for 'secure things'? Should it be normal to expect people to simply upgrade their operating system to the latest version when it's known to likely cause a slew of random issues?</p>
<p>How are ordinary people supposed to feel good about this? There may be workarounds, and maybe I'm even just taking the wrong approach in everything I've documented here, but if someone like me can't figure it out, it's bad: for people outside the tech world with little time or capacity to deal with these kinds of issues, the seeming possibility of them occurring is scary and unsafe, even if not real; for software developers to treat these circumstances as mere 'policy' is not very empathetic.</p>
<p>It's important to give space and patience to technology under development as people make it work, but there's no feigning moral superiority in using 'alternative tech' until it includes a real foundation to stand on for people without this domain expertise. Fleeting personal data is like alternative tech's equivalent of platform enshitification and doesn't fill me with confidence to trust these systems or recommend my non-tech friends to do so.</p>
<h1 id="end-rant">end rant</h1>
<p>I hope to see more apps with comprehensive export or supporting personal data stores. And why not maximize compatibility where possible? If I can message all these platforms via Matrix bridges in a web browser, there's no reason to force an upgrade or brick my app.</p>
<p>Digital security should go beyond a technical concept: what if it made people feel safe, trusting the space as they might in a long-term relationship?</p>
<p>Are these stories of data becoming inaccessible just mine? If you have your own, be welcome to share. Maybe if the problems are documented, they're more likely to be fixed.</p>
<hr>
	<p><small>If you liked that, you might want to read <a href="https://utopia.rosano.ca/durable-data/">durable data</a> for some solutions, or interoperable visions in <a href="https://utopia.rosano.ca/pointing-at-the-wrong-thing/">pointing at the wrong thing</a>, or about different <a href="https://utopia.rosano.ca/levels-of-agency/">levels of agency</a>.</small></p>
	<hr></div><p>
	<small>Tagged: <a href="/log/tag/technical/">technical</a>, <a href="/log/tag/interop/">interop</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 9:23 am, February 21, 2024" href="/log/2024-02-21-encryption-rant/"><time datetime="2024-02-21T09:23:43-05:00" data-pagefind-sort="date[datetime]">09h23</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>GitHub as storage</title>
  <link>https://rosano.ca/blog/github-as-storage/</link>
  <pubDate>Wed, 24 Jan 2024 14:51:04 +0000</pubDate>
  <guid>https://rosano.ca/blog/github-as-storage/</guid>
  <description>Could it be one of the most interoperable formats out there?</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>Could it be one of the most interoperable formats out there?</nugget><hr>
<div class="content"><p>Writing <a href="https://rosano.ca/interoperable-visions">interoperable visions</a> got me thinking about how cool it would be to use a GitHub repository as the storage for <a href="https://0data.app">Zero Data</a> or <a href="https://www.inkandswitch.com/local-first">local-first</a> apps as many people have an account there, even some less technical people. Using their <a href="https://docs.github.com/en/rest/repos/contents">repository contents API</a> it should be possible to connect it as a backend for web apps and store the data in a repository. Has this been done already?</p>
<p>GitHub has useful affordances for browsing files, understanding directory structure, editing text, collaborating, version control, and a whole wack of integrations hooking into every corner of the internet. A repo can be synced to your local device where you can also do all the things your device can, then push it back to the cloud.</p>
<p>Might be interesting to think of it like a Dropbox shared folder, but globally public and editable, or another way to get <a href="https://docs.datomic.com/pro/time/filters.html#history">Datomic</a>'s &quot;version control for your database&quot;.</p>
<p>Of course, you may not want the data created by your app to be public, so you might use a private repository instead of a public one. Choosing a public repository where it doesn't breach privacy could be a new way to encourage 'open data', as one can literally see, fork, and hack all of it with no extra steps,</p>
<p>The many affordances accessible point-and-click via GitHub's web interface ensures there are at least two apps that can edit the same data, which is great for interop, but factoring all the ways to edit GitHub repos via integrations and on your local device, it becomes closer to infinite: could it be one of the most interoperable formats out there? What would it say about sovereignty if similar flexibility via an API was replicated by <a href="https://codeberg.org">Codeberg</a>, or <a href="https://easyindie.app">self-hostable options</a> like <a href="https://gitlab.com">GitLab</a>, <a href="https://gitea.io">Gitea</a>, or <a href="https://gogs.io">Gogs</a>?</p>
<p>The <a href="https://github.com/remotestorage/remotestorage.js">remoteStorage.js library</a> already supports <a href="https://remotestoragejs.readthedocs.io/en/latest/getting-started/dropbox-and-google-drive.html">Dropbox and Google Drive</a> as an optional storage backend, with <a href="https://community.remotestorage.io/t/adding-solid-as-a-backend/828">Solid</a> on the way. Why not add GitHub? A polyglot library with five low-friction storage options would give developers more potential for their apps, and the people using them more ways into owning their data.</p>
</div><p>
	<small>Tagged: <a href="/log/tag/idea/">idea</a>, <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/technical/">technical</a>, <a href="/log/tag/easy-indie-app/">Easy Indie App</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 9:51 am, January 24, 2024" href="/blog/github-as-storage/"><time datetime="2024-01-24T09:51:04-05:00" data-pagefind-sort="date[datetime]">09h51</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Wednesday, January 24, 2024 09h51</title>
  <link>https://rosano.ca/log/2024-01-24-github-as-storage/</link>
  <pubDate>Wed, 24 Jan 2024 09:51:04 -0500</pubDate>
  <guid>https://rosano.ca/log/2024-01-24-github-as-storage/</guid>
  <description>Writing interoperable visions got me thinking about how cool it would be to use a GitHub repository as the storage for Zero Data or local-first apps as many people have an account there, even some less technical people. Using their repository contents API it should be possible to connect it as a backend for web apps and store the data in a repository. Has this been done already?&#xA;GitHub has useful affordances for browsing files, understanding directory structure, editing text, collaborating, version control, and a whole wack of integrations hooking into every corner of the internet. A repo can be synced to your local device where you can also do all the things your device can, then push it back to the cloud.&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><p>Writing <a href="https://rosano.ca/interoperable-visions">interoperable visions</a> got me thinking about how cool it would be to use a GitHub repository as the storage for <a href="https://0data.app">Zero Data</a> or <a href="https://www.inkandswitch.com/local-first">local-first</a> apps as many people have an account there, even some less technical people. Using their <a href="https://docs.github.com/en/rest/repos/contents">repository contents API</a> it should be possible to connect it as a backend for web apps and store the data in a repository. Has this been done already?</p>
<p>GitHub has useful affordances for browsing files, understanding directory structure, editing text, collaborating, version control, and a whole wack of integrations hooking into every corner of the internet. A repo can be synced to your local device where you can also do all the things your device can, then push it back to the cloud.</p></nugget><hr>
<div class="content"><p>Writing <a href="https://rosano.ca/interoperable-visions">interoperable visions</a> got me thinking about how cool it would be to use a GitHub repository as the storage for <a href="https://0data.app">Zero Data</a> or <a href="https://www.inkandswitch.com/local-first">local-first</a> apps as many people have an account there, even some less technical people. Using their <a href="https://docs.github.com/en/rest/repos/contents">repository contents API</a> it should be possible to connect it as a backend for web apps and store the data in a repository. Has this been done already?</p>
<p>GitHub has useful affordances for browsing files, understanding directory structure, editing text, collaborating, version control, and a whole wack of integrations hooking into every corner of the internet. A repo can be synced to your local device where you can also do all the things your device can, then push it back to the cloud.</p>
<p>Might be interesting to think of it like a Dropbox shared folder, but globally public and editable, or another way to get <a href="https://docs.datomic.com/pro/time/filters.html#history">Datomic</a>'s &quot;version control for your database&quot;.</p>
<p>Of course, you may not want the data created by your app to be public, so you might use a private repository instead of a public one. Choosing a public repository where it doesn't breach privacy could be a new way to encourage 'open data', as one can literally see, fork, and hack all of it with no extra steps,</p>
<p>The many affordances accessible point-and-click via GitHub's web interface ensures there are at least two apps that can edit the same data, which is great for interop, but factoring all the ways to edit GitHub repos via integrations and on your local device, it becomes closer to infinite: could it be one of the most interoperable formats out there? What would it say about sovereignty if similar flexibility via an API was replicated by <a href="https://codeberg.org">Codeberg</a>, or <a href="https://easyindie.app">self-hostable options</a> like <a href="https://gitlab.com">GitLab</a>, <a href="https://gitea.io">Gitea</a>, or <a href="https://gogs.io">Gogs</a>?</p>
<p>The <a href="https://github.com/remotestorage/remotestorage.js">remoteStorage.js library</a> already supports <a href="https://remotestoragejs.readthedocs.io/en/latest/getting-started/dropbox-and-google-drive.html">Dropbox and Google Drive</a> as an optional storage backend, with <a href="https://community.remotestorage.io/t/adding-solid-as-a-backend/828">Solid</a> on the way. Why not add GitHub? A polyglot library with five low-friction storage options would give developers more potential for their apps, and the people using them more ways into owning their data.</p>
</div><p>
	<small>Tagged: <a href="/log/tag/idea/">idea</a>, <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/technical/">technical</a>, <a href="/log/tag/easy-indie-app/">Easy Indie App</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 9:51 am, January 24, 2024" href="/log/2024-01-24-github-as-storage/"><time datetime="2024-01-24T09:51:04-05:00" data-pagefind-sort="date[datetime]">09h51</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>pointing at the wrong thing</title>
  <link>https://rosano.ca/blog/pointing-at-the-wrong-thing/</link>
  <pubDate>Mon, 22 Jan 2024 16:16:05 +0000</pubDate>
  <guid>https://rosano.ca/blog/pointing-at-the-wrong-thing/</guid>
  <description>Would it make sense to point Google Docs at your Twitter likes? Or Google Maps at your contact list? Or a flashcards app at your music collection?</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>Would it make sense to point Google Docs at your Twitter likes? Or Google Maps at your contact list? Or a flashcards app at your music collection?</nugget><hr>
<div class="content"><p><small>👋 Heads up: if you're looking for the longer, more technical version, read <a href="https://utopia.rosano.ca/interoperable-visions/">interoperable visions</a>.</small></p>
<hr>
<p>Would it make sense to point Google Docs at your Twitter likes? Or Google Maps at your contact list? Or a flashcards app at your music collection? Some combinations are more complementary than others, but regardless, this flexibility would enable us to play with and combine data from various apps in meaningful ways without needing to wait for the developer or platform to build it first: we can just mash things up and see what happens.</p>
<p>For example, by pointing a note-taking app at your bookmarks, you might use fancier text-editing features (rather than a simple text field) to add notes to your saved links, perhaps more comfortably draft a personal message or blog post about that link. Pointing at other things (like contacts, recipes, correspondence, etc.) might mean editing them as if they were only 'plain editable text', and maybe having a new way to read and search them. Consider also pointing a maps app at your contacts (maybe to see where your friends are?), or recipes (maybe to see where foods or ingredients come from or can be found?), or photos (maybe to see where you've made some memories?).</p>
<p>This flexibility sort of exists already with apps that open 'files', but pointing at 'collections of items' in the way previously described often requires specific integrations (as <a href="https://www.apple.com/icloud/find-my">Find my</a> shows your friends or <a href="https://apps.apple.com/us/app/photos/id1584215428">Photos</a> presents places from geotagged images). Would be nice to see this in every app, so that we always have multiple options to handle our digital stuff, as opposed to data being locked into specific apps and platforms.</p>
<p>I could imagine it useful to have a kind of 'data picker' without dealing too much with 'files', where even on a mobile device you can say 'open this from there' with just a few taps; maybe like the <a href="https://developer.apple.com/design/human-interface-guidelines/activity-views">iOS Share sheet</a> shows &quot;what you can do with the shared content&quot;, but in reverse, to show &quot;what content you can use with the current app&quot;.</p>
<p>Imagine a text editor that can deal with the gamut of:</p>
<ul>
<li>text files, whether on your computer, Dropbox, Google Drive, iCloud, GitHub, etc…</li>
<li>documents from Apple Notes or Simplenote</li>
<li>documents from Google Docs or Microsoft Word, editable as simple text</li>
<li>blog posts from <a href="https://ghost.org">Ghost</a> or <a href="https://wordpress.org">Wordpress</a></li>
<li>contacts, calendars, or correspondence as text by 'pointing at the wrong thing'</li>
</ul>
<p>What's the value of one app supporting a mix of these? Two apps? A whole ecosystem of apps? In the way we 'edit stuff as text' here regardless of where it is, what how else can apps 'edit stuff as X'?</p>
<p>This could be a dynamic ecosystem where people are building and using software in unpredictable permutations, where progress happens faster than the speed of plugins, or perhaps even without the developer or platform specifying it. I'd certainly love to see this brighter future with more possibilities for our human agency. What about you? I would love to hear what you think about this especially if you consider yourself a 'less technical' person: be welcome to comment or message me anywhere.</p>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 11:16 am, January 22, 2024" href="/blog/pointing-at-the-wrong-thing/"><time datetime="2024-01-22T11:16:05-05:00" data-pagefind-sort="date[datetime]">11h16</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Monday, January 22, 2024 11h16</title>
  <link>https://rosano.ca/log/2024-01-22-pointing-at-the-wrong-thing/</link>
  <pubDate>Mon, 22 Jan 2024 11:16:05 -0500</pubDate>
  <guid>https://rosano.ca/log/2024-01-22-pointing-at-the-wrong-thing/</guid>
  <description>👋 Heads up: if you&#39;re looking for the longer, more technical version, read interoperable visions.&#xA;Would it make sense to point Google Docs at your Twitter likes? Or Google Maps at your contact list? Or a flashcards app at your music collection? Some combinations are more complementary than others, but regardless, this flexibility would enable us to play with and combine data from various apps in meaningful ways without needing to wait for the developer or platform to build it first: we can just mash things up and see what happens.&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><p><small>👋 Heads up: if you're looking for the longer, more technical version, read <a href="https://utopia.rosano.ca/interoperable-visions/">interoperable visions</a>.</small></p>
<hr>
<p>Would it make sense to point Google Docs at your Twitter likes? Or Google Maps at your contact list? Or a flashcards app at your music collection? Some combinations are more complementary than others, but regardless, this flexibility would enable us to play with and combine data from various apps in meaningful ways without needing to wait for the developer or platform to build it first: we can just mash things up and see what happens.</p></nugget><hr>
<div class="content"><p><small>👋 Heads up: if you're looking for the longer, more technical version, read <a href="https://utopia.rosano.ca/interoperable-visions/">interoperable visions</a>.</small></p>
<hr>
<p>Would it make sense to point Google Docs at your Twitter likes? Or Google Maps at your contact list? Or a flashcards app at your music collection? Some combinations are more complementary than others, but regardless, this flexibility would enable us to play with and combine data from various apps in meaningful ways without needing to wait for the developer or platform to build it first: we can just mash things up and see what happens.</p>
<p>For example, by pointing a note-taking app at your bookmarks, you might use fancier text-editing features (rather than a simple text field) to add notes to your saved links, perhaps more comfortably draft a personal message or blog post about that link. Pointing at other things (like contacts, recipes, correspondence, etc.) might mean editing them as if they were only 'plain editable text', and maybe having a new way to read and search them. Consider also pointing a maps app at your contacts (maybe to see where your friends are?), or recipes (maybe to see where foods or ingredients come from or can be found?), or photos (maybe to see where you've made some memories?).</p>
<p>This flexibility sort of exists already with apps that open 'files', but pointing at 'collections of items' in the way previously described often requires specific integrations (as <a href="https://www.apple.com/icloud/find-my">Find my</a> shows your friends or <a href="https://apps.apple.com/us/app/photos/id1584215428">Photos</a> presents places from geotagged images). Would be nice to see this in every app, so that we always have multiple options to handle our digital stuff, as opposed to data being locked into specific apps and platforms.</p>
<p>I could imagine it useful to have a kind of 'data picker' without dealing too much with 'files', where even on a mobile device you can say 'open this from there' with just a few taps; maybe like the <a href="https://developer.apple.com/design/human-interface-guidelines/activity-views">iOS Share sheet</a> shows &quot;what you can do with the shared content&quot;, but in reverse, to show &quot;what content you can use with the current app&quot;.</p>
<p>Imagine a text editor that can deal with the gamut of:</p>
<ul>
<li>text files, whether on your computer, Dropbox, Google Drive, iCloud, GitHub, etc…</li>
<li>documents from Apple Notes or Simplenote</li>
<li>documents from Google Docs or Microsoft Word, editable as simple text</li>
<li>blog posts from <a href="https://ghost.org">Ghost</a> or <a href="https://wordpress.org">Wordpress</a></li>
<li>contacts, calendars, or correspondence as text by 'pointing at the wrong thing'</li>
</ul>
<p>What's the value of one app supporting a mix of these? Two apps? A whole ecosystem of apps? In the way we 'edit stuff as text' here regardless of where it is, what how else can apps 'edit stuff as X'?</p>
<p>This could be a dynamic ecosystem where people are building and using software in unpredictable permutations, where progress happens faster than the speed of plugins, or perhaps even without the developer or platform specifying it. I'd certainly love to see this brighter future with more possibilities for our human agency. What about you? I would love to hear what you think about this especially if you consider yourself a 'less technical' person: be welcome to comment or message me anywhere.</p>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 11:16 am, January 22, 2024" href="/log/2024-01-22-pointing-at-the-wrong-thing/"><time datetime="2024-01-22T11:16:05-05:00" data-pagefind-sort="date[datetime]">11h16</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>interoperable visions</title>
  <link>https://rosano.ca/blog/interoperable-visions/</link>
  <pubDate>Tue, 16 Jan 2024 14:40:26 +0000</pubDate>
  <guid>https://rosano.ca/blog/interoperable-visions/</guid>
  <description>Every interoperable app becomes a super-app.</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>Every interoperable app becomes a super-app.</nugget><hr>
<div class="content"><p><small>👋 Heads up: if you're looking for the shorter, less technical version, read <a href="https://utopia.rosano.ca/pointing-at-the-wrong-thing/">pointing at the wrong thing</a>.</small></p>
<hr>
<p>I have been using my own <a href="https://0data.app">Zero Data</a> apps (storing all data on spaces you own) since 2018, starting with <a href="https://hyperdraft.rosano.ca">Hyperdraft</a> for taking notes and gradually developing five more to optimize other meaningful workflows. It was enough back then to know that every iota of my data from these apps, including documents, configurations, and preferences, was in a place I control—a 'personal data store' (PDS).</p>
<p>It's been great, perhaps life-changing, and still continues to be a vital part of how I organize myself and my projects: my important stuff is with me at all times and eventually gets synced to all my devices; these web apps happen to be <a href="https://www.inkandswitch.com/local-first">local-first</a> and work fine without internet access; I've spent no time on spam, or proving to a machine that I'm human via captchas; and somehow I was even able to collaborate with other people on flashcards despite it not really being baked into my development frameworks—all without any felt presence of a large tech company deciding whether I can or not.</p>
<h1 id="there-but-invisible">there, but invisible</h1>
<p>One of the principles I listed on the Zero Data page is &quot;do what you want with your data at any time&quot;, and I've been reflecting on some limitations of the current reality: it's technically true that I'm able to 'do what I want with it any time', but what <em>can</em> I actually do with this?</p>
<p>Most of my data in a PDS is stored in a format for machines ('<a href="https://simple.wikipedia.org/wiki/JSON">JSON objects</a>'), which I generally don't wrangle with my own hands—perhaps nobody should (to avoid throwing a computer into crisis by missing a comma). Sometimes I write code to maneuver this format into something meaningful, mostly for one-off situations that don't repeat and wouldn't be resolvable with any graphical interfaces ('<a href="https://simple.wikipedia.org/wiki/Graphical%5Fuser%5Finterfaces%5Fand%5Fconsoles">GUI</a>' software) that I'm aware of; I would prefer to avoid coding and can imagine it's not an option for most people (who still might not have the programming knowledge or mindset). More often, I use self-hosted <a href="https://n8n.io">n8n automations</a> as a way to bridge different flows while using this data; it can be overall fantastic, yet still cumbersome and not quite low-code enough to include non-tech people. In the process, I learned about and self-hosted the no-code database <a href="https://www.directus.io">Directus</a>, which, although well-designed in many ways, feels quite heavy-handed and unfortunately not local-first. There are apps like <a href="https://inspektor.5apps.com">Inspektor</a> with useful affordances to edit key-value pairs as if they were 'fields', but it's not practical to do this regularly.</p>
<p>This data is somehow 100% mine, but as if I can't touch it or do much without technical expertise, as if I don't really have it even though it's right there; this is in some way strangely similar to having it stuck in one of those silos that I meant to avoid in the first place. The nicest way would be to simply use a variety of apps that can (inter-)operate on the same data without breaking each other. Observing <a href="https://pdsinterop.org/conventions/bookmark/#webmarks">how some of these Zero Data apps store the data</a> (mine included), it seems there's a long way to go. Interoperability (interop) would make this better.</p>
<hr>
<h1 id="pure-not-practical">pure not practical</h1>
<p>Related to silos, I've also been reflecting on how Zero Data shouldn't always mean asking people to leave the tools they know, or starting a new ecosystem from scratch. I've probably been as guilty of this as anyone else who claims to care about more ethical technology, and believed for a while in blank slates, but now I assume that things are and perhaps should be <em>messy</em>, because that's how it works in real life, with humans and their complex logistical or emotional entanglements. Only in the tech sphere would it be popular to 'start from scratch', with pristine self-declared confines unaffected by legacy; there's enough money and free time there to prop it up until there isn't, but for the rest of the world, subsidizing success isn't always sustainable: politically speaking, people generally gain leverage by forming imperfect coalitions rather than by staying 'pure' to any ideals or working exclusively with those who pledge the same; these pluralistic (messy) conditions for collaboration are exactly what an approach to apps and their data could exemplify.</p>
<p>In practice, that could mean:</p>
<ul>
<li>embracing popular formats, even if created by the devil</li>
<li>not waiting for neat standards, instead letting systems grow from <a href="https://subconscious.substack.com/p/simple-seeds">simple seeds</a></li>
<li>not pushing people to a single blessed representation, instead perhaps supporting a dynamic vocabulary with something like <a href="https://www.inkandswitch.com/cambria">Cambria</a></li>
<li>having diverse options for import and export, then proliferating them through packages</li>
<li>minimizing the 'destructive' tradeoffs of any decision.</li>
</ul>
<p>Perhaps instead of forcing a choice to be made, there's potential to encourage a 'both and' mentality: alternative technology and the frameworks built in that world have an opportunity to become sort of 'data liberators' that help people avoid feeling stuck: personal data stores and apps built for them could, rather than feeling like silos, be considered bridges between or out of them by enabling <a href="https://subconscious.substack.com/p/credible-exit">credible exit</a> where there is none. Interop would make this better.</p>
<hr>
<h1 id="function-over-formats">function over formats</h1>
<p>One way to restate and combine the above two perspectives is that the feeling of 'having your data in your hands' or '<a href="https://youtu.be/McKXW-bP2HQ?t=1833">handedness</a>' (credit to <a href="https://bmann.ca">Boris</a> for the term)—being able to mold and maneuver it as you wish—comes not from a consecrated format but rather from access to diverse lenses, views, or 'applications' for the same data: maximizing what a human can do while minimizing the knowledge or skill required. I would say it's the variety in those possibilities that make the data tangible in this way, not the format itself, even though the format 'enables' it. Of course, interop would make this better.</p>
<hr>
<h1 id="apps-as-dumb-interoperable-views">apps as dumb, interoperable views</h1>
<p>Various people (such as <a href="https://ruben.verborgh.org/blog/2017/12/20/paradigm-shifts-for-the-decentralized-web/#apps-become-views">Ruben Verborgh</a> and <a href="https://www.geoffreylitt.com/2021/03/05/bring-your-own-client.html">Geoffrey Litt</a>) have articulated visions of apps almost like functions where your data goes in and a visual representation or interface comes out. I hope that by sketching out some more details around interop, something new can become discernible.</p>
<p>I've been thinking about this for my note-taking app and will use it as the main example, but there's probably lots that can be applied to other kinds of apps. As an aside, stealing these concepts for your project would not only be appreciated, but perhaps a way to 'do your part' if you're an interoperable app developer.</p>
<h2 id="decouple-type-and-location-enable-pointing">decouple type and location, enable pointing</h2>
<p>Text editors are commonly used to 'edit text documents', often 'plain text' and sometimes 'rich text' with formatting. Unlike native apps where you can simply 'drag and drop' or 'share' files and the app will try to 'open' them, apps built for 'personal data stores' (Zero Data apps) <a href="https://pdsinterop.org/conventions/notepad/#litewrite">currently link</a> the format or 'type' to a specific location or 'path': for example, reading or writing note-like things in <code>/notes</code> versus <code>/documents</code> versus <code>/$APP_NAME</code>, which makes it hard to anticipate where your notes will be and breaks interop. There's also a tension here between 'app folder' versus 'type folder' (which I call 'chaos folder'), or <a href="https://michielbdejong.com/blog/29.html">'document box' versus 'data graph'</a>. One can debate whether there's such a thing as 'the correct' place, but let's assume it doesn't matter: if a Zero Data app wants to access a specific kind of data, ultimately it needs to be built 'knowing' about that relationship between location and type. Solid 'solves' this with <a href="https://solid.github.io/type-indexes/">type indexes</a>, remoteStorage with <a href="https://remotestoragejs.readthedocs.io/en/latest/data-modules.html">data modules</a>, but neither are guaranteed to be used when reading or writing data. Until there's a magical solution to that complex social problem of getting people (in this case, app developers) on the same page, it would be more flexible to perhaps have a default or preferred location but more importantly, like native apps, an option to 'point' the app at some data, whether local files, on cloud storage, or in PDS 'JSON objects'.</p>
<h2 id="pointing-at-the-wrong-thing">pointing at the 'wrong' thing</h2>
<p>Would it make sense to point a notes app at your bookmarks? Or a maps app at your contact list? Or a flashcards app at your music collection? Some domains are more complementary than others, but regardless, the potential combinatorial possibilities of being open and flexible in this way are immense and would enable people to play with and combine data in interesting ways.</p>
<p>By pointing your notepad at a bookmarks app, for example, you might use fancier text-editing capabilities, rather than those of a simple text field, to add notes to saved links, perhaps more comfortably draft a personal message or blog post about that link, <em>and</em> have it automatically associated correctly with the corresponding document from a different app. Pointing at other things (like contacts, recipes, correspondence, etc.) might mean dealing with a 'plain editable text' representation of those 'items' or 'objects', and at the very least being able to read and search them. Consider also pointing a maps app at your contacts (maybe to see where your friends are?), or recipes (maybe to see where foods or ingredients come from or can be found?), or photos (maybe to see where you've made some memories?).</p>
<p>These are some of the possibilities when there's flexibility in the storage location and format; this sort of exists already with native apps and individual files, but pointing at 'collections of objects' in the way previously described often requires specific integrations (as <a href="https://www.apple.com/icloud/find-my">Find my</a> shows your friends or <a href="https://apps.apple.com/us/app/photos/id1584215428">Photos</a> presents places from geotagged images).</p>
<p>Again, I'd leave it to someone smarter than I to discover the best interface solution here: my imagination is currently limited to something like a 'file picker' without the burden of a deeply nested file system, where even on a mobile device you can say 'open this from there' with just a few taps; maybe the picker itself needs to be aware of various formats and how to convert random stuff into vocabularies that it knows the receiving app will understand—like the <a href="https://developer.apple.com/design/human-interface-guidelines/activity-views">iOS Share sheet</a> shows &quot;what you can do with the shared content&quot;, but in reverse, to show &quot;what content you can use with the current app&quot;; anyone familiar with <a href="https://qsapp.com">Quicksilver</a> or <a href="https://launchlet.dev">Launchlet</a>'s 'pipe mode' might hear echos of 'subject' and 'action' ('with X, do Y').</p>
<h2 id="two-way-sync">two-way sync</h2>
<p>Going a step further, let's imagine seeing contacts in this note-taking app (represented as plain editable text); modifying a name, address, or text blurb; and having the changes translate back from text into the original format (perhaps vCard). A bidirectional transformer or translator could be written once (perhaps even by one person), and any note-taking app could use that to flexibly view and edit all kinds of things. The closest usable solution I've seen for JSON objects (although not yet in common use) is <a href="https://remotestoragejs.readthedocs.io/en/latest/data-modules/defining-data-types.html">remoteStorage data modules</a>, encapsulating schema and logic together in a package that can enable any app to 'handle' specific data; <a href="https://github.com/solid-contrib/data-modules">similar efforts for Solid</a> are currently in development. Lots of people use text editors (plain or rich) and would have an option to move data around fluidly while still benefiting from apps that use structured data under the hood. For a distant but novel approach, see how the <a href="https://www.inkandswitch.com/potluck">Potluck research prototype</a> cuts out the middleman and simply uses text in a notepad as the home for all kinds of data.</p>
<h2 id="dynamic-schemas-from-the-start">dynamic schemas from the start</h2>
<p>It might take a lot of work to write and maintain many data converters, and although still useful under those circumstances, what if it could be easier or partially automated through a cheap pseudo-intelligent function? Perhaps a library could be preloaded with vocabularies from <a href="https://schema.org">Schema.org</a> or <a href="https://shaperepo.com">ShapeRepo</a> and utilities that attempt a simple best guess when an input 'fits' a known structure? This could help with the issue of 'stale apps' (that either haven't been updated in a long time or may never be updated again) by enabling them to handle data dynamically from the start (as opposed to perpetually speaking only one fixed format), perhaps without requiring updates to learn about new schemas, and thus helping more of them remain compatible, interoperable, and useful without developer effort.</p>
<h2 id="flexibility-through-pluralism">flexibility through pluralism</h2>
<p>In addition to processing various forms of local data, I can imagine it being useful to have specific integrations with external services, transform their representations into one or multiple common data vocabularies, and package that integration to simplify inclusion in other apps. Imagine a text editor that can deal with input spanning the gamut of:</p>
<ul>
<li><code>.txt</code> files in a personal data store, whether stored in <code>/notes</code>, <code>/documents</code>, or <code>/$APP_NAME</code></li>
<li>JSON text documents, whether stored as <a href="https://schema.org/TextDigitalDocument">Schema.org/TextDigitalDocument</a> or even <a href="https://pdsinterop.org/conventions/notepad/#hyperdraft">Hyperdraft's occult format</a></li>
<li>either of the above, whether stored on remoteStorage, Fission, Solid, Dropbox, Google Drive, iCloud, nextCloud, locally via the <a href="https://developer.chrome.com/docs/capabilities/web-apis/file-system-access">File System Access API</a>, in a Git or GitHub repository, etc…</li>
<li>documents from Apple Notes or Simplenote</li>
<li>documents from Google Docs or Microsoft Word, editable as plain text, Markdown, or rich text</li>
<li>blog posts from <a href="https://ghost.org">Ghost</a> or <a href="https://wordpress.org">Wordpress</a></li>
<li>contacts, calendars, or correspondence as text by 'pointing at the wrong thing'</li>
<li>perhaps not limited to one of the above sources or collections at a time, simultaneously handling multiple clouds or storage providers, multiple sources, or multiple formats</li>
</ul>
<p>To more technical people, this might sound merely like 'integrating with 3rd party systems'. I would suggest that if those are the meaningful representations to someone using this kind of app, then it's what makes the data feel tangible and 'in the hands', clear that they actually have it without needing to trust any specific app, developer, or protocol.</p>
<p>What's the value of one app supporting a mix of these? Two apps? A whole ecosystem of apps? Not only reading but writing back via two-way sync? In the way we 'edit stuff as text' here, regardless of original format, what other affordances can be made for apps to 'edit stuff as X'? and how can it be enabled permisionlessly? This feels like an ideal for many protocol designers: a dynamic ecosystem where people are building and using software in unpredictable permutations, where progress happens faster than the speed of plugins, or perhaps even without codifying specific possibilities in advance. It's important to restate that these pluralistic potentials shouldn't be exclusive to Hyperdraft, as any note-taking app might benefit from at least some of this; ideally, it would be packaged in a way that minimizes complexity for the app developer while maximizing potential interop.</p>
<h1 id="text-editor-as-super-app">text editor as super-app</h1>
<p>With all these concepts in mind, let's paint a picture of how software could be more interoperable.</p>
<p>Point your app at various formats and locations, and it will show you meaningful representations; where possible, it provides natural ways to shape those representations, transparently translating and syncing back if necessary. Use specialized features, shortcuts, and interfaces for text editing wherever some modifiable text is exposed: instead of 'editing text documents', simply 'edit text' wherever you see it. Try the same with non-text. <a href="https://youtu.be/UNKgD8OzjCk?t=57m11s">Apps become smaller</a>.</p>
<p>Connect multiple sources simultaneously, no need to have it all in one storage. Assume a messy ecosystem and embrace plurality. If the data's preferred transport is not available to web apps, make it available via something like <a href="https://github.com/sockethub/sockethub">sockethub</a>. Bridges, converters, or dynamic vocabularies are written once and abundantly available—handy for whoever made them, but more likely for many other people; app developers can benefit without releasing new updates. At minimum, there are multiple useful options for import and export. Data is already everywhere, make use of it; rather than government surveillance and large tech companies monopolizing our data to cross-reference between multiple systems and silos, we own our data and the potentials that result.</p>
<p>It's a lot of work to consider, implement, and maintain storage, identity, CRDTs, encryption, and replication—on top of UX and the actual app: put it in the foundation, reduce pain for the interoperable app developer, minimize friction of having to choose—let them simply read and write data.</p>
<p>Every interoperable app becomes a super-app.</p>
<h1 id="my-future">my future</h1>
<p>I'm currently most excited to imagine: writing notes in Hyperdraft and 'seeing it' in <a href="https://logseq.com">Logseq</a>; writing a Zero Data web app that syncs with my phone's contact list; a liberator app where you can read from (and maybe write to) your favourite centralized platforms; journaling 'daily notes' in <a href="https://emojilog.rosano.ca">Emoji Log</a> and publishing as a digital garden via something like <a href="https://quartz.jzhao.xyz">Quartz</a>; a <a href="https://merveilles.town/@rosano/106071811392168445">tool to edit arbitrary JSON objects</a>; and my own apps supporting multiple clouds or sources simultaneously. It feels great to have space to progress on some of these ideas again: if you want to hear when I have this working in some way, sign up for the Zero Data mailing list here or follow me anywhere.</p>
<hr>
<h3 id="acknowledgements">acknowledgements</h3>
<p>Thanks (in reverse alphabetical order) to Sebastian Kippe, Michiel de Jong, Jess Martin, Heddi Ried, Gordon Brander, Elisa Guimarães, and Boris Mann for reading a draft of this and sharing feedback 🙏🏽.</p>
<hr>
<p><small>P.S. Gordon shared some interesting notes which I'll quote here (with permission):</small></p>
<details>
<summary>notes from Gordon</summary>
<blockquote>
<p>my own notes as I grapple with these same challenges:</p>
<ul>
<li><a href="https://subconscious.substack.com/p/credible-exit">Credible exit</a>. For exit to be credible, the data must be gettable, but also useful. What useful means depends upon the usecase/goal. So credible exit is a soft condition, or a gradient.</li>
<li>Hostile interoperability. Historically, interoperability has often emerged through competition. Microsoft Word or Photoshop implement a proprietary format. The app becomes popular. It spawns competitors, and also adjacent apps. These apps implement all or a subset of the proprietary format. Finally, that format becomes a de facto standard, and sometimes an actual standard. [See <a href="https://subconscious.substack.com/i/40537200/files-make-interoperability-the-default">Files allow interoperability to emerge retroactively</a>].</li>
</ul>
<p>Something I realized while writing these: Interoperability is not a feature. Interoperability is an ecological condition. It's what happens when different players with different incentives evolve networks of exchange. That means we can't force it to come about. We can only terraform the conditions where it might grow.</p>
<p>The desktop had the file system, a permissionless shared substrate belonging to the user. Apps could read each other's files and implement each other's file formats (each app effectively acts as a Cambria lens). These conditions were extremely conducive to the emergence of hostile interop.</p>
<p>This is what lead me personally toward building Noosphere protocol… it's essentially a very simple networked file system, supporting user ownership, multiplayer, and ability to permissionlessly plug multiple apps on top. There may be other paths to this outcome as well. In conversations with PVH he's mentioned that his motivation for investing in CRDT research is that if you have a file that knows how to sync itself, you don't have to care about the protocol.</p>
</blockquote>
</details>
<hr>
<p><small>P.P.S. I was thinking about this post before Jesse got me 'interop-pilled', but <a href="https://utopia.rosano.ca/interoperable-collaborative-apps-with-jess-martin/">our conversation</a> certainly helped add fuel to the fire:</small></p>
<iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/UNKgD8OzjCk" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/technical/">technical</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 9:40 am, January 16, 2024" href="/blog/interoperable-visions/"><time datetime="2024-01-16T09:40:26-05:00" data-pagefind-sort="date[datetime]">09h40</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Tuesday, January 16, 2024 09h40</title>
  <link>https://rosano.ca/log/2024-01-16-interoperable-visions/</link>
  <pubDate>Tue, 16 Jan 2024 09:40:26 -0500</pubDate>
  <guid>https://rosano.ca/log/2024-01-16-interoperable-visions/</guid>
  <description>👋 Heads up: if you&#39;re looking for the shorter, less technical version, read pointing at the wrong thing.&#xA;I have been using my own Zero Data apps (storing all data on spaces you own) since 2018, starting with Hyperdraft for taking notes and gradually developing five more to optimize other meaningful workflows. It was enough back then to know that every iota of my data from these apps, including documents, configurations, and preferences, was in a place I control—a &#39;personal data store&#39; (PDS).&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><p><small>👋 Heads up: if you're looking for the shorter, less technical version, read <a href="https://utopia.rosano.ca/pointing-at-the-wrong-thing/">pointing at the wrong thing</a>.</small></p>
<hr>
<p>I have been using my own <a href="https://0data.app">Zero Data</a> apps (storing all data on spaces you own) since 2018, starting with <a href="https://hyperdraft.rosano.ca">Hyperdraft</a> for taking notes and gradually developing five more to optimize other meaningful workflows. It was enough back then to know that every iota of my data from these apps, including documents, configurations, and preferences, was in a place I control—a 'personal data store' (PDS).</p></nugget><hr>
<div class="content"><p><small>👋 Heads up: if you're looking for the shorter, less technical version, read <a href="https://utopia.rosano.ca/pointing-at-the-wrong-thing/">pointing at the wrong thing</a>.</small></p>
<hr>
<p>I have been using my own <a href="https://0data.app">Zero Data</a> apps (storing all data on spaces you own) since 2018, starting with <a href="https://hyperdraft.rosano.ca">Hyperdraft</a> for taking notes and gradually developing five more to optimize other meaningful workflows. It was enough back then to know that every iota of my data from these apps, including documents, configurations, and preferences, was in a place I control—a 'personal data store' (PDS).</p>
<p>It's been great, perhaps life-changing, and still continues to be a vital part of how I organize myself and my projects: my important stuff is with me at all times and eventually gets synced to all my devices; these web apps happen to be <a href="https://www.inkandswitch.com/local-first">local-first</a> and work fine without internet access; I've spent no time on spam, or proving to a machine that I'm human via captchas; and somehow I was even able to collaborate with other people on flashcards despite it not really being baked into my development frameworks—all without any felt presence of a large tech company deciding whether I can or not.</p>
<h1 id="there-but-invisible">there, but invisible</h1>
<p>One of the principles I listed on the Zero Data page is &quot;do what you want with your data at any time&quot;, and I've been reflecting on some limitations of the current reality: it's technically true that I'm able to 'do what I want with it any time', but what <em>can</em> I actually do with this?</p>
<p>Most of my data in a PDS is stored in a format for machines ('<a href="https://simple.wikipedia.org/wiki/JSON">JSON objects</a>'), which I generally don't wrangle with my own hands—perhaps nobody should (to avoid throwing a computer into crisis by missing a comma). Sometimes I write code to maneuver this format into something meaningful, mostly for one-off situations that don't repeat and wouldn't be resolvable with any graphical interfaces ('<a href="https://simple.wikipedia.org/wiki/Graphical%5Fuser%5Finterfaces%5Fand%5Fconsoles">GUI</a>' software) that I'm aware of; I would prefer to avoid coding and can imagine it's not an option for most people (who still might not have the programming knowledge or mindset). More often, I use self-hosted <a href="https://n8n.io">n8n automations</a> as a way to bridge different flows while using this data; it can be overall fantastic, yet still cumbersome and not quite low-code enough to include non-tech people. In the process, I learned about and self-hosted the no-code database <a href="https://www.directus.io">Directus</a>, which, although well-designed in many ways, feels quite heavy-handed and unfortunately not local-first. There are apps like <a href="https://inspektor.5apps.com">Inspektor</a> with useful affordances to edit key-value pairs as if they were 'fields', but it's not practical to do this regularly.</p>
<p>This data is somehow 100% mine, but as if I can't touch it or do much without technical expertise, as if I don't really have it even though it's right there; this is in some way strangely similar to having it stuck in one of those silos that I meant to avoid in the first place. The nicest way would be to simply use a variety of apps that can (inter-)operate on the same data without breaking each other. Observing <a href="https://pdsinterop.org/conventions/bookmark/#webmarks">how some of these Zero Data apps store the data</a> (mine included), it seems there's a long way to go. Interoperability (interop) would make this better.</p>
<hr>
<h1 id="pure-not-practical">pure not practical</h1>
<p>Related to silos, I've also been reflecting on how Zero Data shouldn't always mean asking people to leave the tools they know, or starting a new ecosystem from scratch. I've probably been as guilty of this as anyone else who claims to care about more ethical technology, and believed for a while in blank slates, but now I assume that things are and perhaps should be <em>messy</em>, because that's how it works in real life, with humans and their complex logistical or emotional entanglements. Only in the tech sphere would it be popular to 'start from scratch', with pristine self-declared confines unaffected by legacy; there's enough money and free time there to prop it up until there isn't, but for the rest of the world, subsidizing success isn't always sustainable: politically speaking, people generally gain leverage by forming imperfect coalitions rather than by staying 'pure' to any ideals or working exclusively with those who pledge the same; these pluralistic (messy) conditions for collaboration are exactly what an approach to apps and their data could exemplify.</p>
<p>In practice, that could mean:</p>
<ul>
<li>embracing popular formats, even if created by the devil</li>
<li>not waiting for neat standards, instead letting systems grow from <a href="https://subconscious.substack.com/p/simple-seeds">simple seeds</a></li>
<li>not pushing people to a single blessed representation, instead perhaps supporting a dynamic vocabulary with something like <a href="https://www.inkandswitch.com/cambria">Cambria</a></li>
<li>having diverse options for import and export, then proliferating them through packages</li>
<li>minimizing the 'destructive' tradeoffs of any decision.</li>
</ul>
<p>Perhaps instead of forcing a choice to be made, there's potential to encourage a 'both and' mentality: alternative technology and the frameworks built in that world have an opportunity to become sort of 'data liberators' that help people avoid feeling stuck: personal data stores and apps built for them could, rather than feeling like silos, be considered bridges between or out of them by enabling <a href="https://subconscious.substack.com/p/credible-exit">credible exit</a> where there is none. Interop would make this better.</p>
<hr>
<h1 id="function-over-formats">function over formats</h1>
<p>One way to restate and combine the above two perspectives is that the feeling of 'having your data in your hands' or '<a href="https://youtu.be/McKXW-bP2HQ?t=1833">handedness</a>' (credit to <a href="https://bmann.ca">Boris</a> for the term)—being able to mold and maneuver it as you wish—comes not from a consecrated format but rather from access to diverse lenses, views, or 'applications' for the same data: maximizing what a human can do while minimizing the knowledge or skill required. I would say it's the variety in those possibilities that make the data tangible in this way, not the format itself, even though the format 'enables' it. Of course, interop would make this better.</p>
<hr>
<h1 id="apps-as-dumb-interoperable-views">apps as dumb, interoperable views</h1>
<p>Various people (such as <a href="https://ruben.verborgh.org/blog/2017/12/20/paradigm-shifts-for-the-decentralized-web/#apps-become-views">Ruben Verborgh</a> and <a href="https://www.geoffreylitt.com/2021/03/05/bring-your-own-client.html">Geoffrey Litt</a>) have articulated visions of apps almost like functions where your data goes in and a visual representation or interface comes out. I hope that by sketching out some more details around interop, something new can become discernible.</p>
<p>I've been thinking about this for my note-taking app and will use it as the main example, but there's probably lots that can be applied to other kinds of apps. As an aside, stealing these concepts for your project would not only be appreciated, but perhaps a way to 'do your part' if you're an interoperable app developer.</p>
<h2 id="decouple-type-and-location-enable-pointing">decouple type and location, enable pointing</h2>
<p>Text editors are commonly used to 'edit text documents', often 'plain text' and sometimes 'rich text' with formatting. Unlike native apps where you can simply 'drag and drop' or 'share' files and the app will try to 'open' them, apps built for 'personal data stores' (Zero Data apps) <a href="https://pdsinterop.org/conventions/notepad/#litewrite">currently link</a> the format or 'type' to a specific location or 'path': for example, reading or writing note-like things in <code>/notes</code> versus <code>/documents</code> versus <code>/$APP_NAME</code>, which makes it hard to anticipate where your notes will be and breaks interop. There's also a tension here between 'app folder' versus 'type folder' (which I call 'chaos folder'), or <a href="https://michielbdejong.com/blog/29.html">'document box' versus 'data graph'</a>. One can debate whether there's such a thing as 'the correct' place, but let's assume it doesn't matter: if a Zero Data app wants to access a specific kind of data, ultimately it needs to be built 'knowing' about that relationship between location and type. Solid 'solves' this with <a href="https://solid.github.io/type-indexes/">type indexes</a>, remoteStorage with <a href="https://remotestoragejs.readthedocs.io/en/latest/data-modules.html">data modules</a>, but neither are guaranteed to be used when reading or writing data. Until there's a magical solution to that complex social problem of getting people (in this case, app developers) on the same page, it would be more flexible to perhaps have a default or preferred location but more importantly, like native apps, an option to 'point' the app at some data, whether local files, on cloud storage, or in PDS 'JSON objects'.</p>
<h2 id="pointing-at-the-wrong-thing">pointing at the 'wrong' thing</h2>
<p>Would it make sense to point a notes app at your bookmarks? Or a maps app at your contact list? Or a flashcards app at your music collection? Some domains are more complementary than others, but regardless, the potential combinatorial possibilities of being open and flexible in this way are immense and would enable people to play with and combine data in interesting ways.</p>
<p>By pointing your notepad at a bookmarks app, for example, you might use fancier text-editing capabilities, rather than those of a simple text field, to add notes to saved links, perhaps more comfortably draft a personal message or blog post about that link, <em>and</em> have it automatically associated correctly with the corresponding document from a different app. Pointing at other things (like contacts, recipes, correspondence, etc.) might mean dealing with a 'plain editable text' representation of those 'items' or 'objects', and at the very least being able to read and search them. Consider also pointing a maps app at your contacts (maybe to see where your friends are?), or recipes (maybe to see where foods or ingredients come from or can be found?), or photos (maybe to see where you've made some memories?).</p>
<p>These are some of the possibilities when there's flexibility in the storage location and format; this sort of exists already with native apps and individual files, but pointing at 'collections of objects' in the way previously described often requires specific integrations (as <a href="https://www.apple.com/icloud/find-my">Find my</a> shows your friends or <a href="https://apps.apple.com/us/app/photos/id1584215428">Photos</a> presents places from geotagged images).</p>
<p>Again, I'd leave it to someone smarter than I to discover the best interface solution here: my imagination is currently limited to something like a 'file picker' without the burden of a deeply nested file system, where even on a mobile device you can say 'open this from there' with just a few taps; maybe the picker itself needs to be aware of various formats and how to convert random stuff into vocabularies that it knows the receiving app will understand—like the <a href="https://developer.apple.com/design/human-interface-guidelines/activity-views">iOS Share sheet</a> shows &quot;what you can do with the shared content&quot;, but in reverse, to show &quot;what content you can use with the current app&quot;; anyone familiar with <a href="https://qsapp.com">Quicksilver</a> or <a href="https://launchlet.dev">Launchlet</a>'s 'pipe mode' might hear echos of 'subject' and 'action' ('with X, do Y').</p>
<h2 id="two-way-sync">two-way sync</h2>
<p>Going a step further, let's imagine seeing contacts in this note-taking app (represented as plain editable text); modifying a name, address, or text blurb; and having the changes translate back from text into the original format (perhaps vCard). A bidirectional transformer or translator could be written once (perhaps even by one person), and any note-taking app could use that to flexibly view and edit all kinds of things. The closest usable solution I've seen for JSON objects (although not yet in common use) is <a href="https://remotestoragejs.readthedocs.io/en/latest/data-modules/defining-data-types.html">remoteStorage data modules</a>, encapsulating schema and logic together in a package that can enable any app to 'handle' specific data; <a href="https://github.com/solid-contrib/data-modules">similar efforts for Solid</a> are currently in development. Lots of people use text editors (plain or rich) and would have an option to move data around fluidly while still benefiting from apps that use structured data under the hood. For a distant but novel approach, see how the <a href="https://www.inkandswitch.com/potluck">Potluck research prototype</a> cuts out the middleman and simply uses text in a notepad as the home for all kinds of data.</p>
<h2 id="dynamic-schemas-from-the-start">dynamic schemas from the start</h2>
<p>It might take a lot of work to write and maintain many data converters, and although still useful under those circumstances, what if it could be easier or partially automated through a cheap pseudo-intelligent function? Perhaps a library could be preloaded with vocabularies from <a href="https://schema.org">Schema.org</a> or <a href="https://shaperepo.com">ShapeRepo</a> and utilities that attempt a simple best guess when an input 'fits' a known structure? This could help with the issue of 'stale apps' (that either haven't been updated in a long time or may never be updated again) by enabling them to handle data dynamically from the start (as opposed to perpetually speaking only one fixed format), perhaps without requiring updates to learn about new schemas, and thus helping more of them remain compatible, interoperable, and useful without developer effort.</p>
<h2 id="flexibility-through-pluralism">flexibility through pluralism</h2>
<p>In addition to processing various forms of local data, I can imagine it being useful to have specific integrations with external services, transform their representations into one or multiple common data vocabularies, and package that integration to simplify inclusion in other apps. Imagine a text editor that can deal with input spanning the gamut of:</p>
<ul>
<li><code>.txt</code> files in a personal data store, whether stored in <code>/notes</code>, <code>/documents</code>, or <code>/$APP_NAME</code></li>
<li>JSON text documents, whether stored as <a href="https://schema.org/TextDigitalDocument">Schema.org/TextDigitalDocument</a> or even <a href="https://pdsinterop.org/conventions/notepad/#hyperdraft">Hyperdraft's occult format</a></li>
<li>either of the above, whether stored on remoteStorage, Fission, Solid, Dropbox, Google Drive, iCloud, nextCloud, locally via the <a href="https://developer.chrome.com/docs/capabilities/web-apis/file-system-access">File System Access API</a>, in a Git or GitHub repository, etc…</li>
<li>documents from Apple Notes or Simplenote</li>
<li>documents from Google Docs or Microsoft Word, editable as plain text, Markdown, or rich text</li>
<li>blog posts from <a href="https://ghost.org">Ghost</a> or <a href="https://wordpress.org">Wordpress</a></li>
<li>contacts, calendars, or correspondence as text by 'pointing at the wrong thing'</li>
<li>perhaps not limited to one of the above sources or collections at a time, simultaneously handling multiple clouds or storage providers, multiple sources, or multiple formats</li>
</ul>
<p>To more technical people, this might sound merely like 'integrating with 3rd party systems'. I would suggest that if those are the meaningful representations to someone using this kind of app, then it's what makes the data feel tangible and 'in the hands', clear that they actually have it without needing to trust any specific app, developer, or protocol.</p>
<p>What's the value of one app supporting a mix of these? Two apps? A whole ecosystem of apps? Not only reading but writing back via two-way sync? In the way we 'edit stuff as text' here, regardless of original format, what other affordances can be made for apps to 'edit stuff as X'? and how can it be enabled permisionlessly? This feels like an ideal for many protocol designers: a dynamic ecosystem where people are building and using software in unpredictable permutations, where progress happens faster than the speed of plugins, or perhaps even without codifying specific possibilities in advance. It's important to restate that these pluralistic potentials shouldn't be exclusive to Hyperdraft, as any note-taking app might benefit from at least some of this; ideally, it would be packaged in a way that minimizes complexity for the app developer while maximizing potential interop.</p>
<h1 id="text-editor-as-super-app">text editor as super-app</h1>
<p>With all these concepts in mind, let's paint a picture of how software could be more interoperable.</p>
<p>Point your app at various formats and locations, and it will show you meaningful representations; where possible, it provides natural ways to shape those representations, transparently translating and syncing back if necessary. Use specialized features, shortcuts, and interfaces for text editing wherever some modifiable text is exposed: instead of 'editing text documents', simply 'edit text' wherever you see it. Try the same with non-text. <a href="https://youtu.be/UNKgD8OzjCk?t=57m11s">Apps become smaller</a>.</p>
<p>Connect multiple sources simultaneously, no need to have it all in one storage. Assume a messy ecosystem and embrace plurality. If the data's preferred transport is not available to web apps, make it available via something like <a href="https://github.com/sockethub/sockethub">sockethub</a>. Bridges, converters, or dynamic vocabularies are written once and abundantly available—handy for whoever made them, but more likely for many other people; app developers can benefit without releasing new updates. At minimum, there are multiple useful options for import and export. Data is already everywhere, make use of it; rather than government surveillance and large tech companies monopolizing our data to cross-reference between multiple systems and silos, we own our data and the potentials that result.</p>
<p>It's a lot of work to consider, implement, and maintain storage, identity, CRDTs, encryption, and replication—on top of UX and the actual app: put it in the foundation, reduce pain for the interoperable app developer, minimize friction of having to choose—let them simply read and write data.</p>
<p>Every interoperable app becomes a super-app.</p>
<h1 id="my-future">my future</h1>
<p>I'm currently most excited to imagine: writing notes in Hyperdraft and 'seeing it' in <a href="https://logseq.com">Logseq</a>; writing a Zero Data web app that syncs with my phone's contact list; a liberator app where you can read from (and maybe write to) your favourite centralized platforms; journaling 'daily notes' in <a href="https://emojilog.rosano.ca">Emoji Log</a> and publishing as a digital garden via something like <a href="https://quartz.jzhao.xyz">Quartz</a>; a <a href="https://merveilles.town/@rosano/106071811392168445">tool to edit arbitrary JSON objects</a>; and my own apps supporting multiple clouds or sources simultaneously. It feels great to have space to progress on some of these ideas again: if you want to hear when I have this working in some way, sign up for the Zero Data mailing list here or follow me anywhere.</p>
<hr>
<h3 id="acknowledgements">acknowledgements</h3>
<p>Thanks (in reverse alphabetical order) to Sebastian Kippe, Michiel de Jong, Jess Martin, Heddi Ried, Gordon Brander, Elisa Guimarães, and Boris Mann for reading a draft of this and sharing feedback 🙏🏽.</p>
<hr>
<p><small>P.S. Gordon shared some interesting notes which I'll quote here (with permission):</small></p>
<details>
<summary>notes from Gordon</summary>
<blockquote>
<p>my own notes as I grapple with these same challenges:</p>
<ul>
<li><a href="https://subconscious.substack.com/p/credible-exit">Credible exit</a>. For exit to be credible, the data must be gettable, but also useful. What useful means depends upon the usecase/goal. So credible exit is a soft condition, or a gradient.</li>
<li>Hostile interoperability. Historically, interoperability has often emerged through competition. Microsoft Word or Photoshop implement a proprietary format. The app becomes popular. It spawns competitors, and also adjacent apps. These apps implement all or a subset of the proprietary format. Finally, that format becomes a de facto standard, and sometimes an actual standard. [See <a href="https://subconscious.substack.com/i/40537200/files-make-interoperability-the-default">Files allow interoperability to emerge retroactively</a>].</li>
</ul>
<p>Something I realized while writing these: Interoperability is not a feature. Interoperability is an ecological condition. It's what happens when different players with different incentives evolve networks of exchange. That means we can't force it to come about. We can only terraform the conditions where it might grow.</p>
<p>The desktop had the file system, a permissionless shared substrate belonging to the user. Apps could read each other's files and implement each other's file formats (each app effectively acts as a Cambria lens). These conditions were extremely conducive to the emergence of hostile interop.</p>
<p>This is what lead me personally toward building Noosphere protocol… it's essentially a very simple networked file system, supporting user ownership, multiplayer, and ability to permissionlessly plug multiple apps on top. There may be other paths to this outcome as well. In conversations with PVH he's mentioned that his motivation for investing in CRDT research is that if you have a file that knows how to sync itself, you don't have to care about the protocol.</p>
</blockquote>
</details>
<hr>
<p><small>P.P.S. I was thinking about this post before Jesse got me 'interop-pilled', but <a href="https://utopia.rosano.ca/interoperable-collaborative-apps-with-jess-martin/">our conversation</a> certainly helped add fuel to the fire:</small></p>
<iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/UNKgD8OzjCk" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/technical/">technical</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 9:40 am, January 16, 2024" href="/log/2024-01-16-interoperable-visions/"><time datetime="2024-01-16T09:40:26-05:00" data-pagefind-sort="date[datetime]">09h40</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>interoperable collaborative apps (with Jess Martin)</title>
  <link>https://rosano.ca/blog/interoperable-collaborative-apps-with-jess-martin/</link>
  <pubDate>Mon, 06 Nov 2023 14:15:11 +0000</pubDate>
  <guid>https://rosano.ca/blog/interoperable-collaborative-apps-with-jess-martin/</guid>
  <description>Even when you #OwnYourData 100%, many might find little agency in being able to &#39;edit properties on JSON objects&#39;. What level of handedness would be meaningful to them?</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>Even when you #OwnYourData 100%, many might find little agency in being able to 'edit properties on JSON objects'. What level of handedness would be meaningful to them?</nugget><hr>
<div class="content"><iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/UNKgD8OzjCk" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<table>
  <thead>
      <tr>
          <th>time</th>
          <th>section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=00m00s">opening questions</a></td>
      </tr>
      <tr>
          <td>01:13</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=01m13s">zero data</a></td>
      </tr>
      <tr>
          <td>02:05</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=02m05s">DXOS</a></td>
      </tr>
      <tr>
          <td>03:20</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=03m20s">zero data origin</a></td>
      </tr>
      <tr>
          <td>07:23</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=07m23s">apps as public spaces</a></td>
      </tr>
      <tr>
          <td>10:19</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=10m19s">diffuse supporting multiple backends</a></td>
      </tr>
      <tr>
          <td>11:04</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=11m04s">rosano's apps</a></td>
      </tr>
      <tr>
          <td>12:03</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=12m03s">adoption challenges</a></td>
      </tr>
      <tr>
          <td>15:01</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=15m01s">interfaces for multi-device recovery</a></td>
      </tr>
      <tr>
          <td>18:15</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=18m15s">using a remoteStorage app to teach languages</a></td>
      </tr>
      <tr>
          <td>22:05</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=22m05s">prove functionality to groups</a></td>
      </tr>
      <tr>
          <td>23:42</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=23m42s">invisible technology</a></td>
      </tr>
      <tr>
          <td>25:37</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=25m37s">cross-app interoperability visions</a></td>
      </tr>
      <tr>
          <td>27:02</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=27m02s">syncing a shared data substrate</a></td>
      </tr>
      <tr>
          <td>29:46</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=29m46s">group chat as a catalyst for interop</a></td>
      </tr>
      <tr>
          <td>31:16</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=31m16s">integrating with existing storage</a></td>
      </tr>
      <tr>
          <td>35:45</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=35m45s">credible exit and exit by default</a></td>
      </tr>
      <tr>
          <td>38:18</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=38m18s">owning your data without handedness</a></td>
      </tr>
      <tr>
          <td>42:44</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=42m44s">interoperability needs adoption</a></td>
      </tr>
      <tr>
          <td>45:51</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=45m51s">valuable technology comes from other purposes</a></td>
      </tr>
      <tr>
          <td>47:16</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=47m16s">open-source can live on</a></td>
      </tr>
      <tr>
          <td>49:58</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=49m58s">re-thinking funding apps</a></td>
      </tr>
      <tr>
          <td>51:10</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=51m10s">making space for contributors</a></td>
      </tr>
      <tr>
          <td>52:48</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=52m48s">old house versus old app</a></td>
      </tr>
      <tr>
          <td>53:49</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=53m49s">personal spaces and malleable software</a></td>
      </tr>
      <tr>
          <td>55:30</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=55m30s">being handy with houses and software</a></td>
      </tr>
      <tr>
          <td>57:11</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=57m11s">shrinking programs</a></td>
      </tr>
  </tbody>
</table>
<h3 id="links">Links</h3>
<ul>
<li><a href="https://jessmart.in">Jess Martin</a></li>
<li><a href="https://dxos.org">DXOS</a></li>
<li><a href="https://en.wikipedia.org/wiki/The%5FHumane%5FInterface">&quot;The Humane Interface&quot; by Jeff Raskin</a></li>
<li><a href="https://subconscious.substack.com/p/credible-exit">&quot;Credible exit&quot; by Gordon Brander</a></li>
<li><a href="https://0data.app">Zero Data</a></li>
</ul>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/technical/">technical</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 11:15 am, November 6, 2023" href="/blog/interoperable-collaborative-apps-with-jess-martin/"><time datetime="2023-11-06T11:15:11-03:00" data-pagefind-sort="date[datetime]">11h15</time></a>

		
		<span>from <a href="/log/place/belo-horizonte/">Belo Horizonte</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Monday, November 6, 2023 11h15</title>
  <link>https://rosano.ca/log/2023-11-06-interoperable-collaborative-apps-with-jess-martin/</link>
  <pubDate>Mon, 06 Nov 2023 11:15:11 -0300</pubDate>
  <guid>https://rosano.ca/log/2023-11-06-interoperable-collaborative-apps-with-jess-martin/</guid>
  <description> time section 00:00 opening questions 01:13 zero data 02:05 DXOS 03:20 zero data origin 07:23 apps as public spaces 10:19 diffuse supporting multiple backends 11:04 rosano&#39;s apps 12:03 adoption challenges 15:01 interfaces for multi-device recovery 18:15 using a remoteStorage app to teach languages 22:05 prove functionality to groups 23:42 invisible technology 25:37 cross-app interoperability visions 27:02 syncing a shared data substrate 29:46 group chat as a catalyst for interop 31:16 integrating with existing storage 35:45 credible exit and exit by default 38:18 owning your data without handedness 42:44 interoperability needs adoption 45:51 valuable technology comes from other purposes 47:16 open-source can live on 49:58 re-thinking funding apps 51:10 making space for contributors 52:48 old house versus old app 53:49 personal spaces and malleable software 55:30 being handy with houses and software 57:11 shrinking programs Links Jess Martin DXOS &amp;quot;The Humane Interface&amp;quot; by Jeff Raskin &amp;quot;Credible exit&amp;quot; by Gordon Brander Zero Data </description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/UNKgD8OzjCk" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<table>
  <thead>
      <tr>
          <th>time</th>
          <th>section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=00m00s">opening questions</a></td>
      </tr>
      <tr>
          <td>01:13</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=01m13s">zero data</a></td>
      </tr>
      <tr>
          <td>02:05</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=02m05s">DXOS</a></td>
      </tr>
      <tr>
          <td>03:20</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=03m20s">zero data origin</a></td>
      </tr>
      <tr>
          <td>07:23</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=07m23s">apps as public spaces</a></td>
      </tr>
      <tr>
          <td>10:19</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=10m19s">diffuse supporting multiple backends</a></td>
      </tr>
      <tr>
          <td>11:04</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=11m04s">rosano's apps</a></td>
      </tr>
      <tr>
          <td>12:03</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=12m03s">adoption challenges</a></td>
      </tr>
      <tr>
          <td>15:01</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=15m01s">interfaces for multi-device recovery</a></td>
      </tr>
      <tr>
          <td>18:15</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=18m15s">using a remoteStorage app to teach languages</a></td>
      </tr>
      <tr>
          <td>22:05</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=22m05s">prove functionality to groups</a></td>
      </tr>
      <tr>
          <td>23:42</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=23m42s">invisible technology</a></td>
      </tr>
      <tr>
          <td>25:37</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=25m37s">cross-app interoperability visions</a></td>
      </tr>
      <tr>
          <td>27:02</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=27m02s">syncing a shared data substrate</a></td>
      </tr>
      <tr>
          <td>29:46</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=29m46s">group chat as a catalyst for interop</a></td>
      </tr>
      <tr>
          <td>31:16</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=31m16s">integrating with existing storage</a></td>
      </tr>
      <tr>
          <td>35:45</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=35m45s">credible exit and exit by default</a></td>
      </tr>
      <tr>
          <td>38:18</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=38m18s">owning your data without handedness</a></td>
      </tr>
      <tr>
          <td>42:44</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=42m44s">interoperability needs adoption</a></td>
      </tr>
      <tr>
          <td>45:51</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=45m51s">valuable technology comes from other purposes</a></td>
      </tr>
      <tr>
          <td>47:16</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=47m16s">open-source can live on</a></td>
      </tr>
      <tr>
          <td>49:58</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=49m58s">re-thinking funding apps</a></td>
      </tr>
      <tr>
          <td>51:10</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=51m10s">making space for contributors</a></td>
      </tr>
      <tr>
          <td>52:48</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=52m48s">old house versus old app</a></td>
      </tr>
      <tr>
          <td>53:49</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=53m49s">personal spaces and malleable software</a></td>
      </tr>
      <tr>
          <td>55:30</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=55m30s">being handy with houses and software</a></td>
      </tr>
      <tr>
          <td>57:11</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=57m11s">shrinking programs</a></td>
      </tr>
  </tbody>
</table>
<h3 id="links">Links</h3>
<ul>
<li><a href="https://jessmart.in">Jess Martin</a></li>
<li><a href="https://dxos.org">DXOS</a></li>
<li><a href="https://en.wikipedia.org/wiki/The%5FHumane%5FInterface">&quot;The Humane Interface&quot; by Jeff Raskin</a></li>
<li><a href="https://subconscious.substack.com/p/credible-exit">&quot;Credible exit&quot; by Gordon Brander</a></li>
<li><a href="https://0data.app">Zero Data</a></li>
</ul></nugget><hr>
<div class="content"><iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/UNKgD8OzjCk" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<table>
  <thead>
      <tr>
          <th>time</th>
          <th>section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=00m00s">opening questions</a></td>
      </tr>
      <tr>
          <td>01:13</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=01m13s">zero data</a></td>
      </tr>
      <tr>
          <td>02:05</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=02m05s">DXOS</a></td>
      </tr>
      <tr>
          <td>03:20</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=03m20s">zero data origin</a></td>
      </tr>
      <tr>
          <td>07:23</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=07m23s">apps as public spaces</a></td>
      </tr>
      <tr>
          <td>10:19</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=10m19s">diffuse supporting multiple backends</a></td>
      </tr>
      <tr>
          <td>11:04</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=11m04s">rosano's apps</a></td>
      </tr>
      <tr>
          <td>12:03</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=12m03s">adoption challenges</a></td>
      </tr>
      <tr>
          <td>15:01</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=15m01s">interfaces for multi-device recovery</a></td>
      </tr>
      <tr>
          <td>18:15</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=18m15s">using a remoteStorage app to teach languages</a></td>
      </tr>
      <tr>
          <td>22:05</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=22m05s">prove functionality to groups</a></td>
      </tr>
      <tr>
          <td>23:42</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=23m42s">invisible technology</a></td>
      </tr>
      <tr>
          <td>25:37</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=25m37s">cross-app interoperability visions</a></td>
      </tr>
      <tr>
          <td>27:02</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=27m02s">syncing a shared data substrate</a></td>
      </tr>
      <tr>
          <td>29:46</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=29m46s">group chat as a catalyst for interop</a></td>
      </tr>
      <tr>
          <td>31:16</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=31m16s">integrating with existing storage</a></td>
      </tr>
      <tr>
          <td>35:45</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=35m45s">credible exit and exit by default</a></td>
      </tr>
      <tr>
          <td>38:18</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=38m18s">owning your data without handedness</a></td>
      </tr>
      <tr>
          <td>42:44</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=42m44s">interoperability needs adoption</a></td>
      </tr>
      <tr>
          <td>45:51</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=45m51s">valuable technology comes from other purposes</a></td>
      </tr>
      <tr>
          <td>47:16</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=47m16s">open-source can live on</a></td>
      </tr>
      <tr>
          <td>49:58</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=49m58s">re-thinking funding apps</a></td>
      </tr>
      <tr>
          <td>51:10</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=51m10s">making space for contributors</a></td>
      </tr>
      <tr>
          <td>52:48</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=52m48s">old house versus old app</a></td>
      </tr>
      <tr>
          <td>53:49</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=53m49s">personal spaces and malleable software</a></td>
      </tr>
      <tr>
          <td>55:30</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=55m30s">being handy with houses and software</a></td>
      </tr>
      <tr>
          <td>57:11</td>
          <td><a href="https://youtu.be/UNKgD8OzjCk?t=57m11s">shrinking programs</a></td>
      </tr>
  </tbody>
</table>
<h3 id="links">Links</h3>
<ul>
<li><a href="https://jessmart.in">Jess Martin</a></li>
<li><a href="https://dxos.org">DXOS</a></li>
<li><a href="https://en.wikipedia.org/wiki/The%5FHumane%5FInterface">&quot;The Humane Interface&quot; by Jeff Raskin</a></li>
<li><a href="https://subconscious.substack.com/p/credible-exit">&quot;Credible exit&quot; by Gordon Brander</a></li>
<li><a href="https://0data.app">Zero Data</a></li>
</ul>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/technical/">technical</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 11:15 am, November 6, 2023" href="/log/2023-11-06-interoperable-collaborative-apps-with-jess-martin/"><time datetime="2023-11-06T11:15:11-03:00" data-pagefind-sort="date[datetime]">11h15</time></a>

		
		<span>from <a href="/log/place/belo-horizonte/">Belo Horizonte</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Levels of agency</title>
  <link>https://rosano.ca/blog/levels-of-agency/</link>
  <pubDate>Thu, 19 Jan 2023 11:13:12 +0000</pubDate>
  <guid>https://rosano.ca/blog/levels-of-agency/</guid>
  <description>Me, you, and us in software.</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>Me, you, and us in software.</nugget><hr>
<div class="content"><p>I've been thinking about these three framings of what is possible with a specific technology:</p>
<ol>
<li>Look what I can do</li>
<li>Look what you can do</li>
<li>Look what we can do</li>
</ol>
<p>An example of the first would be when someone (maybe an artist/hacker/nerd) creates a bespoke experience that showcases a way of doing things: maybe a cool visualization of events in their life, a fun automation that connects disparate services and tells you things like the current height of a beloved plant, or an utterly custom web page design to be used only once perhaps as a portfolio site. It can be a way to demonstrate control over one's materials, and a marvel to observe and interact with, but you can't make your own—this isn't meant to cast the creation as selfish, but rather to draw where the line is in terms of your ability to build something with it—perhaps even the goal is to be unique and therefore not replicatable by others.</p>
<p>Most apps fall into the second category by encapsulating the 'principles of an experience' (to roughly paraphrase Steve Jobs): they enable people to create their own version of <em>the thing</em>, be it a text document, map of meaningful locations, photo albums, or pretty much anything imaginable. We now say &quot;there's an app for that&quot; and it's the default way for most people to express themselves through digital mediums. 'Look what you can do' empowers people to explore, create, and then share with others, more so than the first category, so there's an order of magnitude difference in the possibility space, but it's also more complex to build as one needs to consider the assumptions of multiple kinds of stakeholders or 'users'.</p>
<p>In the third category, adding social layers can encourage network effects and moves the technology beyond a tool or utility into collective creation; this can occur through follower graphs, timelines, multiplayer, ratings, etc… Producing a digital artifact has platform native ways for people to interact and react, either passively through comments and 'likes' or more actively through 'remixing' (such as reaction videos on YouTube or lip-syncing on TikTok). It's even more difficult to build than the second category because of the additional complexity of network interactions and identity management, but the result is that the technology starts to take on a life of its own as the experience becomes dominated by how other people use it.</p>
<p>Somewhere between these categories, one can find extensions and customization (achieved through some apps as 'scripting'). When someone extends an app for themselves, it might be an example of the first category, whereas passing that around brings it closer to the second, and sharable platform native 'plugins' or 'add-ons' or 'bots' can bring it closer to the third.</p>
<p>Usability and accessibility can impact where a technology falls on the spectrum: not paying attention to these dimensions makes it harder to move to higher levels of agency, staying more exclusive as &quot;Look at what I/you/we can do, as the capable ones&quot;; as in the first level, it's not necessarily selfish but if the intention is to maximize agency, then this creates a mismatch. Self-hosting generally suffers from this, but there are <a href="https://easyindie.app">Easy Indie</a> platforms that enable one-click installation, thereby broadening the potential base of people able to participate. Tools like <a href="https://wave.webaim.org">WAVE</a> can help spot simple improvements to accessibility in web-based projects. Although <a href="https://rosano.hmm.garden/01gq5znszqemzj0z45pzkrw2f6">mainstream software expectations can be an antipattern</a>, a cultural appreciation for the <a href="https://jenson.org/free">simple and functional</a> can help raise usability standards, turning design into a language understood by more people.</p>
<p>I see adding interoperability between systems and enabling data to be re-combined in abstract ways as kind of another level, maybe &quot;Look what a not-yet-existing entity can do&quot;: enabling future possibilities by opening data to be composed by the unknown is, in my opinion, just as transformative as moving from 'I' to 'you' or 'you' to 'we'. The emerging <a href="https://0data.app">Zero Data</a> ecosystem (keeping data and apps encapsulated from one another) feels promising as a usable example of what this could be like. Automation systems like <a href="https://zapier.com">Zapier</a> or <a href="https://n8n.io">n8n</a> are also useful as a way to ensure data is composable, or at least exposed as an API. It shows to me that #OwnYourData is not just about privacy or autonomy, but also about the cool cybernetic possibilities of a future we haven't imagined yet.</p>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 7:13 pm, January 19, 2023" href="/blog/levels-of-agency/"><time datetime="2023-01-19T19:13:12&#43;08:00" data-pagefind-sort="date[datetime]">19h13</time></a>

		
		<span>from <a href="/log/place/langkawi/">Langkawi</a> / </span>

		<span><a href="/log/country/malaysia/">Malaysia</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Thursday, January 19, 2023 19h13</title>
  <link>https://rosano.ca/log/2023-01-19-levels-of-agency/</link>
  <pubDate>Thu, 19 Jan 2023 19:13:12 +0800</pubDate>
  <guid>https://rosano.ca/log/2023-01-19-levels-of-agency/</guid>
  <description>I&#39;ve been thinking about these three framings of what is possible with a specific technology:&#xA;Look what I can do Look what you can do Look what we can do An example of the first would be when someone (maybe an artist/hacker/nerd) creates a bespoke experience that showcases a way of doing things: maybe a cool visualization of events in their life, a fun automation that connects disparate services and tells you things like the current height of a beloved plant, or an utterly custom web page design to be used only once perhaps as a portfolio site. It can be a way to demonstrate control over one&#39;s materials, and a marvel to observe and interact with, but you can&#39;t make your own—this isn&#39;t meant to cast the creation as selfish, but rather to draw where the line is in terms of your ability to build something with it—perhaps even the goal is to be unique and therefore not replicatable by others.&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><p>I've been thinking about these three framings of what is possible with a specific technology:</p>
<ol>
<li>Look what I can do</li>
<li>Look what you can do</li>
<li>Look what we can do</li>
</ol>
<p>An example of the first would be when someone (maybe an artist/hacker/nerd) creates a bespoke experience that showcases a way of doing things: maybe a cool visualization of events in their life, a fun automation that connects disparate services and tells you things like the current height of a beloved plant, or an utterly custom web page design to be used only once perhaps as a portfolio site. It can be a way to demonstrate control over one's materials, and a marvel to observe and interact with, but you can't make your own—this isn't meant to cast the creation as selfish, but rather to draw where the line is in terms of your ability to build something with it—perhaps even the goal is to be unique and therefore not replicatable by others.</p></nugget><hr>
<div class="content"><p>I've been thinking about these three framings of what is possible with a specific technology:</p>
<ol>
<li>Look what I can do</li>
<li>Look what you can do</li>
<li>Look what we can do</li>
</ol>
<p>An example of the first would be when someone (maybe an artist/hacker/nerd) creates a bespoke experience that showcases a way of doing things: maybe a cool visualization of events in their life, a fun automation that connects disparate services and tells you things like the current height of a beloved plant, or an utterly custom web page design to be used only once perhaps as a portfolio site. It can be a way to demonstrate control over one's materials, and a marvel to observe and interact with, but you can't make your own—this isn't meant to cast the creation as selfish, but rather to draw where the line is in terms of your ability to build something with it—perhaps even the goal is to be unique and therefore not replicatable by others.</p>
<p>Most apps fall into the second category by encapsulating the 'principles of an experience' (to roughly paraphrase Steve Jobs): they enable people to create their own version of <em>the thing</em>, be it a text document, map of meaningful locations, photo albums, or pretty much anything imaginable. We now say &quot;there's an app for that&quot; and it's the default way for most people to express themselves through digital mediums. 'Look what you can do' empowers people to explore, create, and then share with others, more so than the first category, so there's an order of magnitude difference in the possibility space, but it's also more complex to build as one needs to consider the assumptions of multiple kinds of stakeholders or 'users'.</p>
<p>In the third category, adding social layers can encourage network effects and moves the technology beyond a tool or utility into collective creation; this can occur through follower graphs, timelines, multiplayer, ratings, etc… Producing a digital artifact has platform native ways for people to interact and react, either passively through comments and 'likes' or more actively through 'remixing' (such as reaction videos on YouTube or lip-syncing on TikTok). It's even more difficult to build than the second category because of the additional complexity of network interactions and identity management, but the result is that the technology starts to take on a life of its own as the experience becomes dominated by how other people use it.</p>
<p>Somewhere between these categories, one can find extensions and customization (achieved through some apps as 'scripting'). When someone extends an app for themselves, it might be an example of the first category, whereas passing that around brings it closer to the second, and sharable platform native 'plugins' or 'add-ons' or 'bots' can bring it closer to the third.</p>
<p>Usability and accessibility can impact where a technology falls on the spectrum: not paying attention to these dimensions makes it harder to move to higher levels of agency, staying more exclusive as &quot;Look at what I/you/we can do, as the capable ones&quot;; as in the first level, it's not necessarily selfish but if the intention is to maximize agency, then this creates a mismatch. Self-hosting generally suffers from this, but there are <a href="https://easyindie.app">Easy Indie</a> platforms that enable one-click installation, thereby broadening the potential base of people able to participate. Tools like <a href="https://wave.webaim.org">WAVE</a> can help spot simple improvements to accessibility in web-based projects. Although <a href="https://rosano.hmm.garden/01gq5znszqemzj0z45pzkrw2f6">mainstream software expectations can be an antipattern</a>, a cultural appreciation for the <a href="https://jenson.org/free">simple and functional</a> can help raise usability standards, turning design into a language understood by more people.</p>
<p>I see adding interoperability between systems and enabling data to be re-combined in abstract ways as kind of another level, maybe &quot;Look what a not-yet-existing entity can do&quot;: enabling future possibilities by opening data to be composed by the unknown is, in my opinion, just as transformative as moving from 'I' to 'you' or 'you' to 'we'. The emerging <a href="https://0data.app">Zero Data</a> ecosystem (keeping data and apps encapsulated from one another) feels promising as a usable example of what this could be like. Automation systems like <a href="https://zapier.com">Zapier</a> or <a href="https://n8n.io">n8n</a> are also useful as a way to ensure data is composable, or at least exposed as an API. It shows to me that #OwnYourData is not just about privacy or autonomy, but also about the cool cybernetic possibilities of a future we haven't imagined yet.</p>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 7:13 pm, January 19, 2023" href="/log/2023-01-19-levels-of-agency/"><time datetime="2023-01-19T19:13:12&#43;08:00" data-pagefind-sort="date[datetime]">19h13</time></a>

		
		<span>from <a href="/log/place/langkawi/">Langkawi</a> / </span>

		<span><a href="/log/country/malaysia/">Malaysia</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Zero Data Swap #4: Hello World</title>
  <link>https://rosano.ca/blog/zero-data-swap-4-hello-world-november-24-2021/</link>
  <pubDate>Sat, 13 Nov 2021 11:00:04 +0000</pubDate>
  <guid>https://rosano.ca/blog/zero-data-swap-4-hello-world-november-24-2021/</guid>
  <description>Presenting &#39;the simplest possible integrations&#39; for the various protocols.</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>Presenting 'the simplest possible integrations' for the various protocols.</nugget><hr>
<div class="content"><p>We're going to present 'the simplest possible integrations' for the various protocols. <a href="https://noeldemartin.com">Noel De Martin</a> has already started a <a href="https://github.com/0dataapp/hello-world-solid">Hello World for SOLID</a>. <a href="https://rosano.ca">Rosano</a> will try one or both of remoteStorage and Fission (although a volunteer for either would be <em>very much</em> appreciated). Be welcome to join us and ask questions: let's learn together.</p>
<iframe title="vimeo-player" src="https://player.vimeo.com/video/779640162?h=16facfe8de" width="100%" height="200" frameborder="0" referrerpolicy="strict-origin-when-cross-origin" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share"   allowfullscreen></iframe>
<p>See also the <a href="https://chat.0data.app/t/zero-data-swap-3-maker-meet-october-27-2021/74">previous swap</a>.</p>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/event/">event</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 6:00 am, November 13, 2021" href="/blog/zero-data-swap-4-hello-world-november-24-2021/"><time datetime="2021-11-13T06:00:04-05:00" data-pagefind-sort="date[datetime]">06h00</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Saturday, November 13, 2021 06h00</title>
  <link>https://rosano.ca/log/2021-11-13-zero-data-swap-4-hello-world-november-24-2021/</link>
  <pubDate>Sat, 13 Nov 2021 06:00:04 -0500</pubDate>
  <guid>https://rosano.ca/log/2021-11-13-zero-data-swap-4-hello-world-november-24-2021/</guid>
  <description>We&#39;re going to present &#39;the simplest possible integrations&#39; for the various protocols. Noel De Martin has already started a Hello World for SOLID. Rosano will try one or both of remoteStorage and Fission (although a volunteer for either would be very much appreciated). Be welcome to join us and ask questions: let&#39;s learn together.&#xA;See also the previous swap.&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><p>We're going to present 'the simplest possible integrations' for the various protocols. <a href="https://noeldemartin.com">Noel De Martin</a> has already started a <a href="https://github.com/0dataapp/hello-world-solid">Hello World for SOLID</a>. <a href="https://rosano.ca">Rosano</a> will try one or both of remoteStorage and Fission (although a volunteer for either would be <em>very much</em> appreciated). Be welcome to join us and ask questions: let's learn together.</p>
<iframe title="vimeo-player" src="https://player.vimeo.com/video/779640162?h=16facfe8de" width="100%" height="200" frameborder="0" referrerpolicy="strict-origin-when-cross-origin" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share"   allowfullscreen></iframe>
<p>See also the <a href="https://chat.0data.app/t/zero-data-swap-3-maker-meet-october-27-2021/74">previous swap</a>.</p></nugget><hr>
<div class="content"><p>We're going to present 'the simplest possible integrations' for the various protocols. <a href="https://noeldemartin.com">Noel De Martin</a> has already started a <a href="https://github.com/0dataapp/hello-world-solid">Hello World for SOLID</a>. <a href="https://rosano.ca">Rosano</a> will try one or both of remoteStorage and Fission (although a volunteer for either would be <em>very much</em> appreciated). Be welcome to join us and ask questions: let's learn together.</p>
<iframe title="vimeo-player" src="https://player.vimeo.com/video/779640162?h=16facfe8de" width="100%" height="200" frameborder="0" referrerpolicy="strict-origin-when-cross-origin" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share"   allowfullscreen></iframe>
<p>See also the <a href="https://chat.0data.app/t/zero-data-swap-3-maker-meet-october-27-2021/74">previous swap</a>.</p>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/event/">event</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 6:00 am, November 13, 2021" href="/log/2021-11-13-zero-data-swap-4-hello-world-november-24-2021/"><time datetime="2021-11-13T06:00:04-05:00" data-pagefind-sort="date[datetime]">06h00</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Zero Data Swap #3: Maker Meet</title>
  <link>https://rosano.ca/blog/zero-data-swap-3-maker-meet-october-27-2021/</link>
  <pubDate>Wed, 13 Oct 2021 20:21:26 +0000</pubDate>
  <guid>https://rosano.ca/blog/zero-data-swap-3-maker-meet-october-27-2021/</guid>
  <description>Experiments, works-in-progress &amp;amp; under construction, mundane or extraordinary.</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>Experiments, works-in-progress &amp; under construction, mundane or extraordinary.</nugget><hr>
<div class="content"><p><a href="https://rosano.ca">Rosano</a> and <a href="https://cblgh.org">cblgh</a> and invite you to a show-and-tell. Come and share what projects you’re working on: experiments, works-in-progress &amp; under construction, mundane or extraordinary—anything goes, as long as it’s yours~</p>
<p>See also the <a href="https://chat.0data.app/t/zero-data-swap-2-files-portability-september-29-2021/37">previous swap</a>.</p>
<hr>
<h1 id="summary">Summary</h1>
<p>Over a dozen people attended or presented a wide range of software and hardware projects. We took collaborative notes with <a href="https://hackmd.io">HackMD</a>, tracked seven-minute timers with <a href="https://duckduckgo.com/?q=timer%207%20min">DuckDuckGo</a>, and determined the order of presentations via Python's <a href="https://www.w3schools.com/python/ref%5Frandom%5Fshuffle.asp">Random.shuffle()</a>.</p>
<h2 id="hoody-moderator">hoody: 'moderator'</h2>
<p>Running collaborative tools on low-power devices, indestructible distributed 4chan dark-net market place, quick to disappear, using tech from <a href="https://github.com/AljoschaMeyer/bamboo">Aljoscha Meyer</a>.</p>
<h2 id="cinnamon-earthstar">cinnamon: <a href="https://github.com/earthstar-project/earthstar">Earthstar</a></h2>
<ul>
<li>inspired by trying to fix scuttlebut ui/ux issues that run deep
<ul>
<li>device-oriented over people-oriented, can't use same identity on different devices</li>
<li>processing the entire backlog is network/storage/cpu intense, slow</li>
<li>immutability is not good for a social network. what's safe to say today might not be safe tomorrow, need to be able to delete stuff</li>
<li>need to be able to download a subset of data related to stuff you care about</li>
</ul>
</li>
<li>earthstar fixes all of the above
<ul>
<li>people-oriented identity, can log in from multiple devices</li>
<li>can download a subset of data as needed</li>
<li>everything is mutable and can be deleted by author</li>
<li>also can have mutable docs that anyone can edit</li>
<li>designed for small groups, ~100 people, separated into &quot;workspaces&quot;. not a big single global network.</li>
<li>trying to use simple boring technology as much as possible</li>
<li>very detailed specification: <a href="https://earthstar-docs.netlify.app/docs/reference/earthstar-specification">https://earthstar-docs.netlify.app/docs/reference/earthstar-specification</a></li>
</ul>
</li>
<li>simple CRDT last writer wins merge strategy. Better CRDTs exist but are complicated, we decided to use the simplest one</li>
<li>every peer has a copy of the data they care about. pubs exist to get around firewalls; they are just peers in the cloud.</li>
<li>goal: pubs are easy to run by community members, keep governance as local as possible, avoid moderations external to local community</li>
<li>pubs are easy to run, push buttons on glitch, no need to use a command line, pub owner has no power, can only turn it off, can have multiple pubs run by different people for redundancy</li>
<li>zero data event with rosano at some later point?</li>
<li>cinnamon stepping down for health reasons, looking for contributors</li>
</ul>
<h2 id="mix-ssb-crut">mix: <a href="https://gitlab.com/ahau/lib/ssb-crut">ssb-crut</a></h2>
<p><a href="https://www.youtube.com/watch?v=URIUbupxxU4">Pre-recorded presentation</a>.</p>
<h2 id="juha">juha</h2>
<p>Wants to track carbon via Zero Data apps and integrate with <a href="https://www.home-assistant.io">Home Assistant</a>.</p>
<h2 id="mauve-hypergodot">mauve: <a href="https://github.com/RangerMauve/hypergodot">hypergodot</a></h2>
<p>P2P for <a href="https://godotengine.org">godot game engine</a>.</p>
<ul>
<li>avoid managing server-stuff for games by using hypercore <a href="https://hypercore-protocol.org">https://hypercore-protocol.org</a></li>
<li>works like bittorrent: downloads your platform binary, gateway gets spawned, game sends http requests to gateway for doing p2p; user just plays game, dev just imports node to scene graph</li>
<li><a href="https://github.com/RangerMauve/hyper-gateway">https://github.com/RangerMauve/hyper-gateway</a></li>
<li><a href="https://github.com/RangerMauve/hypercore-fetch">https://github.com/RangerMauve/hypercore-fetch</a></li>
<li><a href="https://github.com/hyperswarm/hyperswarm">https://github.com/hyperswarm/hyperswarm</a></li>
</ul>
<h2 id="rosano-automated-testing-via-github-actions">rosano: <a href="https://github.com/wikiavec/hyperdraft/actions">automated testing via github actions</a></h2>
<h2 id="gwil-letterbox">gwil: <a href="https://earthstar-letterbox.netlify.app">letterbox</a></h2>
<ul>
<li>runs anywhere javascript runs (browser, node, deno)</li>
<li>would be great to have libraries in other languages, shouldn't be hard to port to another language
<ul>
<li>refer to the detailed spec: <a href="https://earthstar-docs.netlify.app/docs/reference/earthstar-specification/">https://earthstar-docs.netlify.app/docs/reference/earthstar-specification/</a></li>
</ul>
</li>
<li>and join our discord: <a href="https://discord.gg/RGsvu9a9">https://discord.gg/RGsvu9a9</a></li>
</ul>
<h2 id="cblgh-lieu">cblgh: <a href="https://lieu.cblgh.org">lieu</a></h2>
<p>a community search engine</p>
<ul>
<li>code: <a href="https://github.com/cblgh/lieu">https://github.com/cblgh/lieu</a></li>
<li>thread of recent feature update: <a href="https://twitter.com/cblgh/status/1455197377065799689">https://twitter.com/cblgh/status/1455197377065799689</a></li>
</ul>
<h2 id="nanomonkey-recipe-manager">nanomonkey: recipe manager</h2>
<p>UI works with both keyboard and mouse</p>
<ul>
<li>frontend <a href="https://github.com/nanomonkey/scratch">https://github.com/nanomonkey/scratch</a></li>
<li>backend <a href="https://github.com/nanomonkey/ssb%5Fclj%5Frepl">https://github.com/nanomonkey/ssb%5Fclj%5Frepl</a></li>
</ul>
<h1 id="chat">Chat</h1>
<blockquote>
<p><em>13:36</em> cblgh says: order ['hoody', 'juha', 'mauve', 'fellow jitsi', 'cinn', 'mix', 'rosano', 'cblgh', 'gwil']<br>
<em>13:39</em> Mauve says: <a href="https://agregore.mauve.moe/">https://agregore.mauve.moe/</a><br>
<em>13:40</em> cblgh says: <a href="https://merveilles.town/web/accounts/57295">https://merveilles.town/web/accounts/57295</a> &lt;-- amatecha<br>
<em>13:42</em> cinnamon says: <a href="https://github.com/earthstar-project/earthstar">https://github.com/earthstar-project/earthstar</a><br>
<em>13:42</em> cinnamon says: p.s. I use they/them pronouns<br>
<em>13:44</em> cblgh says: (updated order: ['hoody', 'juha', 'mauve', 'fellow jitsi', 'cinn', 'mix', 'rosano', 'cblgh', 'gwil', 'geoffrey', 'interfect'])<br>
<em>13:44</em> cblgh says: o ya he/him/they i guess 😃<br>
<em>13:44</em> rosano says: he/they<br>
<em>13:46</em> Juha Autero says: he/they also<br>
<em>13:48</em> rosano says: <a href="https://duckduckgo.com/?q=timer+7+min&amp;ia=answer">https://duckduckgo.com/?q=timer+7+min&amp;ia=answer</a><br>
<em>13:49</em> cblgh says: <a href="https://github.com/AljoschaMeyer/bamboo">https://github.com/AljoschaMeyer/bamboo</a><br>
<em>13:49</em> cblgh says: <a href="https://collapseos.org/">https://collapseos.org/</a><br>
<em>13:55</em> cblgh says: o/ nanomonkey 😃<br>
<em>13:56</em> gwil says: fully sick<br>
<em>14:07</em> cblgh says: <a href="https://github.com/AljoschaMeyer">https://github.com/AljoschaMeyer</a><br>
<em>14:07</em> cblgh says: <a href="https://github.com/fraction/oasis">https://github.com/fraction/oasis</a><br>
<em>14:07</em> cblgh says: <a href="https://github.com/earthstar-project/earthstar">https://github.com/earthstar-project/earthstar</a><br>
<em>14:09</em> nanomonkey says: So, I built the first two boards for the disaster radio project. I have some experience with building Lora antannas in Kicad if you need any help.<br>
<em>14:10</em> interfect says: Thanks!<br>
<em>14:12</em> cblgh says: <a href="https://cblgh.org/trustnet/">https://cblgh.org/trustnet/</a><br>
<em>14:12</em> cblgh says: (pardon the orange halloween theme x)<br>
<em>14:16</em> hoody says: earthstar is dope<br>
<em>14:17</em> cblgh says: <a href="https://buntimer-earthstar.netlify.com">https://buntimer-earthstar.netlify.com</a><br>
<em>14:21</em> cinnamon says: <a href="https://earthstar-demo-pub-v6-a.glitch.me/">https://earthstar-demo-pub-v6-a.glitch.me/</a><br>
<em>14:21</em> cinnamon says: <a href="https://github.com/earthstar-project/earthstar-pub">https://github.com/earthstar-project/earthstar-pub</a><br>
<em>14:21</em> cblgh says: <a href="https://gitlab.com/ahau/lib/ssb-crut">https://gitlab.com/ahau/lib/ssb-crut</a><br>
<em>14:21</em> cblgh says: <a href="https://ahau.io/">https://ahau.io/</a><br>
<em>14:22</em> nanomonkey says: Any suggestions on how to get mics working? I've tried all the options available through jitsi that I can find.<br>
<em>14:23</em> cblgh says: hm not sure 😕 replug it probably, or try chrome and see if that does it?<br>
<em>14:23</em> gwil says: which browser are you on? safari always gives me trouble<br>
<em>14:23</em> rosano says: @nanomonkey i think you probably did it right, maybe try a different browser?<br>
<em>14:23</em> nanomonkey says: firefox<br>
<em>14:23</em> rosano says: yea safari doesn't work for me<br>
<em>14:23</em> nanomonkey says: on llnux<br>
<em>14:24</em> Mauve says: I'm on Firefox on Linux and I think my mic works FWIW.<br>
<em>14:24</em> Mauve says: I'm guessing your mic gain is up and your system is seeing stuff when you try to test it outside the browser?<br>
<em>14:25</em> cblgh says: once i had to click on the lil tab above the mic and pic another microphone, cause it was picking up a different one<br>
<em>14:25</em> cblgh says: (guess you already tried that tho!)<br>
<em>14:25</em> cblgh says: hey cryptix 😃<br>
<em>14:25</em> cblgh says: we're streaming mix (not sure if you can see it)<br>
<em>14:26</em> cryptix says: hey ya'll!<br>
<em>14:26</em> cryptix says: yea i can. sorry for being late.. i somehow messed up writing down the wrong time<br>
<em>14:26</em> cblgh says: nw 😃<br>
<em>14:26</em> rosano says: timezones are complicated… but thanks for being here, be welcome 😃<br>
<em>14:27</em> Juha Autero says: nanomankey: Does addressbar show that you have granted extra permissions on website?<br>
<em>14:27</em> cblgh says: boost ON<br>
<em>14:27</em> amatecha says: oh wow I figured out how to set name and use chat. woot<br>
<em>14:28</em> cblgh says: (mix gave me permission to 1.25x it once it got close to the 7 min work fwiw 😃<br>
<em>14:28</em> rosano says: dj alex<br>
<em>14:31</em> cblgh says: 💿😎<br>
<em>14:31</em> cblgh says: <a href="https://github.com/mixmix/ssb-crut-demo">https://github.com/mixmix/ssb-crut-demo</a><br>
<em>14:31</em> cblgh says: if anyone wants to rewatch it it's here: <a href="https://www.youtube.com/watch?v=URIUbupxxU4">https://www.youtube.com/watch?v=URIUbupxxU4</a><br>
<em>14:31</em> cblgh says: ['hoody', 'juha', 'mauve', 'fellow jitsi', 'cinn', 'mix', 'rosano', 'cblgh', 'gwil', 'geoffrey', 'interfect', 'nanomonkey', 'cryptix']<br>
<em>14:35</em> hoody says: getting super flaky net here at y homeboys house<br>
<em>14:35</em> hoody says: heading back to home and trying again<br>
<em>14:36</em> Mauve says: lol, I can't share screen from Agregore yet since I haven't implemented the UI for it. 😂<br>
<em>14:36</em> rosano says: #browsergoals<br>
<em>14:41</em> cblgh says: i guess this<br>
<em>14:41</em> <a href="https://www.home-assistant.io/">https://www.home-assistant.io/</a> :^)<br>
<em>14:41</em> rosano says: <a href="https://www.home-assistant.io">https://www.home-assistant.io</a><br>
<em>14:42</em> Mauve says: Just confirming with the person I'm meeting though<br>
<em>14:44</em> cblgh says: <a href="https://godotengine.org/">https://godotengine.org/</a><br>
<em>14:44</em> cblgh says: <a href="https://github.com/RangerMauve/hypergodot">https://github.com/RangerMauve/hypergodot</a><br>
<em>14:45</em> nanomonkey says: Juha, there is a couple of libraries in Python for opening and writing to excel files. This might help you out.<br>
<em>14:45</em> nanomonkey says: Pandas can do it directly and has lots of support.<br>
<em>14:46</em> cblgh says: (also known as dat previously : )<br>
<em>14:46</em> cblgh says: <a href="https://hypercore-protocol.org/">https://hypercore-protocol.org/</a><br>
<em>14:46</em> amatecha says: oohhh (didn’t know dat was “rebranded”!)<br>
<em>14:47</em> Juha Autero says: I'm experienced Python programmer. What I'm trying to learn is javascript frameworks.<br>
<em>14:47</em> rosano says: &quot;as little as possible to make stuff just work&quot; all the things<br>
<em>14:50</em> cblgh says: big brain energy<br>
<em>14:51</em> Mauve says: <a href="https://github.com/RangerMauve/hyper-gateway">https://github.com/RangerMauve/hyper-gateway</a><br>
<em>14:51</em> Mauve says: <a href="https://github.com/RangerMauve/hypercore-fetch">https://github.com/RangerMauve/hypercore-fetch</a><br>
<em>15:00</em> cblgh says: <a href="https://github.com/hyperswarm/hyperswarm">https://github.com/hyperswarm/hyperswarm</a><br>
<em>15:00</em> cblgh says: <a href="https://hyperdraft.rosano.ca">https://hyperdraft.rosano.ca</a><br>
<em>15:00</em> cblgh says: <a href="https://github.com/sveltejs/svelte">https://github.com/sveltejs/svelte</a><br>
<em>15:02</em> cblgh says: <a href="https://www.cypress.io/">https://www.cypress.io/</a><br>
<em>15:04</em> Mauve says: K, gotta go. TY folks!<br>
<em>15:06</em> cblgh says: gwil u can go ahead of me if you want 😃<br>
<em>15:06</em> gwil says: I'll take you up on that<br>
<em>15:09</em> gwil says: <a href="https://earthstar-letterbox.netlify.app/join/earthstar:///?workspace=+plaza.prm27p8eg65c&amp;pub=https://earthstar-demo-pub-6b.fly.dev&amp;pub=https://earthstar-demo-pub-v6-a.glitch.me&amp;v=1">https://earthstar-letterbox.netlify.app/join/earthstar:///?workspace=+plaza.prm27p8eg65c&amp;pub=https://earthstar-demo-pub-6b.fly.dev&amp;pub=https://earthstar-demo-pub-v6-a.glitch.me&amp;v=1</a><br>
<em>15:13</em> cblgh says: (i love the pocket terminology that gwil is putting into action here)<br>
<em>15:13</em> cblgh says: if u remember (from cinn): to participate u gotta make an identity, and then you click on &quot;join plaza&quot; or whatever at the bottom!<br>
<em>15:14</em> rosano says: local-first!<br>
<em>15:16</em> cblgh says: 👏👏👏<br>
<em>15:16</em> rosano says: ❤️<br>
<em>15:18</em> hoody says: back on track. hallo cryptix<br>
<em>15:19</em> cblgh says: wb!<br>
<em>15:20</em> gwil says: <a href="https://discord.gg/RGsvu9a9">https://discord.gg/RGsvu9a9</a> &lt;-- earthstar discord<br>
<em>15:20</em> cblgh says: remaining potential presentations [ 'cblgh', 'nanomonkey', 'cryptix']<br>
<em>15:20</em> gwil says: cinnamon's docS are NUTS<br>
<em>15:22</em> rosano says: <a href="https://lieu.cblgh.org">https://lieu.cblgh.org</a><br>
<em>15:23</em> Juha Autero says: Accidentally closed tab.<br>
<em>15:26</em> rosano says: ooooh lala<br>
<em>15:26</em> hoody says: any preferred thing to do to make your site lieu friendly?<br>
<em>15:27</em> gwil says: yeah, is there a way for it to handle browser-rendered apps / pipe data in?<br>
<em>15:28</em> cblgh says: p:first-of-type<br>
<em>15:28</em> gwil says: A whole new industry of dark web SEO<br>
<em>15:29</em> hoody says: heh heh<br>
<em>15:29</em> hoody says: how about a button you could display<br>
<em>15:29</em> hoody says: oldskool, part of webring / use lieu here<br>
<em>15:30</em> cblgh says: oh ya, like ready made?<br>
<em>15:32</em> hoody says: yup, to help people find this thing<br>
<em>15:32</em> hoody says: neocities friendly stuff, simple<br>
<em>15:32</em> hoody says: <a href="https://vmx.cx/cgi-bin/blog/index.cgi/category/Noise">https://vmx.cx/cgi-bin/blog/index.cgi/category/Noise</a><br>
<em>15:32</em> hoody says: might be handy soehow<br>
<em>15:32</em> hoody says: somehow<br>
<em>15:32</em> gwil says: thanks everyone, I've got to run!<br>
<em>15:33</em> hoody says: cheers gwil<br>
<em>15:33</em> cblgh says: am i the only one that can't see it?<br>
<em>15:33</em> cryptix says: nope<br>
<em>15:33</em> amatecha says: i see nothing lol<br>
<em>15:33</em> Juha Autero says: me neither<br>
<em>15:34</em> cblgh says: now we're good<br>
<em>15:34</em> Juha Autero says: now i can see<br>
<em>15:45</em> cblgh says: varasanos og<br>
<em>15:45</em> cblgh says: <a href="https://www.varasanos.com/PizzaRecipe.htm">https://www.varasanos.com/PizzaRecipe.htm</a><br>
<em>15:45</em> cblgh says: this guy is so serious, check out his site to learn everything about making pizza<br>
<em>15:45</em> cblgh says: related: just found out about this markup language for recipes today <a href="https://cooklang.org/">https://cooklang.org/</a><br>
<em>15:45</em> cblgh says: high yield recipe<br>
<em>15:45</em> cblgh says: <a href="https://clojurescript.org/">https://clojurescript.org/</a><br>
<em>15:45</em> cblgh says: <a href="https://valueflo.ws/">https://valueflo.ws/</a><br>
<em>15:45</em> cblgh says: <a href="https://bob.mikorizal.org/users/bhaugen">https://bob.mikorizal.org/users/bhaugen</a><br>
<em>15:45</em> cblgh says: (bob's fedi)<br>
<em>15:45</em> cblgh says: <a href="https://github.com/ssb-ngi-pointer/ssb-db2">https://github.com/ssb-ngi-pointer/ssb-db2</a><br>
<em>15:47</em> hoody says: it's snowing here, got some cocoa and cryptix explaining stuff on the headphones, this is cool<br>
<em>15:49</em> cblgh says: ohh wow<br>
<em>15:49</em> cblgh says: just arctic circle things<br>
<em>15:49</em> cblgh says: <a href="https://github.com/nanomonkey/scratch">https://github.com/nanomonkey/scratch</a><br>
<em>15:49</em> cblgh says: <a href="https://github.com/nanomonkey/ssb%5Fclj%5Frepl">https://github.com/nanomonkey/ssb%5Fclj%5Frepl</a><br>
<em>15:52</em> hoody says: ssbCRUD<br>
<em>15:52</em> hoody says: i think many people are interested in running ssb as distributed key-val store<br>
<em>15:52</em> cryptix says: +1<br>
<em>15:54</em> nanomonkey says: What ssb client are folks using these days?<br>
<em>15:54</em> cblgh says: still patchwork x)<br>
<em>15:54</em> hoody says: is there a zero data manifesto somewhere?<br>
<em>15:54</em> hoody says: patchwork<br>
<em>15:55</em> rosano says: @hoody some principles at <a href="https://0data.app">https://0data.app</a><br>
<em>15:55</em> hoody says: cheers rosano<br>
<em>15:57</em> amatecha says: \o/<br>
<em>15:59</em> cryptix says: also nano, feel free to mention me with these questions<br>
<em>15:59</em> nanomonkey says: will do<br>
<em>15:59</em> cryptix says: also sure cel would be down to answer - also req criquets: like gwil said, somethomes these threads just vanish<br>
<em>15:59</em> rosano says: <a href="https://chat.rosano.ca/t/zero-data-swap-3-maker-meet-october-27-2021/44">https://chat.rosano.ca/t/zero-data-swap-3-maker-meet-october-27-2021/44</a><br>
<em>15:59</em> rosano says: <a href="https://0data.app">https://0data.app</a><br>
<em>16:00</em> hoody says: super cool, thanks for doing this<br>
<em>16:00</em> hoody says: cu!</p></blockquote>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/event/">event</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 4:21 pm, October 13, 2021" href="/blog/zero-data-swap-3-maker-meet-october-27-2021/"><time datetime="2021-10-13T16:21:26-04:00" data-pagefind-sort="date[datetime]">16h21</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Wednesday, October 13, 2021 16h21</title>
  <link>https://rosano.ca/log/2021-10-13-zero-data-swap-3-maker-meet-october-27-2021/</link>
  <pubDate>Wed, 13 Oct 2021 16:21:26 -0400</pubDate>
  <guid>https://rosano.ca/log/2021-10-13-zero-data-swap-3-maker-meet-october-27-2021/</guid>
  <description>Rosano and cblgh and invite you to a show-and-tell. Come and share what projects you’re working on: experiments, works-in-progress &amp;amp; under construction, mundane or extraordinary—anything goes, as long as it’s yours~&#xA;See also the previous swap.&#xA;Summary Over a dozen people attended or presented a wide range of software and hardware projects. We took collaborative notes with HackMD, tracked seven-minute timers with DuckDuckGo, and determined the order of presentations via Python&#39;s Random.shuffle().&#xA;hoody: &#39;moderator&#39; Running collaborative tools on low-power devices, indestructible distributed 4chan dark-net market place, quick to disappear, using tech from Aljoscha Meyer.&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><p><a href="https://rosano.ca">Rosano</a> and <a href="https://cblgh.org">cblgh</a> and invite you to a show-and-tell. Come and share what projects you’re working on: experiments, works-in-progress &amp; under construction, mundane or extraordinary—anything goes, as long as it’s yours~</p>
<p>See also the <a href="https://chat.0data.app/t/zero-data-swap-2-files-portability-september-29-2021/37">previous swap</a>.</p>
<hr>
<h1 id="summary">Summary</h1>
<p>Over a dozen people attended or presented a wide range of software and hardware projects. We took collaborative notes with <a href="https://hackmd.io">HackMD</a>, tracked seven-minute timers with <a href="https://duckduckgo.com/?q=timer%207%20min">DuckDuckGo</a>, and determined the order of presentations via Python's <a href="https://www.w3schools.com/python/ref%5Frandom%5Fshuffle.asp">Random.shuffle()</a>.</p>
<h2 id="hoody-moderator">hoody: 'moderator'</h2>
<p>Running collaborative tools on low-power devices, indestructible distributed 4chan dark-net market place, quick to disappear, using tech from <a href="https://github.com/AljoschaMeyer/bamboo">Aljoscha Meyer</a>.</p></nugget><hr>
<div class="content"><p><a href="https://rosano.ca">Rosano</a> and <a href="https://cblgh.org">cblgh</a> and invite you to a show-and-tell. Come and share what projects you’re working on: experiments, works-in-progress &amp; under construction, mundane or extraordinary—anything goes, as long as it’s yours~</p>
<p>See also the <a href="https://chat.0data.app/t/zero-data-swap-2-files-portability-september-29-2021/37">previous swap</a>.</p>
<hr>
<h1 id="summary">Summary</h1>
<p>Over a dozen people attended or presented a wide range of software and hardware projects. We took collaborative notes with <a href="https://hackmd.io">HackMD</a>, tracked seven-minute timers with <a href="https://duckduckgo.com/?q=timer%207%20min">DuckDuckGo</a>, and determined the order of presentations via Python's <a href="https://www.w3schools.com/python/ref%5Frandom%5Fshuffle.asp">Random.shuffle()</a>.</p>
<h2 id="hoody-moderator">hoody: 'moderator'</h2>
<p>Running collaborative tools on low-power devices, indestructible distributed 4chan dark-net market place, quick to disappear, using tech from <a href="https://github.com/AljoschaMeyer/bamboo">Aljoscha Meyer</a>.</p>
<h2 id="cinnamon-earthstar">cinnamon: <a href="https://github.com/earthstar-project/earthstar">Earthstar</a></h2>
<ul>
<li>inspired by trying to fix scuttlebut ui/ux issues that run deep
<ul>
<li>device-oriented over people-oriented, can't use same identity on different devices</li>
<li>processing the entire backlog is network/storage/cpu intense, slow</li>
<li>immutability is not good for a social network. what's safe to say today might not be safe tomorrow, need to be able to delete stuff</li>
<li>need to be able to download a subset of data related to stuff you care about</li>
</ul>
</li>
<li>earthstar fixes all of the above
<ul>
<li>people-oriented identity, can log in from multiple devices</li>
<li>can download a subset of data as needed</li>
<li>everything is mutable and can be deleted by author</li>
<li>also can have mutable docs that anyone can edit</li>
<li>designed for small groups, ~100 people, separated into &quot;workspaces&quot;. not a big single global network.</li>
<li>trying to use simple boring technology as much as possible</li>
<li>very detailed specification: <a href="https://earthstar-docs.netlify.app/docs/reference/earthstar-specification">https://earthstar-docs.netlify.app/docs/reference/earthstar-specification</a></li>
</ul>
</li>
<li>simple CRDT last writer wins merge strategy. Better CRDTs exist but are complicated, we decided to use the simplest one</li>
<li>every peer has a copy of the data they care about. pubs exist to get around firewalls; they are just peers in the cloud.</li>
<li>goal: pubs are easy to run by community members, keep governance as local as possible, avoid moderations external to local community</li>
<li>pubs are easy to run, push buttons on glitch, no need to use a command line, pub owner has no power, can only turn it off, can have multiple pubs run by different people for redundancy</li>
<li>zero data event with rosano at some later point?</li>
<li>cinnamon stepping down for health reasons, looking for contributors</li>
</ul>
<h2 id="mix-ssb-crut">mix: <a href="https://gitlab.com/ahau/lib/ssb-crut">ssb-crut</a></h2>
<p><a href="https://www.youtube.com/watch?v=URIUbupxxU4">Pre-recorded presentation</a>.</p>
<h2 id="juha">juha</h2>
<p>Wants to track carbon via Zero Data apps and integrate with <a href="https://www.home-assistant.io">Home Assistant</a>.</p>
<h2 id="mauve-hypergodot">mauve: <a href="https://github.com/RangerMauve/hypergodot">hypergodot</a></h2>
<p>P2P for <a href="https://godotengine.org">godot game engine</a>.</p>
<ul>
<li>avoid managing server-stuff for games by using hypercore <a href="https://hypercore-protocol.org">https://hypercore-protocol.org</a></li>
<li>works like bittorrent: downloads your platform binary, gateway gets spawned, game sends http requests to gateway for doing p2p; user just plays game, dev just imports node to scene graph</li>
<li><a href="https://github.com/RangerMauve/hyper-gateway">https://github.com/RangerMauve/hyper-gateway</a></li>
<li><a href="https://github.com/RangerMauve/hypercore-fetch">https://github.com/RangerMauve/hypercore-fetch</a></li>
<li><a href="https://github.com/hyperswarm/hyperswarm">https://github.com/hyperswarm/hyperswarm</a></li>
</ul>
<h2 id="rosano-automated-testing-via-github-actions">rosano: <a href="https://github.com/wikiavec/hyperdraft/actions">automated testing via github actions</a></h2>
<h2 id="gwil-letterbox">gwil: <a href="https://earthstar-letterbox.netlify.app">letterbox</a></h2>
<ul>
<li>runs anywhere javascript runs (browser, node, deno)</li>
<li>would be great to have libraries in other languages, shouldn't be hard to port to another language
<ul>
<li>refer to the detailed spec: <a href="https://earthstar-docs.netlify.app/docs/reference/earthstar-specification/">https://earthstar-docs.netlify.app/docs/reference/earthstar-specification/</a></li>
</ul>
</li>
<li>and join our discord: <a href="https://discord.gg/RGsvu9a9">https://discord.gg/RGsvu9a9</a></li>
</ul>
<h2 id="cblgh-lieu">cblgh: <a href="https://lieu.cblgh.org">lieu</a></h2>
<p>a community search engine</p>
<ul>
<li>code: <a href="https://github.com/cblgh/lieu">https://github.com/cblgh/lieu</a></li>
<li>thread of recent feature update: <a href="https://twitter.com/cblgh/status/1455197377065799689">https://twitter.com/cblgh/status/1455197377065799689</a></li>
</ul>
<h2 id="nanomonkey-recipe-manager">nanomonkey: recipe manager</h2>
<p>UI works with both keyboard and mouse</p>
<ul>
<li>frontend <a href="https://github.com/nanomonkey/scratch">https://github.com/nanomonkey/scratch</a></li>
<li>backend <a href="https://github.com/nanomonkey/ssb%5Fclj%5Frepl">https://github.com/nanomonkey/ssb%5Fclj%5Frepl</a></li>
</ul>
<h1 id="chat">Chat</h1>
<blockquote>
<p><em>13:36</em> cblgh says: order ['hoody', 'juha', 'mauve', 'fellow jitsi', 'cinn', 'mix', 'rosano', 'cblgh', 'gwil']<br>
<em>13:39</em> Mauve says: <a href="https://agregore.mauve.moe/">https://agregore.mauve.moe/</a><br>
<em>13:40</em> cblgh says: <a href="https://merveilles.town/web/accounts/57295">https://merveilles.town/web/accounts/57295</a> &lt;-- amatecha<br>
<em>13:42</em> cinnamon says: <a href="https://github.com/earthstar-project/earthstar">https://github.com/earthstar-project/earthstar</a><br>
<em>13:42</em> cinnamon says: p.s. I use they/them pronouns<br>
<em>13:44</em> cblgh says: (updated order: ['hoody', 'juha', 'mauve', 'fellow jitsi', 'cinn', 'mix', 'rosano', 'cblgh', 'gwil', 'geoffrey', 'interfect'])<br>
<em>13:44</em> cblgh says: o ya he/him/they i guess 😃<br>
<em>13:44</em> rosano says: he/they<br>
<em>13:46</em> Juha Autero says: he/they also<br>
<em>13:48</em> rosano says: <a href="https://duckduckgo.com/?q=timer+7+min&amp;ia=answer">https://duckduckgo.com/?q=timer+7+min&amp;ia=answer</a><br>
<em>13:49</em> cblgh says: <a href="https://github.com/AljoschaMeyer/bamboo">https://github.com/AljoschaMeyer/bamboo</a><br>
<em>13:49</em> cblgh says: <a href="https://collapseos.org/">https://collapseos.org/</a><br>
<em>13:55</em> cblgh says: o/ nanomonkey 😃<br>
<em>13:56</em> gwil says: fully sick<br>
<em>14:07</em> cblgh says: <a href="https://github.com/AljoschaMeyer">https://github.com/AljoschaMeyer</a><br>
<em>14:07</em> cblgh says: <a href="https://github.com/fraction/oasis">https://github.com/fraction/oasis</a><br>
<em>14:07</em> cblgh says: <a href="https://github.com/earthstar-project/earthstar">https://github.com/earthstar-project/earthstar</a><br>
<em>14:09</em> nanomonkey says: So, I built the first two boards for the disaster radio project. I have some experience with building Lora antannas in Kicad if you need any help.<br>
<em>14:10</em> interfect says: Thanks!<br>
<em>14:12</em> cblgh says: <a href="https://cblgh.org/trustnet/">https://cblgh.org/trustnet/</a><br>
<em>14:12</em> cblgh says: (pardon the orange halloween theme x)<br>
<em>14:16</em> hoody says: earthstar is dope<br>
<em>14:17</em> cblgh says: <a href="https://buntimer-earthstar.netlify.com">https://buntimer-earthstar.netlify.com</a><br>
<em>14:21</em> cinnamon says: <a href="https://earthstar-demo-pub-v6-a.glitch.me/">https://earthstar-demo-pub-v6-a.glitch.me/</a><br>
<em>14:21</em> cinnamon says: <a href="https://github.com/earthstar-project/earthstar-pub">https://github.com/earthstar-project/earthstar-pub</a><br>
<em>14:21</em> cblgh says: <a href="https://gitlab.com/ahau/lib/ssb-crut">https://gitlab.com/ahau/lib/ssb-crut</a><br>
<em>14:21</em> cblgh says: <a href="https://ahau.io/">https://ahau.io/</a><br>
<em>14:22</em> nanomonkey says: Any suggestions on how to get mics working? I've tried all the options available through jitsi that I can find.<br>
<em>14:23</em> cblgh says: hm not sure 😕 replug it probably, or try chrome and see if that does it?<br>
<em>14:23</em> gwil says: which browser are you on? safari always gives me trouble<br>
<em>14:23</em> rosano says: @nanomonkey i think you probably did it right, maybe try a different browser?<br>
<em>14:23</em> nanomonkey says: firefox<br>
<em>14:23</em> rosano says: yea safari doesn't work for me<br>
<em>14:23</em> nanomonkey says: on llnux<br>
<em>14:24</em> Mauve says: I'm on Firefox on Linux and I think my mic works FWIW.<br>
<em>14:24</em> Mauve says: I'm guessing your mic gain is up and your system is seeing stuff when you try to test it outside the browser?<br>
<em>14:25</em> cblgh says: once i had to click on the lil tab above the mic and pic another microphone, cause it was picking up a different one<br>
<em>14:25</em> cblgh says: (guess you already tried that tho!)<br>
<em>14:25</em> cblgh says: hey cryptix 😃<br>
<em>14:25</em> cblgh says: we're streaming mix (not sure if you can see it)<br>
<em>14:26</em> cryptix says: hey ya'll!<br>
<em>14:26</em> cryptix says: yea i can. sorry for being late.. i somehow messed up writing down the wrong time<br>
<em>14:26</em> cblgh says: nw 😃<br>
<em>14:26</em> rosano says: timezones are complicated… but thanks for being here, be welcome 😃<br>
<em>14:27</em> Juha Autero says: nanomankey: Does addressbar show that you have granted extra permissions on website?<br>
<em>14:27</em> cblgh says: boost ON<br>
<em>14:27</em> amatecha says: oh wow I figured out how to set name and use chat. woot<br>
<em>14:28</em> cblgh says: (mix gave me permission to 1.25x it once it got close to the 7 min work fwiw 😃<br>
<em>14:28</em> rosano says: dj alex<br>
<em>14:31</em> cblgh says: 💿😎<br>
<em>14:31</em> cblgh says: <a href="https://github.com/mixmix/ssb-crut-demo">https://github.com/mixmix/ssb-crut-demo</a><br>
<em>14:31</em> cblgh says: if anyone wants to rewatch it it's here: <a href="https://www.youtube.com/watch?v=URIUbupxxU4">https://www.youtube.com/watch?v=URIUbupxxU4</a><br>
<em>14:31</em> cblgh says: ['hoody', 'juha', 'mauve', 'fellow jitsi', 'cinn', 'mix', 'rosano', 'cblgh', 'gwil', 'geoffrey', 'interfect', 'nanomonkey', 'cryptix']<br>
<em>14:35</em> hoody says: getting super flaky net here at y homeboys house<br>
<em>14:35</em> hoody says: heading back to home and trying again<br>
<em>14:36</em> Mauve says: lol, I can't share screen from Agregore yet since I haven't implemented the UI for it. 😂<br>
<em>14:36</em> rosano says: #browsergoals<br>
<em>14:41</em> cblgh says: i guess this<br>
<em>14:41</em> <a href="https://www.home-assistant.io/">https://www.home-assistant.io/</a> :^)<br>
<em>14:41</em> rosano says: <a href="https://www.home-assistant.io">https://www.home-assistant.io</a><br>
<em>14:42</em> Mauve says: Just confirming with the person I'm meeting though<br>
<em>14:44</em> cblgh says: <a href="https://godotengine.org/">https://godotengine.org/</a><br>
<em>14:44</em> cblgh says: <a href="https://github.com/RangerMauve/hypergodot">https://github.com/RangerMauve/hypergodot</a><br>
<em>14:45</em> nanomonkey says: Juha, there is a couple of libraries in Python for opening and writing to excel files. This might help you out.<br>
<em>14:45</em> nanomonkey says: Pandas can do it directly and has lots of support.<br>
<em>14:46</em> cblgh says: (also known as dat previously : )<br>
<em>14:46</em> cblgh says: <a href="https://hypercore-protocol.org/">https://hypercore-protocol.org/</a><br>
<em>14:46</em> amatecha says: oohhh (didn’t know dat was “rebranded”!)<br>
<em>14:47</em> Juha Autero says: I'm experienced Python programmer. What I'm trying to learn is javascript frameworks.<br>
<em>14:47</em> rosano says: &quot;as little as possible to make stuff just work&quot; all the things<br>
<em>14:50</em> cblgh says: big brain energy<br>
<em>14:51</em> Mauve says: <a href="https://github.com/RangerMauve/hyper-gateway">https://github.com/RangerMauve/hyper-gateway</a><br>
<em>14:51</em> Mauve says: <a href="https://github.com/RangerMauve/hypercore-fetch">https://github.com/RangerMauve/hypercore-fetch</a><br>
<em>15:00</em> cblgh says: <a href="https://github.com/hyperswarm/hyperswarm">https://github.com/hyperswarm/hyperswarm</a><br>
<em>15:00</em> cblgh says: <a href="https://hyperdraft.rosano.ca">https://hyperdraft.rosano.ca</a><br>
<em>15:00</em> cblgh says: <a href="https://github.com/sveltejs/svelte">https://github.com/sveltejs/svelte</a><br>
<em>15:02</em> cblgh says: <a href="https://www.cypress.io/">https://www.cypress.io/</a><br>
<em>15:04</em> Mauve says: K, gotta go. TY folks!<br>
<em>15:06</em> cblgh says: gwil u can go ahead of me if you want 😃<br>
<em>15:06</em> gwil says: I'll take you up on that<br>
<em>15:09</em> gwil says: <a href="https://earthstar-letterbox.netlify.app/join/earthstar:///?workspace=+plaza.prm27p8eg65c&amp;pub=https://earthstar-demo-pub-6b.fly.dev&amp;pub=https://earthstar-demo-pub-v6-a.glitch.me&amp;v=1">https://earthstar-letterbox.netlify.app/join/earthstar:///?workspace=+plaza.prm27p8eg65c&amp;pub=https://earthstar-demo-pub-6b.fly.dev&amp;pub=https://earthstar-demo-pub-v6-a.glitch.me&amp;v=1</a><br>
<em>15:13</em> cblgh says: (i love the pocket terminology that gwil is putting into action here)<br>
<em>15:13</em> cblgh says: if u remember (from cinn): to participate u gotta make an identity, and then you click on &quot;join plaza&quot; or whatever at the bottom!<br>
<em>15:14</em> rosano says: local-first!<br>
<em>15:16</em> cblgh says: 👏👏👏<br>
<em>15:16</em> rosano says: ❤️<br>
<em>15:18</em> hoody says: back on track. hallo cryptix<br>
<em>15:19</em> cblgh says: wb!<br>
<em>15:20</em> gwil says: <a href="https://discord.gg/RGsvu9a9">https://discord.gg/RGsvu9a9</a> &lt;-- earthstar discord<br>
<em>15:20</em> cblgh says: remaining potential presentations [ 'cblgh', 'nanomonkey', 'cryptix']<br>
<em>15:20</em> gwil says: cinnamon's docS are NUTS<br>
<em>15:22</em> rosano says: <a href="https://lieu.cblgh.org">https://lieu.cblgh.org</a><br>
<em>15:23</em> Juha Autero says: Accidentally closed tab.<br>
<em>15:26</em> rosano says: ooooh lala<br>
<em>15:26</em> hoody says: any preferred thing to do to make your site lieu friendly?<br>
<em>15:27</em> gwil says: yeah, is there a way for it to handle browser-rendered apps / pipe data in?<br>
<em>15:28</em> cblgh says: p:first-of-type<br>
<em>15:28</em> gwil says: A whole new industry of dark web SEO<br>
<em>15:29</em> hoody says: heh heh<br>
<em>15:29</em> hoody says: how about a button you could display<br>
<em>15:29</em> hoody says: oldskool, part of webring / use lieu here<br>
<em>15:30</em> cblgh says: oh ya, like ready made?<br>
<em>15:32</em> hoody says: yup, to help people find this thing<br>
<em>15:32</em> hoody says: neocities friendly stuff, simple<br>
<em>15:32</em> hoody says: <a href="https://vmx.cx/cgi-bin/blog/index.cgi/category/Noise">https://vmx.cx/cgi-bin/blog/index.cgi/category/Noise</a><br>
<em>15:32</em> hoody says: might be handy soehow<br>
<em>15:32</em> hoody says: somehow<br>
<em>15:32</em> gwil says: thanks everyone, I've got to run!<br>
<em>15:33</em> hoody says: cheers gwil<br>
<em>15:33</em> cblgh says: am i the only one that can't see it?<br>
<em>15:33</em> cryptix says: nope<br>
<em>15:33</em> amatecha says: i see nothing lol<br>
<em>15:33</em> Juha Autero says: me neither<br>
<em>15:34</em> cblgh says: now we're good<br>
<em>15:34</em> Juha Autero says: now i can see<br>
<em>15:45</em> cblgh says: varasanos og<br>
<em>15:45</em> cblgh says: <a href="https://www.varasanos.com/PizzaRecipe.htm">https://www.varasanos.com/PizzaRecipe.htm</a><br>
<em>15:45</em> cblgh says: this guy is so serious, check out his site to learn everything about making pizza<br>
<em>15:45</em> cblgh says: related: just found out about this markup language for recipes today <a href="https://cooklang.org/">https://cooklang.org/</a><br>
<em>15:45</em> cblgh says: high yield recipe<br>
<em>15:45</em> cblgh says: <a href="https://clojurescript.org/">https://clojurescript.org/</a><br>
<em>15:45</em> cblgh says: <a href="https://valueflo.ws/">https://valueflo.ws/</a><br>
<em>15:45</em> cblgh says: <a href="https://bob.mikorizal.org/users/bhaugen">https://bob.mikorizal.org/users/bhaugen</a><br>
<em>15:45</em> cblgh says: (bob's fedi)<br>
<em>15:45</em> cblgh says: <a href="https://github.com/ssb-ngi-pointer/ssb-db2">https://github.com/ssb-ngi-pointer/ssb-db2</a><br>
<em>15:47</em> hoody says: it's snowing here, got some cocoa and cryptix explaining stuff on the headphones, this is cool<br>
<em>15:49</em> cblgh says: ohh wow<br>
<em>15:49</em> cblgh says: just arctic circle things<br>
<em>15:49</em> cblgh says: <a href="https://github.com/nanomonkey/scratch">https://github.com/nanomonkey/scratch</a><br>
<em>15:49</em> cblgh says: <a href="https://github.com/nanomonkey/ssb%5Fclj%5Frepl">https://github.com/nanomonkey/ssb%5Fclj%5Frepl</a><br>
<em>15:52</em> hoody says: ssbCRUD<br>
<em>15:52</em> hoody says: i think many people are interested in running ssb as distributed key-val store<br>
<em>15:52</em> cryptix says: +1<br>
<em>15:54</em> nanomonkey says: What ssb client are folks using these days?<br>
<em>15:54</em> cblgh says: still patchwork x)<br>
<em>15:54</em> hoody says: is there a zero data manifesto somewhere?<br>
<em>15:54</em> hoody says: patchwork<br>
<em>15:55</em> rosano says: @hoody some principles at <a href="https://0data.app">https://0data.app</a><br>
<em>15:55</em> hoody says: cheers rosano<br>
<em>15:57</em> amatecha says: \o/<br>
<em>15:59</em> cryptix says: also nano, feel free to mention me with these questions<br>
<em>15:59</em> nanomonkey says: will do<br>
<em>15:59</em> cryptix says: also sure cel would be down to answer - also req criquets: like gwil said, somethomes these threads just vanish<br>
<em>15:59</em> rosano says: <a href="https://chat.rosano.ca/t/zero-data-swap-3-maker-meet-october-27-2021/44">https://chat.rosano.ca/t/zero-data-swap-3-maker-meet-october-27-2021/44</a><br>
<em>15:59</em> rosano says: <a href="https://0data.app">https://0data.app</a><br>
<em>16:00</em> hoody says: super cool, thanks for doing this<br>
<em>16:00</em> hoody says: cu!</p></blockquote>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/event/">event</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 4:21 pm, October 13, 2021" href="/log/2021-10-13-zero-data-swap-3-maker-meet-october-27-2021/"><time datetime="2021-10-13T16:21:26-04:00" data-pagefind-sort="date[datetime]">16h21</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Zero Data Swap #2: Files / Portability</title>
  <link>https://rosano.ca/blog/zero-data-swap-2-files-portability-september-29-2021/</link>
  <pubDate>Thu, 23 Sep 2021 13:04:08 +0000</pubDate>
  <guid>https://rosano.ca/blog/zero-data-swap-2-files-portability-september-29-2021/</guid>
  <description>What makes files composable and extensible? How to supportive them on mobile? What changes when using Zero Data protocols?</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>What makes files composable and extensible? How to supportive them on mobile? What changes when using Zero Data protocols?</nugget><hr>
<div class="content"><ul>
<li><a href="https://gordonbrander.com">Gordon Brander</a> works on <a href="https://subconscious.substack.com/about">a tool for imagination</a>, and recently wrote about <a href="https://subconscious.substack.com/p/composability-with-other-tools">composability with other tools</a>.</li>
<li><a href="https://rosano.ca">Rosano</a> works on various Zero Data apps like <a href="https://hyperdraft.rosano.ca">Hyperdraft</a> and <a href="https://launchlet.dev">Launchlet</a>.</li>
</ul>
<h1 id="reading-inspiration">Reading Inspiration</h1>
<p><a href="https://subconscious.substack.com/p/composability-with-other-tools">Composability with other tools</a>:</p>
<blockquote>
<p>With one-off API integrations, every app must be connected with every other app in both directions. The number of integrations required for interoperability is equal to the maximal number of edges in a directed graph, or n * (n-1). Adding one more app, for a total of 6, means going from 20 to 30 integrations. 10 apps is 90 integrations! […] Imagine any of these apps needs to change its API. Now every single other app in the network needs to change its integration code. Everyone in the network has to coordinate, because everyone in the network has to implement everything.</p></blockquote>
<blockquote>
<p>The protocol acts as a hub in the network, cutting the number of connections necessary for full interoperability from n * (n - 1), to just n. The number of integrations scales 1:1 with the number of apps. […] none of these apps have to know anything about each other. All they need to know is the protocol. This makes the set of possible workflows between apps an open set. […] Files make interoperability the default […] Files allow interoperability to emerge retroactively. New apps can come along and implement the file formats of other popular apps, uplifting their file format into a de facto protocol. This has happened many times, from .doc, to .rtf, to .psd. Competing products are able to get off the ground by interoperating with incumbents. New workflows can be created permissionlessly.</p></blockquote>
<blockquote>
<p>Protocols produce creative combinatorial explosions […] When you have a universal API for composition each additional tool increases the number of possible workflow combinations by n * (n - 1). […] That’s our directional graph equation again, but this time the network effect is on our side. The more tools, the more possibilities. […] If a tool supports composition with other tools, it supports open-ended evolution. At that point, all of the other ways in which it might be terrible become incidental, because an evolutionary system will always be more expressive than one that isn’t. Nothing else can widen the potential of creative tools as rapidly as composability with other tools. It's not even close.</p></blockquote>
<p><a href="https://jenson.org/files">The future needs files – Scott Jenson</a>:</p>
<blockquote>
<p>The power of files comes from them being powerful nouns. They are temporary holding blocks that are used as a form of exchange between applications. A range of apps can edit a single file in a single location. On mobile, the primary way to really use files is to “Share” between apps. This demotes files from a powerful abstract noun into a lackluster narrow verb. […] For example, I can import a text file into the Notes app but it’s really nothing more than a glorified copy/paste, not an editing of an object in place. This makes a cloud storage service like DropBox nearly useless as I’m not editing “the thing” but a copy of the thing. I need to save it back out to Dropbox if I want anyone else to see my changes. That’s vastly underutilizing the power of the abstraction that comes from files.</p></blockquote>
<blockquote>
<p>This isn’t some feeble political statement to liberate my data from a company. I want files to liberate my data from my own apps and create an ML explosion of activity! Files are at some level a hack, I get that, there are limits but they are an extremely useful and flexible hack. Like the QWERTY keyboard, they are “good enough” for most tasks. Files encapsulate a ‘chunk’ of your work and allow that chunk to be seen, moved, acted on, and accessed by multiple people and more importantly external 3rd party processes.</p></blockquote>
<p><a href="https://alexanderobenauer.com/labnotes/002">LN 002: Universal data portability</a>:</p>
<blockquote>
<p>What if you could move data items, with views provided by their hosting applications, around system and application views? What if we could bring together a series of things that all relate, even if they are of different types, and are from different apps or windows? What if you could browse your things in one fluid interface, without regard for their differing data types?</p></blockquote>
<blockquote>
<p>When you pull an item into some other place, it is still rendered by its hosting application. Hosting applications provide the view components for rendering data items in different situations or sizes. It can be thought of much like a widget in today’s operating systems: the system defines what the data item is and what size it should take up, then it relies on the data item’s hosting application to provide the view component that renders it.</p></blockquote>
<p>See also the <a href="https://chat.0data.app/t/zero-data-swap-1-schemas-interoperability-and-cambria-july-28-2021/12">previous swap</a>.</p>
<hr>
<h1 id="summary">Summary</h1>
<p>We discussed what makes files composable and extensible, how to be supportive of files in ecosystems where they aren't present (such as mobile), what changes when using files via Zero Data protocols, and more. Participants included <a href="https://cblgh.org">Alexander Cobleigh</a>, <a href="https://bmannconsulting.com">Boris Mann</a>, <a href="https://github.com/DougReeder">Doug Reeder</a>, <a href="https://gordonbrander.com">Gordon Brander</a>, <a href="https://jessmart.in">Jess Martin</a>, <a href="https://noeldemartin.com">Noel De Martin</a>, <a href="https://rosano.ca">Rosano</a>.</p>
<h1 id="recording">Recording</h1>
<p>The half the video failed to record, and rendering for the remainder was glitchy, so this is essentially an audio podcast.</p>
<iframe title="vimeo-player" src="https://player.vimeo.com/video/767543315?h=56d73c4369" width="300" height="200" frameborder="0" referrerpolicy="strict-origin-when-cross-origin" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share"   allowfullscreen></iframe>
<table>
  <thead>
      <tr>
          <th>time</th>
          <th>section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td><a href="https://vimeo.com/767543315#t=00m00s">Intro</a></td>
      </tr>
      <tr>
          <td>01:31</td>
          <td><a href="https://vimeo.com/767543315#t=01m31s">Aggregators dominate the web</a></td>
      </tr>
      <tr>
          <td>03:08</td>
          <td><a href="https://vimeo.com/767543315#t=03m08s">Aggregators are incentivised to keep systems closed</a></td>
      </tr>
      <tr>
          <td>05:13</td>
          <td><a href="https://vimeo.com/767543315#t=05m13s">Every app eventually implements email and Clubhouse</a></td>
      </tr>
      <tr>
          <td>06:19</td>
          <td><a href="https://vimeo.com/767543315#t=06m19s">Files and app security</a></td>
      </tr>
      <tr>
          <td>07:58</td>
          <td><a href="https://vimeo.com/767543315#t=07m58s">Files as a lego dot of computing</a></td>
      </tr>
      <tr>
          <td>10:39</td>
          <td><a href="https://vimeo.com/767543315#t=10m39s">Files give data an object metaphor</a></td>
      </tr>
      <tr>
          <td>12:22</td>
          <td><a href="https://vimeo.com/767543315#t=12m22s">Disadvantages of files on the network</a></td>
      </tr>
      <tr>
          <td>13:44</td>
          <td><a href="https://vimeo.com/767543315#t=13m44s">LAMP stack is too hard</a></td>
      </tr>
      <tr>
          <td>15:05</td>
          <td><a href="https://vimeo.com/767543315#t=15m05s">Civilization-scale infrastructure for persisting information</a></td>
      </tr>
      <tr>
          <td>16:10</td>
          <td><a href="https://vimeo.com/767543315#t=16m10s">Nouns, verbs, and files</a></td>
      </tr>
      <tr>
          <td>18:08</td>
          <td><a href="https://vimeo.com/767543315#t=18m08s">Files enable interoperability to emerge</a></td>
      </tr>
      <tr>
          <td>22:20</td>
          <td><a href="https://vimeo.com/767543315#t=22m20s">Build tools around workflows</a></td>
      </tr>
      <tr>
          <td>25:03</td>
          <td><a href="https://vimeo.com/767543315#t=25m03s">Customizing apps without programming</a></td>
      </tr>
      <tr>
          <td>26:52</td>
          <td><a href="https://vimeo.com/767543315#t=26m52s">Authentication raises the barrier to entry for interoperability</a></td>
      </tr>
      <tr>
          <td>28:41</td>
          <td><a href="https://vimeo.com/767543315#t=28m41s">Helping people understand where data lives</a></td>
      </tr>
      <tr>
          <td>30:21</td>
          <td><a href="https://vimeo.com/767543315#t=30m21s">Authorization dialogues are complex</a></td>
      </tr>
      <tr>
          <td>32:19</td>
          <td><a href="https://vimeo.com/767543315#t=32m19s">Comparing Personal Data Store with Wallet</a></td>
      </tr>
      <tr>
          <td>34:03</td>
          <td><a href="https://vimeo.com/767543315#t=34m03s">Comparing access via apps and search </a></td>
      </tr>
      <tr>
          <td>37:51</td>
          <td><a href="https://vimeo.com/767543315#t=37m51s">Why does stuff need to exist only in one place?</a></td>
      </tr>
      <tr>
          <td>40:58</td>
          <td><a href="https://vimeo.com/767543315#t=40m58s">Teaching people drag-and-drop with Tiddlywiki</a></td>
      </tr>
      <tr>
          <td>43:06</td>
          <td><a href="https://vimeo.com/767543315#t=43m06s">Complexity of network connections with scale</a></td>
      </tr>
      <tr>
          <td>43:46</td>
          <td><a href="https://vimeo.com/767543315#t=43m46s">File formats are like network hubs</a></td>
      </tr>
      <tr>
          <td>45:40</td>
          <td><a href="https://vimeo.com/767543315#t=45m40s">Drag-and-drop is a versatile endpoint</a></td>
      </tr>
      <tr>
          <td>47:00</td>
          <td><a href="https://vimeo.com/767543315#t=47m00s">Helping people understand technical metaphors</a></td>
      </tr>
      <tr>
          <td>48:39</td>
          <td><a href="https://vimeo.com/767543315#t=48m39s">Patterns from web3 wallets</a></td>
      </tr>
      <tr>
          <td>50:07</td>
          <td><a href="https://vimeo.com/767543315#t=50m07s">QR codes for transferring data</a></td>
      </tr>
      <tr>
          <td>51:21</td>
          <td><a href="https://vimeo.com/767543315#t=51m21s">Collaboration via Croquet and QR codes</a></td>
      </tr>
      <tr>
          <td>53:26</td>
          <td><a href="https://vimeo.com/767543315#t=53m26s">Global and unique and memorable</a></td>
      </tr>
      <tr>
          <td>56:11</td>
          <td><a href="https://vimeo.com/767543315#t=56m11s">Trust by device proximity</a></td>
      </tr>
      <tr>
          <td>57:30</td>
          <td><a href="https://vimeo.com/767543315#t=57m30s">Keeping parity with features popularized by Apple</a></td>
      </tr>
      <tr>
          <td>61:19</td>
          <td><a href="https://vimeo.com/767543315#t=61m19s">Interoperability by producing narrow output and accepting broad input</a></td>
      </tr>
      <tr>
          <td>65:29</td>
          <td><a href="https://vimeo.com/767543315#t=65m29s">Onboarding issues</a></td>
      </tr>
      <tr>
          <td>67:19</td>
          <td><a href="https://vimeo.com/767543315#t=67m19s">QR codes enabling multiplayer</a></td>
      </tr>
  </tbody>
</table>
<h1 id="chat">Chat</h1>
<p>The first half of the chat was lost due to a call drop. These times reflect a start time of 16:00.</p>
<blockquote>
<p><em>16:48</em> cblgh says: ( haha oh dang, sorry for dropping out x) )<br>
<em>16:48</em> Noel says: ( I think everyone did )<br>
<em>16:49</em> Rosano says: ( if anyone has the old chat can they save it? )<br>
<em>16:49</em> cblgh says: ( &quot;tiddlers&quot; thoooooo )<br>
<em>16:49</em> Jess says: ( we all lost it 😦((( )<br>
<em>16:50</em> Gordon says: nooooooo<br>
<em>16:50</em> Gordon says: TiddlyWiki is so compelling<br>
<em>16:50</em> Gordon says: ( <a href="https://subconscious.substack.com/p/composability-with-other-tools">https://subconscious.substack.com/p/composability-with-other-tools</a>)<br>
<em>16:53</em> Jess says: it's the cause of Brooks Law<br>
<em>16:53</em> Jess says: as well<br>
<em>16:53</em> Jess says: <a href="https://en.wikipedia.org/wiki/Brooks%27s%5Flaw">https://en.wikipedia.org/wiki/Brooks's_law</a><br>
<em>16:53</em> Jess says: &quot;Communication overhead increases as the number of people increases. Due to combinatorial explosion, the number of different communication channels increases rapidly with the number of people.[3] Everyone working on the same task needs to keep in sync, so as more people are added they spend more time trying to find out what everyone else is doing.&quot;<br>
<em>16:53</em> Jess says: we're focusing on the workflow! 😛<br>
<em>16:53</em> Jess says: the UX<br>
<em>16:53</em> Jess says: the action<br>
<em>16:53</em> Jess says: sets up an expectation that it will work<br>
<em>16:53</em> Jess says: atJSON<br>
<em>16:53</em> Jess says: ( 😛 )<br>
<em>16:54</em> Gordon says: ( can y'all share a link to this? )<br>
<em>16:54</em> cblgh says: <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTML%5FDrag%5Fand%5FDrop%5FAPI">https://developer.mozilla.org/en-US/docs/Web/API/HTML%5FDrag%5Fand%5FDrop%5FAPI</a><br>
<em>16:54</em> Boris says: <a href="https://twitter.com/bmann/status/1443246811607560193?s=20">https://twitter.com/bmann/status/1443246811607560193?s=20</a><br>
<em>16:55</em> Gordon says: ( love it )<br>
<em>16:56</em> Boris says: And then the actual reference docs for TW <a href="https://tiddlywiki.com/dev/#TiddlyWiki%20Drag%20and%20Drop%20Interoperability">https://tiddlywiki.com/dev/#TiddlyWiki Drag and Drop Interoperability</a><br>
<em>16:56</em> Boris says: OK, it's already a bag of JSON. Title and Text and arbitrary custom fields var titleString = &quot;This is the string that appears when the block is dragged to a text input&quot;; var tiddlerData = [{title: &quot;Tiddler One&quot;, text: &quot;This is one of the payload tiddlers&quot;}, {title: &quot;Tiddler Two&quot;, text: &quot;This is another of the payload tiddlers&quot;, &quot;custom-field&quot;: &quot;A custom field value&quot;}];<br>
<em>16:58</em> cblgh says: it's interesting to think about the &quot;education of users&quot; from the perspective of storytelling; do you do the exposition thing and dump it all on people in the beginning (&quot;hello, welcome!&quot; screen), or do your characters (whatever that is in an app? a feature? its affordances?) pull people in gradually to the understanding<br>
<em>16:58</em> cblgh says: ( lol cmd-w is lethal in notetaking apps in browsers (it doesn't delete the last word!!) )<br>
<em>16:58</em> Jess says: ooooooooohhh I like this direction<br>
<em>16:58</em> Jess says: ( we're working heavily with QR codes at Croquet )<br>
<em>16:58</em> Gordon says: ( 100 )<br>
<em>16:59</em> Jess says: and to think of their phone as a container!<br>
<em>16:59</em> Jess says: or my phone as the key...<br>
<em>16:59</em> Jess says: ( or something )<br>
<em>16:59</em> Gordon says: ( yes! )<br>
<em>16:59</em> Jess says: ( the metaphor )<br>
<em>16:59</em> Rosano says: ( @cblgh i avoid the hello welcome but fail to do onboarding… something fundamental to think about, i like the story metaphor )<br>
<em>16:59</em> Gordon says: ( It makes intuitive sense. Phones are very personal. )<br>
<em>17:01</em> Jess says: 2FA<br>
<em>17:01</em> Jess says: in general<br>
<em>17:01</em> Jess says: ( magic links, so true )<br>
<em>17:01</em> Noel says: ( We were talking about gen Z before, I think a lot of them don't even use email, they just have social logins (like login with Facebook) )<br>
<em>17:01</em> Doug says: This particular hardware didn't catch on, but this video shows where we'd like to be: <a href="https://www.youtube.com/watch?v=2oLfKqpUJT4">https://www.youtube.com/watch?v=2oLfKqpUJT4</a><br>
<em>17:02</em> Jess says: <a href="http://www.aaronsw.com/weblog/squarezooko">http://www.aaronsw.com/weblog/squarezooko</a><br>
<em>17:02</em> cblgh says: great article on squaring zooko's triangle for a particular set of use cases<br>
<a href="https://www.inkandswitch.com/backchannel/">https://www.inkandswitch.com/backchannel/</a><br>
<em>17:02</em> Boris says: doesn't square it at all<br>
<em>17:02</em> Boris says: it uses pet names<br>
<em>17:02</em> Boris says: ( not globally unique )<br>
<em>17:03</em> cblgh says: ( the relationship is though )<br>
<em>17:03</em> Boris says: ( yep! )<br>
<em>17:04</em> Jess says: ( I definitely will, because I want to work on more hardware stuff once we solve this software stuff 😃 )<br>
<em>17:04</em> Boris says: ( @Rosano -- please make sure to copy / paste / export this chat at end of call )<br>
<em>17:05</em> Rosano says: ( @boris just copied now, hope to copy later, the first chat may be gone )<br>
<em>17:06</em> Jess says: ( amazing UX )<br>
<em>17:07</em> Rosano says: <a href="https://youtu.be/cpNk6fkwS2I?t=15">https://youtu.be/cpNk6fkwS2I?t=15</a><br>
<em>17:07</em> Rosano says: ( ethereal blue dots )<br>
<em>17:07</em> Doug says: ( That youtube video is private )<br>
<em>17:07</em> cblgh says: kinda related project i put together for sharing cabal keys across computers in physical space &quot;whisperlinks&quot; <a href="https://github.com/cblgh/paperslip">https://github.com/cblgh/paperslip</a> &quot;share hard-to-transmit snippets with easy-to-pronounce names using dht magic&quot;<br>
<em>17:08</em> Boris says: ( Oh yeah, the video is private )<br>
<em>17:09</em> Gordon says: <a href="https://en.wikipedia.org/wiki/Celestial%5FEmporium%5Fof%5FBenevolent%5FKnowledge">https://en.wikipedia.org/wiki/Celestial%5FEmporium%5Fof%5FBenevolent%5FKnowledge</a><br>
<em>17:10</em> cblgh says: oops gotta go, thanks for the chat everyone!<br>
<em>17:10</em> cblgh says: ( (sorry i didnt participate that much, but 23:00 here '😃 )<br>
<em>17:10</em> Rosano says: ( see ya alex! thanks for coming, good night )<br>
<em>17:10</em> Gordon says: ( thanks everyone! )<br>
<em>17:11</em> Jess says: <a href="https://en.wikipedia.org/wiki/Robustness%5Fprinciple">https://en.wikipedia.org/wiki/Robustness%5Fprinciple</a> &quot;Be conservative in what you do, be liberal in what you accept from others.&quot;<br>
<em>17:11</em> Jess says: and text can be assumed to be first line...<br>
<em>17:11</em> Jess says: ( sorry, title can be assumed to be first line of text )<br>
<em>17:12</em> Gordon says: ( Files, copy/paste, drag-drop the ur-interop features )<br>
<em>17:13</em> Jess says: ( opencollective??? )<br>
<em>17:13</em> Gordon says: ( I Would Simply Have Expede Solve Sync )<br>
<em>17:13</em> Jess says: ( I'm free 😉 )<br>
<em>17:13</em> Gordon says: ( I'm game )<br>
<em>17:14</em> Boris says: ( passwordless file-less onboarding something something )<br>
<em>17:14</em> Jess says: ( &quot;shared language of onboarding in passport-less, data-less systems&quot; )<br>
<em>17:14</em> Gordon says: ( +1 doorless is awesome )<br>
<em>17:15</em> Jess says: ( MAYA: most advanced, yet acceptable )<br>
<em>17:15</em> Noel says: ( doorless does not contradict onboarding, you can put an onboarding in place of a blank canvas )<br>
<em>17:15</em> Jess says: oooooh the natto.dev interactive tutorial is AMAZING btw<br>
<em>17:15</em> Noel says: ( that's sort of what I did with Media Kraken )<br>
<em>17:15</em> Rosano says: ( @noel but that takes work )<br>
<em>17:15</em> Jess says: ( <a href="https://natto.dev/tutorial/tip-calculator">https://natto.dev/tutorial/tip-calculator</a>)</p></blockquote>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/event/">event</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 9:04 am, September 23, 2021" href="/blog/zero-data-swap-2-files-portability-september-29-2021/"><time datetime="2021-09-23T09:04:08-04:00" data-pagefind-sort="date[datetime]">09h04</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Thursday, September 23, 2021 09h04</title>
  <link>https://rosano.ca/log/2021-09-23-zero-data-swap-2-files-portability-september-29-2021/</link>
  <pubDate>Thu, 23 Sep 2021 09:04:08 -0400</pubDate>
  <guid>https://rosano.ca/log/2021-09-23-zero-data-swap-2-files-portability-september-29-2021/</guid>
  <description> Gordon Brander works on a tool for imagination, and recently wrote about composability with other tools. Rosano works on various Zero Data apps like Hyperdraft and Launchlet. Reading Inspiration Composability with other tools:&#xA;With one-off API integrations, every app must be connected with every other app in both directions. The number of integrations required for interoperability is equal to the maximal number of edges in a directed graph, or n * (n-1). Adding one more app, for a total of 6, means going from 20 to 30 integrations. 10 apps is 90 integrations! […] Imagine any of these apps needs to change its API. Now every single other app in the network needs to change its integration code. Everyone in the network has to coordinate, because everyone in the network has to implement everything.&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><ul>
<li><a href="https://gordonbrander.com">Gordon Brander</a> works on <a href="https://subconscious.substack.com/about">a tool for imagination</a>, and recently wrote about <a href="https://subconscious.substack.com/p/composability-with-other-tools">composability with other tools</a>.</li>
<li><a href="https://rosano.ca">Rosano</a> works on various Zero Data apps like <a href="https://hyperdraft.rosano.ca">Hyperdraft</a> and <a href="https://launchlet.dev">Launchlet</a>.</li>
</ul>
<h1 id="reading-inspiration">Reading Inspiration</h1>
<p><a href="https://subconscious.substack.com/p/composability-with-other-tools">Composability with other tools</a>:</p>
<blockquote>
<p>With one-off API integrations, every app must be connected with every other app in both directions. The number of integrations required for interoperability is equal to the maximal number of edges in a directed graph, or n * (n-1). Adding one more app, for a total of 6, means going from 20 to 30 integrations. 10 apps is 90 integrations! […] Imagine any of these apps needs to change its API. Now every single other app in the network needs to change its integration code. Everyone in the network has to coordinate, because everyone in the network has to implement everything.</p></nugget><hr>
<div class="content"><ul>
<li><a href="https://gordonbrander.com">Gordon Brander</a> works on <a href="https://subconscious.substack.com/about">a tool for imagination</a>, and recently wrote about <a href="https://subconscious.substack.com/p/composability-with-other-tools">composability with other tools</a>.</li>
<li><a href="https://rosano.ca">Rosano</a> works on various Zero Data apps like <a href="https://hyperdraft.rosano.ca">Hyperdraft</a> and <a href="https://launchlet.dev">Launchlet</a>.</li>
</ul>
<h1 id="reading-inspiration">Reading Inspiration</h1>
<p><a href="https://subconscious.substack.com/p/composability-with-other-tools">Composability with other tools</a>:</p>
<blockquote>
<p>With one-off API integrations, every app must be connected with every other app in both directions. The number of integrations required for interoperability is equal to the maximal number of edges in a directed graph, or n * (n-1). Adding one more app, for a total of 6, means going from 20 to 30 integrations. 10 apps is 90 integrations! […] Imagine any of these apps needs to change its API. Now every single other app in the network needs to change its integration code. Everyone in the network has to coordinate, because everyone in the network has to implement everything.</p></blockquote>
<blockquote>
<p>The protocol acts as a hub in the network, cutting the number of connections necessary for full interoperability from n * (n - 1), to just n. The number of integrations scales 1:1 with the number of apps. […] none of these apps have to know anything about each other. All they need to know is the protocol. This makes the set of possible workflows between apps an open set. […] Files make interoperability the default […] Files allow interoperability to emerge retroactively. New apps can come along and implement the file formats of other popular apps, uplifting their file format into a de facto protocol. This has happened many times, from .doc, to .rtf, to .psd. Competing products are able to get off the ground by interoperating with incumbents. New workflows can be created permissionlessly.</p></blockquote>
<blockquote>
<p>Protocols produce creative combinatorial explosions […] When you have a universal API for composition each additional tool increases the number of possible workflow combinations by n * (n - 1). […] That’s our directional graph equation again, but this time the network effect is on our side. The more tools, the more possibilities. […] If a tool supports composition with other tools, it supports open-ended evolution. At that point, all of the other ways in which it might be terrible become incidental, because an evolutionary system will always be more expressive than one that isn’t. Nothing else can widen the potential of creative tools as rapidly as composability with other tools. It's not even close.</p></blockquote>
<p><a href="https://jenson.org/files">The future needs files – Scott Jenson</a>:</p>
<blockquote>
<p>The power of files comes from them being powerful nouns. They are temporary holding blocks that are used as a form of exchange between applications. A range of apps can edit a single file in a single location. On mobile, the primary way to really use files is to “Share” between apps. This demotes files from a powerful abstract noun into a lackluster narrow verb. […] For example, I can import a text file into the Notes app but it’s really nothing more than a glorified copy/paste, not an editing of an object in place. This makes a cloud storage service like DropBox nearly useless as I’m not editing “the thing” but a copy of the thing. I need to save it back out to Dropbox if I want anyone else to see my changes. That’s vastly underutilizing the power of the abstraction that comes from files.</p></blockquote>
<blockquote>
<p>This isn’t some feeble political statement to liberate my data from a company. I want files to liberate my data from my own apps and create an ML explosion of activity! Files are at some level a hack, I get that, there are limits but they are an extremely useful and flexible hack. Like the QWERTY keyboard, they are “good enough” for most tasks. Files encapsulate a ‘chunk’ of your work and allow that chunk to be seen, moved, acted on, and accessed by multiple people and more importantly external 3rd party processes.</p></blockquote>
<p><a href="https://alexanderobenauer.com/labnotes/002">LN 002: Universal data portability</a>:</p>
<blockquote>
<p>What if you could move data items, with views provided by their hosting applications, around system and application views? What if we could bring together a series of things that all relate, even if they are of different types, and are from different apps or windows? What if you could browse your things in one fluid interface, without regard for their differing data types?</p></blockquote>
<blockquote>
<p>When you pull an item into some other place, it is still rendered by its hosting application. Hosting applications provide the view components for rendering data items in different situations or sizes. It can be thought of much like a widget in today’s operating systems: the system defines what the data item is and what size it should take up, then it relies on the data item’s hosting application to provide the view component that renders it.</p></blockquote>
<p>See also the <a href="https://chat.0data.app/t/zero-data-swap-1-schemas-interoperability-and-cambria-july-28-2021/12">previous swap</a>.</p>
<hr>
<h1 id="summary">Summary</h1>
<p>We discussed what makes files composable and extensible, how to be supportive of files in ecosystems where they aren't present (such as mobile), what changes when using files via Zero Data protocols, and more. Participants included <a href="https://cblgh.org">Alexander Cobleigh</a>, <a href="https://bmannconsulting.com">Boris Mann</a>, <a href="https://github.com/DougReeder">Doug Reeder</a>, <a href="https://gordonbrander.com">Gordon Brander</a>, <a href="https://jessmart.in">Jess Martin</a>, <a href="https://noeldemartin.com">Noel De Martin</a>, <a href="https://rosano.ca">Rosano</a>.</p>
<h1 id="recording">Recording</h1>
<p>The half the video failed to record, and rendering for the remainder was glitchy, so this is essentially an audio podcast.</p>
<iframe title="vimeo-player" src="https://player.vimeo.com/video/767543315?h=56d73c4369" width="300" height="200" frameborder="0" referrerpolicy="strict-origin-when-cross-origin" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share"   allowfullscreen></iframe>
<table>
  <thead>
      <tr>
          <th>time</th>
          <th>section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td><a href="https://vimeo.com/767543315#t=00m00s">Intro</a></td>
      </tr>
      <tr>
          <td>01:31</td>
          <td><a href="https://vimeo.com/767543315#t=01m31s">Aggregators dominate the web</a></td>
      </tr>
      <tr>
          <td>03:08</td>
          <td><a href="https://vimeo.com/767543315#t=03m08s">Aggregators are incentivised to keep systems closed</a></td>
      </tr>
      <tr>
          <td>05:13</td>
          <td><a href="https://vimeo.com/767543315#t=05m13s">Every app eventually implements email and Clubhouse</a></td>
      </tr>
      <tr>
          <td>06:19</td>
          <td><a href="https://vimeo.com/767543315#t=06m19s">Files and app security</a></td>
      </tr>
      <tr>
          <td>07:58</td>
          <td><a href="https://vimeo.com/767543315#t=07m58s">Files as a lego dot of computing</a></td>
      </tr>
      <tr>
          <td>10:39</td>
          <td><a href="https://vimeo.com/767543315#t=10m39s">Files give data an object metaphor</a></td>
      </tr>
      <tr>
          <td>12:22</td>
          <td><a href="https://vimeo.com/767543315#t=12m22s">Disadvantages of files on the network</a></td>
      </tr>
      <tr>
          <td>13:44</td>
          <td><a href="https://vimeo.com/767543315#t=13m44s">LAMP stack is too hard</a></td>
      </tr>
      <tr>
          <td>15:05</td>
          <td><a href="https://vimeo.com/767543315#t=15m05s">Civilization-scale infrastructure for persisting information</a></td>
      </tr>
      <tr>
          <td>16:10</td>
          <td><a href="https://vimeo.com/767543315#t=16m10s">Nouns, verbs, and files</a></td>
      </tr>
      <tr>
          <td>18:08</td>
          <td><a href="https://vimeo.com/767543315#t=18m08s">Files enable interoperability to emerge</a></td>
      </tr>
      <tr>
          <td>22:20</td>
          <td><a href="https://vimeo.com/767543315#t=22m20s">Build tools around workflows</a></td>
      </tr>
      <tr>
          <td>25:03</td>
          <td><a href="https://vimeo.com/767543315#t=25m03s">Customizing apps without programming</a></td>
      </tr>
      <tr>
          <td>26:52</td>
          <td><a href="https://vimeo.com/767543315#t=26m52s">Authentication raises the barrier to entry for interoperability</a></td>
      </tr>
      <tr>
          <td>28:41</td>
          <td><a href="https://vimeo.com/767543315#t=28m41s">Helping people understand where data lives</a></td>
      </tr>
      <tr>
          <td>30:21</td>
          <td><a href="https://vimeo.com/767543315#t=30m21s">Authorization dialogues are complex</a></td>
      </tr>
      <tr>
          <td>32:19</td>
          <td><a href="https://vimeo.com/767543315#t=32m19s">Comparing Personal Data Store with Wallet</a></td>
      </tr>
      <tr>
          <td>34:03</td>
          <td><a href="https://vimeo.com/767543315#t=34m03s">Comparing access via apps and search </a></td>
      </tr>
      <tr>
          <td>37:51</td>
          <td><a href="https://vimeo.com/767543315#t=37m51s">Why does stuff need to exist only in one place?</a></td>
      </tr>
      <tr>
          <td>40:58</td>
          <td><a href="https://vimeo.com/767543315#t=40m58s">Teaching people drag-and-drop with Tiddlywiki</a></td>
      </tr>
      <tr>
          <td>43:06</td>
          <td><a href="https://vimeo.com/767543315#t=43m06s">Complexity of network connections with scale</a></td>
      </tr>
      <tr>
          <td>43:46</td>
          <td><a href="https://vimeo.com/767543315#t=43m46s">File formats are like network hubs</a></td>
      </tr>
      <tr>
          <td>45:40</td>
          <td><a href="https://vimeo.com/767543315#t=45m40s">Drag-and-drop is a versatile endpoint</a></td>
      </tr>
      <tr>
          <td>47:00</td>
          <td><a href="https://vimeo.com/767543315#t=47m00s">Helping people understand technical metaphors</a></td>
      </tr>
      <tr>
          <td>48:39</td>
          <td><a href="https://vimeo.com/767543315#t=48m39s">Patterns from web3 wallets</a></td>
      </tr>
      <tr>
          <td>50:07</td>
          <td><a href="https://vimeo.com/767543315#t=50m07s">QR codes for transferring data</a></td>
      </tr>
      <tr>
          <td>51:21</td>
          <td><a href="https://vimeo.com/767543315#t=51m21s">Collaboration via Croquet and QR codes</a></td>
      </tr>
      <tr>
          <td>53:26</td>
          <td><a href="https://vimeo.com/767543315#t=53m26s">Global and unique and memorable</a></td>
      </tr>
      <tr>
          <td>56:11</td>
          <td><a href="https://vimeo.com/767543315#t=56m11s">Trust by device proximity</a></td>
      </tr>
      <tr>
          <td>57:30</td>
          <td><a href="https://vimeo.com/767543315#t=57m30s">Keeping parity with features popularized by Apple</a></td>
      </tr>
      <tr>
          <td>61:19</td>
          <td><a href="https://vimeo.com/767543315#t=61m19s">Interoperability by producing narrow output and accepting broad input</a></td>
      </tr>
      <tr>
          <td>65:29</td>
          <td><a href="https://vimeo.com/767543315#t=65m29s">Onboarding issues</a></td>
      </tr>
      <tr>
          <td>67:19</td>
          <td><a href="https://vimeo.com/767543315#t=67m19s">QR codes enabling multiplayer</a></td>
      </tr>
  </tbody>
</table>
<h1 id="chat">Chat</h1>
<p>The first half of the chat was lost due to a call drop. These times reflect a start time of 16:00.</p>
<blockquote>
<p><em>16:48</em> cblgh says: ( haha oh dang, sorry for dropping out x) )<br>
<em>16:48</em> Noel says: ( I think everyone did )<br>
<em>16:49</em> Rosano says: ( if anyone has the old chat can they save it? )<br>
<em>16:49</em> cblgh says: ( &quot;tiddlers&quot; thoooooo )<br>
<em>16:49</em> Jess says: ( we all lost it 😦((( )<br>
<em>16:50</em> Gordon says: nooooooo<br>
<em>16:50</em> Gordon says: TiddlyWiki is so compelling<br>
<em>16:50</em> Gordon says: ( <a href="https://subconscious.substack.com/p/composability-with-other-tools">https://subconscious.substack.com/p/composability-with-other-tools</a>)<br>
<em>16:53</em> Jess says: it's the cause of Brooks Law<br>
<em>16:53</em> Jess says: as well<br>
<em>16:53</em> Jess says: <a href="https://en.wikipedia.org/wiki/Brooks%27s%5Flaw">https://en.wikipedia.org/wiki/Brooks's_law</a><br>
<em>16:53</em> Jess says: &quot;Communication overhead increases as the number of people increases. Due to combinatorial explosion, the number of different communication channels increases rapidly with the number of people.[3] Everyone working on the same task needs to keep in sync, so as more people are added they spend more time trying to find out what everyone else is doing.&quot;<br>
<em>16:53</em> Jess says: we're focusing on the workflow! 😛<br>
<em>16:53</em> Jess says: the UX<br>
<em>16:53</em> Jess says: the action<br>
<em>16:53</em> Jess says: sets up an expectation that it will work<br>
<em>16:53</em> Jess says: atJSON<br>
<em>16:53</em> Jess says: ( 😛 )<br>
<em>16:54</em> Gordon says: ( can y'all share a link to this? )<br>
<em>16:54</em> cblgh says: <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTML%5FDrag%5Fand%5FDrop%5FAPI">https://developer.mozilla.org/en-US/docs/Web/API/HTML%5FDrag%5Fand%5FDrop%5FAPI</a><br>
<em>16:54</em> Boris says: <a href="https://twitter.com/bmann/status/1443246811607560193?s=20">https://twitter.com/bmann/status/1443246811607560193?s=20</a><br>
<em>16:55</em> Gordon says: ( love it )<br>
<em>16:56</em> Boris says: And then the actual reference docs for TW <a href="https://tiddlywiki.com/dev/#TiddlyWiki%20Drag%20and%20Drop%20Interoperability">https://tiddlywiki.com/dev/#TiddlyWiki Drag and Drop Interoperability</a><br>
<em>16:56</em> Boris says: OK, it's already a bag of JSON. Title and Text and arbitrary custom fields var titleString = &quot;This is the string that appears when the block is dragged to a text input&quot;; var tiddlerData = [{title: &quot;Tiddler One&quot;, text: &quot;This is one of the payload tiddlers&quot;}, {title: &quot;Tiddler Two&quot;, text: &quot;This is another of the payload tiddlers&quot;, &quot;custom-field&quot;: &quot;A custom field value&quot;}];<br>
<em>16:58</em> cblgh says: it's interesting to think about the &quot;education of users&quot; from the perspective of storytelling; do you do the exposition thing and dump it all on people in the beginning (&quot;hello, welcome!&quot; screen), or do your characters (whatever that is in an app? a feature? its affordances?) pull people in gradually to the understanding<br>
<em>16:58</em> cblgh says: ( lol cmd-w is lethal in notetaking apps in browsers (it doesn't delete the last word!!) )<br>
<em>16:58</em> Jess says: ooooooooohhh I like this direction<br>
<em>16:58</em> Jess says: ( we're working heavily with QR codes at Croquet )<br>
<em>16:58</em> Gordon says: ( 100 )<br>
<em>16:59</em> Jess says: and to think of their phone as a container!<br>
<em>16:59</em> Jess says: or my phone as the key...<br>
<em>16:59</em> Jess says: ( or something )<br>
<em>16:59</em> Gordon says: ( yes! )<br>
<em>16:59</em> Jess says: ( the metaphor )<br>
<em>16:59</em> Rosano says: ( @cblgh i avoid the hello welcome but fail to do onboarding… something fundamental to think about, i like the story metaphor )<br>
<em>16:59</em> Gordon says: ( It makes intuitive sense. Phones are very personal. )<br>
<em>17:01</em> Jess says: 2FA<br>
<em>17:01</em> Jess says: in general<br>
<em>17:01</em> Jess says: ( magic links, so true )<br>
<em>17:01</em> Noel says: ( We were talking about gen Z before, I think a lot of them don't even use email, they just have social logins (like login with Facebook) )<br>
<em>17:01</em> Doug says: This particular hardware didn't catch on, but this video shows where we'd like to be: <a href="https://www.youtube.com/watch?v=2oLfKqpUJT4">https://www.youtube.com/watch?v=2oLfKqpUJT4</a><br>
<em>17:02</em> Jess says: <a href="http://www.aaronsw.com/weblog/squarezooko">http://www.aaronsw.com/weblog/squarezooko</a><br>
<em>17:02</em> cblgh says: great article on squaring zooko's triangle for a particular set of use cases<br>
<a href="https://www.inkandswitch.com/backchannel/">https://www.inkandswitch.com/backchannel/</a><br>
<em>17:02</em> Boris says: doesn't square it at all<br>
<em>17:02</em> Boris says: it uses pet names<br>
<em>17:02</em> Boris says: ( not globally unique )<br>
<em>17:03</em> cblgh says: ( the relationship is though )<br>
<em>17:03</em> Boris says: ( yep! )<br>
<em>17:04</em> Jess says: ( I definitely will, because I want to work on more hardware stuff once we solve this software stuff 😃 )<br>
<em>17:04</em> Boris says: ( @Rosano -- please make sure to copy / paste / export this chat at end of call )<br>
<em>17:05</em> Rosano says: ( @boris just copied now, hope to copy later, the first chat may be gone )<br>
<em>17:06</em> Jess says: ( amazing UX )<br>
<em>17:07</em> Rosano says: <a href="https://youtu.be/cpNk6fkwS2I?t=15">https://youtu.be/cpNk6fkwS2I?t=15</a><br>
<em>17:07</em> Rosano says: ( ethereal blue dots )<br>
<em>17:07</em> Doug says: ( That youtube video is private )<br>
<em>17:07</em> cblgh says: kinda related project i put together for sharing cabal keys across computers in physical space &quot;whisperlinks&quot; <a href="https://github.com/cblgh/paperslip">https://github.com/cblgh/paperslip</a> &quot;share hard-to-transmit snippets with easy-to-pronounce names using dht magic&quot;<br>
<em>17:08</em> Boris says: ( Oh yeah, the video is private )<br>
<em>17:09</em> Gordon says: <a href="https://en.wikipedia.org/wiki/Celestial%5FEmporium%5Fof%5FBenevolent%5FKnowledge">https://en.wikipedia.org/wiki/Celestial%5FEmporium%5Fof%5FBenevolent%5FKnowledge</a><br>
<em>17:10</em> cblgh says: oops gotta go, thanks for the chat everyone!<br>
<em>17:10</em> cblgh says: ( (sorry i didnt participate that much, but 23:00 here '😃 )<br>
<em>17:10</em> Rosano says: ( see ya alex! thanks for coming, good night )<br>
<em>17:10</em> Gordon says: ( thanks everyone! )<br>
<em>17:11</em> Jess says: <a href="https://en.wikipedia.org/wiki/Robustness%5Fprinciple">https://en.wikipedia.org/wiki/Robustness%5Fprinciple</a> &quot;Be conservative in what you do, be liberal in what you accept from others.&quot;<br>
<em>17:11</em> Jess says: and text can be assumed to be first line...<br>
<em>17:11</em> Jess says: ( sorry, title can be assumed to be first line of text )<br>
<em>17:12</em> Gordon says: ( Files, copy/paste, drag-drop the ur-interop features )<br>
<em>17:13</em> Jess says: ( opencollective??? )<br>
<em>17:13</em> Gordon says: ( I Would Simply Have Expede Solve Sync )<br>
<em>17:13</em> Jess says: ( I'm free 😉 )<br>
<em>17:13</em> Gordon says: ( I'm game )<br>
<em>17:14</em> Boris says: ( passwordless file-less onboarding something something )<br>
<em>17:14</em> Jess says: ( &quot;shared language of onboarding in passport-less, data-less systems&quot; )<br>
<em>17:14</em> Gordon says: ( +1 doorless is awesome )<br>
<em>17:15</em> Jess says: ( MAYA: most advanced, yet acceptable )<br>
<em>17:15</em> Noel says: ( doorless does not contradict onboarding, you can put an onboarding in place of a blank canvas )<br>
<em>17:15</em> Jess says: oooooh the natto.dev interactive tutorial is AMAZING btw<br>
<em>17:15</em> Noel says: ( that's sort of what I did with Media Kraken )<br>
<em>17:15</em> Rosano says: ( @noel but that takes work )<br>
<em>17:15</em> Jess says: ( <a href="https://natto.dev/tutorial/tip-calculator">https://natto.dev/tutorial/tip-calculator</a>)</p></blockquote>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/event/">event</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 9:04 am, September 23, 2021" href="/log/2021-09-23-zero-data-swap-2-files-portability-september-29-2021/"><time datetime="2021-09-23T09:04:08-04:00" data-pagefind-sort="date[datetime]">09h04</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Zero Data on the Runtime Podcast</title>
  <link>https://rosano.ca/blog/zero-data-on-the-runtime-podcast/</link>
  <pubDate>Fri, 03 Sep 2021 22:50:22 +0000</pubDate>
  <guid>https://rosano.ca/blog/zero-data-on-the-runtime-podcast/</guid>
  <description>Protocol differences, what it&#39;s like to build them, tradeoffs compared to traditional designs.</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>Protocol differences, what it's like to build them, tradeoffs compared to traditional designs.</nugget><hr>
<div class="content"><p>I had a great chat with Rafael Kennedy about Zero Data apps, the different protocols, what it's like to build them, tradeoffs compared to traditional designs.</p>
<p><em>Note: At the beginning I had said 'Thanks for inviting me', but due to audio issues it recorded as sort of cold silence.</em></p>
<p><a href="https://runtimepodcast.com/#11">https://runtimepodcast.com/#11</a></p>
<iframe src="https://anchor.fm/rafael-kennedy0/embed/episodes/011---Rosano-on-Zero-Data-Apps-e16sie8" height="102px" width="400px" frameborder="0" scrolling="no"></iframe>
<table>
  <thead>
      <tr>
          <th>time</th>
          <th>section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td>Introduction</td>
      </tr>
      <tr>
          <td>00:39</td>
          <td>What is Zero Data?</td>
      </tr>
      <tr>
          <td>03:19</td>
          <td>The various protocols</td>
      </tr>
      <tr>
          <td>05:39</td>
          <td>Design tradeoffs</td>
      </tr>
      <tr>
          <td>08:41</td>
          <td>Paying for apps</td>
      </tr>
      <tr>
          <td>11:46</td>
          <td>Protocol technical differences</td>
      </tr>
      <tr>
          <td>13:43</td>
          <td>Hyperdraft</td>
      </tr>
      <tr>
          <td>16:52</td>
          <td>Developer workflow and difficulties</td>
      </tr>
      <tr>
          <td>18:04</td>
          <td>Implications of not having a server</td>
      </tr>
      <tr>
          <td>21:24</td>
          <td>Experimenting with collaboration</td>
      </tr>
      <tr>
          <td>24:41</td>
          <td>What's next</td>
      </tr>
      <tr>
          <td>26:09</td>
          <td>Other inspiring projects</td>
      </tr>
      <tr>
          <td>27:59</td>
          <td>Promoting Hyperdraft and Joybox</td>
      </tr>
      <tr>
          <td>29:18</td>
          <td>Doorless apps</td>
      </tr>
      <tr>
          <td>30:34</td>
          <td>Counter-intuitiveness of anonymous funding</td>
      </tr>
      <tr>
          <td>33:33</td>
          <td>Conclusion</td>
      </tr>
  </tbody>
</table>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/event/">event</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 6:50 pm, September 3, 2021" href="/blog/zero-data-on-the-runtime-podcast/"><time datetime="2021-09-03T18:50:22-04:00" data-pagefind-sort="date[datetime]">18h50</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Friday, September 3, 2021 18h50</title>
  <link>https://rosano.ca/log/2021-09-03-zero-data-on-the-runtime-podcast/</link>
  <pubDate>Fri, 03 Sep 2021 18:50:22 -0400</pubDate>
  <guid>https://rosano.ca/log/2021-09-03-zero-data-on-the-runtime-podcast/</guid>
  <description>I had a great chat with Rafael Kennedy about Zero Data apps, the different protocols, what it&#39;s like to build them, tradeoffs compared to traditional designs.&#xA;Note: At the beginning I had said &#39;Thanks for inviting me&#39;, but due to audio issues it recorded as sort of cold silence.&#xA;https://runtimepodcast.com/#11&#xA;time section 00:00 Introduction 00:39 What is Zero Data? 03:19 The various protocols 05:39 Design tradeoffs 08:41 Paying for apps 11:46 Protocol technical differences 13:43 Hyperdraft 16:52 Developer workflow and difficulties 18:04 Implications of not having a server 21:24 Experimenting with collaboration 24:41 What&#39;s next 26:09 Other inspiring projects 27:59 Promoting Hyperdraft and Joybox 29:18 Doorless apps 30:34 Counter-intuitiveness of anonymous funding 33:33 Conclusion </description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><p>I had a great chat with Rafael Kennedy about Zero Data apps, the different protocols, what it's like to build them, tradeoffs compared to traditional designs.</p>
<p><em>Note: At the beginning I had said 'Thanks for inviting me', but due to audio issues it recorded as sort of cold silence.</em></p>
<p><a href="https://runtimepodcast.com/#11">https://runtimepodcast.com/#11</a></p>
<iframe src="https://anchor.fm/rafael-kennedy0/embed/episodes/011---Rosano-on-Zero-Data-Apps-e16sie8" height="102px" width="400px" frameborder="0" scrolling="no"></iframe>
<table>
  <thead>
      <tr>
          <th>time</th>
          <th>section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td>Introduction</td>
      </tr>
      <tr>
          <td>00:39</td>
          <td>What is Zero Data?</td>
      </tr>
      <tr>
          <td>03:19</td>
          <td>The various protocols</td>
      </tr>
      <tr>
          <td>05:39</td>
          <td>Design tradeoffs</td>
      </tr>
      <tr>
          <td>08:41</td>
          <td>Paying for apps</td>
      </tr>
      <tr>
          <td>11:46</td>
          <td>Protocol technical differences</td>
      </tr>
      <tr>
          <td>13:43</td>
          <td>Hyperdraft</td>
      </tr>
      <tr>
          <td>16:52</td>
          <td>Developer workflow and difficulties</td>
      </tr>
      <tr>
          <td>18:04</td>
          <td>Implications of not having a server</td>
      </tr>
      <tr>
          <td>21:24</td>
          <td>Experimenting with collaboration</td>
      </tr>
      <tr>
          <td>24:41</td>
          <td>What's next</td>
      </tr>
      <tr>
          <td>26:09</td>
          <td>Other inspiring projects</td>
      </tr>
      <tr>
          <td>27:59</td>
          <td>Promoting Hyperdraft and Joybox</td>
      </tr>
      <tr>
          <td>29:18</td>
          <td>Doorless apps</td>
      </tr>
      <tr>
          <td>30:34</td>
          <td>Counter-intuitiveness of anonymous funding</td>
      </tr>
      <tr>
          <td>33:33</td>
          <td>Conclusion</td>
      </tr>
  </tbody>
</table></nugget><hr>
<div class="content"><p>I had a great chat with Rafael Kennedy about Zero Data apps, the different protocols, what it's like to build them, tradeoffs compared to traditional designs.</p>
<p><em>Note: At the beginning I had said 'Thanks for inviting me', but due to audio issues it recorded as sort of cold silence.</em></p>
<p><a href="https://runtimepodcast.com/#11">https://runtimepodcast.com/#11</a></p>
<iframe src="https://anchor.fm/rafael-kennedy0/embed/episodes/011---Rosano-on-Zero-Data-Apps-e16sie8" height="102px" width="400px" frameborder="0" scrolling="no"></iframe>
<table>
  <thead>
      <tr>
          <th>time</th>
          <th>section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td>Introduction</td>
      </tr>
      <tr>
          <td>00:39</td>
          <td>What is Zero Data?</td>
      </tr>
      <tr>
          <td>03:19</td>
          <td>The various protocols</td>
      </tr>
      <tr>
          <td>05:39</td>
          <td>Design tradeoffs</td>
      </tr>
      <tr>
          <td>08:41</td>
          <td>Paying for apps</td>
      </tr>
      <tr>
          <td>11:46</td>
          <td>Protocol technical differences</td>
      </tr>
      <tr>
          <td>13:43</td>
          <td>Hyperdraft</td>
      </tr>
      <tr>
          <td>16:52</td>
          <td>Developer workflow and difficulties</td>
      </tr>
      <tr>
          <td>18:04</td>
          <td>Implications of not having a server</td>
      </tr>
      <tr>
          <td>21:24</td>
          <td>Experimenting with collaboration</td>
      </tr>
      <tr>
          <td>24:41</td>
          <td>What's next</td>
      </tr>
      <tr>
          <td>26:09</td>
          <td>Other inspiring projects</td>
      </tr>
      <tr>
          <td>27:59</td>
          <td>Promoting Hyperdraft and Joybox</td>
      </tr>
      <tr>
          <td>29:18</td>
          <td>Doorless apps</td>
      </tr>
      <tr>
          <td>30:34</td>
          <td>Counter-intuitiveness of anonymous funding</td>
      </tr>
      <tr>
          <td>33:33</td>
          <td>Conclusion</td>
      </tr>
  </tbody>
</table>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/event/">event</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 6:50 pm, September 3, 2021" href="/log/2021-09-03-zero-data-on-the-runtime-podcast/"><time datetime="2021-09-03T18:50:22-04:00" data-pagefind-sort="date[datetime]">18h50</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Zero Data Swap #1: Schemas, interoperability, and Cambria</title>
  <link>https://rosano.ca/blog/zero-data-swap-1-schemas-interoperability-and-cambria-july-28-2021/</link>
  <pubDate>Thu, 29 Jul 2021 12:39:21 +0000</pubDate>
  <guid>https://rosano.ca/blog/zero-data-swap-1-schemas-interoperability-and-cambria-july-28-2021/</guid>
  <description>Schemas and the challenges of defining and standardizing them.</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>Schemas and the challenges of defining and standardizing them.</nugget><hr>
<div class="content"><p>Thanks to everyone who attended and made this such a great conversation.</p>
<p>Rosano took more extensive notes but unfortunately lost the data (!), and would encourage participants to summarize their thoughts in the comments.</p>
<hr>
<h1 id="participants">Participants</h1>
<ul>
<li><a href="https://cblgh.org">Alexander Cobleigh</a> works on <a href="https://cabal.chat">cabal</a> peer-to-peer chat (like Slack but no account and no server).</li>
<li><a href="https://www.geoffreylitt.com">Geoffrey Litt</a> works on <a href="https://www.geoffreylitt.com/wildcard">Wildcard</a> for customizing apps without programming, using an excel-like interface; and with <a href="https://www.inkandswitch.com">Ink &amp; Switch</a> on <a href="https://www.inkandswitch.com/cambria.html">Cambria</a> for distributed schema evolution.</li>
<li><a href="https://michielbdejong.com">Michiel de Jong</a> has worked on protocols like <a href="https://solidproject.org">Solid</a>, and <a href="http://remotestorage.io">remoteStorage</a>, as well as the closely related <a href="https://unhosted.org">Unhosted</a> movement. He could be the grandfather of Zero Data, but to feel less old he points to Tim Berners-Lee who wrote a prior post on separating data from apps in 2009.</li>
<li><a href="https://rosano.ca">Rosano</a> works on various Zero Data apps like <a href="https://hyperdraft.rosano.ca">Hyperdraft</a> and <a href="https://launchlet.dev">Launchlet</a>.</li>
<li><a href="https://sebastian.kip.pe">Sebastian Kippe</a> works with <a href="https://5apps.com">5apps</a>, which provides static hosting and remoteStorage accounts; and <a href="https://kosmos.org">Kosmos</a>, which develops decentralized collaboration patterns and software.</li>
</ul>
<hr>
<h1 id="discussion">Discussion</h1>
<blockquote>
<p>Naming is important because it enables ideas to be meme-able.</p></blockquote>
<p>We talked throughout about schemas and the challenges of defining and standardizing them. TLDR: start using Cambria.</p>
<p>How can we increase adoption? What is the selling point for developers? How much easier is it to build apps? Can I use a library to enable my app to become the next Figma for X? What’s the selling point for people using apps? What features does it enable? Rosano points to <a href="https://github.com/0dataapp/small-web-app-ring">doorless apps</a> that can be used with less friction, without creating accounts; collaborative features like being able to share access and collaborate in real time; using an email address as the storage identifier so that people can use pathways to enter a new world.</p>
<p>In the Solid world, <a href="https://noeldemartin.com">Noel de Martin</a>, <a href="https://vincenttunru.com">Vincent Tunru</a>, and <a href="https://twitter.com/otherJackson">Jackson Morgan</a> are making some of the more popular apps, such as <a href="https://noeldemartin.github.io/media-kraken">Media Kraken</a> for tracking movies, <a href="https://notepod.vincenttunru.com">Notepod</a> for taking notes, <a href="https://vincenttunru.gitlab.io/poddit">Poddit</a> for bookmarking, and <a href="https://liqid.chat">Liqid Chat</a> for discussion stored on pods. Some challenges include (“many people with opposing views trying to change the world together”) and (“linked data not being easily interoperable in practice”)—see Michiel’s comment below for more details.</p>
<p>Alexander asks about remoteStorage…</p>
<ul>
<li>How different is the <a href="https://github.com/remotestorage/remotestorage.js">remotestorage.js</a> API from <code>localStorage</code>? More or less the same (“get”, “set”, “delete”), even though it uses IndexedDB. You can use it to add sync to browser-based and offline-capable apps and tools. (Zero Data can even be thought of as a way to separate data from localStorage apps so that people can see their data).</li>
<li>Can you self-host the data? The more modern servers in <a href="https://github.com/untitaker/mysteryshack">Rust</a> and <a href="https://github.com/remotestorage/armadietto">Node.js</a> might not be production-ready. <a href="https://github.com/fkooman/php-remote-storage">php-remote-storage</a> has more testing, production-use, and is easier to get started—although it is an older implementation, the spec hasn’t changed drastically.</li>
</ul>
<p>Geoffrey might have access to research funding for people working on these kinds of issues.</p>
<hr>
<p>Michiel emailed his thoughts on linked data to the group and asked to share it here:</p>
<h3 id="the-promise-of-linked-data-in-the-context-of-personal-data">The promise of linked data in the context of personal data</h3>
<blockquote>
<p>So the promise of linked data breaks down for public data when we use different URIs for the same concepts.</p>
<p>You asked how that relates to personal data, well,</p>
<p>The promise of linked data there would be that if one app stores a todo-list item on your personal data store, then that data would be both self-describing and machine-readable, and the leap of thought that semantic web enthusiasts are sometimes guilty of is to imply that this data would then also be machine-interpretable.</p>
<p>That would work if app todo-list apps use for instance the <a href="https://schema.org/ScheduleAction">https://schema.org/ScheduleAction</a> class to store todo-list items. But in practice, Solid-based todo-list apps all use their own predicates, from their own ontologies, to denote facts about the world, and the fact that it's serialized as RDF where all identifiers are URIs does not make it more interoperable than if you would only used URI identifiers for the data format, and then just use &quot;normal JSON&quot; for the rest of the data format.</p>
<p>A way in which this confusion is sometimes added to, is by using generative UIs that get generated on-the-fly based on the data at hand. If you &quot;view&quot; a piece of data, it renders in a certain way based on a semantic style sheet, and even action buttons appear based on the content of the data you're &quot;viewing&quot;.</p>
<p>This goes as far as when you view the data of a chat conversation on Solid OS, it renders a fully functional chat app inside a div, with that data loaded in. This is nice, but this &quot;data browser&quot; approach is not enough to build actual software. Which is why everybody who looks at Solid for the first time, immediately notices how hard-to-use Solid OS is. It's a very nice conceptual approach to software development, but it's not a silver bullet.</p>
<p>And even for Solid chat, there are now not one but already 3 or 4 incompatible schemas! :(</p>
<p>I even used different schemas in different apps myself. So even for compatibility between apps of the same author, we need Cambria. :)</p>
<p>And self-describing data (in the sense of adding a file format version indicator inside the data) is important, but it doesn't magically make zero data apps interoperable. :)</p></blockquote>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/event/">event</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 9:39 am, July 29, 2021" href="/blog/zero-data-swap-1-schemas-interoperability-and-cambria-july-28-2021/"><time datetime="2021-07-29T09:39:21-03:00" data-pagefind-sort="date[datetime]">09h39</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Thursday, July 29, 2021 09h39</title>
  <link>https://rosano.ca/log/2021-07-29-zero-data-swap-1-schemas-interoperability-and-cambria-july-28-2021/</link>
  <pubDate>Thu, 29 Jul 2021 09:39:21 -0300</pubDate>
  <guid>https://rosano.ca/log/2021-07-29-zero-data-swap-1-schemas-interoperability-and-cambria-july-28-2021/</guid>
  <description>Thanks to everyone who attended and made this such a great conversation.&#xA;Rosano took more extensive notes but unfortunately lost the data (!), and would encourage participants to summarize their thoughts in the comments.&#xA;Participants Alexander Cobleigh works on cabal peer-to-peer chat (like Slack but no account and no server). Geoffrey Litt works on Wildcard for customizing apps without programming, using an excel-like interface; and with Ink &amp;amp; Switch on Cambria for distributed schema evolution. Michiel de Jong has worked on protocols like Solid, and remoteStorage, as well as the closely related Unhosted movement. He could be the grandfather of Zero Data, but to feel less old he points to Tim Berners-Lee who wrote a prior post on separating data from apps in 2009. Rosano works on various Zero Data apps like Hyperdraft and Launchlet. Sebastian Kippe works with 5apps, which provides static hosting and remoteStorage accounts; and Kosmos, which develops decentralized collaboration patterns and software. Discussion Naming is important because it enables ideas to be meme-able.&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><p>Thanks to everyone who attended and made this such a great conversation.</p>
<p>Rosano took more extensive notes but unfortunately lost the data (!), and would encourage participants to summarize their thoughts in the comments.</p>
<hr>
<h1 id="participants">Participants</h1>
<ul>
<li><a href="https://cblgh.org">Alexander Cobleigh</a> works on <a href="https://cabal.chat">cabal</a> peer-to-peer chat (like Slack but no account and no server).</li>
<li><a href="https://www.geoffreylitt.com">Geoffrey Litt</a> works on <a href="https://www.geoffreylitt.com/wildcard">Wildcard</a> for customizing apps without programming, using an excel-like interface; and with <a href="https://www.inkandswitch.com">Ink &amp; Switch</a> on <a href="https://www.inkandswitch.com/cambria.html">Cambria</a> for distributed schema evolution.</li>
<li><a href="https://michielbdejong.com">Michiel de Jong</a> has worked on protocols like <a href="https://solidproject.org">Solid</a>, and <a href="http://remotestorage.io">remoteStorage</a>, as well as the closely related <a href="https://unhosted.org">Unhosted</a> movement. He could be the grandfather of Zero Data, but to feel less old he points to Tim Berners-Lee who wrote a prior post on separating data from apps in 2009.</li>
<li><a href="https://rosano.ca">Rosano</a> works on various Zero Data apps like <a href="https://hyperdraft.rosano.ca">Hyperdraft</a> and <a href="https://launchlet.dev">Launchlet</a>.</li>
<li><a href="https://sebastian.kip.pe">Sebastian Kippe</a> works with <a href="https://5apps.com">5apps</a>, which provides static hosting and remoteStorage accounts; and <a href="https://kosmos.org">Kosmos</a>, which develops decentralized collaboration patterns and software.</li>
</ul>
<hr>
<h1 id="discussion">Discussion</h1>
<blockquote>
<p>Naming is important because it enables ideas to be meme-able.</p></nugget><hr>
<div class="content"><p>Thanks to everyone who attended and made this such a great conversation.</p>
<p>Rosano took more extensive notes but unfortunately lost the data (!), and would encourage participants to summarize their thoughts in the comments.</p>
<hr>
<h1 id="participants">Participants</h1>
<ul>
<li><a href="https://cblgh.org">Alexander Cobleigh</a> works on <a href="https://cabal.chat">cabal</a> peer-to-peer chat (like Slack but no account and no server).</li>
<li><a href="https://www.geoffreylitt.com">Geoffrey Litt</a> works on <a href="https://www.geoffreylitt.com/wildcard">Wildcard</a> for customizing apps without programming, using an excel-like interface; and with <a href="https://www.inkandswitch.com">Ink &amp; Switch</a> on <a href="https://www.inkandswitch.com/cambria.html">Cambria</a> for distributed schema evolution.</li>
<li><a href="https://michielbdejong.com">Michiel de Jong</a> has worked on protocols like <a href="https://solidproject.org">Solid</a>, and <a href="http://remotestorage.io">remoteStorage</a>, as well as the closely related <a href="https://unhosted.org">Unhosted</a> movement. He could be the grandfather of Zero Data, but to feel less old he points to Tim Berners-Lee who wrote a prior post on separating data from apps in 2009.</li>
<li><a href="https://rosano.ca">Rosano</a> works on various Zero Data apps like <a href="https://hyperdraft.rosano.ca">Hyperdraft</a> and <a href="https://launchlet.dev">Launchlet</a>.</li>
<li><a href="https://sebastian.kip.pe">Sebastian Kippe</a> works with <a href="https://5apps.com">5apps</a>, which provides static hosting and remoteStorage accounts; and <a href="https://kosmos.org">Kosmos</a>, which develops decentralized collaboration patterns and software.</li>
</ul>
<hr>
<h1 id="discussion">Discussion</h1>
<blockquote>
<p>Naming is important because it enables ideas to be meme-able.</p></blockquote>
<p>We talked throughout about schemas and the challenges of defining and standardizing them. TLDR: start using Cambria.</p>
<p>How can we increase adoption? What is the selling point for developers? How much easier is it to build apps? Can I use a library to enable my app to become the next Figma for X? What’s the selling point for people using apps? What features does it enable? Rosano points to <a href="https://github.com/0dataapp/small-web-app-ring">doorless apps</a> that can be used with less friction, without creating accounts; collaborative features like being able to share access and collaborate in real time; using an email address as the storage identifier so that people can use pathways to enter a new world.</p>
<p>In the Solid world, <a href="https://noeldemartin.com">Noel de Martin</a>, <a href="https://vincenttunru.com">Vincent Tunru</a>, and <a href="https://twitter.com/otherJackson">Jackson Morgan</a> are making some of the more popular apps, such as <a href="https://noeldemartin.github.io/media-kraken">Media Kraken</a> for tracking movies, <a href="https://notepod.vincenttunru.com">Notepod</a> for taking notes, <a href="https://vincenttunru.gitlab.io/poddit">Poddit</a> for bookmarking, and <a href="https://liqid.chat">Liqid Chat</a> for discussion stored on pods. Some challenges include (“many people with opposing views trying to change the world together”) and (“linked data not being easily interoperable in practice”)—see Michiel’s comment below for more details.</p>
<p>Alexander asks about remoteStorage…</p>
<ul>
<li>How different is the <a href="https://github.com/remotestorage/remotestorage.js">remotestorage.js</a> API from <code>localStorage</code>? More or less the same (“get”, “set”, “delete”), even though it uses IndexedDB. You can use it to add sync to browser-based and offline-capable apps and tools. (Zero Data can even be thought of as a way to separate data from localStorage apps so that people can see their data).</li>
<li>Can you self-host the data? The more modern servers in <a href="https://github.com/untitaker/mysteryshack">Rust</a> and <a href="https://github.com/remotestorage/armadietto">Node.js</a> might not be production-ready. <a href="https://github.com/fkooman/php-remote-storage">php-remote-storage</a> has more testing, production-use, and is easier to get started—although it is an older implementation, the spec hasn’t changed drastically.</li>
</ul>
<p>Geoffrey might have access to research funding for people working on these kinds of issues.</p>
<hr>
<p>Michiel emailed his thoughts on linked data to the group and asked to share it here:</p>
<h3 id="the-promise-of-linked-data-in-the-context-of-personal-data">The promise of linked data in the context of personal data</h3>
<blockquote>
<p>So the promise of linked data breaks down for public data when we use different URIs for the same concepts.</p>
<p>You asked how that relates to personal data, well,</p>
<p>The promise of linked data there would be that if one app stores a todo-list item on your personal data store, then that data would be both self-describing and machine-readable, and the leap of thought that semantic web enthusiasts are sometimes guilty of is to imply that this data would then also be machine-interpretable.</p>
<p>That would work if app todo-list apps use for instance the <a href="https://schema.org/ScheduleAction">https://schema.org/ScheduleAction</a> class to store todo-list items. But in practice, Solid-based todo-list apps all use their own predicates, from their own ontologies, to denote facts about the world, and the fact that it's serialized as RDF where all identifiers are URIs does not make it more interoperable than if you would only used URI identifiers for the data format, and then just use &quot;normal JSON&quot; for the rest of the data format.</p>
<p>A way in which this confusion is sometimes added to, is by using generative UIs that get generated on-the-fly based on the data at hand. If you &quot;view&quot; a piece of data, it renders in a certain way based on a semantic style sheet, and even action buttons appear based on the content of the data you're &quot;viewing&quot;.</p>
<p>This goes as far as when you view the data of a chat conversation on Solid OS, it renders a fully functional chat app inside a div, with that data loaded in. This is nice, but this &quot;data browser&quot; approach is not enough to build actual software. Which is why everybody who looks at Solid for the first time, immediately notices how hard-to-use Solid OS is. It's a very nice conceptual approach to software development, but it's not a silver bullet.</p>
<p>And even for Solid chat, there are now not one but already 3 or 4 incompatible schemas! :(</p>
<p>I even used different schemas in different apps myself. So even for compatibility between apps of the same author, we need Cambria. :)</p>
<p>And self-describing data (in the sense of adding a file format version indicator inside the data) is important, but it doesn't magically make zero data apps interoperable. :)</p></blockquote>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/event/">event</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 9:39 am, July 29, 2021" href="/log/2021-07-29-zero-data-swap-1-schemas-interoperability-and-cambria-july-28-2021/"><time datetime="2021-07-29T09:39:21-03:00" data-pagefind-sort="date[datetime]">09h39</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Building Zero Data Apps &amp; Entrepreneurship</title>
  <link>https://rosano.ca/blog/building-zero-data-apps-entrepreneurship-july-8th-2021/</link>
  <pubDate>Thu, 08 Jul 2021 03:00:00 +0000</pubDate>
  <guid>https://rosano.ca/blog/building-zero-data-apps-entrepreneurship-july-8th-2021/</guid>
  <description>Earning a living building software without holding other people’s data.</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>Earning a living building software without holding other people’s data.</nugget><hr>
<div class="content"><p>A group discussion about earning a living building software without holding other people’s data. Open-source licensing, payment models, and more.</p>
<p><a href="https://talk.fission.codes/t/building-zero-data-apps-entrepreneurship-with-rosano/1999">Building Zero Data Apps &amp; Entrepreneurship with Rosano</a></p>
<p>Blog post:</p>
<p><a href="https://fission.codes/blog/building-zero-data-apps-entrepreneurship-rosano">Building Zero Data Apps &amp; Entrepreneurship with Rosano – Fission</a></p>
<iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/AjGns4Fu1vQ" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<table>
  <thead>
      <tr>
          <th>time</th>
          <th>section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=00m00s">Intro</a></td>
      </tr>
      <tr>
          <td>01:50</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=01m50s">Business models and challenges</a></td>
      </tr>
      <tr>
          <td>04:35</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=04m35s">Steve: Does this make $300,000 a year?</a></td>
      </tr>
      <tr>
          <td>06:09</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=06m09s">Mark: Is this profitable like SaaS?</a></td>
      </tr>
      <tr>
          <td>08:29</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=08m29s">What are we selling?</a></td>
      </tr>
      <tr>
          <td>10:08</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=10m08s">Basti: SaaS sells access to data</a></td>
      </tr>
      <tr>
          <td>10:49</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=10m49s">Boris: What features does SaaS enable?</a></td>
      </tr>
      <tr>
          <td>12:25</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=12m25s">Noel: What happens to data when apps stop working</a></td>
      </tr>
      <tr>
          <td>13:30</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=13m30s">Lorenzo: Educating people about technical possibilities</a></td>
      </tr>
      <tr>
          <td>15:06</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=15m06s">Boris: Movement building</a></td>
      </tr>
      <tr>
          <td>15:53</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=15m53s">Boris: What does open-source mean?</a></td>
      </tr>
      <tr>
          <td>16:53</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=16m53s">How does open-source change the dynamic?</a></td>
      </tr>
      <tr>
          <td>19:11</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=19m11s">Rosano: What I want for people using my apps</a></td>
      </tr>
      <tr>
          <td>20:45</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=20m45s">David: Beyond donations</a></td>
      </tr>
      <tr>
          <td>22:27</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=22m27s">David: Doing feathers.js full-time</a></td>
      </tr>
      <tr>
          <td>24:31</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=24m31s">Basti: Hosting the app versus the data</a></td>
      </tr>
      <tr>
          <td>27:17</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=27m17s">Boris: People paying for convenience of not hosting</a></td>
      </tr>
      <tr>
          <td>28:39</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=28m39s">Basti/Gyuri: The value of apps</a></td>
      </tr>
      <tr>
          <td>29:21</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=29m21s">Sustaining projects less transactionally</a></td>
      </tr>
      <tr>
          <td>32:54</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=32m54s">Lorenzo: Research on digital commons and peer production</a></td>
      </tr>
      <tr>
          <td>35:08</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=35m08s">Boris: The impact of github.com on open-source culture</a></td>
      </tr>
      <tr>
          <td>36:02</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=36m02s">David: Challenges in distributing collective funds</a></td>
      </tr>
      <tr>
          <td>37:53</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=37m53s">David: Culture changes post Microsoft, Google, Facebook</a></td>
      </tr>
      <tr>
          <td>39:55</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=39m55s">Basti: How Kosmos pays contributors with crypto</a></td>
      </tr>
      <tr>
          <td>44:05</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=44m05s">Boris: The non-western world in open-source</a></td>
      </tr>
      <tr>
          <td>45:52</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=45m52s">Boris: Bringing non-engineers into the fold</a></td>
      </tr>
      <tr>
          <td>47:16</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=47m16s">David: Too much governance</a></td>
      </tr>
      <tr>
          <td>50:21</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=50m21s">Boris: Directing dividends to makers automatically</a></td>
      </tr>
      <tr>
          <td>53:29</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=53m29s">Rosano: Community-building</a></td>
      </tr>
      <tr>
          <td>55:13</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=55m13s">Rosano: Looking for collaborators</a></td>
      </tr>
      <tr>
          <td>56:48</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=56m48s">Gyuri: Leverage interoperability to create community</a></td>
      </tr>
      <tr>
          <td>57:57</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=57m57s">Boris: Building movements together</a></td>
      </tr>
      <tr>
          <td>61:18</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=61m18s">Interoperability challenges</a></td>
      </tr>
      <tr>
          <td>62:56</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=62m56s">Lorenzo/Boris/Basti: Matrix recruiting their lead contributors</a></td>
      </tr>
      <tr>
          <td>67:10</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=67m10s">Basti/Boris: Dangers of centralized influence in ecosystems</a></td>
      </tr>
      <tr>
          <td>73:16</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=73m16s">Rosano: Calls to action</a></td>
      </tr>
  </tbody>
</table>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/event/">event</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 0:00 am, July 8, 2021" href="/blog/building-zero-data-apps-entrepreneurship-july-8th-2021/"><time datetime="2021-07-08T00:00:00-03:00" data-pagefind-sort="date[datetime]">00h00</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Thursday, July 8, 2021 00h00</title>
  <link>https://rosano.ca/log/2021-07-08-building-zero-data-apps-entrepreneurship-july-8th-2021/</link>
  <pubDate>Thu, 08 Jul 2021 00:00:00 -0300</pubDate>
  <guid>https://rosano.ca/log/2021-07-08-building-zero-data-apps-entrepreneurship-july-8th-2021/</guid>
  <description>A group discussion about earning a living building software without holding other people’s data. Open-source licensing, payment models, and more.&#xA;Building Zero Data Apps &amp;amp; Entrepreneurship with Rosano&#xA;Blog post:&#xA;Building Zero Data Apps &amp;amp; Entrepreneurship with Rosano – Fission&#xA;time section 00:00 Intro 01:50 Business models and challenges 04:35 Steve: Does this make $300,000 a year? 06:09 Mark: Is this profitable like SaaS? 08:29 What are we selling? 10:08 Basti: SaaS sells access to data 10:49 Boris: What features does SaaS enable? 12:25 Noel: What happens to data when apps stop working 13:30 Lorenzo: Educating people about technical possibilities 15:06 Boris: Movement building 15:53 Boris: What does open-source mean? 16:53 How does open-source change the dynamic? 19:11 Rosano: What I want for people using my apps 20:45 David: Beyond donations 22:27 David: Doing feathers.js full-time 24:31 Basti: Hosting the app versus the data 27:17 Boris: People paying for convenience of not hosting 28:39 Basti/Gyuri: The value of apps 29:21 Sustaining projects less transactionally 32:54 Lorenzo: Research on digital commons and peer production 35:08 Boris: The impact of github.com on open-source culture 36:02 David: Challenges in distributing collective funds 37:53 David: Culture changes post Microsoft, Google, Facebook 39:55 Basti: How Kosmos pays contributors with crypto 44:05 Boris: The non-western world in open-source 45:52 Boris: Bringing non-engineers into the fold 47:16 David: Too much governance 50:21 Boris: Directing dividends to makers automatically 53:29 Rosano: Community-building 55:13 Rosano: Looking for collaborators 56:48 Gyuri: Leverage interoperability to create community 57:57 Boris: Building movements together 61:18 Interoperability challenges 62:56 Lorenzo/Boris/Basti: Matrix recruiting their lead contributors 67:10 Basti/Boris: Dangers of centralized influence in ecosystems 73:16 Rosano: Calls to action </description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><p>A group discussion about earning a living building software without holding other people’s data. Open-source licensing, payment models, and more.</p>
<p><a href="https://talk.fission.codes/t/building-zero-data-apps-entrepreneurship-with-rosano/1999">Building Zero Data Apps &amp; Entrepreneurship with Rosano</a></p>
<p>Blog post:</p>
<p><a href="https://fission.codes/blog/building-zero-data-apps-entrepreneurship-rosano">Building Zero Data Apps &amp; Entrepreneurship with Rosano – Fission</a></p>
<iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/AjGns4Fu1vQ" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<table>
  <thead>
      <tr>
          <th>time</th>
          <th>section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=00m00s">Intro</a></td>
      </tr>
      <tr>
          <td>01:50</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=01m50s">Business models and challenges</a></td>
      </tr>
      <tr>
          <td>04:35</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=04m35s">Steve: Does this make $300,000 a year?</a></td>
      </tr>
      <tr>
          <td>06:09</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=06m09s">Mark: Is this profitable like SaaS?</a></td>
      </tr>
      <tr>
          <td>08:29</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=08m29s">What are we selling?</a></td>
      </tr>
      <tr>
          <td>10:08</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=10m08s">Basti: SaaS sells access to data</a></td>
      </tr>
      <tr>
          <td>10:49</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=10m49s">Boris: What features does SaaS enable?</a></td>
      </tr>
      <tr>
          <td>12:25</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=12m25s">Noel: What happens to data when apps stop working</a></td>
      </tr>
      <tr>
          <td>13:30</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=13m30s">Lorenzo: Educating people about technical possibilities</a></td>
      </tr>
      <tr>
          <td>15:06</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=15m06s">Boris: Movement building</a></td>
      </tr>
      <tr>
          <td>15:53</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=15m53s">Boris: What does open-source mean?</a></td>
      </tr>
      <tr>
          <td>16:53</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=16m53s">How does open-source change the dynamic?</a></td>
      </tr>
      <tr>
          <td>19:11</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=19m11s">Rosano: What I want for people using my apps</a></td>
      </tr>
      <tr>
          <td>20:45</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=20m45s">David: Beyond donations</a></td>
      </tr>
      <tr>
          <td>22:27</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=22m27s">David: Doing feathers.js full-time</a></td>
      </tr>
      <tr>
          <td>24:31</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=24m31s">Basti: Hosting the app versus the data</a></td>
      </tr>
      <tr>
          <td>27:17</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=27m17s">Boris: People paying for convenience of not hosting</a></td>
      </tr>
      <tr>
          <td>28:39</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=28m39s">Basti/Gyuri: The value of apps</a></td>
      </tr>
      <tr>
          <td>29:21</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=29m21s">Sustaining projects less transactionally</a></td>
      </tr>
      <tr>
          <td>32:54</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=32m54s">Lorenzo: Research on digital commons and peer production</a></td>
      </tr>
      <tr>
          <td>35:08</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=35m08s">Boris: The impact of github.com on open-source culture</a></td>
      </tr>
      <tr>
          <td>36:02</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=36m02s">David: Challenges in distributing collective funds</a></td>
      </tr>
      <tr>
          <td>37:53</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=37m53s">David: Culture changes post Microsoft, Google, Facebook</a></td>
      </tr>
      <tr>
          <td>39:55</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=39m55s">Basti: How Kosmos pays contributors with crypto</a></td>
      </tr>
      <tr>
          <td>44:05</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=44m05s">Boris: The non-western world in open-source</a></td>
      </tr>
      <tr>
          <td>45:52</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=45m52s">Boris: Bringing non-engineers into the fold</a></td>
      </tr>
      <tr>
          <td>47:16</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=47m16s">David: Too much governance</a></td>
      </tr>
      <tr>
          <td>50:21</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=50m21s">Boris: Directing dividends to makers automatically</a></td>
      </tr>
      <tr>
          <td>53:29</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=53m29s">Rosano: Community-building</a></td>
      </tr>
      <tr>
          <td>55:13</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=55m13s">Rosano: Looking for collaborators</a></td>
      </tr>
      <tr>
          <td>56:48</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=56m48s">Gyuri: Leverage interoperability to create community</a></td>
      </tr>
      <tr>
          <td>57:57</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=57m57s">Boris: Building movements together</a></td>
      </tr>
      <tr>
          <td>61:18</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=61m18s">Interoperability challenges</a></td>
      </tr>
      <tr>
          <td>62:56</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=62m56s">Lorenzo/Boris/Basti: Matrix recruiting their lead contributors</a></td>
      </tr>
      <tr>
          <td>67:10</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=67m10s">Basti/Boris: Dangers of centralized influence in ecosystems</a></td>
      </tr>
      <tr>
          <td>73:16</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=73m16s">Rosano: Calls to action</a></td>
      </tr>
  </tbody>
</table></nugget><hr>
<div class="content"><p>A group discussion about earning a living building software without holding other people’s data. Open-source licensing, payment models, and more.</p>
<p><a href="https://talk.fission.codes/t/building-zero-data-apps-entrepreneurship-with-rosano/1999">Building Zero Data Apps &amp; Entrepreneurship with Rosano</a></p>
<p>Blog post:</p>
<p><a href="https://fission.codes/blog/building-zero-data-apps-entrepreneurship-rosano">Building Zero Data Apps &amp; Entrepreneurship with Rosano – Fission</a></p>
<iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/AjGns4Fu1vQ" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<table>
  <thead>
      <tr>
          <th>time</th>
          <th>section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=00m00s">Intro</a></td>
      </tr>
      <tr>
          <td>01:50</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=01m50s">Business models and challenges</a></td>
      </tr>
      <tr>
          <td>04:35</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=04m35s">Steve: Does this make $300,000 a year?</a></td>
      </tr>
      <tr>
          <td>06:09</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=06m09s">Mark: Is this profitable like SaaS?</a></td>
      </tr>
      <tr>
          <td>08:29</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=08m29s">What are we selling?</a></td>
      </tr>
      <tr>
          <td>10:08</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=10m08s">Basti: SaaS sells access to data</a></td>
      </tr>
      <tr>
          <td>10:49</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=10m49s">Boris: What features does SaaS enable?</a></td>
      </tr>
      <tr>
          <td>12:25</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=12m25s">Noel: What happens to data when apps stop working</a></td>
      </tr>
      <tr>
          <td>13:30</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=13m30s">Lorenzo: Educating people about technical possibilities</a></td>
      </tr>
      <tr>
          <td>15:06</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=15m06s">Boris: Movement building</a></td>
      </tr>
      <tr>
          <td>15:53</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=15m53s">Boris: What does open-source mean?</a></td>
      </tr>
      <tr>
          <td>16:53</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=16m53s">How does open-source change the dynamic?</a></td>
      </tr>
      <tr>
          <td>19:11</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=19m11s">Rosano: What I want for people using my apps</a></td>
      </tr>
      <tr>
          <td>20:45</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=20m45s">David: Beyond donations</a></td>
      </tr>
      <tr>
          <td>22:27</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=22m27s">David: Doing feathers.js full-time</a></td>
      </tr>
      <tr>
          <td>24:31</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=24m31s">Basti: Hosting the app versus the data</a></td>
      </tr>
      <tr>
          <td>27:17</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=27m17s">Boris: People paying for convenience of not hosting</a></td>
      </tr>
      <tr>
          <td>28:39</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=28m39s">Basti/Gyuri: The value of apps</a></td>
      </tr>
      <tr>
          <td>29:21</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=29m21s">Sustaining projects less transactionally</a></td>
      </tr>
      <tr>
          <td>32:54</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=32m54s">Lorenzo: Research on digital commons and peer production</a></td>
      </tr>
      <tr>
          <td>35:08</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=35m08s">Boris: The impact of github.com on open-source culture</a></td>
      </tr>
      <tr>
          <td>36:02</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=36m02s">David: Challenges in distributing collective funds</a></td>
      </tr>
      <tr>
          <td>37:53</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=37m53s">David: Culture changes post Microsoft, Google, Facebook</a></td>
      </tr>
      <tr>
          <td>39:55</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=39m55s">Basti: How Kosmos pays contributors with crypto</a></td>
      </tr>
      <tr>
          <td>44:05</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=44m05s">Boris: The non-western world in open-source</a></td>
      </tr>
      <tr>
          <td>45:52</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=45m52s">Boris: Bringing non-engineers into the fold</a></td>
      </tr>
      <tr>
          <td>47:16</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=47m16s">David: Too much governance</a></td>
      </tr>
      <tr>
          <td>50:21</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=50m21s">Boris: Directing dividends to makers automatically</a></td>
      </tr>
      <tr>
          <td>53:29</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=53m29s">Rosano: Community-building</a></td>
      </tr>
      <tr>
          <td>55:13</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=55m13s">Rosano: Looking for collaborators</a></td>
      </tr>
      <tr>
          <td>56:48</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=56m48s">Gyuri: Leverage interoperability to create community</a></td>
      </tr>
      <tr>
          <td>57:57</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=57m57s">Boris: Building movements together</a></td>
      </tr>
      <tr>
          <td>61:18</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=61m18s">Interoperability challenges</a></td>
      </tr>
      <tr>
          <td>62:56</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=62m56s">Lorenzo/Boris/Basti: Matrix recruiting their lead contributors</a></td>
      </tr>
      <tr>
          <td>67:10</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=67m10s">Basti/Boris: Dangers of centralized influence in ecosystems</a></td>
      </tr>
      <tr>
          <td>73:16</td>
          <td><a href="https://youtu.be/AjGns4Fu1vQ?start=73m16s">Rosano: Calls to action</a></td>
      </tr>
  </tbody>
</table>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/event/">event</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 0:00 am, July 8, 2021" href="/log/2021-07-08-building-zero-data-apps-entrepreneurship-july-8th-2021/"><time datetime="2021-07-08T00:00:00-03:00" data-pagefind-sort="date[datetime]">00h00</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Easy Indie App—Run your own X in a few clicks</title>
  <link>https://rosano.ca/blog/easy-indie-app-run-your-own-x-in-a-few-clicks/</link>
  <pubDate>Tue, 06 Jul 2021 15:47:39 +0000</pubDate>
  <guid>https://rosano.ca/blog/easy-indie-app-run-your-own-x-in-a-few-clicks/</guid>
  <description>Promoting self-hosting via &#39;one-click install&#39; systems.</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>Promoting self-hosting via 'one-click install' systems.</nugget><hr>
<div class="content"><p>After <a href="https://talk.fission.codes/t/are-there-synonyms-for-self-hosted/1976">brainstorming</a> there now exists a page for <a href="https://easyindie.app">Easy Indie App</a> which promotes the idea of self-hosting via ‘one-click install’ systems like <a href="https://www.cloudron.io">Cloudron</a>, <a href="https://caprover.com">Caprover</a>, and <a href="https://yunohost.org">Yunohost</a>. Any feedback is welcome and <a href="https://github.com/0dataapp/easyindie">the code is open-source</a>.</p>
<p><a href="https://easyindie.app">Easy Indie App</a></p>
</div><p>
	<small>Tagged: <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/easy-indie-app/">Easy Indie App</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 12:47 pm, July 6, 2021" href="/blog/easy-indie-app-run-your-own-x-in-a-few-clicks/"><time datetime="2021-07-06T12:47:39-03:00" data-pagefind-sort="date[datetime]">12h47</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Tuesday, July 6, 2021 12h47</title>
  <link>https://rosano.ca/log/2021-07-06-easy-indie-app-run-your-own-x-in-a-few-clicks/</link>
  <pubDate>Tue, 06 Jul 2021 12:47:39 -0300</pubDate>
  <guid>https://rosano.ca/log/2021-07-06-easy-indie-app-run-your-own-x-in-a-few-clicks/</guid>
  <description>After brainstorming there now exists a page for Easy Indie App which promotes the idea of self-hosting via ‘one-click install’ systems like Cloudron, Caprover, and Yunohost. Any feedback is welcome and the code is open-source.&#xA;Easy Indie App&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><p>After <a href="https://talk.fission.codes/t/are-there-synonyms-for-self-hosted/1976">brainstorming</a> there now exists a page for <a href="https://easyindie.app">Easy Indie App</a> which promotes the idea of self-hosting via ‘one-click install’ systems like <a href="https://www.cloudron.io">Cloudron</a>, <a href="https://caprover.com">Caprover</a>, and <a href="https://yunohost.org">Yunohost</a>. Any feedback is welcome and <a href="https://github.com/0dataapp/easyindie">the code is open-source</a>.</p>
<p><a href="https://easyindie.app">Easy Indie App</a></p></nugget><hr>
<div class="content"><p>After <a href="https://talk.fission.codes/t/are-there-synonyms-for-self-hosted/1976">brainstorming</a> there now exists a page for <a href="https://easyindie.app">Easy Indie App</a> which promotes the idea of self-hosting via ‘one-click install’ systems like <a href="https://www.cloudron.io">Cloudron</a>, <a href="https://caprover.com">Caprover</a>, and <a href="https://yunohost.org">Yunohost</a>. Any feedback is welcome and <a href="https://github.com/0dataapp/easyindie">the code is open-source</a>.</p>
<p><a href="https://easyindie.app">Easy Indie App</a></p>
</div><p>
	<small>Tagged: <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/easy-indie-app/">Easy Indie App</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 12:47 pm, July 6, 2021" href="/log/2021-07-06-easy-indie-app-run-your-own-x-in-a-few-clicks/"><time datetime="2021-07-06T12:47:39-03:00" data-pagefind-sort="date[datetime]">12h47</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Joybox — A pinboard for media</title>
  <link>https://rosano.ca/blog/joybox-a-pinboard-for-media/</link>
  <pubDate>Tue, 20 Apr 2021 13:37:00 +0000</pubDate>
  <guid>https://rosano.ca/blog/joybox-a-pinboard-for-media/</guid>
  <description>Enjoy video or audio links from different platforms and keep a record of what you’ve played.</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>Enjoy video or audio links from different platforms and keep a record of what you’ve played.</nugget><hr>
<div class="content"><p>Publishing my 5th web app today. You can use it to collect and enjoy video or audio links from different platforms and keep a record of what you’ve played.</p>
<p><a href="https://joybox.rosano.ca">Joybox</a></p>
<iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/44qznsSKBFU" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<table>
  <thead>
      <tr>
          <th>time</th>
          <th>description</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td><a href="https://vimeo.com/538683332#t=00m00s">Intro</a></td>
      </tr>
      <tr>
          <td>00:24</td>
          <td><a href="https://vimeo.com/538683332#t=00m24s">Collection</a></td>
      </tr>
      <tr>
          <td>00:54</td>
          <td><a href="https://vimeo.com/538683332#t=00m54s">Add with one click</a></td>
      </tr>
      <tr>
          <td>02:59</td>
          <td><a href="https://vimeo.com/538683332#t=02m59s">Add by pasting links</a></td>
      </tr>
      <tr>
          <td>03:31</td>
          <td><a href="https://vimeo.com/538683332#t=03m31s">Receive a playlist</a></td>
      </tr>
      <tr>
          <td>04:39</td>
          <td><a href="https://vimeo.com/538683332#t=04m39s">Send a playlist</a></td>
      </tr>
  </tbody>
</table>
<p>You can also share playlists using the URL hash: <a href="https://go.rosano.ca/joybox-sample-playlist">https://go.rosano.ca/joybox-sample-playlist</a></p>
<p><a href="https://github.com/joyboxapp/joybox">GitHub - rosano/joybox: A pinboard for audiovisual media.</a></p>
</div><p>
	<small>Tagged: <a href="/log/tag/joybox/">Joybox</a>, <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 10:37 am, April 20, 2021" href="/blog/joybox-a-pinboard-for-media/"><time datetime="2021-04-20T10:37:00-03:00" data-pagefind-sort="date[datetime]">10h37</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Tuesday, April 20, 2021 10h37</title>
  <link>https://rosano.ca/log/2021-04-20-joybox-a-pinboard-for-media/</link>
  <pubDate>Tue, 20 Apr 2021 10:37:00 -0300</pubDate>
  <guid>https://rosano.ca/log/2021-04-20-joybox-a-pinboard-for-media/</guid>
  <description>Publishing my 5th web app today. You can use it to collect and enjoy video or audio links from different platforms and keep a record of what you’ve played.&#xA;Joybox&#xA;time description 00:00 Intro 00:24 Collection 00:54 Add with one click 02:59 Add by pasting links 03:31 Receive a playlist 04:39 Send a playlist You can also share playlists using the URL hash: https://go.rosano.ca/joybox-sample-playlist&#xA;GitHub - rosano/joybox: A pinboard for audiovisual media.&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><p>Publishing my 5th web app today. You can use it to collect and enjoy video or audio links from different platforms and keep a record of what you’ve played.</p>
<p><a href="https://joybox.rosano.ca">Joybox</a></p>
<iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/44qznsSKBFU" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<table>
  <thead>
      <tr>
          <th>time</th>
          <th>description</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td><a href="https://vimeo.com/538683332#t=00m00s">Intro</a></td>
      </tr>
      <tr>
          <td>00:24</td>
          <td><a href="https://vimeo.com/538683332#t=00m24s">Collection</a></td>
      </tr>
      <tr>
          <td>00:54</td>
          <td><a href="https://vimeo.com/538683332#t=00m54s">Add with one click</a></td>
      </tr>
      <tr>
          <td>02:59</td>
          <td><a href="https://vimeo.com/538683332#t=02m59s">Add by pasting links</a></td>
      </tr>
      <tr>
          <td>03:31</td>
          <td><a href="https://vimeo.com/538683332#t=03m31s">Receive a playlist</a></td>
      </tr>
      <tr>
          <td>04:39</td>
          <td><a href="https://vimeo.com/538683332#t=04m39s">Send a playlist</a></td>
      </tr>
  </tbody>
</table>
<p>You can also share playlists using the URL hash: <a href="https://go.rosano.ca/joybox-sample-playlist">https://go.rosano.ca/joybox-sample-playlist</a></p>
<p><a href="https://github.com/joyboxapp/joybox">GitHub - rosano/joybox: A pinboard for audiovisual media.</a></p></nugget><hr>
<div class="content"><p>Publishing my 5th web app today. You can use it to collect and enjoy video or audio links from different platforms and keep a record of what you’ve played.</p>
<p><a href="https://joybox.rosano.ca">Joybox</a></p>
<iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/44qznsSKBFU" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<table>
  <thead>
      <tr>
          <th>time</th>
          <th>description</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td><a href="https://vimeo.com/538683332#t=00m00s">Intro</a></td>
      </tr>
      <tr>
          <td>00:24</td>
          <td><a href="https://vimeo.com/538683332#t=00m24s">Collection</a></td>
      </tr>
      <tr>
          <td>00:54</td>
          <td><a href="https://vimeo.com/538683332#t=00m54s">Add with one click</a></td>
      </tr>
      <tr>
          <td>02:59</td>
          <td><a href="https://vimeo.com/538683332#t=02m59s">Add by pasting links</a></td>
      </tr>
      <tr>
          <td>03:31</td>
          <td><a href="https://vimeo.com/538683332#t=03m31s">Receive a playlist</a></td>
      </tr>
      <tr>
          <td>04:39</td>
          <td><a href="https://vimeo.com/538683332#t=04m39s">Send a playlist</a></td>
      </tr>
  </tbody>
</table>
<p>You can also share playlists using the URL hash: <a href="https://go.rosano.ca/joybox-sample-playlist">https://go.rosano.ca/joybox-sample-playlist</a></p>
<p><a href="https://github.com/joyboxapp/joybox">GitHub - rosano/joybox: A pinboard for audiovisual media.</a></p>
</div><p>
	<small>Tagged: <a href="/log/tag/joybox/">Joybox</a>, <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 10:37 am, April 20, 2021" href="/log/2021-04-20-joybox-a-pinboard-for-media/"><time datetime="2021-04-20T10:37:00-03:00" data-pagefind-sort="date[datetime]">10h37</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Doorless App Ring—Apps that work without accounts</title>
  <link>https://rosano.ca/blog/doorless-app-ring-apps-that-work-without-accounts/</link>
  <pubDate>Mon, 29 Mar 2021 03:00:00 +0000</pubDate>
  <guid>https://rosano.ca/blog/doorless-app-ring-apps-that-work-without-accounts/</guid>
  <description>I&#39;m starting a webring for web apps to support &#39;no-login&#39; projects. It can be like the ones featured on https://tinytools.directory, or even server-side information resources like https://searchmysite.net or https://0data.app. It just means &#39;someone can show up and start using it immediately&#39;.&#xA;Anyone working on projects like that is encouraged to join by making pull request.&#xA;Doorless App Ring&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">


<div class="content"><p>I'm starting a webring for web apps to support 'no-login' projects. It can be like the ones featured on <a href="https://tinytools.directory">https://tinytools.directory</a>, or even server-side information resources like <a href="https://searchmysite.net">https://searchmysite.net</a> or <a href="https://0data.app">https://0data.app</a>. It just means 'someone can show up and start using it immediately'.</p>
<p>Anyone working on projects like that is encouraged to <a href="https://github.com/0dataapp/small-web-app-ring#add-your-projects-to-the-ring">join by making pull request</a>.</p>
<p><a href="https://ring.0data.app">Doorless App Ring</a></p>
</div><p>
	<small>Tagged: <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 0:00 am, March 29, 2021" href="/blog/doorless-app-ring-apps-that-work-without-accounts/"><time datetime="2021-03-29T00:00:00-03:00" data-pagefind-sort="date[datetime]">00h00</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Monday, March 29, 2021 00h00</title>
  <link>https://rosano.ca/log/2021-03-29-doorless-app-ring-apps-that-work-without-accounts/</link>
  <pubDate>Mon, 29 Mar 2021 00:00:00 -0300</pubDate>
  <guid>https://rosano.ca/log/2021-03-29-doorless-app-ring-apps-that-work-without-accounts/</guid>
  <description>I&#39;m starting a webring for web apps to support &#39;no-login&#39; projects. It can be like the ones featured on https://tinytools.directory, or even server-side information resources like https://searchmysite.net or https://0data.app. It just means &#39;someone can show up and start using it immediately&#39;.&#xA;Anyone working on projects like that is encouraged to join by making pull request.&#xA;Doorless App Ring&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">


<div class="content"><p>I'm starting a webring for web apps to support 'no-login' projects. It can be like the ones featured on <a href="https://tinytools.directory">https://tinytools.directory</a>, or even server-side information resources like <a href="https://searchmysite.net">https://searchmysite.net</a> or <a href="https://0data.app">https://0data.app</a>. It just means 'someone can show up and start using it immediately'.</p>
<p>Anyone working on projects like that is encouraged to <a href="https://github.com/0dataapp/small-web-app-ring#add-your-projects-to-the-ring">join by making pull request</a>.</p>
<p><a href="https://ring.0data.app">Doorless App Ring</a></p>
</div><p>
	<small>Tagged: <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 0:00 am, March 29, 2021" href="/log/2021-03-29-doorless-app-ring-apps-that-work-without-accounts/"><time datetime="2021-03-29T00:00:00-03:00" data-pagefind-sort="date[datetime]">00h00</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Emoji Log – Personal tracker</title>
  <link>https://rosano.ca/blog/emoji-log-personal-tracker/</link>
  <pubDate>Thu, 25 Mar 2021 15:37:00 +0000</pubDate>
  <guid>https://rosano.ca/blog/emoji-log-personal-tracker/</guid>
  <description>My new app for measuring progress. You can use it to write journals, observe habits, track statistics.&#xA;Emoji Log&#xA;GitHub - rosano/emojilog: Measure your progress&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">


<div class="content"><p>My new app for measuring progress. You can use it to write journals, observe habits, track statistics.</p>
<iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/cH2QV3yzR2E" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<p><a href="https://emojilog.rosano.ca">Emoji Log</a></p>
<p><a href="https://github.com/rosano/emojilog">GitHub - rosano/emojilog: Measure your progress</a></p>
</div><p>
	<small>Tagged: <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/emoji-log/">Emoji Log</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 12:37 pm, March 25, 2021" href="/blog/emoji-log-personal-tracker/"><time datetime="2021-03-25T12:37:00-03:00" data-pagefind-sort="date[datetime]">12h37</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Thursday, March 25, 2021 12h37</title>
  <link>https://rosano.ca/log/2021-03-25-emoji-log-personal-tracker/</link>
  <pubDate>Thu, 25 Mar 2021 12:37:00 -0300</pubDate>
  <guid>https://rosano.ca/log/2021-03-25-emoji-log-personal-tracker/</guid>
  <description>My new app for measuring progress. You can use it to write journals, observe habits, track statistics.&#xA;Emoji Log&#xA;GitHub - rosano/emojilog: Measure your progress&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">


<div class="content"><p>My new app for measuring progress. You can use it to write journals, observe habits, track statistics.</p>
<iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/cH2QV3yzR2E" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<p><a href="https://emojilog.rosano.ca">Emoji Log</a></p>
<p><a href="https://github.com/rosano/emojilog">GitHub - rosano/emojilog: Measure your progress</a></p>
</div><p>
	<small>Tagged: <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/emoji-log/">Emoji Log</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 12:37 pm, March 25, 2021" href="/log/2021-03-25-emoji-log-personal-tracker/"><time datetime="2021-03-25T12:37:00-03:00" data-pagefind-sort="date[datetime]">12h37</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Chatting with Fission – January 14th, 2021</title>
  <link>https://rosano.ca/blog/chatting-with-fission-january-14th-2021/</link>
  <pubDate>Sat, 16 Jan 2021 03:00:00 +0000</pubDate>
  <guid>https://rosano.ca/blog/chatting-with-fission-january-14th-2021/</guid>
  <description> Zero Data Apps, remoteStorage, and HyperDraft, an interview with Rosano&#xA;Blog post:&#xA;Discussion with Rosano: Zero Data Apps, remote storage, and Funding Buttons – Fission&#xA;time section 00:00 Intro 03:17 0data: What is it? 09:22 0data: How to get involved? 09:46 Native to web chasm 12:35 0data: Adding an app 14:57 remoteStorage 16:53 Kommit: flashcards app 19:44 Languages and computers 21:43 Hyperdraft: note-taking app 25:43 Digital gardens 27:19 Digital gardens and feeds 29:14 Hyperdraft: pure text experiece 29:46 Files vs no files 31:06 Fission: Storing keys on multiple devices vs single device 33:03 Fission: Account recovery 34:30 Decentralized funding 40:11 Asking for funding indirectly vs directly 41:19 Developer-centric vs user-centric 41:49 Connecting developers with users 42:40 Funding youtubers vs apps 44:25 App metrics 48:57 Building an open payment standard 51:55 remoteStorage: business model 52:51 Fission: adopting the remoteStorage spec 53:53 Fission: decentralizing the stack 57:24 SOLID 58:30 Unhosted 60:44 Comfort level of people with 0data paradigms 63:30 The app equivalent of sourdough / home-grown apps 66:24 Direct customization of existing apps 70:07 Bootstrapping new paradigms 71:50 Popularizing customization 74:06 Making technology invisible 75:01 Make a garden </description>
  <content:encoded><![CDATA[
  <div class="post">


<div class="content"><iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/VZhtjYs7_hs" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<p><a href="https://talk.fission.codes/t/zero-data-apps-remotestorage-and-hyperdraft-an-interview-with-rosano/1341">Zero Data Apps, remoteStorage, and HyperDraft, an interview with Rosano</a></p>
<p>Blog post:</p>
<p><a href="https://fission.codes/blog/rosano-zero-data-apps-remote-storage/">Discussion with Rosano: Zero Data Apps, remote storage, and Funding Buttons – Fission</a></p>
<table>
  <thead>
      <tr>
          <th>time</th>
          <th>section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td><a href="https://vimeo.com/500673127#t=00m00s">Intro</a></td>
      </tr>
      <tr>
          <td>03:17</td>
          <td><a href="https://vimeo.com/500673127#t=03m17s">0data: What is it?</a></td>
      </tr>
      <tr>
          <td>09:22</td>
          <td><a href="https://vimeo.com/500673127#t=09m22s">0data: How to get involved?</a></td>
      </tr>
      <tr>
          <td>09:46</td>
          <td><a href="https://vimeo.com/500673127#t=09m46s">Native to web chasm</a></td>
      </tr>
      <tr>
          <td>12:35</td>
          <td><a href="https://vimeo.com/500673127#t=12m35s">0data: Adding an app</a></td>
      </tr>
      <tr>
          <td>14:57</td>
          <td><a href="https://vimeo.com/500673127#t=14m57s">remoteStorage</a></td>
      </tr>
      <tr>
          <td>16:53</td>
          <td><a href="https://vimeo.com/500673127#t=16m53s">Kommit: flashcards app</a></td>
      </tr>
      <tr>
          <td>19:44</td>
          <td><a href="https://vimeo.com/500673127#t=19m44s">Languages and computers</a></td>
      </tr>
      <tr>
          <td>21:43</td>
          <td><a href="https://vimeo.com/500673127#t=21m43s">Hyperdraft: note-taking app</a></td>
      </tr>
      <tr>
          <td>25:43</td>
          <td><a href="https://vimeo.com/500673127#t=25m43s">Digital gardens</a></td>
      </tr>
      <tr>
          <td>27:19</td>
          <td><a href="https://vimeo.com/500673127#t=27m19s">Digital gardens and feeds</a></td>
      </tr>
      <tr>
          <td>29:14</td>
          <td><a href="https://vimeo.com/500673127#t=29m14s">Hyperdraft: pure text experiece</a></td>
      </tr>
      <tr>
          <td>29:46</td>
          <td><a href="https://vimeo.com/500673127#t=29m46s">Files vs no files</a></td>
      </tr>
      <tr>
          <td>31:06</td>
          <td><a href="https://vimeo.com/500673127#t=31m06s">Fission: Storing keys on multiple devices vs single device</a></td>
      </tr>
      <tr>
          <td>33:03</td>
          <td><a href="https://vimeo.com/500673127#t=33m03s">Fission: Account recovery</a></td>
      </tr>
      <tr>
          <td>34:30</td>
          <td><a href="https://vimeo.com/500673127#t=34m30s">Decentralized funding</a></td>
      </tr>
      <tr>
          <td>40:11</td>
          <td><a href="https://vimeo.com/500673127#t=40m11s">Asking for funding indirectly vs directly</a></td>
      </tr>
      <tr>
          <td>41:19</td>
          <td><a href="https://vimeo.com/500673127#t=41m19s">Developer-centric vs user-centric</a></td>
      </tr>
      <tr>
          <td>41:49</td>
          <td><a href="https://vimeo.com/500673127#t=41m49s">Connecting developers with users</a></td>
      </tr>
      <tr>
          <td>42:40</td>
          <td><a href="https://vimeo.com/500673127#t=42m40s">Funding youtubers vs apps</a></td>
      </tr>
      <tr>
          <td>44:25</td>
          <td><a href="https://vimeo.com/500673127#t=44m25s">App metrics</a></td>
      </tr>
      <tr>
          <td>48:57</td>
          <td><a href="https://vimeo.com/500673127#t=48m57s">Building an open payment standard</a></td>
      </tr>
      <tr>
          <td>51:55</td>
          <td><a href="https://vimeo.com/500673127#t=51m55s">remoteStorage: business model</a></td>
      </tr>
      <tr>
          <td>52:51</td>
          <td><a href="https://vimeo.com/500673127#t=52m51s">Fission: adopting the remoteStorage spec</a></td>
      </tr>
      <tr>
          <td>53:53</td>
          <td><a href="https://vimeo.com/500673127#t=53m53s">Fission: decentralizing the stack</a></td>
      </tr>
      <tr>
          <td>57:24</td>
          <td><a href="https://vimeo.com/500673127#t=57m24s">SOLID</a></td>
      </tr>
      <tr>
          <td>58:30</td>
          <td><a href="https://vimeo.com/500673127#t=58m30s">Unhosted</a></td>
      </tr>
      <tr>
          <td>60:44</td>
          <td><a href="https://vimeo.com/500673127#t=60m44s">Comfort level of people with 0data paradigms</a></td>
      </tr>
      <tr>
          <td>63:30</td>
          <td><a href="https://vimeo.com/500673127#t=63m30s">The app equivalent of sourdough / home-grown apps</a></td>
      </tr>
      <tr>
          <td>66:24</td>
          <td><a href="https://vimeo.com/500673127#t=66m24s">Direct customization of existing apps</a></td>
      </tr>
      <tr>
          <td>70:07</td>
          <td><a href="https://vimeo.com/500673127#t=70m07s">Bootstrapping new paradigms</a></td>
      </tr>
      <tr>
          <td>71:50</td>
          <td><a href="https://vimeo.com/500673127#t=71m50s">Popularizing customization</a></td>
      </tr>
      <tr>
          <td>74:06</td>
          <td><a href="https://vimeo.com/500673127#t=74m06s">Making technology invisible</a></td>
      </tr>
      <tr>
          <td>75:01</td>
          <td><a href="https://vimeo.com/500673127#t=75m01s">Make a garden</a></td>
      </tr>
  </tbody>
</table>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/apps/">apps</a>, <a href="/log/tag/event/">event</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 0:00 am, January 16, 2021" href="/blog/chatting-with-fission-january-14th-2021/"><time datetime="2021-01-16T00:00:00-03:00" data-pagefind-sort="date[datetime]">00h00</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Saturday, January 16, 2021 00h00</title>
  <link>https://rosano.ca/log/2021-01-16-chatting-with-fission-january-14th-2021/</link>
  <pubDate>Sat, 16 Jan 2021 00:00:00 -0300</pubDate>
  <guid>https://rosano.ca/log/2021-01-16-chatting-with-fission-january-14th-2021/</guid>
  <description> Zero Data Apps, remoteStorage, and HyperDraft, an interview with Rosano&#xA;Blog post:&#xA;Discussion with Rosano: Zero Data Apps, remote storage, and Funding Buttons – Fission&#xA;time section 00:00 Intro 03:17 0data: What is it? 09:22 0data: How to get involved? 09:46 Native to web chasm 12:35 0data: Adding an app 14:57 remoteStorage 16:53 Kommit: flashcards app 19:44 Languages and computers 21:43 Hyperdraft: note-taking app 25:43 Digital gardens 27:19 Digital gardens and feeds 29:14 Hyperdraft: pure text experiece 29:46 Files vs no files 31:06 Fission: Storing keys on multiple devices vs single device 33:03 Fission: Account recovery 34:30 Decentralized funding 40:11 Asking for funding indirectly vs directly 41:19 Developer-centric vs user-centric 41:49 Connecting developers with users 42:40 Funding youtubers vs apps 44:25 App metrics 48:57 Building an open payment standard 51:55 remoteStorage: business model 52:51 Fission: adopting the remoteStorage spec 53:53 Fission: decentralizing the stack 57:24 SOLID 58:30 Unhosted 60:44 Comfort level of people with 0data paradigms 63:30 The app equivalent of sourdough / home-grown apps 66:24 Direct customization of existing apps 70:07 Bootstrapping new paradigms 71:50 Popularizing customization 74:06 Making technology invisible 75:01 Make a garden </description>
  <content:encoded><![CDATA[
  <div class="post">


<div class="content"><iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/VZhtjYs7_hs" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<p><a href="https://talk.fission.codes/t/zero-data-apps-remotestorage-and-hyperdraft-an-interview-with-rosano/1341">Zero Data Apps, remoteStorage, and HyperDraft, an interview with Rosano</a></p>
<p>Blog post:</p>
<p><a href="https://fission.codes/blog/rosano-zero-data-apps-remote-storage/">Discussion with Rosano: Zero Data Apps, remote storage, and Funding Buttons – Fission</a></p>
<table>
  <thead>
      <tr>
          <th>time</th>
          <th>section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td><a href="https://vimeo.com/500673127#t=00m00s">Intro</a></td>
      </tr>
      <tr>
          <td>03:17</td>
          <td><a href="https://vimeo.com/500673127#t=03m17s">0data: What is it?</a></td>
      </tr>
      <tr>
          <td>09:22</td>
          <td><a href="https://vimeo.com/500673127#t=09m22s">0data: How to get involved?</a></td>
      </tr>
      <tr>
          <td>09:46</td>
          <td><a href="https://vimeo.com/500673127#t=09m46s">Native to web chasm</a></td>
      </tr>
      <tr>
          <td>12:35</td>
          <td><a href="https://vimeo.com/500673127#t=12m35s">0data: Adding an app</a></td>
      </tr>
      <tr>
          <td>14:57</td>
          <td><a href="https://vimeo.com/500673127#t=14m57s">remoteStorage</a></td>
      </tr>
      <tr>
          <td>16:53</td>
          <td><a href="https://vimeo.com/500673127#t=16m53s">Kommit: flashcards app</a></td>
      </tr>
      <tr>
          <td>19:44</td>
          <td><a href="https://vimeo.com/500673127#t=19m44s">Languages and computers</a></td>
      </tr>
      <tr>
          <td>21:43</td>
          <td><a href="https://vimeo.com/500673127#t=21m43s">Hyperdraft: note-taking app</a></td>
      </tr>
      <tr>
          <td>25:43</td>
          <td><a href="https://vimeo.com/500673127#t=25m43s">Digital gardens</a></td>
      </tr>
      <tr>
          <td>27:19</td>
          <td><a href="https://vimeo.com/500673127#t=27m19s">Digital gardens and feeds</a></td>
      </tr>
      <tr>
          <td>29:14</td>
          <td><a href="https://vimeo.com/500673127#t=29m14s">Hyperdraft: pure text experiece</a></td>
      </tr>
      <tr>
          <td>29:46</td>
          <td><a href="https://vimeo.com/500673127#t=29m46s">Files vs no files</a></td>
      </tr>
      <tr>
          <td>31:06</td>
          <td><a href="https://vimeo.com/500673127#t=31m06s">Fission: Storing keys on multiple devices vs single device</a></td>
      </tr>
      <tr>
          <td>33:03</td>
          <td><a href="https://vimeo.com/500673127#t=33m03s">Fission: Account recovery</a></td>
      </tr>
      <tr>
          <td>34:30</td>
          <td><a href="https://vimeo.com/500673127#t=34m30s">Decentralized funding</a></td>
      </tr>
      <tr>
          <td>40:11</td>
          <td><a href="https://vimeo.com/500673127#t=40m11s">Asking for funding indirectly vs directly</a></td>
      </tr>
      <tr>
          <td>41:19</td>
          <td><a href="https://vimeo.com/500673127#t=41m19s">Developer-centric vs user-centric</a></td>
      </tr>
      <tr>
          <td>41:49</td>
          <td><a href="https://vimeo.com/500673127#t=41m49s">Connecting developers with users</a></td>
      </tr>
      <tr>
          <td>42:40</td>
          <td><a href="https://vimeo.com/500673127#t=42m40s">Funding youtubers vs apps</a></td>
      </tr>
      <tr>
          <td>44:25</td>
          <td><a href="https://vimeo.com/500673127#t=44m25s">App metrics</a></td>
      </tr>
      <tr>
          <td>48:57</td>
          <td><a href="https://vimeo.com/500673127#t=48m57s">Building an open payment standard</a></td>
      </tr>
      <tr>
          <td>51:55</td>
          <td><a href="https://vimeo.com/500673127#t=51m55s">remoteStorage: business model</a></td>
      </tr>
      <tr>
          <td>52:51</td>
          <td><a href="https://vimeo.com/500673127#t=52m51s">Fission: adopting the remoteStorage spec</a></td>
      </tr>
      <tr>
          <td>53:53</td>
          <td><a href="https://vimeo.com/500673127#t=53m53s">Fission: decentralizing the stack</a></td>
      </tr>
      <tr>
          <td>57:24</td>
          <td><a href="https://vimeo.com/500673127#t=57m24s">SOLID</a></td>
      </tr>
      <tr>
          <td>58:30</td>
          <td><a href="https://vimeo.com/500673127#t=58m30s">Unhosted</a></td>
      </tr>
      <tr>
          <td>60:44</td>
          <td><a href="https://vimeo.com/500673127#t=60m44s">Comfort level of people with 0data paradigms</a></td>
      </tr>
      <tr>
          <td>63:30</td>
          <td><a href="https://vimeo.com/500673127#t=63m30s">The app equivalent of sourdough / home-grown apps</a></td>
      </tr>
      <tr>
          <td>66:24</td>
          <td><a href="https://vimeo.com/500673127#t=66m24s">Direct customization of existing apps</a></td>
      </tr>
      <tr>
          <td>70:07</td>
          <td><a href="https://vimeo.com/500673127#t=70m07s">Bootstrapping new paradigms</a></td>
      </tr>
      <tr>
          <td>71:50</td>
          <td><a href="https://vimeo.com/500673127#t=71m50s">Popularizing customization</a></td>
      </tr>
      <tr>
          <td>74:06</td>
          <td><a href="https://vimeo.com/500673127#t=74m06s">Making technology invisible</a></td>
      </tr>
      <tr>
          <td>75:01</td>
          <td><a href="https://vimeo.com/500673127#t=75m01s">Make a garden</a></td>
      </tr>
  </tbody>
</table>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/apps/">apps</a>, <a href="/log/tag/event/">event</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 0:00 am, January 16, 2021" href="/log/2021-01-16-chatting-with-fission-january-14th-2021/"><time datetime="2021-01-16T00:00:00-03:00" data-pagefind-sort="date[datetime]">00h00</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>The Fund Button</title>
  <link>https://rosano.ca/blog/the-fund-button/</link>
  <pubDate>Thu, 14 Jan 2021 09:00:00 +0000</pubDate>
  <guid>https://rosano.ca/blog/the-fund-button/</guid>
  <description>A follow up to Chatting with Fission – January 14th, 2021&#xA;time section 00:00 Intro 00:27 App: Before the document limit 01:37 App: After the document limit 02:10 Form: Intro 02:34 Form: Project 03:03 Form: Identity 04:10 Form: Tier 05:27 Form: Summary 05:42 Form: Payment Processor 07:03 Payment: Metadata 09:57 Payment: Confirmation 12:41 App: After checkout 13:59 App: Entering the confirmation code 15:23 App: Expiry 16:59 Server: Request 17:40 Server: Response 18:25 App: Unlock 19:10 0data 19:29 Conclusion </description>
  <content:encoded><![CDATA[
  <div class="post">


<div class="content"><p>A follow up to <a href="https://utopia.rosano.ca/chatting-with-fission-january-14th-2021/">Chatting with Fission – January 14th, 2021</a></p>
<iframe title="vimeo-player" src="https://player.vimeo.com/video/500628067?h=212fda8cc0" width="300" height="200" frameborder="0" referrerpolicy="strict-origin-when-cross-origin" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share"   allowfullscreen></iframe>
<table>
  <thead>
      <tr>
          <th>time</th>
          <th>section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td><a href="https://vimeo.com/500628067#t=00m00s">Intro</a></td>
      </tr>
      <tr>
          <td>00:27</td>
          <td><a href="https://vimeo.com/500628067#t=00m27s">App: Before the document limit </a></td>
      </tr>
      <tr>
          <td>01:37</td>
          <td><a href="https://vimeo.com/500628067#t=01m37s">App: After the document limit</a></td>
      </tr>
      <tr>
          <td>02:10</td>
          <td><a href="https://vimeo.com/500628067#t=02m10s">Form: Intro</a></td>
      </tr>
      <tr>
          <td>02:34</td>
          <td><a href="https://vimeo.com/500628067#t=02m34s">Form: Project</a></td>
      </tr>
      <tr>
          <td>03:03</td>
          <td><a href="https://vimeo.com/500628067#t=03m03s">Form: Identity</a></td>
      </tr>
      <tr>
          <td>04:10</td>
          <td><a href="https://vimeo.com/500628067#t=04m10s">Form: Tier</a></td>
      </tr>
      <tr>
          <td>05:27</td>
          <td><a href="https://vimeo.com/500628067#t=05m27s">Form: Summary</a></td>
      </tr>
      <tr>
          <td>05:42</td>
          <td><a href="https://vimeo.com/500628067#t=05m42s">Form: Payment Processor</a></td>
      </tr>
      <tr>
          <td>07:03</td>
          <td><a href="https://vimeo.com/500628067#t=07m03s">Payment: Metadata</a></td>
      </tr>
      <tr>
          <td>09:57</td>
          <td><a href="https://vimeo.com/500628067#t=09m57s">Payment: Confirmation</a></td>
      </tr>
      <tr>
          <td>12:41</td>
          <td><a href="https://vimeo.com/500628067#t=12m41s">App: After checkout</a></td>
      </tr>
      <tr>
          <td>13:59</td>
          <td><a href="https://vimeo.com/500628067#t=13m59s">App: Entering the confirmation code</a></td>
      </tr>
      <tr>
          <td>15:23</td>
          <td><a href="https://vimeo.com/500628067#t=15m23s">App: Expiry</a></td>
      </tr>
      <tr>
          <td>16:59</td>
          <td><a href="https://vimeo.com/500628067#t=16m59s">Server: Request</a></td>
      </tr>
      <tr>
          <td>17:40</td>
          <td><a href="https://vimeo.com/500628067#t=17m40s">Server: Response</a></td>
      </tr>
      <tr>
          <td>18:25</td>
          <td><a href="https://vimeo.com/500628067#t=18m25s">App: Unlock</a></td>
      </tr>
      <tr>
          <td>19:10</td>
          <td><a href="https://vimeo.com/500628067#t=19m10s">0data</a></td>
      </tr>
      <tr>
          <td>19:29</td>
          <td><a href="https://vimeo.com/500628067#t=19m29s">Conclusion</a></td>
      </tr>
  </tbody>
</table>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 6:00 am, January 14, 2021" href="/blog/the-fund-button/"><time datetime="2021-01-14T06:00:00-03:00" data-pagefind-sort="date[datetime]">06h00</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Thursday, January 14, 2021 06h00</title>
  <link>https://rosano.ca/log/2021-01-14-the-fund-button/</link>
  <pubDate>Thu, 14 Jan 2021 06:00:00 -0300</pubDate>
  <guid>https://rosano.ca/log/2021-01-14-the-fund-button/</guid>
  <description>A follow up to Chatting with Fission – January 14th, 2021&#xA;time section 00:00 Intro 00:27 App: Before the document limit 01:37 App: After the document limit 02:10 Form: Intro 02:34 Form: Project 03:03 Form: Identity 04:10 Form: Tier 05:27 Form: Summary 05:42 Form: Payment Processor 07:03 Payment: Metadata 09:57 Payment: Confirmation 12:41 App: After checkout 13:59 App: Entering the confirmation code 15:23 App: Expiry 16:59 Server: Request 17:40 Server: Response 18:25 App: Unlock 19:10 0data 19:29 Conclusion </description>
  <content:encoded><![CDATA[
  <div class="post">


<div class="content"><p>A follow up to <a href="https://utopia.rosano.ca/chatting-with-fission-january-14th-2021/">Chatting with Fission – January 14th, 2021</a></p>
<iframe title="vimeo-player" src="https://player.vimeo.com/video/500628067?h=212fda8cc0" width="300" height="200" frameborder="0" referrerpolicy="strict-origin-when-cross-origin" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share"   allowfullscreen></iframe>
<table>
  <thead>
      <tr>
          <th>time</th>
          <th>section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00:00</td>
          <td><a href="https://vimeo.com/500628067#t=00m00s">Intro</a></td>
      </tr>
      <tr>
          <td>00:27</td>
          <td><a href="https://vimeo.com/500628067#t=00m27s">App: Before the document limit </a></td>
      </tr>
      <tr>
          <td>01:37</td>
          <td><a href="https://vimeo.com/500628067#t=01m37s">App: After the document limit</a></td>
      </tr>
      <tr>
          <td>02:10</td>
          <td><a href="https://vimeo.com/500628067#t=02m10s">Form: Intro</a></td>
      </tr>
      <tr>
          <td>02:34</td>
          <td><a href="https://vimeo.com/500628067#t=02m34s">Form: Project</a></td>
      </tr>
      <tr>
          <td>03:03</td>
          <td><a href="https://vimeo.com/500628067#t=03m03s">Form: Identity</a></td>
      </tr>
      <tr>
          <td>04:10</td>
          <td><a href="https://vimeo.com/500628067#t=04m10s">Form: Tier</a></td>
      </tr>
      <tr>
          <td>05:27</td>
          <td><a href="https://vimeo.com/500628067#t=05m27s">Form: Summary</a></td>
      </tr>
      <tr>
          <td>05:42</td>
          <td><a href="https://vimeo.com/500628067#t=05m42s">Form: Payment Processor</a></td>
      </tr>
      <tr>
          <td>07:03</td>
          <td><a href="https://vimeo.com/500628067#t=07m03s">Payment: Metadata</a></td>
      </tr>
      <tr>
          <td>09:57</td>
          <td><a href="https://vimeo.com/500628067#t=09m57s">Payment: Confirmation</a></td>
      </tr>
      <tr>
          <td>12:41</td>
          <td><a href="https://vimeo.com/500628067#t=12m41s">App: After checkout</a></td>
      </tr>
      <tr>
          <td>13:59</td>
          <td><a href="https://vimeo.com/500628067#t=13m59s">App: Entering the confirmation code</a></td>
      </tr>
      <tr>
          <td>15:23</td>
          <td><a href="https://vimeo.com/500628067#t=15m23s">App: Expiry</a></td>
      </tr>
      <tr>
          <td>16:59</td>
          <td><a href="https://vimeo.com/500628067#t=16m59s">Server: Request</a></td>
      </tr>
      <tr>
          <td>17:40</td>
          <td><a href="https://vimeo.com/500628067#t=17m40s">Server: Response</a></td>
      </tr>
      <tr>
          <td>18:25</td>
          <td><a href="https://vimeo.com/500628067#t=18m25s">App: Unlock</a></td>
      </tr>
      <tr>
          <td>19:10</td>
          <td><a href="https://vimeo.com/500628067#t=19m10s">0data</a></td>
      </tr>
      <tr>
          <td>19:29</td>
          <td><a href="https://vimeo.com/500628067#t=19m29s">Conclusion</a></td>
      </tr>
  </tbody>
</table>
</div><p>
	<small>Tagged: <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 6:00 am, January 14, 2021" href="/log/2021-01-14-the-fund-button/"><time datetime="2021-01-14T06:00:00-03:00" data-pagefind-sort="date[datetime]">06h00</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Zero Data App / 0data.app</title>
  <link>https://rosano.ca/blog/zero-data-app-0data-app/</link>
  <pubDate>Tue, 08 Dec 2020 14:41:00 +0000</pubDate>
  <guid>https://rosano.ca/blog/zero-data-app-0data-app/</guid>
  <description>After brainstorming there now exists a page for Zero Data App which aims to have a non-technical explanation of ‘unhosted’ as well as a user-friendly app directory that includes apps from the RS wiki, the Solid project, and the unhosted project. Any feedback is welcome and the source is on GitHub.&#xA;Zero Data App&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">


<div class="content"><p>After <a href="https://community.remotestorage.io/t/non-technical-names-for-unhosted/648">brainstorming</a> there now exists a page for <a href="https://0data.app">Zero Data App</a> which aims to have a non-technical explanation of ‘unhosted’ as well as a user-friendly app directory that includes apps from the RS wiki, the Solid project, and the unhosted project. Any feedback is welcome and the source is on <a href="https://github.com/0dataapp/0data">GitHub</a>.</p>
<p><a href="https://0data.app">Zero Data App</a></p>
</div><p>
	<small>Tagged: <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 11:41 am, December 8, 2020" href="/blog/zero-data-app-0data-app/"><time datetime="2020-12-08T11:41:00-03:00" data-pagefind-sort="date[datetime]">11h41</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Tuesday, December 8, 2020 11h41</title>
  <link>https://rosano.ca/log/2020-12-08-zero-data-app-0data-app/</link>
  <pubDate>Tue, 08 Dec 2020 11:41:00 -0300</pubDate>
  <guid>https://rosano.ca/log/2020-12-08-zero-data-app-0data-app/</guid>
  <description>After brainstorming there now exists a page for Zero Data App which aims to have a non-technical explanation of ‘unhosted’ as well as a user-friendly app directory that includes apps from the RS wiki, the Solid project, and the unhosted project. Any feedback is welcome and the source is on GitHub.&#xA;Zero Data App&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">


<div class="content"><p>After <a href="https://community.remotestorage.io/t/non-technical-names-for-unhosted/648">brainstorming</a> there now exists a page for <a href="https://0data.app">Zero Data App</a> which aims to have a non-technical explanation of ‘unhosted’ as well as a user-friendly app directory that includes apps from the RS wiki, the Solid project, and the unhosted project. Any feedback is welcome and the source is on <a href="https://github.com/0dataapp/0data">GitHub</a>.</p>
<p><a href="https://0data.app">Zero Data App</a></p>
</div><p>
	<small>Tagged: <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 11:41 am, December 8, 2020" href="/log/2020-12-08-zero-data-app-0data-app/"><time datetime="2020-12-08T11:41:00-03:00" data-pagefind-sort="date[datetime]">11h41</time></a>

		
		<span>from <a href="/log/place/brasilia/">Brasilia</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Kommit — Flashcards / Space-Repetition System</title>
  <link>https://rosano.ca/blog/kommit-flashcards-space-repetition-system/</link>
  <pubDate>Wed, 24 Jun 2020 16:15:00 +0000</pubDate>
  <guid>https://rosano.ca/blog/kommit-flashcards-space-repetition-system/</guid>
  <description>Releasing a flashcards app called Kommit integrated with remoteStorage – hear with text-to-speech, record audio, works offline and on mobile. You might use it for language learning or anything else you want to memorize. Feedback is welcome!&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">


<div class="content"><p>Releasing a flashcards app called <a href="https://kommit.rosano.ca"><strong>Kommit</strong></a> integrated with remoteStorage – hear with text-to-speech, record audio, works offline and on mobile. You might use it for language learning or anything else you want to memorize. Feedback is welcome!</p>
<iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/IdtyfBA7Ke0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

</div><p>
	<small>Tagged: <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/kommit/">Kommit</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 1:15 pm, June 24, 2020" href="/blog/kommit-flashcards-space-repetition-system/"><time datetime="2020-06-24T13:15:00-03:00" data-pagefind-sort="date[datetime]">13h15</time></a>

		
		<span>from <a href="/log/place/campinas/">Campinas</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Wednesday, June 24, 2020 13h15</title>
  <link>https://rosano.ca/log/2020-06-24-kommit-flashcards-space-repetition-system/</link>
  <pubDate>Wed, 24 Jun 2020 13:15:00 -0300</pubDate>
  <guid>https://rosano.ca/log/2020-06-24-kommit-flashcards-space-repetition-system/</guid>
  <description>Releasing a flashcards app called Kommit integrated with remoteStorage – hear with text-to-speech, record audio, works offline and on mobile. You might use it for language learning or anything else you want to memorize. Feedback is welcome!&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">


<div class="content"><p>Releasing a flashcards app called <a href="https://kommit.rosano.ca"><strong>Kommit</strong></a> integrated with remoteStorage – hear with text-to-speech, record audio, works offline and on mobile. You might use it for language learning or anything else you want to memorize. Feedback is welcome!</p>
<iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/IdtyfBA7Ke0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

</div><p>
	<small>Tagged: <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/kommit/">Kommit</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 1:15 pm, June 24, 2020" href="/log/2020-06-24-kommit-flashcards-space-repetition-system/"><time datetime="2020-06-24T13:15:00-03:00" data-pagefind-sort="date[datetime]">13h15</time></a>

		
		<span>from <a href="/log/place/campinas/">Campinas</a> / </span>

		<span><a href="/log/country/brazil/">Brazil</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Launchlet—Customize any website with JavaScript or CSS</title>
  <link>https://rosano.ca/blog/launchlet-customize-any-website-with-javascript-or-css/</link>
  <pubDate>Wed, 09 Oct 2019 06:11:00 +0000</pubDate>
  <guid>https://rosano.ca/blog/launchlet-customize-any-website-with-javascript-or-css/</guid>
  <description>I&#39;m super excited to share Launchlet https://launchlet.dev - my first project that integrates with remoteStorage. It&#39;s a javascript/css launcher that you can run as a bookmarklet, browser extension, or module in your own project.&#xA;There is a compose interface for managing your Recipes and it uses remotestorage.js + a custom storage widget. It&#39;s so nice to be able to work offline, sync between different devices or prod/dev environments. I wish remoteStorage was more well-known and adopted everywhere because it makes the whole app and dev experience so much simpler.&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">


<div class="content"><p>I'm super excited to share <strong>Launchlet</strong> <a href="https://launchlet.dev">https://launchlet.dev</a> - my first project that integrates with remoteStorage. It's a javascript/css launcher that you can run as a bookmarklet, browser extension, or module in your own project.</p>
<p>There is a compose interface for managing your <em>Recipes</em> and it uses remotestorage.js + a custom storage widget. It's so nice to be able to work offline, sync between different devices or prod/dev environments. I wish remoteStorage was more well-known and adopted everywhere because it makes the whole app and dev experience so much simpler.</p>
<p>Any feedback is welcome. Let's make more of these apps!!</p>
<p><a href="https://launchlet.dev">Launchlet</a></p>
<iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/4pH6tS7x_nA" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

</div><p>
	<small>Tagged: <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/launchlet/">Launchlet</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 2:11 am, October 9, 2019" href="/blog/launchlet-customize-any-website-with-javascript-or-css/"><time datetime="2019-10-09T02:11:00-04:00" data-pagefind-sort="date[datetime]">02h11</time></a>

		
		<span>from <a href="/log/place/montreal/">Montreal</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Wednesday, October 9, 2019 02h11</title>
  <link>https://rosano.ca/log/2019-10-09-launchlet-customize-any-website-with-javascript-or-css/</link>
  <pubDate>Wed, 09 Oct 2019 02:11:00 -0400</pubDate>
  <guid>https://rosano.ca/log/2019-10-09-launchlet-customize-any-website-with-javascript-or-css/</guid>
  <description>I&#39;m super excited to share Launchlet https://launchlet.dev - my first project that integrates with remoteStorage. It&#39;s a javascript/css launcher that you can run as a bookmarklet, browser extension, or module in your own project.&#xA;There is a compose interface for managing your Recipes and it uses remotestorage.js + a custom storage widget. It&#39;s so nice to be able to work offline, sync between different devices or prod/dev environments. I wish remoteStorage was more well-known and adopted everywhere because it makes the whole app and dev experience so much simpler.&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">


<div class="content"><p>I'm super excited to share <strong>Launchlet</strong> <a href="https://launchlet.dev">https://launchlet.dev</a> - my first project that integrates with remoteStorage. It's a javascript/css launcher that you can run as a bookmarklet, browser extension, or module in your own project.</p>
<p>There is a compose interface for managing your <em>Recipes</em> and it uses remotestorage.js + a custom storage widget. It's so nice to be able to work offline, sync between different devices or prod/dev environments. I wish remoteStorage was more well-known and adopted everywhere because it makes the whole app and dev experience so much simpler.</p>
<p>Any feedback is welcome. Let's make more of these apps!!</p>
<p><a href="https://launchlet.dev">Launchlet</a></p>
<iframe width="300" height="250" src="https://www.youtube-nocookie.com/embed/4pH6tS7x_nA" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

</div><p>
	<small>Tagged: <a href="/log/tag/debut/">debut</a>, <a href="/log/tag/launchlet/">Launchlet</a>, <a href="/log/tag/zero-data/">zero data</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 2:11 am, October 9, 2019" href="/log/2019-10-09-launchlet-customize-any-website-with-javascript-or-css/"><time datetime="2019-10-09T02:11:00-04:00" data-pagefind-sort="date[datetime]">02h11</time></a>

		
		<span>from <a href="/log/place/montreal/">Montreal</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item>



</channel>

</rss>
