Coder Social home page Coder Social logo

farside's Issues

I just have to say, this is the most awesome tool ever!!!!!

If you want to preserve your privacy, this is the most awesome tool I have run across. Decentralized access to a wide variety of media and search. Depending on your situation, you can self host, so you are not even relying on access to Ben's free service.

Thank you Ben.

Fatal error, can't open config file '/usr/local/etc/redis.conf'

This is an awesome tool!

I'm trying to self host it and following the instructions, when I try to fire off the redis-server (redis-server /usr/local/etc/redis.conf) I get the above error due to the file not existing. Maybe something simple I'm doing wrong...

Any help, much appreciated.

Suggestion: reuse same instance within rate-limit interval

For something like Farside, I feel like pointing to the same instance of a given service if receiving multiple requests to that service might be a good idea. I say this partly for usage with RSS, which is a very common usecase for me with many of these services as they offer RSS where official means do not.

However, this rate limiting can often mean updating a feed may fail. I think giving the same instance again might be a good way to mitigate the chances of this happening while also still reducing the load on the Farside server some. I may be wrong, but requests being outright denied in more programmatic situations like this is a little frustrating, especially with there only being a single Farside instance.

Open up the wiki and let people contribute with simple tips and howto's

A big thanks to benbusy for this wonderfull, so much underrated, tool. Your brilliant idea, and work commited is much appreciated.

But I'm not sure, many people understand the power of this redirector thingy. And how easy it is to make use of such a tool in variety of contexts.

And even more so the latest changes, #37 , make it so much simpler to use.

I see that some people have contributed for example, with a GreaseMonkey userscript, #29. This issue was opened and closed and this "knowledge" is now "burried".

The same could be said,for example, for a couple of simple lines, instructing how to configure your OpenWrt router. Or even if a future package would be available for this router distribution.

Or "How I installed" farside in a small Raspberry Pi.
Or how to simply configure Chrome orFirefox default seach to use a Farside link (no need for extensions).

Or a list of other future "farside instances".

Or ...

I would suggest the proper place to collect all these user contributed tips, would be the wiki page. And you would still maintain tight personal editing control of your README page.

Whoogle language settings- keep getting German results despite '&lang_interface=en'

Hi, I keep getting German results. I've added Farside as a search engine in firefox with the '&lang_interface=en' added after the search terms, however I regularly get German results, mostly from the whoogle.lunar.icu instance.

In the address bar I get something like 'https://whoogle.lunar.icu/search?q=whatever&lang_interface=en' so it does seem to be registering it but I still get the german instance most of the time. This occurs both on android and windows firefox.

Any ideas? I can't seem to find a way to block a particular instance as a workaround either.

Thanks otherwise for a super useful tool!

Some Whoogle Instances Are Misconfigured: Loses Search Query

I have farside.link/whoogle/search?q=%s as a custom search option for librewolf, but some of the sites chosen don't keep the search query typed in the urlbar. The sethforprivacy and dcs0.hu instances have this problem, but I can't remember which others have them as well...

Adding more alternatives

A free and open source alternative Reddit front-end focused on privacy. Inspired by the Nitter project.

An alternative privacy-friendly YouTube frontend which is efficient by design.

We aim to provide fast and private translations to the user without wasting much overhead for extensive styling or JavaScript

Detecting and reporting malfunctioning, incorrect or defunct instances

First of all, thank you for providing an invaluable service to deal with both a diversion around the increasing walls that Twitter is placing up for non-registered users and to route around the consistent rate limiting that the official Nitter instance is implementing.

I am using Farside to keep track of a number of Twitter accounts and my query is whether Farside could be made more intelligent to detect instances.

I have noted three different issues with four instances:

  • birdsite.xanny.family and nitter.domain.glass have Nitter instances that do not display any tweets for an account but otherwise appear to work fine.
  • nitter.actionsack.com should be replaced with n.actionsack.com as the URL appears to have changed. You are still served a generic redirect page and I suspect Farside sees the site as active despite the URL being incorrect.
  • nitter.autarkic.org is no longer a valid domain but displays a page from the domain address owner so again, I suspect Farside sees that site as active despite the domain being defunct.

