<?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: Functionland</title>
    <description>The latest articles on DEV Community by Functionland (@fx).</description>
    <link>https://dev.to/fx</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%2F1089%2Fa86280df-d33e-455d-b689-a1c4ed47c0d9.png</url>
      <title>DEV Community: Functionland</title>
      <link>https://dev.to/fx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fx"/>
    <language>en</language>
    <item>
      <title>FxExchange: Functionland's DAG Exchange Protocol</title>
      <dc:creator>Masih H. Derkani</dc:creator>
      <pubDate>Sun, 19 Feb 2023 12:02:05 +0000</pubDate>
      <link>https://dev.to/fx/fxexchange-functionlands-dag-exchange-protocol-4d18</link>
      <guid>https://dev.to/fx/fxexchange-functionlands-dag-exchange-protocol-4d18</guid>
      <description>&lt;p&gt;Every piece of information in the Functionand Data Protocol is encrypted and shielded before it leaves your device. That's how we do things and we wouldn’t have it any other way. But how does it all work? What's really going on when you take a photo and store it on &lt;a href="https://dev.to/fx/google-photos-open-source-alternative-with-react-native-80c"&gt;FxFotos&lt;/a&gt; app, or save your notes in &lt;a href="https://dev.to/fx/ditching-net-and-finding-faith-again-after-10-years-4d7b"&gt;FxFiles&lt;/a&gt;? &lt;/p&gt;

&lt;h2&gt;
  
  
  The scene
&lt;/h2&gt;

&lt;p&gt;In a typical Web 2 setup, information produced by the user is uploaded to a centralized server. This information is typically encrypted on transit, but often stored on the server side unencrypted. In cases where it is encrypted at rest, the server administrators, operators or app developers often have access to the unencrypted user's data.&lt;/p&gt;

&lt;p&gt;That doesn’t sound good, does it? But wait: it gets worse. Aside from accessibility, the integrity of the data itself is typically not verified. For example, there is nothing that can stop an administrator from changing a pixel from red to maroon in a picture that the user has taken and uploaded onto a centralized server. Web 2 has no inherent mechanism safeguarding users from data tampering or alteration.&lt;/p&gt;

&lt;p&gt;In a decentralized web, information is stored differently. The data is divided up into interlinked smaller pieces that typically make up a Directed Acyclic Graph (DAG) with pieces scattered across multiple peers. The use of the word "peer" is intentional. Unlike servers, peers are “corporate” in the truest sense of the word: they are united to work together as a single entity. Typically peers share equal responsibilities and importance. Each piece of individual data is verifiable: it is identified by its cryptographic hash and linked to other pieces that are also identified by their cryptographic hash. The thing about cryptographic hashes is that while they are very, very sensitive to changes in data, if given the same data they will always return the same hash. This means if the data is addressed by its hash, then we should get the exact same data. Having asked for data by its hash, the receiver can calculate the hash after having received the data and compare it with the original hash they were looking for.&lt;/p&gt;

&lt;p&gt;This property is at the heart of a decentralized web; it is a simple yet powerful property that allows much more powerful concepts to be built up on top. Data in the decentralized web is not always encrypted, but it could easily BE encrypted. Today this aspect combined with built-in verifiability features has fostered a fundamental rethinking of data ownership, sovereignty and privacy.&lt;/p&gt;

&lt;p&gt;At this point it’s fair to ask: But does all of this dividing, hashing and interlinking make things more complicated to work with? After all, an app that doesn’t work is no app at all! Photos need to get stored, files need to get archived, and notes need to get saved.&lt;/p&gt;

&lt;h2&gt;
  
  
  FxExchange Protocol
&lt;/h2&gt;

