What does HackerNews think of share-file-systems?

Use a Windows/OSX like GUI in the browser to share files cross OS privately. No cloud, no server, no third party.

Language: TypeScript

I wrote a similar concept around private internet access to your file system. It’s at https://github.com/prettydiff/share-file-systems

The window and state management can be demoed on my personal site at https://prettydiff.com

If you need to perform real time messaging between two servers use either RPC or WebSockets. These are bidirectional messaging in binary without a round trip or large plain text header. What the data is, where it comes from, or how its generated is completely irrelevant to the transmission.

I have a Node.js app written specifically for this scenario. You can try my app to see if it solves for your use case. It is designed right now to support file system streaming, text messaging, status messaging, and so forth. It can be supported to messaging anything you need. Remote instruction execution will require more effort for security reasons.

https://github.com/prettydiff/share-file-systems

File sharing and soon remote execution over the internet cross OS. Private and no servers.

https://github.com/prettydiff/share-file-systems

Location: Fort Worth, TX, US / Remote

Remote: Yes, Hybrid

Willing to Relocate: No

Technologies: TypeScript, Node.js, CSS, HTML, XML, WCAG, Test Automation, SQL

Resume: https://github.com/prettydiff

Email: [email protected]

15 years experience with JavaScript, 6 years experience with TypeScript. I am currently writing a Node based OS in TypeScript to solve for decentralization (not Web3): https://github.com/prettydiff/share-file-systems

I understand performance aggressively enough far beyond the comfort of most developers: https://github.com/prettydiff/wisdom/blob/master/performance...

I started a JS based file sharing application a few years back. It started as a thought experiment of just exposing the file system to the browser in a familiar OS kind of user interface. As new features are added over time it has become more like a high level OS.

https://github.com/prettydiff/share-file-systems

Some architectural decisions I made:

* Micro-service based

* I am now using WebSockets for all services and communication. That has proven in the application to be 7x faster than HTTP.

* I have a universal format wrapping all service messaging, kind of like sending a letter in an envelope. This allows me to using a single service end point for all services and a single means of service monitoring.

* I did not like the existing test automation solutions based upon CDP, because they are too slow and fragile. Also, they do not provide support for a peer-to-peer experience. So I wrote my own test automation solution for testing in the browser and its much faster and predictable.

* I am using an identity based authentication mechanism to restrict access to known users/devices.

* I just write to the file system instead of using a database for data storage. This allows for much faster application start up times and lowers complexity. The performance difference is insignificant after accounting for that in most cases opening a file is more costly than arbitrarily writing to the file system.

* I figured out how to install certificates using automation in both Windows and Linux which allows me to run the application using encrypted transmission protocols (https/wss) on localhost.

I am playing around with a file system tool that’s rapidly becoming mor of an operating system. I am pretty happy with the organization. Please feel free to play around with it: https://github.com/prettydiff/share-file-systems
I've never seen an example of this where the developer has actually managed to make their codebase more concise, understandable, testable, extensible, or more robust.

This is almost purely functional but makes no attempt to look like anything other than JavaScript and just about everything is identifiable to profilers and covered by some form of test automation.

https://github.com/prettydiff/share-file-systems

I am working on a Node/browser OS in TypeScript to solve for decentralization/peer-to-peer relations if you want to check that out.

https://github.com/prettydiff/share-file-systems

Selling points:

* No frameworks and minimal dependencies

* The GUI loads in the browser with full state restoration in about 260ms in Chrome.

* Full peer to peer file system access

* Original WebSocket service support faster than the popular NPM packages (ws, socket.io)

* Peer-to-peer end-to-end test automation in the browser that is faster and easier than the big browser test automation applications (puppeteer, playwrite)

* I am currently working on a streaming command terminal for the browser for support for for things like vim and irssi. The current experimental terminal only supports basic command input/output

I use a simple 4 point system for state management:

https://github.com/prettydiff/wisdom/blob/master/state_manag...

I use it for an OS GUI here which fully loads in 200ms in Chrome (300ms Edge):

https://github.com/prettydiff/share-file-systems

When simple things, like state management, become complicated they are either over engineered or poorly planned.

I use end to end testing my node application. The interface is in the browser so for me testing must mean doing what the user can in the browser. That also means progressively altering the interface one test at a time.

You can try out how I do it if your are interested. The application is at:

https://github.com/prettydiff/share-file-systems

The test command is:

    share test_browser
I wrote my own OS in a browser based upon network shared file systems via a privacy model but I haven’t figured out kind of a business model for it.

https://github.com/prettydiff/share-file-systems

I am trying to think of where to take it next. Possibly integrate something like VLC for media playback or allowing users to install applications. I don’t really know what users would want from something like this.

I am writing a Node based P2P and messaging app for privacy. It’s mostly for linking personal devices as a single shared file system but it also has a security model for restricted sharing between trusted friends.

https://github.com/prettydiff/share-file-systems

The application concept is difficult to explain so I have started calling it an operating system as the application is getting larger.

I wasn’t aware of capacitorjs.

https://capacitorjs.com/

