Contribute to Open Source. Search issue labels to find the right project for you!

check external links


We tried using the linkcheck --external but this seemed to be too disruptive for Travis (the build task would fail checks more often than not because of failed connections) and so we reverted to only checking internal links (#778).

An alternative could be to run a cron job periodically.

Updated 26/06/2017 22:27 1 Comments

gustil fails to deploy static files

Traceback (most recent call last):
  File "/usr/lib/google-cloud-sdk/platform/gsutil/gsutil", line 22, in <module>
  File "/usr/lib/google-cloud-sdk/platform/gsutil/", line 113, in RunMain
    import gslib.__main__
  File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/", line 39, in <module>
    import boto
  File "/usr/lib/google-cloud-sdk/platform/gsutil/third_party/boto/boto/", line 1216, in <module>
  File "/usr/lib/google-cloud-sdk/platform/gsutil/third_party/boto/boto/", line 93, in load_plugins
  File "/usr/lib/google-cloud-sdk/platform/gsutil/third_party/boto/boto/", line 75, in _import_module
    return imp.load_module(name, file, filename, data)
  File "/usr/lib/python2.7/dist-packages/google_compute_engine/boto/", line 19, in <module>
    from google_compute_engine import logger

The following error occurs when trying to deploy static files automatically on Travis CI (, when running the command:

gsutil rsync -R ./csunplugged/staticfiles/ gs://
Updated 26/06/2017 21:58 1 Comments

Using JSX to create elements XSS-free


We use HTML strings with user-provided data all over the extension, this is XSS 101.

The alternative to that is a lot of inelegant calls and de-XSS-ifying this piece of code gets ugly real fast.

I wish there was a JSX-to-DOM compiler that allowed use to write safe HTML:

const element = <a class="one two" href="{element.title}">{name}</a>
const element = document.createElement('a');
element.className = 'one two';
element.href = element.title;
element.textContent = name;

Well, it turns out we have some options:

A factory for that would be something like h, which appears to be pretty small.

Just like that, all .innerHTML calls are gone.

Updated 25/06/2017 09:53

[WIP] Import template generators


We run template generators separately as scripts and then parse what they output on stdout. This hides errors and warnings and is much slower than just using the classes and functions directly. I am not sure what the reason for running a script that runs more scripts was but I made a quick refactor to just use the generators as classes. This results in less code and it’s much faster.

This PR is not finished, I want to clean it all up and write it more elegantly. But first I want consensus from the community that this is the way to go. Maybe there is a reason why we run all the scripts separately.

Configure time: old code: 51s new code: 26s

Build time: old code: 3m 23s new code: 2m 54s

(I am working on battery, the numbers plugged in are going to be better, just included this for a comparison)

Updated 26/06/2017 17:33 1 Comments

[Configs] Allow developers to change local ports via tcpPort in the configs/development.json


Please allow developers to modify their listening ports in the configs/development.json, by adding a tcpPort property, so they can use debugger.html for other uses.

One example is by modifying the local ports to enable the debugger.html to listen in on web-ext to debug WebExtensions add-ons.

Currently, the only method to get this to work is by modifying the file, debugger.html/node_modules/devtools-launchpad/bin/firefox-proxy, and then changing the TCP_PORT.

Because the modified code is not supposed to be merged into the master branch, here’s the code instead:

const args = minimist(process.argv.slice(2));
const LOCAL_PORT = 6005;  //Modified
const WEB_SOCKET_PORT = args["web-socket-port"] || 9000;
const TCP_PORT = args["tcp-port"] || LOCAL_PORT; //Modified
const shouldStart = args.start;

function start(options) {
  const webSocketPort = options.webSocketPort || 9000;
  const tcpPort = options.tcpPort || LOCAL_PORT; //Modified
  const logging = !!options.logging;
  proxy(webSocketPort, tcpPort, logging);

And here it is, as proof of concept to work with web-ext.

Updated 24/06/2017 19:56

break out catkinws


break catkin ws from LL staging into a bunch of different repos in this org. this will mean putting together some sort of build script to do the right thing in something that’s like llstaging but pulls from the repos.

Updated 21/06/2017 16:59

Can not build for Debian 9 "Stretch"


Environment: Debian 9 mono-xbuild- (alpha-jessie, mono-project) msbuild-15.2 (alpha-jessie, mono-project)

Creating directory /wrk/all/one/projects/omni/omnisharp-roslyn/.dotnet dotnet_install: Error: OS name could not be detected: debian.9 An error occurred when executing task ‘BuildEnvironment’. Error: Failed to Install .NET Core SDK 1.0.1

If I manually edit the

                echo "debian"
                return 0

and edit the build.cake

    //client.DownloadFile(url, scriptFilePath);

then I get (a “no such file” error in my language)

Creating directory /wrk/all/one/projects/omni/omnisharp-roslyn/.dotnet-legacy /bin/chmod: не вдалося отримати доступ до ‘/wrk/all/one/projects/omni/omnisharp-roslyn/.dotnet-legacy/’: Немає такого файла або каталогу /bin/bash: /wrk/all/one/projects/omni/omnisharp-roslyn/.dotnet-legacy/ Немає такого файла або каталогу An error occurred when executing task ‘BuildEnvironment’. Error: Failed to Install .NET Core SDK 1.0.0-preview2-1-003177

after that I copy to .dotnet-legacy and continue then I have this: An error occurred when executing task ‘Restore’.


Executing task: Restore Restoring packages in OmniSharp.sln…

Welcome to .NET Core!

Learn more about .NET Core @ Use dotnet –help to see available commands or go to


The .NET Core tools collect usage data in order to improve your experience. The data is anonymous and does not include command-line arguments. The data is collected by Microsoft and shared with the community. You can opt out of telemetry by setting a DOTNET_CLI_TELEMETRY_OPTOUT environment variable to 1 using your favorite shell. You can read more about .NET Core tools telemetry @


A command is running to initially populate your local package cache, to improve restore speed and enable offline access. This command will take up to a minute to complete and will only happen once. Decompressing 100% 5051 ms Expanding 100% 27595 ms Restoring packages for /wrk/all/one/projects/omni/omnisharp-roslyn/src/OmniSharp.Abstractions/OmniSharp.Abstractions.csproj… Restoring packages for /wrk/all/one/projects/omni/omnisharp-roslyn/src/OmniSharp.DotNetTest/OmniSharp.DotNetTest.csproj… Restoring packages for /wrk/all/one/projects/omni/omnisharp-roslyn/src/OmniSharp.DotNet/OmniSharp.DotNet.csproj… Restoring packages for /wrk/all/one/projects/omni/omnisharp-roslyn/src/OmniSharp.Host/OmniSharp.Host.csproj… An error occurred when executing task ‘Restore’. Error: Failed to restore projects in OmniSharp.sln.

Updated 26/06/2017 15:55 1 Comments

No secrets in source code



I’m not up to date on the security involved in a Django app.

However, I’m pretty sure the secret key shouldn’t be part of the source code




Resolving this issue will entail: 1. Removing the secret key from source code 2. Updating documentation with how one should set up their development environment 3. Set secret key on hosting server 4. Update documentation with how to set environmental variables on hosting server 5. Security audit?

Updated 21/06/2017 15:10

Improve sorting and validation script


Feature requests - rules validating. For example: || - the rule is invalid. || are unnecessary for element hiding rules; ||^$$ - two option separators. ||^$, - invalid domain separator. Must be |. - use black list instead ignore list for(List of the files that should be sorted).;

- remove or rework committing changes to a repository(it is not working now)

Currently our script has a bug with sorting order. Sometimes the order of sorting is violated - sorting of strings occurs alphabetically. Expected sorting process: - sorting of element hiding rules - sorting by CSS selector; - merging the rules with the same CSS selector; - removing duplicated domains; - sorting of URL rules - sorting the rules in alphabetical order; - sorting and merging domains list if the rules contain only $domain= modifier - removing duplicates; - types of rules that must be ignored(allow sorting as string, but don’t change them): JS(#%#), CSS(#$#), content replacing rules($replace), protobuf($protobuf=), Content Security Policy ($csp), application modifier for Android and Windows(‘$app=’)

Comments ! and hints !+ are separators. Rules that are between the comments should be sorted separately from the rest.

Updated 21/06/2017 10:18

Vendor lodash dep in m-c


It would be nice to vendor lodash in mc. The benefit is that we could use it directly in the debugger without worrying about the bundle size ballooning.

We currently do something like import get from 'lodash/get' with this change we could do import {get} from 'lodash'

Updated 22/06/2017 21:21 1 Comments

Add Git hooks


I often forget to run npm run build after checking out a PR branch. Would be useful to set up some shared Git hooks for running npm install and npm run build on Git changes, like updated master or other checked out branches.

Maybe using

Updated 21/06/2017 16:10 11 Comments

Just test that the non-faked shutil functions are equal to real shutil functions


In #222, most of the fake shutil functions were removed in favor of patching shutil itself with fake os, etc. Just the functions that must be faked remain in

The real shutil functions are still being tested in This should be left as-is for at least one release cycle (until pyfakefs 3.4). However, in the future this will become a maintenance problem. I propose that we test them more analytically, testing that: * Imports in shutil are in fact patched with pyfakefs modules * All the shutil functions that are supposed to be faked are not equal to the real shutil functions * All other shutil functions are equal to the real shutil functions

Then test the functionality of the fake shutil functions as is done currently.

We should retain a couple of tests for real shutil functions as canaries to tell us if there are holes in the analytical tests.

Updated 26/06/2017 18:08

We need Kubernetes!


We need a Kubernetes cluster! Wooooooooooo!!!!!!!!


As an admin, I have kubectl (cue-bect-uhl) configs to access the cluster As an admin, I have kubectl (cue-bect-uhl) configs to automate jobs/scripts against the cluster

Success Criteria

  • Cluster running in $cloud
  • Tooling to support managing cluster
Updated 23/06/2017 13:34 4 Comments

We need a blog!


Work with the Site team to discover what tooling we will be using for blogging to the site.


As a member I can easily draft a blog, and get it approved and published As a member I have my own account, and can blog without any special tools As a member I can find documentation on the process easily

Success Criteria

  • The blog tooling is integrated with the Site team and Infrastructure team
  • The blog tooling is stored in the repository
  • The blogs have social media buttons and all the goodies to market them accordingly
  • The blogs have metrics on how many people viewed the blog
  • The tooling lets users create accounts (like wordpress) to blog
Updated 18/06/2017 13:45 1 Comments

We need a chat service!


Remember one of our main goals here is to offer an easy to use in-browser chat experience.


As a user of the site, I can access the site and begin chatting. As a user of the site, I don’t need an account to start chatting. As a user of the site, I feel safe and the chat experience is secure/reliable.

Success Criteria

  • A user can log in and join chat from their browser.
  • The chat tooling is bundled into the repository and works well with the rest of the site.
  • Any underlying infrastructure for the chat tooling, is supported and understood by the infrastructure team.
Updated 18/06/2017 12:36

We need a build pipeline!


We need to construct a build pipeline! (Hooray!)

This is merely a set of automation scripts that do the following things. Ideally the scripts will be ran from a tool like Jenkins, so we as administrators have convenient buttons to use to run them. But in theory they can be ran anywhere.


  • As an administrator for I can automatically build our application.
  • As an administrator for I can automatically deploy our application to Kubernetes.

Success Criteria

  • Propose tooling for the pipeline (and get it accepted/agreed upon)
  • Build on infrastructure for the tooling (Ask @kris-nova for infra here)
  • The application hosted in this repository is built, and containerized.
  • The container is ONLY built after the tests are ran for the application.
  • The tested container image is pushed up to a docker registry.
  • The image can be pulled from the registry and deployed in Kubernetes.
Updated 20/06/2017 12:06 4 Comments

Should pre-defined build flavors be consistent with the old system?


For example, the quickest in old system will include the dynamic way, but in Hadrian, we might want to be literally the “quickest” way by not including the dynamic way at all.

The pros for being consistent with legacy definition of some way is:

  1. Less confusing for developers migrating from the old system
  2. Easier to port more logic from Makefiles directly without worrying about breaking some hard-coded implicit dependency on what “quickest” or alike mean

The cons for it, or the pros for having our own interpretation of “quickest”, are:

  1. More sane for newcomers
  2. Show the potential problem hidden by the second “pro” above

A middle ground, might be

  • Use new names for different dependencies
  • Document the new name and the old name

So when people gets confused about names they can still lookup and pick whatever they want.

Like quickest, we can build dynamic libs for quickest, but not for a similar one called quickest_static or fast_n_furious (kidding).

Updated 19/06/2017 22:20 1 Comments

Missing error for local interface merging with exported variable


<!– BUGS: Please use this template. –> <!– QUESTIONS: This is not a general support forum! Ask Qs at –> <!– SUGGESTIONS: See –>

TypeScript Version: 2.4.0


Noticed this in

interface Foo { bar: number }
export namespace Foo {
    export let baz = 1;

same with variable instead of namespace ts interface Foo { bar: number } export var Foo = { baz: 1, };

Expected behavior: Individual declarations in merged declaration 'Foo' must be all exported or all local.

Actual behavior: No error.

If I use a TypeAlias or class instead of the interface, it works as expected.

Updated 22/06/2017 22:00

Incorrect usage text after mis-typed command



I blundered into a command, hoping it would prompt me for the correct flags. But instead it suggested something illegal: shell $ az group delete mbdev az: error: unrecognized arguments: mbdev usage: az [-h] [--output {json,tsv,table,jsonc}] [--verbose] [--debug] [--query JMESPATH] {group} ... This disagrees with the correct command documentation: shell $ az group delete az group delete: error: argument --name/-n is required usage: az group delete [-h] [--output {json,tsv,table,jsonc}] [--verbose] [--debug] [--query JMESPATH] --name RESOURCE_GROUP_NAME [--yes] [--no-wait]

Basically the --name parameter is required but the first usage message suggests it could be a positional argument, which is wrong. ```

Outline the issue here: Usage text needs to be updated for this case. I’ll try to PR that.

Environment summary

Install Method: How did you install the CLI? (e.g. pip, interactive script, apt-get, Docker, MSI, nightly)
The curl | bash script, as recommended.

CLI Version: What version of the CLI and modules are installed? (Use az --version)

OS Version: What OS and version are you using?
macOS sierra.

Shell Type: What shell are you using? (e.g. bash, cmd.exe, Bash on Windows)
bash 3.2.57

Updated 19/06/2017 15:04 1 Comments

Automate release


As a follow-up to #17, automate some or all of the following checks/steps that need to be made for a release:

  • release comes from clean master
  • no dependency on snapshot versions
  • change version by removing -SNAPSHOT
  • tag that commit as release and later upload all artifacts to GitHub
  • go to the next snapshot version and commit the change
  • close and release on Sonatype
Updated 16/06/2017 11:24

Update ui.Repos.remove_content to remove packages from all pages


ui.Repos.remove_content uses ‘Select all’ checkbox to select every package on screen and then proceeds with delete. In 6.3 pagination on packages screen was added and tests started to fail as not all the packages but only first 20 are actually deleted.

4828 makes helper using 100 items per page which resolves issue for us as currently our fake repos contain only 32 packages. However, that’s not proper fix but rather a duct tape and to avoid possible failures in future we should use conditional loop to navigate through all pages and delete all the packages (or maybe not navigate but use that delete while packages are present)

Updated 15/06/2017 13:50

Create cli_template_command type


There are currently several create commands that utilize the ARM template deployment process: - vm create - vmss create - availability-set create - lb create - application-gateway create - vpn-connection create - acs create - acr create

We should create a cli_template_command template method to standardize some of the commonalities across these commands, such as --validate, --no-wait and table format, much like cli_generic_update_command and cli_wait_command do.

Updated 14/06/2017 22:07

recipe in repo for conda forge


part of

looks like we need to do a complete build and upload all artifacts (webpacks and jars) to pypi, and then the recipe gets a tarball from there to make the conda package.

here’s how Jupyter Lab does it (we’ll have jars too):

Updated 24/06/2017 02:10

[flow] Improve covariant style


We currently follow an awkward style for covariants

  constructor() {

    const self: any = this;
    self.closeConditionalPanel = this.closeConditionalPanel.bind(this);
    self.onEscape = this.onEscape.bind(this);
    self.onGutterClick = this.onGutterClick.bind(this);
    self.onGutterContextMenu = this.onGutterContextMenu.bind(this);
    self.onScroll = this.onScroll.bind(this);
    self.onSearchAgain = this.onSearchAgain.bind(t

@thejameskyle shared some wisdom on how we can improve the style

Class methods are covariant in Flow by default, which in effect means they are “read-only” and cannot be assigned to.

class Error extends React.Component {
  constructor(props) {
    this.onClick = this.onClick.bind(this); // Error
    //   ^ property `onClick`. Covariant property `onClick` incompatible with contravariant use in
    //     assignment of property `onClick`

  onClick(event: ButtonClickEvent) {
    // ...

  render() {
    return <button onClick={this.onClick}>Click Me</button>;

In order to make this work, you need to use an additional class field, which are invariant (read & write) by default, like this:

class WorksWithClassPropertyType extends React.Component {
  constructor(props) {
    this.onClick = this.onClick.bind(this); // Works!

  onClick: (ButtonClickEvent) => void;
  onClick(event) {
    // ...

Alternatively you can use the class properties proposal to get around all of this:

class WorksWithClassPropertyArrowFunction extends React.Component {
  onClick = (event: ButtonClickEvent) => {
    // ...

[See in Try Flow]

Updated 15/06/2017 19:33 6 Comments

Wait commands do not display polling indicator


The wait commands do not display the spinner and progress indication like other LROs. This likely occurs because the “wait” polling occurs in a custom method in the file.

Environment summary

Install Method: How did you install the CLI? (e.g. pip, interactive script, apt-get, Docker, MSI, nightly)
Answer here:

CLI Version: What version of the CLI and modules are installed? (Use az --version)
Answer here: azure-cli (2.0.7+dev)

acr (2.0.5+dev) acs (2.0.7+dev) appservice (0.1.7+dev) batch (3.0.0+dev) billing (0.1.0+dev) cdn (0.0.3+dev) cloud (2.0.3+dev) cognitiveservices (0.1.3+dev) component (2.0.5+dev) configure (2.0.7+dev) consumption (0.1.0+dev) core (2.0.7+dev) cosmosdb (0.1.7+dev) dla (0.0.7+dev) dls (0.0.7+dev) feedback (2.0.3+dev) find (0.2.3+dev) interactive (0.3.3+dev) iot (0.1.6+dev) keyvault (2.0.5+dev) lab (0.0.5+dev) monitor (0.0.5+dev) network (2.0.7+dev) nspkg (3.0.0+dev) profile (2.0.5+dev) rdbms (0.0.2+dev) redis (0.2.4+dev) resource (2.0.7+dev) role (2.0.5+dev) sf (1.0.2+dev) sql (2.0.4+dev) storage (2.0.7+dev) taskhelp (0.1.2+dev) testsdk (0.1.0+dev) utility-automation (0.1.1) vm (2.0.7+dev)

Python (Windows) 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)]

OS Version: What OS and version are you using?
Answer here: Win 10 CU

Shell Type: What shell are you using? (e.g. bash, cmd.exe, Bash on Windows)
Answer here: cmd.exe

Updated 13/06/2017 21:22

Have only one master package.json for this project


Right now there are two package.json files, one in truffle/, and another in meteor/. This is bad for versioning and makes the installed repo much larger (two node_modules dirs).

Also, meteor builds extremely slowly when running npm install && meteor. This occurs when certain modules in node_modules have very large javascript files (e.g. testrpc).

Should either make two separate repos for this, or have one master package.json in repo root.

Updated 14/06/2017 00:04 3 Comments

File structure


The file structure right now is pretty much just

src —- Components —- Containers

This will definitively get clustered soon as we add more containers and components. Then when we start adding redux, creating utils functions and tests it will get very clustered

What about moving to something like this:

Where the structure would be

src ….promises ……… components ……… containers ……… actions ……… reducers ……… utils ….cases ……… components ……… containers ……… actions ……… reducers ……… utils

Updated 14/06/2017 09:20 7 Comments

refactor command line arguments

  • [ ] introduce profiles
    • [ ] auto (auto-detect based on read length)
    • [ ] illumina (batch-processing, SIMD, small band if possible)
    • [ ] sanger (xdrop, larger band)
    • [ ] pacbio (default to sanger for now, later bigger band)
  • [ ] get rid of -p, instead detect mode from index / alphabet parameter
  • [ ] get rid of -di for lambda (autodetect from index)
Updated 13/06/2017 12:54

Immutable is not listed as one of the project dependencies


I just noticed that in several places in code we use Immutable module, but it is not set as a dependency in package.json I found it in 14 files in total

Steps to reproduce: just open the package.json and note that module immutable is not listed in dependencies. Then open for example src/utils/makeRecord.js and notice that it tries to import everything from immutable module.

Updated 14/06/2017 08:44 3 Comments

Do not run test on VSTS build


The only job of VSTS build should be building packages. The problem is the E2E post packing smoke test requires functional tests' “TestProjects”. Need to invoke the same task before running smoke test

Updated 15/06/2017 22:48

[flow] Reduce the number of ANYs


We’ve allowed the number of ANYs to grow fairly large and that reduces our coverage considerably.

There are some easy places to remove ANYs: 1. replace ANY return types with void when we know it’s the case 2. add flow types that we already have. We now have lots of types we didn’t have before… 3. add some easy types :)

We currently have 281 any types in 10 files. You can get this count by searching for any in the project or : any

Updated 12/06/2017 20:04 2 Comments

fork the recipe repo

twosigma/beakerx and then prepare a PR with recipes for our pkgs. four kernels:

beakerx-groovy beakerx-java beakerx-scala beakerx-clojure

and our python runtime in beakerx-python

and the UI and widgets in beakerx, a dependency of each of the above.

this is part of

Updated 22/06/2017 14:37 1 Comments

import_plugin hides exception source

Traceback (most recent call last):
  File "/home/rpfannsc/Projects/pytest-dev/pytest-venv/bin/pytest", line 11, in <module>
    load_entry_point('pytest', 'console_scripts', 'pytest')()
  File "/home/rpfannsc/Projects/pytest-dev/pytest-venv/lib/python3.5/site-packages/pkg_resources/", line 560, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/home/rpfannsc/Projects/pytest-dev/pytest-venv/lib/python3.5/site-packages/pkg_resources/", line 2648, in load_entry_point
    return ep.load()
  File "/home/rpfannsc/Projects/pytest-dev/pytest-venv/lib/python3.5/site-packages/pkg_resources/", line 2302, in load
    return self.resolve()
  File "/home/rpfannsc/Projects/pytest-dev/pytest-venv/lib/python3.5/site-packages/pkg_resources/", line 2308, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/home/rpfannsc/Projects/pytest-dev/pytest/", line 76, in <module>
    _preloadplugins()  # to populate pytest.* namespace so help(pytest) works
  File "/home/rpfannsc/Projects/pytest-dev/pytest/_pytest/", line 117, in _preloadplugins
  File "/home/rpfannsc/Projects/pytest-dev/pytest/_pytest/", line 126, in get_config
  File "/home/rpfannsc/Projects/pytest-dev/pytest/_pytest/", line 444, in import_plugin
    raise new_exc
ImportError: Error importing plugin "unittest": cannot import name 'fail'

as an example

its not that helpful to get the traceback cut at a bad location

Updated 11/06/2017 16:01

OS X CI timeout


This is not a new issue: we had frequent OS X CI timeout on Travis, because the build took too long. Very sparsely, it can finish within the time limit.

It can be annoying since we might never know if the build will actually succeed or not (lucky that my dev machine is OS X), not to say spending more time running tests.

Circle CI provides better OS X support, but it is not free. Travis also supports a beta-version cache mechanism, which seems useful (as in, but I am not sure about this.

Updated 24/06/2017 12:28 6 Comments

write-only variable in binder.ts


TypeScript Version: nightly (2.4.0-dev.20170609)


let root = container;
let hasRest = false;
while (root.parent) {
    if (root.kind === SyntaxKind.ObjectLiteralExpression &&
        root.parent.kind === SyntaxKind.BinaryExpression &&
        (root.parent as BinaryExpression).operatorToken.kind === SyntaxKind.EqualsToken &&
        (root.parent as BinaryExpression).left === root) {
        hasRest = true;
    root = root.parent;

Expected behavior:

This should do something?

Actual behavior:

Writes to two local variables, then returns without using them.

(We should catch this. #11499)

Updated 12/06/2017 23:48 1 Comments

Funding Choices discussion & research


How it works

To check it try navigating to (or any other website with a US VPN.

You’ll see an alert message like this: andy rubin s essential raises 300 million investment valuation set at around 1 billion for the startup 2017-06-08 13-24-36

You can view a few articles for free and then either allow ads or buy an ad removal pass and pay $0.01-$0.04 per article.

Below are my thoughts on this topic

“Funding choices” is not just an adblocking-blocker, it is a legit alternative for funding websites without seeing ads, so we should not simply circumvent it.

Instead, we should try to improve users experience.

For example, here’s what we can do:

  1. Integrate somehow with this contributor window and allow seamless disabling/enabling of AG for the website.
  2. Alert user about ads he’ll see if he opts to disable AG. How many ads are there, how many third-party requests will be allowed, how will it affect website performance, trackers/etc.
  3. Provide a semi-unblocking option, which will continue to block tracking stuff and will clear cookies and block fingerprinting from the unblocked domains.
  4. Reformat that alert window so that it was not that annoying
  5. If a user is not ready to pay or unblock ads, we might help him find an alternative.

What do we need now

  1. I need your feedback on the Funding Choices. What’s your opinion, what’re your thoughts, etc.
  2. We need to conduct a research on the technical side of it. How does it work, how does it track users, etc.
Updated 24/06/2017 15:22 10 Comments

Fork me on GitHub