<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Fission</title>
    <description>The latest articles on DEV Community by Fission (@fission).</description>
    <link>https://dev.to/fission</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F717%2Fb6318fc7-34b8-429d-8691-c42477edab8d.png</url>
      <title>DEV Community: Fission</title>
      <link>https://dev.to/fission</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fission"/>
    <language>en</language>
    <item>
      <title>Headless Ghost and Fission</title>
      <dc:creator>agentofuser</dc:creator>
      <pubDate>Wed, 24 Feb 2021 16:08:56 +0000</pubDate>
      <link>https://dev.to/fission/headless-ghost-and-fission-3b57</link>
      <guid>https://dev.to/fission/headless-ghost-and-fission-3b57</guid>
      <description>&lt;p&gt;We're exploring a number of "Headless" combinations at Fission. The first one is with the Ghost Content Management System (CMS). We use Ghost to run our blog and want to start using it to integrate with and power our home page, so it's a great place for us to start.&lt;/p&gt;

&lt;p&gt;The basic pattern of "Headless" is that your authors and editors login to a server based system with all the authoring and editing tools they are used to, but then the "head" – the usual template system and user facing website – isn't used. Instead, a modern front end framework is custom designed and built to take the published content of the CMS and host it. This fits great with the Fission app publishing platform.&lt;/p&gt;

&lt;p&gt;After we've got the basics of a headless publishing workflow setup with Fission, we'll move on to using our Webnative framework to add personalization at the edge, but that will come in later posts.&lt;/p&gt;

&lt;p&gt;Aside from Ghost, we're also looking at &lt;a href="https://talk.fission.codes/t/headless-wordpress/1448"&gt;Headless WordPress&lt;/a&gt; and &lt;a href="https://talk.fission.codes/t/headless-drupal/1513"&gt;Headless Drupal&lt;/a&gt;. Let us know in &lt;a href="https://talk.fission.codes/"&gt;the forum&lt;/a&gt; if you've got other Headless projects that you'd like to combine with Fission!&lt;/p&gt;

&lt;h1&gt;
  
  
  Build a Next.js Blog powered by Headless Ghost and Fission
&lt;/h1&gt;

&lt;p&gt;You want to have a modern static website/app built with React, deployed to a CDN (even a &lt;a href="https://ipfs.io/"&gt;distributed&lt;/a&gt; one), and loading super fast for visitors and search engines.&lt;/p&gt;

&lt;p&gt;You want to avoid the headaches and costs of managing and securing servers for traditional content management systems (CMSs) like Ghost and WordPress.&lt;/p&gt;

&lt;p&gt;That's what static site generators (like Next.js, Gatsby, and &lt;a href="https://staticgen.com/"&gt;others&lt;/a&gt;) are for, right?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;But,&lt;/em&gt; you &lt;em&gt;don't&lt;/em&gt; want to have to &lt;strong&gt;retrain&lt;/strong&gt; every writer and content creator on your team to use &lt;em&gt;Markdown&lt;/em&gt; and &lt;em&gt;Git&lt;/em&gt;. Ghost and WordPress are familiar, pretty, and usable. They have been iterated over years to be approachable by almost anyone.&lt;/p&gt;

&lt;p&gt;What do you do? That's right you cut the CMS' head off 🔪&lt;/p&gt;

&lt;p&gt;More politely, you &lt;em&gt;decouple&lt;/em&gt; the interface used for &lt;em&gt;authoring&lt;/em&gt; content from the systems used for &lt;em&gt;rendering&lt;/em&gt; and &lt;em&gt;distributing&lt;/em&gt; it.&lt;/p&gt;

&lt;p&gt;With CMS and website decoupled, you can protect the CMS inside an intranet without exposing it to outside danger, or even use it as a desktop word processor running only on your machine, as I'll show you in this tutorial.&lt;/p&gt;

&lt;p&gt;To make things easier we've made a template Next.js website that connects to Ghost and pulls content from it. Follow along and try it out. Feedback welcome :)&lt;/p&gt;




&lt;p&gt;This starter template is based on the official &lt;a href="https://github.com/vercel/next.js/tree/canary/examples/blog-starter-typescript"&gt;blog-starter-typescript&lt;/a&gt; from &lt;a href="https://nextjs.org"&gt;Next.js&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We changed it only enough to make it possible to fetch and publish blog posts from the Ghost CMS, while keeping the ability to write Markdown files in the git repo. It's a purely additive change.&lt;/p&gt;

&lt;p&gt;There's also a GitHub Action to build and publish the static website to Fission. It works automatically on pushes to the git repo, and can be triggered manually after updating the content on Ghost. (The default Ghost webhook isn't customizable to trigger a GitHub Action, but that can be added as a plugin.)&lt;/p&gt;

&lt;p&gt;The Markdown blog posts are stored in &lt;code&gt;/_posts&lt;/code&gt; as files with frontmatter support. Adding a new Markdown file in there will create a new blog post.&lt;/p&gt;

&lt;p&gt;The Ghost blog posts are fetched using Ghost's Content API library.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨  Getting Started
&lt;/h2&gt;

&lt;p&gt;Let's start by making this starter yours:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Use this template&lt;/strong&gt; at the &lt;a href="https://github.com/fission-suite/nextjs-blog-starter-typescript-ghost"&gt;starter page on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That will make a copy of the starter into a new repo under your account with a fresh git history. You can pick a different name for it too; in that case replace &lt;code&gt;nextjs-blog-starter-typescript-ghost&lt;/code&gt; with your chosen name below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clone the repo (replace with your own URL):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  git clone git@github.com:fission-suite/nextjs-blog-starter-typescript-ghost.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;cd into the repo:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  cd nextjs-blog-starter-typescript-ghost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Install dependencies
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  yarn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All command-line instructions and directory paths from now on assume the current directory is the root of the cloned repo.&lt;/p&gt;

&lt;h3&gt;
  
  
  👻  Setting Up Ghost
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Public or Local Ghost?
&lt;/h4&gt;

&lt;p&gt;Running a local Ghost instance is good for testing. But also, if you have no need for a Ghost instance running all the time out on the internet (for example, if you are the only author) you can do this for your production website, using Ghost locally for its nice interface if you prefer that to editing Markdown files. No servers to secure, no bills to pay.&lt;/p&gt;

&lt;h4&gt;
  
  
  Setting Up Local Ghost
&lt;/h4&gt;

&lt;p&gt;If you have a Ghost instance running already somewhere, move on to the next step. If you don't, you can set one up on your own machine with Docker.&lt;/p&gt;

&lt;p&gt;To create a local Ghost instance with Docker, run the following at the root of your repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn ghost-local-create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ghost data will be stored at &lt;code&gt;./ghost&lt;/code&gt;, which is in &lt;code&gt;.gitignore&lt;/code&gt; by default. In a &lt;strong&gt;private&lt;/strong&gt; repo you can choose to commit that too and have your Ghost content versioned and available whenever you need it.&lt;/p&gt;

&lt;p&gt;There are other scripts like &lt;code&gt;ghost-local-start&lt;/code&gt;, &lt;code&gt;ghost-local-stop&lt;/code&gt;, and &lt;code&gt;ghost-local-remove&lt;/code&gt; which you might find handy to manage the Docker container.&lt;/p&gt;

&lt;p&gt;After Docker downloads and sets up Ghost, it will be accessible on your browser at &lt;a href="http://localhost:3001"&gt;http://localhost:3001&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Next you need to create an admin account on your newly-created Ghost. To do that, visit the admin interface at &lt;a href="http://localhost:3001/ghost"&gt;http://localhost:3001/ghost&lt;/a&gt; and follow the wizard.&lt;/p&gt;

&lt;h4&gt;
  
  
  Exposing the Ghost Content API
&lt;/h4&gt;