So my query based on the three issues I describe is whether Farside can be improved to remove the instances that are not retrieving and showing tweets, are showing a generic redirect page as the URL has changed or are showing a domain owner page as the domain has expired? Or if not, if there could be an easy and automated way to report such instances?

Can you explain these i2p domain name lookups?

Not clear to me what they are supporting. Any help, much appreciated.

  • x33lx4h6d7h6xs4eiqwhvaxn3ea5gn2ifmu3jobnvuvn4k4aej7a.b32.i2p
  • hflqp2ejxygpj6cdwo3ogfieqmxw3b56w7dblt7bor2ltwk6kcfa.b32.i2p

Trying to understand if/why I should whitelist...

About Searx

Some information that may help:

Most of the public instances have filtron to avoid bots (at least some). See https://github.com/searx/searx-docker/blob/master/rules.json#L2-L7

Imginn?

Every time I use farside.link/bibliogram/*, I get redirected to imginn.com. This redirection is probably done by the only Bibliogram instance left in your curated list, https://bibliogram.privacydev.net

  1. What is this service?
  2. Has it been vetted? There's no privacy policy, no source code, and very little information
  3. There's also imginn.org, same code, different UI?

Improve embedding

In case of Invidious, would it be possible to make it so that Farside provides the information that various chat platforms or other social media requires in order to create a preview widget (the thumbnail, video title and first few words of video description).

Invidious instances already provide this, so providing a link to invidious instance creates a preview correctly.

Having this work with Farside as well would probably result in a lot more people being less suspicious about the link. Which would probably help with adoption and promotion as well.

Ditch Github

I believe it's rather ironic for a tool that provides privacy-oriented/ethical frontend alternatives
to various services to host itself on Github. It should at a bare minimum be an archived
repository pointing to the hosted version somewhere else. You can pick from using a
self-hosted version of Gitlab, Gitea, gogs, cgit, stagit, git-web, sourcehut, you name it.

Alefvanoon's instances

Alefvanoon's instances should be removed since he doesn't seem to be hosting any of them anymore.

[Meta] Nginx HTTPS redirection not working

accidentally going to http results in nginx 404 error on the main instance.

something like this would probably fix it:

server {
    listen 80;
    server_name farside.link;
    return 301 https://$server_name$request_uri;
}

Multi language issue/support

Whoogle supports changing interface and search results language through environment variable. This may cause issues as farside does not. For example using https://farside.link/whoogle/search?q=elixir you may get forwarded to https://whooglesearch.net/ that only supports spanish results. Here's a table of whoogle instances and their supported languages (source: https://github.com/benbusby/whoogle-search):
image

suggested solution: specify the desired language in the url that so it forwards the search to whoogle instances that supports that language, something like this https://farside.link/whoogle/search?language=en&q=elixir

Teddit instance uses tracking JS

Hi, thank you for creating this tool!

Contrary to the teddit README's claim of "No JavaScript or ads", I've noticed that a particular teddit instance (https://teddit.nautolan.racing/) is hitting JS resources that seems to be involved in advertisement and tracking. For instance:

These are the network requests my browser makes when going to http://ww38.teddit.nautolan.racing/ (which I was redirected to by farside):
Screen Shot 2022-10-02 at 1 58 08 PM

As a result of blocking these requests, I'm left with a blank page, in which case I'll typically manually go to teddit.net instead.

I'm wondering if this instance should be removed from the services list?

Thanks!

farside.link/<url> Is not working with youtu.be links

Hi, first of all I want to say thanks for the tool. I just discovered it a few days ago and I use it in combination with Apple Shortcuts to longpress on a link and open it via farside.link.

I just combine farside.link/<selected_link>. This is working great. I just came across a YouTube link starting with youtu.be/
Combining “farside.link/” with a youtu.be url seams not to work. Would be great if those links would also work via farside.link/<youtu.be link>.

Cheers

Update bibliogram instances

Bibliogram is discontinued but

What does discontinued mean?
You can't look at profiles. You can still look at individual posts, but if this breaks in the future, I probably won't fix it.

In readme you say

How It Works
The app runs with an internally scheduled cron task that queries all instances for services defined in services.json every 5 minutes. For each instance, as long as the instance takes <5 seconds to respond and returns a successful response code, the instance is added to a list of available instances for that particular service. If not, it is discarded until the next update period.

I could not find what the test is but I bet the test is querying a profile, that’s why all instances are down. Instead, you should use a post instead, they still work (for now)
https://bibliogram.art/p/Ch2WRmiLMjj/

🟣 Farside Userscript and WebExtension

I've made a Userscript, which can be realized into a Web Extension.
You're welcome to try ;)

I suggest to add this script to the Farside project website and also a dedicated URL to auto-update this userscript.
Please don't use storage from a centralized so called "big-tech-giant", because statistics that will be provided to them, will not be good for us.
I guess we can use IPFS for this storage task.

With the logo
13,305 bytes (uncompressed), 5,855 bytes (compressed)

Without a logo
8,966 bytes (uncompressed), 2,264 bytes (compressed)

// ==UserScript== 
// @name        Farside
// @author      Ben Busby, Founder
// @author      Schimon Jehudah, Adv.
// @license     AGPL3
// @namespace   link.farside
// @description A smart redirecting gateway for various frontend services
// @grant       none
// @run-at      document-start
// @match       *://bing.com/* 
// @match       *://*.bing.com/*
// @match       *://google.*/* 
// @match       *://*.google.*/* 
// @match       *://imgur.com/* 
// @match       *://*.imgur.com/* 
// @match       *://instagram.com/* 
// @match       *://*.instagram.com/* 
// @match       *://medium.com/* 
// @match       *://*.medium.com/* 
// @match       *://reddit.com/* 
// @match       *://*.reddit.com/* 
// @match       *://twitter.com/* 
// @match       *://wikipedia.org/* 
// @match       *://*.wikipedia.org/* 
// @match       *://yahoo.com/* 
// @match       *://*.yahoo.com/* 
// @match       *://yandex.com/* 
// @match       *://*.yandex.com/* 
// @match       *://*.youtube.com/* 
// @version     1.0.0
// @icon        data:image/png;base64,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
// ==/UserScript==

