Resolve relative URL paths for images to fully-qualified ones

Filing this bug to make sure it gets addressed. Not sure if the bug is present, but I presume so:
When snapshotting a page at http://example.com/foo/bar/page.html, make sure to record image URLs within it
with fully qualified names. For example, page.html might have this:

This should be snapshotted as:

The same will need to be done for any CSS styles that reference URLs. For example:
background: url("subdirectory/background.png");
needs to be rewritten as:
background: url("http://example.com/foo/bar/subdirectory/image.png");
One code reference:
http://james.padolsey.com/snippets/getting-a-fully-qualified-url/

I created a function that will convert a partial url to a URL object, (which contains the fully qualified url) based on the link you provided.
For CSS styles,  I retrieve them all using window.getComputedStyle, which seems to return only absolute urls.  (Section 3.4.1 of https://www.w3.org/TR/css-values/)

window.getComputedStyle does indeed return the absolute url.  See Notes section: https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle

@chrishtr can I close this issue, or should I change the way I am getting computing fully qualified urls?

@chrishtr can I close this issue?  Or should I change the way I get the fully qualified URL?

Sounds fine to close. Assume it's tested?

I've got one test for it.


Spkl dev 290

Hi @scottdurow
Any chance this can be pulled. It fixes an issue from the previous pull.
Cheers

Can you target the spkl_dev branch please. This PR currently shows 15k lines changed!

sorry, my bad! 🤦♂


Change KV drivers configuration struct to allow defaults

Per discussions and as result of work on local KV driver, decided to change approach and allow defaults configuration to be managed under the config package

Checking status

@nopcoder currently defaults are handled in database.py under the kv package. Do we still want to move it to config?


Plugin causes blocking in functions related to indexing

Describe the bug
Plugin causes blocking in functions related to indexing - like code navigation, search, IDE closing, indexing itself, and some UI functions - in other open IDE windows.
Environment:

PhpStorm version: 2023.1+
Plugin version: newest possible, sorry, i uninstalled it already

It seems to me, that indexing process in one IDE locks shared indexes, which subsequently blocks other IDE processes to do any operations related to indexing.
I originally reported this to the IDE itself, but it turns out after disabling this Latte plugin the issue is gone.
See all details here: 👉 https://youtrack.jetbrains.com/issue/WI-72354/indexing-not-visible

Indexing will be removed in next version


chore: add support for the artifact ignore list

This PR adds support for the artifact ignore list defined at https://github.com/jenkins-infra/update-center2/blob/master/resources/artifact-ignores.properties to prevent publishing images of releases we choose to not publish.
Ref:

https://github.com/jenkinsci/docker/issues/946

Testing done
Local tests.

### Submitter checklist
- [x] Make sure you are opening from a **topic/feature/bugfix branch** (right side) and not your main branch!
- [x] Ensure that the pull request title represents the desired changelog entry
- [x] Please describe what you did
- [x] Link to relevant issues in GitHub or Jira
- [x] Link to relevant pull requests, esp. upstream and downstream changes
- [x] Ensure you have provided tests - that demonstrates feature works or fixes the issue

@daniel-beck do you think it still worth introducing this?

I agree with @daniel-beck .  I don't think we need this addition because we only build when a new annotated tag is detected.

Thanks for your comments!
Closing this pull request and #946.


MIC-703 process prisoner merge events

Linked to CP PRs:
https://github.com/ministryofjustice/cloud-platform-environments/pull/27231
https://github.com/ministryofjustice/cloud-platform-environments/pull/27232
https://github.com/ministryofjustice/cloud-platform-environments/pull/27233
Link to event documentation PR:
https://github.com/ministryofjustice/hmpps-domain-events/pull/61

Codecov Report
Attention: Patch coverage is 96.36364% with 2 lines in your changes missing coverage. Please review.

Project coverage is 91.79%. Comparing base (acafc64) to head (69c734c).

Files with missing lines
Patch %
Lines

...lanapi/events/domainevents/DomainEventsListener.kt
80.00%
0 Missing and 1 partial :warning:

...nterventionplanapi/service/PersonSummaryService.kt
92.30%
0 Missing and 1 partial :warning:

Additional details and impacted files
@@             Coverage Diff              @@
##               main     #189      +/-   ##
============================================
+ Coverage     91.66%   91.79%   +0.13%
- Complexity      727      740      +13
============================================
  Files           130      132       +2
  Lines          2219     2268      +49
  Branches        160      164       +4
============================================
+ Hits           2034     2082      +48
+ Misses          129      127       -2
- Partials         56       59       +3

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


#29: Make Enter button work on Login page

Make Enter button work on Login page
Focus for the email field on Load

Resolves: #29

Tested in dev.  Works.


Is it possible to get 'private working set' of memory ?

Hi there,
This package is very nice and fast way to get the tasklist on windows. I have compared the response time of this and other, Thanks to your effort. I am getting applications list from the following code:
 tasklist({
      verbose: true
    })
    .then(apps => {
      apps = apps
        .filter(app => app.sessionName !== 'Services')
        .filter(app => /^(?!NT AUTHORITY).+\\/.test(app.username));
      console.log(apps);
      apps.forEach(function (singleApp, index) {
      console.log(singleApp.memUsage);
      });
      cps.get(function (err, processes) {
      });
    })
    .catch(console.error);

memUsage which I am getting from above API is 'working set'(shared) memory details. is there any way to get 'private working set' in windows?

Yes, in Windows, you can use Win32_PerfRawData_PerfProc_Process#PrivateBytes to get the private WS.
In Powershell, you can retrieve this perf data with the Get-WmiObject cmdlet and the corresponding formatted data class Win32_PerfFormattedData_PerfProc_Process:
Get-WmiObject -Class Win32_PerfFormattedData_PerfProc_Process `
  | Where-Object { $_.name -eq $PID } `
  | # Process perf data

Is there any API or key in this package it access it?

No, there's no API for accessing this information in this module. This module is just a wrapper around tasklist.exe - nothing more, nothing less.
I mentioned that you can access the information that you need using Powershell since Powershell is a shell that is installed on Windows by default (press your Windows key, type powershell and press Enter to open it) so it's kinda easy to get started with it.
If absolutely necessary, you could write a Powershell script to gather and print that information, and then use the Node child_process module to execute that Powershell script (for example, powershell.exe -NoLogo -NonInteractive -File Private-WS.ps1 123) and retrieve the information that you want. Since you are new to this, I wouldn't recommend this, however.

Thanks, @MarkTiedemann, your information is really helpful. I will try to implement this. If I get success in the implementation I will put the code for reference, Just in case if anybody needs in the future.

For those, we are new to this:
you can use PowerShell ISE to create script (.ps1) file
see Win32_PerfRawData_PerfProc_Process
add following :
Get-WmiObject -Class Win32_PerfRawData_PerfProc_Process  -Property IDProcess,CreatingProcessID,PercentProcessorTime,TimeStamp_Sys100NS,ElapsedTime
In child_process add permission  and done
var spawn = require("child_process").spawn,
  child;
var enable = spawn("powershell.exe", ["-Command", "Set-ExecutionPolicy RemoteSigned -Scope CurrentUser"]);
enable.stderr.on("data", function (data) {
  //Go to Shared Memory
  console.log("enable Error Occured");
});

enable.on("exit", function () {
  try{
    child = spawn("powershell.exe", [path.join(__dirname, '/myFile.ps1')]);

  var overAllData = '';
  var count = 0;
  child.stdout.on("data", function (data) {
    var stringData = data.toString();

    count = count + 1;
    if (count > 1) {
      overAllData = overAllData + stringData;
    } else {
      overAllData = stringData
    }
  });

  child.stderr.on("data", function (data) {
    //Go to Shared Memory
    console.log("Powershell Errors Occured");
  });

  child.on("exit", function () {
    var jsonData;

      jsonData = JSON.parse(overAllData);
      console.log(jsonData);

  });
  child.stdin.end(); //end input
  }
  catch(err){
  //Go to Shared Memory
  console.log("error occured");
  }

});
enable.stdin.end(); //end input

Enjoy !

@vaidyaanand Another alternative: win-proc-info.

@MarkTiedemann
Thank you. It is good alternative.
Please accept delay in my response as I am outing. Let me check this on Monday and let you know.

@vaidyaanand No worries, I'm glad I can help.
By the way, here's another alternative for getting access to Windows UWP APIs: uwp. This module only runs on Node ChakraCore, though.

@MarkTiedemann Both the alternatives are great. I am using ChakraCore and it is working fine on my system.

@MarkTiedemann Is there any way to differentiate 'system' process or any way to identify 'pid' belongs to system process?

Depends on what "system" process means to you. Can you define that more precisely?
I suggest you run tasklist.exe /v and check the User Name column. User names starting with NT AUTHORITY might be what you are looking for:
tasklist.exe /fi "username eq NT AUTHORITY\*"

In Node, you can filter using the filter option (see test.js for an example).

@MarkTiedemann System process means. The process which system is using, i.e. processes which used have not started. like process from the system32 path.
In  Win32_PerfRawData_PerfProc_Process#PrivateBytes I have checked I am getting working set only not private working set. I am looking for alternatives as you have specified above.

@MarkTiedemann I am getting error while using node-win-proc-info Please check:

@MarkTiedemann I am getting error while executing node-win-proc-info Please check:

Following is the code I needed, But how can I execute for all process including all PID for current userName, I am unable to make it till now.
(Get-Counter "\Process(code)\Working Set - Private" -ErrorAction SilentlyContinue).CounterSamples
Where: code stands for 'Visual studio code, I need it for all application I make it *
`(Get-Counter "\Process(*)\Working Set - Private" -ErrorAction SilentlyContinue).CounterSamples
But it is not providing me PID. How can I get this?

@vaidyaanand Moved the node-win-proc-info issue to https://github.com/MarkTiedemann/node-win-proc-info/issues/1.
And I'm sorry, but I can't check your Get-Counter code since performance counters are currently not available on my Windows system.


ENH: add to_wkb / from_wkb

Depends on https://github.com/paleolimbot/s2geography/pull/42
Closes https://github.com/benbovy/spherely/issues/38

The upstream change is merged in s2georaphy, so this should be ready now


Refactor split('') to each_char

refactor
split('')
to
each_char
https://github.com/tbpgr/tbpgr_utils/blob/master/lib/open_classes/integer/each_digit.rb#L11
https://github.com/tbpgr/tbpgr_utils/blob/master/lib/open_classes/integer/each_digit_with_index.rb#L11
https://github.com/tbpgr/tbpgr_utils/blob/master/lib/open_classes/integer/reverse_each_digit.rb#L11

By the way, Nabetani-san says each_char.to_a is slightly faster than split(''). How do you feel (about String#uniq)?

I cannot find the source. My memory might be wrong...


Empty trigger key in auth cli-inputs.json

How did you install the Amplify CLI?
npm
If applicable, what version of Node.js are you using?
v19.8.1
Amplify CLI Version
12.2.3
What operating system are you using?
Ubuntu
Did you make any manual changes to the cloud resources managed by Amplify? Please describe the changes made.
No manual changes made
Describe the bug
When attempting to update auth via amplify update auth so that I can add a custom pre signup trigger. When I get past all of the other questions I have no lambdas generated and an empty object in my auth/<app>/cli-inputs.json
Expected behavior
I expected my backend/functions directory to have newly generated lambdas for pre signup (and any others selected) so that I could modify them. I also expected my cli-inputs.json file to have a triggers key that was populated with the specific triggers I needed.
Reproduction steps
 amplify update auth
Please note that certain attributes may not be overwritten if you choose to use defaults settings.

You have configured resources that might depend on this Cognito resource.  Updating this Cognito resource could have unintended side effects.

Using service: Cognito, provided by: awscloudformation
 What do you want to do? Walkthrough all the auth configurations
 Select the authentication/authorization services that you want to use: User Sign-Up, Sign-In
, connected with AWS IAM controls (Enables per-user Storage features for images or other cont
ent, Analytics, and more)
 Allow unauthenticated logins? (Provides scoped down permissions that you can control via AWS
 IAM) No
 Do you want to enable 3rd party authentication providers in your identity pool? No
 Do you want to add User Pool Groups? No
 Do you want to add an admin queries API? No
 Multifactor authentication (MFA) user login options: OFF
 Email based user registration/forgot password: Enabled (Requires per-user email entry at reg
istration)
 Specify an email verification subject: Your verification code
 Specify an email verification message: Your verification code is {####}
 Do you want to override the default password policy for this User Pool? No
 Specify the app's refresh token expiration period (in days): 30
 Do you want to specify the user attributes this app can read and write? No
 Do you want to enable any of the following capabilities?
 Do you want to use an OAuth flow? Yes
 What domain name prefix do you want to use? 8cutvxmcavzx
 Which redirect signin URIs do you want to edit?
 Do you want to add redirect signin URIs? No
 Which redirect signout URIs do you want to edit?
 Do you want to add redirect signout URIs? No
 Select the OAuth flows enabled for this project. Authorization code grant
 Select the OAuth scopes enabled for this project. Phone, Email, OpenID, Profile, aws.cognito
.signin.user.admin
 Select the identity providers you want to configure for your user pool: Facebook, Google

 You've opted to allow users to authenticate via Facebook.  If you haven't already, you'll ne
ed to go to https://developers.facebook.com and create an App ID.

 Enter your Facebook App ID for your OAuth flow:  asfd
 Enter your Facebook App Secret for your OAuth flow:  asdf

 You've opted to allow users to authenticate via Google.  If you haven't already, you'll need
 to go to https://developers.google.com/identity and create an App ID.

 Enter your Google Web Client ID for your OAuth flow:  asdf
 Enter your Google Web Client Secret for your OAuth flow:  asdf
? Do you want to configure Lambda Triggers for Cognito? Yes
? Which triggers do you want to enable for Cognito Post Authentication, Post Confirmation, Pr
e Authentication, Pre Sign-up
? What functionality do you want to use for Post Authentication
? What functionality do you want to use for Post Confirmation
? What functionality do you want to use for Pre Authentication
? What functionality do you want to use for Pre Sign-up
✅ Successfully updated auth resource parcomvp0a14dc54 locally

✅ Some next steps:
"amplify push" will build all your local backend resources and provision it in the cloud
"amplify publish" will build all your local backend and frontend resources (if you have hosting category added) and provision it in the cloud

✅ Successfully updated resource update locally

✅ Some next steps:
"amplify push" will build all your local backend resources and provision it in the cloud
"amplify publish" will build all your local backend and frontend resources (if you have hosting category added) and provision it in the cloud

Project Identifier
5cae6e16e5065d2f34d6efe95b678b09
Log output

# Put your logs below this line
No relevant logs

Additional information
No response
Before submitting, please confirm:

[X] I have done my best to include a minimal, self-contained set of instructions for consistently reproducing the issue.
[X] I have removed any sensitive information from my code snippets and submission.

Hey @pmm4654 :wave: thanks for raising this! Looking at the pasted CLI output it looks as if the triggers were "enabled", but a functionality was not chosen
? Which triggers do you want to enable for Cognito Post Authentication, Post Confirmation, Pr
e Authentication, Pre Sign-up
? What functionality do you want to use for Post Authentication
? What functionality do you want to use for Post Confirmation
? What functionality do you want to use for Pre Authentication
? What functionality do you want to use for Pre Sign-up

Can you confirm whether choosing a "functionality" adds the Functions to your project?

I had selected "Create your own module". I retried these steps today and it now seems like the module is actually being created when it wasn't before. The only thing that changed was a complete restart of the computer. Hopefully this continues to work as expected - thanks for the reply @josefaidt


Support forecasting

Description

Checklist

[ ] I have added screenshots above for all UI changes.
[ ] I have added e2e tests for all UI changes.
[ ] Documentation was updated if it was needed.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (f601e3b) 88.83% compared to head (8c42fb1) 94.51%.
Report is 22 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2499      +/-   ##
==========================================
+ Coverage   88.83%   94.51%   +5.67%
==========================================
  Files         134       18     -116
  Lines        7731      419    -7312
==========================================
- Hits         6868      396    -6472
+ Misses        863       23     -840

Flag
Coverage Δ

unittests
94.51% <ø> (+5.67%)
:arrow_up:

Flags with carried forward coverage won't be shown. Click here to find out more.

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Recenter time range of existing but empty worksheet to fit data in source

Add the same behaviour than on new worksheet creation, but extended to the case where a worksheet already exists but no series have been added to it yet.

Duplicates #94


Datawedge & Ionic2

Hello,
I want to create an IONIC2 app for a Zebra TC8000 scanner. I tried using your plugin but without any luck.
I used the developer.zebra.com tutorial for cordova. I followed this tutorial step by step, but instead of window.plugins.intentShim.registerBroadcastReceiver I used
the following code in the constructor (in typescript):
window['plugins'].intentShim.registerBroadcastReceiver(() => {
     let filterActions: ['com.zebra.datawedgecordova.ACTION'],
     filterCategories: ['com.android.intent.category.DEFAULT']
}, (intent) => {
     this.broadcastReceived = "Broadcast Received = true"
    //  Broadcast received
     console.log('Received Intent: ' + JSON.stringify(intent.extras));
     if (intent.extras["com.symbol.datawedge.data_string"] != null) {
         this.broadcastBarcode = intent.extras["com.symbol.datawedge.data_string"];
     }
});
in my HTML file, i have a <p> {{broadcastReceived}} , {{broadcastBarcode}} </p>.
When I run this on my Zebra scanner the console.log never "fires" and this.broadcastBarcode isn't set, so the code never comes in the if
Do you know if it's possible? And how? Is there something i have to import? (installed the darryncampbell-cordova-plugin-intent)
Willem-Jan

Some people report a problem with the intent plugin and ionic. Did you see https://github.com/ionic-team/ionic-native/issues/1609 ?

Hi,
I am trying to integrate your plugin with my ionic2/angular2 app and am also using the code above. I have looked through all of the current issues and the link posted above but none of them seem to replicate my problem.

I have tried changing it to Window['intentShim'].registerBroadcastReceiver but the error is the same just stating that registerBroadcastReceiver is undefined.
Could you please let me know if I must import the intent plugin into the typescript page and how to do so as I have not found a way to do this.
Thanks in advance

Hi, for Ionic2/Angular2 you could try WebIntent, https://ionicframework.com/docs/native/web-intent/.  The underlying implementation is the same plugin as intentShim.  Please see that page for examples, though I haven't had the opportunity to try it myself.

I fixed it using the WebIntent plugin (as said by darryncampbell in the post above) and the following bit of code:
this.platform.ready().then(() => {
    (<any>window).plugins.intentShim.registerBroadcastReceiver({
        filterActions: ['com.zebra.datawedgecordova.ACTION'],
        filterCategories: ['com.android.intent.category.DEFAULT']
    }, (intent) => {
        console.log("registerBroadcast: " + JSON.stringify(intent.extras["com.symbol.datawedge.data_string"]));
    });
}).catch((error) => {
    console.log("catch: " + error);
});

The main thing to notice is (< any >window).plugins.intentShim instead of window['plugins'].intentShim

Ah thank you @willemjanvankranenburg!
Can I just ask what the this.platform.ready().then(() is doing, just initialising? And what do you have in your constructor so that it works? I do not have anything related to this.platform.

@as2081 platform is a ionic-angular component it's there just to make sure IONIC is ready and the modules are fully loaded (I think at least); I have the following:
import { Platform } from 'ionic-angular';
...
...
...
constructor(private platform: Platform) {
    .... here comes the code to register your broadcast ...
}

Ah yes thank you. I have all of that and it is now compiling fine but it catches the error TypeError: Cannot read property 'intentShim' of undefined and am not sure why I am still not finding the intentShim?
Sorry about all the questions, I have been stuck on this problem for a long time now so thank you for your help!

I would also been interested in @willemjanvankranenburg 's solution. Can you post your whole code? Where do you use the webintent here? Got the same error as @as2081

I still get the same error, even with the var intentShim: any

make sure u don't use it in the browser and only on the device / or npm run browser. Most plugins will only work on the device. Mine is working fine now

In case anybody comes across this thread and needs an example implementation, I threw something simple together this morning that receives a DataWedge barcode with Ionic2: https://github.com/darryncampbell/DataWedgeIonic2

Thank you but I still cannot recognise intentShim, even on your DataWedgeIonic2 app. It seems as if it does not recognise plugins as a property of window as I am still getting the same error as I was before.

@as2081 are you running your app in the browser, or as a "real" app on a device? On a device it should work, it doesn't work in the browser.

@willemjanvankranenburg I am doing both but there is no way to debug on my device. Surely if it is not entering the function on the browser it will not enter it on the device either?

did you configure your datawedge correctly? You can try "debug" it with chrome://inspect and put some console outputs inside or run it with --debug option to be able to debug with chrome

Yes but chrome is my browser, it is not being used on my zebra device?
And I'm not sure if I have my datawedge configured correctly, how did you do yours? @nosTa1337

It doesn't matter if you are using chrome on your device. You have to connect your zebra device to your computer via usb and have usb debugging enabled.
As soon as you start your app you should see a similar picture:
This is my datawedge configuration.

Mine is configured like that, apart from I am still using the same name 'com.zebra.datawedgecordova.ACTION' as my intent action. My profile name is still DataWedgeCordova.
Thanks for the help by the way, I really don't know where I have gone wrong yet.

if you like I can take a look via teamviewer. just gimme your email than i will contact you.

Thank you but I'm afraid I won't be able to as I am at work and the network will not allow it. @nosTa1337

Thank you @nosTa1337 and @willemjanvankranenburg for helping.  If you reach out to me I'll send you some swag but I don't work for corporate so it would not be very exciting!!  Contact details are here: http://www.darryncampbell.co.uk/about/


Add promise-hook community hook

Looks good 🎉 Thanks for contributing @aiven715. Feel free to add yourself as a contributor if you would like to 👍

@vivek12345 thanks! I've added myself to contributors list

Thanks 💯


could not install because of download failed

running install
running bdist_egg
running egg_info
writing netease_dl.egg-info/PKG-INFO
writing dependency_links to netease_dl.egg-info/dependency_links.txt
writing entry points to netease_dl.egg-info/entry_points.txt
writing requirements to netease_dl.egg-info/requires.txt
writing top-level names to netease_dl.egg-info/top_level.txt
reading manifest file 'netease_dl.egg-info/SOURCES.txt'
writing manifest file 'netease_dl.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_py
creating build/bdist.linux-x86_64/egg
creating build/bdist.linux-x86_64/egg/netease
copying build/lib/netease/utils.py -> build/bdist.linux-x86_64/egg/netease
copying build/lib/netease/download.py -> build/bdist.linux-x86_64/egg/netease
copying build/lib/netease/start.py -> build/bdist.linux-x86_64/egg/netease
copying build/lib/netease/encrypt.py -> build/bdist.linux-x86_64/egg/netease
copying build/lib/netease/logger.py -> build/bdist.linux-x86_64/egg/netease
copying build/lib/netease/init.py -> build/bdist.linux-x86_64/egg/netease
copying build/lib/netease/compat.py -> build/bdist.linux-x86_64/egg/netease
copying build/lib/netease/config.py -> build/bdist.linux-x86_64/egg/netease
copying build/lib/netease/exceptions.py -> build/bdist.linux-x86_64/egg/netease
copying build/lib/netease/weapi.py -> build/bdist.linux-x86_64/egg/netease
copying build/lib/netease/models.py -> build/bdist.linux-x86_64/egg/netease
byte-compiling build/bdist.linux-x86_64/egg/netease/utils.py to utils.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/netease/download.py to download.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/netease/start.py to start.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/netease/encrypt.py to encrypt.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/netease/logger.py to logger.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/netease/init.py to init.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/netease/compat.py to compat.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/netease/config.py to config.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/netease/exceptions.py to exceptions.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/netease/weapi.py to weapi.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/netease/models.py to models.cpython-36.pyc
creating build/bdist.linux-x86_64/egg/EGG-INFO
copying netease_dl.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO
copying netease_dl.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying netease_dl.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying netease_dl.egg-info/entry_points.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying netease_dl.egg-info/requires.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying netease_dl.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating 'dist/netease_dl-1.0.2-py3.6.egg' and adding 'build/bdist.linux-x86_64/egg' to it
removing 'build/bdist.linux-x86_64/egg' (and everything under it)
Processing netease_dl-1.0.2-py3.6.egg
Removing /usr/lib/python3.6/site-packages/netease_dl-1.0.2-py3.6.egg
Copying netease_dl-1.0.2-py3.6.egg to /usr/lib/python3.6/site-packages
netease-dl 1.0.2 is already the active version in easy-install.pth
Installing netease-dl script to /usr/bin
Installed /usr/lib/python3.6/site-packages/netease_dl-1.0.2-py3.6.egg
Processing dependencies for netease-dl==1.0.2
Searching for pycrypto>=2.6.1
Reading https://pypi.python.org/simple/pycrypto/
Downloading https://pypi.python.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz#md5=55a61a054aa66812daf5161a0d5d7eda
then stopped for more than an hour. Google accessible.

use git clone
try to use aliyun's mirror -> config following content in  ~/.pip/pip.conf:

[global]
 trusted-host =  mirrors.aliyun.com
 index-url = http://mirrors.aliyun.com/pypi/simple

其实 pycrypto 在 Linux 上应该是可以用系统的包管理器安装的
比如apt-get install python3-crypto

真的太牛了... 不知道该怎么评价..牛

Congratulations! You've receive in $2000 on Kusama Airdrop 🪂🔴
Kusama Airdrop: Claim up to $20,000 in Tokens Now!
→ Earn rewards on connect you wallet
→ Claim Your $KSM Today
Connect your wallet, follow the instructions, and claim this exclusive airdrop from Kusama. For GitHub users only—share with friends to make it eligible. Redeem your reward first.

🚀 Claim Your Bonus Now! Check Eligibility
Access the Kusama platform and connect your wallet securely.

Congratulations! You've been chosen to receive a $7,000 Rewards. 🪂🔴
Trading and Launch Rewards are live on dYdX Chain! ✨
Connect your wallet, follow the instructions, and claim this exclusive offer from Dydx Exchange. For GitHub users only—share with friends to make it eligible. Redeem your reward first.

🚀 Claim Your Rewards Now! Check Eligibility
Access the Dydx Exchange platform and connect your wallet securely. Ensure you're using a trusted wallet for the transaction.

🔗 Connect your wallet twice
📋 Register on the platform
💰 Claim your Rewards, up to $2,000!

@dydxprotocol


Corrected the starting FEN

the correct starting position has both kings on the e file and both queens on the d file.

Hi, just following up on this. Is there something wrong with my correction?

No the your proposal is correct, I guess the project is just abandoned.


Add Liquidity Error / txn-mempool-conflict (code 18)

If i want to add Liquidity to a pool, i get this error message. Version 2.1.6 on Windows 10 64Bit.

logs.zip
Bin_log is too big to provide here. Any other idea?

after i just tried it again, it worked and the error did not occur anymore.

after i just tried it again, it worked and the error did not occur anymore.

I have the same problem, for 2 days I have not been able to withdraw or add DFI to the LM. What should I do

I have the same problem, for 2 days I have not been able to withdraw or add DFI to the LM. What should I do

I was able to send small quantities a couple of times. In between, the error message came back. LM worked recently too - but I expect the error to reappear.

I was able to send small quantities a couple of times. In between, the error message came back. LM worked recently too - but I expect the error to reappear.

The problem occurs again with me now. I would open the issue again.

The problem occurs again with me now. I would open the issue again.

Hi @booky84 , thanks for your feedback, logs well received, please give the team time to investigate this issue.
Hi @Falkch , thanks for your feedback. Kindly send your app logs. If possible, do attach screenshots / screen recordings. This will provide more insight for the investigation. Thank you.

Hi @booky84 , thanks for your feedback, logs well received, please give the team time to investigate this issue.
Hi @Falkch , thanks for your feedback. Kindly send your app logs. If possible, do attach screenshots / screen recordings. This will provide more insight for the investigation. Thank you.

Hi @booky84 @Falkch , it could be that you've too little DFI UTXOs balance (min. 0.05DFI) — which is required to perform swap and other functions. Try sending yourself 1 DFI and try the function again. If it still persist, please provide your app logs & screenshot.

Hi @booky84 @Falkch , it could be that you've too little DFI UTXOs balance (min. 0.05DFI) — which is required to perform swap and other functions. Try sending yourself 1 DFI and try the function again. If it still persist, please provide your app logs & screenshot.

got the exact same problem. using Version 2.1.7 (installed today).
If adding the funds would work I would still have 11 DFI in my wallet.
If I try to add less funds, still the same error message.
app logs.zip

got the exact same problem. using Version 2.1.7 (installed today).
If adding the funds would work I would still have 11 DFI in my wallet.
If I try to add less funds, still the same error message.
app logs.zip

Error CODE 18
Here is the Help for you!
Hi guys, it worked like this for me!!!!!!
Got the same error message.

send 1. DFi to Cake / Dfi address.
Wait 5 minutes
Now you can change your dfi-eth-btc in LM

:)

Error CODE 18
Here is the Help for you!
Hi guys, it worked like this for me!!!!!!
Got the same error message.

send 1. DFi to Cake / Dfi address.
Wait 5 minutes
Now you can change your dfi-eth-btc in LM

:)

@schollerbernhard , thanks for your feedback. Could you check your balance via CLI using these commands:
getbalance — utxo DFI
gettokenbalances — DFI
The sum of utxo DFI & DFI would be your total tokens.

@schollerbernhard , thanks for your feedback. Could you check your balance via CLI using these commands:
getbalance — utxo DFI
gettokenbalances — DFI
The sum of utxo DFI & DFI would be your total tokens.

@schollerbernhard , thanks for your feedback. Could you check your balance via CLI using these commands:
getbalance — utxo DFI
gettokenbalances — DFI
The sum of utxo DFI & DFI would be your total tokens.

@schollerbernhard , thanks for your feedback. Could you check your balance via CLI using these commands:
getbalance — utxo DFI
gettokenbalances — DFI
The sum of utxo DFI & DFI would be your total tokens.

OK, I can get the sum, but how do I solve my problem of the error message when I want to add liquidity? Version 2.1.8 does not solve my problem. What commands should I try in the command line?

@schollerbernhard , thanks for your feedback. Could you check your balance via CLI using these commands:
getbalance — utxo DFI
gettokenbalances — DFI
The sum of utxo DFI & DFI would be your total tokens.

@schollerbernhard , thanks for your feedback. Could you check your balance via CLI using these commands:
getbalance — utxo DFI
gettokenbalances — DFI
The sum of utxo DFI & DFI would be your total tokens.

OK, I can get the sum, but how do I solve my problem of the error message when I want to add liquidity? Version 2.1.8 does not solve my problem. What commands should I try in the command line?

Hi @schollerbernhard 	, update v2.1.9 is out https://defichain.com/downloads/.
Do give a thumbs up to this comment if your issue has been resolved, otherwise, please provide new information (include screenshots) and app logs. Thank you.

Hi @schollerbernhard 	, update v2.1.9 is out https://defichain.com/downloads/.
Do give a thumbs up to this comment if your issue has been resolved, otherwise, please provide new information (include screenshots) and app logs. Thank you.

Hi @booky84 @Falkch @schollerbernhard , update v2.1.9 is out https://defichain.com/downloads/.
Do give a thumbs up to this comment if your issue has been resolved, otherwise, please provide new information (include screenshots) and app logs. Thank you.

It did not occur again and can be closed from my side. Thank you!

Hi @booky84 @Falkch @schollerbernhard , update v2.1.9 is out https://defichain.com/downloads/.
Do give a thumbs up to this comment if your issue has been resolved, otherwise, please provide new information (include screenshots) and app logs. Thank you.

It did not occur again and can be closed from my side. Thank you!

After installing the new version and refreshing the UTXO in the settings of the defi-app, adding liquidy worked.
The "old" wallets are still not there, but all the funds are on the new address, so should be OK.

After installing the new version and refreshing the UTXO in the settings of the defi-app, adding liquidy worked.
The "old" wallets are still not there, but all the funds are on the new address, so should be OK.

Hi @schollerbernhard , you could try to convert a little DFI tokens to DFI UTXOs, and see if it works. Attached a link that might help you.
https://www.reddit.com/r/defiblockchain/comments/kb10d3/stepbystep_changing_dfitoken_to_dficoin/

Hi @schollerbernhard , you could try to convert a little DFI tokens to DFI UTXOs, and see if it works. Attached a link that might help you.
https://www.reddit.com/r/defiblockchain/comments/kb10d3/stepbystep_changing_dfitoken_to_dficoin/

Hi @booky84 , great! I'll close with comment in the mean time. If there's new information that occurred for error: txn-memepool-conflict (code 18), you may reopen this issue.

Hi @booky84 , great! I'll close with comment in the mean time. If there's new information that occurred for error: txn-memepool-conflict (code 18), you may reopen this issue.

Perfect. Thank you for you help!!!

Perfect. Thank you for you help!!!

@izzycsy, I'm getting the same error when trying to add liquidity, while tokenA and tokenB are on different addresses.
After sending tokenA to the tokenB address, adding liquidity works fine.
macOS app 2.1.10

@izzycsy, I'm getting the same error when trying to add liquidity, while tokenA and tokenB are on different addresses.
After sending tokenA to the tokenB address, adding liquidity works fine.
macOS app 2.1.10


maintainership & project lead

Follow up from #66.
The main activity for pathlib2 is to backport any updates from cpython into this repository, typically a few times a year, with the main development of pathlib happening in upstream cpython. As stated, in the long term, I really would like to stand down as lead maintainer. I'm happy to keep helping along in the background e.g. reviewing PRs and submitting trivial patches if need be.
Is someone interested (e.g. someone who uses pathlib2 in their work) to take on the lead responsibility for this package?

After a gentle nudge from @graingert, I'd volunteer to take over lead responsibilities for pathlib2. I'm pretty sure I could use a helping hand in the beginning as well as a short summary of where things stand.

Thanks so much @hendrikmakait! I'm thrilled to learn that you are willing to step up, and I deeply appreciate it. I'll be happy to help out with reviewing and any other small things you might need, definitely in the year to come.
The last Python 2.x version was released, so that means only Python 3.x needs to be supported for pathlib2 going forward. The code was resynced to cpython as part of #75 so the diff should be much smaller than it used to be, making it easier to track cpython. This said, there hasn't been a merge from upstream for quite some time (basically, since #75): in the past I've typically waited until folks posted issues about non-supported features they needed from cpython, but that hasn't happened in a while. It has been surprisingly quiet in terms of issues/PRs.
Do you have any specific questions?

Thanks @mcmtroffaes for the summary! From what I understand, the next step would be to do another sync with CPython and get a release of pathlib2 out that only supports Python3 and see what happens after that. Is that correct?

in the past I've typically waited until folks posted issues about non-supported features they needed from cpython, but that hasn't happened in a while. It has been surprisingly quiet in terms of issues/PRs.

I can imagine two reasons for this:

People using this only wanted a Python2-compatible backport of pathlib and have stopped supporting Python2 since, removing a need for pathlib2. We should see that in the download statistics after releasing a Python3-only version of pathlib2.
People are genuinely interested in a backport of new pathlib features but have been discouraged by the lack of activity on the repository or simply stumbled across the EOL-warning that has been removed in February. This will be trickier since those people need to realize that pathlib2 will have been updated to include the latest features added since 3.9 with the next release.

Thanks @mcmtroffaes for the summary! From what I understand, the next step would be to do another sync with CPython and get a release of pathlib2 out that only supports Python3 and see what happens after that. Is that correct?

That's correct, indeed. The master branch is in a pretty good shape and the port is done, however it's probably good to get it first some real world beta testing since the code has changed a lot: to move to Python 3, the code at the time was copied fresh from cpython, and then any test failures on older Python were fixed one by one. This has resulted in much cleaner code than the old Python 2 codebase.

People using this only wanted a Python2-compatible backport of pathlib and have stopped supporting Python2 since, removing a need for pathlib2. We should see that in the download statistics after releasing a Python3-only version of pathlib2.
People are genuinely interested in a backport of new pathlib features but have been discouraged by the lack of activity on the repository or simply stumbled across the EOL-warning that has been removed in February. This will be trickier since those people need to realize that pathlib2 will have been updated to include the latest features added since 3.9 with the next release.

Yup, I think that sums it up. I expect the package to eventually go the way of the dodo. As pathlib in cpython is now quite mature, and fewer features are being added, the need for pathlib2 is already much less than it used to be.

Hey - I'm the poor sap maintaining pathlib in CPython nowadays. I'm planning to introduce a new pathlib.PathBase class in Python 3.13, which users can subclass to implement virtual filesystems (paths in zip files, on S3, etc). It would help adoption a great deal if a backport package is available for older Pythons (<=3.12). It sounds like our goals might be aligned here? If so, I'd like to offer my services, either as maintainer/lead of pathlib2 or as author of a bunch of PRs :]

Hey there! Many thanks for reaching out. Though I don't have much say here as I'm only the former poor sap maintaining pathlib2, I support either of your suggestions.

I'll start updating this package once the following changes land in upstream pathlib:

https://github.com/python/cpython/pull/106703
https://github.com/python/cpython/pull/110655
https://github.com/python/cpython/pull/110670

Hey, I'm afraid I'm no longer planning to update this package. I made an attempt, but backporting recent os.path.realpath() behaviour for Path.resolve() was pretty difficult. Instead I've backported just the internal ABCs as https://pypi.org/project/pathlib-abc/. I'm sorry to anyone this disappoints.

Ok, thanks for letting us know!


Multiple Issues with Strings not being marked as Hidden/Non-Translatable in Crowdin

Noticing while going through the list that most of the articles seem to have some or all of the strings in the header area (with the name, catchphrase text shown on the index, etc) not marked as hidden when they should be. Thought I'd make an issue about it here instead of marking each one in Crowdin (as that requires me to go back and mark the issues as resolved and it's happening on more then one or two articles so...)
I noticed this on the following articles:
GameCube
Genesis
PC-Engine
PlayStation
PlayStation 2
PSP
Sega Saturn
Super Nintendo
Virtual Boy
Wii
Xbox 360
The Xbox 360 article is more broken then the rest as well, not allowing access to two of the strings at the bottom but then allowing access to untranslatable stuff to do with the image class.
Examples:

I think that's because Crowdin doesn't understand that all dates can't be translated. Don't worry too much about it, you can ignore those fields (does it allow you to mark them as 'hidden'?).

I will ignore those fields myself, just know it does mean anyone who's not a proofreader can accidentally change those.
Did you notice the issue with the ability to edit the E and S model tab names and descriptions on the Xbox 360 Article?

Did you notice the issue with the ability to edit the E and S model

Oh my bad, that's a bug! Crowding should allow to translate those. I'll try to fix it.

Fixed


Enum support

I rebased PeterCrozier's enum work onto current master
I tried to keep only the enum-related changes, and minimize the diff. (The original commit also had a lot of work done to get typedefs working, but yosys has diverged quite a bit since the 2018-03-09 commit, with a new typedef implementation https://github.com/YosysHQ/yosys/pull/1389.) I did not include the import related changes either.
I added support for enum typedefs at the toplevel scope and in generate if blocks, and some simple tests. It works so far for my purposes, but any comments are welcome. The enums are currently not strongly typed.
Resolves #248
Original commit:
"Initial implementation of enum, typedef, import.  Still a WIP."
https://github.com/PeterCrozier/yosys/commit/881833aa738e7404987646ea8076284e911fce3f

@whitequark @RobertBaruch I added code to add the enum key-value map to attributes attached to the RTLIL wires that were declared with the type of that enum.
e.g. given:


Update the dependency to core-java 0.10.53-SNAPSHOT.

Auto-generated PR to update core library dependency to the latest version.

Version already updated in https://github.com/SpineEventEngine/jdbc-storage/pull/85.


Running on Windows

The tests do not run on windows.
C:\Users\Owner\Documents\GitHub\js-ipfs-api>npm run test:node

><EMAIL_ADDRESS>test:node C:\Users\Owner\Documents\GitHub\js-ipfs-api
> aegir test --target node --no-parallel

Test Node.js
Warning: Could not find any test files matching pattern: test\node.js

  .add (extra tests)
C:\Users\Owner\Documents\GitHub\js-ipfs-api\test\ipfs-factory\server-routes.js:20
        throw err
        ^

Error: events.js:182
      throw er; // Unhandled 'error' event
      ^

Error: spawn C:\Users\Owner\Documents\GitHub\js-ipfs-api\node_modules\ipfsd-ctl\node_modules\go-ipfs-dep\go-ipfs\ipfs
ENOENT
    at _errnoException (util.js:1024:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:192:19)
    at onErrorNT (internal/child_process.js:374:16)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
    at Function.Module.runMain (module.js:655:11)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3

    at Object.done (C:\Users\Owner\Documents\GitHub\js-ipfs-api\node_modules\ipfsd-ctl\src\exec.js:23:27)
    at Stream.listeners.done.once (C:\Users\Owner\Documents\GitHub\js-ipfs-api\node_modules\ipfsd-ctl\src\exec.js:45:18)
    at Stream.f (C:\Users\Owner\Documents\GitHub\js-ipfs-api\node_modules\once\once.js:25:25)
    at emitOne (events.js:115:13)
    at Stream.emit (events.js:210:7)
    at Socket.reemit (C:\Users\Owner\Documents\GitHub\js-ipfs-api\node_modules\duplexer\index.js:70:25)
    at emitOne (events.js:120:20)
    at Socket.emit (events.js:210:7)
    at Pipe._handle.close [as _onclose] (net.js:557:12)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR<EMAIL_ADDRESS>test:node: `aegir test --target node --no-parallel`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>test:node script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR!      C:\Users\Owner\AppData\Roaming\npm-cache\_logs\2017-11-12T07_25_33_552Z-debug.log

C:\Users\Owner\Documents\GitHub\js-ipfs-api>    1) "before all" hook

lots more of failed tests with "before all"

The first thing that jumps out is the ENOENT from ipfsd-ctl.  Its trying to run ...\ipfs but on Windows it should be ...\ipfs.exe.

@richardschneider good you could reproduce that, I had a fix, but then couldn't really reproduce it anymore and CI passed without it. Also my windows pc burned down.
please have a look https://github.com/thisconnect/js-ipfsd-ctl/commit/03ea8d538e141aa2bafb2ace81771f948684c03d#diff-6ff379484cbabad48301d485db111c08R31

@thisconnect I've just spent 2 hours debugging this.  It looks like windows is happy without the .exe!
It appears to be NPM.  We are trying to spawn <blah>\js-ipfs-api\node_modules\ipfsd-ctl\node_modules\go-ipfs-dep\go-ipfs\ipfs .  But node_modules\ipfsd-ctl\node_modules does not exist.
I think the new NPM moves all "sub node_modules" to the top-level node_modules.
How it works on *nix, I have no idea.  Perhaps symlinks.

well since npm3 NPM tries to deduplicate everything, that is why there is still some npm2 code https://github.com/ipfs/js-ipfsd-ctl/blob/master/src/daemon.js#L33 (which we probably could remove now)
You say it tries to spawn <blah>\js-ipfs-api\node_modules\ipfsd-ctl\node_modules\go-ipfs-dep\go-ipfs\ipfs, that looks like the npm2 path :/
Do you use a really old npm version?

So the try/catch npm3 path seems to fail for you https://github.com/ipfs/js-ipfsd-ctl/blob/master/src/daemon.js#L37 are you sure it is not because of .exe?

Just read about folder parsimony. I'm running NPM 5.4.2, which is pretty current.

@thisconnect You are good! spawning without .exe is okay for window, but the checking for the file without .exe fails.

This is also explains why running the ipfsd-ctl test work on windows.  It just falls back NPM 2 path, which is valid when working directly with the package.

Just did a quick hack and its looks to be working!
If you are ever in NZ, I'll buy the beers.
You are awesome.

With the new js-ipfsd-ctl, 254 passing,  12 pending and 18 failing tests.
The failures can be summarised as

diag.sys [Error: this operation is not supported on your platform]
dial attempt failed: context deadline exceeded
.swarm.addrs  Uncaught AssertionError: expected [] not to be empty
.swarm.peers timeout
various issues with addFromFs
a few tests are getting different hash IDs

@richardschneider  mind opening a PR on js-ipfs-api?

diag.sys [Error: this operation is not supported on your platform]

We can have a flag that disables this test for Windows, it's ok.

dial attempt failed: context deadline exceeded

Do you know what it was trying to dial to?

.swarm.addrs Uncaught AssertionError: expected [] not to be empty

Sounds like this failed due to the previous dial fail

.swarm.peers timeout

Increase the timeout?

various issues with addFromFs

Reported here https://github.com/ipfs/js-ipfs-api/issues/408

a few tests are getting different hash IDs

Weird, which ones?

test-results.txt

Transferred to PR #624


typo in 4.x 3D

under the header of ## Adding 3D Objects there is a typo
TYPO: Now let’s add our first 3D node. Just as all 2D nodes inherit from Node3D
Fix: Now let’s add our first 3D node. Just as all 2D nodes inherit from Node2D
https://kidscancode.org/godot_recipes/4.x/g101/3d/101_3d_01/index.html

is it a typo or is just fine???

That was indeed a typo. Fixed in the next push. Thanks!


Bind-SAML-to-ID-Attribute

@wiersgallak The paragraphs are a little long, could they be broken into a few smaller paragraphs? Also, propose going through the text for grammar/spelling tweaks.

Thanks @amyblais I did some more formatting on this and reviewed the text more thoroughly.

Merging 5.3 docs into master. Please open a new PR for further edits (to master branch)


Touch input pinch to zoom, #13

This PR will add touch-based pinch-to-zoom and simultaneously pan.
The desired behavior is as follows:

[X] Only two-finger input can trigger pinch-zoom/pan behaviour
[X] User should be able to zoom/pan from any mode, not just explicitly move mode
[X] New scale is determined by ratio of initial and final finger distance
[x] Translation should be determined so that the point initially under the midpoint of the two fingers is also under the final midpoint

The current code uses some unsavory global variables for state and needs to be refactored into an object. Having never programmed in coffeescript before, I kindly request some guidance from @edemaine or another expert. There may be lots of non-idiomatic code in this PR.
I also haven't really studied the structure of the rest of the code, so I don't know if I'm stepping on the feet of existing code.
Finally, I haven't thought too carefully about how should the input state machine work. Currently, the user can start out drawing with one finger, but then the second finger can trigger zoom/pan behavior. This seems undesirable, and suggestions are welcome for how to avoid this, or general discussion how should multitouch input be handled.

All relevant code has been refactored into the touchStateMachine object, I think this is ready for review.

Added text to doc/README.md. Rebased on master.

I've been using cocreate from a tablet a lot, and I'd love to be able to use two-finger pinch-to-zoom. Any thoughts on the approach implemented here, or how it might be better structured?

Rebased on master to fix merge conflicts

@edemaine Can I request a code review or feedback if this whole implementation needs an overhaul?

Sorry again for the delay.  I just did some testing and code cleanup.  Overall, this is really cool, and I'd love to get it merged in.  But first we need to deal with a few things:

I don't like how this behaves when in a drawing tool and touchDraw (new name for allowTouch/allowTouchDraw) is true.  One or more draw gestures will start, get interrupted by pan/zoom, and generally makes a mess.
There's a general challenge here of how to distinguish the first finger that comes into contact, when it could be the beginning of a draw operation or the beginning of a pair of fingers to start a zoom operation.  I see two options:

Disable multifinger gestures when touchDraw is true, or perhaps more precisely, when restrictTouchDraw returns false. This seems simplest, and is my preference (for reasons described below).  Is it sufficient for your purposes?
(Do you use a pen on your tablet?  Or could you stand switching to pan mode?)  I added a reset method to the state machine that would enable this; it could be called whenever touchDraw or the current mode changes (so restrictTouchDraw might change).
When drawing with touch, don't actually start a draw operation (retroactively at the initial pointerdown) until a certain distance has been traversed. This is probably what most touch-based interfaces do, but it would be a much bigger code rewrite...  It also means that users could no longer do "multifinger drawing" (multiple fingers drawing at once), which is fun when playing with kids, so I'd want to preserve it behind a toggle at least.

There's buggy behavior when using this in pan mode, because both the multitouch state machine and the pan mode store an initial translation.  Depending on the exact lifting sequence, this can lead to a big wrong translation at the end of a multitouch session.
I wonder if the "right" way to think about this is that the "multitouch state machine" should really be (replace) the pan mode. Then all we need to add is "jumping into this mode temporarily" when doing multitouch gestures in a non-pan mode, when restrictTouchDraw returns true. One approach to this temporary jumping is how Cocreate already jumps into pan mode when holding spacebar; it's a bit hacky, though, and because it's an actual mode transition it would prevent things like: start drawing with pen/mouse, use multifinger gesture to zoom, and continue drawing the same object with pen/mouse. We also need the state machine to even detect a multitouch gesture, so something closer to the current approach seems necessary anyway...
I've long wanted to convert modes into classes (or objects), so that they each have their own state instead of the global pointers object.  This may be a case where we'd also like either subclassing or multiple instances of the same class, because pan mode and the multitouch state machine are similar but different: pan responds to all events, not just touch, and translates even with one-pointer gestures, while the multitouch state machine only responds to two-pointer (two-finger) gestures.  So their behavior is largely shared code, with some boolean parameters to affect behavior.

We/I should probably change the touchDraw icon to also include a stroke underneath the extended finger, to more accurately represent "drawing via touch" instead of just "touch".

Let me know your thoughts, especially on 1 and 2, and then we can figure out how to proceed.

Thanks for taking a look! First, a general comment about the overall approach. I recently tried GIMP on a multitouch input device, and saw that they had the following behavior. Each input has its own tool bound to it. So, for example, if I have a mouse or touchpad ('pointer'), style ('pen'), and 'touch', then there could be three different tools bound. Touch could be bound to crop tool, stylus to calligraphic tool, and pointer to airbrush, or something like that. That model seems powerful but potentially confusing.

Thanks for noting this, it's definitely bad behavior. IMO the most versatile approach would be something like the following. If a touchPointer travels a threshold distance (like eraseDist or dragDist), switch the state machine into a new state, 'usingTool' or something like that [note that while I called it a state machine, I haven't actually made a state diagram and implemented different states yet; it's currently just the binary @doingPanZoom]. If any tool is being used by a touch pointer, we should block two-finger pan/zooming. This way, if somebody starts drawing, as many fingers as you want can start to draw. Only leave this state if all touchPointers are lifted.
However, if two pointers go down before either one has traversed a threshold distance, transition to state 'doingPanZoom'. Then, only the first two touchPointers which were touched will control the zooming/panning. Additional touch input should be ignored. If either of the original two touchPointers are lifted, we have to leave the state and do something sensible with the remaining still-down pointers. I'm not sure what to do with them -- the easiest thing to do is continue to ignore them until all of them are lifted.
Probably this still seems a little too fuzzy, so I think we should make a state diagram so we force ourselves to specify behavior for down, up, and move events in each state, and the transitions between them.
Regarding how big of a rewrite it would be if touch inputs pend until traveling a threshold distance: there is less work to do if the touchStateMachine keeps track of the distance before dispatching to the tool

Yes, this definitely needs additional states. Not all tools make sense for multiple touch inputs at the same time (e.g. does it make sense for the text tool, which only has one input field?). I'd say either continue forwarding just the first pointer to the tool, ignoring the others; or end the pan tool action and transition to two-finger pan/zoom. Either way, we should specify this when we make the state machine more precise.

Sounds good, were you thinking of something like these? [1], [2]

Your approach sounds reasonable, though as you say, it probably needs some refinement and testing before we can be certain it'll work. But this is surely how most iPad apps work, so I'm hopeful it'll work well. Some thoughts:

It's maybe hard to set thresholds in general (I usually find the current dragDist too small, but not sure how system-dependent that is). But in this case, we can measure the size of the finger via the PointerEvent's width and height, and maybe set the threshold relative to that. Will still need some testing, but hopefully we can give the feeling of real-time drawing because by the time your finger is out of the way, we've passed the threshold.
The touch state machine will need to track all events that happen before a state change (not just the distance traveled), so that it can retroactively pass all the events to the tool.  You're right that this should be possible, though; we can just send those events to currentTool when it's time. (Currently, events aren't particularly time sensitive. At some distant future, we might care about the timeline for some kind of freehand smoothing, but we could always record the times in those cases.) We could even imagine extra-coalescing pointermove events so that they're dealt with more efficiently.
In pan mode, we probably don't want to wait for a critical distance traveled, so that one-finger panning feels responsive. Easy enough.
I still have some worry that two people drawing freehand, picking up and dropping their respective fingers, might accidentally start a multitouch gesture... So we might still want a multitouch gesture toggle. But this would certainly be less likely and less crucial. (Could probably be relegated to a settings page once we have one...)
All this said, I feel like this approach is substantially more complicated, while the current PR is close, so it might be a good idea to delay this touchDraw-supporting approach for a future PR, and try to get the current behavior enabled when touchDraw is false. Thoughts?

A simple approach for now would be to not activate the touch state machine in pan mode, and give full control to the pan tool. This seems like what we want (in some sense) even with the complex implementation of 1. And then duplicate the multitouch code into the pan tool so that it can pan and zoom, or ideally find a way to deduplicate/share the core code (maybe a new Board.scale helper?).
Yeah, those look nice, especially the first. I was thinking of modifying the FontAwesome icon to add a path, along those lines.

Forgot to respond about this:

recently tried GIMP on a multitouch input device, and saw that they had the following behavior. Each input has its own tool bound to it. So, for example, if I have a mouse or touchpad ('pointer'), style ('pen'), and 'touch', then there could be three different tools bound. Touch could be bound to crop tool, stylus to calligraphic tool, and pointer to airbrush, or something like that. That model seems powerful but potentially confusing.

Neat that GIMP was so bold to do this. (Of course, GIMP is somewhat infamous for being difficult to use...) I had a similar idea in #39 (which is probably where this discussion "belongs", but not important), for how to assign different operations to different tips/buttons on a pen (e.g. to use the opposite end of a pen to erase, and maybe also for doing different things with left and right mouse). I think at the level of a pen (or a mouse) it makes sense. My main worry for doing it with pen vs. touch is that a comfortable use case is to select tools with touch of the finger with one hand, and draw using the pen (or mouse) in the other hand. I routinely do that with a keyboard (left hand on keyboard selecting tools, right hand using mouse/pen/whatever), so I could imagine a tablet user doing so as well (left hand on tool set, right hand drawing with touch/pen/whatever). This workflow wouldn't work if touch has its own tool separate from pen/mouse tool...
Roughly, touchDraw set to false is like a simple version of this, which forces touch to act like a two-finger pan tool (while all other pointer types can be different tools), which is probably the most important/common case that a user would want to assign a tool specifically to touch (and they have other pointer types for other tools).  But I'm open to hear other use cases that might make sense... e.g. would you want to select with touch and draw with pen? Unclear, especially that using a pen with your palm on the tablet can easily accidentally register a touch event (which is why I'd only want two-finger options to trigger anything when touchDraw is false).

I also use the 'Squid' app on a tablet, which similarly allows the user to bind touch, stylus, stylus's eraser, stylus with button... all to different tools. This is probably much easier for a single user who carefully configures their environment rather than multiple users all interacting with the same display [are there multi-touch displays with active styli that will identify which of multiple styli are inputting?]. The way I use it (the default, IIRC) is for single-finger touch to be an eraser (since I do not have an eraser or button on my stylus). Two-finger touch is still pan/zoom, that can't be altered in Squid.

All this said, I feel like this approach is substantially more complicated, while the current PR is close, so it might be a good idea to delay this touchDraw-supporting approach for a future PR, and try to get the current behavior enabled when touchDraw is false. Thoughts?

Wise idea. Better to make some partial progress than try to solve all problems at once.

A simple approach for now would be to not activate the touch state machine in pan mode, and give full control to the pan tool. This seems like what we want (in some sense) even with the complex implementation of 1. And then duplicate the multitouch code into the pan tool so that it can pan and zoom,

I think it seems easier to keep this code within the touch state machine; i.e. to say if the current tool is pan, and we are handling touch events, for the state machine to be responsible for both the panning and zooming. Or do you think that makes the code too difficult to follow?

ideally find a way to deduplicate/share the core code

Ok, this would help with my above worry about code readability.

I also use the 'Squid' app on a tablet, which similarly allows the user to bind touch, stylus, stylus's eraser, stylus with button... all to different tools. This is probably much easier for a single user who carefully configures their environment rather than multiple users all interacting with the same display [are there multi-touch displays with active styli that will identify which of multiple styli are inputting?]. The way I use it (the default, IIRC) is for single-finger touch to be an eraser (since I do not have an eraser or button on my stylus). Two-finger touch is still pan/zoom, that can't be altered in Squid.

All this said, I feel like this approach is substantially more complicated, while the current PR is close, so it might be a good idea to delay this touchDraw-supporting approach for a future PR, and try to get the current behavior enabled when touchDraw is false. Thoughts?

Wise idea. Better to make some partial progress than try to solve all problems at once.

A simple approach for now would be to not activate the touch state machine in pan mode, and give full control to the pan tool. This seems like what we want (in some sense) even with the complex implementation of 1. And then duplicate the multitouch code into the pan tool so that it can pan and zoom,

I think it seems easier to keep this code within the touch state machine; i.e. to say if the current tool is pan, and we are handling touch events, for the state machine to be responsible for both the panning and zooming. Or do you think that makes the code too difficult to follow?

ideally find a way to deduplicate/share the core code

Ok, this would help with my above worry about code readability.

I also use the 'Squid' app on a tablet, which similarly allows the user to bind touch, stylus, stylus's eraser, stylus with button... all to different tools. This is probably much easier for a single user who carefully configures their environment rather than multiple users all interacting with the same display

Maybe one day the touchDraw toggle could have a right/long-press option for selecting a preferred tool for touch...

[are there multi-touch displays with active styli that will identify which of multiple styli are inputting?]

Certainly Wacom tablets can distinguish between different styli.  I don't know whether that comes through as distinguishable PointerEvent inputs (e.g. consistent pointerIds or buttons) — I will have to get a second pen to test.

The way I use it (the default, IIRC) is for single-finger touch to be an eraser (since I do not have an eraser or button on my stylus). Two-finger touch is still pan/zoom, that can't be altered in Squid.

Interesting — do you ever accidentally erase something when doing a two-finger pan/zoom gesture?

I think it seems easier to keep this code within the touch state machine; i.e. to say if the current tool is pan, and we are handling touch events, for the state machine to be responsible for both the panning and zooming. Or do you think that makes the code too difficult to follow?

I guess that makes sense, though it does seem weird at first. In this view, the touch state machine is essentially an "overlay mode" that affects all modes, and some modes slightly differently. And then pan mode doesn't actually do anything (that's the weird part). At the least, we'll want a code comment in the pan mode to this effect.
I could see going either way on this. It'd probably also be easy enough to call similar functions between the touch state machine / overlay and the pan tool, with different parameters, like I mentioned above. But feel free to try whichever you'd like first.

In commits f657258af649a84b7ec699679b61b19ad7d63c1f, 064b6e96894927c700518065b08e535f87eab95a, f1a01cd16a34ad260601a8894d8fe5c471f4d811 I ported this code to modern Cocreate and implemented the plan I'd previously stated:

Multitouch pan/zoom works in pan mode always
Multitouch pan/zoom works in drawing modes when "touch draw" mode is off

Thanks again for writing the initial code here! I've marked f657258af649a84b7ec699679b61b19ad7d63c1f in particular as co-authored by you. Happy to finally have multitouch pan/zoom in Cocreate! Tablet users will be very happy.

Hooray! Sorry I got distracted with other things, glad it finally made it in though


README should note how to clone repo into GOPATH

For developers unfamiliar with the gotchas of vanity imports but used to cloning code from GitHub, the README should indicate how to clone the repo into the correct location within the GOPATH. Something like:
Cloned copies of this repository must be placed in the correct location in the GOPATH. Use:
git clone github.com/GoogleCloudPlatform/google-cloud-go $GOPATH/src/cloud.google.com/go

Or simply use the following command which will handle cloning the repo:
go get -u cloud.google.com/go

/cc @mainroach

The README contains:
go get -u cloud.google.com/go/...

Does that not suffice?

I haven't heard of a dev workflow that starts with a clone. People either use go get or a package manager.
I would say that if someone is sophisticated/DIY-ish enough to use git clone for Go development, they ought to be aware of how to map an import path to a directory. In addition to the go get line Jean mentioned, the readme also has import "cloud.google.com/go".

I found this repo when investigating BigTable performance, which points to the loadtest tool. For someone unfamiliar with Golang, it was unclear what exactly the right way to run that tool, or interact with this repo in order to do so. The documentation for the tool, and this repo were sparse enough that it remained unclear.
Google often links to github sample repos from their official documentation. For other GCP languages, git clone is the default action when linked to github (see python quickstart, or the java quickstart, or the php quickstart)  As such, it's easy to get confused on if this repo was a samples repo, or something else. The readme did nothing to help clear up this confusion, which is understandable given the other development patterns.
If you're unfamiliar with GoLang, unfamiliar with how to use Google's Go client libraries, and unfamiliar with this repo; then the current language of the readme file doesn't provide help to point you in the right direction when you land here as a result of external links.
Also, the mention of go get is not descriptive enough for someone not familiar with golang (like myself). I just assumed it was a dependencies package manager (like npm or pip) and needed to be ran before you could execute the repo.
Perhaps a simple introduction would help? something like:

This repo contains the source code for the Google Cloud Go Client Libraries, which allow you to access GCP services using GoLang.
If you want to use these libraries in your project, please run go get -u cloud.google.com/go on your development machine, which should fetch and place them in the appropriate folder specified by your $GOPATH variable.
You do not need to clone this repo in order to use these APIs. If you're unfamiliar with Golang, and have been directed here in order to run a sample, or a tool, please see our official getting started documentation.

Again, my goal here is to just help clear up confusion for other people who might not be golang experts, and end up at this page for various reasons.

The only way you'd be able to use loaddtest.go would be to install Go, as part of which you'd presumedly learn about go get and $GOPATH.
To be clear, I didn't install GoLang : I just loaded up the Google Cloud Console (which already has go installed) and just started typing.  Maybe it's a reach to assume others would do the same, but it's worth pointing out that there does exist a path where you wouldn't learn those things.

It may be disingenuous to refer to it as "the" loadtest tool instead of "a Go loadtest tool".
Yes. I'd agree that the tool might be better served to be pulled out to a higher level repo, and better branded.

To be clear, I didn't install GoLang : I just loaded up the Google Cloud Console (which already has go installed) and just started typing. Maybe it's a reach to assume others would do the same, but it's worth pointing out that there does exist a path where you wouldn't learn those things.

Ohhh. Gotcha. So, yeah, that's a nuisance for the user. It's loaded in your cloud console by sheer coincidence, and you're not guaranteed to be at HEAD. It's definitely a "maybe nice to have? but wholly unsupported" situation.

Completely agreed that it's not the supported path. The suggested text would have saved me 2 hours of problems this morning. Given others may stumble here, I'd still support adding some nicer vocab to the readme help others find their way to the correct places.

I remain unconvinced, and don't want to get in the business of tailoring our docs for explicitly unsupported usecases - however small the modifications. To prevent users from getting into this situation I'd rather remove the hacky go-client-libs-happen-to-exist-in-cloud-console situation.
I'll defer to @jba though.

How about instead of saying:

To install the packages on your system,

the README says,

To install the packages on your system, don't clone the repo and instead use:

Given Go's rapid growth, I expect we'll see more users stumble into this mistake. If a small change in wording makes this set of libraries (and GCP to a lesser extent) more user friendly, I'm in favor of the change.

Should we do the same for protobuf? For grpc? The convention is very strongly towards using go get instead of git clone. I'm not sure that introducing a schism in convention makes things more use friendly.

If you as maintainer don't see this problem tripping up users, both hypothetically and experientially, I'm happy to close the issue.

I think there's a valid in here that there's a route users can get tripped up by; I'm just saying that I don't think that go get is the issue, and that I'd rather have our docs or (more ideally) cloud shell experience be changed. I'm also hoping jba weighs in on this.

@enocom's suggested workin


[bazel] clean up failing_verilator and cpu:4 tags

The "failing_verilator" tag was doing the same thing as the "broken" tag and
required bazel users to remember to filter for both, so all instances of
"failing_verilator" are replaced by broken.
"cpu:4" is applied to all verilator tests by rules/opentitan_test.bzl so
other applications are removed and it's removed from the cw310 tests
which are exclusive and aren't affected by it.
Signed-off-by: Drew Macrae<EMAIL_ADDRESS>

"cpu:4" is applied to all verilator tests by rules/opentitan_test.bzl so other applications are removed and it's removed from the cw310 tests which are exclusive and aren't affected by it.

It seems like this is actually applied by --local_cpu_resources on the command line rather than in opentitan_test.bzl?

It seems like this is actually applied by --local_cpu_resources on the command line rather than in opentitan_test.bzl?

Yeah, I wasn't seeing the tag work as I expected, but applying it twice isn't going to make it work any better.


[No QA] Trust input tag and diff between it and the most recent completed deploy

Details
The getDeployPullRequestList action is used in two places:

platformDeploy.yml, after a deploy completes, to leave deploy comments on all deployed PRs
deploy.yml, before creating a GitHub Release, to list all deploys about to be deployed in that release

How it worked before https://github.com/Expensify/App/pull/27399 is that it would list tags or releases, find the input tag and the prior one, then use git to list the PRs merged between those tags.
This became a problem with https://github.com/Expensify/App/pull/27399 because if a deploy is interrupted in progress, we didn't want to comment on the PR that it was not deployed, so we skip the deploy comment in platformDeploy.yml if the workflow status is cancelled. This meant that in the next deploy, we need to comment on not only the PRs for that deploy but for all PRs deployed since the last completed deploy.
To do that, instead of looking at tags / releases, we search completed platformDeploy.yml workflow runs to find the last completed deploy, grab the tag from there, and then use that to list the PRs merged between those tags.
This plan was sound, but there was a problem with the implementation. We were looking for a completed platformDeploy.yml workflow run with a tag matching the current tag, but that would never work because platformDeploy.yml for the current tag was still running. It was essentially "looking for itself". In the case of deploy.yml, the platformDeploy.yml for the current tag wouldn't be found because it's triggered by the creation of a release, and the release doesn't yet exist.
To fix it, all we do in this PR is just trust the input tag and look for the most recent completed platformDeploy.yml, rather than trying to find the currently (or soon to be) running deploy.
Fixed Issues
$ n/a – slack context https://expensify.slack.com/archives/C07J32337/p1699563800356759
Tests
Send it. Tested locally to verify that the most recent workflow run is at the front of the array.

[x] Verify that no errors appear in the JS console

Offline tests
None
QA Steps
None.

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] If we are not using the full Onyx data that we loaded, I've added the proper selector in order to ensure the component only re-renders when the data it is using changes
[x] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[x] I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

Reviewer Checklist

[x] I have verified the author checklist is complete (all boxes are checked off).
[x] I verified the correct issue is linked in the ### Fixed Issues section above
[x] I verified testing steps are clear and they cover the changes made in this PR

[x] I verified the steps for local testing are in the Tests section
[x] I verified the steps for Staging and/or Production testing are in the QA steps section
[x] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[x] I checked that screenshots or videos are included for tests on all platforms
[x] I included screenshots or videos for tests on all platforms
[x] I verified tests pass on all platforms & I tested again on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

[x] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[x] I verified proper code patterns were followed (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I verified that this PR follows the guidelines as stated in the Review Guidelines
[x] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[x] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Deployed to staging by https://github.com/puneetlath in version: 1.3.98-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/roryabraham in version: 1.3.98-5 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to staging by https://github.com/puneetlath in version: 1.3.99-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/roryabraham in version: 1.3.99-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


Escaping Literal Quotes in Strings

Challenge Name

Escaping Literal Quotes in Strings
https://www.freecodecamp.com/challenges/escaping-literal-quotes-in-strings
Issue Description

Browser Information

Browser Name, Version:
Operating System:
Mobile, Desktop, or Tablet:

Your Code

var myStr= "I am a"double quoted"string inside"double quotes"."; // Change this line
I've witnessed this exact same code pass, work, go through, with a colleague of mine. watched it, same code verbatim and the damn thing isn't registering, also watched it work on a web posting, so something isn't right here, works for some and not others, so if its working on one computer/path/time frame and now its not working, something is up
#### Screenshot
<!-- Add a screenshot of your issue -->

@courtjester71 You have an error in your code. I recommend asking for help in the Help Chat room on Gitter.

No im not using bs chats, waste of time working with a gagle who might know
somethimg, and why then has the exact same code worked just fine for
others? Ill look into it, but not on a chat. I want answers not rhetoric
On Sep 23, 2016 14:16, "Dylan"<EMAIL_ADDRESS>wrote:

@courtjester71 https://github.com/courtjester71 You have an error in
your code. I recommend asking for help in the Help Chat
https://gitter.im/FreeCodeCamp/Help room on Gitter.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/FreeCodeCamp/FreeCodeCamp/issues/10887#issuecomment-249278636,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AUITxSSGFnmXF6nGoMMT78JJRm_ZfBSoks5qtCV4gaJpZM4KFR4N
.

@courtjester71 your code is incorrect. The string you need to pass the challenge is case- and space-sensitive. Chat rooms can be messy but that is the environment we use for coding help. If you have a colleague to work through and they have a working example, I would double check their work with yours. GitHub issues are only for true issues after you've tried and debugged all you can. Remember, programming is very sensitive to the instructions you give it. Happy coding!

Lol.....my eyes are pretty messed up....yeah ill look into it but on the
forums and legit coding sites never in a chat. They are worthlesd
On Sep 23, 2016 15:23, "Eric Leung"<EMAIL_ADDRESS>wrote:

Closed #10887 https://github.com/FreeCodeCamp/FreeCodeCamp/issues/10887.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/FreeCodeCamp/FreeCodeCamp/issues/10887#event-800913083,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AUITxe-yN1hdgJfjAR2yg5X0NAf2f6WLks5qtDUqgaJpZM4KFR4N
.


Support C-preprocessor-style #define/#ifdef

One common use case for the C preprocessor is conditional compilation using #ifdef/#else/#endif.  Those can already be done in perlpp with <? if(...) { ?> <? } ?>.  Similarly, #define/#undef can already be done with variable assignments.  However, I think syntactic sugar for those functions, together with a -D command-line option, would make it easier for people to transition from cpp to perlpp.
I have an example implementation in branch defines of my fork.  It fills %Defs for use at generation time and %D for use at execution time.  Any thoughts on this approach?  An alternative would be to merge %D and %S (-s name=val options).  I'll leave this issue open for a bit in case anyone has any ideas or concerns.

One difference between -D and -s: -D in C does textual substitution in the input file.  I have updated defines to do so --- let me know what you think.  I am currently thinking that I will bring -s back from master, and provide both for flexibility.


Installations instructions are marked up as a

The installation instructions on the front page are marked up with a figure-element. They are not images but maybe even the most important text on the page for many. This can be improved by putting this content inside an element with different semantics (or no semantics) that don't confuse a user of Assistive Technology.
===
This finding of this issue has been recorded. It is part of my weekly accessibility stream on Twitch: twitch.tv/erikKroes
A recording should be up soon at youtube: https://www.youtube.com/channel/UCwrpGO76k2HyUQspl-rG2eQ/videos

Fixed by #4608