&lt;p&gt;I'll use &lt;code&gt;http://localhost:3001&lt;/code&gt; for the examples, but you can replace that with your Ghost URL if you have an instance already running somewhere else.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the admin interface at &lt;a href="http://localhost:3001/ghost"&gt;http://localhost:3001/ghost&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;On the left-hand sidebar, click on "Integrations"&lt;/li&gt;
&lt;li&gt;On the Integrations screen, click on &lt;a href="http://localhost:3001/ghost/#/settings/integrations/new/"&gt;+Add custom integration&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Give it a name, like &lt;code&gt;nextjs&lt;/code&gt;, and click "Create" then "Save"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now the important part:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the same screen, you'll find two fields we need: &lt;strong&gt;Content API Key&lt;/strong&gt; and &lt;strong&gt;API URL&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Copy those into a new &lt;code&gt;.env.local&lt;/code&gt; file, like this:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# .env.local&lt;/span&gt;
&lt;span class="c"&gt;# replace values with your own&lt;/span&gt;
&lt;span class="nv"&gt;GHOST_API_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://localhost:3001
&lt;span class="nv"&gt;GHOST_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2a9356e4a5214c883ba886e58e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⚠️ &lt;em&gt;This file is ignored by git by default. &lt;strong&gt;Don't&lt;/strong&gt; commit &lt;code&gt;env.local&lt;/code&gt; to git unless you know what you're doing.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Alright! Ghost part's done.&lt;/p&gt;

&lt;h3&gt;
  
  
  💻  Running Next.js Locally
&lt;/h3&gt;

&lt;p&gt;Next.js is the missing static website &lt;em&gt;head&lt;/em&gt; to our *head*less Ghost. Let's stitch them together! This should be enough:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your blog should be up and running at &lt;a href="http://localhost:3000"&gt;http://localhost:3000&lt;/a&gt;! &lt;em&gt;(If anything unexpected happens, please post an &lt;a href="https://github.com/fission-suite/nextjs-blog-starter-typescript-ghost/issues/new"&gt;issue&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now you can change the Next.js website code and the content on Ghost, and iterate quickly on them in the browser.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: live-reload works for Next.js code and Markdown files; to see changes to Ghost content you need to refresh the page.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🌐  Deploying to Fission
&lt;/h3&gt;

&lt;p&gt;When you're ready to publish, the first step is exporting your website to a set of static files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That should create a directory at &lt;code&gt;./out&lt;/code&gt; with all your ready-to-publish files.&lt;/p&gt;

&lt;p&gt;Next we use the Fission CLI to send that out onto the internets.&lt;/p&gt;

&lt;h4&gt;
  
  
  🔰  Fission CLI Install and Sign Up
&lt;/h4&gt;

&lt;p&gt;To install the Fission command-line interface using brew, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew tap fission-suite/fission
brew &lt;span class="nb"&gt;install &lt;/span&gt;fission-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more ways of installing the Fission CLI, please check the &lt;a href="https://guide.fission.codes/developers/installation"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you don't have a Fission account, you can create one without leaving the command-line by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fission setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  🌱  Register New Fission App
&lt;/h4&gt;

&lt;p&gt;You can pick a subdomain or let Fission choose a random one for you.&lt;/p&gt;

&lt;p&gt;To host the Next.js website at a random subdomain on &lt;code&gt;.fission.app&lt;/code&gt;, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fission app register
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To choose your own subdomain, use the &lt;code&gt;--name&lt;/code&gt; option like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fission app register &lt;span class="nt"&gt;--name&lt;/span&gt; my-beautiful-subdomain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That will create a &lt;code&gt;fission.yaml&lt;/code&gt; file. &lt;strong&gt;This one is safe to commit to git&lt;/strong&gt;, and you &lt;em&gt;should&lt;/em&gt; do that if you want to use the GitHub Action to build and deploy the website for you. Make sure there is a line saying &lt;code&gt;build: ./out&lt;/code&gt; in it. That's the directory where Next.js puts the exported website files.&lt;/p&gt;

&lt;h4&gt;
  
  
  🚀   Aand... Launch!
&lt;/h4&gt;

&lt;p&gt;One last step:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fission app publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you're done! Your website should be up at a random URL returned to you by the Fission CLI or at &lt;code&gt;my-beautiful-subdomain.fission.app&lt;/code&gt; if you used the &lt;code&gt;--name&lt;/code&gt; option. Yay!&lt;/p&gt;

&lt;h4&gt;
  
  
  🤖  (Semi-)Automatic Deployment with the GitHub Action
&lt;/h4&gt;

&lt;p&gt;If you don't want to run the build locally and deploy to Fission every time you make a change to the Next.js code or Markdown files (who does?), this starter comes with &lt;strong&gt;a GitHub Action that automates that for you&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To get it working you need to set up 3 secrets for your repo. To do that, go to the &lt;strong&gt;"Settings" &amp;gt; "Secrets"&lt;/strong&gt; screen on your GitHub repo, then create a &lt;strong&gt;"New repository secret"&lt;/strong&gt; for each of these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GHOST_API_URL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GHOST_API_KEY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FISSION_KEY&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The values for the &lt;code&gt;GHOST_API_&lt;/code&gt; fields are the same ones you used for the &lt;code&gt;.env.local&lt;/code&gt; file above.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;FISSION_KEY&lt;/code&gt; was created and stored locally for you by the Fission CLI when you set it up. Here's how you get it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat ~/.config/fission/key/machine_id.ed25519 | base64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With all 3 secrets set up, you can trigger the &lt;code&gt;deploy&lt;/code&gt; action manually by clicking on &lt;strong&gt;"Run workflow" &amp;gt; "Run workflow"&lt;/strong&gt;, or see it in action after your next &lt;code&gt;git push&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;Note:&lt;/p&gt;

&lt;p&gt;⚠️  To fetch the content from Ghost, &lt;strong&gt;the GitHub Action must be able to access the URL&lt;/strong&gt; entered in the &lt;code&gt;GHOST_API_URL&lt;/code&gt; secret.&lt;/p&gt;

&lt;p&gt;If you are running a local Ghost instance on your machine, &lt;code&gt;http://localhost:3001&lt;/code&gt; won't be visible to the outside.&lt;/p&gt;

&lt;p&gt;A simple way of exposing your local Ghost instance to a publicly-accessible URL is by using one of the &lt;a href="https://github.com/anderspitman/awesome-tunneling"&gt;open source alternatives to ngrok&lt;/a&gt; or &lt;a href="https://ngrok.com/"&gt;ngrok&lt;/a&gt; itself.&lt;/p&gt;

&lt;p&gt;With ngrok you do something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ngrok http 3001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⚠️  This is great for testing, but &lt;strong&gt;not secure&lt;/strong&gt;. Look into using &lt;code&gt;https&lt;/code&gt; if you're going to rely on this and don't want your Ghost API key and data to leak.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Why &lt;strong&gt;"(semi-)&lt;/strong&gt;" automatic then? 🤔&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Glad you asked. The GitHub Action can detect when you push to the GitHub repo because &lt;strong&gt;there's a built-in "on push" event&lt;/strong&gt; that can be used to &lt;strong&gt;trigger&lt;/strong&gt; it.&lt;/p&gt;

&lt;p&gt;But when you create a new post on Ghost or update an existing one, GitHub needs a way of finding out about it so it can run the deploy action. There's no &lt;code&gt;git push&lt;/code&gt; event happening, so the trigger is usually a &lt;a href="https://docs.github.com/en/rest/reference/actions#create-a-workflow-dispatch-event"&gt;&lt;strong&gt;webhook&lt;/strong&gt;&lt;/a&gt; (i.e. a POST request you send to a GitHub API URL.)&lt;/p&gt;

&lt;p&gt;🙂  Luckily, Ghost comes with the built-in ability to send webhooks when content changes happen.&lt;/p&gt;

&lt;p&gt;🙃  &lt;strong&gt;*Un*luckily&lt;/strong&gt;, though, Ghost doesn't let you customize the payload that goes in the webhook requests it sends, and GitHub &lt;strong&gt;requires&lt;/strong&gt; a certain field to be present telling it which &lt;code&gt;ref&lt;/code&gt; (usually a branch) you are referring to.&lt;/p&gt;

