[Core][♿]: add keyboard navigation / interaction

We have to make sure that controls can be operated using the keyboard. Native interactive HTML elements, such as links and form controls, support keyboard accessibility by default, and these should be used wherever possible. However, many custom controls and widgets use elements such as div, span, and li, which do not by default provide keyboard support. In this case, keyboard support must be supplied by Sonnat.
List of things we need to make sure of:

Make sure every active control is in focus order
Make sure currently inactive controls are not in focus order
Make sure that active controls are operable using the keyboard
Make sure that content that appears/disappears, is designed such that users can perceive the additional content and dismiss it without disrupting the page experience

Basic keyboard controls on the web:

Tab navigates to next focusable element
Shift+Tab navigates to previous focusable element
Arrows navigate between related radio buttons, menu items, or widget items
Enter activates a link or button, or submits a form
Space activates a button or toggle
Esc closes menus, modals, and other popover variations

[🚀] Merged!
[🔗] Link to the Log


Blank Page for Spools and Filaments

Describe the bug
I've noticed that Spoolman can get into a state where clicking on Spools or Filaments from the home page just displays a blank page with browser errors in console.
To Reproduce
Steps to reproduce the behavior:

Open Spoolman
Click Spools
Page may be blank

Expected behavior
Page should load
Screenshots

Spoolman Host (please complete the following information):

Installation type: Docker
Installed version: Version 0.18.1 (306dbe4)
OS and Distro: Ubuntu
Database type: SQLite

Desktop (please complete the following information):

OS: Windows 11
Browser: Chrome and Edge on same computer

Additional context
Docker container logs show no problems

Also notable: I have this exposed to the internet behind Cloudflare Access under a domain name. When I access the service locally through the same browser that has the blank page, the Spools and Filaments page loads just fine.
Thinking this could either be cache related, or an interaction with Argo tunnels.

Same issue, wont let me add, page goes blank.

Same, also proxied through Cloudflare.
Worked fine on desktop, am on mobile now (Android, Firefox).
Screen seems to load for a split second before going white.
Will add more info when I can test from a desktop again.

does the same on desktop too, i get the screen for 2 secconds also, before going white.

Non-proxied, local network - get a blank page on Spool>Clone.  I can Create a spool, from both Spools and Filaments.  Filament>Clone works.

Mine has resolved itself, not sure if an update has been push out somewhere, works across all devices now.

Very strange issue. Would be interesting to see more console errors if it appears again.
It looks like one of the javascript files failed to download fully, and then it was stored in your browser's cache causing it to keep happening. Until your browser decided to download it again whereupon it now succeeds.
Maybe it has something to do with cloudflare?

Happened again for me today, here's the console errors:

Let me know if anything else would be helpful :)


bug in mod function when working with lists

Tscope.attr('array').mod({array:[1,2,3]}, function(){return ""});
// expected {array: ""}
// return {array: ["", "", ""]}

Tscope.attr('array').mod({array:[1,2,3]}, function(lst){
    lst.push(4);
    return lst
});
// expected {array:[1,2,3,4]}
// actual lst is a '1' and undefined is not a function fired

Regression test will be added soon.

I used old version of tscope.js from https://github.com/nLight/react-workshop-1 repo.
There is no bug in current version.


[$500] Request - Merchant and category rows disappear in the confirmation page after adding receipt

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Version Number: v1.4.17-1
Reproducible in staging?: Y
Reproducible in production?: N
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Expensify/Expensify Issue URL:
Issue reported by: Applause-Internal Team
Slack conversation: @
Action Performed:

Go to workspace chat > + > Request money .
2.Go to Manual > Enter amount > Next.
Click 3-dot menu > Add receipt.
Add a receipt.

Expected Result:
Merchant and category rows will not disappear in the confirmation page,
Actual Result:
Merchant and category rows disappear in the confirmation page,
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

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

Screenshots/Videos
https://github.com/Expensify/App/assets/115492554/a1dc8a24-2174-4f81-b471-d76019a4ddb9

View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~0179ee4404d0db5b5f
Upwork Job ID:<PHONE_NUMBER>076816384
Last Price Increase: 2023-12-26

This is a regression from https://github.com/Expensify/App/pull/30721

@aimane-chnaif this is expected for the Scan requests since the values are auto-generated there.
A manual request with an attached receipt does not behave like a Scan, therefore it should be allowed to enter these fields there. Was this specific case discussed in the PR?

Yes, and this was the response from @youssef-lr:

SmartScan should take care of those fields and not the user

We don't initiate the SmartScan process for in this case, do we? I think there was a misunderstanding in that discussion, otherwise the SmartScan shouldn't have been mentioned. Please correct me if I'm wrong.

Removing the blocker, I agree this can be closed but assigning @youssef-lr to confirm

Hmm I missed this case, I think we should keep the date & merchant field if the receipt is added from a manual tab. @JmillsExpensify do you agre?

Proposal
Please re-state the problem that we are trying to solve in this issue.
The date & merchant fields are missing on the Confirmation step.
What is the root cause of that problem?
The shouldShowSmartScanFields is set incorrectly: we assume the SmartScan will be initiated when the transaction has a receipt, but when it's a manual request with a receipt attached, the SmartScan will not take place, and the hidden fields will not be filled.
https://github.com/Expensify/App/blob/283dc3e5cdc77e230aff3406b37317fc0b1c0439/src/pages/iou/request/step/IOURequestStepConfirmation.js#L350
What changes do you think we should make in order to solve the problem?
We should change this condition to check whether the IOU request is a Scan, since the SmartScan will be initiated only for this type of requests:
shouldShowSmartScanFields={requestType !== CONST.IOU.REQUEST_TYPE.SCAN}

What alternative solutions did you explore? (Optional)

@youssef-lr I think it really depends whether we run the smartscan or not in this case, if we do we should remove it imho

I think it really depends whether we run the smartscan or not in this case, if we do we should remove it imho
Agreed @mountiny, let's wait for some input from @JmillsExpensify and @trjExpensify as well

If it's a paid workspace, so Collect or Control, we always scan the receipt after the fact in the background. It does matter if the user opts to scan or manually attaches a receipt. That said, can I get an updated summary on what we're discussing?

The question in here is:
Is the manual request where you post-add a receipt and the confirmation screen equivalent of just straight up scanning a receipt? Hence should the fields at the confirmation page be same for both flows - when we add a receipt to the manual request we hide category and merchant as those will be filled with smartscan

@mountiny to answer your question though, if we send a receipt and an amount it won't be scanned, because the transaction is not considered partial anymore

Is the manual request where you post-add a receipt and the confirmation screen equivalent of just straight up scanning a receipt? Hence should the fields at the confirmation page be same for both flows - when we add a receipt to the manual request we hide category and merchant as those will be filled with smartscan

@mountiny can you restate the question please, you mention hiding category here so I'm a bit confused.

You start creating manual request
you are in the confirmation page
you have merchant and category there
you add receipt at this point

Should the merchant and category field dissapear since this would be Smartscan now?

@mountiny I think it's merchant and date, category always remains as we don't smartscan it, right?

if we send a receipt and an amount it won't be scanned, because the transaction is not considered partial anymore

Correction here, transaction needs both a merchant and an amount set to be considered not partial. So I think if both are supplied along with a receipt, it won't get scanned.
https://github.com/Expensify/Web-Expensify/blob/d2d76c62e7b2f46a97effe36c96fbe52e2abd218/lib/Hit.php#L683

Ok that seems about right, however i think in this case we are discussing if we should smartscan it or not/ if the manual request with added receipt should be equivalent of just scanning a receipt?

One use case I'm thinking of is someone might want to add a receipt and also amount/merchant because they believe the receipt is not much readable, or they want the amount to show up right away. Hiding the fields afterwards will make the user submit then head to the transaction to fill in the details.

One use case I'm thinking of is someone might want to add a receipt and also amount/merchant because they believe the receipt is not much readable, or they want the amount to show up right away (but also keep a receipt included). Hiding the fields afterwards will make the user submit then head to the transaction to fill in the details.

I think we wanted to go the other way, basically streamline the scan flow as much as possible so the user does not have to think about anything like this, they can add it post creation if they think its non-readable but we should just let them see if it fails as most of the time it should succeed
@trjExpensify @JmillsExpensify I think you have been involved in these convos so curious for your take

Thanks for clarifying what we're talking about with this numbered flow, super helpful.
As a recap, on OldApp here's what we do:

manually create

All fields are visible
Attach a receipt via the empty state thumbnail
Merchant field is still visible and required to proceed with creating the expense
Hit save
SmartScan doesn't appear to be initiated on the front-end to the user (i.e SmartScanning....), it's only SmartScan'd in the background as part of the "Concierge DoubleCheck" audit feature to highlight if anything on the manually entered expense is different than read by SmartScan for admins.

So from a UX standpoint; the user has manually created an expense, filled out the details manually, and attached a receipt image manually as well. I don't see why we need to change that in NewDot really. If you went the Manual route you don't expect the Scan process to be initiated.
With that then;

Global Create > Request Money > Manual
Enter an amount > choose a participant
Land on the "Manual" confirmation screen with all fields visible as normal
Attach a receipt manually > stay on the "Manual" confirmation screen with all fields visible as normal, merchant name still required to enter to proceed.
Enter a merchant name > request > land in the workspace chat > request does not appear as a "Receipt scan in progress..." whisper as the SmartScan process isn't initiated on the front-end for the user, nor alters any data on the manually entered request even if Concierge DoubleCheck runs for the admin's benefit.

Sounds good then!

I'm going to work on this next week @trjExpensify with your suggested solution.

👋 @paultsimura are you referring to something in these steps not being accurate/needing clarifying?

Global Create > Request Money > Manual
Enter an amount > choose a participant
Land on the "Manual" confirmation screen with all fields visible as normal
Attach a receipt manually > stay on the "Manual" confirmation screen with all fields visible as normal, merchant name still required to enter to proceed.
Enter a merchant name > request > land in the workspace chat > request does not appear as a "Receipt scan in progress..." whisper as the SmartScan process isn't initiated on the front-end for the user, nor alters any data on the manually entered request even if Concierge DoubleCheck runs for the admin's benefit.

I was just a bit confused by the discrepancy between the initial conclusions and the final ones. After re-checking the steps, everything's clear 👌

Sounds great, thanks Tom for helping push this one along!

@trjExpensify @JmillsExpensify, what's the next step here, should i post this on slack to get proposals?