var hostname, pathname, path;

let url = new URL(location.href);
hostname = url.hostname;
pathname = url.pathname;

function pickParameters(para) {
  for (let i = 0; i < para.length; i++) {
    if (url.searchParams.get(para[i])) { 
      para = url.searchParams.get(para[i]);
      url.searchParams.delete(para[i]);
      return para;
    };
  };
};

switch (true) {

  case (hostname.endsWith('translate.yandex.com')):
        // FIXME website blocks us from redirecting
        // function setTimeout() seems to not work
        // consider different approach/way
  case (hostname.endsWith('translate.google.com')):

  site = [
    // lingva
    'lgv,https://farside.link/lingva',
    'lgv,https://lingva.pussthecat.org',
    'lgv,https://lingva.ml',
    // simplytranslate
    'smp,https://farside.link/simplytranslate',
    'smp,https://translate.tiekoetter.com',
    'smp,https://translate.syncpundit.com',
    'smp,https://translate.riverside.rocks',
    'smp,https://translate.northboot.xyz',
    'smp,https://translate.namazso.eu',
    'smp,https://translate.josias.dev',
    'smp,https://translate.bus-hit.me',
    'smp,https://st.manerakai.com',
    'smp,https://st.alefvanoon.xyz',
    'smp,https://simplytranslate.pussthecat.org',
    'smp,https://simplytranslate.org',
    'smp,https://simplytranslate.esmailelbob.xyz'];
  break;

  // TODO bing mapquest moovit waze yandex
  // FIXME website blocks us from redirecting
  case (hostname.includes('google.') &&
        pathname.startsWith('/maps')):

  site = [
    // openstreetmap
    'osm,https://www.openstreetmap.org'];
  break;

  case (hostname.includes('yandex.') &&
        pathname.startsWith('/search')):
  case (hostname.startsWith('search.yahoo.')):
  case (hostname.includes('yahoo.') &&
        pathname.startsWith('/search')):
  case (hostname.includes('bing.') &&
        pathname.startsWith('/search')):
  // FIXME website blocks us from redirecting
  case (hostname.includes('google.') &&
        pathname.startsWith('/search')):

  site = [
    // searx
    'srx,https://farside.link/searx',
    'srx,https://searx.webheberg.info',
    'srx,https://searx.tyil.nl',
    'srx,https://searx.tuxcloud.net',
    'srx,https://searx.tux.land',
    'srx,https://searx.theanonymouse.xyz',
    'srx,https://searx.stuehieyr.com',
    'srx,https://searx.sp-codes.de',
    'srx,https://searx.ru',
    'srx,https://searx.rasp.fr',
    'srx,https://searx.ninja',
    'srx,https://searx.gnu.style',
    'srx,https://searx.divided-by-zero.eu',
    'srx,https://search.neet.works',
    'srx,https://search.jpope.org',
    'srx,https://search.asynchronousexchange.com',
    'srx,https://procurx.pt',
    'srx,https://dynabyte.ca',
    // searxng
    'sng,https://farside.link/searxng',
    'sng,https://swag.pw',
    'sng,https://searxng.zackptg5.com',
    'sng,https://searx.tiekoetter.com',
    'sng,https://searx.prvcy.eu',
    'sng,https://searx.mha.fi',
    'sng,https://searx.jaska.cc',
    'sng,https://searx.fmac.xyz',
    'sng,https://searx.ebnar.xyz',
    'sng,https://searx.be',
    'sng,https://search.zzls.xyz',
    'sng,https://search.vojkovic.xyz',
    'sng,https://search.rabbit-company.com',
    'sng,https://search.ononoki.org',
    'sng,https://search.neet.works',
    'sng,https://search.mdosch.de',
    'sng,https://s.zhaocloud.net',
    'sng,https://paulgo.io',
    'sng,https://northboot.xyz',
    'sng,https://etsi.me',
    // whoogle
    'who,https://farside.link/whoogle',
    'who,https://gowogle.voring.me',
    'who,https://s.alefvanoon.xyz',
    'who,https://search.sethforprivacy.com',
    // yacy
    //'ycy,https://farside.link/yacy',
    'ycy,https://51.79.164.235:8443',
    'ycy,https://58.179.103.130:49153',
    'ycy,https://76.9.226.109:8444',
    'ycy,https://78.55.177.108:8443',
    'ycy,https://85.199.74.98:8443',
    'ycy,https://93.190.202.83:8443',
    'ycy,https://109.230.224.225:8443',
    'ycy,https://162.210.6.138:8443',
    'ycy,https://176.31.104.225:8448',
    'ycy,https://185.243.10.140:8443',
    'ycy,https://search.yacy.net',
    'ycy,https://www.gumx.de:8091',
    'ycy,https://yacy.iko.soy/'];
  break;

  case hostname.endsWith('imgur.com'):

  site = [
    // imgin
    'img,https://farside.link/imgin',
    'img,https://imgin.voidnet.tech',
    // rimgo
    'rim,https://farside.link/rimgo',
    'rim,https://rimgo.bus-hit.me',
    'rim,https://rimgo.totaldarkness.net',
    'rim,https://img.riverside.rocks',
    'rim,https://rimgo.pussthecat.org',
    'rim,https://i.bcow.xyz'];
  break;

  case hostname.endsWith('instagram.com'):

  site = [
    // bibliogram
    'bib,https://farside.link/bibliogram',
    'bib,https://bibliogram.art',
    'bib,https://bibliogram.snopyta.org',
    'bib,https://bibliogram.froth.zone',
    'bib,https://insta.trom.tf',
    'bib,https://bib.riverside.rocks',
    'bib,http://qsuiaf4jio2yaxdbj6ljte3jmr6m7g333rujoilbtipjeawnou26frad.onion',
    'bib,https://bibliogram.esmailelbob.xyz',
    'bib,https://insta.tromdienste.de',
    'bib,https://biblio.alefvanoon.xyz',
    'bib,https://bib.actionsack.com',
    'bib,https://bibliogram.1d4.us',
    'bib,https://bibliogram.pussthecat.org'];
  break;

  case hostname.endsWith('medium.com'):

  site = [
    // scribe
    'scr,https://farside.link/scribe',
    'scr,https://scribe.froth.zone',
    'scr,https://scribe.bus-hit.me',
    'scr,https://scribe.citizen4.eu',
    'scr,https://scribe.nixnet.services',
    'scr,https://scribe.rip'];
  break;

  case hostname.endsWith('reddit.com'):

  site = [
    // libreddit
    'lib,https://farside.link/libreddit',
    'lib,https://de.leddit.xyz',
    'lib,https://leddit.xyz',
    'lib,https://libreddit.bus-hit.me',
    'lib,https://libreddit.de',
    'lib,https://libreddit.igna.rocks',
    'lib,https://libreddit.alefvanoon.xyz',
    'lib,https://lr.mint.lgbt',
    'lib,https://reddit.stuehieyr.com',
    'lib,https://libreddit.some-things.org',
    'lib,https://r.nf',
    'lib,https://reddit.artemislena.eu',
    'lib,https://libreddit.domain.glass',
    'lib,https://libreddit.silkky.cloud',
    'lib,https://lr.riverside.rocks',
    'lib,https://reddit.invak.id',
    'lib,https://libreddit.kavin.rocks',
    'lib,https://libreddit.dothq.co',
    'lib,https://libreddit.spike.codes',
    'lib,https://libredd.it',
    'lib,https://libreddit.albony.xyz',
    // teddit
    'ted,https://farside.link/teddit',
    'ted,https://teddit.zaggy.nl',
    'ted,https://teddit.totaldarkness.net',
    'ted,https://teddit.sethforprivacy.com',
    'ted,https://teddit.pussthecat.org',
    'ted,https://teddit.net',
    'ted,https://teddit.namazso.eu',
    'ted,https://teddit.froth.zone',
    'ted,https://teddit.domain.glass',
    'ted,https://teddit.bus-hit.me',
    'ted,https://teddit.alefvanoon.xyz',
    'ted,https://teddit.adminforge.de',
    'ted,https://incogsnoo.com'];
  break;

  case hostname.endsWith('twitter.com'):

  site = [
    // nitter
    'nit,https://farside.link/nitter',
    'nit,https://de.nttr.stream',
    'nit,https://nttr.stream',
    'nit,https://nitter.bus-hit.me',
    'nit,https://nitter.sethforprivacy.com',
    'nit,https://twitter.076.ne.jp',
    'nit,https://nitter.ca',
    'nit,https://n.hyperborea.cloud',
    'nit,https://nitter.koyu.space',
    'nit,https://nitter.grimneko.de',
    'nit,https://twitter.censors.us',
    'nit,https://nitter.it',
    'nit,https://bird.trom.tf',
    'nit,https://nitter.moomoo.me',
    'nit,https://nitter.hu',
    'nit,https://birdsite.xanny.family',
    'nit,https://nitter.actionsack.com',
    'nit,https://nitter.namazso.eu',
    'nit,https://nitter.eu',
    'nit,https://nitter.domain.glass',
    'nit,https://nitter.unixfox.eu',
    'nit,https://nitter.kavin.rocks',
    'nit,https://nitter.1d4.us',
    'nit,https://nitter.fdn.fr',
    'nit,https://nitter.pussthecat.org',
    'nit,https://nitter.42l.fr',
    'nit,https://nitter.net'];
  break;

  case hostname.endsWith('wikipedia.org'):

  site = [
    // wikiless
    'wik,https://farside.link/wikiless',
    'wik,https://wikiless.sethforprivacy.com',
    'wik,https://wikiless.org',
    'wik,https://wikiless.northboot.xyz',
    'wik,https://wikiless.lunar.icu',
    'wik,https://wikiless.alefvanoon.xyz',
    'wik,https://wiki.froth.zone',
    'wik,https://wiki.604kph.xyz'];
  break;

  case hostname.endsWith('youtube.com'):

  site = [
    // invidious
    'inv,https://farside.link/invidious',
    'inv,https://yt.artemislena.eu',
    'inv,https://youtube.076.ne.jp',
    'inv,https://yewtu.be',
    'inv,https://vid.puffyan.us',
    'inv,https://tube.cthd.icu',
    'inv,https://invidious.weblibre.org',
    'inv,https://invidious.snopyta.org',
    'inv,https://invidious.sethforprivacy.com',
    'inv,https://invidious.osi.kr',
    'inv,https://invidious.namazso.eu',
    'inv,https://invidious.mutahar.rocks',
    'inv,https://invidious.lunar.icu',
    'inv,https://invidious.kavin.rocks',
    'inv,https://invidious.flokinet.to',
    'inv,https://invidious.esmailelbob.xyz',
    'inv,https://invidious-us.kavin.rocks',
    'inv,https://inv.riverside.rocks',
    // piped
    'pip,https://farside.link/piped',
    'pip,https://piped.mint.lgbt',
    'pip,https://piped.moomoo.me',
    'pip,https://piped.tokhmi.xyz',
    'pip,https://piped.kavin.rocks'];
  break;
};