I will look at using that as a means to bring my Node based OS to IPhone and then problem solved.

https://github.com/prettydiff/share-file-systems

These frameworks spend a tremendous effort trying to solve ridiculously simple problems. The most obvious example is state management. Here is how I solve for state management in a few easy steps:

https://github.com/prettydiff/wisdom/blob/master/state_manag...

With that approach I can have full state restoration on a full OS GUI running in the browser that loads in 0.3 seconds with state fully restored:

https://github.com/prettydiff/share-file-systems

Done: https://github.com/prettydiff/share-file-systems

The hate for large frameworks is warranted by their poor performance and bloat while struggling to achieve simple objectives in the most challenging ways.

Try looking at my personal project: https://github.com/prettydiff/share-file-systems

* Vanilla JS (TypeScript) with tiny HTML and CSS. No frameworks and no unnecessary abstractions.

* A full OS like GUI

* Solves for decentralization

* Provides a script to toggle between support for Node’s CommonJS and standard ECMA module systems

* Easy state management that works better than anything from a large framework

* Super fast. Written for extreme performance. For example the file system search is faster than file system search from the native OS. Page loads with full state restoration in less than 0.3 seconds.

* Fast build and language compile. The full build task takes less than 3 seconds.

* Original WebSocket implementation for better performance and safety with a smart message queue

* Automated documentation management

* Fast test automation with an original test automation solution. Most of the end to end tests executing in the browser executes in about 6.5 seconds for about 280 assertions.

* The node side of the application is command driven from the terminal with interactive command documentation

Feel free to open a GitHub issue if you have any questions or would like to learn more about how I try to solve any kinds of technical challenges.

https://github.com/prettydiff/share-file-systems

That is my application that creates an OS GUI in the browser. Plenty of features with o framework.

* Code size (on the front-end) 2mb unminified.

* Load time in the browser (including state restoration) about 120ms.

* The first version took 15 days to write from scratch.

When people claim there MUST be a framework its clear they have no idea what they are talking about. It is clearly a case of Dunning-Kruger effect where they can compare their experience with frameworks on one hand... and they have nothing to compare it to, because its all they know.

I am trying to solve for decentralization using file systems cross-OS as the primary design target. I chose the file system because it has a lot of complexity built in. If I can nail this I can decentralize anything.

I am passionate about this, because decentralization is the most liberating online experience. Share anything, in any way, to anybody of your choosing without third party restrictions, their privacy violations, and no weaponizing of your data/content for any purpose.

https://github.com/prettydiff/share-file-systems

I wrote a full Windows like GUI as close as possible to the standards for best case performance.

https://github.com/prettydiff/share-file-systems

I am currently working on this.

https://github.com/prettydiff/share-file-systems

The application inverts the web.

The application is written in TypeScript/Node but that’s not what’s most important. Most important is an understanding of services and distribution cross OS. My current hurdle is isolating service processing from network handling such that the service become protocol/scheme independent.

I started with the file system then I built a text messaging component and now I am working on video calls. Next I want to work on application distribution such that you can execute applications on your remote devices from the local GUI that the stdin from the callbacks allows for distributed task orchestration that non technical people can arrange.

> When you create a web based offline first app, you cannot store data directly on the users filesystem. In fact there are many layers between your JavaScript code and the filesystem of the operation system.

Solved: File system in the browser plus network distribution - https://github.com/prettydiff/share-file-systems

A fully event driven service based application I wrote that matches file system interaction to peer to peer networking:

https://github.com/prettydiff/share-file-systems

You can retool the GUI I wrote. The application is large but the GUI part is a single small file. It’s really just a single function with other supporting functions for events and a data model.

https://github.com/prettydiff/share-file-systems

No frameworks, dependencies, or other bullshit. The primary content is file system output but there are a bunch of different window types each supporting different content.

Documentation https://github.com/prettydiff/share-file-systems/blob/master...

I am working on peer to peer serverless media sharing and chat application that works in the browser.

https://github.com/prettydiff/share-file-systems

I am thinking about adding screen capture/video sharing and file system synchronization

This application has already done wonders for automation across my home network, but it seems there is no interest in the idea.

If you would like to help with an alternative I plan to add syncing as a new feature to my networked file system application soon. The application is already cross OS and feature a familiar GUI and fully recursive directory hashing with ignore lists (ignore lists are only available using terminal commands at this time).

It seems like synchronization is the next logic step and I could really use feedback and testing from interested users. The application is available at https://github.com/prettydiff/share-file-systems

I would love for syncing to occur upon changes in real time as opposed to timed intervals like a cron job.

https://github.com/prettydiff/share-file-systems

40k loc. I wrote an ESLint rule to error on this in both statements and expressions.

I am working on something like that please feel free to play around with it or contribute.

https://github.com/prettydiff/share-file-systems

I discovered Quobyte today thanks to this comment. I am extremely excited to start exploring your technology.

I am also working on a networked file system solution. My approach is likely fundamentally different. Instead of a single file system to represent file system artifacts across various devices I am using a single simplified data model as an abstraction for all file systems and pairing that with a new security/identity scheme. The idea is to solving for file asset distribution using point-to-point solutions that don't compromise security or privacy.