@getusha AFAIU, it's being worked on internally: https://github.com/Expensify/App/issues/33588#issuecomment-1884122408

Thanks @paultsimura, i missed that.

Still in Youssef's queue

@youssef-lr are you still good to take this on? Resurfaced here recently with internal testing!

@JmillsExpensify @trjExpensify going to send a PR this week.

Nice, thanks!

@paultsimura I think with your proposal the receipt will still show up as being scanned.

@paultsimura I think with your proposal the receipt will still show up as being scanned.

@youssef-lr It won't, here's the recording:
https://github.com/Expensify/App/assets/12595293/ab126a20-8461-40db-8865-e009dce39ced

Ah right, replaceReceipt already marks the state as OPEN. Sounds good then.

Thanks. The PR is ready for review: https://github.com/Expensify/App/pull/35599

Updated the payment summary above. There are no auto-contracts for this issue, so I'm creating those now.

[@getusha] The PR that introduced the bug has been identified. Link to the PR: https://github.com/Expensify/App/pull/30721
[@getusha] The offending PR has been commented on, pointing out the bug it caused and why, so the author and reviewers can learn from the mistake. Link to comment:  https://github.com/Expensify/App/pull/30721/files#r1491344743
[@getusha] A discussion in #expensify-bugs has been started about whether any other steps should be taken (e.g. updating the PR review checklist) in order to catch this type of bug sooner. Link to discussion: N/a this is a special case that was missed by the PR author.
[@getusha] Determine if we should create a regression test for this bug. Yes
[@getusha] If we decide to create a regression test for the bug, please propose the regression test steps to ensure the same bug will not reach production again.
Regression Test Proposal

Open any workspace chat > + > Request money
Select Manual > Enter any amount > Next
Click top right menu icon > Add receipt
Upload a receipt
Verify that fields such as date and merchant are present and remain unchanged from their state prior to uploading the receipt.
Add a value to merchant field > Request money
Verify the created request doesn't start the SmartScan process

Do we agree 👍 or 👎

Everyone paid out and the regression test has been added. Closing this one!


add sample for lambda extension to kinesis data stream

*Issue #, if available: * #58
Description of changes: The extension explains the overall approach to streamline and centralize log collection using Kinesis Data Streams. The extension runs a local HTTP listener and subscribes to a stream of function and platform logs using the Logs API. It buffers them and sends them to Kinesis Data Streams periodically. The demo gets deployed using AWS SAM. This contribution was possible because of @hariohmprasath 's awesome previous work( for Kinesis Firehose) which I could use as a reference and only change the parts pertaining to Kinesis Data Streams.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Thanks for the contribution.


Mixin enumerable to easily work with queries

Closed by #https://github.com/luckyframework/record/commit/c2826ad359fbe10ed3240f875deb8e8f0eed54ba


(bugfix, minor) ConfigurationResolver: Fixed doubled directory separator

It seems that php-cs-fixer displays annoying double (or even triple for disks'
root folders) slashes after main path on both Windows and Debian:

Windows

C:\Users\bartosz\idct>php-cs-fixer fix --dry-run soap
Loaded config default.
Using cache file ".php_cs.cache".
   1) soap\\src\client.php
   2) soap\\src\test\client.php

Windows, root D:

C:\Users\bartosz\idct>php-cs-fixer fix --dry-run d:
Loaded config default.
Using cache file ".php_cs.cache".
   1) D:\\\broken.php
   2) D:\\\sub1\broken.php
   3) D:\\\sub1\sub2\broken.php
   4) D:\\\sub3\broken.php
   5) D:\\\sub3\sub4\broken.php

Windows, root D:, with trailing slash:

C:\Users\bartosz\idct>php-cs-fixer fix --dry-run d:\
Loaded config default.
Using cache file ".php_cs.cache".
   1) D:\\\broken.php
   2) D:\\\sub1\broken.php
   3) D:\\\sub1\sub2\broken.php
   4) D:\\\sub3\broken.php
   5) D:\\\sub3\sub4\broken.php

Windows, with trailing slash:

C:\Users\bartosz\idct>php-cs-fixer fix --dry-run soap/
Loaded config default.
Using cache file ".php_cs.cache".
   1) soap\\src\client.php
   2) soap\\src\test\client.php

Windows, absolute path:

C:\Users\bartosz\idct>php-cs-fixer fix --dry-run C:\Users\bartosz\idct\soap
Loaded config default.
Using cache file ".php_cs.cache".
   1) soap\\src\client.php
   2) soap\\src\test\client.php

Windows, absolute path, with trailing slash:

C:\Users\bartosz\idct>php-cs-fixer fix --dry-run C:\Users\bartosz\idct\soap\
Loaded config default.
Using cache file ".php_cs.cache".
   1) soap\\src\client.php
   2) soap\\src\test\client.php

Debian

[bpacholek@dev01 fixer]$ ./php-cs-fixer fix --dry-run ../fail
Loaded config default from "/srv/home/bpacholek/fixer/.php_cs.dist".
   1) /srv/home/bpacholek/fail//broken.php
   2) /srv/home/bpacholek/fail//sub/broken.php

Debian, with trailing slash

[bpacholek@dev01 fixer]$ ./php-cs-fixer fix --dry-run ../fail/
Loaded config default from "/srv/home/bpacholek/fixer/.php_cs.dist".
   1) /srv/home/bpacholek/fail//broken.php
   2) /srv/home/bpacholek/fail//sub/broken.php

Debian, absolute path

[bpacholek@dev01 fixer]$ ./php-cs-fixer fix --dry-run /srv/home/bpacholek/fail
Loaded config default from "/srv/home/bpacholek/fixer/.php_cs.dist".
   1) /srv/home/bpacholek/fail//broken.php
   2) /srv/home/bpacholek/fail//sub/broken.php

Debian, absolute path, with trailing slash

[bpacholek@dev01 fixer]$ ./php-cs-fixer fix --dry-run /srv/home/bpacholek/fail/
Loaded config default from "/srv/home/bpacholek/fixer/.php_cs.dist".
   1) /srv/home/bpacholek/fail//broken.php
   2) /srv/home/bpacholek/fail//sub/broken.php

It seems that we need not only disable adding of the trailing slash in the
resolveFinder of ConfigurationResolver but also remove it when added by
realpath.
After the change:
Windows env

Windows

C:\Users\bartosz\idct\fixer>php php-cs-fixer fix --dry-run ../soap
Loaded config default from "C:\Users\bartosz\idct\fixer\.php_cs.dist".
   1) C:\Users\bartosz\idct\soap\src\client.php
   2) C:\Users\bartosz\idct\soap\src\test\client.php

Windows, root D:

C:\Users\bartosz\idct\fixer>php php-cs-fixer fix --dry-run d:
Loaded config default from "C:\Users\bartosz\idct\fixer\.php_cs.dist".
   1) D:\broken.php
   2) D:\sub1\broken.php
   3) D:\sub1\sub2\broken.php
   4) D:\sub3\broken.php
   5) D:\sub3\sub4\broken.php

Windows, root D:, with trailing slash:

C:\Users\bartosz\idct\fixer>php php-cs-fixer fix --dry-run d:\
Loaded config default from "C:\Users\bartosz\idct\fixer\.php_cs.dist".
   1) D:\broken.php
   2) D:\sub1\broken.php
   3) D:\sub1\sub2\broken.php
   4) D:\sub3\broken.php
   5) D:\sub3\sub4\broken.php

Windows, with trailing slash:

C:\Users\bartosz\idct\fixer>php php-cs-fixer fix --dry-run ../soap/
Loaded config default from "C:\Users\bartosz\idct\fixer\.php_cs.dist".
   1) C:\Users\bartosz\idct\soap\src\client.php
   2) C:\Users\bartosz\idct\soap\src\test\client.php

Windows, absolute path:

C:\Users\bartosz\idct\fixer>php php-cs-fixer fix --dry-run c:\Users\bartosz\idct\soap
Loaded config default from "C:\Users\bartosz\idct\fixer\.php_cs.dist".
   1) C:\Users\bartosz\idct\soap\src\client.php
   2) C:\Users\bartosz\idct\soap\src\test\client.php

Windows, absolute path, with trailing slash:

C:\Users\bartosz\idct\fixer>php php-cs-fixer fix --dry-run c:\Users\bartosz\idct\soap\
Loaded config default from "C:\Users\bartosz\idct\fixer\.php_cs.dist".
   1) C:\Users\bartosz\idct\soap\src\client.php
   2) C:\Users\bartosz\idct\soap\src\test\client.php

Debian:

Checked all files in 0.269 seconds, 10.500 MB memory used
[bpacholek@dev01 fixer]$ ./php-cs-fixer fix --dry-run ../fail
Loaded config default from "/srv/home/bpacholek/fixer/.php_cs.dist".
   1) /srv/home/bpacholek/fail/broken.php
   2) /srv/home/bpacholek/fail/sub/broken.php

Debian, with trailing slash:

[bpacholek@dev01 fixer]$ ./php-cs-fixer fix --dry-run ../fail/
Loaded config default from "/srv/home/bpacholek/fixer/.php_cs.dist".
   1) /srv/home/bpacholek/fail/broken.php
   2) /srv/home/bpacholek/fail/sub/broken.php

Debian, absolute path:

[bpacholek@dev01 fixer]$ ./php-cs-fixer fix --dry-run /srv/home/bpacholek/fail
Loaded config default from "/srv/home/bpacholek/fixer/.php_cs.dist".
   1) /srv/home/bpacholek/fail/broken.php
   2) /srv/home/bpacholek/fail/sub/broken.php

Debian, absolute path, with trailing slash:

[bpacholek@dev01 fixer]$ ./php-cs-fixer fix --dry-run /srv/home/bpacholek/fail/
Loaded config default from "/srv/home/bpacholek/fixer/.php_cs.dist".
   1) /srv/home/bpacholek/fail/broken.php
   2) /srv/home/bpacholek/fail/sub/broken.php

I believe this could be done in a more elegant way for somebody who knows the
code better, yet it solves the problem. Sorry if I missed something.
HeaderCommentFixerTest, NoWhitespaceInBlankLineFixerTest, NoEmptyStatementFixerTest tests failures are not related to my changes.
I used the branch 2.4 as it is the default one.

Which case is it? Pointing a direction would be much appreciated - especially that it sounds like you already know these cases.