&lt;p&gt;Enter FxExchange Protocol: Functionland's bread and butter when it comes to DAG exchange. FxExchange is part of the Functionland Data Protocol: given a DAG, the protocol’s job is to quickly and efficiently shift it from one point to another. At its core, the Functionland Data Protocol uses &lt;a href="https://github.com/wnfs-wg" rel="noopener noreferrer"&gt;Web Native File System (WNFS)&lt;/a&gt; to store your files.&lt;/p&gt;

&lt;p&gt;WNFS offers a familiar lens through which to deal with data: UNIX file system files and directories, while at the same time offering a way to encrypt and obfuscate it all into a nifty thing called the “Dark Forest.” (And yes, that’s as cool as it sounds!) As the user interacts with a virtual drive of files and directories, the entire data is encrypted and transformed into a DAG, the shape of which has no resemblance to the original directory structure. This DAG is then sent into the Functionland network for sharing and backup. No-one, except for the original user, can decipher the DAG or see metadata about the original, user-created files or directories.&lt;/p&gt;

&lt;p&gt;It also goes without saying that data integrity is preserved by the good old fashioned hashing not only in its encrypted form, but also in its unencrypted form at the originating device.&lt;/p&gt;

&lt;p&gt;As soon as one such DAG is generated, the app signals to Functionland’s Data Protocol to sync it to Blox for backup. This is where FxExchange takes over.&lt;/p&gt;

&lt;p&gt;FxExchange is built on top of the vanilla GraphSync protocol: a simple protocol for exchanging DAGs over &lt;a href="https://libp2p.io/" rel="noopener noreferrer"&gt;libp2p&lt;/a&gt;. It is heavily used by FileCoin Network through another protocol called Data Transfer for exchanging data. In addition, it natively understands DAGs represented in &lt;a href="https://ipld.io/" rel="noopener noreferrer"&gt;IPLD&lt;/a&gt;. This allows the use of sweet IPLD features - &lt;a href="https://ipld.io/specs/selectors/" rel="noopener noreferrer"&gt;Selectors&lt;/a&gt; are just one example…but we’ll be taking a look at those in another blog post. (Stay tuned for more!) To learn more about GraphSync, take a look at &lt;a href="https://github.com/ipfs/go-graphsync/blob/main/docs/architecture.md" rel="noopener noreferrer"&gt;this&lt;/a&gt; document.&lt;/p&gt;

&lt;p&gt;FxExchange introduces specific features to control the DAG exchange; namely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;authorization of exchange between two or more libp2p peers&lt;/li&gt;
&lt;li&gt;authorization management APIs&lt;/li&gt;
&lt;li&gt;push or pull information to/from libp2p peers&lt;/li&gt;
&lt;li&gt;a thin mobile client implementation compatible with &lt;code&gt;gomobile&lt;/code&gt; for use in mobile apps&lt;/li&gt;
&lt;li&gt;sync only the absent fraction of a DAG, thanks to IPLD selectors, and finally&lt;/li&gt;
&lt;li&gt;manage multiple WNFS drives that may belong to different users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using libp2p as the underlying transport allows FxExchange to continue to function, even in the face of poor connectivity. It also allows FxExchange to opportunistically select the best path for exchanging bytes depending on a given environment. Thanks to built-in support for NAT discovery and Hole Punching built natively into libp2p, FxExchange is able to function on pretty much any network independent of centralized servers. In cases where direct connection is not possible, FxExchange uses the latest libp2p relay feature to transitively connect through other peers in the network.&lt;/p&gt;

&lt;p&gt;The control APIs in FxExchange use HTTP-compatible wire protocol for extensibility, sent and received over libp2p go-stream. This offers a familiar interface to developers who wish to extend the FxExchange features, given that most developers are deeply familiar with the HTTP protocol. Concurrently, it enables developers to swap libp2p for vanilla HTTP should the need arise. (This can be useful in cases where FxExchange has to sit behind pre-existing HTTP routing systems.)&lt;/p&gt;

