Notes as I experience running this tool for the first time.

Goal
Write notes as I experience running this tool for the first time.
Why
If I write notes as I run the code for the first time
we get:

New user's perspective on the project
Feedback to the developer to see how his code is seen
List of comments, within a narrative context, that can be referred to in bugs or enhancements.
Potential information to add to the documentation.

How

Follow the docs and write notes below.
Take screen grabs in case they might be handy for docs.

Read the requirements

PHP 5.5.9 or newer

Let's check mine
$ php --version
PHP 7.1.14 (cli) (built: Feb  7 2018 18:33:30) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

Humm. Is this really min PHP 5.5.9 or newer? We have discussed ramping up the min to 7.1

Installation
Try install as a standalone application. I have never done this before so this is new to me.

Installation
You can install the command as a standalone application. Open a terminal and run:
composer create-project forikal-uk/ping-drive command

# or

git clone https://github.com/forikal-uk/ping-drive.git command
composer install -d command

Replace command with a path to a directory where the command must be installed. In this case the command is started by running:
php command/ping-drive ...

I go to my projects folder
$ pwd
/Users/jw/Documents/Projects/XmlAuthoring

Create a directory as destination.
$ mkdir ping-drive

Then get composer to create the project:
$ composer create-project forikal-uk/ping-drive ping-drive

  [InvalidArgumentException]
  Could not find package forikal-uk/ping-drive with stability stable.

create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--no-install] [--ignore-platform-reqs] [--] [<package>] [<directory>] [<version>]

Let's try Googling.
Try clear-cache
$ composer clear-cache
Clearing cache (cache-vcs-dir): /Users/jw/.composer/cache/vcs
Clearing cache (cache-repo-dir): /Users/jw/.composer/cache/repo
Clearing cache (cache-files-dir): /Users/jw/.composer/cache/files
Clearing cache (cache-dir): /Users/jw/.composer/cache
All caches cleared.
$ composer create-project forikal-uk/ping-drive ping-drive

  [InvalidArgumentException]
  Could not find package forikal-uk/ping-drive with stability stable.

create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--no-install] [--ignore-platform-reqs] [--] [<package>] [<directory>] [<version>]

OK. So, I suspect this is cos we have not edited our composer file and pushed a new tag to the repo.
I shall add a note to do so.

@forikal-uk

Then get composer to create the project:
$ composer create-project forikal-uk/ping-drive ping-drive

 [InvalidArgumentException]
 Could not find package forikal-uk/ping-drive with stability stable.

create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--no-install] [--ignore-platform-reqs] [--] [<package>] [<directory>] [<version>]

You need to publish this project to Packagist to make it available through Composer.
Or you can just run
git clone https://github.com/forikal-uk/ping-drive.git command
composer install -d command

Let's try again
Install as a standalone project
$ pwd
/Users/jw/Documents/Projects/XmlAuthoring
$ mkdir bin-ping
$  composer create-project forikal-uk/ping-drive bin-ping
Installing forikal-uk/ping-drive (v0.2.0)
  - Installing forikal-uk/ping-drive (v0.2.0): Loading from cache
Created project in bin-ping
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 46 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-ctype (v1.8.0): Loading from cache
  - Installing symfony/yaml (v3.4.11): Loading from cache
  - Installing symfony/filesystem (v3.4.11): Loading from cache
  - Installing psr/log (1.0.2): Loading from cache
  - Installing symfony/debug (v4.1.0): Loading from cache
  - Installing symfony/polyfill-mbstring (v1.8.0): Loading from cache
  - Installing symfony/console (v3.4.11): Loading from cache
  - Installing forikal-uk/xml-authoring-library (v0.2.1): Loading from cache
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing guzzlehttp/psr7 (1.4.2): Loading from cache
  - Installing guzzlehttp/promises (v1.3.1): Loading from cache
  - Installing guzzlehttp/guzzle (6.3.3): Loading from cache
  - Installing phpseclib/phpseclib (2.0.11): Loading from cache
  - Installing monolog/monolog (1.23.0): Loading from cache
  - Installing firebase/php-jwt (v5.0.0): Loading from cache
  - Installing google/apiclient-services (v0.61): Loading from cache
  - Installing psr/cache (1.0.1): Loading from cache
  - Installing google/auth (v1.3.0): Loading from cache
  - Installing google/apiclient (v2.2.1): Loading from cache
  - Installing sebastian/version (2.0.1): Downloading (100%)
  - Installing sebastian/resource-operations (1.0.0): Downloading (100%)
  - Installing sebastian/recursion-context (3.0.0): Downloading (100%)
  - Installing sebastian/object-reflector (1.1.1): Downloading (100%)
  - Installing sebastian/object-enumerator (3.0.3): Downloading (100%)
  - Installing sebastian/global-state (2.0.0): Downloading (100%)
  - Installing sebastian/exporter (3.1.0): Downloading (100%)
  - Installing sebastian/environment (3.1.0): Downloading (100%)
  - Installing sebastian/diff (3.0.0): Downloading (100%)
  - Installing sebastian/comparator (3.0.0): Downloading (100%)
  - Installing phpunit/php-timer (2.0.0): Downloading (100%)
  - Installing phpunit/php-text-template (1.2.1): Downloading (100%)
  - Installing phpunit/php-file-iterator (2.0.0): Downloading (100%)
  - Installing theseer/tokenizer (1.1.0): Downloading (100%)
  - Installing sebastian/code-unit-reverse-lookup (1.0.1): Downloading (100%)
  - Installing phpunit/php-token-stream (3.0.0): Downloading (100%)
  - Installing phpunit/php-code-coverage (6.0.7): Downloading (100%)
  - Installing doctrine/instantiator (1.1.0): Downloading (100%)
  - Installing webmozart/assert (1.3.0): Downloading (100%)
  - Installing phpdocumentor/reflection-common (1.0.1): Downloading (100%)
  - Installing phpdocumentor/type-resolver (0.4.0): Downloading (100%)
  - Installing phpdocumentor/reflection-docblock (4.3.0): Downloading (100%)
  - Installing phpspec/prophecy (1.7.6): Downloading (100%)
  - Installing phar-io/version (1.0.1): Downloading (100%)
  - Installing phar-io/manifest (1.0.1): Downloading (100%)
  - Installing myclabs/deep-copy (1.8.0): Downloading (100%)
  - Installing phpunit/phpunit (7.2.2): Downloading (100%)
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/lock ()
symfony/console suggests installing symfony/process ()
forikal-uk/xml-authoring-library suggests installing forikal-uk/xmlauthor-example-command (To see example how to use AbstractCommand)
phpseclib/phpseclib suggests installing ext-libsodium (SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.)
phpseclib/phpseclib suggests installing ext-mcrypt (Install the Mcrypt extension in order to speed up a few other cryptographic operations.)
phpseclib/phpseclib suggests installing ext-gmp (Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.)
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver)
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server)
google/apiclient suggests installing cache/filesystem-adapter (For caching certs and tokens (using Google_Client::setCache))
sebastian/global-state suggests installing ext-uopz (*)
phpunit/php-code-coverage suggests installing ext-xdebug (^2.6.0)
phpunit/phpunit suggests installing phpunit/php-invoker (^2.0)
phpunit/phpunit suggests installing ext-xdebug (*)
Writing lock file
Generating autoload files
$

So, that is great. We have got the packages working together. They might need a tweak here and there tho.
Try running it.
Let's ping our sample sheet.
See what happens if we don't provide the right arguments:
$ php bin-ping/ping-drive https://docs.google.com/spreadsheets/d/1kU_R8RokoMy9qvJqxy72H58cS48EVs0zRJXcgTZ5YFI/edit?usp=sharing
./bin/ping-drive$

OK, so it writes out ./bin/ping-drive. I am not sure what that means.
Let's try a fully formed invocation.
$ php bin-ping/ping-drive https://docs.google.com/spreadsheets/d/1kU_R8RokoMy9qvJqxy72H58cS48EVs0zRJXcgTZ5YFI/edit?usp=sharing --client-secret-file="../../../../APIKeys/gsheet-to-xml-e5eaf708560f.json"

and again
$ php ping-drive https://docs.google.com/spreadsheets/d/1kU_R8RokoMy9qvJqxy72H58cS48EVs0zRJXcgTZ5YFI/edit?usp=sharing --client-secret-file="../../../../APIKeys/gsheet-to-xml-e5eaf708560f.json"
./cat ping-drive
./bin/ping-drive$ cat bin/ping-drive
#!/usr/bin/env php
<?php

require_once __DIR__.'/../vendor/autoload.php';

$application = new \Symfony\Component\Console\Application('Ping Drive', '0.1.0');

$application->add($defaultCommand = new \Forikal\PingDrive\Command\PingDriveCommand());
$application->setDefaultCommand($defaultCommand->getName(), true);

$application->run();
$ php bin/ping-drive https://docs.google.com/spreadsheets/d/1kU_R8RokoMy9qvJqxy72H58cS48EVs0zRJXcgTZ5YFI/edit?usp=sharing --client-secret-file="../../../../APIKeys/gsheet-to-xml-e5eaf708560f.json"

Warning: realpath(): open_basedir restriction in effect. File(/Users) is not within the allowed path(s): (xxxxxxx) in /Users/x/Documents/Projects/XmlAuthoring/bin-ping/src/Command/PingDriveCommand.php on line 476