// Affairs Settlement Below
// Don't dare to give up nor give in

// site
site = site[Math.floor(Math.random()*site.length)];
name = site.split(',')[0];
site = site.split(',')[1];

// path
switch (name) {

  // consider function setTimeout()
  case 'bib':
    if (!pathname.includes('accounts/login')) {
      path = '/u' + pathname;
    } else {
      if (url.searchParams.get('next')) { 
        para = ['next'];
        path = '/u' + pickParameters(para);
      };
    };
  break;

  case 'lgv':
    // extract text parameter
    paras = ['sl','tl','text']

    function setValue(para) {
      if (url.searchParams.get(para)) { 
        para = [para];
        return pickParameters(para);
      } else { return 'auto' };
    }

    for (let i = 0; i < paras.length; i++) {
      paras[i] = setValue(paras[i]);
    }
    
    if (paras[2] === 'auto') { paras[2] = '' };
    path = '/' + paras[0] + '/' + paras[1] + '/' + paras[2];
  break;

  case 'osm':
    // extract coordinations
    if (pathname.includes('@')) {
      cord = pathname.split('/')[2].split('&')[0].slice(1);
      cord = cord.split(',');
    }
    path = '/#map=' + cord[2].slice(0, 1) +
           '/' + cord[0] + '/' + cord[1];
  break;

  case 'sng':
  case 'srx':
  case 'who':
    // extract search parameter
    para = ['q','text','p'];
    //pickParameters(paras);
    para = pickParameters(para); // works even when calling the function?
    path = '/search?q=' + para;
  break;

  case 'wik':
    // extract language code
    code = hostname.split('.');
    if (code.length === 3) {
      lang = code[0];
    }
    path = pathname + '?lang=' + lang;
  break;

  case 'ycy':
    // extract search parameter
    para = ['q','text','p'];
    //pickParameters(paras);
    para = pickParameters(para); // works even when calling the function?
    path = '/yacysearch.html?query=' + para;
  break;
}