&lt;p&gt;FxExchange protocol works hand-in-hand with the FxBlockchain protocol to deliver Blockchain-Attached Storage (BAS) with privacy built right into its core. Stay tuned for future blog posts as we dive deeper into the exchange and blockchain interaction!&lt;/p&gt;

</description>
      <category>gratitude</category>
    </item>
    <item>
      <title>Ditching .NET and finding faith again after 10 years!</title>
      <dc:creator>Keyvan M. Sadeghi</dc:creator>
      <pubDate>Tue, 13 Dec 2022 14:05:43 +0000</pubDate>
      <link>https://dev.to/fx/ditching-net-and-finding-faith-again-after-10-years-4d7b</link>
      <guid>https://dev.to/fx/ditching-net-and-finding-faith-again-after-10-years-4d7b</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; &lt;em&gt;.NET MAUI&lt;/em&gt; is a dope multiplatform stack and may well be the perfect candidate for your next app. Don’t dismiss it because it’s &lt;em&gt;“Made in Microsoft.”&lt;/em&gt; You can check out &lt;a href="https://github.com/functionland/fx-files"&gt;Fx Files&lt;/a&gt; as a testimonial to its interop with JS, and the general new .NET direction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My way or the highway!&lt;/strong&gt; That's the prevalent mantra in Big Tech. Even from the grave, Steve Jobs’s guideline of &lt;em&gt;“Be Incompatible!”&lt;/em&gt; is haunting us to this day — when we have a guest over and they can’t charge their phone with our cable! Worse yet, there’s always a &lt;strong&gt;“cult”&lt;/strong&gt; of followers, belittling others who don’t fall in line under the same banner, constantly pointing out tech flaws from the other side, and they are so susceptible to confirmation bias from their peers. The same toxic pattern can sometimes be found in developer circles too.&lt;/p&gt;

&lt;p&gt;Microsoft was no different under Steve Balmer (nor Gates). I should know because I was a die-hard &lt;em&gt;&lt;strong&gt;Microsheep&lt;/strong&gt;&lt;/em&gt; up until 2012 🙈. You had the &lt;em&gt;Microsoft Universe&lt;/em&gt; to drown in, and to be fair it was quite compelling! Don’t you pity those poor backwards fellas who have to open a terminal to do the simplest things? Need an IDE? Behold the mighty &lt;em&gt;Visual Studio&lt;/em&gt;! Need UI? Here you have &lt;em&gt;WPF&lt;/em&gt;, putting the frontier of UX dev at your fingertips! And it’s all drag and drop, with seamless codegen that you can witness live! Also bear in mind, &lt;em&gt;REAL&lt;/em&gt; software runs exclusively on Windows, do you know of a single enterprise app that’s elsewhere?&lt;/p&gt;

&lt;p&gt;Time would prove all wrong, but back then these arguments seemed sound.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Microsoft is a fear factory. Oh, your team is still not Agile? You have to use our software suite that gives MANAGEMENT measurable VISIBILITY on what happens in your org!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;During my studies, classmates were doing their homework in spaghetti C, while I swaggered by and showed off my shiny C# class diagram and glorious WinForms UI! I had a date with destiny though. The first job I landed was at a research lab in Hong Kong. Had a 2-week deadline to deliver a library written in Python, running on Linux, neither of which I’d ever touched! No longer did I have the luxury of being like “Pff, this weird shitty open-source stuff again!” The date was set and I needed to push my code into this other weird thing: GitHub. Thus began my journey. In the decade since, I delved deep into all that open-source stuff, convinced every employer to &lt;a href="https://www.npmjs.com/~keyvan-m-sadeghi"&gt;publish pieces of my work&lt;/a&gt; as open-source, ditched languages and frameworks left and right, and learned to be loyal to nothing if not innovation!&lt;/p&gt;