Ah sorry, I did write a comment on the changed line mentioning the failing case but it looks like something went wrong when I submitted it and I didn't notice. I just wrote it again.

sadly, cannot say anything. you claim to fix sth, but there is no test showing what you are fixing :(

I think this part is not covered by any test and it might be hard to write one. I checked the branch out and tested manually.

Additionally for root dir case / it is an issue with Symfony/Finder itself:
https://github.com/symfony/finder/blob/master/Iterator/RecursiveDirectoryIterator.php#L79
Causes getPathname to return // for root references. For absolute paths can be replaced with getRealPath

$finder = new Finder();
$iterator = $finder->files()->in('/');

foreach ($iterator as $file)
{
  print $file->getPathname()."\n";

with latest Finder gives:
//client.php
//findertest/test.php
//test2/sub2.php

in my test environment.
So until that is solved in Finder a simple workaround should/can be applied in fixer.

Updated. With / there was an additional problem with getPathname
returning doubled value, yet this seems to be an issue of Symfony/Finder itself as explained above.
Updated the previous set of tests with test of root folder on Ubuntu:

Windows

C:\Users\bartosz\idct\fix22>php php-cs-fixer fix --dry-run ../soap
Loaded config default from "C:\Users\bartosz\idct\fix22\.php_cs.dist".
   1) C:\Users\bartosz\idct\soap\src\client.php
   2) C:\Users\bartosz\idct\soap\src\test\client.php

Windows, root D:

C:\Users\bartosz\idct\fix22>php php-cs-fixer fix --dry-run d:
Loaded config default from "C:\Users\bartosz\idct\fix22\.php_cs.dist".
   1) D:\broken.php
   2) D:\sub1\broken.php
   3) D:\sub1\sub2\broken.php
   4) D:\sub3\broken.php
   5) D:\sub3\sub4\broken.php

Windows, root D:, with trailing slash:

C:\Users\bartosz\idct\fix22>php php-cs-fixer fix --dry-run d:\
Loaded config default from "C:\Users\bartosz\idct\fix22\.php_cs.dist".
   1) D:\broken.php
   2) D:\sub1\broken.php
   3) D:\sub1\sub2\broken.php
   4) D:\sub3\broken.php
   5) D:\sub3\sub4\broken.php

Windows, with trailing slash:

C:\Users\bartosz\idct\fix22>php php-cs-fixer fix --dry-run ../soap/
Loaded config default from "C:\Users\bartosz\idct\fix22\.php_cs.dist".
   1) C:\Users\bartosz\idct\soap\src\client.php
   2) C:\Users\bartosz\idct\soap\src\test\client.php

Windows, absolute path:

C:\Users\bartosz\idct\fix22>php php-cs-fixer fix --dry-run C:\Users\bartosz\idct\soap
Loaded config default from "C:\Users\bartosz\idct\fix22\.php_cs.dist".
   1) C:\Users\bartosz\idct\soap\src\client.php
   2) C:\Users\bartosz\idct\soap\src\test\client.php

Windows, absolute path, with trailing slash:

C:\Users\bartosz\idct\fix22>php php-cs-fixer fix --dry-run C:\Users\bartosz\idct\soap\
Loaded config default from "C:\Users\bartosz\idct\fix22\.php_cs.dist".
   1) C:\Users\bartosz\idct\soap\src\client.php
   2) C:\Users\bartosz\idct\soap\src\test\client.php

Debian

[bpacholek@dev01 fixer_v22]$ ./php-cs-fixer fix --dry-run ../fail
Loaded config default from "/srv/home/bpacholek/fixer_v22/.php_cs.dist".
   1) /srv/home/bpacholek/fail/broken.php
   2) /srv/home/bpacholek/fail/sub/broken.php

Debian, with trailing slash

[bpacholek@dev01 fixer_v22]$ ./php-cs-fixer fix --dry-run ../fail/
Loaded config default from "/srv/home/bpacholek/fixer_v22/.php_cs.dist".
   1) /srv/home/bpacholek/fail/broken.php
   2) /srv/home/bpacholek/fail/sub/broken.php

Debian, absolute path

[bpacholek@dev01 fixer_v22]$ ./php-cs-fixer fix --dry-run /srv/home/bpacholek/fail
Loaded config default from "/srv/home/bpacholek/fixer_v22/.php_cs.dist".
   1) /srv/home/bpacholek/fail/broken.php
   2) /srv/home/bpacholek/fail/sub/broken.php

Debian, absolute path, with trailing slash

[bpacholek@dev01 fixer_v22]$ ./php-cs-fixer fix --dry-run /srv/home/bpacholek/fail/
Loaded config default from "/srv/home/bpacholek/fixer_v22/.php_cs.dist".
   1) /srv/home/bpacholek/fail/broken.php
   2) /srv/home/bpacholek/fail/sub/broken.php

Ubuntu, root path

bartosz@DESKTOP-5A99J7Q:/mnt/c/Users/bartosz/idct/fix22$ sudo php php-cs-fixer fix --dry-run /
Loaded config default from "/mnt/c/Users/bartosz/idct/fix22/.php_cs.dist".
   1) /client.php
   2) /findertest/test.php

Switched to branch 2.2
Tried all scenarios without --dry-run too.
As Dariusz ( @keradus ) mentioned above this part seems not to be covered by any unit tests.
@julienfalque this could be covered by a unit test which would overwrite $collection, return a mock with fake data from fixFile and finally comparing results of fix() ( $changed ) as the test pass or fail.
This is a very minor issue so thank you very much for immediate participation!

As Dariusz ( @keradus ) mentioned above this part seems not to be covered by any unit tests.

then add unit test that will fail on 2.2 but pass on your PR.
without it, this change will not get approved.

Your tone is not very friendly here to be honest. I reported a bug, provided a fix and you are :
doubts in you claim to fix sth, ordering tone in without it, this change will not get approved.  - the sentence should sound: "Great, thanks for participation, just please finish that up with a unit test as it seems we have missed a part of the code in the current set - sorry for that!"

Sorry, I'm just tried of replying same things all the time :(
https://github.com/FriendsOfPHP/PHP-CS-Fixer/blob/2.4/CONTRIBUTING.md#quick-guide

If you are adding functionality or fixing a bug - add a test!

Everybody has a limited set of time: have I anywhere said that I do not want to make the test or update existing ones? No... Just first wanted to confirm whenever this fix is to be accepted to avoid writing pointless code.
Plus it is very easy to notice this bug in your code: the only thing required is to run the application on any Windows or Debian (+Ubuntu), have not tested on OSX as I do not have access. So I am a bit amazed that you have not noticed it before.
Nonetheless nobody has bad intentions here - thanks @julienfalque for confirmation, I shall finish this PR with tests update. @keradus as you are a member of "FriendsOfPHP" I just kindly suggest to be more "friendly" as everybody who participate here is most likely trying to do something good for your code and really really cause no harm.

have not tested on OSX as I do not have access

we do run tests on Ubuntu, Windows and OSX. go ahead ;)

So I am a bit amazed that you have not noticed it before.

probably it was not an issue for anyone yet, as foo//bar is the same path as `foo//bar

I just kindly suggest

sure, I will try :+1:
in return, I ask to check out guidelines for projects you are contributing to, so you would avoid such a discussion in future ;)

ping @ideaconnect

I feel this is close to a bug resolved and therefor would like to this see this finished :)
@ideaconnect I know this PR wasn't received in the friendly matter you would expected it to be, I hope however you still feel like helping us (and the users) out here after the talks here.
Please let us know if you can pick this one up again!

closing, as:

after whole discussion we were still walking around of what we think rather than creating new tests
CI is failing
looks more like Sf component issue
lack of activity

if one is willing to pick it up, please create new PR.


Fix formatting of toml configs

Previously they were formatted as markdown blocks but this is reStucturedText.
This should ensure they display properly in the README both on GitHub and PyPI.

Fixed in #167


feat: stream module support

thanks a lot! let us merge it first, then fix minor issues if any.

I'm working on the "minor fix" now 😄

v1.0.1 releasd, thanks again.


In route tab, a previous route is sometimes left on the map when a new route is displayed

Pick a random start point around the greater victoria area.
Repeatedly pick a random end point.
Eventually, you will get a previous route left on the map. I have had multiple previous routes left on the map after about thirty random end points.  It appears to have something to do with random points that are near the boundary of the map view.

This is fixed in the new version now on my cmhodgson github. Not to do with the location of the random points, just clicking random faster that the route loads causes a race condition between the multiple loading routes.

Verified


Doc update

Update to docs:

minor changes to readme intro including title logo (I've added selection of other logo assets for future use)
new and fixed examples, including some simple re-ordering and re-naming of example notebooks

Generally aiming to ease entry barrier to new users. Not really sure if it's possible/worthwhile  to sensibly review most of this. (just trust me).
Also ended up making a fix to the "grid optimiser" which was completely broken (woops) and added a little extra assurance to the pam.optimise tests. Not that I really expect these to get much use as is - they were intended to inspire something better...
I also relaxed nbqa ruff to allow out of order imports in notebooks. For the basic notebooks i prefer to add the imports as they are used to keep code minimal.
Checklist
Any checks which are not relevant to the PR can be pre-checked by the PR creator.
All others should be checked by the reviewer(s).
You can add extra checklist items here if required by the PR.

[x] CHANGELOG updated
[x] Memory profiling tests pass (see here for more details)
[x] Tests added to cover contribution
[x] Documentation updated

@brynpickering all done I promise - sorry for delay - completed minced the history 🍔


[SPARK-47236][CORE] Fix deleteRecursivelyUsingJavaIO to skip non-existing file input

What changes were proposed in this pull request?
This PR aims to fix deleteRecursivelyUsingJavaIO to skip non-existing file input.
Why are the changes needed?
deleteRecursivelyUsingJavaIO is a fallback of deleteRecursivelyUsingUnixNative.
We should have identical capability. Currently, it fails.
[info]   java.nio.file.NoSuchFileException: /Users/dongjoon/APACHE/spark-merge/target/tmp/spark-e264d853-42c0-44a2-9a30-22049522b04f
[info]   at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
[info]   at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
[info]   at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
[info]   at java.base/sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
[info]   at java.base/sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:148)
[info]   at java.base/java.nio.file.Files.readAttributes(Files.java:1851)
[info]   at org.apache.spark.network.util.JavaUtils.deleteRecursivelyUsingJavaIO(JavaUtils.java:126)

