samizdat issueshttps://0xacab.org/rysiek/samizdat/-/issues2020-09-18T00:08:22Zhttps://0xacab.org/rysiek/samizdat/-/issues/2Consider implementing an IPNS+IPFS plugin2020-09-18T00:08:22ZMichał "rysiek" WoźniakConsider implementing an IPNS+IPFS pluginThis seems... saner than Gun? https://github.com/ipfs/js-ipnsThis seems... saner than Gun? https://github.com/ipfs/js-ipnshttps://0xacab.org/rysiek/samizdat/-/issues/4Consider implementing WebTorrent alongside IPFS2020-09-15T23:50:39ZMichał "rysiek" WoźniakConsider implementing WebTorrent alongside IPFSThis seems usable:
- https://webtorrent.io/docs
- https://github.com/webtorrent/webtorrent
Importantly, it is possible to fetch a particular file from a torrent. So, Gun could store the `magnet:` link of the latest torrent, and WebTor...This seems usable:
- https://webtorrent.io/docs
- https://github.com/webtorrent/webtorrent
Importantly, it is possible to fetch a particular file from a torrent. So, Gun could store the `magnet:` link of the latest torrent, and WebTorrent would be able to fetch only the files relevant to a given pageview.https://0xacab.org/rysiek/samizdat/-/issues/5[Design Discussion] Switch to keeping a single IPFS directory address in Gun?2020-07-07T09:39:56ZMichał "rysiek" Woźniak[Design Discussion] Switch to keeping a single IPFS directory address in Gun?Apparently IPFS is pretty smart about modified resources:
```
root@628dd289a8e6:/tmp# /node_modules/go-ipfs/bin/ipfs --api=/ip4/$( getent hosts ipfs | cut -d ' ' -f 1 )/tcp/5001 add -r ipfstest/
added QmNRxNyFAN3aW61qsyRUhZnKMPNAoHy91kt...Apparently IPFS is pretty smart about modified resources:
```
root@628dd289a8e6:/tmp# /node_modules/go-ipfs/bin/ipfs --api=/ip4/$( getent hosts ipfs | cut -d ' ' -f 1 )/tcp/5001 add -r ipfstest/
added QmNRxNyFAN3aW61qsyRUhZnKMPNAoHy91ktLtLfgEzJJm8 ipfstest/test1
added QmZNhZXeejz1nebssQVoLZptgYcyseaLPyTgNTvDo6YmYt ipfstest/test2
added Qmdb1FxJVBXK9rffNxMzPefczQeGByiui42eoEn4HzXUxc ipfstest/testdir1/test3
added QmXHm5fQ6jH6UbFGhrYpV4UYJSBisrkyt69oB61U9iXhnw ipfstest/testdir2/test4
added QmbasMx71y9VqF7Gu5cSR1LSUVjzVsZ6kv8Q84fk1wornH ipfstest/testdir2/test5
added QmQ21HkVtgHj6Q5fkM2JNsHxvUsyBc2QXoP4YsNXsFuKc3 ipfstest/testdir1
added QmazcfxeFukkyano7wtHUMzV5WiongVNfkj7oioD84uMbf ipfstest/testdir2
added QmR5aQS6eTUKm4YCCqtxgrtvGwopxHycHZZgCPoKNKmRcc ipfstest
145 B / 145 B [=====================================================] 100.00%
root@628dd289a8e6:/tmp# date > ipfstest/testdir2/test5
root@628dd289a8e6:/tmp# date > ipfstest/testdir2/test6
root@628dd289a8e6:/tmp# date > ipfstest/test2
root@628dd289a8e6:/tmp# /node_modules/go-ipfs/bin/ipfs --api=/ip4/$( getent hosts ipfs | cut -d ' ' -f 1 )/tcp/5001 add -r ipfstest/
added QmNRxNyFAN3aW61qsyRUhZnKMPNAoHy91ktLtLfgEzJJm8 ipfstest/test1
added QmQbrS4tGuaqJxzJ1ZQBjgJVYqSaaM74v1CvJ1mK87S5TV ipfstest/test2
added Qmdb1FxJVBXK9rffNxMzPefczQeGByiui42eoEn4HzXUxc ipfstest/testdir1/test3
added QmXHm5fQ6jH6UbFGhrYpV4UYJSBisrkyt69oB61U9iXhnw ipfstest/testdir2/test4
added QmUsijQuChQJqq1381XQp7va1aBAf1GebWSCLht756nAY4 ipfstest/testdir2/test5
added QmcYwvzgsy3ceJv4KAKRW4PXmUbuJEWTVsgu8upU4n88j4 ipfstest/testdir2/test6
added QmQ21HkVtgHj6Q5fkM2JNsHxvUsyBc2QXoP4YsNXsFuKc3 ipfstest/testdir1
added QmPftYxJeAwZgzKFffieHnfPXvn81ksYeoaSxTiNnccNXa ipfstest/testdir2
added QmY1SRpgHw83j5RQnyxYXUgDWVT1SrpYCQ5XVb1aLn5RVe ipfstest
174 B / 174 B [======================================================] 100.00%
```
Notice how the IPFS addresses of files that have not been modified do not change, but the address of the whole directory changes. So, a directory is not added as a single blob, but as a collection of independent files.
That means that we could reasonably only keep **one** IPFS address in Gun (the latest version of the whole directory) and rely on IPFS to fetch handle resolving each file. That would simplify things on the Gun side (no need for an entry for each file). Impact on reliability and speed is unclear.
It seems this is how IPNS works, in fact.https://0xacab.org/rysiek/samizdat/-/issues/7Consider implementing/using Dat2020-02-02T21:33:37ZMichał "rysiek" WoźniakConsider implementing/using DatDat's interesting and relevant:
- https://github.com/datproject/sdk
- https://hacks.mozilla.org/2018/08/dweb-serving-the-web-from-the-browser-with-beaker/
Dat's interesting and relevant:
- https://github.com/datproject/sdk
- https://hacks.mozilla.org/2018/08/dweb-serving-the-web-from-the-browser-with-beaker/
https://0xacab.org/rysiek/samizdat/-/issues/9Consider implementing a fetcher hitting WayBack machine2019-12-10T12:49:33ZMichał "rysiek" WoźniakConsider implementing a fetcher hitting WayBack machineSince we're already handling fetches ourselves in the ServiceWorker, we might as well try to get stuff from the WaybackMachine if it's there are network issues.Since we're already handling fetches ourselves in the ServiceWorker, we might as well try to get stuff from the WaybackMachine if it's there are network issues.https://0xacab.org/rysiek/samizdat/-/issues/14Use window.ipfs in case of IPFS companion extension present2019-10-14T23:16:25ZMichał "rysiek" WoźniakUse window.ipfs in case of IPFS companion extension presentApparently [if the IPFS companion browser extension is installed](https://im-in.space/@etam/102961868697272001), a [`window.ipfs` object is available](https://im-in.space/@etam/102961921818260923), and thus `js-ipfs` is not necessary.Apparently [if the IPFS companion browser extension is installed](https://im-in.space/@etam/102961868697272001), a [`window.ipfs` object is available](https://im-in.space/@etam/102961921818260923), and thus `js-ipfs` is not necessary.https://0xacab.org/rysiek/samizdat/-/issues/23More advanced method of creating the array of plugins, with checks implemented2020-10-05T17:55:30ZMichał "rysiek" WoźniakMore advanced method of creating the array of plugins, with checks implementedWe are getting to a point where there are very specific requirements on plugins ("*must have `fetch()`; can have `stash()` and `publish()`; must have `unstash()` if has `stash()`*", etc), but we're still using very naive way of adding pl...We are getting to a point where there are very specific requirements on plugins ("*must have `fetch()`; can have `stash()` and `publish()`; must have `unstash()` if has `stash()`*", etc), but we're still using very naive way of adding plugins to the `SamizdatPlugins` array.
We need a more sane way of dealing with it, that would also perform some basic checks.https://0xacab.org/rysiek/samizdat/-/issues/24Proper reloading/uninstallation of the service worker?2019-12-10T12:48:18ZMichał "rysiek" WoźniakProper reloading/uninstallation of the service worker?Interesting read: https://love2dev.com/blog/how-to-uninstall-a-service-worker/Interesting read: https://love2dev.com/blog/how-to-uninstall-a-service-worker/Betahttps://0xacab.org/rysiek/samizdat/-/issues/27Measuring usage2019-12-16T00:56:03ZMichał "rysiek" WoźniakMeasuring usageSamizdat will need a way of measuring and reporting on how effective it is. That's a complicated problem. On one hand Samizdat will be used by readers in oppressive regimes, and their privacy and safety is crucial.
On the other hand, if...Samizdat will need a way of measuring and reporting on how effective it is. That's a complicated problem. On one hand Samizdat will be used by readers in oppressive regimes, and their privacy and safety is crucial.
On the other hand, if Samizdat cannot report on its effectiveness, how will website admins know it works at all?.. And how will organizations know it is worth deploying.
Possible approaches to this problem:
- keeping stats in Gun
- using Google Analytics or some other major provider (bleh!)
- using a Matomo instance on a different IP address that is not likely to be blocked
Questions:
- would it make sense to have global Samizdat stats (that is, for all Samizdat-enabled sites)?Betahttps://0xacab.org/rysiek/samizdat/-/issues/28Consider using Snowflake as a transport plugin?2019-12-10T12:47:49ZMichał "rysiek" WoźniakConsider using Snowflake as a transport plugin?Might be relevant: https://trac.torproject.org/projects/tor/wiki/doc/SnowflakeMight be relevant: https://trac.torproject.org/projects/tor/wiki/doc/Snowflakehttps://0xacab.org/rysiek/samizdat/-/issues/30API Documentation2020-09-08T18:36:07ZMichał "rysiek" WoźniakAPI DocumentationSamizdat is stable enough that it makes sense to write documentation for the API.Samizdat is stable enough that it makes sense to write documentation for the API.BetaMichał "rysiek" WoźniakMichał "rysiek" Woźniakhttps://0xacab.org/rysiek/samizdat/-/issues/31Standalone admin UI2019-12-10T01:32:09ZMichał "rysiek" WoźniakStandalone admin UINow that we have a [standalone user UI](#26), we need a standalone admin UI.Now that we have a [standalone user UI](#26), we need a standalone admin UI.BetaMichał "rysiek" WoźniakMichał "rysiek" Woźniakhttps://0xacab.org/rysiek/samizdat/-/issues/32Simplify and document the deployment process2020-10-05T17:54:24ZMichał "rysiek" WoźniakSimplify and document the deployment processCurrently deployment process of Samizdat is unclear, convoluted, and undocumented. This needs to change if Samizdat is to become useful.Currently deployment process of Samizdat is unclear, convoluted, and undocumented. This needs to change if Samizdat is to become useful.BetaMichał "rysiek" WoźniakMichał "rysiek" Woźniakhttps://0xacab.org/rysiek/samizdat/-/issues/45Check-out dweb-transports2020-02-12T18:23:31ZMichał "rysiek" WoźniakCheck-out dweb-transportsBught be useful: https://github.com/internetarchive/dweb-transportsBught be useful: https://github.com/internetarchive/dweb-transportsMichał "rysiek" WoźniakMichał "rysiek" Woźniakhttps://0xacab.org/rysiek/samizdat/-/issues/46Research, test, and document if/how Samizdat could be used behind NAT/firewall2020-10-05T17:50:10ZMichał "rysiek" WoźniakResearch, test, and document if/how Samizdat could be used behind NAT/firewallAn [interesting question was asked on the Fediverse](https://mastodon.sdf.org/@Shufei/104469126475735667): could Samizdat be used to host content behind NAT/firewall.
The minimal requirements are:
- a HTTPS-enabled site to kick-start S...An [interesting question was asked on the Fediverse](https://mastodon.sdf.org/@Shufei/104469126475735667): could Samizdat be used to host content behind NAT/firewall.
The minimal requirements are:
- a HTTPS-enabled site to kick-start Service Worker (no need to host actual content there);
- a way to push content to wherever the deployed plugins can `fetch()` it from.
With current plugins this would mean:
- hosting a skeleton site on some public hosting service (GitLab pages, etc)
- figuring out if pushing content to Gun and IPFS can happen from behind a firewall, or if running Gun and IPFS daemons behind firewall works well.
Hypothetically this would be easier with a plugin using anything that does not require a publicly accessible daemon, like pushing content to WebArchive and fetching from there.https://0xacab.org/rysiek/samizdat/-/issues/48Test and document Samizdat running in subdirectories2020-07-08T16:39:48ZMichał "rysiek" WoźniakTest and document Samizdat running in subdirectoriesHow does Samizdat react to being deployed *simultaneously* in different locations on the same website, especially when it's deployed in both a location and its sub-location?How does Samizdat react to being deployed *simultaneously* in different locations on the same website, especially when it's deployed in both a location and its sub-location?Michał "rysiek" WoźniakMichał "rysiek" Woźniakhttps://0xacab.org/rysiek/samizdat/-/issues/49Enable limiting Samizdat to a particular set of locations2020-07-08T16:54:13ZMichał "rysiek" WoźniakEnable limiting Samizdat to a particular set of locationsCurrently once deployed Samizdat will handle all sub-locations of wherever is deployed.
For example, if it's deployed at `example.com/`, it will handle all locations on that domain; if it's deployed at `example.com/samizdated/`, it will...Currently once deployed Samizdat will handle all sub-locations of wherever is deployed.
For example, if it's deployed at `example.com/`, it will handle all locations on that domain; if it's deployed at `example.com/samizdated/`, it will only handle sub-locations of that (ut not, for example, `example.com/non-samizdated/`).
It would be good to be able to configure which sub-locations should be handled by Samizdat. This could be done as a configurable regex in `service-worker.js`Michał "rysiek" WoźniakMichał "rysiek" Woźniakhttps://0xacab.org/rysiek/samizdat/-/issues/50Samizdat-as-a-Service2020-09-07T21:08:21ZMichał "rysiek" WoźniakSamizdat-as-a-ServiceConsider offering loading content to Gun+IPFS or whatever other plugin to websites deploying Samizdat.Consider offering loading content to Gun+IPFS or whatever other plugin to websites deploying Samizdat.Michał "rysiek" WoźniakMichał "rysiek" Woźniakhttps://0xacab.org/rysiek/samizdat/-/issues/51ServiceWorker not kicking in on force-reload2020-09-08T11:30:45ZMichał "rysiek" WoźniakServiceWorker not kicking in on force-reloadRelevant:
- https://stackoverflow.com/questions/37559415/how-to-make-serviceworker-survive-cache-reset-shiftf5
- https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle#shift-reload
Might require a simple FAQ ...Relevant:
- https://stackoverflow.com/questions/37559415/how-to-make-serviceworker-survive-cache-reset-shiftf5
- https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle#shift-reload
Might require a simple FAQ entry. Unless we want to muck around with how force-reload is handled.Michał "rysiek" WoźniakMichał "rysiek" Woźniakhttps://0xacab.org/rysiek/samizdat/-/issues/52What is max age samizdat can survive after blocking?2020-09-07T21:05:06Z0xf005ecWhat is max age samizdat can survive after blocking?Hi! Saw your presentation at HOPE and would like to contribute to this project.
The last time I checked this idea, it was non-viable due to 24h limit browsers put on service workers to avoid abuse (e.g. ransomware style attacks after hi...Hi! Saw your presentation at HOPE and would like to contribute to this project.
The last time I checked this idea, it was non-viable due to 24h limit browsers put on service workers to avoid abuse (e.g. ransomware style attacks after hijacking victim's domain name).
Has this limitation been lifted yet?