&lt;p&gt;Given this history, I was highly skeptical when my friend &lt;a href="https://dev.to/mehrandvd"&gt;mehrandvd&lt;/a&gt; pitched me .NET for development of our next app. We had, one might say, &lt;em&gt;unrealistic&lt;/em&gt; expectations: a &lt;strong&gt;File Manager&lt;/strong&gt; that runs on Android, iOS, Windows and macOS. It should handle local file operations like copy, rename, etc., as well as utilities like thumbnails, zip extraction and in-app file viewers. The same UI, we decided, should have another tab where you browse your &lt;em&gt;“remote files.”&lt;/em&gt; These could be on any cloud provider, AWS S3 and such, or weirder places like &lt;a href="https://ipfs.tech/"&gt;IPFS&lt;/a&gt;. I.e. being &lt;em&gt;“Backend Agnostic.”&lt;/em&gt; A developer implements an interface, submits the pull request, and the provider shows up as another configurable “source” for your files. We also wanted interoperability between one’s local and remote files, things like syncing a local folder on a remote provider.&lt;/p&gt;

&lt;p&gt;Craziest of all, we wanted all these developed in just 3 months!&lt;/p&gt;

&lt;p&gt;And I kid you not, Mehran and the team delivered! They even managed to squeeze in extra features like code highlighting! Here’s a peek:&lt;/p&gt;

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

&lt;p&gt;Project on GitHub:&lt;br&gt;
&lt;a href="https://github.com/functionland/fx-files"&gt;https://github.com/functionland/fx-files&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here’s the app on Google Play and Microsoft Store:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=land.fx.files"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xhDXMT-n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/functionland/fx-files/main/docs/images/badge-play-store.png" alt="Fx Files on Google Play" title="Fx Files on Google Play" width="564" height="169"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apps.microsoft.com/store/detail/fx-files/9NXL9KB8FBQQ"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--riMdUmkR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/Get_it_from_Microsoft_Badge.svg/1024px-Get_it_from_Microsoft_Badge.svg.png" alt="Fx Files on Microsoft Store" title="Fx Files on Microsoft Store" width="880" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(iOS, Mac and remote file integration in an upcoming update.)&lt;/p&gt;

&lt;p&gt;MAUI’s appeal is abstracting away capabilities of different platforms under the same API. For our use case, as an example, we needed to talk with four different file systems. MAUI offers these as a unified &lt;a href="https://docs.microsoft.com/en-us/dotnet/maui/platform-integration/#storage"&gt;Storage API&lt;/a&gt;. Also in edge cases that require you to write platform-specific code, e.g. performance optimization for infinity scroll, you have the freedom to do so.&lt;/p&gt;

&lt;p&gt;Another aspect that surprised me was the way Microsoft has started to play fair with others. MAUI code can work in tandem with other languages and frameworks in your stack. This was a hard requirement for us, since our IPFS integration is a polyglot of Go, Rust, JavaScript and other upstream 🐉s I’m not aware of. This is so unlike the Microsoft I knew! After all, they were once famous for their &lt;a href="https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish"&gt;EEE strategy&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;A few more data points like MAUI and I may revert to Microsoft believer again! Pivoting the corporate culture at this scale is nothing short of astonishing. I salute Satya Nadella and everyone involved in this shift. Eager to see more!&lt;/p&gt;

&lt;p&gt;Your feedback is much appreciated as always. Hope to get acquainted with you in the comments section! ❤️&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>dotnet</category>
      <category>csharp</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Google Photos open-source alternative with React Native</title>
      <dc:creator>Keyvan M. Sadeghi</dc:creator>
      <pubDate>Thu, 03 Jun 2021 15:57:44 +0000</pubDate>
      <link>https://dev.to/fx/google-photos-open-source-alternative-with-react-native-80c</link>
      <guid>https://dev.to/fx/google-photos-open-source-alternative-with-react-native-80c</guid>
      <description>&lt;p&gt;Greetings fellow DEVs! You've probably heard the news about Google Photos becoming a paid service starting this month. We've been eying this date for a while and were preparing something that we think is kinda cool! Drumroll please... Photos UI partially implemented in React Native! Here's a peek:&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%2Fraw.githubusercontent.com%2Ffunctionland%2Fblog%2Fmain%2Fphotos-intro-dev-to%2Fphotos.gif" 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%2Fraw.githubusercontent.com%2Ffunctionland%2Fblog%2Fmain%2Fphotos-intro-dev-to%2Fphotos.gif" title="Box Photos" alt="Box Photos"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This implementation is backend-agnostic, you can fork the repo and implement an interface to connect it to your own backend! We're also working on an open-source p2p backend implementation, more on this later in the article.&lt;/p&gt;