if (!path) {
  path = pathname + url.search + url.hash;
}

//console.log( site + path )
//alert('You are being redirected to ' + site + path + '. Enjoy your surf, Sir!')
location.href = site + path;

Tor support

It would be a good idea to have a separate instance of Farside strictly for Tor versions of instances. Some basic things needed to implement this:

  • Separate services file that only contains services with Tor instances
  • Redis updates to store separate key-val pairing of Tor instances, separate from their non-Tor counterparts
  • Env var to enable Tor support
  • Add separate workflow for auto updating available Tor instances

New Piped instances

I've noticed that farside.link/piped always directs to piped.kavin.rocks

There is two new instances, which are a little hidden in the settings page

  1. piped.silkky.cloud
  2. piped.mutahar.rocks

Farside won't check if instances are reachable on my end

I'm using whoogle public instances and from time to time I'll end up with a page telling me that such instance was ratelimited by google and it provides with a farside link containing my search. Problem is, farside would pick an instance which is currently unreachable from me and thus leading me to a dead end.

I would like to see farside check if picked instance is reachable for me or not and then leading with my search to a working one.

Wiki redirector

Found out about this repo from comments in a recent discussion on HackerNews. 📈

request

I would like to add the following lines to your wiki. I have successfully tested the regex on these pages, it may still need to be fine tuned for edge cases.