Warning: realpath(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (xxxxxxxx) in /Users/x/Documents/Projects/XmlAuthoring/bin-ping/src/Command/PingDriveCommand.php on line 476
 Couldn't read a configuration file: The `scapesettings.yaml` exists neither in the current directory nor in any parent directory
$ ls
LICENSE			composer.json		ping-drive		tests
README.md		composer.lock		scapesettings.yaml.dist	vendor
bin			phpunit.xml.dist	src
$ cp scapesettings.yaml.dist scapesettings.yaml
$ cat scapesettings.yaml
# The file can have any other parameters
google:
    clientSecretFile: google-client-secret.json # The path to an application client secret file (relative to this file)
    accessTokenFile: google-access-token.json   # The path to an access token file (relative to this file, optional, the file may not exist)
$ php bin/ping-drive https://docs.google.com/spreadsheets/d/1kU_R8RokoMy9qvJqxy72H58cS48EVs0zRJXcgTZ5YFI/edit?usp=sharing --client-secret-file="../../../../APIKeys/gsheet-to-xml-e5eaf708560f.json"
 Failed to authenticate to Google: missing the required redirect URI

Failed to authenticate to Google: missing the required redirect URI

Looks like there is a problem with the client secret file. I will investigate it.

BTW, you can add the -v option to see a more detailed progress information, e.g.
php bin/ping-drive -v  https://docs.google.com/spreadsheets/d/1kU_R8RokoMy9qvJqxy72H58cS48EVs0zRJXcgTZ5YFI/edit?usp=sharing

Thanks @Finesse
I will try again. I think the main issue is the order of steps in the docs. So, for example I might move the "How to get a Google API client secret file" to above the place where it provides the first example invocation.
I can update those as I experience the process.

Thanks @Finesse
I will try again. I think the main issue is the order of steps in the docs. So, for example I might move the "How to get a Google API client secret file" to above the place where it provides the first example invocation.
I can update those as I experience the process.

Wipe and re-install As a standalone project
OK let's restart this.
$ pwd
/Users/x/Documents/Projects/XmlAuthoring/bin-ping
$ cd ../
$ rm -fr bin-ping

$ composer create-project forikal-uk/ping-drive ping-alone
Installing forikal-uk/ping-drive (v0.2.1)
  - Installing forikal-uk/ping-drive (v0.2.1): Downloading (100%)
Created project in ping-alone
Loading composer repositories with package information
Updating dependencies (including require-dev)
...
Writing lock file
Generating autoload files

$ pwd
/Users/x/Documents/Projects/XmlAuthoring
$ cd ping-alone/

$ php bin/ping-drive https://docs.google.com/spreadsheets/d/1kU_R8RokoMy9qvJqxy72H58cS48EVs0zRJXcgTZ5YFI/edit?usp=sharing --client-secret-file="../../../../APIKeys/gsheet-to-xml-e5eaf708560f.json" -v
The access token file path is not specified, will try to get the path from a configuration file
The parent directory of `/Users/jw` is restricted (maybe by open_basedir), so the search of a configuration file can't be proceeded
A configuration file `scapesettings.yaml` exists neither in the current directory nor in any parent directory
The URL points to Google Drive, will get more information from Google
Getting the Google API client secret from the `../../../../APIKeys/gsheet-to-xml-e5eaf708560f.json` file
You need to authenticate to your Google account to proceed
Open the following URL in a browser, get an auth code and paste it below:

https://accounts.google.com/o/oauth2/auth?response_type=code&access_type=offline&client_id=101290304669248005543&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&state&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fspreadsheets.readonly&approval_prompt=auto

Auth code:

OK so I visit: https://accounts.google.com/o/oauth2/auth?response_type=code&access_type=offline&client_id=101290304669248005543&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&state&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fspreadsheets.readonly&approval_prompt=auto
I get an error:

That’s an error.

Error: redirect_uri_mismatch
The redirect URI in the request, urn:ietf:wg:oauth:2.0:oob, can only be used by a Client ID for native application. It is not allowed for the WEB client type. You can create a Client ID for native application at https://console.developers.google.com/apis/credentials/oauthclient
Learn more
Request Details
response_type=code
access_type=offline
client_id=101290304669248005543
redirect_uri=urn:ietf:wg:oauth:2.0:oob
state=
scope=https://www.googleapis.com/auth/drive.readonly https://www.googleapis.com/auth/spreadsheets.readonly
approval_prompt=auto
That’s all we know.

I guess I should follow the instructions on How to get the Google API client secret file
OK. So, in gsheet-to-Xml to API key is Service account key and in ping-drive the recommended API key to use is OAuth client ID.
I wonder if it is possible to have both types in one file.
Oh well, let's just follow the ping-drive recommendations and think about how to marry the two later.
Actually on the API key form it has a help guide:

It is an API key for a cli that has an interface

I can understand, now, that we ought to have these tools working in either context. However, the prime goal first, is to make it work for staff in a cli interface context.
So, O Auth ought to be the  recommended method for tools used in the context of: https://github.com/forikal-uk/xml-authoring-project

I have created and downloaded the key and put it into my APIKeys folder in my home directory:
/Users/x/APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json

Test other behaviours
Let's do it again and see if still remembers my session
$ php bin/ping-drive https://docs.google.com/spreadsheets/d/1kU_R8RokoMy9qvJqxy72H58cS48EVs0zRJXcgTZ5YFI/edit?usp=sharing --client-secret-file="../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json" -v
The access token file path is not specified, will try to get the path from a configuration file
The parent directory of `/Users/x` is restricted (maybe by open_basedir), so the search of a configuration file can't be proceeded
A configuration file `scapesettings.yaml` exists neither in the current directory nor in any parent directory
The URL points to Google Drive, will get more information from Google
Getting the Google API client secret from the `../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json` file
You need to authenticate to your Google account to proceed
Open the following URL in a browser, get an auth code and paste it below:

https://accounts.google.com/o/oauth2/auth?response_type=code&access_type=offline&client_id=596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&state&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fspreadsheets.readonly&approval_prompt=auto

Auth code: 4/AABefjKmuOEW5B7fRsQgE63FtG0Idujcwj5PKzXMnJJst44DGIhRY1x
Sending the authentication code to Google
Authenticated successfully
The Google authentication is completed
The URL is a Google Sheets file
Name: _GoodTemplateRow2.xlsx
Sheets: InventoryTab
A piece of the first sheet content:
+------+---------------+---------+----------+-------------------+
|      |               |         |          |                   |
| Name | KNumberExists | KNumber | Quantity | AlternativeNumber |
| baz  | true          | 1111111 | 99       |                   |
| bar  | false         |         | 99       | foo               |
|      |               |         |          |                   |
+------+---------------+---------+----------+-------------------+

Now, try again straight away
$ php bin/ping-drive https://docs.google.com/spreadsheets/d/1kU_R8RokoMy9qvJqxy72H58cS48EVs0zRJXcgTZ5YFI/edit?usp=sharing --client-secret-file="../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json" -v
The access token file path is not specified, will try to get the path from a configuration file
The parent directory of `/Users/x` is restricted (maybe by open_basedir), so the search of a configuration file can't be proceeded
A configuration file `scapesettings.yaml` exists neither in the current directory nor in any parent directory
The URL points to Google Drive, will get more information from Google
Getting the Google API client secret from the `../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json` file
You need to authenticate to your Google account to proceed
Open the following URL in a browser, get an auth code and paste it below:

https://accounts.google.com/o/oauth2/auth?response_type=code&access_type=offline&client_id=596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&state&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fspreadsheets.readonly&approval_prompt=auto

Auth code: 4/AABefjKmuOEW5B7fRsQgE63FtG0Idujcwj5PKzXMnJJst44DGIhRY1x
Sending the authentication code to Google
 Failed to authenticate to Google: Google has declined the auth code: Code was already redeemed.

OK. So, it does not appear to be able to write the access-token-file.

I wonder where the access token is written?
$ pwd
/Users/x/Documents/Projects/XmlAuthoring/ping-alone
$ ls
LICENSE			composer.json		scapesettings.yaml.dist	vendor
README.md		composer.lock		src
bin			phpunit.xml.dist	tests
$ ls -a
.			LICENSE			composer.lock		tests
..			README.md		phpunit.xml.dist	vendor
.gitattributes		bin			scapesettings.yaml.dist
.gitignore		composer.json		src
$ ls bin
ping-drive

$  php bin/ping-drive https://docs.google.com/spreadsheets/d/1kU_R8RokoMy9qvJqxy72H58cS48EVs0zRJXcgTZ5YFI/edit?usp=sharing --client-secret-file="../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json" -v --access-token-file="tmp-access-token"
The URL points to Google Drive, will get more information from Google
Getting the Google API client secret from the `../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json` file
You need to authenticate to your Google account to proceed
Open the following URL in a browser, get an auth code and paste it below:

https://accounts.google.com/o/oauth2/auth?response_type=code&access_type=offline&client_id=596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&state&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fspreadsheets.readonly&approval_prompt=auto

Auth code: 4/AAB_h4Qots9AFxywdegpQ3GXNxOZlkIgSZ-fc7jqjB2SBosCR2r1P-0
Sending the authentication code to Google
Authenticated successfully
Saving the access token to the `tmp-access-token` file
So subsequent executions will not prompt for authorization
The Google authentication is completed
The URL is a Google Sheets file
Name: _GoodTemplateRow2.xlsx
Sheets: InventoryTab
A piece of the first sheet content:
+------+---------------+---------+----------+-------------------+
|      |               |         |          |                   |
| Name | KNumberExists | KNumber | Quantity | AlternativeNumber |
| baz  | true          | 1111111 | 99       |                   |
| bar  | false         |         | 99       | foo               |
|      |               |         |          |                   |
+------+---------------+---------+----------+-------------------+
$  php bin/ping-drive https://docs.google.com/spreadsheets/d/1kU_R8RokoMy9qvJqxy72H58cS48EVs0zRJXcgTZ5YFI/edit?usp=sharing --client-secret-file="../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json" -v --access-token-file="tmp-access-token"
The URL points to Google Drive, will get more information from Google
Getting the Google API client secret from the `../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json` file
Getting the last Google API access token from the `tmp-access-token` file
The Google authentication is completed
The URL is a Google Sheets file
Name: _GoodTemplateRow2.xlsx
Sheets: InventoryTab
A piece of the first sheet content:
+------+---------------+---------+----------+-------------------+
|      |               |         |          |                   |
| Name | KNumberExists | KNumber | Quantity | AlternativeNumber |
| baz  | true          | 1111111 | 99       |                   |
| bar  | false         |         | 99       | foo               |
|      |               |         |          |                   |
+------+---------------+---------+----------+-------------------+
$ ls
LICENSE			composer.json		scapesettings.yaml.dist	tmp-access-token
README.md		composer.lock		src			vendor
bin			phpunit.xml.dist	tests

OK. That's great.

Test other Behaviours
Let's write out some sample commands to cut and paste:
### Sample invocations

If it is a Google Folder, lists the contents of the folder.

php bin/ping-drive https://drive.google.com/drive/folders/1ffBMTmpMZrqTGzq4e8vwdey40rupjfyz?usp=sharing --client-secret-file="../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json" -v --access-token-file="tmp-access-token"

If it is a Google Sheet, prints the name of the Sheet and some of the contents of the sheet.

php bin/ping-drive https://docs.google.com/spreadsheets/d/1hdKksm6Xj6SiL3r8paCzlW2gBMRnm445ZBflUL-591M/edit?usp=sharing --client-secret-file="../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json" -v --access-token-file="tmp-access-token"

If it is another type of file hosted on Google Drive, prints the name and type of the file.

php bin/ping-drive https://drive.google.com/file/d/1jfmnrKM49-Wq5v6JLQHB3nEizz0RyUYu/view?usp=sharing --client-secret-file="../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json" -v --access-token-file="tmp-access-token"

If it is an inaccessible Google Drive file, prints the corresponding message.

php bin/ping-drive https://docs.google.com/spreadsheets/d/12j2CrvWbZUU2_OJiIIr-sRkut2N-Gid4uwA0ZpkVks0/edit?usp=sharing --client-secret-file="../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json" -v --access-token-file="tmp-access-token"

Otherwise prints an error message.

I have just realised that it is possible to have the constant options in front of the variable url
So, this works:
$  php bin/ping-drive  --client-secret-file="../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json" --access-token-file="tmp-access-token" https://docs.google.com/spreadsheets/d/12j2CrvWbZUU2_OJiIIr-sRkut2N-Gid4uwA0ZpkVks0/edit?usp=sharing
The URL is a Google Sheets file
Name: PrivateFile
Sheets: Sheet1
A piece of the first sheet content:
+-------------------+
| Inaccessable file |
+-------------------+
$

Let's go back to each of the commands above and reorder the arguments so that the url is always the final argument. It makes it more usable I think.

The order now also matches the --help output
$ php bin/ping-drive --help
Usage:
  ping-drive [options] [--] <url>

Arguments:
  url                                          The target item URL

Options:
      --client-secret-file=CLIENT-SECRET-FILE  The path to an application client secret file. If not specified, the command will try to get a path from a scapesettings.yaml file. A client secret is required.
      --access-token-file=ACCESS-TOKEN-FILE    The path to an access token file. The file may not exists. If an access token file is used, the command remembers user credentials and doesn't require a Google authentication next time.
      --force-authenticate                     If set, you will be asked to authenticate even if an access token exist.
  -h, --help                                   Display this help message
  -q, --quiet                                  Do not output any message
  -V, --version                                Display this application version
      --ansi                                   Force ANSI output
      --no-ansi                                Disable ANSI output
  -n, --no-interaction                         Do not ask any interactive question
  -v|vv|vvv, --verbose                         Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Help:
  See the readme

So, that's nice.

Try repo form of Installing as a standalone project

Installing as a standalone project
...
or
# Cloning the git project
git clone https://github.com/forikal-uk/ping-drive.git <directoryName>
composer install -d <directoryName>

Where <directoryName> is the directory where the command must be installed. In this case the command is started by running:
php <directoryName>/bin/ping-drive  --help

Next try Installing as a project dependency

Installing as a project dependency
Open a terminal, go to the project root directory and run:
composer require forikal-uk/ping-drive

In this case the command is started by running:
php vendor/bin/ping-drive  --help

Try it:
Install it
$ pwd
/Users/x/Documents/Projects/XmlAuthoring
$ ls
gsheet-to-xml     xml-authoring-library   xml-authoring-tools
ping-repo     xml-authoring-project   xmlauthor-example-command
$ rm -rf ping-repo
$ mkdir ping-parent
$ cd ping-parent/
$ composer init

  Welcome to the Composer config generator

This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>) [x/ping-parent]: foo
 The package name foo is invalid, it should be lowercase and have a vendor name, a forward slash, and a package name, matching: [a-z0-9_.-]+/[a-z0-9_.-]+