&lt;p&gt;Bottom line: &lt;strong&gt;after changing things &lt;em&gt;on Ghost&lt;/em&gt;, you need to trigger a build manually&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can do that via the GitHub interface ("Actions" &amp;gt; "Continuous Deployment" &amp;gt; "Run workflow" &amp;gt; "Run workflow"), or by &lt;strong&gt;running the handy script&lt;/strong&gt; we added to this starter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GITHUB_USER=your-username GITHUB_REPO=your-repo GITHUB_AUTH_TOKEN=your-auth-token trigger-github-deploy-action.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's how you can get an &lt;a href="https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token"&gt;auth token&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This situation is definitely not ideal, and can be solved with Ghost plugins, but we wanted to stick to the basic install.&lt;/p&gt;

&lt;h2&gt;
  
  
  🙏  Show your support
&lt;/h2&gt;

&lt;p&gt;Please &lt;a href="https://github.com/fission-suite/nextjs-blog-starter-typescript-ghost"&gt;give a  ⭐️&lt;/a&gt;  if you liked this project! We appreciate it :)&lt;/p&gt;

</description>
      <category>headless</category>
      <category>ghost</category>
      <category>nextjs</category>
      <category>fission</category>
    </item>
    <item>
      <title>Fission Fragments May 27th Weekly Links</title>
      <dc:creator>Boris Mann</dc:creator>
      <pubDate>Wed, 27 May 2020 23:35:39 +0000</pubDate>
      <link>https://dev.to/fission/fission-fragments-may-27th-weekly-links-1moi</link>
      <guid>https://dev.to/fission/fission-fragments-may-27th-weekly-links-1moi</guid>
      <description>&lt;p&gt;&lt;em&gt;Fission Fragments is our weekly links roundup, that has been on hiatus ... for a while. We're going to get back to weekly, usually Wednesdays, and will be &lt;a href="https://talk.fission.codes/t/fission-fragments-weekly-links-for-may-27th/649"&gt;posting in the forum&lt;/a&gt;. You can also &lt;a href="https://5d04d668.sibforms.com/serve/MUIEAD0fi3_BJE-4eieeuK6_0_XZaOPiu1_nfh56jvP1pV9uWy9OLxWLrHtjC148osZF2vcRb0XAymSdzFxhVD7XgvvODjbrp5ClBvQLmY70hyvU1JKu7ucoOP5KFJVRcfNgYN-3qvVppxg72KGyYZlWAJr2IkO7Ae9CIhnjpufaP7npZGPrBFzpmyEaKKLGYyqu0dnQIobGLAMM"&gt;subscribe by email&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Alcro, an Electron competitor that uses Chrome devtools and websockets
&lt;/h2&gt;

&lt;p&gt;Via &lt;a href="https://twitter.com/bascule"&gt;@bascule&lt;/a&gt;, we found out about &lt;a href="https://github.com/Srinivasa314/alcro"&gt;Alcro&lt;/a&gt;:&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--PkWprjDT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/450061818606522368/pjDTHFB9_normal.jpeg" alt="Tony “Abolish ICE” Arcieri 🦀 profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Tony “Abolish ICE” Arcieri 🦀
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @bascule
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--52oNvK_0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-ff4bdab814039c4cb172a35ea369e0ea9c6a4b59b631a293896ae195fa26a99d.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Alcro: a Rust library for building desktop apps using web technologies by leveraging an existing installation of Chrome (rather than shipping the entire Chromium/Blink engine for each app like Electron)&lt;br&gt;&lt;a href="https://t.co/v8JBvxj8GR"&gt;github.com/Srinivasa314/a…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      18:50 PM - 21 May 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1263542802249465857" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1263542802249465857" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      2
      &lt;a href="https://twitter.com/intent/like?tweet_id=1263542802249465857" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      18
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;&lt;a href="https://talk.fission.codes/t/alcro-a-rust-library-for-building-desktop-apps/645"&gt;🔗&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tauri Studio - An Electron competitor that uses webview
&lt;/h2&gt;

&lt;p&gt;Found via the bascule Alcro Twitter discussion, &lt;a href="https://tauri.studio/"&gt;Tauri&lt;/a&gt; is another project to build native desktop apps with web technologies. It features a Node based CLI and a Rust backend, although the project aims to be polyglot:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Today, Tauri uses Rust for the backend - but in the not too distant future, other backends like Go, Nim, Python, Csharp etc. will be possible. This is because we are maintaining the offical Rust bindings to the &lt;a href="https://github.com/webview"&gt;webview&lt;/a&gt; organisation and plan to let you switch out the backend for your needs. Since our API can be implemented in any language with C interop, full compliance is only a PR away.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://talk.fission.codes/t/tauri-studio-native-desktop-apps-with-webview-nodejs-and-rust/646"&gt;🔗&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Git LFS with IPFS Support
&lt;/h2&gt;

&lt;p&gt;As part of some ongoing research, @ellttBen found an implementation of Git Large File Storage (LFS) integration with IPFS, &lt;a href="https://github.com/sameer/git-lfs-ipfs"&gt;sameer/git-lfs-ipfs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This has given us some good ideas of how to integrate a git-based development workflow with IPFS and Fission.&lt;/p&gt;

&lt;p&gt;Binary files of all kinds can be stored with your git repo, but then transparently stored in IPFS, rather than checked in and bloating the size of your repo. This could be particularly interesting for large photos, videos, and in general media files and assets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://talk.fission.codes/t/sameer-git-lfs-ipfs-use-ipfs-as-a-git-lfs-endpoint/647"&gt;🔗&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Slack vs Discord vs Discourse: the best tool for your community, Orbit Blog
&lt;/h2&gt;

&lt;p&gt;Our friends at Orbit (you know, makers of the &lt;a href="https://github.com/orbit-love/orbit-model"&gt;Orbit Model of Developer Engagement&lt;/a&gt;, also &lt;a href="https://talk.fission.codes/t/orbit-model-of-developer-engagement/635"&gt;in our forum&lt;/a&gt;) wrote up a giant community platforms blog post that’s a really good summary of pros and cons to help you decide &lt;a href="https://orbit.love/blog/slack-vs-discord-vs-discourse"&gt;Slack vs Discord vs Discourse&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We’re on Discord &lt;strong&gt;and&lt;/strong&gt; Discourse, and also use it for our private / internal company spaces, too, which isn’t really covered in the Orbit post. We’ll get around to writing up our story at some point!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://talk.fission.codes/t/slack-vs-discord-vs-discourse-the-best-tool-for-your-community-orbit-blog-may-2020/654"&gt;🔗&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Anil Dash, CEO of Glitch, says we need "Yes Code" rather than "No Code"
&lt;/h2&gt;

&lt;p&gt;At the beginning of May, Anil posted &lt;a href="https://www.linkedin.com/pulse/code-great-heres-why-we-need-yes-anil-dash/"&gt;No Code is great, but here's why we need Yes Code to LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We believe in a lot of these same concepts at Fission, along with additional step of making it so that users can own their own data, which should make it even easer to hack and remix apps and websites.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://talk.fission.codes/t/no-code-is-great-but-heres-why-we-need-yes-code-anil-dash-may-2020/658"&gt;🔗&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  I want to own the database that my apps use, Grant Orndorff
&lt;/h2&gt;

&lt;p&gt;Speaking of things we believe in and owning user data, &lt;a href="https://orndorffgrant.com/own-your-data-idea/"&gt;Grant's post&lt;/a&gt; about how he envisions users owning the data of apps they use is very similar to what we're building at Fission. He covers SOLID and Urbit and how they're not quite what he has in mind.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://talk.fission.codes/t/i-want-to-own-the-database-that-my-apps-use-grant-orndorff-may-2020/657"&gt;🔗&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Fission Updates
&lt;/h1&gt;