https://github.com/prettydiff/share-file-systems

I suspect your approach is likely far more stable as I am still working out the kinks in my models, but I supply a complete GUI in the browser that works the same in all browsers on all modern OSs.

I am working on securely opening personal storage across the internet with a point-to-point app that also lets you selectively open parts of your file system to other users.

I just proved out the application’s security model yesterday in my test automation. Once I finish the messaging subapp I will bump it to version 0.1 for public beta, but you can play with it now on your home network.

https://github.com/prettydiff/share-file-systems

Privacy focused point-to-point social media starting with the file system. https://github.com/prettydiff/share-file-systems
I noticed a link for distributed/peer-to-peer. https://github.com/arewedistributedyet/arewedistributedyet

I am working on a Node/browser app that solves for this. The idea is to invert the web, which is inherently public, and you get an experience that’s inherently private. With privacy you can do things that aren’t possible or healthy on the public web.

It works out of the box if both end points are IPv6 but IPv4 will require some additional service support to work outside of private networks, due to NAT.

The application is currently just a file sharing tool but soon it will have a text message component. It’s about to achieve fully distributed test automation in the browser, which is a necessary maintenance tool to test the application using user events and DOM navigation across multiple computers for distributed end-to-end tests. If I modify the architecture of the application to support loading and unloading of external components then the application becomes a micro operating system, but this requires many security considerations I have not explored.

https://github.com/prettydiff/share-file-systems

Please keep in mind this application is highly experimental.

Yes. Reinventing the wheel in this case is far less work than it sounds. You aren't really reinventing anything. Here is my current project where everything is vanilla.

* Code: https://github.com/prettydiff/share-file-systems

* Demo: http://mailmarkup.org/sharefile/demo1.mp4

The video demo is a few months old now, but in the current code I have broken network sharing during a refactor. The GUI and local file system still work well though.

I started learning JavaScript in 2008. Back then the popular validation tool was JSLint whose motto is: JSLint will hurt your feelings. The idea is that under the sloppiness of the language there was a polished gem of rapid expression. I didn't really figure out the language, though, until I started writing personal tools during my second military deployment in 2009.

My recommendation for learning this language is to forget all the books and helpful guides. Just build something. Here is a good reference of the standard methods: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...

Of that reference list the most immediately important areas are: Array and String.

My personal recommendation for really embracing this language are to learn and master scope in the language. Don't mess around with class, prototypes, inheritance, new, or this until after you have built at least one tool in the language. Most people coming into this language jump in expecting to program in the style of some former language only to be disappointed that JavaScript is not in fact their former language.

My second personal recommendation is to gain confidence around the expressiveness of functions in this language. Functions are first-class objects, which means they can be used anywhere a primitive type can be used. https://developer.mozilla.org/en-US/docs/Glossary/First-clas...

Perhaps the most important thing to learn for any language is data structures. If you have a solid understanding of data structures you can bend any algorithm to your will.

You mention not learning any APIs, but there are two exceptions you should make in order to better understand the language.

* DOM - If you are learning JavaScript in the browser I recommend learning the DOM. I mean the standard imperative DOM methods from the DOM specification. The DOM is a tree model of nodes where each node knows its place in the tree relative to its peers. By appreciating the nature of those fluid relationships you can do incredible things with little effort that execute incredibly fast. I built a complete GUI in the browser in just over 2 weeks that executes as fast as the OS's GUI because I had an understanding of the DOM. Here is the video demo: http://mailmarkup.org/sharefile/demo1.mp4 and code: https://github.com/prettydiff/share-file-systems

* Nodes fs library - If you are learning JavaScript on the terminal with Node.js I recommend learning Node's fs library methods. The file system is also a tree model comprised of nodes that can be walked very quickly.

After you have built one or more tools in this language you will independently learn to appreciate the conventions in this language that best suit your personal programming styles.

I ran this against a file sharing application I am working on and the results were strange. Security features were supremely emphasized, even security concepts I didn’t realize I was focusing energy on. I am not saying the tool is wrong, but just that it picked security better than I had intentionally considered. No other features were highlighted though, so you still have no idea what the application is doing.

https://github.com/prettydiff/share-file-systems

https://github.com/prettydiff/share-file-systems/

I would love to get some feedback.

Some notes:

* Currently it uses IP addresses for connection, which is less than ideal.

* Currently every device is treated as a separate user.

Road map:

* I am working on a web service that will issue named accounts and digital certificates. The named accounts will identify their current IPv6 address to the account service so users need only to connect to an account which can be any IPv6 address for portability.

* Once accounts are a thing I will need to change several things on the client application. My goal in this step is to separate users from devices so that a single user can connect and manage multiple devices. That extra layer of abstraction will allow options for management, security, and convenience that are not currently available.

* I also want to enable end to end encryption for all users/devices. That is just a simple matter of public key exchange built into the already designed invitation model.

* Then I want to create a text client that supports markdown.