Package name (<vendor>/<name>) [x/ping-parent]: foo/bar
Description []:
Author [, n to skip]: n
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []: project
License []: Apache-2.0

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? n
Would you like to define your dev dependencies (require-dev) interactively [yes]? n

{
    "name": "foo/bar",
    "type": "project",
    "license": "Apache-2.0",
    "require": {}
}

Do you confirm generation [yes]? yes
$ composer require forikal-uk/ping-drive
Using version ^0.2.1 for forikal-uk/ping-drive
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 20 installs, 0 updates, 0 removals
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing guzzlehttp/psr7 (1.4.2): Loading from cache
  - Installing guzzlehttp/promises (v1.3.1): Loading from cache
  - Installing guzzlehttp/guzzle (6.3.3): Loading from cache
  - Installing phpseclib/phpseclib (2.0.11): Loading from cache
  - Installing psr/log (1.0.2): Loading from cache
  - Installing monolog/monolog (1.23.0): Loading from cache
  - Installing firebase/php-jwt (v5.0.0): Loading from cache
  - Installing google/apiclient-services (v0.61): Loading from cache
  - Installing psr/cache (1.0.1): Loading from cache
  - Installing google/auth (v1.3.0): Loading from cache
  - Installing google/apiclient (v2.2.1): Loading from cache
  - Installing symfony/polyfill-ctype (v1.8.0): Loading from cache
  - Installing symfony/filesystem (v3.4.11): Loading from cache
  - Installing symfony/yaml (v3.4.11): Loading from cache
  - Installing symfony/debug (v4.1.0): Loading from cache
  - Installing symfony/polyfill-mbstring (v1.8.0): Loading from cache
  - Installing symfony/console (v3.4.11): Loading from cache
  - Installing forikal-uk/xml-authoring-library (v0.2.3): Loading from cache
  - Installing forikal-uk/ping-drive (v0.2.1): Loading from cache
phpseclib/phpseclib suggests installing ext-libsodium (SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.)
phpseclib/phpseclib suggests installing ext-mcrypt (Install the Mcrypt extension in order to speed up a few other cryptographic operations.)
phpseclib/phpseclib suggests installing ext-gmp (Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.)
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver)
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server)
google/apiclient suggests installing cache/filesystem-adapter (For caching certs and tokens (using Google_Client::setCache))
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/lock ()
symfony/console suggests installing symfony/process ()
forikal-uk/xml-authoring-library suggests installing forikal-uk/xmlauthor-example-command (To see example how to use AbstractCommand)
Writing lock file
Generating autoload files

Use it
$ php vendor/bin/ping-drive  --help

Warning: require_once(/Users/x/Documents/Projects/XmlAuthoring/ping-parent/vendor/forikal-uk/ping-drive/bin/../vendor/autoload.php): failed to open stream: No such file or directory in /Users/x/Documents/Projects/XmlAuthoring/ping-parent/vendor/forikal-uk/ping-drive/bin/ping-drive on line 4

Fatal error: require_once(): Failed opening required '/Users/x/Documents/Projects/XmlAuthoring/ping-parent/vendor/forikal-uk/ping-drive/bin/../vendor/autoload.php' (include_path='.:') in /Users/jw/Documents/Projects/XmlAuthoring/ping-parent/vendor/forikal-uk/ping-drive/bin/ping-drive on line 4

It is one of those wack-a-mole situations. If the bin file is in the bin of the project root, then it can find the autoloader, but if it is buried in the vendor directory - it cannot find the autoload script.
There, surely, must be some common solution to this.
$ cat vendor/forikal-uk/ping-drive/bin/ping-drive
#!/usr/bin/env php
<?php

require_once __DIR__.'/../vendor/autoload.php';

$application = new \Symfony\Component\Console\Application('Ping Drive', '0.1.0');

$application->add($defaultCommand = new \Forikal\PingDrive\Command\PingDriveCommand());
$application->setDefaultCommand($defaultCommand->getName(), true);

$application->run();

Bug #5   has been marked as fixed.
Let's continue.
Thanks.
I am testing it out now
$ cd XmlAuthoring/
$ ls
capture-lookups			ping-parent			xml-authoring-tools
csvs				xml-authoring-library		xmlauthor-example-command
gsheet-to-xml			xml-authoring-project
$ cd ping-parent/
$ ls
composer.json	composer.lock	vendor
$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 0 installs, 2 updates, 0 removals
  - Updating google/apiclient-services (v0.61 => v0.62): Loading from cache
  - Updating forikal-uk/ping-drive (v0.2.1 => v0.2.3): Loading from cache
Writing lock file
Generating autoload files
$ php vendor/bin/ping-drive --help
Usage:
  ping-drive [options] [--] <url>

Arguments:
  url                                          The target item URL

Options:
      --client-secret-file=CLIENT-SECRET-FILE  The path to an application client secret file. If not specified, the command will try to get a path from a scapesettings.yaml file. A client secret is required.
      --access-token-file=ACCESS-TOKEN-FILE    The path to an access token file. The file may not exists. If an access token file is used, the command remembers user credentials and doesn't require a Google authentication next time.
      --force-authenticate                     If set, you will be asked to authenticate even if an access token exist.
  -h, --help                                   Display this help message
  -q, --quiet                                  Do not output any message
  -V, --version                                Display this application version
      --ansi                                   Force ANSI output
      --no-ansi                                Disable ANSI output
  -n, --no-interaction                         Do not ask any interactive question
  -v|vv|vvv, --verbose                         Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Help:
  See the readme

Good.
OK. let's try a command.

$ php bin/ping-drive --client-secret-file="../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json" -v --access-token-file="tmp-access-token" \
> https://docs.google.com/spreadsheets/d/1hdKksm6Xj6SiL3r8paCzlW2gBMRnm445ZBflUL-591M/edit?usp=sharing
Could not open input file: bin/ping-drive
$ php vendor/bin/ping-drive --client-secret-file="../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json" -v --access-token-file="tmp-access-token" https://docs.google.com/spreadsheets/d/1hdKksm6Xj6SiL3r8paCzlW2gBMRnm445ZBflUL-591M/edit?usp=sharing
The URL points to Google Drive, will get more information from Google
Getting the Google API client secret from the `../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json` file
You need to authenticate to your Google account to proceed
Open the following URL in a browser, get an auth code and paste it below:

https://accounts.google.com/o/oauth2/auth?response_type=code&access_type=offline&client_id=596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&state&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fspreadsheets.readonly&approval_prompt=auto