&lt;p&gt;If you like what you see, there are ways you can help us take it to the next level:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Star the repo &lt;a href="https://github.com/functionland/photos" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;Join &lt;a href="https://github.com/functionland/photos/discussions" rel="noopener noreferrer"&gt;the discussions&lt;/a&gt;,
tell us what you think about where it needs to go from here.&lt;/li&gt;
&lt;li&gt;Contribute code! Photos is currently being maintained only by
&lt;a href="https://github.com/ehsan6sha" rel="noopener noreferrer"&gt;Ehsan&lt;/a&gt;, he's eager to welcome new collaborators!&lt;/li&gt;
&lt;li&gt;We have lots of cool things planned, including a Kickstarter campaign! &lt;a href="https://groups.google.com/g/functionland" rel="noopener noreferrer"&gt;Join the mailing list&lt;/a&gt;
to hear about all updates!&lt;/li&gt;
&lt;li&gt;We're actively seeking funding, if you can help with this in any way, please &lt;a href="https://www.linkedin.com/in/keyvanmsadeghi/" rel="noopener noreferrer"&gt;drop us a message&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;You can also follow us on
&lt;a href="https://twitter.com/functionland" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;,
&lt;a href="https://t.me/functionland" rel="noopener noreferrer"&gt;Telegram&lt;/a&gt; and
&lt;a href="https://www.youtube.com/channel/UCAyjxikGGQTcJvjrhZyYhpA" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is still at prototype stage and not ready for prime time, but we wanted to share early to hear your valuable feedback and hopefully have those of you who are interested join us to build a community around an ambitious yet noble goal:&lt;/p&gt;

&lt;h2&gt;
  
  
  Ending &lt;em&gt;Big Tech&lt;/em&gt;'s reign by building open-source &lt;strong&gt;p2p&lt;/strong&gt; apps!
&lt;/h2&gt;

&lt;p&gt;Making Photos paid? Really? Haven't Google already made billions by training AI models from our pictures and videos? Us &lt;a href="https://www.netflix.com/title/81254224" rel="noopener noreferrer"&gt;being the product&lt;/a&gt; was not enough, we should also pay now?&lt;/p&gt;

&lt;p&gt;I don't want to sound arrogant or ungrateful. Truth be told, I personally owe Big Tech a great deal! The very ability to write these words for example, I wouldn't know them if it wasn't for Windows (and me being a nerd)! And I was able to use Windows because a version of it existed that probably even Microsoft wasn't aware of: &lt;a href="https://www.shouldiremoveit.com/MRT-Windows-XP-Farsi-Interface-Pack-24170-program.aspx" rel="noopener noreferrer"&gt;MRT Windows&lt;/a&gt;! (MRT being the initials of the dude who created it)&lt;/p&gt;

&lt;p&gt;Being born into a country disconnected from the global economy, we didn't have legitimate access to software such as Windows, but &lt;em&gt;Mr. MRT&lt;/em&gt; had &lt;em&gt;BitTorrent&lt;/em&gt; and lots of blank CDs to cater us :) &lt;em&gt;p2p&lt;/em&gt; was the missing piece to the puzzle: although we had in effect &lt;em&gt;unwarranted access&lt;/em&gt; to Microsoft's &lt;em&gt;intellectual property&lt;/em&gt;, a whole generation of developers was raised thanks to (unlawful) democratized access to software. Instead of the stereotypic &lt;em&gt;Jihadists&lt;/em&gt; that the world expected, these people turned out quite civilized, some of them who moved abroad are now working for the Big Tech.&lt;/p&gt;