&lt;p&gt;Brooke explains her &lt;a href="https://blog.fission.codes/auth-without-backend/"&gt;design of UCAN&lt;/a&gt;, a user authorization method that doesn't need a backend, that we're implementing at Fission:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;User Controlled Authorization Networks (UCANs) are a way of doing authorization where users are fully in control. OAuth is designed for a centralized world, UCAN is the distributed user controlled version.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://talk.fission.codes/t/qri-an-open-source-version-control-and-sharing-system-for-datasets-built-on-ipfs-with-brendan-obrien/626"&gt;This week's video chat is with Qri&lt;/a&gt;, an open source version control and sharing system for datasets, built on IPFS -- join us Thursday, May 28th, at 9am PDT / 12noon EDT / 1800 CEST.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://fission.codes"&gt;Fission&lt;/a&gt; is building a web native file system, plus tools to build &amp;amp; host apps with user controlled data, encryption, and local first software. This makes it easy for front end devs to build great apps without worrying about backend or deployment.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ownyourdata</category>
      <category>fission</category>
      <category>ipfs</category>
      <category>electron</category>
    </item>
    <item>
      <title>Experimenting with HLS Video Streaming and IPFS</title>
      <dc:creator>Boris Mann</dc:creator>
      <pubDate>Wed, 22 Apr 2020 17:09:39 +0000</pubDate>
      <link>https://dev.to/fission/experimenting-with-hls-video-streaming-and-ipfs-1dkj</link>
      <guid>https://dev.to/fission/experimenting-with-hls-video-streaming-and-ipfs-1dkj</guid>
      <description>&lt;p&gt;We've been running &lt;a href="https://talk.fission.codes/c/events/dweblunchnlearn/27"&gt;weekly developer lunch &amp;amp; learn sessions&lt;/a&gt; over video. I've been downloading the video from Zoom, doing some basic trimming, and then uploading it using Fission, and embedding the IPFS link in our Discourse forum. This works pretty well – Discourse recognizes the video file extension and embeds a video player in the post automatically. I had read a bit about HTTP Live Streaming (HLS) and wanted to experiment.&lt;/p&gt;

&lt;p&gt;Originally developed by Apple, and now widely supported, HLS doesn't need any special server-side support. A bit more in this freeCodeCamp article:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The most important feature of HLS is its ability to adapt the bitrate of the video to the actual speed of the connection. This optimizes the quality of the experience.  &lt;/p&gt;

&lt;p&gt;HLS videos are encoded in different renditions at different resolutions and bitrates. This is usually referred to as the bitrate ladder. When a connection gets slower, the protocol automatically adjusts the requested bitrate to the bandwidth available.  &lt;/p&gt;

&lt;p&gt;– &lt;a href="https://www.freecodecamp.org/news/what-is-hls-and-when-to-use-it/"&gt;freeCodeCamp: HLS Video Streaming: What it is, and When to Use it&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There's an &lt;a href="https://github.com/ipfs/js-ipfs/tree/master/examples/browser-video-streaming"&gt;example in the JavaScript implementation of IPFS about using HLS with js-ipfs&lt;/a&gt;. The README explains:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The fact that HLS content is just "a bunch of files" makes it a good choice for IPFS (another protocol that works this way is MPEG-DASH, which could certainly be a good choice as well). Furthermore, the &lt;a href="https://github.com/video-dev/hls.js"&gt;hls.js&lt;/a&gt; library enables straightforward integration with the HTML5 video element.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;"Just a bunch of files" is pretty much how we're thinking about Fission. Fission and any standard IPFS gateway serves up files over HTTP and/or natively with IPFS, without plugins, in any browser. It's really great to get back to what is basically the 2020 equivalent of upload files to the server.&lt;/p&gt;

&lt;p&gt;I took the latest video file of &lt;a href="https://talk.fission.codes/t/ceramic-network-technical-discussion-with-joel-thorstensson-cto-of-3box/559"&gt;Joel talking about Ceramic Network&lt;/a&gt; and ran the &lt;code&gt;ffmpeg&lt;/code&gt; command from the js-ipfs example. On MacOS, &lt;code&gt;brew install ffmpeg&lt;/code&gt; will get you the program.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ffmpeg -i ../YOURVIDEO.mp4 -profile:v baseline -level 3.0 -start_number 0 -hls_time 5 -hls_list_size 0 -f hls master.m3u8&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;On my desktop iMac, the progress showed to be encoding at 4x - 5x speed. The video is about an hour, so it took about 20 minutes to complete. The output is 400+ files, which I uploaded with &lt;code&gt;fission up&lt;/code&gt; and then noted down the hash of the folder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wdxlTB6K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2020/04/hls-video-files-in-drive-600.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wdxlTB6K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2020/04/hls-video-files-in-drive-600.png" alt="Experimenting with HLS Video Streaming and IPFS"&gt;&lt;/a&gt;Browse the &lt;a href="https://drive.fission.codes/#/QmYGs1ksGX3eMiGvxNuvRT6PD7zPKZpHyiUDXKGQoL4R7S"&gt;files on IPFS using Fission Drive&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then I went back and edited the &lt;code&gt;streaming.js&lt;/code&gt; folder and &lt;code&gt;index.html&lt;/code&gt;. The &lt;code&gt;streaming.js&lt;/code&gt; file just needs the hash of the folder that contains the HLS-encoded video, which for this video is &lt;code&gt;QmYGs1ksGX3eMiGvxNuvRT6PD7zPKZpHyiUDXKGQoL4R7S&lt;/code&gt;. Feel free to use this to experiment with! I kept the &lt;code&gt;master.m3u8&lt;/code&gt; file name so didn't need to change that.&lt;/p&gt;