Auth code: 4/AAA9jYGB8krxZ9BvjZLJiZdg_zso5qoY8gbivZTBY171JrZXNYnI_mo
Sending the authentication code to Google
Authenticated successfully
Saving the access token to the `tmp-access-token` file
So subsequent executions will not prompt for authorization
The Google authentication is completed
The URL is a Google Sheets file
Name: _GoodSheet
Sheets: InventoryTabA, InventoryTabB, ignoreMe_
A piece of the first sheet content:
+------+---------------+---------+----------+-------------------+
|      |               |         |          |                   |
| Name | KNumberExists | KNumber | Quantity | AlternativeNumber |
| baz  | true          | 1111111 | 99       |                   |
| bar  | false         |         | 99       | foo               |
|      |               |         |          |                   |
+------+---------------+---------+----------+-------------------+

OK  that worked.

Now let's try the usage of the config file.
$ ls vendor/forikal-uk/
ping-drive/            xml-authoring-library/
$ ls vendor/forikal-uk/ping-drive/
.gitattributes           README.md                phpunit.xml.dist         tests/
.gitignore               bin/                     scapesettings.yaml.dist
LICENSE                  composer.json            src/
$ cp vendor/forikal-uk/ping-drive/scapesettings.yaml.dist scapesettings.yaml
$ cat scapesettings.yaml
# The file can have any other parameters
google:
    clientSecretFile: google-client-secret.json # The path to an application client secret file (relative to this file)
    accessTokenFile: google-access-token.json   # The path to an access token file (relative to this file, optional, the file may not exist)
$ nano scapesettings.yaml
$ cat scapesettings.yaml
# The file can have any other parameters
google:
    clientSecretFile: "../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json" # The path to an application client secret file (relative to this file)
    accessTokenFile: tmp-access-token   # The path to an access token file (relative to this file, optional, the file may not exist)
$ php vendor/bin/ping-drive -v  https://docs.google.com/spreadsheets/d/1hdKksm6Xj6SiL3r8paCzlW2gBMRnm445ZBflUL-591M/edit?usp=sharing
The client secret file path is not specified, will try to get the path from a configuration file
The access token file path is not specified, will try to get the path from a configuration file
Reading options from the `/Users/jw/Documents/Projects/XmlAuthoring/ping-parent/scapesettings.yaml` configuration file
The URL points to Google Drive, will get more information from Google
Getting the Google API client secret from the `/Users/jw/Documents/Projects/XmlAuthoring/ping-parent/../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json` file
Getting the last Google API access token from the `/Users/jw/Documents/Projects/XmlAuthoring/ping-parent/tmp-access-token` file
The Google authentication is completed
The URL is a Google Sheets file
Name: _GoodSheet
Sheets: InventoryTabA, InventoryTabB, ignoreMe_
A piece of the first sheet content:
+------+---------------+---------+----------+-------------------+
|      |               |         |          |                   |
| Name | KNumberExists | KNumber | Quantity | AlternativeNumber |
| baz  | true          | 1111111 | 99       |                   |
| bar  | false         |         | 99       | foo               |
|      |               |         |          |                   |
+------+---------------+---------+----------+-------------------+

Brilliant.
So, that works too.
Nice.
One final check to see if fixing the "installed as dependency" broke "install as standalone"...

$ cd ../
$ ls
capture-lookups     gsheet-to-xml     xml-authoring-library   xml-authoring-tools
csvs        ping-parent     xml-authoring-project   xmlauthor-example-command
$ mkdir bin-ping
$ composer create-project forikal-uk/ping-drive bin-ping
Installing forikal-uk/ping-drive (v0.2.3)
  - Installing forikal-uk/ping-drive (v0.2.3): Loading from cache
Created project in bin-ping
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 46 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-ctype (v1.8.0): Loading from cache
  - Installing symfony/yaml (v3.4.11): Loading from cache
  - Installing symfony/filesystem (v3.4.11): Loading from cache
  - Installing psr/log (1.0.2): Loading from cache
  - Installing symfony/debug (v4.1.0): Loading from cache
  - Installing symfony/polyfill-mbstring (v1.8.0): Loading from cache
  - Installing symfony/console (v3.4.11): Loading from cache
  - Installing forikal-uk/xml-authoring-library (v0.2.3): Loading from cache
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing guzzlehttp/psr7 (1.4.2): Loading from cache
  - Installing guzzlehttp/promises (v1.3.1): Loading from cache
  - Installing guzzlehttp/guzzle (6.3.3): Loading from cache
  - Installing phpseclib/phpseclib (2.0.11): Loading from cache
  - Installing monolog/monolog (1.23.0): Loading from cache
  - Installing firebase/php-jwt (v5.0.0): Loading from cache
  - Installing google/apiclient-services (v0.62): Loading from cache
  - Installing psr/cache (1.0.1): Loading from cache
  - Installing google/auth (v1.3.0): Loading from cache
  - Installing google/apiclient (v2.2.1): Loading from cache
  - Installing sebastian/version (2.0.1): Loading from cache
  - Installing sebastian/resource-operations (1.0.0): Loading from cache
  - Installing sebastian/recursion-context (3.0.0): Loading from cache
  - Installing sebastian/object-reflector (1.1.1): Loading from cache
  - Installing sebastian/object-enumerator (3.0.3): Loading from cache
  - Installing sebastian/global-state (2.0.0): Loading from cache
  - Installing sebastian/exporter (3.1.0): Loading from cache
  - Installing sebastian/environment (3.1.0): Loading from cache
  - Installing sebastian/diff (3.0.0): Loading from cache
  - Installing sebastian/comparator (3.0.0): Loading from cache
  - Installing phpunit/php-timer (2.0.0): Loading from cache
  - Installing phpunit/php-text-template (1.2.1): Loading from cache
  - Installing phpunit/php-file-iterator (2.0.0): Loading from cache
  - Installing theseer/tokenizer (1.1.0): Loading from cache
  - Installing sebastian/code-unit-reverse-lookup (1.0.1): Loading from cache
  - Installing phpunit/php-token-stream (3.0.0): Loading from cache
  - Installing phpunit/php-code-coverage (6.0.7): Loading from cache
  - Installing doctrine/instantiator (1.1.0): Loading from cache
  - Installing webmozart/assert (1.3.0): Loading from cache
  - Installing phpdocumentor/reflection-common (1.0.1): Loading from cache
  - Installing phpdocumentor/type-resolver (0.4.0): Loading from cache
  - Installing phpdocumentor/reflection-docblock (4.3.0): Loading from cache
  - Installing phpspec/prophecy (1.7.6): Loading from cache
  - Installing phar-io/version (1.0.1): Loading from cache
  - Installing phar-io/manifest (1.0.1): Loading from cache
  - Installing myclabs/deep-copy (1.8.0): Loading from cache
  - Installing phpunit/phpunit (7.2.4): Downloading (100%)
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/lock ()
symfony/console suggests installing symfony/process ()
forikal-uk/xml-authoring-library suggests installing forikal-uk/xmlauthor-example-command (To see example how to use AbstractCommand)
phpseclib/phpseclib suggests installing ext-libsodium (SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.)
phpseclib/phpseclib suggests installing ext-mcrypt (Install the Mcrypt extension in order to speed up a few other cryptographic operations.)
phpseclib/phpseclib suggests installing ext-gmp (Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.)
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver)
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server)
google/apiclient suggests installing cache/filesystem-adapter (For caching certs and tokens (using Google_Client::setCache))
sebastian/global-state suggests installing ext-uopz (*)
phpunit/php-code-coverage suggests installing ext-xdebug (^2.6.0)
phpunit/phpunit suggests installing phpunit/php-invoker (^2.0)
phpunit/phpunit suggests installing ext-xdebug (*)
Writing lock file
Generating autoload files
$ php bin-ping/
.gitattributes           LICENSE                  bin/                     composer.lock            scapesettings.yaml.dist  tests/
.gitignore               README.md                composer.json            phpunit.xml.dist         src/                     vendor/
$ php bin-ping/bin/ping-drive

  Not enough arguments (missing: "url").

ping-drive [--client-secret-file CLIENT-SECRET-FILE] [--access-token-file ACCESS-TOKEN-FILE] [--force-authenticate] [--] <url>

$ php bin-ping/ping-drive https://docs.google.com/spreadsheets/d/1kU_R8RokoMy9qvJqxy72H58cS48EVs0zRJXcgTZ5YFI/edit?usp=sharing
Could not open input file: bin-ping/ping-drive
$ php bin-ping/bin/ping-drive https://docs.google.com/spreadsheets/d/1kU_R8RokoMy9qvJqxy72H58cS48EVs0zRJXcgTZ5YFI/edit?usp=sharing
 The client secret file is specified neither in the CLI arguments nor in the configuration file
$ php bin-ping/bin/ping-drive --client-secret-file="../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json" -v --access-token-file="tmp-access-token" \
> https://drive.google.com/drive/folders/1ffBMTmpMZrqTGzq4e8vwdey40rupjfyz?usp=sharing
The URL points to Google Drive, will get more information from Google
Getting the Google API client secret from the `../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json` file

Warning: file_exists(): open_basedir restriction in effect. File(../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json) is not within the allowed path(s): (/usr/local/bin:/Users/x:/var/folders/vc:/usr/bin/php) in /Users/jw/Documents/Projects/XmlAuthoring/bin-ping/vendor/forikal-uk/xml-authoring-library/src/GoogleAPI/GoogleAPIClient.php on line 345
Failed to authenticate to Google: Couldn't parse the client secret file: The `../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json` file doesn't exist
$ php bin-ping/bin/ping-drive --client-secret-file="../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json" -v --access-token-file="tmp-access-token" https://drive.google.com/drive/folders/1ffBMTmpMZrqTGzq4e8vwdey40rupjfyz?usp=sharing
The URL points to Google Drive, will get more information from Google
Getting the Google API client secret from the `../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json` file
You need to authenticate to your Google account to proceed
Open the following URL in a browser, get an auth code and paste it below:

https://accounts.google.com/o/oauth2/auth?response_type=code&access_type=offline&client_id=596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&state&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fspreadsheets.readonly&approval_prompt=auto

Auth code: 4/AAA4sj9PpYdiCAEhdNzBahlPlBtaXH-p2yFXm-ZyxAvK4-te1YFglMU
Sending the authentication code to Google
Authenticated successfully
Saving the access token to the `tmp-access-token` file
So subsequent executions will not prompt for authorization
The Google authentication is completed
The URL is a Google Drive folder
Name: MoreSampleInventorySheets
Content:
 - A folder. Name: TestFixtures-Phase2
 - A folder. Name: TestFixtures-Phase1
 - A folder. Name: DocumentationSamples