Does this PR introduce any user-facing change?
No.
How was this patch tested?
This is difficult to test this private static Java method. I tested this with #45344 .
Was this patch authored or co-authored using generative AI tooling?
No.

cc @HyukjinKwon

Thank you, @HyukjinKwon !

Merged to master/3.5/3.4.


Setup Travis CI to automate testing

Switched to CircleCI as TravisCI requires you to request credits from the sales team now for open source projects.


Unable to import spaceKLIP package in a jupyter notebook

I did a git pull to update my develop version and noticed that the requirements.txt has been updated, therefore followed instructions to create a new conda envrionment. I found that git lfs was required to complete the installation of pyklip package inside the environment. Also, I installed jupyter notebook inside this environment for accessing tutorial docs.
However, after installation I am unable to import spaceKLIP.
Attaching the error message here:
(I have already updated my mast token. I am not sure why I see this message. )

Can someone please let me know how to fix this error?

Got to know from @juliengirard that we have to change the path name in our bash profile, something local like export PYSYN_CDBS=‘/Users/Downloads/data/ for import to work.
I tested that the local path works for me.

Does it work for you now? Seems like it was related to an incomplete installation of PySynphot.

@kammerje yes it seems to work for me now, though unable to do full reduction with dev version.
Getting same error as seen in issue #172 .

Just for clarify, this is a synphot/stsynphot path issue. The separate pysynphot is no longer a dependency.
See: https://stsynphot.readthedocs.io/en/latest/#installation-and-setup


User controller/setup

FEATURES

Update User controller with index, show, destroy, and create methods
Update route
Add Devise gem
Linters fix

some captures to probe API
get Users

User create

User delete

get Vehicles

create Vehicle

Delete Vehicle

Hey guys @Luiscarlosvd and @Alejuda We attach some screenshots to probe the API functionality.


[tensorflow] Reload javacpp properties

Fixes: https://github.com/deepjavalibrary/djl/issues/2318
Description
Brief description of what this PR is about

If this change is a backward incompatible change, why must this change be made?
Interesting edge cases to note here

Codecov Report
Patch coverage: 71.48% and project coverage change: +1.48 :tada:

Comparison is base (bb5073f) 72.08% compared to head (839e494) 73.57%.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
Additional details and impacted files
@@             Coverage Diff              @@
##             master    #2668      +/-   ##
============================================
+ Coverage     72.08%   73.57%   +1.48%
- Complexity     5126     6974    +1848
============================================
  Files           473      685     +212
  Lines         21970    30458    +8488
  Branches       2351     3157     +806
============================================
+ Hits          15838    22408    +6570
- Misses         4925     6520    +1595
- Partials       1207     1530     +323

Impacted Files
Coverage Δ

api/src/main/java/ai/djl/modality/cv/Image.java
69.23% <ø> (-4.11%)
:arrow_down:

...rc/main/java/ai/djl/modality/cv/MultiBoxPrior.java
76.00% <ø> (ø)

.../main/java/ai/djl/modality/cv/output/Landmark.java
100.00% <ø> (ø)

...djl/modality/cv/transform/RandomFlipLeftRight.java
25.00% <0.00%> (-25.00%)
:arrow_down:

...djl/modality/cv/transform/RandomFlipTopBottom.java
25.00% <0.00%> (-25.00%)
:arrow_down:

...i/djl/modality/cv/translator/BigGANTranslator.java
21.42% <0.00%> (-5.24%)
:arrow_down:

.../modality/cv/translator/ImageFeatureExtractor.java
0.00% <0.00%> (ø)

.../ai/djl/modality/cv/translator/YoloTranslator.java
27.77% <0.00%> (+18.95%)
:arrow_up:

...ain/java/ai/djl/modality/cv/util/NDImageUtils.java
67.10% <0.00%> (+7.89%)
:arrow_up:

api/src/main/java/ai/djl/modality/nlp/Decoder.java
63.63% <ø> (ø)

... and 227 more

... and 355 files with indirect coverage changes

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Use a temporary .forseti that gets cleaned up after unit tests for cli

Instead of overwriting the default .forseti in $HOME, create a temp directory and temp file for the Forseti configuration and clean it up after running the CLI tests.

Thanks for the review!


Kafka sink

Abin, just want to check, did you clear this with Ravi/Allen (I assume they have the final say with what becomes part of the Hadoop distro)?

No I haven't. Seems like merging this is going to be a lot of work so any
help would be great.
On Aug 17, 2015 8:59 PM, "eric-altiscale"<EMAIL_ADDRESS>wrote:

Abin, just want to check, did you clear this with Ravi/Allen (I assume
they have the final say with what becomes part of the Hadoop distro)?
—
Reply to this email directly or view it on GitHub
https://github.com/Altiscale/hadoop/pull/9#issuecomment-132065141.


load more function is not getting invoked!

Load More function is not getting invoked when scroll to down
*Expected to see "loaded!"' two three times but not, please help me

       loadMoreBooks = async () => {
         console.log('loaded!');
         const data = await db.collection('books').get();
         let books = this.state.books;
         data.forEach(book => {
           books = [...books, { id: book.id, ...book.data() }];
         });
         this.setState({ books });
      };

     // Render Method
          <InfiniteScroll
            pageStart={0}
            loadMore={this.loadMoreBooks}
            hasMore={hasMoreBooks}
            loader={
              <div className="loader" key={0}>
                Loading ...
              </div>
            }
          >
            <Tiles maxCount={4}>{bookList}</Tiles>
          </InfiniteScroll>

It's the same here

@andrelmlins let me know if you solved somehow

Same problem! Any solutions?

I'm having the same issue.

Having the same issue in "react-infinite-scroller": "^1.2.4". load more is not invoking when I scroll down to the end of the list. Didn't they fix this issue yet?

Also seeing the same issue I tried 1.2.1 and 1.2.4 with no luck

same issue. hopeless! 1.2.1 and 1.2.4

version 1.2.4 was working before but not working from last few days

We're on 1.2.2 and setting useWindow to false restores the loading behavior, if that's an option for your case.

For a temporary fix while they figure that out I went from
"react-infinite-scroller": "^1.2.2"
to
"react-infinite-scroller": "^1.2.1"
and then it started working again.

doesn't work.. "react-infinite-scroller": "^1.2.1",

Have the same issue on v1.2.4

I found the point.

if your scroll area not window,  userWindow={false}
make sure the InfiniteScroll tag directly wrap the scroll area
like that
 other children ...

Same issue here with 1.2.1 and 1.2.4

How to make it in dropDown?
when you have like:
dropDownRender={ children => (
<InfiniteScroll
pageStart={ lastPage }
loadMore={ handleInfiniteOnLoad }
hasMore={ hasMoreRefCodes }
useWindow={ false }
>
{ children }

) }

Did you ever resolve this? If so, how?

If any upper element has 'overflow: auto;' defined, it means that scroll area is not window anymore:

userWindow={false}
define getScrollParent function to return 'scroll area' dom element

<InfiniteScroll       ...       getScrollParent={()=>document.getElementById('el-which-has-overflow-defined')}       useWindow={false}>

@totemtec @hennadiy-kudashev It's named useWindow, not userWindow

Yeah it is useWindow not userWindow

If any upper element has 'overflow: auto;' defined, it means that scroll area is not window anymore:

userWindow={false}
define getScrollParent function to return 'scroll area' dom element

<InfiniteScroll ... getScrollParent={()=>document.getElementById('el-which-has-overflow-defined')} useWindow={false}>

Thank you so much! This works! I'm on version 1.2.4

None of the above worked for me I'm afraid, the load more function either wasn't called or was called twice depending on the screen size and some other styling, so I've ended up replacing this component with another one, fairly compatible:
https://www.npmjs.com/package/react-infinite-scroll-component
and that resolved the issue for me.


It's not detecting my GPU

I'm getting
RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location=torch.device('cpu') to map your storages to the CPU.
And i have no idea how to change it

Check which torch is installed

Which version

@rsxdalv 2.0.0 cu114