For ease of use,

  1. Install the Redirector extension
  2. Add a new entry:
  • Description: Farside
  • Example URL: https://www.youtube.com/watch?v=N5dauIYZTs4
  • Include pattern: ^(?:https?://)(?:www.|)((?:imdb|imgur|instagram|medium|odysee|quora|reddit|tiktok|translate|twitter|wikipedia|youtube).(?:com|org|google.(?:com|au|de|co)).*)
  • Redirect to: https://farside.link/$1
  • Pattern type: Regular Expression

OpenStreetMap

I know what you're thinking right now... "We see OSM every day, using our personal navigation software, so it was tricky to notice that we've missed it" ;)

Though, we really should have alternative instances to the openstreetmap.org instance.

Suggestion: implement redirect preserving Farside in browser history

Oftentimes services like Bibliogram are locked out by the original service because of excessive traffic from a single IP. Farside could help more in this case if you could easily retry with another service. A suggestion would be to have the (e.g.) https://farside.link/service/... link in the browser history, so that if you get an error with the first instance you get redirected to, simply pressing the Back-button will bring you back to Farside and another instance is tried immediately.

I don't have any experience with Elixir, but perhaps something client-side using either HTML <meta http-equiv="refresh" content="0; url=https://example.com/"> or JavaScript history.pushState() would do the trick.

The browser would then also be prevented from caching the request (or local JavaScript should redo the instance request to the server), otherwise you'd get the same instance.

Allow bypassing specific instances for a service

First of all I'd like to thank you for providing this service! Secondly I'd like you to know that I'm completely new to github and everything related to it, so apologies if my behavior is inappropriate.

The title is somewhat self-explanatory:
https://lr.oversold.host has never worked for me since I've started using farside.link a few weeks ago. It'll redirect to https://lr.trolling.dev/, which is a dead link.
https://bibliogram.art might be fine for a lot of people and is the official instance, however it ceases to function after some usage and doesn't work properly with most if not all instances of VPN and/or Tor.

Solutions for above problems would be to either remove them as redirects -this should be the easy solution- or provide us the means to change the redirects locally, though I wouldn't know how you'd be able to tackle this easily.

How to install?

I am interested in running a farside instance. Without knowing any elixir, I managed to use nix's mixRelease, which gives me the following:

$ tree result
result
├── bin
│   └── farside
├── erts-12.2
│   └── bin
│       └── *
├── lib
│   └── *
└── releases
    ├── 0.1.0
    │   └── *
    └── start_erl.data
$ result/bin/farside
cat: result/releases/COOKIE: No such file or directory

Obviously this is not right and I don't expect you to know how to do it in nix, but I'd appreciate the installation procedure so that I can bring it to the nix folks for assistance.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.