&lt;p&gt;One change I made was to to also include the IPFS script from a CDN in the &lt;code&gt;index.html&lt;/code&gt; file (the js-ipfs example assumes you're running things locally and working with js-ipfs from there). Just add this line:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;script src="https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://drive.fission.codes/#/events.fission.name/2020/04-16-dweb-lunchnlearn-joel-ceramic-network"&gt;browse all the files directly using Fission Drive&lt;/a&gt;, including the source video that was encoded. &lt;a href="https://events.fission.name/2020/04-16-dweb-lunchnlearn-joel-ceramic-network/"&gt;Visiting the index page&lt;/a&gt; will load the player and HLS stream the video.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example HLS Video
&lt;/h2&gt;

&lt;p&gt;Here's the source and video embedded via Codepen – hit the HTML button to view source. Note the Fission gateway link to the published version of the &lt;code&gt;streaming.js&lt;/code&gt; file, also remotely included:&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/borismann/embed/GRprJoZ?height=600&amp;amp;default-tab=html,result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The video isn't very high quality to begin with, and adding width/height to the video element could constrain it to different sizes.&lt;/p&gt;

&lt;p&gt;More about &lt;a href="https://talk.fission.codes/t/ceramic-network-technical-discussion-with-joel-thorstensson-cto-of-3box/559"&gt;Joel and Ceramic Network on the forum event page »&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This is a very manual process, and there are lots of dedicated video encoding services. It was a good experiment to see that anything that is a "bunch of files" can just work over the distributed IPFS network, and easily published and hosted on Fission.&lt;/p&gt;

&lt;p&gt;Experimenting with a large, high quality video and testing across different devices and network speeds (and whether or not nearby peers had a copy of the video) would need to be done vs. just embedding the original video to see what the user experience is actually like.&lt;/p&gt;

&lt;p&gt;This also leads to some interesting thoughts about distributed encoding. Once an original video is encoded and added to the network by one person, it never needs to be encoded again. From some brief research, &lt;a href="https://mastodon.social/@Gargron/11088922"&gt;ffmpeg is not deterministic, which lead to this thread on Mastodon&lt;/a&gt;. This means that different people encoding a video could get different output files, which means different hashes in IPFS.&lt;/p&gt;

&lt;p&gt;However, the original video file is unique, so adding metadata to the original source video file for discovery of the unique, permanent hash of an HLS-encoded version could work.&lt;/p&gt;

&lt;p&gt;We're currently doing some work on how to do this for images, so that different sizes are automatically available and cached in the network.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Fission is an app &amp;amp; web hosting platform that implements a web native file system powered by IPFS. Build and run locally, &lt;code&gt;fission up&lt;/code&gt; to host everywhere. &lt;a href="https://guide.fission.codes"&gt;Read our guide&lt;/a&gt; to get started and sign up right from the command line.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ipfs</category>
      <category>hls</category>
      <category>video</category>
    </item>
    <item>
      <title>What colour is your yak? Visualizing developer jargon</title>
      <dc:creator>Boris Mann</dc:creator>
      <pubDate>Tue, 21 Apr 2020 18:05:00 +0000</pubDate>
      <link>https://dev.to/fission/what-colour-is-your-yak-visualizing-developer-jargon-aag</link>
      <guid>https://dev.to/fission/what-colour-is-your-yak-visualizing-developer-jargon-aag</guid>
      <description>&lt;p&gt;We're creating illustrations for developer concepts, catch phrases, and other jargon. &lt;em&gt;Yak shaving&lt;/em&gt; is one of those terms. It's fun to dig into the concepts and learn about their background, teach other people about them, and we get some cool images to use in a number of different ways that aren't just company branding. We have ideas for some new illustrations, we're happy to take other suggestions and have people &lt;a href="https://talk.fission.codes/t/vote-for-and-suggest-developer-concepts-to-illustrate/590"&gt;vote for their favourites&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bear and Penguin
&lt;/h2&gt;

&lt;p&gt;We had fun last year &lt;a href="https://blog.fission.codes/bear-penguin-bounty-for-boss/"&gt;sourcing the Bear and Penguin illustration for the Berlin Open Source Salon&lt;/a&gt;. The inner meaning here is that the bear is the coat of arms for the city of Berlin – the "Berliner Bär". The bear is holding a Club Mate drink, traditional drink of German hackers (although I know at one time the Mozilla Vancouver team imported it for their office fridge, too!). And the penguin is the long time mascot of Linux.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_mk68SOW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2020/04/bear---penguin-02-2000px-white.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_mk68SOW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2020/04/bear---penguin-02-2000px-white.jpg" alt="What colour is your yak? Visualizing developer jargon"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wizards and Snakes
&lt;/h2&gt;

&lt;p&gt;Since then, we've worked with &lt;a href="https://www.behance.net/brunomonts"&gt;Bruno Monts&lt;/a&gt;, an illustrator based in Brasil, to create a number of other illustrations.&lt;/p&gt;

&lt;p&gt;We just released the &lt;strong&gt;Haskell Wizards&lt;/strong&gt; series, written up in our &lt;a href="https://haskellfortypescriptdevs.fission.codes/appendix/haskell-wizards"&gt;Haskell for Typescript Devs book&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3Wn5O3Sn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2020/04/haskell-wizard-trio.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3Wn5O3Sn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2020/04/haskell-wizard-trio.png" alt="What colour is your yak? Visualizing developer jargon"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.fission.codes/screaming-snake-case/"&gt;SCREAMING SNAKE CASE&lt;/a&gt; was just a pure piece of fun, with the vaporwave stylings pushed to the max. We did a first run of stickers with this image, and can't wait to come up with t-shirts or other swag with this fun image:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6HGeo5WW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2020/04/screaming_snake_case-1024.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6HGeo5WW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2020/04/screaming_snake_case-1024.png" alt="What colour is your yak? Visualizing developer jargon"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Vote for developer jargon to illustrate
&lt;/h2&gt;

&lt;p&gt;We're going to get some more illustrations made, and have a couple of ideas already:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Kebab case&lt;/strong&gt; wouldn't be vaporwave, but maybe a sort of comic / graphic art – a delicious kebab, dripping sauce.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Elm programming language&lt;/strong&gt; is a favourite of ours at Fission, so vote for this one if you want an Elm-y character in the style of the Haskell Wizards&lt;/li&gt;
&lt;li&gt;We recently added some &lt;a href="https://talk.fission.codes/t/yak-shaving-programming-term/582"&gt;definitions for Yak shaving to our forum&lt;/a&gt;. It's only about 20 years old – but of course software development has changed dramatically in the last 20 years, so it's a term that's not well known.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bike shedding&lt;/strong&gt; and&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pets vs. Cattle&lt;/strong&gt; are the last two suggestions we have so far.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://talk.fission.codes/t/vote-for-and-suggest-developer-concepts-to-illustrate/590"&gt;Read more about these ideas, vote in the forum for your favourites to get illustrated, or suggest your own »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We're working with Bruno now, and will run the vote for a couple of weeks, and then get at least 2 or 3 of the developer jargon ideas turned into high quality illustrations.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Post header photo by &lt;a href="https://unsplash.com/@lievemax"&gt;Lieve Ransijn&lt;/a&gt; on &lt;a href="https://unsplash.com/"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>haskell</category>
      <category>elmlang</category>
      <category>art</category>
      <category>jargon</category>
    </item>
    <item>
      <title>Fission on the IPFS Community Call</title>
      <dc:creator>Boris Mann</dc:creator>
      <pubDate>Mon, 09 Mar 2020 19:34:27 +0000</pubDate>
      <link>https://dev.to/fission/fission-on-the-ipfs-community-call-nof</link>
      <guid>https://dev.to/fission/fission-on-the-ipfs-community-call-nof</guid>
      <description>&lt;p&gt;Thanks to the IPFS team for hosting us on the weekly community call! These &lt;a href="https://talk.fission.codes/t/ipfs-weekly-community-calls/521"&gt;community calls happen weekly on Mondays at 1600 UTC&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We presented an intro to what we're building at Fission, including our hosted services, open source contributions, and more.&lt;/p&gt;

&lt;p&gt;We've started to use the phrase "web native apps" to describe Fission's app creation platform that decouples storage from apps, with user controlled data, and secure by default. Which is what is expected by users  from native mobile apps.&lt;/p&gt;

&lt;p&gt;You can watch the video on the IPFS Youtube channel here:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/wvmZj7IE9Bo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The slides are &lt;a href="https://events.fission.name/2020/ipfs-community-call/Fission-IPFS-Community-Call-March2020.pdf"&gt;available on IPFS as a PDF&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---9y3PUf8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2020/03/Screen-Shot-2020-03-09-at-12.19.32-PM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---9y3PUf8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2020/03/Screen-Shot-2020-03-09-at-12.19.32-PM.png" alt="Fission on the IPFS Community Call"&gt;&lt;/a&gt;&lt;a href="https://noti.st/bmann/TltFLG/fission-building-web-native-apps"&gt;Also on Notist&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the final slide, here are all the places where you can find out more and connect with us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Github: &lt;a href="https://github.com/fission-suite"&gt;fission-suite&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Install Guide &amp;amp; Docs: &lt;a href="https://guide.fission.codes"&gt;guide.fission.codes&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Technical Whitepaper: &lt;a href="https://whitepaper.fission.codes"&gt;whitepaper.fission.codes&lt;/a&gt;  – this is a work in progress! 🚧 👷‍♀️✍️&lt;/li&gt;
&lt;li&gt;Discourse forum: &lt;a href="https://talk.fission.codes"&gt;talk.fission.codes&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Discord chat: &lt;a href="https://fission.codes/discourse"&gt;fission.codes/discourse&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter: &lt;a href="https://twitter.com/fissioncodes"&gt;@fissioncodes&lt;/a&gt;, team accounts &lt;a href="https://twitter.com/expede"&gt;@expede&lt;/a&gt;,  &lt;a href="https://twitter.com/bmann"&gt;@bmann&lt;/a&gt;, &lt;a href="https://twitter.com/icidasset"&gt;@icidasset&lt;/a&gt;, and &lt;a href="https://github.com/dholms"&gt;@dholms on Github&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ipfs</category>
      <category>video</category>
      <category>presentations</category>
    </item>
    <item>
      <title>Fission Drive Preview</title>
      <dc:creator>Boris Mann</dc:creator>
      <pubDate>Thu, 13 Feb 2020 18:51:41 +0000</pubDate>
      <link>https://dev.to/fission/fission-drive-preview-2</link>
      <guid>https://dev.to/fission/fission-drive-preview-2</guid>
      <description>&lt;p&gt;We're pleased to present the Preview release of &lt;strong&gt;Fission Drive&lt;/strong&gt; , the web native file system browser that we're including as a base component of the Fission stack.&lt;/p&gt;

&lt;p&gt;We've been hosting files, static websites, and client-side apps on Fission since we launched our CLI tool in October of 2019.&lt;/p&gt;

&lt;p&gt;Underneath, we use IPFS, but increasingly that's a detail that we don't think most users of our service should have to care about. It's a dependency, just like using MySQL or Redis.&lt;/p&gt;

&lt;p&gt;Of course, if you &lt;strong&gt;do&lt;/strong&gt; know what IPFS, great! We want to make it as easy to use as any existing Web2 component, while having capabilities at the protocol level – like file de-duplication, a global CDN, peer-to-peer sync, immutability, and offline support, to name a few– that let us empower all developers to build new and interesting tools.&lt;/p&gt;

&lt;p&gt;Fission Drive is the app that we're building to showcase what the entire Fission stack can do, hosted on our own infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/icidasset"&gt;Steven @icidasset&lt;/a&gt; joined the team in December and has been full time since January. He designed and built Fission Drive, as well as our &lt;a href="https://fission.codes"&gt;slick new home page&lt;/a&gt;, which is also now running on Fission. Next up for Steven is building out web-based passwordless login for Drive, as well as the TypeScript libraries that will let all developers build apps like this.&lt;/p&gt;

&lt;p&gt;Drive has a few features to play with, like image previews and support for dark mode. We'll keep the &lt;a href="https://guide.fission.codes/drive"&gt;guide docs updated&lt;/a&gt; as we add features.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jjKkQs0F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2020/02/fission-drive-dark-mode.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jjKkQs0F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2020/02/fission-drive-dark-mode.png" alt="Fission Drive Preview"&gt;&lt;/a&gt;Fission Drive in Dark Mode, with an image preview&lt;/p&gt;

&lt;p&gt;This preview release supports browsing any public IPFS hash, not just those on Fission. You can use this example hash &lt;code&gt;QmbCLefkFuXbhHBWSW7PWmJzBL7W7e8zm41HK4DGJ1RDwV&lt;/code&gt; to see it in action at &lt;a href="https://drive.fission.codes"&gt;drive.fission.codes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Want to add your own files? Follow the &lt;a href="https://guide.fission.codes/apps/installation"&gt;install instructions for the Fission CLI&lt;/a&gt; to easily upload using &lt;code&gt;fission up&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://5d04d668.sibforms.com/serve/MUIEAD0fi3_BJE-4eieeuK6_0_XZaOPiu1_nfh56jvP1pV9uWy9OLxWLrHtjC148osZF2vcRb0XAymSdzFxhVD7XgvvODjbrp5ClBvQLmY70hyvU1JKu7ucoOP5KFJVRcfNgYN-3qvVppxg72KGyYZlWAJr2IkO7Ae9CIhnjpufaP7npZGPrBFzpmyEaKKLGYyqu0dnQIobGLAMM"&gt;subscribe to keep up to date with Fission Drive and other product updates&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>fission</category>
      <category>fissiondrive</category>
      <category>ipfs</category>
    </item>
    <item>
      <title>Screaming Snake Case</title>
      <dc:creator>Boris Mann</dc:creator>
      <pubDate>Tue, 28 Jan 2020 20:24:20 +0000</pubDate>
      <link>https://dev.to/fission/screaming-snake-case-43kj</link>
      <guid>https://dev.to/fission/screaming-snake-case-43kj</guid>
      <description>&lt;p&gt;Did you know that different programming languages and certain developer preferences have led to different standards in naming functions, variables, constants, and other programming terms?&lt;/p&gt;

&lt;p&gt;Camel case (&lt;a href="https://en.wikipedia.org/wiki/Camel_case"&gt;wikipedia&lt;/a&gt;) – or should I say, camelCase – is probably the best known programming naming convention, in either &lt;strong&gt;PascalCase&lt;/strong&gt; (initial capital) or &lt;strong&gt;dromedaryCase&lt;/strong&gt; versions.&lt;/p&gt;

&lt;p&gt;While researching, we were delighted to learn about &lt;strong&gt;kebab-case&lt;/strong&gt; -being-a-thing, and you can find a bunch more &lt;a href="https://en.wikipedia.org/wiki/Letter_case#Special_case_styles"&gt;letter cases on Wikipedia&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But we're here to tell you about &lt;strong&gt;snake_case&lt;/strong&gt; :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The use of underscores as word separators in identifiers in programming languages is old, dating to the late 1960s. It is particularly associated with C, being found in &lt;em&gt;&lt;a href="https://en.wikipedia.org/wiki/The_C_Programming_Language"&gt;The C Programming Language&lt;/a&gt;&lt;/em&gt; (1978), and contrasted with &lt;a href="https://en.wikipedia.org/wiki/Pascal_case"&gt;PascalCase&lt;/a&gt; (a type of &lt;a href="https://en.wikipedia.org/wiki/Camel_case"&gt;camel case&lt;/a&gt;). However, the convention traditionally had no specific name: the Python style guide refers to it simply as "lower_case_with_underscores".  &lt;/p&gt;

&lt;p&gt;Within &lt;a href="https://en.wikipedia.org/wiki/Usenet"&gt;Usenet&lt;/a&gt; the name "snake_case" was first seen in the &lt;a href="https://en.wikipedia.org/wiki/Ruby_(programming_language)"&gt;Ruby&lt;/a&gt; community in 2004, used by Gavin Kistner  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Snake_case"&gt;https://en.wikipedia.org/wiki/Snake_case&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This, of course, leads us to SCREAMING_SNAKE_CASE – all capitals, often used when defining constants.&lt;/p&gt;

&lt;p&gt;And now, a vapourwave inspired illustration:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zf5CNANO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2020/01/F621DB83-9E43-4C37-B409-2828F22B3ECF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zf5CNANO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2020/01/F621DB83-9E43-4C37-B409-2828F22B3ECF.png" alt="Screaming Snake Case"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We're a developer focused company, which means we have fun with developer-centric in jokes and illustration. We've made a first run of stickers that you can fill out your postal address on our &lt;a href="https://swag.fission.codes"&gt;swag signup page&lt;/a&gt; and we'll get some sent to you.&lt;/p&gt;

&lt;p&gt;We've got some other programming related illustrations that will get turned into stickers and other artwork lined up, with &lt;strong&gt;Haskell&lt;/strong&gt; -related characters being up next. Haskell also happens to be what we're &lt;a href="https://github.com/fission-suite/web-api"&gt;writing our backend services in&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The artist behind this first set of work is &lt;strong&gt;Bruno Monts&lt;/strong&gt; , a freelance illustrator and designer from Brazil. You can see his &lt;a href="https://www.behance.net/brunomonts"&gt;portfolio on Behance&lt;/a&gt;. Thank you Bruno for your great work!&lt;/p&gt;

&lt;p&gt;Stay tuned for more fun developer art!&lt;/p&gt;

</description>
      <category>fission</category>
      <category>screamingsnakecase</category>
      <category>swag</category>
    </item>
    <item>
      <title>IPFS on Hackage</title>
      <dc:creator>Boris Mann</dc:creator>
      <pubDate>Fri, 20 Dec 2019 21:27:05 +0000</pubDate>
      <link>https://dev.to/fission/ipfs-on-hackage-28il</link>
      <guid>https://dev.to/fission/ipfs-on-hackage-28il</guid>
      <description>&lt;p&gt;&lt;em&gt;Authored by &lt;a href="https://blog.fission.codes/author/daniel/"&gt;Daniel&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We just published version &lt;code&gt;1.0.0&lt;/code&gt; of our IPFS package on &lt;a href="https://hackage.haskell.org/package/ipfs-1.0.0"&gt;Hackage&lt;/a&gt; 🎉&lt;/p&gt;

&lt;p&gt;This library offers a high level API for interacting with IPFS nodes. Most of the functionality was refactored out of our &lt;a href="https://github.com/fission-suite/web-api%5C"&gt;Web API&lt;/a&gt;, which provides a convenient HTTP interface for accessing the IPFS network.&lt;/p&gt;

&lt;p&gt;The library can communicate with IPFS nodes in two different ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Locally: This is done by shelling out to an IPFS daemon that is running on the same machine. This would be the equivalent of running an IPFS command in your terminal.&lt;/li&gt;
&lt;li&gt;Remotely: This is done by communicating with a node's HTTP interface. This could either be a node running on the same machine or on another machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The package is not currently fully featured, but the base functionality is present: &lt;code&gt;add&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;, &lt;code&gt;pin&lt;/code&gt;, and &lt;code&gt;dag put&lt;/code&gt; (for building IPLD structures). The existing code provides helpful building blocks for adding additional functionality.&lt;/p&gt;

&lt;p&gt;Check out &lt;a href="https://github.com/fission-suite/ipfs-haskell"&gt;the code on GitHub&lt;/a&gt;. Let us know what features would be helpful for you and any issues that you might run into along the way!&lt;/p&gt;

&lt;p&gt;When you're ready to start building, head over to &lt;a href="https://hackage.haskell.org/package/ipfs"&gt;Hackage&lt;/a&gt; and grab the library.&lt;/p&gt;

</description>
      <category>ipfs</category>
      <category>haskell</category>
      <category>hackage</category>
    </item>
    <item>
      <title>IPFS Storage Adapter for Ghost Blog with Heroku Deploy</title>
      <dc:creator>Boris Mann</dc:creator>
      <pubDate>Fri, 20 Dec 2019 00:51:05 +0000</pubDate>
      <link>https://dev.to/fission/ipfs-storage-adapter-for-ghost-blog-with-heroku-deploy-38pe</link>
      <guid>https://dev.to/fission/ipfs-storage-adapter-for-ghost-blog-with-heroku-deploy-38pe</guid>
      <description>&lt;p&gt;Back in May, as part of putting the Fission blog on Ghost, I &lt;a href="https://blog.fission.codes/ghost2-blog-on-heroku/" rel="noopener noreferrer"&gt;packaged it up to be a one-click deploy on Heroku&lt;/a&gt;. We've gone one step further and gotten an IPFS Storage Adapter completed, and upgraded to Ghost v3.x.&lt;/p&gt;

&lt;p&gt;This one-click deploy is possible because our &lt;a href="https://elements.heroku.com/addons/interplanetary-fission" rel="noopener noreferrer"&gt;IPFS Heroku Add-on is in beta&lt;/a&gt;! 🙌 🎉&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3.fission.codes%2F2019%2F12%2Fheroku-add-on.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3.fission.codes%2F2019%2F12%2Fheroku-add-on.png" alt="IPFS Storage Adapter for Ghost Blog with Heroku Deploy"&gt;&lt;/a&gt;Our &lt;a href="https://elements.heroku.com/addons/interplanetary-fission" rel="noopener noreferrer"&gt;IPFS Heroku Add-on&lt;/a&gt; is in beta with a free "test" plan.&lt;/p&gt;

&lt;p&gt;This means you can package up apps to be deployed on Heroku that automatically add our add-on. This provisions you a username and API key and your app can use our Web API to read and write to IPFS, manage DNS, and anything else accessible through our API.&lt;/p&gt;

&lt;p&gt;Check the &lt;a href="https://github.com/fission-suite/heroku-ipfs-ghost" rel="noopener noreferrer"&gt;Github repo for more details&lt;/a&gt;, or go ahead and deploy a new Ghost 3 blog here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://heroku.com/deploy?template=https://github.com/fission-suite/heroku-ipfs-ghost" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.herokucdn.com%2Fdeploy%2Fbutton.svg" alt="IPFS Storage Adapter for Ghost Blog with Heroku Deploy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To complete the Ghost deploy, the only configuration you'll need to do is to set the public URL for your blog – e.g. &lt;code&gt;https://boris-ghost-test1.herokuapp.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We've set the IPFS gateway to use ours by default, but you can put in any gateway you like. Images are included from this gateway, but of course using the &lt;a href="https://github.com/ipfs-shipyard/ipfs-companion" rel="noopener noreferrer"&gt;IPFS Companion extension&lt;/a&gt; means you can serve the images from your local machine.&lt;/p&gt;

&lt;p&gt;Go ahead and setup your first user, create a new post, and add an image – voila! Interplanetary Ghost Blogging! &lt;a href="https://boris-ghost-test1.herokuapp.com/i-am-testing-ipfs/" rel="noopener noreferrer"&gt;Here's my sample post&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;We're working on adding IPFS support for basic file uploads to a number of other platforms. This is a first step in getting more content natively available in IPFS. Imagine managing your blog's media assets or a gallery page from your desktop, being able to login to any system and have all your photos and files available for you there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://talk.fission.codes/c/app-ideas" rel="noopener noreferrer"&gt;Join our App Ideas forum&lt;/a&gt; to suggest other things you'd like to see. Thanks to &lt;a href="https://mktlr.com" rel="noopener noreferrer"&gt;Mike Taylor&lt;/a&gt; &lt;a href="https://twitter.com/MKTLRwho" rel="noopener noreferrer"&gt;@mktlrwho&lt;/a&gt; for working on this with us!&lt;/p&gt;

</description>
      <category>ipfs</category>
      <category>ghost</category>
      <category>heroku</category>
    </item>
    <item>
      <title>A Universal Hostless Substrate for a Post-Serverless Future at Øredev 2019</title>
      <dc:creator>Brooklyn Zelenka 🏳️‍🌈</dc:creator>
      <pubDate>Tue, 12 Nov 2019 18:22:12 +0000</pubDate>
      <link>https://dev.to/fission/a-universal-hostless-substrate-for-a-post-serverless-future-at-oredev-2019-41nm</link>
      <guid>https://dev.to/fission/a-universal-hostless-substrate-for-a-post-serverless-future-at-oredev-2019-41nm</guid>
      <description>&lt;p&gt;Brooke was at &lt;a href="https://oredev.org/"&gt;Øredev 2019&lt;/a&gt; in Malmö, Sweden and presented a talk covering the evolution of server architecture that we call "hostless". This also serves as a high level technical roadmap for what we're working on here at Fission. We've shipped IPFS support, and will move on to identity using zero-knowledge proofs and DIDs, and distributed compute with WASM and smart contracts.&lt;/p&gt;

&lt;p&gt;While those are a blizzard of next-gen technology concepts, we're integrating them in such a way as to make them usable and turnkey. The outcome is a better developer experience (DX).&lt;/p&gt;

&lt;p&gt;Key takeaways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There has been a 60-year progression of server architecture, and there is one final phase left&lt;/li&gt;
&lt;li&gt;There have been recent advances in cryptography, distributed systems, and web infrastructure&lt;/li&gt;
&lt;li&gt;It is possible to store data and run computation &lt;strong&gt;anywhere&lt;/strong&gt; , even on untrusted machines&lt;/li&gt;
&lt;li&gt;Remove the concept of “local development”, “production”, and “deployment” entirely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last 60 years has seen the rise and fall of several models of computing: mainframes, private server, shared hosting, containers, and serverless (to name a few). We have one final phase left: “hostless” or universal apps. By leveraging technologies like secure multiparty compute, the content-addressable web, blockchain, and the rise of WASM, we are seeing the beginnings of a future liberated from specialized providers, acting on a distributed substrate of store and compute.&lt;/p&gt;

&lt;p&gt;With all this in place, users fully control their own data (and it never touches your servers), deployment is as simple as setting a flag on your local environment, and developers maintain zero infrastructure.&lt;/p&gt;

&lt;p&gt;Come learn about what is being built today for the next wave of computing, how we evolve past the serverless paradigm, and how it can make life simpler for developers and end users!&lt;/p&gt;

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

&lt;p&gt;The slides are &lt;a href="https://noti.st/expede/I79QlQ/a-universal-hostless-substrate-for-a-post-serverless-future"&gt;available on Notist&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>øredev</category>
      <category>serverless</category>
      <category>webassembly</category>
      <category>ipfs</category>
    </item>
    <item>
      <title>Exporting your Facebook photos to Fission</title>
      <dc:creator>Boris Mann</dc:creator>
      <pubDate>Sun, 10 Nov 2019 09:01:10 +0000</pubDate>
      <link>https://dev.to/fission/exporting-your-facebook-photos-to-fission-28j0</link>
      <guid>https://dev.to/fission/exporting-your-facebook-photos-to-fission-28j0</guid>
      <description>&lt;p&gt;&lt;em&gt;I wrote this post as a quick weekend HOWTO on the Fission blog because it turned out people were excited to try this on their own. At Fission, we're building developer tools to make it easy to build and deploy serverless apps directly from your desktop. Our first service uses IPFS, a p2p file system, so that files stream directly from your computer.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Facebook has a fairly extensive data export system built in. I decided to export my photos and videos and put them up on Fission.&lt;/p&gt;

&lt;p&gt;For now, this is a manual process and involves some command line usage. I'll write this up as an &lt;a href="https://talk.fission.codes/c/app-ideas"&gt;App Idea in our forum&lt;/a&gt; and see if we can spend some time making this "one-click".&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--OZe170ZQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/777494809632210944/aFre3Pzz_normal.jpg" alt="Jamie Burke profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Jamie Burke
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @jamie247
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--52oNvK_0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-ff4bdab814039c4cb172a35ea369e0ea9c6a4b59b631a293896ae195fa26a99d.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      &lt;a href="https://twitter.com/bmann"&gt;@bmann&lt;/a&gt; &lt;a href="https://twitter.com/FISSIONcodes"&gt;@FISSIONcodes&lt;/a&gt; Please make that one click for me dude
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      08:32 AM - 09 Nov 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1193083841826770944" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1193083841826770944" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1193083841826770944" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      2
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;Read the Facebook help article on &lt;a href="https://www.facebook.com/help/1701730696756992/"&gt;Accessing &amp;amp; Downloading Your Information&lt;/a&gt; for instructions on how to navigate to the right section of your Facebook account.&lt;/p&gt;

&lt;p&gt;On a desktop browser, it should be under the triangle in the upper right hand corner, then &lt;em&gt;Settings&lt;/em&gt;, then &lt;em&gt;Your Facebook Information&lt;/em&gt;, then &lt;em&gt;Download Your Information&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HmS_gKPC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2019/11/Screenshot-2019-11-09-at-8.29.37-AM-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HmS_gKPC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2019/11/Screenshot-2019-11-09-at-8.29.37-AM-1.png" alt="Exporting your Facebook photos to Fission"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I don't upload much to Facebook and only cross-post my Instagram photos (which are cross-posted to my personal blog), so I clicked &lt;em&gt;Deselect All&lt;/em&gt; (says &lt;em&gt;Select All&lt;/em&gt; in the screenshot above), and only selected Photos and Videos. I also set Media Quality to "High" (although some people still report that these are still not as large as the originals, which may only be accessible through the API).&lt;/p&gt;

&lt;p&gt;You can experiment with including other items. But, be aware that because there aren't any permissions, you may be sharing information you don't want to if you publish the files. Same goes for the photos. I have posted most things on Facebook the assumption that they are "public".&lt;/p&gt;

&lt;p&gt;Click the &lt;em&gt;Create File&lt;/em&gt; button and go make a coffee. Facebook will notify when your download is ready.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T7ykOc4T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2019/11/Screenshot-2019-11-09-at-8.38.38-AM-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T7ykOc4T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2019/11/Screenshot-2019-11-09-at-8.38.38-AM-1.png" alt="Exporting your Facebook photos to Fission"&gt;&lt;/a&gt;Just over 13 years of Facebook.&lt;/p&gt;

&lt;p&gt;To download, you'll need to click on the &lt;em&gt;Download&lt;/em&gt; button and enter your Facebook password. You now have a zip file with browse-able HTML files and your photo and video files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting your files online with Fission
&lt;/h2&gt;

&lt;p&gt;You'll need to type a few commands into the command line Terminal on your machine, but everything should just work if you copy-paste.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ipfs-shipyard/ipfs-desktop#install"&gt;Install the IPFS Desktop&lt;/a&gt; and run it. You've got a graphical interface to explore your local IPFS server, which is running in the background.&lt;/p&gt;

&lt;p&gt;On Mac, make sure you've got &lt;a href="https://brew.sh"&gt;homebrew installed&lt;/a&gt;, then open the Terminal app and install the Fission tools using these commands:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew tap fission-suite/fission
brew install fission-cli
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You can find extended &lt;a href="https://guide.fission.codes/installation"&gt;installation instructions in our Fission Guide&lt;/a&gt;, and I expect our friends running Linux will have no problem.&lt;/p&gt;

&lt;p&gt;Now, you're going to register for Fission.&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fission register
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Your username will be your subdomain, e.g. &lt;code&gt;boris.fission.name&lt;/code&gt;. Pick a password and enter an email address. We are adding support for custom domain names, stay tuned!&lt;/p&gt;

&lt;p&gt;Now, you've got a zip file in your Downloads folder from Facebook, called something like "facebook-YOURNAME.zip". Unzip it and you'll have a "facebook-YOURNAME" folder.&lt;/p&gt;

&lt;p&gt;Back to the terminal! This is the last step!&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;fission up&lt;/code&gt; command is going to add all your files to IPFS, through your local IPFS Desktop. Then, Fission's server will get sent the hash that represents the folder, we'll use IPFS to keep a copy of all your files, and update DNS of your subdomain.&lt;/p&gt;

&lt;p&gt;The following command will be correct if you're on a Mac and downloaded to the standard downloads folder. Otherwise, just enter the path to where the unzipped Facebook folder is:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fission up ~/Downloads/facebook-YOURNAME/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;I only had about 200MB of files, so this happened pretty quickly. Visit YOURNAME.fission.name in your browser and you should see something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HmsRT1dG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2019/11/Screenshot-2019-11-09-at-9.33.57-AM-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HmsRT1dG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.fission.codes/2019/11/Screenshot-2019-11-09-at-9.33.57-AM-1.png" alt="Exporting your Facebook photos to Fission"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your Facebook photos are online and browse-able! You can see mine at &lt;a href="https://boris.fission.name/Photos/facebook/"&gt;boris.fission.name/Photos/facebook&lt;/a&gt; (I put mine in a subfolder, because I already host a bunch of public files on my Fission site).&lt;/p&gt;

&lt;p&gt;Technically the files are being served directly from your computer, when you're online and have IPFS Desktop running. The Fission service is also serving those files, and stays online when you're offline. As a next step, you can explore installing the &lt;a href="https://github.com/ipfs-shipyard/ipfs-companion"&gt;IPFS Companion browser extension&lt;/a&gt; which will access IPFS content natively.&lt;/p&gt;

&lt;p&gt;Join us in our &lt;a href="https://fission.codes/discord"&gt;Discord chat forum&lt;/a&gt; if you have questions or just come say "hi"!&lt;/p&gt;

</description>
      <category>howto</category>
      <category>facebook</category>
      <category>photos</category>
      <category>ipfs</category>
    </item>
    <item>
      <title>Open Source Licensing Evolution at Diffusion 2019</title>
      <dc:creator>Boris Mann</dc:creator>
      <pubDate>Mon, 04 Nov 2019 02:07:41 +0000</pubDate>
      <link>https://dev.to/fission/open-source-licensing-evolution-at-diffusion-2019-47nj</link>
      <guid>https://dev.to/fission/open-source-licensing-evolution-at-diffusion-2019-47nj</guid>
      <description>&lt;p&gt;Boris gave this talk at &lt;a href="https://diffusion.events"&gt;Diffusion 2019&lt;/a&gt; in Berlin.&lt;/p&gt;

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

&lt;p&gt;The slides and links to licenses and other resources are &lt;a href="https://noti.st/bmann/aOkl8w/open-source-licensing-evolution"&gt;available on Notist »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>diffusion</category>
      <category>opensource</category>
      <category>licensing</category>
    </item>
  </channel>
</rss>