Great so that  works too.

OK now. One final check of standalone with the config in use.
$ pwd
/Users/x/Documents/Projects/XmlAuthoring
$ ls
bin-ping      tmp-access-token
capture-lookups     xml-authoring-library
csvs        xml-authoring-project
gsheet-to-xml     xml-authoring-tools
ping-parent     xmlauthor-example-command
$ cp ping-parent/scapesettings.yaml scapesettings.yaml
$ php bin-ping/bin/ping-drive -v https://drive.google.com/drive/folders/1ffBMTmpMZrqTGzq4e8vwdey40rupjfyz?usp=sharing
The client secret file path is not specified, will try to get the path from a configuration file
The access token file path is not specified, will try to get the path from a configuration file
Reading options from the `/Users/x/Documents/Projects/XmlAuthoring/scapesettings.yaml` configuration file
The URL points to Google Drive, will get more information from Google
Getting the Google API client secret from the `/Users/x/Documents/Projects/XmlAuthoring/../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json` file

Warning: file_exists(): open_basedir restriction in effect. File(/Users/x/Documents/Projects/XmlAuthoring/../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json) is not within the allowed path(s): (/usr/local/bin:/Users/x:/var/folders/vc:/usr/bin/php) in /Users/x/Documents/Projects/XmlAuthoring/bin-ping/vendor/forikal-uk/xml-authoring-library/src/GoogleAPI/GoogleAPIClient.php on line 345
Failed to authenticate to Google: Couldn't parse the client secret file: The `/Users/x/Documents/Projects/XmlAuthoring/../../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json` file doesn't exist
$ nano scapesettings.yaml

This was the conifg
$ cat scapesettings.yaml
# The file can have any other parameters
google:
    clientSecretFile: "../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json" # The path to an application client secret file (relative to this file)
    accessTokenFile: tmp-access-token   # The path to an access token file (relative to this file, optional, the file may not exist)

let's run it:
$ php bin-ping/bin/ping-drive -v https://drive.google.com/drive/folders/1ffBMTmpMZrqTGzq4e8vwdey40rupjfyz?usp=sharing
The client secret file path is not specified, will try to get the path from a configuration file
The access token file path is not specified, will try to get the path from a configuration file
Reading options from the `/Users/x/Documents/Projects/XmlAuthoring/scapesettings.yaml` configuration file
The URL points to Google Drive, will get more information from Google
Getting the Google API client secret from the `/Users/x/Documents/Projects/XmlAuthoring/../../../APIKeys/OAuth-client_secret_596511451672-flbjqooi8bemek6b96v1oq61jf414oja.apps.googleusercontent.com.json` file
Getting the last Google API access token from the `/Users/x/Documents/Projects/XmlAuthoring/tmp-access-token` file
The Google authentication is completed
The URL is a Google Drive folder
Name: MoreSampleInventorySheets
Content:
 - A folder. Name: TestFixtures-Phase2
 - A folder. Name: TestFixtures-Phase1
 - A folder. Name: DocumentationSamples

Great it works.
All perfect!
Thanks @Finesse


merge from template-arlac77-github

.github/workflows/ci.yml

chore(deps): add 16.14.0 remove 16.13.2 (jobs.test.strategy.matrix.node-version)
chore: add 16.14.0 (jobs.release.steps.with.node-version)

.github/workflows/codeql_analysis.yml

chore: add 16.14.0 (jobs.analyze.steps.with.node-version)

:tada: This PR is included in version 1.13.3 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


6664 fix sync values in style form

The backbone forms expect another kind of format to work
Fixes #6664
cc @xavijam

Dale :mans_shoe:!


Unable to load driver

Trying the MouClassInputInjection on Win 10, built with VS2019:
C:\Users\WDKRemoteUser\Desktop\kbtest>\drivertest\devcon install \drivertest\drivers\mouclassinputinjection.inf HID_DEVICE_SYSTEM_MOUSE
Device node created. Install is complete when drivers are installed...
Updating drivers for HID_DEVICE_SYSTEM_MOUSE from C:\drivertest\drivers\mouclassinputinjection.inf.
devcon failed.
C:\Users\WDKRemoteUser\Desktop\kbtest>MouiiCL.exe
MouiiIoInitialization failed: 2
Not sure if INF file is correct. Remote deploy gives some errors. See same issue with MouHidInputHook...

Try loading the driver using sc.exe or a driver loader like https://github.com/tandasat/DrvLoader. The driver is not signed so the target environment needs to have test signing enabled.

Hi, I'm having the same problem as well. what's the correct way to install this?


Clean up numpy.pxd

As soon as inner functions is supported and ticket http://trac.cython.org/ticket/99 is fixed, numpy.pxd should be cleaned up as it is using massive amounts of hacks right now to get around these limitations.
Migrated from http://trac.cython.org/ticket/101

Marking this as "third party" since the NumPy declarations are better maintained by the NumPy project.


+!@VIDEO-VIRAL]** El Siri Lea𝚔ed Video Original Full On Social Media