&lt;p&gt;A large population of US citizens, meanwhile, didn't (by enforced law) have free access to Windows. Those who ended up attacking the Capitol in January might've acted different had they been growing up with Windows as kids!&lt;/p&gt;

&lt;p&gt;Hopefully the above example conveys the importance of free access to software, free both as in speech and as in beer!&lt;/p&gt;

&lt;h3&gt;
  
  
  Does a workable solution for delivering and maintaining free software actually exist?
&lt;/h3&gt;

&lt;p&gt;Yes and no. There are architectural and operational issues. We can, however, arrive at a solution by refactoring to &lt;a href="https://medium.com/fabric-ventures/what-is-web-3-0-why-it-matters-934eb07f3d2b" rel="noopener noreferrer"&gt;&lt;em&gt;Web 3.0&lt;/em&gt;&lt;/a&gt;! It helps us address several challenges:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Servers are expensive, how to pay for them without charging the users?
&lt;/h4&gt;

&lt;p&gt;True, any application with enough users comes with a big monthly AWS bill. But why isn't this an issue for dev tools? We've had top notch UIs even for niche use cases such as &lt;a href="https://github.com/tannerlinsley/react-query-devtools" rel="noopener noreferrer"&gt;state management in a specific library&lt;/a&gt;. Duh! These don't need a server :) our dev machines &lt;strong&gt;are&lt;/strong&gt; the server for these tools. Hmm... developers have their own servers, right...&lt;/p&gt;

&lt;p&gt;What if users had their own &lt;strong&gt;"Personal Server"&lt;/strong&gt; too? This model has worked for &lt;a href="https://www.plex.tv/" rel="noopener noreferrer"&gt;Plex&lt;/a&gt; as an example, how about taking it one step further? Every house has a fridge for keeping food, would it make sense to also have a &lt;strong&gt;"store of data"&lt;/strong&gt;? This is the main idea here, there's a niche who already have PCs at home (PC gamers, people still keeping their old PCs, etc.), we can write software that turns a PC to a server for a household's data needs.&lt;/p&gt;

&lt;p&gt;In reality, the leverage that the Big Tech holds us hostage over is:&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%2Fraw.githubusercontent.com%2Ffunctionland%2Fblog%2Fmain%2Fphotos-intro-dev-to%2FPileHDD.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%2Fraw.githubusercontent.com%2Ffunctionland%2Fblog%2Fmain%2Fphotos-intro-dev-to%2FPileHDD.png" title="Pile of HDDs" alt="HDD pile"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For sure, serving the world population takes acres upon acres of data centers. But for a household? Wouldn't a Raspberry Pi and a few TB of HDD be enough? We can even package this in a gadget for it to be more appealing. We can also accommodate for Cloud features like reliable backups in this p2p setting, a copy of one's photos can be backed up at another location, e.g. parents' house.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Concept for personal server, aka &lt;strong&gt;"Box"&lt;/strong&gt;, read more on &lt;a href="https://fx.land" rel="noopener noreferrer"&gt;fx.land&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Ffunctionland%2Fblog%2Fmain%2Fphotos-intro-dev-to%2Fbox.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%2Fraw.githubusercontent.com%2Ffunctionland%2Fblog%2Fmain%2Fphotos-intro-dev-to%2Fbox.png" title="Box concept" alt="Box concept"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Doing both backend and frontend is hard
&lt;/h4&gt;

