What does HackerNews think of filestash?
🦄 A modern web client for SFTP, S3, FTP, WebDAV, Git, Minio, LDAP, CalDAV, CardDAV, Mysql, Backblaze, ...
export default function(render) {
const $page = createElement(`
whatever here
`);
render($page);
$page.addEventListener("xxxx");
onDestroy(/* remove listeners */);
}
Yes I sort of had to write my own mini framework but it's well under 100 lines of codes [0] with the idea that maintaining that 100 lines of codes is gonna be a massive win compared to keeping up with any "modern framework" npm hellThe core idea is that instead of trying to pretend some cool ideas like HOC or render props, we call a dog a dog and say "decorator pattern" and just use the pattern directly [3] and when we need to compose things we do so as well [4]
ref:
- [0] the skeleton I started to settle on a nice API before starting the full rewrite https://mickael-kerjean.github.io/skeleton/example/index.htm...
- [1] original oss project which I'm migrating: https://github.com/mickael-kerjean/filestash
- [2] current state of the rewrite where you can see this pattern in action https://github.com/mickael-kerjean/filestash-rewrite/tree/ma...
- [3] https://github.com/mickael-kerjean/filestash-rewrite/blob/ma...
- [4] https://github.com/mickael-kerjean/filestash-rewrite/blob/ma...
generating thumbnails on the fly doesn't have to be slow. It can be slow and often is as most implementation would rely on something like image magick or similar tool but you can get several order of magnitude faster if you go deeper.
I've spent a lot more time than I would dare to admit on that exact topic while working on my OSS project (https://github.com/mickael-kerjean/filestash) and I figured you could build tailored tool in C that rely on say libjeg and leverage very low level tricks like DCT scaling to do things much faster. Typically in Filestash creating a thumbnail takes about 15ms for a picture taken from my camera and it doesn't make a raspberry pi to break a sweat.
```
interface IBackend {
ls(path) []file
cat(path) stream
save(path, stream)
rm(path)
mv(from, to)
mkdir(path)
}```
So I open source my work [2] as a result of that thought experiment. Almost 7k github star later, there's about 40k users who use my tool every month to access their FTP server, SFTP server, S3, WebdAV and more protocols and was contacted by people in places I would have never dream like NASA and MIT.
That project is a few order of magnitude more impact full than anything I've done in my professional life and I'm super excited to the prospect of developing the idea further as file manager are an amazing abstraction. My mum can navigate through folders and click on files but I would have a hard to time to explain her what a tree is and a lot of complex system can be model as simple file managers. A good example which was implemented in Filestash [3] is a relational database, the db can be modeled as different folders, tables as subfolders and rows as file which can be edited and save back which would under the hood simply generate a bunch of sql queries
There's still a lot to do but at this stage, it doesn't make enough money to make it a full time job yet.
I learned how to code from a massive rabbit hole that started in high school while trying to make myspace pages look nice
[1] https://news.ycombinator.com/item?id=8863
[2] https://github.com/mickael-kerjean/filestash
[3] https://github.com/mickael-kerjean/filestash/blob/master/ser...
Organice - https://github.com/200ok-ch/organice
org-web - https://github.com/DanielDe/org-web
Org Mode tools! - https://orgmode.org/worg/org-tools/index.html
Connect to a machine running emacs with an in browser terminal - https://xtermjs.org
Alternatively use ssh in an actual terminal instead of the browser.
This is the comment that got me onto thinking: "how awesome would it be to have a software capable of decoupling the UI from the actual storage" so you wouldn't be tied to one vendor and do so by implementing a simple programming interface [2]
I did open source my solution [3] and have refined it over the year with plugins that implement storage for any storage you could think of like SFTP, S3, Samba, WebDAV and many more. Most of the money is coming from enterprise who need help to join authentication, authorisation and storage in 1 complete solution to do things like SAML based SSO on S3, 2FA layer on a samba server, audit capabilities, ....
The part i'm super proud of is it feel faster to browse Dropbox from my app than it is from Dropbox itself [4]
[1] https://news.ycombinator.com/item?id=8863
[2] https://github.com/mickael-kerjean/filestash/blob/a91df1637d...
[3] https://github.com/mickael-kerjean/filestash
[4] the technic that's used consist in caching the list of files/folder in indexDB and render the content of a folder with the data coming from indexDB first then refresh it with the new data essentially making a visit to an folder you've seen before be instant without any loading whatsoever. It's very simple but it seems nobody else is doing it
[1] https://github.com/mickael-kerjean/filestash
[2] https://www.mysqltutorial.org/mysql-sample-database.aspx
Does this ever happen? I was contacted by a F500 who needed some custom version of my open source project (https://github.com/mickael-kerjean/filestash). 25k sounds unreal but hey I have no experience in purchasing enterprise grade software and it's not simple to find actual figures so I was aiming at making an offer at 2.4k/month. Is it a rock bottom figure in enterprise grade software?
1. a cronjob on my android phone (via termux) does an rsync to a VPS
2. the VPS has a cronjob to sync everything with S3
3. the frontoffice tool for people to access those photos is my open source Dropbox like frontend that is bring your own backend: https://github.com/mickael-kerjean/filestash My wife and I got an account and family members can access it through shared links.
The S3 bill goes to a shared account so that If I die, the VPS will probably be quickly removed but S3 should stay in there with my wife paying for it.
FTP is amazing on so many perspective. About a month ago, I crawled the entire IPv4 range looking for anonymous FTP and found about 200k of them. As I wanted to publish the results and provide a way to get through those servers, I ended up building crawlers but quickly stopped as the sheer amount of movies, series, music I found would have been more problems than it's worth.
I made that cool frontend for FTP server with an interesting twist as I've abstracted:
1. the backend storage: meaning it connects to a wide range of existing storage like FTP, SFTP, S3, Dropbox, ...
2. the authentication layer: meaning you can use your own identity provider to put your S3 buckets behind your corporate SSO
3. the authorization layer to create business rules
At its core, the software is a framework to develop file manager like web applications by implementing a simple interface (https://github.com/mickael-kerjean/filestash/blob/f7a4e52703...). This does enable all sort of interesting use case. For example, the mysql implementation shows database name as first level folder, tables as second level folders and each row in a table is shown as a file within the table folder which a user can edit directly through the generated form built from the schema information. That way people who are used to the Dropbox interface can edit the database directly, create shared links, search through stuff without having to know about sql
Most of the money comes from companies who needed various degree of customisation and support or didn't want to host on premise.
To see the nyan cat moving around your screen, you got to throttle the bandwidth: https://demo.filestash.app/
Pages can be exported in a wiki that is rendered dynamically by emacs like this: https://demo.filestash.app/api/export/hn/text/html/emacs.org or if you prefer pdf: https://demo.filestash.app/api/export/hn/application/pdf/ema...
The code is on github: https://github.com/mickael-kerjean/filestash
[1] https://github.com/mickael-kerjean/filestash
[2] https://www.filestash.app/img/illustration/filestash-framewo...
[3] https://github.com/mickael-kerjean/filestash/blob/cddbcfc6d1...
The landscape of tools supposed to solve that problem isn't great. Things are changing way too fast with projects being archived or deprecated with mention to migrate to another solution which after another year is deprecated again. Because of those issue, I've went with go generate which isn't ideal but is at least stable. That proposal would be a game changer and hopefully it will become a reality as Brad is quite a prominent figure in the Golang world.
- Filestash: https://github.com/mickael-kerjean/filestash => demo: https://demo.filestash.app/login?next=/view/Documents/gettin... (I made this one)
- Orgzly: https://github.com/orgzly/orgzly-android
- Organice: https://github.com/200ok-ch/organice
- Org Web: https://github.com/DanielDe/org-web
Emacs is undoubtedly the rolls royce but the ecosystem is thriving
I built exactly this. The idea was to make databases look and feel like a file manager where databases are shown as folder, tables as subfolders and rows are shown as files that once open shows a fully editable form that look like this: https://archive.kerjean.me/public/2020/screenshot_20200117_2... It understands foreign keys and create relevant links to easily navigate through. The entire code is there: https://github.com/mickael-kerjean/filestash
That's surprising, I did solve the same problem for my org-mode client (https://github.com/mickael-kerjean/filestash) but using the full text search capabilities of sqlite. I was amazed by its performance, not sluggish at all and could handle anything I'd throw at it, especially with a number of files that doesn't go much above the thousand. Here is what the code look like from a sqlite perspective: https://github.com/mickael-kerjean/filestash/blob/f5f0f30cea...
It can create entire wikis by rendering documents in many formats: For example:
- HTML: https://demo.filestash.app/api/export/hn/text/html/emacs.org
- PDF: https://demo.filestash.app/api/export/hn/application/pdf/ema...
- markdown: https://demo.filestash.app/api/export/hn/text/markdown/emacs...
- txt: https://demo.filestash.app/api/export/hn/text/plain/emacs.or...
...
Also, the document shown here is coming from this github repo: https://github.com/mickael-kerjean/nuage_org_demo and the app itself is free software: https://github.com/mickael-kerjean/filestash