Remove torch
Pip uninstall torch
Install torch (See https://pytorch.org/get-started/locally/ )
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

@Aamir3d Sane traceback and problem after doing it

@Aamir3d Sane traceback and problem after doing it

Please try the options in this thread https://discuss.pytorch.org/t/pytorch-installation-rtx-3060/187895/9
Likely a torch+Cuda conflict.

Just looking at the versions I'm not immediately certain what's up. I think I put some safeguards to prevent torch from being reinstalled after the initial environment is set up, but some project somewhere can add "torch==2.0.1" and throw the whole balance out of the window. I am a little bit leaning towards it being a more unique problem, because if you have torch+cu___ then it is the GPU enabled torch.
Additionally, installing with conda is a bit more likely to give the right results. And any time you are trying to modify or install the packages for the project, you need to use the same virtual (conda) environment. This can be done by running cmd_windows to get a terminal that has the conda environment.

For more context, here's a different but potentially related problem: https://github.com/rsxdalv/tts-generation-webui/issues/121

@Aamir3d Tried those things and still nothing sadly
@rsxdalv #121 Has more or less the same problem that i had, but his solution did not work for me, fresh installs didn't work either

@Aamir3d Tried those things and still nothing sadly @rsxdalv #121 Has more or less the same problem that i had, but his solution did not work for me, fresh installs didn't work either
Edit: It's the exact same traceback, should i also post the installation log when doing a fresh install?

Installation logs are always useful!
Also, do other ai projects work for you, such as automatic 1111?

The short answer is: you have pytorch for CPU, thus it's not using nor
detecting the GPUs.
The long answer is that it might be due to an installation issue, but it
seems to be something new in your case.
In your log I can see several unexpected things. For example, it says that
the python version is different. This normally happens only when people
don't use the one click installers. Then there's another error that:

To support symlinks on Windows, you either need to activate Developer
Mode or to run Python as an administrator. In order to see activate
developer mode, see this article:
https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development

I haven't seen this error in a while. But it could indicate the main
problem - maybe for your machine, it needs either developer mode or
administrator privileges for running the project. I don't remember others
reporting this, but maybe everyone already had developer mode, I'm pretty
sure I did. (Or this is a new windows update etc etc).
So, although there could be multiple problems at play here, I would
recommend first switching to developer mode (unfortunately it might require
a reinstall). Many projects use HuggingFace to download model weights.
On Tue, Nov 28, 2023, 11:51 AM Tom-Neverwinter @.***>
wrote:

used the one click installer and it fails to detect the numerous gpu's
connected to this system.
https://pastebin.com/GcFg8C2P
—
Reply to this email directly, view it on GitHub
https://github.com/rsxdalv/tts-generation-webui/issues/192#issuecomment-1829028089,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABTRXI6XTKDGEH5U3ESVGZDYGVNTHAVCNFSM6AAAAAA54V3TTCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMRZGAZDQMBYHE
.
You are receiving this because you were mentioned.Message ID:
@.***>

As for triton, it's not necessary but baked deep inside of the models so
removing all of the warnings about it isn't doable.
From the log, it's still running the CPU pytorch.
On Tue, Nov 28, 2023, 3:22 PM Tom-Neverwinter @.***>
wrote:

2023-11-28 01:20:05 | WARNING | xformers | WARNING[XFORMERS]: xFormers can't load C++/CUDA extensions. xFormers was built for:
PyTorch 2.0.0+cu118 with CUDA 1108 (you have 2.0.0+cpu)
Python  3.10.11 (you have 3.10.13)
Please reinstall xformers (see https://github.com/facebookresearch/xformers#installing-xformers)
Memory-efficient attention, SwiGLU, sparse and more won't be available.
Set XFORMERS_MORE_DETAILS=1 for more details
2023-11-28 01:20:05 | WARNING | xformers | Triton is not available, some optimizations will not be enabled.
This is just a warning: No module named 'triton'
needs to ask user if triton or not triton. I'm not using triton
—
Reply to this email directly, view it on GitHub
https://github.com/rsxdalv/tts-generation-webui/issues/192#issuecomment-1829246821,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABTRXI5LHJOPVYCJNMOUJDDYGWGLXAVCNFSM6AAAAAA54V3TTCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMRZGI2DMOBSGE
.
You are receiving this because you were mentioned.Message ID:
@.***>

Since this issue was active a few things about installation have been changed so it's hopefully working now. Additionally, I plan on adding a torch manager inside the webui to allow fixing torch issues with GPU/MPS/CPU.
If there are any more problems please reopen this issue.


Replace Nosetest

...with py.test?  (https://docs.pytest.org/en/latest/)
This is ultra-boring tech debt stuff, right here.

:+1:

Done with #122 !


Make date pickers clearable like autocompletes

Duplicates

[X] I have searched the existing issues

Latest version

[X] I have tested the latest version

Summary 💡
The date picker should be clearable out of the box, just like the autocompletes are.
Examples 🌈
See below how the autocomplete is clearable. The same behaviour would be lovely for the date pickers.

Any example on the MUI website how to archive this?

The feature is supported via slotProps:
slotProps: {
      actionBar: {
        actions: ['clear']
      }
 }

I won't add any features which are part of the API of x-datepicker. You are welcome to add a PR if you need additional functionality

Thanks for the reply! The slotProps solution is quite different UX wise, though, since it moves the clear function to the popover rather than keeping it in the input field like the autocomplete. I appreciate the suggestion, though.

You can follow this guide, but not sure how much work would be involved https://mui.com/x/react-date-pickers/custom-field/#using-an-autocomplete


Bug: Dynamic tasks not showing in Execution View

A user on the open slack channel has noted that they cannot see their dynamic (sub) tasks. This ticket will track investigating and fixing this issue.
From user: "hi flyte team, we recently upgraded the console to the latest and now it doesn't show dynamic subtasks"
  flyteadmin_version     = "v1.1.21"
  flyteconsole_version   = "v1.1.0"
  flytecopilot_version   = "v0.0.26"
  flytepropeller_version = "v1.1.12"

Hey Jason. I am not pretty sure what is the expected behavior look like. is that supposed to like the screenshot below?  also, the screenshot
From the demo link: Success
https://demo.nuclyde.io/console/projects/flytesnacks/domains/development/executions/fca7f4c94fca745f88d8?duration=all

From the demo link: Failed
https://demo.nuclyde.io/console/projects/flytesnacks/domains/development/executions/a67j46dcw4wnqmpqdhzt?duration=all

Slack discussions: https://flyte-org.slack.com/archives/CNMKCU6FR/p1655414807481039

@Eugene - the tasks you are referring to in your comment is mapTasks [read: an array pf tasks which run the same task with different input parameters]
The Dynamic task is a task which execution depend on the input provided. In case with subworkflows , sample example would be that Dynamic task can call task A if input number > 5 and task B if input number < 5 and task C if input == 5.
The Docs: https://docs.flyte.org/projects/cookbook/en/stable/auto/core/control_flow/dynamics.html
Dynamic node samples in Demo I usually use:
https://demo.nuclyde.io/console/projects/[flytesnacks/domains/development/executions/](https://localhost.demo.nuclyde.io:3000/projects/flytesnacks/domains/development/executions/rnktdb3skr?duration=all)[mjnv9tfbd5?duration=all](https://localhost.demo.nuclyde.io:3000/projects/flytesnacks/domains/development/executions/mjnv9tfbd5?duration=all)
[Dynamic + Branch] https://demo.nuclyde.io/console/projects/flytesnacks/domains/development/executions/zalmx8wnp3?duration=all

WORKS:
https://demo.nuclyde.io/console/projects/flytesnacks/domains/development/executions/ema7b7lpvl?duration=all
NOT WORKING:
https://demo.nuclyde.io/console/projects/flytesnacks/domains/development/executions/afm54zx92vt852shm4fk?duration=all

Currently, looks like backend API issue
https://flyte-org.slack.com/archives/CNMKCU6FR/p1655414807481039
https://unionai.slack.com/archives/C01H0FN1NJX/p1655848341242169

Confirmed with BE; this is not a FE bug. Closing


Tag the release version of vegacapsule

Frontend team would need to have vegacapsule versions tagged in order to add it to github-runner docker image to improve build timings. It would be perfect if it's synchronised with each vega core release. Thanks!

Hey @radoslaw-szpiech
I have now got an explicit list item for tagging this for the next release in the release ticket:

https://github.com/vegaprotocol/vega/issues/6839

We will bake this into our process around releases


Feature request: add confirmation dialog to Synchronize Changes button

'Synchronize Changes' button is located directly under file explorer and next to 'Show Errors' button so it can be clicked accidentially. Once clicked it performs git pull & push without any confirmation.
I think having such a tiny button, silently performing such a significant action, may cause troubles.
Can you add confirmation dialog for this button or/and move it somewhere?

Very likely won't happen as it would annoy most users.
We can have it under a setting though, as it appears there are more people with that opinion. cc @chrmarti

Not favoring a confirmation dialog, just surprised my change was pushed.

There is now a git.confirmSync setting which, when true, will enable a confirmation dialog to popup before every sync.


Prove the MCS queue lock using GRASShopper

See p154 in Herlihy & Shavit.

@septract once the next two PRQs land, is there anything else I need to do for this?

I don't think so, although other things might come up as we do the proof.
On 10 March 2017 at 11:30, Matt Windsor<EMAIL_ADDRESS>wrote:

@septract https://github.com/septract once the next two PRQs land, is
there anything else I need to do for this?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/septract/starling-tool/issues/133#issuecomment-285646673,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AANd9iOh4bcV9wlK2HZEWwuVlgx54SzEks5rkTRcgaJpZM4LynR0
.

--
http://www-users.cs.york.ac.uk/~miked/


feat(isEmpty): add higher-order lettable version of isEmpty

Description:
Related issue (if exists):

Coverage increased (+0.001%) to 97.379% when pulling aad183355f366a83512058b13b93c452a8edd054 on benlesh:isEmpty-lettable into 9267b30ebc982e1845843f85866906496b3aaa8f on ReactiveX:master.


ScrollArea's scrollbar goes past frame's borders

Describe the bug
When using show_rows with a high amounts of rows, the scrollbar can go past the frame's borders. The part of the scrollbar outside of the frame's borders can't be interacted with. Problem is exacerbated with even more rows + higher row height.
When the window is taller, the problem seems to lessen but it doesn't help that much if you have a high enough row count.
Image of the overflowed scrollbar at the top of the frame:

Image of the overflowed scrollbar at the bottom of the frame:

To Reproduce
Using this code on the latest master:
use eframe::egui::{CentralPanel, ScrollArea};
use eframe::{egui, NativeOptions};
use eframe::egui::scroll_area::ScrollBarVisibility;
use eframe::egui::style::ScrollStyle;

fn main() {
    eframe::run_simple_native("", NativeOptions::default(), |ctx, frame| {
        ctx.style_mut(|x| x.spacing.scroll = ScrollStyle::solid());
        CentralPanel::default().show(ctx, |ui| {
            egui::Frame::canvas(ui.style())
                .show(ui, |ui| {
                    ScrollArea::vertical()
                        .scroll_bar_visibility(ScrollBarVisibility::AlwaysVisible)
                        .auto_shrink([false, false])
                        .show_rows(ui, 1000.0, 10000, |_, _| {});
                });
        });
    }).unwrap();
}

Expected behavior
The scrollbar should remain in the frame without causing visual incongruencies
Additional context
This was tested on the latest master

This issue can also be reproduced in the egui demo.
I created a PR to address it: https://github.com/emilk/egui/pull/5286


mobile: Remove Executor from Java & Kotlin API

This PR removes running the callbacks with the Executor in the API. Although, it makes sense to run the certain callbacks with the Executor, especially for blocking I/O so that we don't block the Envoy thread, having the API that forces the use of Executor is bad because we will always need to copy the ByteBuffer before executing the callback with the Executor or else we may run into accessing a free-ed ByteBuffer. This change is essentially making the use of the Executor for the callbacks a user choice. Both the EnvoyHTTPCallbacks and EnvoyHTTPFilter interfaces have been updated with the comments related to using ByteBuffer data. The change also makes the Java/Kotlin API consistent with the other language APIs.
The PR is also a follow-up of https://github.com/envoyproxy/envoy/pull/32715 to reduce the number of copies, especially for item 5 in the after section. With this change, there is only one copy from Envoy::Buffer::Instance to envoy_data. The ByteBuffer passed into the callbacks will be backed by envoy_data (outside the JVM memory management). The users are still free to copy the ByteBuffer as needed, but Envoy Mobile will no longer impose this.
For Cronvoy, there is no substantial change because the CronvoyUrlRequest#onData already makes a copy of the ByteBuffer passed from the callback before passing it into a separate thread. The only change is to make a copy earlier prior to spawning a thread.
Risk Level: high
Testing: CI
Docs Changes: n/a
Release Notes: n/a
Platform Specific Features: mobile

/retest

/assign @abeyad @alyssawilk


Toggling Jumpy on Socks has no ingame instruction

Toggling Jumpy on socks is done by sprinting while sneaking. It is detailed in the Things guide

Originally posted by @Noaaan in https://github.com/wisp-forest/things/issues/40#issuecomment-1166611327
I literally asked my server admin team to find out why my jumpy socks have never had jump boost. They didn't know off the top of their heads because it had just worked for them. This is frustrating.

this toggles??? That's cool but why was it disabled by default??
the guide is not available ingame and the tiny gray arrow that looks exactly like the tiny green arrow on the jumpy socks in JEI being such a subtle indication of this feature meant that I had no reason to go out of my way to find and explore yet another mods wiki
According to said website, I need to shift while sprinting for a whole second to toggle this, but it doesn't tell you that sparkles will appear and the tiny gray arrow in the tooltip turns green when you did so successfully
sometimes you get the sparkles without successfully toggling the socks even if you hold it for a long time
It doesn't seem to work just to press sprint and sneak at the same time, you actually have to be moving, so for those of us with motor control difficulties is there some way to change this keybind?
"Step assist" also being mildly annoying at times, is there a way to disable that?

the guide is not available ingame

It is, though? Unless you have one of the Things versions where Patchouli is disabled, the Things Almanac should be accessible

Now, this is indeed explained in the Things Almanac. However, it is also no longer relevant since the latest Things release changes this behavior to use a keybind instead
As such, I'll go ahead and close this
Cheers


Script error  client 64 no such export addboxzone in resource ox target

         can you not use qb target ?

Fixed in the latest update!
v1.0.6


TypeError: object.new(Markup) is not safe, use unicode.new() in specific cases

Hi,
I am currently struggling with a pretty weird bug. It only appears in specific situations.
The whole code to reproduce it can be found in https://github.com/voidus/markupsafe_sniffer_issue or attached as
markupsafe_sniffer_issue.zip
There has been an issue somewhat like that before but I can't find any encoding related problems.
https://github.com/mitsuhiko/markupsafe/issues/19
When I run a test via sniffer, I get the following error every time except the first run. (Re-run can be triggered by touching e.g the application.py file)
TypeError: object.__new__(Markup) is not safe, use unicode.__new__()
I tried to debug that using pdb, but I cannot find any differences between runs. I also tried to minimize the problem by using jinja directly (see the second test), but that doesn't trigger the bug. As removing flask removes the bug, I'm posting this here. I have actually no Idea where the real problem is.
I'll also open an issue over at markupsafe linking here, so that the compined powers may find out what's wrong :)
Full Stack trace:
======================================================================
FAIL: test_application.test_application
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/<redacted>/env/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/<redacted>/tests/test_application.py", line 8, in test_application
    assert response.status_code == 200
AssertionError:
-------------------- >> begin captured logging << --------------------
application: ERROR: Exception on / [GET]
Traceback (most recent call last):
  File "/<redacted>/env/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/<redacted>/env/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/<redacted>/env/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/<redacted>/env/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/<redacted>/env/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/<redacted>/application.py", line 7, in index
    return render_template('t.html', c="baz")
  File "/<redacted>/env/lib/python2.7/site-packages/flask/templating.py", line 128, in render_template
    context, ctx.app)
  File "/<redacted>/env/lib/python2.7/site-packages/flask/templating.py", line 110, in _render
    rv = template.render(context)
  File "/<redacted>/env/lib/python2.7/site-packages/jinja2/environment.py", line 989, in render
    return self.environment.handle_exception(exc_info, True)
  File "/<redacted>/env/lib/python2.7/site-packages/jinja2/environment.py", line 754, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/<redacted>/templates/t.html", line 1, in top-level template code
    <script src="{{c}}"></script>
  File "/<redacted>/env/src/markupsafe/markupsafe/__init__.py", line 75, in __new__
    return text_type.__new__(cls, base)
TypeError: object.__new__(Markup) is not safe, use unicode.__new__()
--------------------- >> end captured logging << ---------------------

Adding a print before return text_type.__new__ in markupsafe/__init__.py shows that text_type is unicode for the first run, but is None when rendering variable nodes on subsequent runs.  The `"is not safe" error is actually part of Python, but doesn't seem directly related, since the code isn't doing anything deliberately that is relevant to that error.
This appears to be a recurring issue with sniffer, see jeffh/sniffer#23 among others.  The common pattern is that something that shouldn't be None gets set to it on reload.  Sniffer is being clever to avoid starting a new Python process for each test run by clearing sys.modules and running nose from the same process.  This must be causing an issue somewhere within the import mechanism.  This does not seem like a good idea for testing, where you want to guarantee that each run is using the same starting point.
Using a Watchdog reloader, such as joeyespo/pytest-watch or joeyespo/nosey, which uses an efficient watcher but starts a new process for each run, does not have this issue.  Using Python 3 does not have this issue.

I'm closing this as an issue with sniffer.


Fix #765 by adding AsyncWebClient and AsyncWebhookClient

Summary
This pull request fixes #765 by adding AsyncWebClient and AsyncWebhookClient. Refer to the issue for details.
Requirements (place an x in each [ ])

[x] I've read and understood the Contributing Guidelines and have done my best effort to follow them.
[x] I've read and agree to the Code of Conduct.

Thanks for your review, Steve! It seems this PR is ready to be merged 🎉 Just in case, I will be waiting for others' feedback until early next week.


👩🌾 Don't use std::pow with integers in Vectors

🦟 Bug fix
Summary

ign-gazebo has the following Windows warning tracing back to ign-math:
[283.328s] C:\Jenkins\workspace\ign_gazebo-pr-win\ws\install\ignition-math6\include\ignition\math6\ignition/math/Vector2.hh(98,14): warning C4244: 'return': conversion from 'double' to 'T', possible loss of data [C:\Jenkins\workspace\ign_gazebo-pr-win\ws\build\ignition-gazebo5\src\gui\plugins\scene3d\GzScene3D.vcxproj]

We don't have lots of tests using integers as templates, so we didn't catch that here. It would be interesting to add tests for that.
I noticed other uses of std::pow in the codebase in classes like Inertial, MassMatrix3, Sphere, etc. Some of them don't have integer typedefs (i.e. there's no Inertiali), but some of them do (Spherei). I'm not sure we have valid use cases for integer shapes, so I didn't add tests for them or updated the std::pow usage for now.
Checklist

[x] Signed all commits for DCO
[x] Added tests
[ ] Updated documentation (as needed)
[ ] Updated migration guide (as needed)
[x] codecheck passed (See contributing)
[x] All tests passed (See test coverage)
[x] While waiting for a review on your PR, please help review another open pull request to support the maintainers

Note to maintainers: Remember to use Squash-Merge
🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸
https://github.com/osrf/buildfarmer/issues/181

the Length functions have errors on Windows now


Meta Policy: Adopt Semantic issue labels

I'd like to formally recommend that we adopt the semantic issue labels format used by the rest of the rust-lang org for labelling issues. It will probably be easier to migrate both labels and issues now while we have a limited set (vs. later when we have a few hundred), and the labels are fairly helpful in filtering things.
It would also make it easier to set up labeling from triagebot (I did that set up a bit ago for the unsafe-code-guidelines repo used by T-opsem), and allow contributors to more immediately identify information about the issue/PR. This can be useful particularily for PRs that touch the spec chapters, as making it easy for contributors to identify stylistic/maintenance changes vs. salient textual changes. With some work, it can also be useful to interface with the rest of the project, by raising potential issues in spec PRs to the relevant teams when something may be unclear (using standard labels like I-lang-nominated).

For the specific set of labels, I recommend adopting the same set that rust-lang/rust has with a few exceptions:

Whether we need the O- labels is not clear to me - these can likely be omitted unless we get target-specific spec chapters.
On my own repository for an ISA spec, I've used a trio of labels (I-unclear, I-spec-hole, and I-defect) to identify issues in the spec itself - I'd recommend adopting those labels

I-unclear indicates wording in the spec that is unclear or can be interpreted (in context) in multiple ways - stuff that probably says the correct thing, but could also say something else
I-spec-hole is for places in the spec that lack a rule (a Spec Hole). We wouldn't use this for entire missing chapters, otherwise we'd have a lot of I-spec-hole issues, but if a particular chapter is missing some rule, that would be a spec hole
I-defect is for places that the spec is known to be incorrect or faulty in some way. This can be a case where the prescribed rule is not possible to implement, or it does not actually match what the language rule is.

It may be reasonable to automate these labels - for the lccc project, I wrote a tool that creates labels in this style, though the template repo would need to be forked to the rust-lang org (the tool updates repo labels via GHA CI), and then the data for it would need to be created.

(One thing that might make sense is if we had an A-label for each "rule-id" or chapter rule-id, then using the tool to keep those A labels in sync would be useful)

Is there any progress on this? I believe Joel took this as an action item back at the beginning of april. If he doesn't have time, I'd take it, though I don't believe I have the required permissions to do so currently.

If I understood what came out of this at the last t-spec meeting, @chorman0773 was going to give us a list of labels that we could add to the project here. And then @chorman0773, me and others were going to relabel all the issues with the new labels.

This can probably be closed since it's been completed.


subscribe not working on FirebaseObjectObservable

I have a form by which an user can update their existing data.
  <input type="text" class="form-control" id="name" [(ngModel)]="memberPristine.name"
    #name="ngForm" ngControl="name">

Component class for this form
form: ControlGroup;
memberPristine: {
    name: ''
};
constructor(private fb: FormBuilder, private userService: UserService) {
}

 ngOnInit() {
   this.userService.member$.subscribe(x=>{
      this.memberPristine = x;
   });
  }

user service class
export class UserService {
  member$: FirebaseObjectObservable<any>;

  constructor(public af: AngularFire) {
    this.af.auth.subscribe(a => {
      this.member$ = this.af.database.object('/members/'+a.uid);
    });
  }

When I run this I got an error.
ORIGINAL EXCEPTION: TypeError: Cannot read property 'subscribe' of undefined.

@ohanspace I'm guessing it's because member$ is undefined until it's set inside of the subscriber in your UserService constructor.
In this example, if you aren't writing data to the /members/ collection, you could rewrite your service like so:
import { Observable } from 'rxjs/Observable';

export class UserService {
  member$: Observable<any>;

  constructor(af: AngularFire) {
    this.member$ = af.auth.map(a => af.database.object('/members/'+a.uid));
  }
}

Then your component could look something like:
class MyComponent {
  form: ControlGroup;
  memberPristine: {
    name: ''
  };
  memberSub: Subscription<any>;
  constructor(private fb: FormBuilder, private userService: UserService) {
  }

 ngOnInit() {
   this.memberSub = this.userService.member$.subscribe(x=>{
      this.memberPristine = x;
   });
  }

  ngOnDestroy() {
    this.memberSub.dispose();
  }
}

The reason this pattern doesn't always work is that the type of observable you'll get back won't be a FirebaseObjectObservable, and won't contain the setter methods (update, set, remove), since the source observable from af.auth is just a ReplaySubject from rxjs.

thanks for your reply @jeffbcross :) but still facing problem with what I wanted to do. I can't bind  [(ngModel)]="memberPristine.name"  ..
member$.subscribe returning an FirebaseObjectObservable and thus
{{(memberPristine | async)?.name}} works fine. but not working the model binding.
:( I don't know what i'm mistaking. please help

thank you so much @jeffbcross :)


feat(endpoints)!: integrate endpoints 2.0

Issue #

Description of changes

Counterpart: https://github.com/awslabs/smithy-swift/pull/433
Endpoint struct
Endpoint struct now supports attributes and headers properties.
public struct Endpoint {
    let url: String
    let attributes: [String: Any]
    let headers: [String: [String]]
}

EndpointResolver
By default, EndpointResolver is a wrapper on top of Common Runtime (CRT) component, but could be overridden by customers using service client configuration that require some variance in how an endpoint is resolved. Both EndpointResolver and EndpointParameter are service specific and codegen to AWS<service name> package.
public protocol EndpointResolver {
    func resolve(parameters: EndpointParameters) throws -> Endpoint
}

public struct EndpointParameters {
    let region: String?
    let useFIPSEndpoint: Bool
    let useDualStackEndpoint: Bool
    let endpointId: String?
}

Client & Configuration
Service client initializer accepts service specific configuration <service name>ClientConfigurationProtocol instead base AWSClientRuntime.AWSClientConfiguration. This is breaking change to existing service clients which take a generic client configuration. This change is required to allow service specific configuration parameters and endpoint resolver.
public class S3Client {
    let config: S3ClientConfigurationProtocol

    public init(config: S3ClientConfigurationProtocol) {
    }
}

public protocol S3ClientConfigurationProtocol : AWSClientRuntime.AWSClientConfiguration {
    var endpointResolver: EndpointResolver { get }
}

public class S3ClientConfiguration: S3ClientConfigurationProtocol {
    // omitted for brevity
    public var endpointResolver: EndpointResolver
    // omitted for brevity
}

Client configuration initiazlier now updated with alphatic order of the params which is also a breaking change because previously region was always the first parameter and runtimeConfig last. This creates confusing and inconsistent experience comparing with other structs we have in the SDK where params follows alphabatic order make it easier to introduce more params without breaking code.
Middleware
Middleware is going to be service specific to handle customization for endpoint parameters creation. EndpointMiddleware is codegen in the service package. Endpoint Parameters are service specific which are also codegen.
For an hypothetical PutEvents operation in an example service
Request and response
public struct PutEventsInput: Swift.Equatable {
    let endpointId: String?
}

public struct PutEventsOutputResponse: Swift.Equatable {
}

EndpointResolverMiddleware
EndpointResolverMiddleware is service specific which takes dependency on service specific  EndpointResolver & EndpointParams.
public struct EndpointResolverMiddleware<OperationStackOutput: ClientRuntime.HttpResponseBinding, OperationStackError: ClientRuntime.HttpResponseBinding>: ClientRuntime.Middleware {
    public let id: Swift.String = "EndpointResolverMiddleware"

    let endpointResolver: EndpointResolver

    let endpointParams: EndpointParams

    public init(endpointResolver: EndpointResolver, endpointParams: EndpointParams) {
        self.endpointResolver = endpointResolver
        self.endpointParams = endpointParams
    }

    public func handle<H>(context: Context,
                  input: ClientRuntime.SdkHttpRequestBuilder,
                  next: H) async throws -> ClientRuntime.OperationOutput<OperationStackOutput>
    where H: Handler,
    Self.MInput == H.Input,
    Self.MOutput == H.Output,
    Self.Context == H.Context
    {
        var endpoint: Endpoint
        do {
            endpoint = try endpointResolver.resolve(params: endpointParams)
        } catch {
            throw ClientRuntime.SdkError<OperationStackError>.client(ClientError.unknownError(("Unable to resolve endpoint.")))
        }

        guard let authScheme = endpoint.authScheme(name: "v4") else {
            throw ClientRuntime.SdkError<OperationStackError>.client(ClientError.unknownError(("Unable to resolve endpoint. Missing auth scheme.")))
        }

        let awsEndpoint = AWSEndpoint(endpoint: endpoint, signingName: authScheme["signingName"] as? String, signingRegion: authScheme["signingRegion"] as? String)

        var host = ""
        if let hostOverride = context.getHost() {
            host = hostOverride
        } else {
            host = "\(context.getHostPrefix() ?? "")\(awsEndpoint.endpoint.host)"
        }

        if let protocolType = awsEndpoint.endpoint.protocolType {
            input.withProtocol(protocolType)
        }

        var updatedContext = context
        if let signingRegion = awsEndpoint.signingRegion {
            updatedContext.attributes.set(key: HttpContext.signingRegion, value: signingRegion)
        }
        if let signingName = awsEndpoint.signingName {
            updatedContext.attributes.set(key: HttpContext.signingName, value: signingName)
        }

        input.withMethod(context.getMethod())
            .withHost(host)
            .withPort(awsEndpoint.endpoint.port)
            .withPath(context.getPath())
            .withHeader(name: "Host", value: host)

        return try await next.handle(context: updatedContext, input: input)
    }

    public typealias MInput = ClientRuntime.SdkHttpRequestBuilder
    public typealias MOutput = ClientRuntime.OperationOutput<OperationStackOutput>
    public typealias Context = ClientRuntime.HttpContext
}

EndpointMiddleware usage
Similar to other middleware construction, EndpointResolverMiddlware is injected before the buildStep with extra codegen endpointParams instance that goes to the init.
let endpointParams = EndpointParams(accelerate: config.accelerate ?? false,
    bucket: input.bucket,
    endpoint: config.endpoint,
    forcePathStyle: config.forcePathStyle,
    region: config.region,
    useArnRegion: config.useArnRegion,
    useDualStack: config.useDualStack ?? false,
    useFips: config.useFips ?? false)
operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware<AbortMultipartUploadOutputResponse, AbortMultipartUploadOutputError>(endpointResolver: config.endpointResolver, endpointParams: endpointParams))

User experience
Case 1: client init with region
This is simplest way to instantiate a service client by just providing the region as a param.
let client = try S3Client(region: "us-west-2")
let input = GetObjectInput(bucket: "jangirg-testing", key: "helloworld")
let output = try await client.getObject(input: input)

Case 2: client init with config
Customers can instantiate the config with their endpoint specific configurations such as useDualStack, useFips or any client level configuration and pass down to the service client init.
let config = try S3Client.S3ClientConfiguration(region: "us-west-2", useDualStack: true)
let client = S3Client(config: config)
let input = GetObjectInput(bucket: "jangirg-testing", key: "helloworld")
let output = try await client.getObject(input: input)

Case 3: customer endpoint resolver
This is advanced use case where customers can override the EndpointResolver with their own implementation. First thing first, EndpointResolver protocol must be confirmed by their own implementation.
struct CustomEndpointResolver : EndpointResolver {
    func resolve(params: EndpointParams) throws -> Endpoint {
        let properties: [String: AnyHashable] = [
            "authSchemes": [
                ["name": "sigv4",
                 "signingName": "s3",
                 "signingRegion": "us-west-2"]
            ],
        ]
        return try Endpoint(urlString: "http://s3.us-west-2.amazonaws.com", headers: nil, properties: properties)
    }
}

Followed by creating the client config by passing confirming struct/class
let customResolver = DefaultEndpointResolver()
let config = try S3Client.S3ClientConfiguration(endpointResolver: customResolver, region: "us-west-2")
let client = S3Client(config: config)
let input = GetObjectInput(bucket: "jangirg-testing", key: "helloworld")
let output = try await client.getObject(input: input)

New/existing dependencies impact assessment, if applicable

Conventional Commits

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@ganeshnj so this PR should enable using S3 Transfer Acceleration and fix #610, right?

A new config params will be added that will allow virtual host styling required for S3 Transfer Acceleration.


tvOS and watchOS

Hello, is it possible using this project to have a tvOS app or watchOS app run on Windows Desktop?
Thank you.

@Romascu, no we do not have bridge support for tvOS or watchOS.


write_dimensions should protect against single ";"

Recoding multiple response data should be protected by a If Not data[i] = ";" Then, e.g.:
If Not data[i] = ";" Then
    For Each response in Split(data[i], ";")
        If response <> "" Then oA = oA + cCategorical(response)
    Next
End If

Resolved by #867.


Fix http validator

What does this PR do?

Adding fix for ddev validate http logic from https://github.com/DataDog/integrations-core/pull/7676
Motivation

Additional Notes

Review checklist (to be filled by reviewers)

[ ] Feature or bugfix MUST have appropriate tests (unit, integration, e2e)
[ ] PR title must be written as a CHANGELOG entry (see why)
[ ] Files changes must correspond to the primary purpose of the PR as described in the title (small unrelated changes should have their own PR)
[ ] PR must have changelog/ and integration/ labels attached

CI is currently failing due to hazelcast and harbor failing validation for http. This is fixed in https://github.com/DataDog/integrations-core/pull/7938.

/azp run


add nulls_distinct option for unique indexes

This PR adds support for the optional [ NULLS [ NOT ] DISTINCT ] parameter when creating a unique index.

PostgreSQL reference (CTRL^F for NULLS DISTINCT): https://www.postgresql.org/docs/15/sql-createindex.html
Database support and defaults: https://modern-sql.com/caniuse/unique-nulls-distinct

This option is currently only supported in PostgreSQL 15, which is still in beta as of today. Maybe this PR should only be merged after a stable version has been released?

Looks good to me! Some feedback:

Please note in the docs it requires PostgreSQL 15.

Please make sure the other adapters raise accordingly. TDS should raise if set to false, MySQL should raise if set to true.

Thanks for the feedback! I made some changes accordingly:

A note about the PostgreSQL requirement was already in the new "The :nulls_distinct option" section, but I have now added it to the option list as well.
I made both adapters raise if nulls_distinct != nil. I just tested the parameter in MariaDB 10.9.2 and while the default behavior is to consider nulls as distinct, adding the parameter is not supported:

MariaDB [test_db]> create index test_index on test_table (test_column) nulls distinct;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'distinct' at line 1
MariaDB [test_db]> create index test_index on test_table (test_column) nulls not distinct;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'not distinct' at line 1

MSSQL has the opposite default behavior, but as far as I know adding the parameter is also not supported.

The behavior I had in mind was, depending on the value:

nil: don't add anything to the sql (this is the default)
true: add NULLS DISTINCT
false: add NULLS NOT DISTINCT

That's why I made myxql and tds raise if nulls_distinct != nil, because they don't support the sql parameter at all.
We can of course also go ahead with your suggestion and raise depending on the database default behavior, but then I think it should be:

myxql: raise if nulls_distinct == false, because the MySQL default is NULLS DISTINCT
tds: raise if nulls_distinct == true, because the SQL Server default is NULLS NOT DISTINCT

Please let me know how to proceed and I'll update the PR accordingly.
Also, should we raise if nulls_distinct != nil and unique != true as well, since the option only applies to unique indexes?

Please let me know how to proceed and I'll update the PR accordingly.

The goal of supporting both nil and at least one of the booleans in the other adapters is to increase database cross compatibility, so let's please add the proposed changes (and good catch that I inverted the defaults).

Also, should we raise if nulls_distinct != nil and unique != true as well, since the option only applies to unique indexes?

Yes, but we can raise this in Ecto.Migration, no need to push it to the adapter I think?

Makes sense! I have updated the validations in the adapters and in Ecto.Migration.

:green_heart: :blue_heart: :purple_heart: :yellow_heart: :heart:


Add disable feature for axes / Add anti ghost flickering for axes

sry for the mess, i rebuild the repo and clean the commits.
Whats included ?
A way to disable axes
A handling to avoid ghosting from the axes

Hi, It would be perfect to convert axes to button, to recreate the old Xbox controller for example where L2/R2 are simple button.


feat(asset): add utilization query

Pull Request
🤨 Rationale
Added query to Asset datasource to visualize utilization data
👩💻 Implementation
Since in API there are no endpoints at the moment that return utilization data in a historical format, functions have been written to calculate them.
🧪 Testing
Data for verification was taken from the endpoint 'niapm/v1/query-asset-utilization'.
✅ Checklist

[ ] This PR has a title that follows the commit message format.

@TigranVardanyan Can you integrate this with the PR that just went in to move the calibration forecast functionality into a separate plugin: https://github.com/ni/systemlink-grafana-plugins/pull/65


SCons: Properly set SSE2 as baseline on x86_32

Setting it only for release templates on Windows and macOS was inconsistent, and Jolt requires it as a minimum.
Drop the -mxsave flag from the raycast module, this doesn't seem to be used explicitly by Embree, and unnecessarily makes our config and baseline muddy.
I'm aware of #59595, but this one requires more discussion as requiring SSE4.2 does cut off a significant amount of CPUs, and we need to evaluate whether we're willing to make that compromise.
SSE2 on the other hand should be a no brainer, it was already the default for MSVC, and for all other platforms indirectly by way of it being set for the raycast module, which would mean that our binaries can't run on i386 machines without SSE2 already.

At the risk of bikeshedding, I think we might as well just set -mssse3 that is supported by every CPU that has at least 2 cores. The newest cpu to support it is AMD's "bobcat" architecture which is from early 2011.
Every single "atom" branded CPU has it too. On the Intel side this makes the oldest required CPU a "Core 2 duo" or a 64bit capable P4.

I would agree too. I propose we do this in two steps so we get an intermediate dev snapshot inbetween for testing purposes, if we need to debug reports of some users having Godot suddenly crash on their old PC.
This PR just affects x86_32 in a way that should practically be a no-op.
Then we can make another PR bumping to ssse3 that will affect both x86_32 and x86_64.
Or would we bump to ssse3 only for x86_64?

Then we can make another PR bumping to ssse3 that will affect both x86_32 and x86_64. Or would we bump to ssse3 only for x86_64?

I'd do both personally, there's some reason to want to run a 32bit linux distro in particular on a machine that old. And it barely excludes any cpus that we don't already exclude now.

Thanks!


Add new Taxonomy Ranks that were added in taxonomy database

Email from Arnaud about these new Ranks:
NCBI came back to us, they have updated their CV_RANK entries, so I need to propagate the new entries in the database at SIB and EBI, but also in our java code + core owl file
Will let you know when this is complete
Arnaud

Here are the list of ranks we don't have in our CV_RANK table:
biotype
clade
forma specialis
isolate
serogroup
serotype
strain
Best,
Arnaud


Interfaces that extend 'Symbol' cannot be used as 'symbol' type directly

Bug Report
🔎 Search Terms
extends Symbol
extends Symbol index key
extending Symbol
InjectionKey
cannot be used as an index type
🕗 Version & Regression Information

This is the behavior in every version I tried, and I reviewed the FAQ for entries
I was unable to test this on versions prior to 4.4(PR #44512) because symbols weren't accepted as index types

⏯ Playground Link
Playground link with relevant code
💻 Code
// Reference for InjectionKey: https://github.com/vuejs/vue-next/blob/2d4f4554349db6b07027d0c626f56c48d0233f67/packages/runtime-core/src/apiInject.ts#L6
interface InjectionKey<T> extends Symbol {}

interface SomeInterface { foo: string }
const key: InjectionKey<SomeInterface> = Symbol()

const records: Record<string | symbol, any> = {};

records['a-string'];     // Works
records[Symbol()];       // Works
records[key];            // Doesn't work
records[key as symbol];  // Works

// Assignability tests
const _key1: symbol = key;           // Doesn't work
const _key2: symbol = key as symbol; // Works

// Casting tests

key as symbol; // Works        (Expected)
key as string; // Doesn't work (Expected)
key as number; // Doesn't work (Expected)
// ...

const sym = Symbol();

sym as symbol; // Works        (Expected)
sym as string; // Doesn't work (Expected)
sym as number; // Doesn't work (Expected)
// ...

🙁 Actual behavior
Interfaces that extend Symbol(e.g. InjectionKey) can't be used as symbol directly although they can be explicitly cast.
🙂 Expected behavior
Interfaces that extend Symbol can be used as symbol, which includes being used as index types.

A wrapper object type(Symbol, Number, String...) is not assignable to the corresponsive primitive type(symbol, number, string...). And the doc says you should avoid using them in practice.
In your example, consider making the InjectionKey as a intersection type.
type InjectionKey<T> = symbol & T;

@whzx5byb thanks for the info and suggestions 👏.
type InjectionKey<T> = symbol & T;

wouldn't be the same as
interface InjectionKey<T> extends Symbol {}

T shouldn't be a possible value.
So, it would be like
type InjectionKey<T> = symbol;

then the type becomes primitive, which makes extracting the generic parameter type impossible.
I also found that the docs don't recommend using a generic type parameter with an unused type parameter, see here. So, this means the code I shared is wrong in many ways. But, I think it's the only way possible to create symbols that are paired with a specific type.
See this playground for a use case, with two approaches.
At this point, it looks like it's against the best practices, but the only way to solve a particular problem, at least the people at Vue, and also me after digging through this. So, I guess the maintainers could just close the issue because it's against their recommendation(which is fine), provide a legit alternative solution to this problem(it would be fantastic), or search for ways to create a legit way if it doesn't exist yet(i.e. they are willing to accept a feature request about this).

Yeah, this code just isn't doing what you think it's doing. The type Symbol is an object type, and object types aren't valid object keys (the same reason foo[{ }] is not allowed). The same problem is present with number / Number, etc

@yusufkandemir the InjectionKey on vue 3 is to be used only with provide/inject
The reason that extends Symbol is to make sure the user is using with a unique symbol to guarantee the dependency at runtime.
If someone is using InjectionKey<T> to direct access a property (like the example on the issue) that's is not supported by vue.
Since this interface is only to be used with provide/inject in vue I don't think there's an issue with the current implementation on vue 3, since the goal is to have a typed safe interface for inject/provide.

@pikax I appreciate the explanation. The main idea behind this was basically to have an appInject helper, which is still possible to achieve, and not directly related to this issue. But, when playing around with the idea, I came across some problems and dived into how everything works, how TS behaves, etc., and decided to open this issue because it seemed like a bug.
I guess you are mainly referring to this:

So, this means the code I shared is wrong in many ways.

which is correct in terms of "being wrong according to the TS best practices".
And, it is followed by

But, I think it's the only way possible to create symbols that are paired with a specific type.

and similar supporting sentences.
So, with the last answer I received from Ryan Cavanaugh(don't want to bother with a ping), the situation became clearer(I hope I understood it correctly 😛). The current implementation in Vue 3 is correct, because it just works and it's clean to use and understand, and there is no other way possible to achieve this, even though it looks like it's against TS best practices. But, I think it's safe to say that if this is the intended behavior of TS, and there is no other way of achieving such a thing (both of which seems to be the case), we can't really say the current implementation on Vue 3 is against the TS best practices. A best practice becomes invalid when it completely blocks us from achieving something. By the way, I love your work ❤

Since vue also need to allow defining provide/inject through the object API, is worth to investigate a bit further, based on the @whzx5byb  it works but adds the possibility of assigning T as InjectionKey<T> which is not correct.
Based on that I think is save to do something like:
declare const InjectionSymbol: unique symbol
type InjectionKey<T> = symbol & { [InjectionSymbol]: T };

//@ts-expect-error it cannot be the same type
const foo = {foo: false} as InjectionKey<{foo: false}>

The only issue, it works now but will it work in the future or will typescript support this type in the future? For example PropertyKey<T> typed?


merge from arlac77/npm-package-template-esm-only

README.md

docs(README): update from template

Codecov Report

Merging #122 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #122   +/-   ##
=======================================
  Coverage   94.59%   94.59%
=======================================
  Files           3        3
  Lines         370      370
  Branches       42       42
=======================================
  Hits          350      350
  Misses         20       20

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 00c0a82...226a1c6. Read the comment docs.