&lt;p&gt;Absolutely! We need to fix this. Google and the like have armies of developers working on each app, how can anyone compete? Don't fret! We can seek help from millions of frontend JavaScript developers around the world! They are already building all kinds of cool apps. Backend is not really an issue, many of them are well versed at using serverless cloud functions. So if we can provide the same &lt;strong&gt;"Developer Experience"&lt;/strong&gt;, can we have these brilliant people aboard?&lt;/p&gt;

&lt;p&gt;To address the need for backend, and also the limited compute power of the hardware that may be used, the solution that we're currently implementing is &lt;strong&gt;"Managed Services"&lt;/strong&gt;. For a start, we are developing 2 protocols on top of &lt;a href="https://libp2p.io/" rel="noopener noreferrer"&gt;libp2p&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;File Protocol&lt;/strong&gt;: for uploading and downloading files, this provides the function of a traditional file server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Protocol&lt;/strong&gt;: for persisting JSON data. This would be the Web 3.0 equivalent of REST or GraphQL endpoints. By linking the JSON data as &lt;a href="https://specs.ipld.io/block-layer/codecs/dag-json" rel="noopener noreferrer"&gt;DAG-JSON&lt;/a&gt; and saving it with &lt;a href="https://ipfs.io/" rel="noopener noreferrer"&gt;IPFS&lt;/a&gt;, we also get the conventional database-like queries.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Work on more managed services are on the way. We'll need &lt;em&gt;Machine Learning&lt;/em&gt; services for an app like Photos soon!&lt;/p&gt;

&lt;p&gt;These managed services are packaged in a JavaScript module, &lt;code&gt;@functionland/graph&lt;/code&gt;, so the complexities of what happens behind the scene is abstracted away for the app developer. They'll have an experience very similar to using serverless functions. Voila!&lt;/p&gt;

&lt;p&gt;This work is being pursued in the &lt;strong&gt;"box"&lt;/strong&gt; monorepo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/functionland/box" rel="noopener noreferrer"&gt;github.com/functionland/box&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3. If an app is open source, how can the developer make a living from it?
&lt;/h4&gt;

&lt;p&gt;This one is a long standing question in open source, and &lt;em&gt;Blockchain&lt;/em&gt; may finally give us an answer. It's ironic that prominent blockchains such as &lt;em&gt;Bitcoin&lt;/em&gt; have become somewhat centralized, true decentralization happens when average people run validator nodes. That's not the case today, but if there is a future where every home has a server, true decentralization can start! Newer generation blockchains are way less resource intensive, take &lt;a href="https://minaprotocol.com/" rel="noopener noreferrer"&gt;Mina&lt;/a&gt; for example, a snapshot of the whole chain will always be 22KB! &lt;/p&gt;

&lt;p&gt;So we can have home servers also be blockchain validator nodes, effectively printing money around the clock! We can then have a decentralized version of an &lt;em&gt;App Store&lt;/em&gt;, downloading and updating apps from this store can happen on-chain and be paid. But users won't be paying out of pocket, they'll pay with a portion of coins mined on their server (freedom tax :).&lt;/p&gt;

&lt;p&gt;This aspect is still very much at ideation stage, we'd love to brainstorm and hear what you think about it.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Would the User Experience be compromised in any way?
&lt;/h4&gt;

&lt;p&gt;If anything, UX will be improved. There is no privacy concern, users &lt;em&gt;physically own&lt;/em&gt; their data. There's no advertisement, no lock-in. And in open source, anything that has use cases also has a community of contributors around it. So no longer we'll see useful apps become adware (anyone remember &lt;em&gt;ShareIt&lt;/em&gt;?). No orphaned app stuck with last update from years ago. All the cool things that we developers enjoy in our open source workflow, now up for grabs by the masses in everyday apps!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Eagerly looking forward to hearing your comments! Please don't hesitate to bash the whole idea to the ground! We don't mind at all. Only in common wisdom shall we thrive, no one soul knows all, most definitely not the noobs who started this :) -- Love and peace, Functionland&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>showdev</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>reactnative</category>
    </item>
  </channel>
</rss>