31 seconds ago - El Siri 2024 video Lea𝚔ed Viral the internet by storm and amazed viewers on various social media platforms. El Siri 2024 Lea𝚔ed Video Viral On Social Media.El Siri 2024 Lea𝚔ed Video Viral On Social Media.El Siri 2024 Lea𝚔ed Video Viral On Social Media.
[🔴📺📱 Cl𝚒ck Here To link 👉👉 (Full El Siri 2024 Video1)
🔴📺📱 Cl𝚒ck Here To link 👉👉[ (Full El Siri 2024 Video2)]
[🔴📺📱 Cl𝚒ck Here To link 👉👉 (Full El Siri 2024 Video1)
🔴📺📱 Cl𝚒ck Here To link 👉👉[ (Full El Siri 2024 Video2)]
El Siri 2024 Lea𝚔ed Video Viral On Social Media 2024.El Siri 2024 Lea𝚔ed Video Viral On Social Media 2024.
The recurrent theme of Lea𝚔ed tapes and the subsequent fallout serves as a reminder of the fragility of reputation in the digital era. As the lines between private and public life continue to blur, celebrities like Prison Officer find themselves at the mercy of internet chatter, where a rumor can ignite a firestorm of speculation and judgment.
In the ever-evolving landscape of celebrity culture, the Ishowspeedscandal underscores the relentless pursuit of sensationalism, a pursuit that often comes at the expense of truth and dignity. As we navigate the complexities of the digital age, the line between entertainment and exploitation remains perilously thin.
As the situation unfolds, the truth remains shrouded in mystery, leaving the public to ponder the authenticity of the rumors. In a world where fame and infamy are two sides of the same coin, the saga of Ishowspeed is a testament to the power of social media to shape narratives and challenge the boundaries of privacy and consent.
The viral video of El Siri 2024 Nude Lea𝚔 emerging online has amassed tremendous views across fan accounts and social media sites with one video clip. The viral video circulating recently shows El Siri 2024 Nude Lea𝚔 in an unexpected and hilarious moment while in public running errands.
Numerous fans have rushed to watch the viral video and share the clip among followers featuring El Siri 2024 Nude Lea𝚔 caught in an amusing and awkward situation. While surprising, the authentic and candid video showing El Siri 2024 Nude Lea𝚔 handling a real life blooper so genuinely has earned praise from viewers. Nevertheless, fans watch the current viral video of El Siri 2024 Nude Lea𝚔 that emerged online with delight and clamor for what the celebrity icon’s reaction to the widely spread viral video will be.
The fan video showing El Siri 2024 Nude Lea𝚔 first emerged on Twitter on Monday, posted by an amused fan who claimed to have captured the silly incident on their phone camera while out and about. The viral clip of El Siri 2024 Nude Lea𝚔 had garnered over 2 million views by Tuesday morning as more users on Instagram, Facebook and YouTube began uploading and sharing the embarrassing yet entertaining video.
El Siri 2024 Nude Lea𝚔 El Siri Lea𝚔 video
El Siri 2024 Nude Lea𝚔 Lea𝚔ed pictures
El Siri 2024 Nude Lea𝚔 explicit content Lea𝚔
El Siri account breach
El Siri data hack
El Siri 2024 Nude Lea𝚔 personal information exposed
Desi Xvideos Pakistani Sexy
Campinos Xxx 2014 Kajal
Jerk Videos Ass Xxnx
El Siri 2024 Lea𝚔ed Video
XnX VIRAL El Siri Noodles Viral Video L𝚎aked on X Twitter
latest Lea𝚔ed Video Viral On Social Media
El Siri Me Lea𝚔ed Com
Scoop Big Xnxx Celebrity
Latest News, Photos, Videos on Lea𝚔ed Video
Outdoor Desi Village The
Latest Videos of Lea𝚔ed Videos
Xnx VIRAL El Siri Noodles Lea𝚔ed Video Trending
Viral Lea𝚔ed Video, Aakhir Woh Larki Kon Thi
Blue Flims 2024 Lea𝚔ed
Trending Lea𝚔ed Videos Viral
El Siri
Viral El Siri Lea𝚔ed Video Trending ON X Twitter
18+ viral mms Lea𝚔ed video telegram links
XXX Telegram LINK!! El Siri Lea𝚔ed Video Viral Trending ON Twitter
Here's x.n.x El Siri 2024 Nude Lea𝚔ed 2024 Video Viral On Soc𝚒al Med𝚒a Tw𝚒tter.
El Siri download
El Siri twitter
Viral video link website
Telegram viral video link 2024
Telegram viral link download
Viral video link download

VVF

⬆
⬆
⬆

⬆
⬆
⬆
        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 HD 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HD HOT ONLINE ▶
⬆
⬆
⬆
✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅
**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HOT ONLINE ▶
⬆
⬆
⬆
⬆
⬆
⬆

VVF 2

⬆
⬆
⬆

⬆
⬆
⬆
        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 HD Viral 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HD HOT ONLINE ▶
⬆
⬆
⬆
✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅
**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 Viral 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HOT ONLINE ▶
⬆
⬆
⬆
⬆
⬆
⬆

cvbcvbvcb


Travis - use secure env vars for testing

We can set secure env vars on travis, hidden keys that won't be visible in builds, etc.
Could set one for username and one for password, then we can use authenticate_sb() as needed

Would be interested in eventually testing for access to private items, but we'd need an SB account specifically for public (GitHub/Travis) tests, which sounds like a tricky nut to crack.

Would be nice to have a test account. My account is basically a test account, I don't have any important items in there that can't be deleted. So that's an option.

related to #133

Have you done the secure keys for this type of thing in a pkg? It looks promising, but I didn't really know where to start.

Wow, didn't know this was possible! All in favor if it's as secure as it sounds.

docs on it http://docs.travis-ci.com/user/environment-variables/#Encrypted-Variables
You can set them via the travis file, or just in the settings tab on the travis site for the repo -
You access them from the travis servers using Sys.getenv()
AFAIK they are very secure, but i'm no travis expert.

I looked into it for appveyor too a while ago

Looks like we'll want to make our tests robust to not having those variables available in some builds:

Encrypted environment variables are not available to pull requests from forks due to the security risk of exposing such information to unknown code.

(from webpage scott referenced above)

We should also think about creating an SB service account a la sbtoolsdev or something like that for this purpose.

Ok, service account created and secure env vars set. sb_user and sb_pass.


Add vault_bin_path to the PATH

The vault_bin_path might not be included in the search path
for the user executing Ansible.
This will cause the install to be done over and over again.
At least on systems running RHEL the, default, /usr/local/bin
vault_bin_path is not included in the PATH of root

Thanks!


ESLint server will not be restarted.

Issue Type: Bug
The ESLint server crashed 5 times in the last 3 minutes. The server will not be restarted.
VS Code version: Code - Insiders 1.22.0-insider (a716373aaaf50cbce3618688a645b324721b35dd, 2018-03-14T05:15:41.910Z)
OS version: Windows_NT x64 10.0.16299

System Info

Item
Value

CPUs
Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz (4 x 2904)

Memory (System)
7.88GB (3.39GB free)

Process Argv
C:\Program Files\Microsoft VS Code Insiders\Code - Insiders.exe

Screen Reader
no

VM
0%

Extensions (7)

Extension
Author (truncated)
Version

html-snippets
abu
0.2.1

path-intellisense
chr
1.4.2

vscode-eslint
dba
1.4.7

vscode-html-css
ecm
0.2.0

vetur
oct
0.11.7

vuehelper
oys
0.1.0

vscode-icons
rob
7.21.0

(1 theme extensions excluded)

Reproduces only with extensions

Any additional information in the ESLint output channel. Usually there would be some tracing information.

@dbaeumer I don't know why the request failed.GIFIframe by IllusionWing.
[Trace - 17:46:47] Sending notification 'textDocument/didOpen'.
[Trace - 17:46:47] Received request 'workspace/configuration - (0)'.
[Trace - 17:46:47] Sending response 'workspace/configuration - (0)'. Processing request took 2ms
[Info  - 17:46:48] Connection to server got closed. Server will restart.

Can you share the project on which this happens. Best as a clonable GitHub repository. I guess something goes wrong with the configuration that is read from VS Code. That is the last request that succeeds. Is there anything special with our workspace / user settings for this project.

@silencyXiao dups https://github.com/Microsoft/vscode-eslint/issues/437

Thanks so much， I reinstalled nodejs，now It's ok，but I don't know why，Maybe It is affected by some of the configuration of the nodejs. I'm not sure.


move test directory to be inside the docusign_esign directory

This isn't really a bug. But when the docusign package is installed the test directory is placed at the same level as all the other site-packages in a Python installation. If other packages did the same thing and placed their test directories at the same level then I don't know what would happen but it's probably not good.

@juliocarrera good point. I created ticket DCM-2744 for us to look into removing test from the distribution, while keeping it in Github.


Created cheatsheet for CSS3

Added new Cheat sheet for CSS.
Best for everyone from beginner to expert.

Thanks a lot!

my pleasure 😊


Add "css" param to splash

Currently splash gets all stylesheets by default. We could add parameter css=(0 or 1).

I'm closing it in favor of https://github.com/scrapinghub/splash/pull/225. You can filter out requests based on URLs; with that PR you'll be able to filter CSS based on their Content-Type.


Remove support old variable names for Search.

https://github.com/twosigma/znai/pull/283 made a change to fallback to old variables if documents were created before the name change.
After all of documents get updated with the new variables, revert the change.

is this fully completed?

I still see one third of docs older than 1 year.


Update lodash

This package depends on lodash version 3.x, which contains four security vulnerabilities, two of which are ranked high, and two are ranked medium: https://snyk.io/test/npm/lodash/3.10.1
This PR upgrades the dependency to the latest version and fixes compatibility issues induced by the upgrade from 3.x to 4.x.
I have run npm test with success.

@mxbrandi I made a node only version of this if you are interested
https://www.npmjs.com/package/node-monologue
https://github.com/Foo-Foo-MQ/node-monologue
If you are also looking for these changes to get a version of rabbot updated, I also have a fork that I am maintaining as a replacement...
https://github.com/Foo-Foo-MQ/foo-foo-mq
https://www.npmjs.com/package/foo-foo-mq


Support net4.6 and separates serializers

While dealing with #15 the #13 bit me in the backside, so I did two in one.
@mtkennerly is this what you wanted?
Your PR was ok, but there are some edge cases caused by #8 and your requirement.
fix #15
fix #13

Ok. I will create a changelog, make sure tests run for 5.0 and 4.6.1 and throw away Mono tests, they were useless anyway.


software engineer question

These questions cover a broad range of technical topics suitable for both entry-level and intermediate-level proficiency.

Both Frontend and Backend 3mtt question


Rails/PluckId is not excluding array collections

Expected behavior
No alerts for arrays.
Actual behavior
Rails/PluckId raises an alert when using pluck(:id) with array collections.
Arrays does not support .ids, that only works for ActiveRecord::Relation collections.
Steps to reproduce the problem
I have this code:
array = [{ id: 1 }, { id: 2 }]
extracted_ids = array.pluck(:id)

Rubocop suggestion:
Rails/PluckId: Use ids instead of pluck(:id).
    extracted_ids = array.pluck(:id)
                          ^^^^^^^^^^

Updated code:
array = [{ id: 1 }, { id: 2 }]
extracted_ids = array.ids

Then it produces the following error:
NoMethodError: undefined method `ids' for [{:id=>1}, {:id=>2}]:Array

RuboCop version
bundle exec rubocop -V
0.88.0 (using Parser <IP_ADDRESS>, rubocop-ast 0.2.0, running on ruby 2.7.1 x86_64-linux)

The Rails/PluckId cop is already marked unsafe (Safe: No).
https://docs.rubocop.org/rubocop-rails/2.7/cops_rails.html#railspluckid
On the other hand, it is difficult to know a receiver type in the current static analysis implementation. So, It may be possible to consider disable the cop by default if there are many false alarms to users.

The Rails/PluckId cop is already marked unsafe (Safe: No).
https://docs.rubocop.org/rubocop-rails/2.7/cops_rails.html#railspluckid
On the other hand, it is difficult to know a receiver type in the current static analysis implementation. So, It may be possible to consider disable the cop by default if there are many false alarms to users.

Sure, I've disabled the cop because otherwise I have to add a lot of disable comments when using pluck with array collections.
Maybe you can check if it responds to ids as a guard clause. :thinking: not sure if it's possible in the current implementation.

Yeah, it would be redundant to introduce respond_to?(:ids) even when it is not needed :-)
It seems better to set Safe: false by default for this cop. Thank you for the feedback!

Yeah, it would be redundant to introduce respond_to?(:ids) even when it is not needed :-)
It seems better to set Safe: false by default for this cop. Thank you for the feedback!

What do you mean? I have the cop disabled because otherwise it will not pass the CI rubocop check.
I mean, it's not an rubocop --auto-correct thing. There are "false alarms" when enabling this cop.
An alternative could be to add a rubocop:disable Rails/PluckId to every line that makes a pluck to an array, but there are ~ 15 occurrences in this project, and I think the same thing happens to most people.

It seems better to set Safe: false by default for this cop.

Ah, I was typo. Correctly it is Enabled: false.

I've opened the PR #307.

Won't the same problem occur for Rails/PluckInWhere ?
 Record.where(id: something.pluck(:whatever))

Won't the same problem occur for Rails/PluckInWhere ?

@inkstak Sure. There will be similar problems. On the other hand, the context is narrowed down to the condition of where. It is not yet predicted how many false positives will occur in this context. So, I would like to watch the situation as a different issue. Thank you for the feedback.

Won't the same problem occur for Rails/PluckInWhere ?

Just FYI, I opened the PR #317 to resolve a false positive for Rails/PluckInWhere cop.

If you still want to keep the Rubocop, you use the map method instead of pluck when you are sure the collection is an Array

array = [{ id: 1 }, { id: 2 }]
extracted_ids = array.map(&:id)

@mos-adebayo It won't because Hash doesn't responds to id method.

map is a Ruby method to iterate a method - in shorthand version - of each item of an enumerable
pluck is a Rails method to iterate a key of each item

array = [{ id: 1 }, { id: 2 }]
array.pluck(:id)  # => [1, 2]
array.map(&:id)   # => undefined method `id' for {:id=>1}:Hash (NoMethodError)

Item = Data.define(:id)
array = [Item.new(1), Item.new(2)]
array.map(&:id)   #=>  [1, 2]
array.pluck(:id)  #=> undefined method `[]' for #<data Item id=1> (NoMethodError)


flynn scale should list scales for all releases

Prior releases may be left scaled up, if certain conditions occur. In order to maintain in that event, it would be helpful to see a list of all (non-zero) scales, not just the one for the current release.

@temujin9 with the proposed change in #1785, you can achieve this with:
$ flynn release -q | xargs -L1 flynn scale -r
web=1
web=0
web=0
web=0

If you want the release IDs in the output:
$ for release in $(flynn release -q); do echo "${release}: $(flynn scale -r ${release})"; done
9ec2563c4989405d8b387d2ba41f1817: web=1
3d2b027fbbf24e549673af528c4b5e5b: web=0
e1a1bcbc8a1d460cb415bd062d763b94: web=0
3ea4fe62c40242a893f8c42ebea7f269: web=0

Is that good enough?

Honestly, that's still quite illegible. I'll probably end up wrapping it if you don't implement in Flynn itself.

I think we should add a flynn scale --all command that does this.

:+1: for @titanous' suggestion.


lima run with only One barcode

hello,
I try to run lima with only one barcode:

bc1000
CTCTACTTACTTACTG

and then I add another two barcodes:

bc1000
CTCTACTTACTTACTG
bc1001
GTCGTATCATCATGTA
bc1002
AATATACCTATCATTA

I found the two results for 'bc1000' is different, the first one is about 6.7G, and the second one is 6.8G. How can I reduce the difference？
Thanks

Increase the minimum score required to call a barcode. It's set to 0 by default.


Use a canonical source for vertex.py and prompts.py

Currently, vertex.py and prompts.py are duplicated for use by the flask app. Ideally they’d instead be imported (or symlinked) from a canonical source.

This is partially resolved in #48 – prompts.py is no longer duplicated.


Refactor leaderboard

Wanna have the bug fixed quickly?
Visit Issue hunt...

What is the point of having an issue with no description at all?

Shows up in change notes

And how does this description help a user?

Maybe not but helps me

Not clear what this means

Not clear what this means


回复速度

请问一下，AI的回复速度会受什么影响？

Hi, I believe you'll get better help if you create an issue with English so more people can understand your issue. Thanks.


how to add different favicon for different routers?

content is the same with title.

Hi @sunq0001 since web browsers only request the favicon from a single URL : /favicon.ico you can only have one icon per domain name. Are the different routers on different domain names?

Hi, @dougwilson  thanks for your explanation. what i mention is different routers in same domain names. i am new in Node.js and Express.  just curious to know.   as you said people won't use different favicon in same domain, then it solves my qustions. :)

Yea, this is a web browser limitation; since no matter where you are, the browser will only request the same URL. For example, if you open http://mysite.com/foo/bar, the browser only looks for the icon at http://mysite.com/favicon.ico. If you go to http://mysite.com/admin/tools, the browser will still only look for the icon at http://mysite.com/favicon.ico, so there isn't a way to have more than one anyway :)


Stream does not find

I found strange behavior... Simple code:
let mut archive = msi::Package::open(file).unwrap();
let streams = archive.streams().collect::<Vec<String>>();
for name in streams {
    let stream = archive.read_stream(&name);
    if let Err(e) = stream {
        println!("{:?}", e);
    }
}

Output:
Custom { kind: NotFound, error: "Stream \"\\u{5}DigitalSignature\" does not exist" }
Custom { kind: NotFound, error: "Stream \"\\u{5}MsiDigitalSignatureEx\" does not exist" }

msi file to reproduce: test.msi.zip.

Thanks for the report.  I think I've figured out what's happening, but I'm not sure yet which of several possible solutions is most correct.
Short version: These stream names are being stored unencoded, which is confusing the msi crate—they appear in the list of streams, but when you try to read the stream, the msi crate encodes the name and then doesn't find the encoded name in the underlying CFB file, so it thinks it doesn't exist.
Longer version: Stream names in the underlying CFB file are stored as UTF-16.  To save space, stream names in MSI files are normally encoded, with up to two ASCII characters packed into each UTF-16 character (see https://github.com/mdsteele/rust-msi/blob/master/src/internal/streamname.rs).  (Side note: I've never found anywhere where this scheme is documented.  If there's a public doc that describes the encoding, I'd love to see it.)
However, there's an exception for the special "\u{5}SummaryInformation" stream that appears in every MSI file, whose name is not encoded, and which the msi crate special-cases (it is excluded from the list of streams, and its data is accessed instead through the summary_info() method).  It seems that "\u{5}DigitalSignature" and "\u{5}MsiDigitalSignatureEx" are also special streams whose names are not encoded.  (Maybe that's what the \u{5} prefix is supposed to signify?  I don't know of anywhere that that's documented, either.)

I did some more digging, and at least found some more clues as to the meaning of the DigitalSignature and MsiDigitalSignatureEx data (this code comment in particular was illuminating).  I think the best solution is for the msi crate to exclude these from the list of streams, and provide higher-level methods for dealing with them, just as it already does for SummaryInformation.

@mdsteele thank you for fixes, can you make small release?

Sure; v0.4.0 is now published.


PETTT Feature #1: Model Reconstruction

First of a series of PRs for various features that have been implemented. The primary feature of this PR is geometric model reconstruction from Proteus mesh data structures with proper topology but not shape information.
The model reconstruction handles 3D geometries and identifies external boundaries by the material flags.
The reconstruction capability is handled in SCOREC/core and assembling the requisite inputs are the primary modifications to Proteus.

[ ] update jupyter notebook to show capability

The number of files/commits are a lot larger than they should be.

History of feature branch was modified via cherry-picking of commits on top of master.

@cekees hashdist/hashstack#998 needs to be pulled in before compilation can pass on Travis CI.

Merging hashdist/hashstack#999 and updating the .hashstack_default commit should resolve the build issues after the most recent commits.

Whenever this PR is ready, it would be helpful to add the following to the merge commit message for bookkeeping purposes:
"PETTT Project (Number: PP-CFD-KY09-011-P3) Deliverable D2: Provide VMS-based error estimation, smoothed inputs to anisotropic mesh adaptation, and 3D discrete model reconstruction;  (Task 2A) – anisotropic indicators at the interface."


Remove NOTSET loglevel

Description
Remove NOTSET loglevel
(as discovered in the demo meeting)
Self Check:
Strike through any lines that are not applicable (~~line~~) then check the box

[ ] Attached issue to pull request
[x] Changelog entry
[x] Type annotations are present
[x] Code is clear and sufficiently documented
[x] No (preventable) type errors (check using make mypy or make mypy-diff)
[x] Sufficient test cases (reproduces the bug/tests the requested feature)
[x] Correct, in line with design
[x] End user documentation is included or an issue is created for end-user documentation (add ref to issue here: )

Processing this pull request

Failed to merge changes into iso4 due to merge conflict.Please open a pull request for these branches separately.

Merged into branches master in d2232dc587e1b000c06b9251dd7936be1e7a7c7f

Not closing this pull request due to previously commented issues for some of the destination branches. Please open a separate pull request for those branches. You can safely close this pull request and delete the source branch.


Update project files for Java 1.7 syntax support

I believe there's something we need to declare in gradle.properties and/or elsewhere. So let's figure that out.

Diamond syntax FTW!

You have to add the following in the android section of your build.gradle:
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}


Write initial documentation

Write an intial documentantion that describes the features that area actually available.
In particular, write documentation about

how to create commands and how them works
how to define arguments and describe all the attributes that can be used

In each page, provide an example.

initial documetation written


Remove ARN Parameter from Firehose DeliveryStream Resource

Description of your changes
This removes the ARN parameter from the Firehose DeliveryStream Resource. After a conversation with @mbbush in this thread https://crossplane.slack.com/archives/C05E0UE46S2/p1711042281273589 this is an attribute we should move to status. I also took some time to optimize the way arn's for other resources were referenced

I have:

[x] Read and followed Crossplane's contribution process.
[x] Run make reviewable to ensure this PR is ready for review.
[x] Added backport release-x.y labels to auto-backport this PR if necessary.

How has this code been tested

/test-examples="examples/firehose/v1beta1/deliverystream.yaml"


Can I use local microphone and speaker with Go2RTC?

No cameras or external devices. I want to use only local audio devices.

You can use microphone, but there is no speaker implementation yet.


how to close Sharing

how to close sharing? i don`t need this function.

i edit theme on my local project!

Hmm Okay, or, I might put the option for that. Anyway, Thank you.


Different result in bench with mitata

Describe the bug
Hi!
I was creating a bench with mitata and vitest bench and the result are very different.
Mitata shows a x15 diff with the slowest option, vitest only a x2.
Reproduction
Vitest bench
https://stackblitz.com/edit/node-odkzk5?file=package.json,tests%2Fexample.bench.ts
Execute npm install and npm run bench

Mitata
https://stackblitz.com/edit/node-fnlpam?file=package.json
Execute npm install and tsx bench.ts

System Info
System:
    OS: Linux 5.0 undefined
    CPU: (8) x64 Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
    Memory: 0 Bytes / 0 Bytes
    Shell: 1.0 - /bin/jsh
  Binaries:
    Node: 16.14.2 - /usr/local/bin/node
    Yarn: 1.22.19 - /usr/local/bin/yarn
    npm: 7.17.0 - /usr/local/bin/npm
  npmPackages:
    vitest: ^0.24.3 => 0.24.3

Used Package Manager
npm
Validations

[X] Follow our Code of Conduct
[X] Read the Contributing Guidelines.
[X] Read the docs.
[X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
[X] Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.
[X] The provided reproduction is a minimal reproducible example of the bug.

This might be the problem with tinybench library. @Aslemammad I checked the reproduction and it still shows only a 2 times difference, do you think there might be a bug in tinybench?

Yes, it might be! Can we have an upstream issue on Tinybench so I check it soon? Thanks.

The reason is that you are using different data sets in these tests
vitest
const data = new Array(1000000).fill(0).map((_, i) => ({
  name: faker.name.fullName(),
  cellName: faker.music.genre(),
  test: faker.lorem.paragraph(),
}));

mitata
const data = new Array(1000000).fill(0).map((_, i) => ({
  name: faker.name.fullName(),
  cellName: faker.name.fullName(),
  test: faker.lorem.paragraph(),
}));

note the cellName column
if you are interested in comparing these libraries, you can try this template
https://stackblitz.com/edit/node-vitest-2220?file=bench.js

Thank you!


Census PEP Annual Population

This dataset has Annual Population Estimates from the year 1900 to 2020 for different geographic level such as National, State, County, and Cities.

All the review comments were addressed. Kindly review the scripts


Static dependencies System.Collections.Immutable and System.Runtime.Metadata not included in Mono release

The F# compiler now has static dependencies on System.Collections.Immutable and System.Runtime.Metadata. However these DLLs are not included in Mono packaging and are not available in the Mono version of the .NET Framework.  We need to work out what to do about this.

I’m going to take another crack at using the F# compiler  /staticlink option, that would be by far the easiest path if we can get it to work
Thanks
Don
From: Don Syme
Sent: 21 September 2016 16:22
To: Kevin Ransom<EMAIL_ADDRESS><EMAIL_ADDRESS>Jo Shields<EMAIL_ADDRESS>Subject: Dependencies and Mono packaging of F# compiler
Hi Kevin, Jo,
I’m trying to update the Mono build of F# for recent changes in http://github.com/fsharp/fsharp.  The current “master” of the Mono edition has a major problem where System.Collections.Immutable.dll and System.Runtime.Metadata.dll can’t be found at runtime.
Due to the way the Mono edition of F# is build and shipped, it’s quite hard to include extra DLLs like this one in the overall package. This is because the Fsc.exe and FSharp.Compiler.dll end up in the same overall directory as csc.exe and other tools. This means that dependencies which aren’t part of the overall .NET/Mono Framework can’t be used.  So the following dependencies are causing problems:

System.ValueType.dll
System.Collections.Immutable.dll
System.Runtime.Metadata.dll

The DiaSymReader dependencies aren’t a problem since they aren’t used by the Mono build.
These dependencies are also a problem for the Debian package of the F# compiler , which must include a “source package” containing full ZIP’d source that can be built from scratch.  Getting the exact source for these components is tricky because it doesn’t come as standard in nuget packages.
The easiest thing will be to use the “--staticlink" flag but unfortunately that doesn’t work on modern components that reference System.Runtime.dll instead of mscorlib.dll.
I'm currently trying to fix this in the latest integration from Microsoft\visualfsharp

Fixed in <IP_ADDRESS>


chore(tests-integration): add integration test binary

Stack:

#1671
#1670
#1669
#1668 ⬅
#1667
#1666
#1665
#1664

⚠ Part of a stack created by spr. Do not merge manually using the UI - doing so may have unexpected results.

This change is


Fix Minimum Order Size for BCH

Expected Behavior

GDAX website specifies the minimum trading size for BCH is 0.01

All Orders placed on GDAX are subject to the following minimum order sizes:
BTC: 0.001
BCH: 0.01
ETH: 0.01
LTC: 0.1
USD: 10
EUR: 10
GBP: 10

Actual Behavior

Instead, I got this warning and error:

Warning: Due to brokerage limitations, orders will be rounded to the nearest lot size of 1
101 | 18:15:00: Unable to submit order with id -10 which quantity (0.01) is less than lot size (1).

Potential Solution

Update Minimum Lot Size for BCH
Reproducing the Problem

using QuantConnect.Brokerages;
using QuantConnect.Data;
using QuantConnect.Orders;
using System;
using QuantConnect.Securities.Crypto;

namespace QuantConnect.Algorithm.CSharp
{
    public class TestBCHIssue : QCAlgorithm
    {
        private string MySymbol = "BCHUSD";
        private Crypto Security;

        public override void Initialize()
        {
            SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash);
            Security = AddCrypto(MySymbol, Resolution.Minute);
        }

        public override void OnData(Slice data)
        {
            if (!Portfolio.Invested)
            {
                MarketOrder(MySymbol, 0.01m);
            }
        }

        public override void OnOrderEvent(OrderEvent orderEvent)
        {
            Log(String.Format("Order Min Lot Size {0}", Security.SymbolProperties.LotSize));
        }
    }
}

System Information

LEAN: 68416d4c9a
Checklist

[x] I have completely filled out this template
[x] I have confirmed that this issue exists on the current master branch
[x] I have confirmed that this is not a duplicate issue by searching issues

[x] I have provided detailed steps to reproduce the issue

Hi @Waxavi,
thanks for the report, it seems that the symbol properties database csv file in the QC cloud server is out of date and does not include the BCH pairs, we'll fix it as soon as possible.
The lot size (used for rounding order sizes) is defined in the symbol properties database and is set to 0.00000001 for all crypto pairs:
https://github.com/QuantConnect/Lean/blob/master/Data/symbol-properties/symbol-properties-database.csv#L240
The minimum order size for crypto pairs is defined in the GDAXBrokerageModel here:
https://github.com/QuantConnect/Lean/blob/master/Common/Brokerages/GDAXBrokerageModel.cs#L34

Thanks @StefanoRaggi
Yes, I was confused by the GDAXBrokerageModel, but the property Security.SymbolProperties.LotSize was giving me a value of 1, so I knew there was a problem but couldn't find where.

Thanks @Waxavi we've updated the cloud and it'll be patched in production in the next few days ago.

@jaredbroad It looks like this is back again? I'm hitting Backtest Handled Error: Unable to submit order with id -10 which quantity (0.522753039693893670780046202) is less than lot size (1). for SetBrokerageModel(BrokerageName.Bitfinex, AccountType.Margin); I've shared a reproducible algo with you via Share :)


Implement copycat transport with gRPC

https://github.com/Alluxio/alluxio/issues/9469

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4739/
Test PASSed.

@bf8086 PTAL. Thanks!

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4743/
Test FAILed.

Jenkins, test this please

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4744/
Test PASSed.

@calvinjia PTAL. Thanks!

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4757/
Test PASSed.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4764/
Test FAILed.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4768/
Test FAILed.

Jenkins, test this please

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4769/
Test PASSed.

@bf8086, Updated the PR. PTAL.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4773/
Test FAILed.

Jenkins, test this please

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4774/
Test FAILed.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4775/
Test FAILed.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4777/
Test FAILed.

Jenkins, test this please

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4790/
Test PASSed.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4792/
Test PASSed.

@bf8086 Updated PR. PTAL.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4801/
Test FAILed.

Jenkins, test this please

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4804/
Test PASSed.

alluxio-bot, merge this please.


[doc ] translate some english doc into Chinese

Thanks!
However, translations are managed through Crowdin: https://github.com/thejameskyle/babel-handbook/blob/master/CONTRIBUTING.md#translating-the-handbook


Feature Request: Testbed OpenGL 2.1 compatibility

Hi,
I am building in Raspberry Pi 3 and as you know, it supports OpenGL 2.1 at most.
So, do you have any idea to make current Testbed compatible to GL 2.1?

Sorry, I'm all in on OpenGL 3.0. Support for 2.1 would require somebody to fork and support that feature.

@orhaneee Install mesa3d, a opengl software implementation to support programs with unsuporten opengl version.


[Q] Adding additional completion sources

Thanks for your nice and lightweight plugin!
It realy works great with nvim-lsp. I would like to integrate additional completion sources like other words in the current or other buffers, or from different tmux panes. Is there already support for these kind of sources? How can I include these?

Thanks for the kind words!
Right now I'd said that additional sources can definitely be integrated but it could be tedious because I haven't create a proper way for other to easily to that. Moreover the lsp completion is working in an asynchronously, making it harder to control it(I've been working on solving that lately). I think the ultimate goal is to support other sources like  did. If you're interesting in creating custom source you can first take a look at source.lua, source/ts_complete.lua and source/snippet.lua.
By the way, I'm also working on chaining completion like (follow this ) and ins-complete integration. I think other words in the current or other buffers can be done with ins-complete(with <c-n> and <c-p>).
If you have further question or some suggestion free feel to ask me here! Thanks!

Adding additional completion source is now possible! See this  for example. Feel free to ask me if you have any question!


archived bookmarks import/export

This PR aims to export/import archived bookmarks together with all the others.
To distinguish archived bookmarks from not archived ones, I propose to use Netscape-bookmark-file-1 folders, and in particular, a folder named "archive" at the top level folder tree.
To do this, I extended Netscape-bookmark-file-1 parser to manage nested folders too. I defined a new dataclass "NetscapeBookmarkFileData" that stores nested folders and bookmarks. This dataclass is used in importer.py/exporter.py to import/export all bookmarks.

Thanks for your effort, but I think the solution is overly complicated for what it needs to accomplish. While I would like to support preserving the archived flag when migrating between linkding instances, I don't see the need to structure archived bookmarks into a folder to add support for folders in the import / export. I would be fine with a solution that just adds an attribute like archived="true" to the exported bookmarks, and then parses that attribute on import. Also please note that any new contribution should provide unit tests to verify that the new functionality works, and keeps working, as expected.
As it has been some time I don't know if there is still interest in this, so I'll close the PR for now. Feel free to contribute a new PR with the changes outlined above.

I would love to have a way to export archived items separately and independently. I'll just vote here


Update help texts, remove broken links

Took some of the info from the discontinued kadira support page to augment help texts. Removed broken links to kadira support.

Instead of removing we could think about linking the galaxy meteor guide:
https://galaxy-guide.meteor.com/apm-getting-started.html#Meteor-APM-Dashboard
Most of the pages are copied from the old kadira guide.
What do you think @msteinmn ?
If we remove the links completly, I would prefer to remove instead of comment out these lines.


Add hg to af-magic, and tweak the virtualenv support a bit

I've been using the af-magic theme for a while now and I love it, just had a couple tweaks inspired by my workflow that I thought would be widely useful.

Added mercurial support to af-magic, so now the vcs prompt will show in either a git or hg repository
The virtualenv prompt was white and bumped up against the user@hostname output. Fixed that so its green (which I thought highlighted it more thematically) and has a space before user@hostname

Before virtualenv fix:

After virtualenv fix:

cc @mcornella as last one to touch this theme and @andyfleming as original theme-writer

@mcornella or others, does anything else need to happen with this in order for it to be merged?

Looks good to me 👍


Android - VC stuck at loading state in Mobile ID app

Describe the bug
Unable to download VC from mobile APK, VC stuck at loading state
To Reproduce
1.Unlock app
2.Enter valid UIN and request for VC
Expected behavior
without any errors we should be able to download VC
Current behavior
Unable to download VC, VC stuck in loading state
Screenshots

Smartphone :

Device: PIXEL 6
OS: Android 13
MOSIP Version: <IP_ADDRESS>
MOSIP server: qa5.mosip.net
APP link; https://github.com/mosip/inji/actions/runs/3854157494

Additional context :
UIN used :<PHONE_NUMBER>,<PHONE_NUMBER>

@Sujithbn Please provide the root cause for this issue to be verified.

we dont have UIN download anymore, with VID we don't face this issue, hence closing this


Default avatar doesn't show when there is a problem with the avatar loading on the staging version

Expected behavior
If there is an issue with loading the users' avatars, the default avatar should be used.
Actual behavior
On staging version (staging.busy.org) the default avatar may not load and then the user sees a duplicity in the username.

Two posts were loaded "at the same time" but in one of them the avatar loaded and in the other, it did not.

How to reproduce

not really sure. wait for the avatar load failure

Browser: Chrome
Operating system: Windows 10

It might be related to recent changes with server side rendering. @Sekhmet may want to look into this.

Weird, for me its working fine when avatar is down...