Allow installing plugins with vMAJOR or vMAJOR.MINOR or vMAJOR.MINOR.PATCH versions

What this PR does / why we need it

Allow installing plugins with vMAJOR or vMAJOR.MINOR or vMAJOR.MINOR.PATCH versions

Which issue(s) this PR fixes

Fixes #485
Describe testing done for PR

Added Unit Tests and E2E Tests

~ $ tz plugin search --show-details --name insight
name: insight
description: Post & query image, package, source, and vulnerability data
target: kubernetes
latest: v1.6.3
versions:
    - v1.3.9
    - v1.4.6
    - v1.5.1
    - v1.6.0
    - v1.6.3
    -
~ $ tz plugin install insight -v v1                                                                                (base)
[i] Installing plugin 'insight:v1.6.3' with target 'kubernetes'
[ok] successfully installed 'insight' plugin

~ $ tz plugin install insight -v v1.3                                                                                (base)
[i] Installing plugin 'insight:v1.3.9' with target 'kubernetes'
[ok] successfully installed 'insight' plugin

~ $ tz plugin install insight -v v1.6                                                                                (base)
[i] Installing plugin 'insight:v1.6.3' with target 'kubernetes'
[i] Plugin binary for 'insight:v1.6.3' found in cache
[ok] successfully installed 'insight' plugin

~ $ tz plugin install insight -v v1.6.3                                                                                (base)
[i] Installing plugin 'insight:v1.6.3' with target 'kubernetes'
[i] Plugin binary for 'insight:v1.6.3' found in cache
[ok] successfully installed 'insight' plugin

~ $ tz plugin install insight -v v1.5                                                                                (base)
[i] Installing plugin 'insight:v1.5.1' with target 'kubernetes'
[ok] successfully installed 'insight' plugin

~ $ tz plugin install insight -v v2                                                                                (base)
[x] : unable to find plugin 'insight' with version 'v2' for target 'kubernetes'

~ $ tz plugin list                                                                                (base)
Standalone Plugins
  NAME       DESCRIPTION                                                  TARGET      VERSION     STATUS
  telemetry  configure cluster-wide settings for vmware tanzu telemetry   global      v1.1.0      installed
  insight    post & query image, package, source, and vulnerability data  kubernetes  v1.5.1      installed

Release note

Allow installing plugins with `vMAJOR` or `vMAJOR.MINOR` or `vMAJOR.MINOR.PATCH` versions with `tanzu plugin install` and `tanzu plugin sync` commands

Additional information
Special notes for your reviewer

Thanks @anujc25 for this.  While I review I wanted to mention an alternative implementation.  I'm not suggesting using it, I'm just bringing it to your attention.
Currently when we look for a plugin in the DB:

the RecommendedVersion field returned is set to the highest semantic version found by the query
the query will either look for all versions (not filter on version) or will look for a specific version using WHERE Version=<vX.Y.Z>

For this feature, we could use SQL's matching functionality and have the version filter become WHERE Version like '<version>%'.  Then the query would return all versions that match the specified version, even if it is vX.Y or vX.  And the latest version matching would be in RecommendedVersion.
For example, requesting to install a version of v1.2 would return the highest version that matches v1.2, which means the latest patch of v1.2.
Pros:

should be almost transparent to the code as the sql query does this already

Cons:

we would be dependent on using the RecommendedVersion field so we would need to ignore that value if the DB ever provided one.

@anujc25 my apologies but after merging #484 this PR needs a rebase

For error messages that say unable to find plugin '%v' with version '%v' we will now show "short" versions like v1.  How about changing the error message to use the word matching to say unable to find plugin '%v' matching version '%v'`?

Good point. Updated the error message.

Is it ok for the special plugins that have actual binaries with versions v0.25/v0.28/v0.29 to now install the latest patch instead of the specific binary with that version? I hope so, because the behaviour of the PR is what I'm hoping we can keep.

Yes. That was the goal with v0.25/v0.28/v0.29 versions but we did not have this feature in past and hence we had to release it separately.

I think we need to look at how this feature can be used for context-scoped plugins.
I created a CR for the cluster plugin with a version of v0.30.
When the plugin is not installed I see version v0.30, which is probably ok
when I do a plugin sync I then see v0.30.1 which is ok, but is shows there is an update available, which is wrong, and the plugin sync will re-install the same version

I have updated the DiscoverServerPlugins function a bit to handle this scenario. However, when the plugin is not installed it will also show the latest matching version (in this case v0.30.1). I feel it should be reasonable as it is more explicitly saying which version will be installed with the tanzu plugin sync but would be nice to get your opinion on this.

@anujc25 I think this feature is impactful enough that it should be mentioned in the documentation.  I'm thinking of at least two areas:

using plugin groups with "shortened" plugin versions
context-scope plugins with "shortened" plugin versions

What do you think?

Added some basic documentation. I will be adding more as part of follow-up PR.


Data consumers can access the concatenated cellxgene corpus via "vanilla" TileDB bindings

Issue moved to chanzuckerberg/aurora-scratch #10 via ZenHub


⚠  Generalize singleton return and merge into combined

Summary
This PR changes the API for singleton reported state return, primarily in two ways. One is to generalize so that instead of always returning exactly the whole contents of .status, the user programs what gets returned. The other is to move the request bit into the StatusCollector object.
I chose to not ignore the filter. It seems strange to ignore it, it is right there and has natural semantics. Except, after thinking it through for a while, it gets rather intricate to say exactly what the semantics are.
I really struggled with writing the English words. I assume that English is preferable to first order predicate logic, but there are four things being quantified over --- so some care is required. In English "any" can mean either "every" or "some". And "some" implies an existential quantifier without saying where it appears.
I made one choice that is coarser than necessary: the counting of the relevant WECs does not take into account which parts of the object's state are selected. I made this choice for the sake of simplicity, and I think it is acceptable in the use cases that I expect.
Related issue(s)
Fixes #

The force-push to 298bef35e is a rebase onto main.

I think that we are pursuing #2463 instead.


Dynamic Subdomain Value Unfilled

Expected Behavior
The bot value should be filled with the current subdomain.
@app.route('/', subdomain='<bot>')
def index(bot):
    return bot  # Or do something else

Actual Behavior
The value is not filled, it is just an empty string.
This also happens if inside a blueprint:
bp = Blueprint('foo', __name__, subdomain='<bot>')
@bp.route('/')
def my_route(bot):
    return bot  # Or do something else

N/A

Environment

Python version: 3.6.6
Flask version: 1.0.2
Werkzeug version: 0.14.1

Yes, nginx and my DNS are configured correctly

I was not able to replicate this, for me it is working fine. Did you add this:
app = Flask(__name__, subdomain_matching=True) app.config['SERVER_NAME'] = "<your_domain.com>:<port>"  ?

Yes, however it has been a while since I last looked at this. I will check later and update if I have / have not done so.

Flask version: 1.0.2
Werkzeug version: 0.14.1

(Off Topic) When reporting an issue, you'd better try the latest version at first. Because the problem you are reporting may be solved already.

I can't reproduce this issue. With the following code, going to flask.localhost:5000 works as expected.
from flask import Blueprint
from flask import Flask

app = Flask(__name__, subdomain_matching=True)
app.config["SERVER_NAME"] = "localhost:5000"

bp = Blueprint("index", __name__, subdomain="<name>")

@bp.route("/greet", subdomain="<name>")
def hello(name):
    return f"Hello, {name}"

app.register_blueprint(bp, url_prefix="/test")


MacOS tensorflow

Hey,
This is more of a comment than an issue, but for any M1 Mac user - the pip install of tensorflow will cause this error:
zsh: illegal hardware instruction  aizynthapp --config config.yml
God bless Apple! To avoid this anyone using an M1 Mac will need to:
pip uninstall tensorflow
Then:
pip install tensorflow-macos
After this, the app will work as expected. :)
Really cool to see the pip install for this app! Keep up the great work.

Hello Mike,
Thanks for this.
We can add a note on this in the installation instructions. As far as I know, M1 is still not supported officially by Tensorflow. So getting this smoothly into the installation of AiZynthFinder could be a mess.
We are also investigating the possibility to remove the Tensorflow dependency, which would solve this issue as well.
But for now, I will make a note in the README.

https://github.com/MolecularAI/aizynthfinder/pull/103
I hope this PR fixes this issue. At least I certainly can use tf on m1 based machine

Hello @churnikov and @MKCarter !
We have new PR #112 for a new release. In this release we are moving to having tensorflow as an optional dependency. We have decided to base our tool primarily on ONNX models, as this offer faster start-up and inference. We have converted all our models to ONNX and they can be downloaded with the usual script.
We are therefore reluctant to officially support Tensorflow for Mac as this adds maintenance.
If you are willing, we would be more than happy for you to test the 3.7.0 release branch on your Mac with the ONNX models and provide us with some feedback.
We have had some issues with the latest version of Poetry, but hopefully you should be able to install the package.

Closing due to inactivity.


⚠ Samsung has degraded performance

In 1865077, Samsung (https://samsung.com) experienced degraded performance:

HTTP code: 200
Response time: 2205 ms

Resolved: Samsung performance has improved in 976ae9c.


Add License

You should choose a license for this project. The Splatoon 2 map editor this is based off of used MIT if I remember correctly.

Alright, will do that in a min

Alright


WIP: deps: bump to Electron 7.x

~Note: this is a wip since tests aren't passing.~
Tests passes for me locally now. Did some other minor fixes.
Refs: #193

Ok, enough messing around. Electron is at 7 now and works locally. Not sure why ci is unhappy so that'd be the next step..

Travis
npm ci fails and I can reproduce locally. Seems relatively easy to solve
Appveyor
A timeout (1h) for the job, likely some trial and error with tweaking electron for "ci use".

@jbergstroem This is awesome. Thanks for working to update the app. I tried out your branch and it seems to run alot better with the electron updates.
Did a quick look at the test failures too...The facebook tests look like they can just be removed as soundcloud doesnt offer FB login anymore. Not sure about the other failures though, I've never messed with electron apps before.
@salomvary Hope you accept this PR and get a new release out soon!

@joelekstrom Thanks for the work keeping things updated! I will have a look and get this merged. Can't promise a release too quick, I have some burdens to tackle regarding code signing before.

soundcloud doesnt offer FB login anymore

@bpollman doesn't look like it:

Having said that, some of the tests have been quite a pain to maintain, I'm up for removing them if they are not easy to fix. Upgrading Spectron (the test runner) might help, but my experience with this framework has not been great.

Thanks, merged! Will fix the remaining test issues on master.

Did a quick look at the test failures too...The facebook tests look like they can just be removed as soundcloud doesnt offer FB login anymore. Not sure about the other failures though, I've never messed with electron apps before.

I think there's some user-agent check going on. I see it in browser but not in app.

I see it in browser but not in app.

That was due to this dirty hack no longer working: 6dcef70a0b1faf03c61784708520e1e621a40525

...but I managed to fix the tests on master \o/

...but I managed to fix the tests on master \o/

Great!

ah i see! Awesome to see it moving along


lazy_static 0.2.1 on crates.io contains a ~2MB liblib.so file

I believe the currently published lazy_static crate on crates.io (version 0.2.1) contains a giant .so file inside which was probably included by accident. As part of putting webrender into gecko we did the equivalent of cargo vendor on webrender, which pulls down all the dependencies' source recursively. The source for lazy_static includes this .so file, even though it's not it in the lazy_static git repo.
You can also see that between version 0.1.9 and 0.2.0 the file size jumped dramatically, by comparing the size of wget https://crates.io/api/v1/crates/lazy_static/0.1.9/download and wget https://crates.io/api/v1/crates/lazy_static/0.2.0/download so I assume that's when it appeared.
Could you please publish an updated crate to crates.io which doesn't contain this monster file? Thanks!

/cc @Kimundi as the owner of the crate on crates.io

I'll investigate

The Issue should be fixed now.

Verified as fixed, thanks!


fix: hmip-etrv-2 now working with homeassistant

(see also pull request at pyhomematic (https://github.com/danielperna84/pyhomematic/pull/99))
Description:
I updated the way the current_operation mode is calculated for the homematic climate component.
This is because the Homematic IP Radiator Thermostat (hmip-etrv-2) does not allow reading the 'CONTROL_MODE' variable anymore. However in the pyhomematic thermostats class we already have the "MODE" as property available.
I also added that the LOW_BAT and OPERATING_VOLTAGE is properly shown in HASS.
This PR needs that the PR at pyhomematic is merged as well, as it updates the thermostats.py to enable the complete feature set for the HM-etrv-2.

Hello @daenny,
When attempting to inspect the commits of your pull request for CLA signature status among all authors we encountered commit(s) which were not linked to a GitHub account, thus not allowing us to determine their status(es).
The commits that are missing a linked GitHub account are the following:

d08f876f86c5ad053d8b983b85839e6c4b7a48c4 - This commit has something that looks like an email address (dclaes@liv.ac.uk). Maybe try linking that to GitHub?.

Unfortunately, we are unable to accept this pull request until this situation is corrected.
Here are your options:

If you had an email address set for the commit that simply wasn't linked to your GitHub account you can link that email now and it will retroactively apply to your commits. The simplest way to do this is to click the link to one of the above commits and look for a blue question mark in a blue circle in the top left. Hovering over that bubble will show you what email address you used. Clicking on that button will take you to your email address settings on GitHub. Just add the email address on that page and you're all set. GitHub has more information about this option in their help center.

If you didn't use an email address at all, it was an invalid email, or it's one you can't link to your GitHub, you will need to change the authorship information of the commit and your global Git settings so this doesn't happen again going forward. GitHub provides some great instructions on how to change your authorship information in their help center.

If you only made a single commit you should be able to rungit commit --amend --author="Author Name<EMAIL_ADDRESS>
(substituting Author Name and<EMAIL_ADDRESS>for your actual information) to set the authorship information.
If you made more than one commit and the commit with the missing authorship information is not the most recent one you have two options:

You can re-create all commits missing authorship information. This is going to be the easiest solution for developers that aren't extremely confident in their Git and command line skills.
You can use this script that GitHub provides to rewrite history. Please note: this should be used only if you are very confident in your abilities and understand its impacts.

Whichever method you choose, I will come by to re-check the pull request once you push the fixes to this branch.

We apologize for this inconvenience, especially since it usually bites new contributors to Home Assistant. We hope you understand the need for us to protect ourselves and the great community we all have built legally. The best thing to come out of this is that you only need to fix this once and it benefits the entire Home Assistant and GitHub community.
Thanks, I look forward to checking this PR again soon! :heart:

Hello @daenny,
When attempting to inspect the commits of your pull request for CLA signature status among all authors we encountered commit(s) which were not linked to a GitHub account, thus not allowing us to determine their status(es).
The commits that are missing a linked GitHub account are the following:

d08f876f86c5ad053d8b983b85839e6c4b7a48c4 - This commit has something that looks like an email address (dclaes@liv.ac.uk). Maybe try linking that to GitHub?.

Unfortunately, we are unable to accept this pull request until this situation is corrected.
Here are your options:

If you had an email address set for the commit that simply wasn't linked to your GitHub account you can link that email now and it will retroactively apply to your commits. The simplest way to do this is to click the link to one of the above commits and look for a blue question mark in a blue circle in the top left. Hovering over that bubble will show you what email address you used. Clicking on that button will take you to your email address settings on GitHub. Just add the email address on that page and you're all set. GitHub has more information about this option in their help center.

If you didn't use an email address at all, it was an invalid email, or it's one you can't link to your GitHub, you will need to change the authorship information of the commit and your global Git settings so this doesn't happen again going forward. GitHub provides some great instructions on how to change your authorship information in their help center.

If you only made a single commit you should be able to rungit commit --amend --author="Author Name<EMAIL_ADDRESS>
(substituting Author Name and<EMAIL_ADDRESS>for your actual information) to set the authorship information.
If you made more than one commit and the commit with the missing authorship information is not the most recent one you have two options:

You can re-create all commits missing authorship information. This is going to be the easiest solution for developers that aren't extremely confident in their Git and command line skills.
You can use this script that GitHub provides to rewrite history. Please note: this should be used only if you are very confident in your abilities and understand its impacts.

Whichever method you choose, I will come by to re-check the pull request once you push the fixes to this branch.

We apologize for this inconvenience, especially since it usually bites new contributors to Home Assistant. We hope you understand the need for us to protect ourselves and the great community we all have built legally. The best thing to come out of this is that you only need to fix this once and it benefits the entire Home Assistant and GitHub community.
Thanks, I look forward to checking this PR again soon! :heart:

updating with correct committer email


Strange behavior :Cannot connect to Telegram

{"level":"error","ts":1567843783.5669348,"logger":"main","msg":"Cannot initialize server connection","connection_id":"dab7a0a6-cb6c-4ca1-96d6-a2980ee5d0eb","error":"Cannot dial to Telegram: Cannot connect to Telegram","errorVerbose":"/home/vagrant/safe/go/src/github.com/9seconds/mtg/telegram/telegram.go:49: Cannot connect to Telegram\n/home/vagrant/safe/go/src/github.com/9seconds/mtg/proxy/proxy.go:115: Cannot dial to Telegram"}

but in fact I could get access to the telegram.org
tgproxy /tmp >cat /etc/resolv.conf
nameserver <IP_ADDRESS>
tgproxy /tmp >nslookup api.telegram.org
Server:		<IP_ADDRESS>
Address:	<IP_ADDRESS>#53

Non-authoritative answer:
Name:	api.telegram.org
Address: <IP_ADDRESS>
Name:	api.telegram.org
Address: 2001:67c:4e8:f004::9

I could curl -L api.telegram.org or ping telegram.org :
tgproxy /tmp >ping <IP_ADDRESS>
PING <IP_ADDRESS> (<IP_ADDRESS>): 56 data bytes
64 bytes from <IP_ADDRESS>: icmp_seq=0 ttl=49 time=316.224 ms
64 bytes from <IP_ADDRESS>: icmp_seq=1 ttl=49 time=319.107 ms
64 bytes from <IP_ADDRESS>: icmp_seq=2 ttl=49 time=309.892 ms
^C
--- <IP_ADDRESS> ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 309.892/315.074/319.107/3.849 ms

We access slightly different API endpoints there: https://github.com/9seconds/mtg/blob/master/telegram/middle_caller.go#L26-L28
➜ nslookup api.telegram.org
Server:         <IP_ADDRESS>
Address:        <IP_ADDRESS>#53

Non-authoritative answer:
Name:   api.telegram.org
Address: <IP_ADDRESS>
Name:   api.telegram.org
Address: 2001:67c:4e8:f004::9

➜ nslookup core.telegram.org
Server:         <IP_ADDRESS>
Address:        <IP_ADDRESS>#53

Non-authoritative answer:
Name:   core.telegram.org
Address: <IP_ADDRESS>
Name:   core.telegram.org
Address: 2001:67c:4e8:1033:3:100:0:a
Name:   core.telegram.org
Address: 2001:67c:4e8:1033:2:100:0:a
Name:   core.telegram.org
Address: 2001:67c:4e8:1033:6:100:0:a
Name:   core.telegram.org
Address: 2001:67c:4e8:1033:5:100:0:a
``` IP addresses are different. Could you please check them?

tgproxy /root >{"level":"error","ts":1568197308.8889692,"logger":"main","msg":"Cannot initialize server connection","connection_id":"e2b5e69
e-420a-4e63-9903-27921bf7e770","error":"Cannot dial to Telegram: Cannot connect to Telegram","errorVerbose":"/home/vagrant/safe/go/src/githu
b.com/9seconds/mtg/telegram/telegram.go:49: Cannot connect to Telegram\n/home/vagrant/safe/go/src/github.com/9seconds/mtg/proxy/proxy.go:115
: Cannot dial to Telegram"}
{"level":"error","ts":1568197308.8891125,"logger":"main","msg":"Cannot initialize server connection","connection_id":"16c2f03a-f33e-48bb-8ee
0-e4d979b23d85","error":"Cannot dial to Telegram: Cannot connect to Telegram","errorVerbose":"/home/vagrant/safe/go/src/github.com/9seconds/
mtg/telegram/telegram.go:49: Cannot connect to Telegram\n/home/vagrant/safe/go/src/github.com/9seconds/mtg/proxy/proxy.go:115: Cannot dial t
o Telegram"}
{"level":"error","ts":1568197308.8891747,"logger":"main","msg":"Cannot initialize server connection","connection_id":"26b6ced1-20fd-4604-aae
a-232a5406b17a","error":"Cannot dial to Telegram: Cannot connect to Telegram","errorVerbose":"/home/vagrant/safe/go/src/github.com/9seconds/
mtg/telegram/telegram.go:49: Cannot connect to Telegram\n/home/vagrant/safe/go/src/github.com/9seconds/mtg/proxy/proxy.go:115: Cannot dial t
o Telegram"}

tgproxy /root >nslookup api.telegram.org
Server:         <IP_ADDRESS>
Address:        <IP_ADDRESS>#53

Non-authoritative answer:
Name:   api.telegram.org
Address: <IP_ADDRESS>
Name:   api.telegram.org
Address: 2001:67c:4e8:f004::9

tgproxy /root >nslookup core.telegram.org
Server:         <IP_ADDRESS>
Address:        <IP_ADDRESS>#53

Non-authoritative answer:
Name:   core.telegram.org
Address: <IP_ADDRESS>
Name:   core.telegram.org
Address: 2001:67c:4e8:1033:2:100:0:a
Name:   core.telegram.org
Address: 2001:67c:4e8:1033:3:100:0:a
Name:   core.telegram.org
Address: 2001:67c:4e8:1033:5:100:0:a
Name:   core.telegram.org
Address: 2001:67c:4e8:1033:6:100:0:a

tgproxy /root >

if I use -d for debug , I found below message :

{"level":"debug","ts":1568197759.1849744,"logger":"conn","msg":"Write to stream","connection_id":"795f3e3d-06fd-45dc-8b5d-74e8dd4f0a78","loc
al_address":"<IP_ADDRESS>:25999","remote_address":"<IP_ADDRESS>:443","purpose":"telegram","faked_local_addr":"<IP_ADDRESS>:25999","bytes
":541,"error":null}
{"level":"debug","ts":1568197759.5013835,"logger":"conn","msg":"Read from stream","connection_id":"795f3e3d-06fd-45dc-8b5d-74e8dd4f0a78","lo
cal_address":"<IP_ADDRESS>:25999","remote_address":"<IP_ADDRESS>:443","purpose":"telegram","faked_local_addr":"<IP_ADDRESS>:25999","byte
s":936,"error":null}
{"level":"debug","ts":1568197759.5015771,"logger":"conn","msg":"Write to stream","connection_id":"795f3e3d-06fd-45dc-8b5d-74e8dd4f0a78","loc
al_address":"<IP_ADDRESS>:10010","remote_address":"<IP_ADDRESS>:62204","purpose":"client","faked_local_addr":"<IP_ADDRESS>:10010","bytes
":936,"error":null}
{"level":"debug","ts":1568197759.6713126,"logger":"conn","msg":"Read from stream","connection_id":"795f3e3d-06fd-45dc-8b5d-74e8dd4f0a78","lo
cal_address":"<IP_ADDRESS>:25999","remote_address":"<IP_ADDRESS>:443","purpose":"telegram","faked_local_addr":"<IP_ADDRESS>:25999","byte
s":136,"error":null}
{"level":"debug","ts":1568197759.6714814,"logger":"conn","msg":"Write to stream","connection_id":"795f3e3d-06fd-45dc-8b5d-74e8dd4f0a78","loc
al_address":"<IP_ADDRESS>:10010","remote_address":"<IP_ADDRESS>:62204","purpose":"client","faked_local_addr":"<IP_ADDRESS>:10010","bytes
":136,"error":null}
{"level":"debug","ts":1568197759.8647668,"logger":"conn","msg":"Read from stream","connection_id":"795f3e3d-06fd-45dc-8b5d-74e8dd4f0a78","lo
cal_address":"<IP_ADDRESS>:10010","remote_address":"<IP_ADDRESS>:62204","purpose":"client","faked_local_addr":"<IP_ADDRESS>:10010","byte
s":216,"error":null}
{"level":"debug","ts":1568197759.8649428,"logger":"conn","msg":"Write to stream","connection_id":"795f3e3d-06fd-45dc-8b5d-74e8dd4f0a78","loc
al_address":"<IP_ADDRESS>:25999","remote_address":"<IP_ADDRESS>:443","purpose":"telegram","faked_local_addr":"<IP_ADDRESS>:25999","bytes
":216,"error":null}
{"level":"debug","ts":1568197760.1114144,"logger":"conn","msg":"Read from stream","connection_id":"795f3e3d-06fd-45dc-8b5d-74e8dd4f0a78","lo
cal_address":"<IP_ADDRESS>:25999","remote_address":"<IP_ADDRESS>:443","purpose":"telegram","faked_local_addr":"<IP_ADDRESS>:25999","byte
s":4,"error":null}
{"level":"debug","ts":1568197760.1116085,"logger":"conn","msg":"Write to stream","connection_id":"795f3e3d-06fd-45dc-8b5d-74e8dd4f0a78","loc
al_address":"<IP_ADDRESS>:10010","remote_address":"<IP_ADDRESS>:62204","purpose":"client","faked_local_addr":"<IP_ADDRESS>:10010","bytes
":4,"error":null}
{"level":"debug","ts":1568197760.3112607,"logger":"conn","msg":"Read from stream","connection_id":"795f3e3d-06fd-45dc-8b5d-74e8dd4f0a78","lo
cal_address":"<IP_ADDRESS>:25999","remote_address":"<IP_ADDRESS>:443","purpose":"telegram","faked_local_addr":"<IP_ADDRESS>:25999","byte
s":878,"error":null}
{"level":"debug","ts":1568197760.3114238,"logger":"conn","msg":"Write to stream","connection_id":"795f3e3d-06fd-45dc-8b5d-74e8dd4f0a78","loc
al_address":"<IP_ADDRESS>:10010","remote_address":"<IP_ADDRESS>:62204","purpose":"client","faked_local_addr":"<IP_ADDRESS>:10010","bytes
":878,"error":null}
{"level":"error","ts":1568197760.8259819,"logger":"main","msg":"Cannot initialize server connection","connection_id":"451acfc1-a053-4138-a87
1-76a1ccbbd5fe","error":"**Cannot dial to Telegram: Cannot connect to Telegram","errorVerbose":"/home/vagrant/safe/go/src/github.com/9seconds/
mtg/telegram/telegram.go:49: Cannot connect to Telegram\n/home/vagrant/safe/go/src/github.com/9seconds/mtg/proxy/proxy.go:115: Cannot dial t
o Telegram**"}
{"level":"debug","ts":1568197760.8261383,"logger":"conn","msg":"Close connection","connection_id":"451acfc1-a053-4138-a871-76a1ccbbd5fe","lo
cal_address":"<IP_ADDRESS>:10010","remote_address":"<IP_ADDRESS>:62024","purpose":"client","faked_local_addr":"<IP_ADDRESS>:10010"}

Do you still have this problem? It seems unrelated to mtg. If you access telegram addresses from this machine, I expect you'll have the same issued.

Feel free to reopen if this issue still exist


Streaming reading ZipEntry of Compressed input format: DelimitedText, DelimtedJSON and Aggregates

Clone of bug:39688 and bug:25918 on 9.0 branch.

I see improvements in mlcp performance test suite. no new regression introduced so moving to ship


cmd/compile: String() on structs containing empty structs has changed

Prior to 8958d8ce37fdae15693787019869ab21e7b8347a (cmd/compile: skip convT2E for empty structs), the below test didn't call B.String(). After that commit it does, breaking a test that compared the result. I think this is actually a bug fix, but since that commit was supposed to be a pure performance improvement, some investigation is probably warranted.
package test

import (
	"fmt"
	"testing"
)

type A struct {
	Cs []*C
}

func (a *A) String() string {
	return fmt.Sprintf("%+v", *a)
}

type B struct{}

func (b *B) String() string {
	return fmt.Sprintf("B.STRING WAS CALLED %+v", *b)
}

type C struct {
	Name string
	B    *B
}

func (c *C) String() string {
	return fmt.Sprintf("%+v", *c)
}

func TestString(t *testing.T) {
	a := A{
		Cs: []*C{{
			Name: "ae1",
		}},
	}
	want := "{Cs:[{Name:ae1 B:<nil>}]}"

	if g, w := a.String(), want; g != w {
		t.Errorf("got %q want %q", g, w)
	}
}

@randall77 @josharian

In fact, the String method is called both on tip and on Go 1.8 (and before). On Go 1.8, it panics with nil pointer (*b) and the fmt package recovers it and prints "". On tip, it doesn't panic, because b is not nil (but should be). A simple repro:
package main

type B struct{}

//go:noinline
func f(i interface{}) {}

func main() {
        var b *B
        f(*b)
}

On Go 1.8, this code panics on f(*b). On tip, it doesn't.

Thanks for the bug report! Fix coming soon.


Issue 113 doc pages

Added doc support to leadspace for document pages.
Fix: #113
Test URLs:
Before: https://main--merative2--hlxsites.hlx.page/drafts/amol/pdf-viewer-new
After: https://issue-113-doc-pages--merative2--hlxsites.hlx.page/drafts/amol/pdf-viewer-new

Getting a 100 on mobile and desktop directly at https://pagespeed.web.dev/report?url=https%3A%2F%2Fissue-113-doc-pages--merative2--hlxsites.hlx.page%2Fdrafts%2Famol%2Fpdf-viewer-new&form_factor=mobile

Checked LHS directly and consistently getting 100. Not sure why the PR check doesn't. But confirmed 100 at the following link:
https://pagespeed.web.dev/report?url=https%3A%2F%2Fissue-113-doc-pages--merative2--hlxsites.hlx.page%2Fdrafts%2Famol%2Fpdf-viewer-new&form_factor=mobile

this is what was changed since last commit: https://github.com/hlxsites/merative/pull/120/commits/a1d6f26b587dfa355908d0d714eb47b463f98a05

Merging to wrong branch. closing.


Search command + autocomplete with view

Implemented search command that returns tags in the database that might be similar.
Added autocomplete to view + implemented function to efficiently grab and cache tags.
Minor formatting changes. #9

It should probably prompt the user with a list of the top 5 most used tags in the guild if they don't have anything typed.

It should probably prompt the user with a list of the top 5 most used tags in the guild if they don't have anything typed.

That could be an additional issue. That would probably require a bit more work.

I think we can merge it for now


[varLib] Merging vpal GPOS feature can't handle differing number of subtables

The vpal GPOS feature can be constructed differently in different source fonts. A glyph may require both and xAdvance and xPlacement adjustment in one font, and only a xAdvance in another fonts. Also in one font, a long sequence of glyphs may use the same value record, but the same sequence of glyphs may use the same value record format, but have different adjustment values. These differences lead to the source fonts having a different number of subtables after optimization for size. The current code can't merge the features if the source fonts differ in number of subtables, or if the subtables  differ in coverage or number of value records. I attached a small test case. The GPOS data is edited in rather arbitrarily. If you have the afdko, you can build this with 'buildcff2vf -d test_vpal.designspace'.
test_vpal.zip

The test files provided can be exercised with this command,
fonttools varLib --master-finder master_vpal_test/{stem}.otf test_vpal.designspace

This is the traceback it will produce:
Merging OpenType Layout tables
Traceback (most recent call last):
  File "fonttools", line 10, in <module>
    sys.exit(main())
  File "fontTools/__main__.py", line 29, in main
    runpy.run_module(mod, run_name='__main__')
  File "lib/python3.7/runpy.py", line 208, in run_module
    return _run_code(code, {}, init_globals, run_name, mod_spec)
  File "lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "fontTools/varLib/__main__.py", line 7, in <module>
    sys.exit(main())
  File "fontTools/varLib/__init__.py", line 1064, in main
    optimize=options.optimize
  File "fontTools/varLib/__init__.py", line 916, in build
    _merge_OTL(vf, model, master_fonts, axisTags)
  File "fontTools/varLib/__init__.py", line 688, in _merge_OTL
    merger.mergeTables(font, master_fonts, ['GSUB', 'GDEF', 'GPOS'])
  File "fontTools/varLib/merger.py", line 108, in mergeTables
    for m in master_ttfs])
  File "fontTools/varLib/merger.py", line 950, in mergeThings
    super(VariationMerger, self).mergeThings(out, lst)
  File "fontTools/varLib/merger.py", line 94, in mergeThings
    self.mergeObjects(out, lst)
  File "fontTools/varLib/merger.py", line 73, in mergeObjects
    mergerFunc(self, value, values)
  File "fontTools/varLib/merger.py", line 950, in mergeThings
    super(VariationMerger, self).mergeThings(out, lst)
  File "fontTools/varLib/merger.py", line 94, in mergeThings
    self.mergeObjects(out, lst)
  File "fontTools/varLib/merger.py", line 73, in mergeObjects
    mergerFunc(self, value, values)
  File "fontTools/varLib/merger.py", line 950, in mergeThings
    super(VariationMerger, self).mergeThings(out, lst)
  File "fontTools/varLib/merger.py", line 94, in mergeThings
    self.mergeObjects(out, lst)
  File "fontTools/varLib/merger.py", line 73, in mergeObjects
    mergerFunc(self, value, values)
  File "fontTools/varLib/merger.py", line 950, in mergeThings
    super(VariationMerger, self).mergeThings(out, lst)
  File "fontTools/varLib/merger.py", line 96, in mergeThings
    self.mergeLists(out, lst)
  File "fontTools/varLib/merger.py", line 82, in mergeLists
    self.mergeThings(value, values)
  File "fontTools/varLib/merger.py", line 950, in mergeThings
    super(VariationMerger, self).mergeThings(out, lst)
  File "fontTools/varLib/merger.py", line 92, in mergeThings
    mergerFunc(self, out, lst)
  File "fontTools/varLib/merger.py", line 755, in merge
    merger.mergeLists(self.SubTable, subtables)
  File "fontTools/varLib/merger.py", line 79, in mergeLists
    assert allEqualTo(out, lst, len), (len(out), [len(v) for v in lst])
AssertionError: ((3, [3, 2]), 'Lookup', '[0]', 'list', '.Lookup', 'LookupList', '.LookupList', 'GPOS', '.table', 'table_G_P_O_S_')

@anthrotype Looks to me as if this is pretty easy to fix.
In the merge function at  varLib.merger.py::line 730, there is already logic to canonicalize PairPos2 lookups, and clean up after the merge.
For Single Pos lookups, I would first force the lookup to be mergeable:

look through all the subtables to determine the minimum format value than can hold all of the value records used in any subtable
flatten the subtables to a single subtable, and set all record formats to this format value.

The lookup can then be merged.
I would then optimize the lookup by the usual methods:
-sort single pos records by first minimum record type, then by record value, then by GID.
-build SinglePos format 1, with a new subtable for each change of record type and value
-build Single Pos format 2, with a new subtable for each change of record type
-use whichever was smaller.
Does this sound reasonable?

Thanks. That sounds reasonable to me, although @behdad is more familiar with that part of the code and may like to comment as well.

That is the correct approach in general.  Regarding the optimization scheme I'm not sure about the details.  I have not been able to devise a satisfactory scheme for how to break down SinglePos into subtables..  You should, however, just use otlLib.builder.buildSinglePos.  We can separately discuss how to improve that function.  I think there's a bug open about otlLib.builder.buildSinglePos creating too many subtables..  I'll comment separately about possible improvements to that function.

-sort single pos records by first minimum record type, then by record value, then by GID.
-build SinglePos format 1, with a new subtable for each change of record type and value
-build Single Pos format 2, with a new subtable for each change of record type
-use whichever was smaller.

This doesn't sound like the best way to me.  The optimal is almost always a mix of the two subtable types.

I think there's a bug open about otlLib.builder.buildSinglePos creating too many subtables..

this may be relevant in this regard https://github.com/fonttools/fonttools/pull/1539

Fixed by #1641


Question: Wrapping nanobind / subproject extensions via meson-python

I am trying to integrate some nanobind modules into a meson project. As things stand today, nanobind only supports CMake as a build system, and I am not aware of another project that has converted that to Meson.
As far as I can tell, the best way to structure this is to put the nanobind code that requires CMake into a subproject. So I end up with a structure like this:
project
  /src
    meson.build
  /subprojects
    /nb_libs
      my_ext.cpp

Is there any way at all to have the extensions built from subprojects into the /src build tree? I've tried something like this in meson.build:
cmake = import('cmake')
sub_proj = cmake.subproject('nb_libs')
my_ext_dep = sub_proj.dependency('my_ext')
py.extension_module('my_ext', dependencies: [my_ext_dep])

This gets me the structure I need, but generates a warning that it will be broken in a future version of meson:
WARNING: Build target new_vector.cpython-310-x86_64-linux-gnu has no sources. This was never supposed to be allowed but did because of a bug, support will be removed in a future release of Meson

and doesn't work at runtime I think because the module export function gets mangled in the process
>>> import my_ext
ImportError: dynamic module does not define module export function (PyInit_my_ext)

Another option I've considered is doing a custom_target that moves the subproject dependency output:
custom_target('move_new_vector',
    command : ['mv', '@INPUT@', 'src/my_ext.cpython-310-x86_64-linux-gnu.so'],
    output: 'my_ext.cpython-310-x86_64-linux-gnu.so',
    install_dir : 'src',
    input: vec_my_ext_dep
)

But that does not work because my_ext_dep is an InternalDependency, not a string (maybe meson has a way to convert this). It also seems pretty fragile, so hoping for a better way

Isn't nanobind just a header-only C++ library?

Thanks for the issue @WillAyd. I had a read through the nanobind doc section you linked and its CMake file and linker scripts, and that looks nontrivial to replicate indeed. I'm also really not sure if some of the things it does with linker flags in nanobind-config.cmake are going to hold up. E.g., distro maintainers tend to not like when you override their decisions by doing things like this:
https://github.com/wjakob/nanobind/blob/5752129aee83313e720adadfbd184e9b83fdd67a/cmake/nanobind-config.cmake#L243-L246
And silently not targeting the stable ABI like this may lead to issues, because the build backend won't know:
https://github.com/wjakob/nanobind/blob/5752129aee83313e720adadfbd184e9b83fdd67a/cmake/nanobind-config.cmake#L305-L309
This is done also if nanobind is installed as a shared library from a package manager, which is the recommended method it looks like. It's nothing like pybind11, where all you need is an include directory.

Is there any way at all to have the extensions built from subprojects into the /src build tree?

This is never right AFAIK; Meson is an out-of-tree build system, so all build artifact from the main project and all subprojects go into the build directory. There should be no need for it to be in-tree though? Was the problem that the shared library wasn't found in the build dir, or something else?

Thanks @rgommers - I probably am not expressing well enough what I am trying to do. So for instance in pandas we have a lot of "custom" vector code written in cython that sits in the pandas/_libs directory. I am interested in seeing how it would work to replace that Cython generated library with a nanobind generated library without affecting the imports of Python. But with the layout of:
pandas/
  _libs/
    hashtable.pyx
subprojects/
  nb_libs/
    vector_ext.cpp

I would ideally like to replace my from pandas._libs.hashtable import Int64Vector with pandas._libs.vector_ext import Int64Vector

I would ideally like to replace my from pandas._libs.hashtable import Int64Vector with pandas._libs.vector_ext import Int64Vector, but am not sure how that would be possible

From Python code or Cython code? The former is straightforward, because it only matters what the install directory is (not the build dir, that can be anywhere). You specify that install location directly through the subdir keyword of py.extension_module. Cython can be a little more fiddly sometimes, but still it's possible; in SciPy we have lots of generated Cython code that also ends up in the build dir.
I'm happy to try your Pandas branch on the weekend if it's shareable?

I had a read through the nanobind doc section you linked and its CMake file and linker scripts, and that looks nontrivial to replicate indeed. I'm also really not sure if some of the things it does with linker flags in nanobind-config.cmake are going to hold up. E.g., distro maintainers tend to not like when you override their decisions by doing things like this:

Honestly, this is just classic cmake. You get tons of power to have a custom function inject wide-ranging changes into the whole project, but at the end of the day all people actually do with it is create a cmake function that runs add_library() with additional flags.
It's trivial to replicate in meson, assuming you want to:

create a library() for nanobind
create a declare_dependency() for people to use with dependency('nanobind'), which provides:

link_with the library
compile_args for all the things like -Os and -fno-stack-protector

and you are done. Meson already handles visibility for you. Nanobind doesn't default to LTO and neither does meson, but meson provides all the tools you need here.
The most significant factor here is that it looks like you need to compile nanobind's helper library differently depending on whether you are targeting the limited API or not. That should really be modeled by building and installing both. Then you need to know whether you are building in meson with the limited API or not, and choose which one to get with dependency(). You'd want to check the value of python.allow_limited_api before assuming anything.

It would be done in the subproject for nanobind itself, probably.

Looks like I can get a simple example built by setting up subprojects/nanobind.wrap to look like:
[wrap-git]
method = cmake
url = https://github.com/wjakob/nanobind/
revision = v1.9.2
depth = 1

[provide]
nanobind = nanobind_static_dep

And in the meson build file doing:
nanobind_dep = dependency('nanobind')
py.extension_module(
    'new_vector',
    ['new_vector.cpp'],
    dependencies: [nanobind_dep],
    subdir: 'pandas/_libs',
    install: true
)


Cross Section/ Clipping Plane

Hey there,
I'm an absolutely beginner in VR, using unity and Windows Mixed Reality.
Your VRTK is amazing and it helped me a lot! Thanks for your great job!
Now i have to create a Clipping plane like maybe in this video
https://www.youtube.com/watch?v=pvwVg9JiMKQ
what i want to do is having a plane (maybe create it by pressing a controller button, but just to grab the plane or move a slider to move the plane would be fine as well) with which i can clip objects and see "the inside".
I tried it for about a month, but i didn't get it, it's not working (tried to use the "crossSectionShader" from AssetStore, but it's not working for me :( )
Do you guys have any idea how i can handle this?
So glad to hear from you!

If you have queries on getting help then your best bet is to use the slack channel at http://invite.vrtk.io as github issues are only really used for capturing bug reports


506 Invalid MERCHANT_ID or ACCOUNT when use rxp-js and rxp-hpp-java

I follow this get started tutorial but I get 506 Invalid MERCHANT_ID or ACCOUNT when try to execute the example shown in tutorial.
If I follow the tutorial the backend give to frontend an object look like this:
{
    "ACCOUNT": "aW50ZXJuZXQ=",
    "AMOUNT": "NTAw",
    "AUTO_SETTLE_FLAG": "MQ==",
    "BILLING_CO": null,
    "BILLING_CODE": null,
    "CARD_PAYMENT_BUTTON": null,
    "CARD_STORAGE_ENABLE": "MQ==",
    "COMMENT1": null,
    "COMMENT2": null,
    "CURRENCY": "ZXVy",
    "CUST_NUM": null,
    "DCC_ENABLE": null,
    "HPP_FRAUDFILTER_MODE": null,
    "HPP_LANG": null,
    "MERCHANT_ID": "bXlzZWN1cmVtZXJjaGFudGlk",
    "OFFER_SAVE_CARD": "MQ==",
    "ORDER_ID": "MjYyNjE1",
    "PAYER_EXIST": "MA==",
    "PAYER_REF": null,
    "PMT_REF": null,
    "PROD_ID": null,
    "RETURN_TSS": null,
    "SHA1HASH": "c2hhMWhhc2hnZW5lcmF0ZWRieXRoZXJlYWxleGhwcHdpdGhteXNlY3JldA==",
    "SHIPPING_CO": null,
    "SHIPPING_CODE": null,
    "TIMESTAMP": "MjAxODA2MjgxMTA2MDQ=",
    "VALIDATE_CARD_ONLY": null,
    "VAR_REF": null
}

And when in frontend I call this:
RealexHpp.setHppUrl("https://hpp.sandbox.realexpayments.com/pay");
RealexHpp.init("payButtonId2", "https://bb3d366b.ngrok.io/payment/realex/response", dataFromBackend);

I see this page:

Now... ok, it's a problem when we follow some initial steps and get a bad experience (I don't told that this bad experience it's provided by realex, maybe this problem are in my setup, we don't know so far) but after some tests I didn't convert the HppRequest with RealexHpp("MYSECRET") in the backend, I just return the plain HppRequest, it's look like this:
{
    "ACCOUNT": "internet",
    "AMOUNT": "500",
    "AUTO_SETTLE_FLAG": "1",
    "CARD_STORAGE_ENABLE": "1",
    "CURRENCY": "eur",
    "MERCHANT_ID": "mymerchantid",
    "OFFER_SAVE_CARD": "1",
    "ORDER_ID": "262615",
    "PAYER_EXIST": "0",
    "SHA1HASH": "sha1hashgeneratedwithmysecret",
    "TIMESTAMP": "20180628110336"
}

And now when I call:
RealexHpp.setHppUrl("https://hpp.sandbox.realexpayments.com/pay");
RealexHpp.init("payButtonId2", "https://bb3d366b.ngrok.io/payment/realex/response", dataFromBackend);

It's working properly and the unique difference between these requests are:

in the first request the value of properties are base64 encoded
in the first request the null values will go together

Somebody know about this difference in these requests and what is going wrong when I use the base64 encoded json data (provided by realex classes) instead the plain text json data?
notice: I put this question here because the final error is show up when I call this library, if this error is related with other service of other library (like the rxp-hpp-java) please let me know and give me a way to continue.
Thanks.

I have the same issue with the PHP version of this, when its base64 encoded as per the PHP SDK it keeps giving me the same 506 error!
Again I followed the same tutorial.
I even checked the examples given in the rxp-js repo and these return plain, not encoded strings and work!
Therefore I can only conclude that one of two things is happening here:

The server cannot cope with encoded values as it should be doing
The docs are simply incorrect and need to be updated to reflect current setup.

@RealexITSO can you please comment on this as I need to resolve this issue before I am able to move forward.

I had the same issue but I found a fix!
The PHP SDK is outputting base64 encoded values for the javascript object, so you need to decode them before using the client side library.
This one liner should do it (where json is the object containing all of those base64 encoded strings)
 // Decode each key
Object.keys(json).forEach(key => json[key] = atob(json[key]))

And as an example for what this looks like for the whole request,
$(document).ready(function () {
            const json = <?= $requestJson ?>;

            // Decode each key
            Object.keys(json).forEach(key => json[key] = atob(json[key]))

            RealexHpp.setHppUrl('https://pay.sandbox.realexpayments.com/pay');
            RealexHpp.init('pay', window.location, json)
        })

So that should get you working before this gets sorted by @RealexITSO
CC: @philcook @marcoblos

@adamisntdead thanks for this, however this didn't work for me sadly, I am unsure why.
However I have modified the PHP side to decode it for me before giving it to the client JS.
This is the documented code from Realex
`<?php
require_once ('vendor/autoload.php');
use com\realexpayments\hpp\sdk\domain\HppRequest;
use com\realexpayments\hpp\sdk\RealexHpp;
use com\realexpayments\hpp\sdk\RealexValidationException;
use com\realexpayments\hpp\sdk\RealexException;
$hppRequest = (new HppRequest())
->addMerchantId("Merchant ID")
->addAccount("internet")
->addAmount("1001")
->addCurrency("EUR")
->addAutoSettleFlag(TRUE);
$realexHpp = new RealexHpp("Shared Secret");
try {
$requestJson = $realexHpp->requestToJson($hppRequest);
echo $requestJson;
// code here for your application to pass the JSON string to the client-side library
return $requestJson;
}
catch (RealexValidationException $e) {
return $e->getMessage();
}
catch (RealexException $e) {
return $e->getMessage();
}
?>`
This is my modified version
`<?php
require_once ('vendor/autoload.php');
use com\realexpayments\hpp\sdk\domain\HppRequest;
use com\realexpayments\hpp\sdk\RealexHpp;
use com\realexpayments\hpp\sdk\RealexValidationException;
use com\realexpayments\hpp\sdk\RealexException;
$hppRequest = (new HppRequest())
->addMerchantId("Merchant ID")
->addAccount("internet")
->addAmount("1001")
->addCurrency("EUR")
->addAutoSettleFlag(TRUE);
$realexHpp = new RealexHpp("Shared Secret");
try {
$requestJson = json_decode($realexHpp->requestToJson($hppRequest));
foreach ($requestJson as $key=>$value) {
$requestJson->$key = base64_decode($value);
}
$requestJson = json_encode($requestJson);
echo $requestJson;
// code here for your application to pass the JSON string to the client-side library
return $requestJson;
}
catch (RealexValidationException $e) {
return $e->getMessage();
}
catch (RealexException $e) {
return $e->getMessage();
}
?>`
Hopefully that helps someone if they are struggling like I was!

@rxp-developers I removed the null values but the problem persists (I made this test some days ago when I create this issue) and the unique way to solve is to pass data as a plain text.
My problem is the same that @philcook and @adamisntdead is.

@rxp-developers Any update on Base64 encoded values ?

In my case this library simply does not work, it does not work with or without base64 encoding on backend, manually created curl requests work fine with the same data.

@Opa-, can you please upgrade to the latest version of both the JS Library and whichever server-side SDK you are using. Version 1.3+ of the JS Library points at HPP Version 2, which expects non-Base64 encoded values.
The latest versions of the SDKs allow for the easy creation of non-Base64 encoded request strings:
PHP SDK
$requestJson = $realexHpp->requestToJson($hppRequest, false);
Java SDK
String requestJson = realexHpp.requestToJson(hppRequest, false);
So this can be passed to JS Library.

@rxp-developers Thanks for the quick update & release of Java SDK 1.3.3 which allow passing a boolean to requestToJson method.
Now it works fine, no need to decode it before sending it to the javscript library.

ok on their rxp-js
the place where createForm: function (doc, token, ignorePostMessage) {
added token = JSON.parse(atob(token)); to convert the base64 string to object
and change form.appendChild(internal.createFormHiddenInput(key,token[key]))
to form.appendChild(internal.createFormHiddenInput(key, atob(token[key])))
now the JS is working.  Thanks Realex developer

@rxp-developers this should be part of the official documentation, in the Readme or at least in the initial email when requesting a test account. I spent (wasted) 1 day trying to understand why the merchant_id/secret received via email weren't working.


meyda failing to install and build from git on Windows

The build script in package.json is not compatible with CMD on Windows.
mkdir on Windows does not support the -p flag as this is default behavior. (though is this needed? we're already in the directory the folder is being created in, so parents do not need creation)
The gulp executable path must be wrapped in double quotation marks for this to run.
An actual build script detecting a non-UNIX terminal would solve this.
As I am currently trying to create a PR for #138 I will also create a PR for this haha.

Good point, I've never tested this. I had a brief look for getting Travis CI to run Windows and found this issue, looks like the upshot is to use something like tea-ci. In the mean time, I'm happy to accept a PR that fixes this before finding a Windows CI solution.

In actuality, I think you can just remove mkdir -p node from the build script in your package.json and you'll be fine on Windows.
It seems to be completely redundant anyway creating an empty folder named "node" in the root the project.

#193 potentially solves this

#194 fixed this 🎉


[node-pod] 0. Generate project and establish integration point

Background
To make tasks parallelizable, we should create kits via integration branches to make PRs smaller and easier to read while not breaking the upstream build. Integration branches may be cleaner and easier to implement in isolation as kits are isolated to their own directory anyway.
Acceptance

[ ] Generate new project in the starters/ creating a name that includes <framework>-<special-tech>-<store> format
[ ] Change the name and description in the package.json
[ ] Merge change into an integration branch

Created integration branch node/starter-express


CLOUDSTACK-8819: Added QCOW2 virtual size checking for S3.

Cleaned up S3TemplateDownloader
Created static QCOW2 utils class.
Reformatted some parts of DownloadManagerImpl

Tested manually. Virtual size is correctly returned now.

LGTM

LGTM

@borisroman looks good, can you increase code coverage by adding tests for the utils and core changes?

@bhaisaab Will do! Please wait with merging, will commit them to this PR.

Thanks @borisroman

@karuturi Fixed the findbug issue. Was due to reformatting of one method.


Dynamic GPU mempool support

Original issue: https://charm.cs.illinois.edu/redmine/issues/2068

Currently we decide whether or not to use mempool with a #define flag, which needs to be set in the HAPI Makefile.
We should change it to such that it can be controlled during runtime, e.g. hapiMalloc(..., True) to use mempool.
At the first hapiMalloc call with mempool, we can then allocate the mempool (instead of GPU Manager initialization time).

Gerrit patch: https://charm.cs.illinois.edu/gerrit/#/c/charm/+/5088/

Results from vector addition with 16, 256, 4K, 64K, 1M, 16M floats, with hapiHostMalloc/hapiHostFree every iteration:
100 iterations: mempool 12 s vs. no-mempool 54 s
10 iterations: mempool 7.2 s vs. no-mempool 5.2 s
Looks like mempool is advantageous after a certain threshold number of allocations/frees

Currently the mempool is used only for pinned host memory allocations, might be useful to do the same for device memory as well.


Darknet: YOLOv4-tiny (detector)

@lutzroeder Hi,
Feature-request: YOLOv4-tiny (detector)

source code: https://github.com/AlexeyAB/darknet
cfg: https://raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov4-tiny.cfg
weights: https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-tiny.weights
discussion: https://github.com/AlexeyAB/darknet/issues/6067

There is required only 1 feature:

Add groups= and group_id= to the [route] layer.

[route]
layers=-1
groups=2
group_id=1

So if input is WxHxC, it divides input into 2 groups WxHx(C/2) (there are 2 groups: 0 and 1), and loads the 2nd group_1 WxHx(C/2).
If there are many layers specified in layers= parameter, then this will be done for each of the input layers specified in layer=, then results will be concatenated across channels.

@lutzroeder Thanks!
Will https://lutzroeder.github.io updated in a several days?
https://lutzroeder.github.io/netron/?url=https://raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov4-tiny.cfg


Are you going to continue to support this lib?

Are you going to continue to support this lib or are you going to fully switch to candence for your system?

Reeka

We're not switching to Cadence. We only have one service left that's using Ruby with Temporal though so this repo admittedly hasn't gotten as much love as it should. I started trying to catch up on PRs yesterday and will see if I can give it some more attention in the coming weeks.

@DeRauk Got it, thank you!


Expose String.EndsWith(char) and add String.StartsWith(char)

CoreRT port of https://github.com/dotnet/coreclr/pull/9228
Fix https://github.com/dotnet/corefx/issues/4805

@fujiy,
Thanks for having already signed the Contribution License Agreement. Your agreement was validated by .NET Foundation. We will now review your pull request.
Thanks,
.NET Foundation Pull Request Bot

Thanks!


"Zero Account Balance" - Whois History

Describe the bug
Recurrance of #2
All queries return "Zero Account Balance"
To Reproduce
Steps to reproduce the behavior:

Access osint.sh/whoishistory
Use any domain name (e.g. google.com)
Error appears instead of data

Screenshots

Solved.


Failed to resolve

Failed to resolve: com.shobhitpuri.custombuttons:google-signin:1.1.0

Thanks for bringing that to notice. It might be since Bintray has been discontinued. We'll need to host it somewhere else.

Any plan of hosting this?

@online-offl I want to but just not finding time. Feel free to fork it, and use it as a library project for the time being? Let me take a look at what's involved in hosting it. If you have any pointers, feel free to share, so that it's faster.

@online-offl Please see the new instructions in the README to add the library to your project. Let me know if there are any issues.


set autoCompile to false by default

fixes #874

thanks for the PR!
but then tests are failing cause nothing compile by default :)

in order to fix test
could you change test-browser/helpers/init.js to
module.exports = function (browser, callback) {
  browser
    .url('http://<IP_ADDRESS>:8080/#version=builtin')
    .injectScript('test-browser/helpers/applytestmode.js', function () {
      browser.click('#autoCompile')
      .perform(function () {
        callback()
      })
    })
}

Most test passed now, but some got timeout before the <div> is found:
   Timed out while waiting for element <#editor-container div[class^="terminal"] span[id="tx0x917a873d27d105213eaf5461e14780387ccceb66fed574f8432d1963917832ae"]> to be present for 10000 milliseconds.  - expected "found" but got: "not found"

Any idea why or should we try to increase the second?

Please try to rebase to master if it's not already done, that might solve the issue.

Is already on the latest master

@yann300 anything stopping merging this?


#swapSymbol does not work with Sketch Libraries

Which version of the plugin are you using?
[x] Data Populator for Sketch
Describe the bug
The #swapSymbol conditional action does not work with Sketch Libraries. It seems this is because the symbol it needs to swap to is not present in the sketch file, but only in the linked Library file. It cannot find the symbol to swap to.
To Reproduce
Steps to reproduce the behaviour:

Setup attached TestLibrary.sketch as a library in sketch
SymbolSwapTest.zip
Open TestFile.sketch (a regular sketch file)
Use attached JSON file to populate the symbol "List-item" in TestFile.sketch
Result should be: Text is populated correctly, but symbol is not.

Expected behavior
I would expect Data Populator to find the symbol from the Sketch library that is linked to the regular sketch file.
Environment

macOS Version: macOS Mojave 10.14
Sketch Version: Sketch 52.3
Plugin Version: 3.0.1

Additional context
I tried to place the name of the sketch library in front of the path: #swapSymbol[true, TestLibrary/Icons/{icon}] but that didn't work. This is also not how I would like it to work, because I work with the version control app Abstract. Abstract places a suffix after filenames (with the branch name), so my library files never have a static filename (as it is constantly updated).

@JaccoSchumacher should work with v3.0.2 – please check it out and let us know!
https://www.datapopulator.com/sketch/

It works! Thanks for resolving this so quickly! Amazing support

It works! Thanks for resolving this so quickly! Amazing support

@JaccoSchumacher I also use Abstract and am trying to swap symbols from a linked library. I have my JSON file setup as:
[
{
"Header": "Good Morning Breakfast",
"Main": "Beef (Master @ 5ce0d62)/Relative/Hamburger"
},
{
"Header": "Time for Lunch",
"Main": "Beef (Master @ 5ce0d62)/Relative/Cheeseburger"
},
{
"Header": "Yes, it's Dinner Time",
"Main": "Chicken Fish (Master @ 5ce0d62)/Relative/Fish"
}
]
In my sketch file I have the symbol layer as: #swapSymbol[true, {Main}] however it is not working, only the text is displaying as variable.
Can you assist.
Thanks.


'.' Doesn't Repeat Custom Text Objects Before Version 7.4

Hello! First off, great plugin. I don't often need to use it but when I do it's really nice to have. Get's me another step closer to having my editor do exactly what I'm thinking. So thanks!
The Issue
I think the title says it all. On vim before version 7.4, running the exchange mapping on a custom text object doesn't repeat correctly. The problem is that prior to version 7.4, using an operator with a custom text object was not automatically repeatable. To make a text-object repeatable, you needed to do some extra work utilizing repeat.vim. See https://github.com/wellle/targets.vim/blob/master/autoload/targets.vim#L498-L507 for an example. Since your code calls repeat#invalidate() it prevents this from working. I know the repeat#invalidate() code was put in for a reason in PR #32 but I think we can add support for versions prior to 7.4 and keep the existing functionality. I have two possible solutions to propose. If you or @wellle or @wilywampa could take a look (since you were all involved in that PR) that would be much appreciated.
Solution 1
https://github.com/tommcdo/vim-exchange/compare/tommcdo:master...lag13:improve-repeat-compatibility1?expand=1
Solution 2
https://github.com/tommcdo/vim-exchange/compare/tommcdo:master...lag13:improve-repeat-compatibility2?expand=1
How/Why This works
To make custom text objects repeatable, vim-repeat registers a one-time CursorMoved handler which sets g:repeat_tick equal to b:changedtick. Apparently this works because the CursorMoved event will only trigger after the operator + operator-pending mappings have completed. The reason your operator won't repeat correctly with a custom text object is because calling repeat#invalidate() will clear the CursorMoved autocommand before it gets a chance to do it's thing. So my solutions work because they make b:changedtick and g:repeat_tick differ (which wipes out a previously used repeat#set() call) but they leave the CursorMoved autocommand (which will make the text object repeatble). Kudos to guns for finding out how to make custom text objects repeatable in the first place https://github.com/tpope/vim-repeat/issues/8.

Of the proposed solutions I prefer the first because it touches less stuff, but I'm wondering if the version check should go in vim-repeat instead of vim-exchange.

@wilywampa I like the first one better too. I made the second because I didn't know if it was considered bad practice or not to reference a variable used internally by a plugin. But then again, it's a global variable so I guess it should be fair game. And actually I think the second solution could fail in one case so maybe we should just disregard it.
Where specifically would the version check go in repeat.vim? Would it go in the repeat#invalidate() function?

Yes. Add

So after that change repeat#invalidate() would now look like this correct?
function! repeat#invalidate()
    if v:version >= 704
        autocmd! repeat_custom_motion
    endif
    let g:repeat_tick = -1
endfunction

Yes that would also work, but for some reason that makes me wary. Because it seems that the purpose of repeat#invalidate() (just from reading the comments) is to completely wipe the previously set repeat, but making this change wouldn't make that the case anymore. What do you think?

After playing with all three plugins and other custom motions for awhile, my opinion is that it should go into targets.vim. If the change went into vim-repeat, it would break repeating operations that don't increase b:changedtick. If it went into vim-exchange, it would fix repeating of targets.vim motions, but not repetition of other custom motions because targets.vim is already doing specific things to support 7.3 which most (all?) other custom motions do not do. Since this change would only benefit targets.vim, that's where I think it belongs. That would look like this:
" set up repeat.vim for older Vim versions
function! s:prepareRepeat(delimiter, which, modifier)
    if v:version >= 704 " skip recent versions
        return
    endif

    if v:operator ==# 'y' && match(&cpoptions, 'y') ==# -1 " skip yank unless set up
        return
    endif

    let cmd = v:operator . a:modifier
    if a:which !=# 'c'
        let cmd .= a:which
    endif
    let cmd .= a:delimiter
    if v:operator ==# 'c'
        let cmd .= "\<C-r>.\<ESC>"
    endif

    silent! call repeat#set(cmd, v:count)

    " Set up our own autocmd so a targets.vim motion can repeat after
    " repeat#invalidate() is called
    augroup repeat_targets_motion
        autocmd!
        autocmd CursorMoved <buffer> let g:repeat_tick = b:changedtick | autocmd! repeat_targets_motion
    augroup END
endfunction

My opinion would still be to put this change in exchange.vim (so my solution 1). I think equivalent code to targets.vim's s:prepareRepeat() function is all that should be needed to make a text object repeatable. The reason the CursorMoved autocommand was incorporated into repeat.vim in the first place was so custom text objects would not have to do it themselves and so re-writing that code feels wrong to me.

If it went into vim-exchange, it would fix repeating of targets.vim motions, but not repetition of other custom motions because targets.vim is already doing specific things to support 7.3 which most (all?) other custom motions do not do.

I'm not exactly sure what you mean here. Exchange.vim shouldn't really be concerned with fixing other custom motions. It is the custom motion's responsibility to make itself repeatable on older versions. But exchange is a unique operator and should realize that by calling repeat#invalidate() it wipes out any possibility that custom text objects are repeatable.
In short I feel like there is a "standard" way to make a text object repeatable using repeat.vim and altering that "standard" just to make exchange.vim work feels wrong. If we instead updated exchange.vim then every custom text object which adhered to that "standard" would just work.

And I just realized that maybe my first solution was a bit overzealous. I think we could get the same desired result by just replacing the line silent call repeat#invalidate() with let g:repeat_tick = -1. So no need for a version check or anything like that.

Anything but that, please. That defeats the purpose of the autocmd! repeat_custom_motion in vim-repeat's invalidate() and breaks functionality. If you use <Plug>whatever which calls repeat#set(), then do the first half of vim-exchange, then move the cursor and press ., <Plug>whatever is repeated instead of doing the second half of vim-exchange (unless you happened to use a custom text object which called repeat#set() which targets does if and only if you have Vim <7.4 but is otherwise uncommon).

Let me clarify something: repeat.vim is not the standard way to make operators repeatable; that happens naturally in Vim. Only non-standard custom operators require hooking into repeat.vim. The unique behavior of exchange.vim (namely, using the operator twice for a single operation) is not an example of such non-standard behavior. In fact, exchange.vim doesn't even need repeat.vim in order to be repeatable. The very existence of repeat.vim is the only reason exchange.vim needs to integrate with it. If repeat.vim never existed, exchange.vim would repeat perfectly -- even with (standard) custom text objects.
It kind of sounds like I'm ranting about how much I hate repeat.vim, but that's not the case at all. It's vital for non-standard operators. An example of a plugin that requires repeat.vim is surround.vim. The operators from that plugin take additional information after the motion: the character or text to surround the motion with. They use repeat.vim to replay that additional information when the . command is used. Otherwise, you'd be prompted to type the surround character again. Another plugin that needs repeat.vim is my own lion.vim.
Anyway, I'm currently unsure about adding this workaround to exchange.vim. You originally said that exchange.vim doesn't work with custom text objects prior to 7.4, but now that I know you're talking about targets.vim, I'm reluctant to believe that claim. Similar to how only non-standard custom operators (surround.vim, lion.vim) need repeat.vim, only non-standard custom text objects need it as well. Standard text objects basically just select a range of text, but targets.vim does a lot more and needs to register additional information to be repeated.
So I ask you: In Vim 7.3, can exchange.vim repeat standard custom text objects? Try it out with vim-dentures, which defines a text object for lines with a common indentation level. At present, I'm too lazy to find a box with Vim 7.3 on it to test this myself.

I'm curious about whether Solution 1 breaks the example @wilywampa mentioned under Vim 7.3.
Maybe what we really need is for repeat.vim to use separate handling for operator repeating vs text object repeating.

@tpope, thoughts? TL;DR exchange.vim works by invoking the operator twice. It doesn't need repeat.vim support, but calls repeat#invalidate() on the first invocation to avoid . repeating whatever custom operator previously called repeat#set(). However, if it was a text object (such as targets.vim) that called repeat#set(), all is lost. This apparently only affects Vim 7.3.

Anything but that, please. That defeats the purpose of the autocmd! repeat_custom_motion in vim-repeat's invalidate() and breaks functionality. If you use whatever which calls repeat#set(), then do the first half of vim-exchange, then move the cursor and press ., whatever is repeated instead of doing the second half of vim-exchange

I don't think that is necessarily true. Maybe I haven't given it enough thought but I don't think that we have to worry too much about the CursorMoved autocommand hanging around after a mapping finishes. In my short bursts of testing it seems that the CursorMoved autocommand always gets triggered when the mapping completes. For example, I added some echo's to the repeat#set() function like this:
function! repeat#set(sequence,...)
    let g:repeat_sequence = a:sequence
    let g:repeat_count = a:0 ? a:1 : v:count
    let g:repeat_tick = b:changedtick
    augroup repeat_custom_motion
        autocmd!
        autocmd CursorMoved <buffer> let g:repeat_tick = b:changedtick | echom "CursorMoved was triggered" | autocmd! repeat_custom_motion
    augroup END
    echom "Repeat was set"
endfunction

And then I created a file with these contents:
function! Test()
    copy .
    call repeat#set('t')
endfunction
nnoremap t :call Test()<CR>

Running that 't' mapping results in this output:
Repeat was set
CursorMoved was triggered

So by the time the mapping finishes, the CursorMoved autocommand was already triggered and destroyed. So the only thing to worry about is getting rid of g:repeat_tick.

Anyway, I'm currently unsure about adding this workaround to exchange.vim. You originally said that exchange.vim doesn't work with custom text objects prior to 7.4, but now that I know you're talking about targets.vim, I'm reluctant to believe that claim. Similar to how only non-standard custom operators (surround.vim, lion.vim) need repeat.vim, only non-standard custom text objects need it as well. Standard text objects basically just select a range of text, but targets.vim does a lot more and needs to register additional information to be repeated.

I'm not necessarily just talking about targets.vim. I just used that as an example of a plugin that defines some text objects. Prior to 7.4 any text object you created using vimscript would not be automatically repeatable. Instead, running the dot command after executing an operator+your-text-object would run that operator on the same length of text that was previously operated on. For instance, if you had a "number" text object (which I do) 'id' and this code:
123
12345

If you ran did on the number 123 it would delete 123. But then if you moved your cursor to the 1 in 12345 and ran '.' it would delete only 3 characters because that was the number of characters operated on previously. This would result in 45 when you would want the whole number to be deleted. I just tested this and that is what happened.
Couldn't run vim-dentures on 7.3 :) failed for some reason. But I do use another indent text object plugin https://github.com/michaeljsmith/vim-indent-object and got similar results as my number test above. Namely running dii on the first indented 12345 line deleted that line (as expected). But running '.' on the next pair of indented 12345's only deleted one line.
12345
    12345
12345
    12345
    12345
12345

I don't think that is necessarily true. Maybe I haven't given it enough thought but I don't think that we have to worry too much about the CursorMoved autocommand hanging around after a mapping finishes.

It's definitely true. I just double-checked in Vim 7.3 with no patches and 7.4.777. Simple example:
" Repeatedly ascend directory structure by pressing '.'
nnoremap <silent> <Leader>.. :<C-u>cd ..<bar>echo getcwd()<bar>silent! call repeat#set("\<Leader>..")<CR>

Now go to any file (but not on the last line) and type <Leader>..cxxj.. With no changes to any of the plugins, it exchanges the two lines as expected. If g:repeat_tick is set to -1 without canceling the autocmd, it will cd up a directory instead of exchanging the lines.

Ahh shoot. Really sorry about all that back and forth then. Curse you counter example!!! (shakes fist angrily). I suppose my original question still stands though. I do realize that my request is probably not high on anyone's todo list seeing as how 7.4 came out about 2 years ago, but I've run into this issue a handful of times and thought it might be nice to get resolved. Part of me still wants to say the fix should go in this plugin (because of that "standard" speech I gave), but it's starting not seem all that possible. Regardless if this issue gets closed or not, thanks for taking the time to respond to me.
By the way, I know of only one plugin (not that I've been actively looking) which calls on repeat.vim to make it's text object executable:  https://github.com/justinmk/vim-sneak/blob/master/plugin/sneak.vim#L215-L218

The more I think about it, the more I agree that if a fix is to be implemented, it should probably be here. From what I know, no other operator works the way the exchange does (invoking twice), so hoping for a fix in repeat.vim is probably asking too much.
That said, I'm not totally sold on the proposed solution, and even less sold on whether this fairly small edge case on Vim 7.3 is worth the fuss I'm expecting an acceptable solution to be.
Slightly tangential curiosity... Do repeat-integrated operators play nicely with repeat-integrated text objects? Combining surround.vim and targets.vim, for example: is ysin)] repeatable? I'm guessing at the targets.vim mappings; my memory is that in) means "inside the next set of parentheses". Thus this command should put square brackets inside the next set of round parentheses.

That said, I'm not totally sold on the proposed solution, and even less sold on whether this fairly small edge case on Vim 7.3 is worth the fuss I'm expecting an acceptable solution to be.

I agree. This is has been a lot trickier than I originally envisioned. Disregard any of my proposed ideas because they do not work in all cases.

Slightly tangential curiosity... Do repeat-integrated operators play nicely with repeat-integrated text objects? Combining surround.vim and targets.vim, for example: is ysin)] repeatable? I'm guessing at the targets.vim mappings; my memory is that in) means "inside the next set of parentheses". Thus this command should put square brackets inside the next set of round parentheses.

Haha nice catch. I've never had cause to do it and so I never thought about it. No is the answer, it does not repeat. The first repeat#set() gets called in the text-object and then when it's finished repeat#set() gets called in the operator which wipes out the previous repeat#set() invocation just like calling repeat#invalidate() does. Perhaps that example is a good motivation to come up with separate repeat handling for text objects and everything else as you suggested.

For the record, it does work in Vim 7.4.640:
a (b) c (d) e

ysin)].
a ([b]) c ([d]) e

Sorry, should have clarified that doing ysin)] doesn't repeat prior to 7.4. After 7.4 it's all good.

At this point it kind of feels like Vim 7.3 is a lost cause. If even basic text objects (ones that don't require additional input) don't repeat properly, I see no good reason to try to support more complex ones.
Since exchange.vim's call to repeat#invalidate() is not causing any trouble in Vim 7.4, then I think we should just leave it as is.

I agree. And the more I think about it, the more I think you might have been right when you said:

Maybe what we really need is for repeat.vim to use separate handling for operator repeating vs text object repeating.

Because the problem seems to be that exchange.vim has no way of knowing whether a previous invocation of repeat#set() came from a text-object or from some other random mapping. If it could make this distinction then it could take appropriate action. Perhaps such a change to repeat.vim could also end up making commands like ysin)] repeatable on older versions of vim. But who knows.
Anyway, thanks again to all who took the time to respond. Feel free to close this issue.

Even though I didn't really participate, this was quite interesting to follow. Thanks for the healthy discussion :+1:


Separate male and female PoNs

This would allow us to do copy number analysis on X and Y chromosomes.  Currently, this is only supported by having the user create two separate PoNs for male and female and then determining which PoN to use for each case sample.
Details of implementation must also be fleshed out, since this is a conceptually simple issue, but needs to be as easy as possible for the user.

@mbabadi's masking matrix enhancement to the new coverage model will handle this very cleanly.  Close this issue once it is adopted.

Essentially a duplicate of #526.


Available maintenance windows for SQL DB

[Enter feedback here]
For the commands: az maintenance configuration create and az maintenance configuration update the maintenance-scope includes SQL DB:
[--maintenance-scope {All, Extension, Host, InGuestPatch, InResource, OSImage, Resource, SQLDB, SQLManagedInstance}]
For SQL Database currently, you can't define custom windows. You can only choose from available windows: https://learn.microsoft.com/en-us/azure/azure-sql/database/maintenance-window?view=azuresql#gain-more-predictability-with-maintenance-window
The feedback is add a note about this in the documentation to avoid potential confusion when setting the maintenance window since defining a SQL DB custom defined maintenance window is currently not available.
Thanks.

Document Details
⚠ Do not edit this section. It is required for learn.microsoft.com ➟ GitHub issue linking.

ID: b4b2e335-9821-87db-3685-24ec7e390a11
Version Independent ID: 6bdc0138-d25f-5ba4-53ea-5b3596178c3d
Content: az maintenance configuration
Content Source: latest/docs-ref-autogen/maintenance/configuration.yml
GitHub Login: @rloutlaw
Microsoft Alias: routlaw

route to CXP team


Extend options instead of replacing them when using the API

/command/core/create-project-from-upload accepts an option parameter, which is not quite documented. If I set it to {ignoreLines: 1}, OpenRefine ignore all the default options, such as the standard comma delimiter, in case of a CSV file. It looks that using options overrides everything, instead of extending the defaults.
Proposed solution
It would be nice if OpenRefine would extend the default options with the ones that have been specified.
Alternatives considered

Additional context

The API isn't documented because it's an internal use only interface. If it were opened up for external use, it'd need a thorough design review (which would include stuff like this).

Just for future reference: it seems enough to set -1 as value to use the internal default.

Similar issue for sheets, which is a required option by the ExcelImporter.
    "sheets": [
        {
            "fileNameAndSheetIndex": "test.xlsx#0",
        }
    ],

This is the smallest working example. test.xlsx should be replaced with the filename, and "#0" stands for the first worksheet. These are computed automatically by the UI (via the initialize-parser-ui controller), but in my opinion they should be generated by default when the simplified create-project-from-upload endpoint is used.

The behaviour above is intended: the client is expected to pass the value of all options. The default values of those options can be retrieved from the API via a separate command from the importing controller. Each importer is able to define those defaults.
This will be better documented once we expand on the importing workflow in the architecture document:
https://openrefine.org/docs/technical-reference/architecture


landing page content override in physical device

Is your feature request related to a problem? Please describe.
landing page content override in physical device
Describe the solution you'd like
In physical device, Landing page content override to each other.... I attach examples below...take a look here.....

Emulator Picture---------------------Physical Device Picture
Describe alternatives you've considered
This is due to positioned widget.... I will make it more responsive to have a better look in physical device.
Additional context
If I can forward with that, Please assign me to here...... I am also a gssoc'21 participant... Thank you

Hi @SamarpanCoder2002. This is a valid issue and should be worked upon. But since you already have 3 pending PRs, please let this issue be solved by other participants.
If no other participant wants to work on this issue till the time you submit 1-2 PRs, I'll assign it to you.
Thus this issue is available for grab. If any GSSOC21 participant wants to work on it, please comment and I'll assign it to you.

Hello @HimeshNayak I would like to work on this issue. Please assign it to me.

sure, go ahead @Aishani2001, I'll assign it to you.

Any updates @Aishani2001 ?

Sir i’m working on it.
On Wed, 17 Mar 2021 at 7:12 PM, Himesh Nayak @.***>
wrote:

Any updates @Aishani2001 https://github.com/Aishani2001 ?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/avinashkranjan/Friday/issues/88#issuecomment-801090537,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/APYFNIWGI6HVNGHP2R5TGVLTECWVTANCNFSM4ZEFA3ZQ
.

Hi @HimeshNayak, I would like to fix this issue. could you please follow up  w other participants if they're working or not on this...

Hi @HimeshNayak , I would like to work on this. could you please follow up w other participants if they're working on this or not...

It has been too long! I am assigning this issue to you @Ruhika1417.

@HimeshNayak Since its been no response from assignee, I would like to work upon this issue under gssoc'21,
And I will be opening a PR within 24 hours.

@HimeshNayak I'm working on this...

@HimeshNayak Please Mentor let me Work on this issue I'm having some sort of Idea why this is happening I will solve it within few hours

@HimeshNayak Since its been no response from assignee, I would like to work upon this issue under gssoc'21,
And I will be opening a PR within hours.

I have Requested before, I also know the reason of the issue , I can also solve it within few hours.
@HimeshNayak Please assign it to me.

Go ahead! @Udit-singh


feature: add Navbar component

Summary
The new Navbar component and its components are designed to give you more freedom to create custom navigation bars.
Task
CD-559
How did you test this change?
All tests was passed with 100% of coverage ✅

@AntonioFeregrino feel free to try with the codesandbox compilation 👍🏻

This PR have conflicts, @AntonioFeregrino  you can resolve?

@AntonioFeregrino are you going to resume this PR? 👀


intermittent failure to resolve DNS records for services

Summary
During testing of OpenStack Sunbeam we occasionally see an issue where pods are unable to resolve the hostname associated with another service in the same deployment:
https://bugs.launchpad.net/snap-openstack/+bug/2033680
This typically materialises when something in the pod tries to connect to the remote service:
(2003, "Can't connect to MySQL server on 'nova-api-mysql-router.openstack.svc.cluster.local' ([Errno -2] Name or service not known)")
DNS addon is enabled.
What Should Happen Instead?
Hostname of service should be resolvable.
Reproduction Steps
We're not able to reproduce this error consistently.
Introspection Report
Not currently collected - have requested.
Can you suggest a fix?
Not based on current information - debugging or additional log collection would be great.
Are you interested in contributing with a fix?
no

Thank you for reporting this @javacruft . Is it possible to have an inspection report?

I was looking into a failed deployment and seemed to hit this issue:
inspection-report-20231024_124905.tar.gz

@gnuoy thanks for the report, we'll have a look!

I have another deployment with this symptom and I've narrowed it down to a bit. I've taken a look at the dns query openstack uses and the interesting bits are that it uses udp and enables the search option.
On a working system:
# dig +notcp +short +search nova-api-mysql-router.openstack.svc.cluster.local
<IP_ADDRESS>
# dig +notcp +short +search nova-api-mysql-router.openstack.svc.cluster.local.
<IP_ADDRESS>

On a broken system:
# dig +notcp +short +search nova-api-mysql-router.openstack.svc.cluster.local
# dig +notcp +short +search nova-api-mysql-router.openstack.svc.cluster.local.
<IP_ADDRESS>

(Note the trailing '.' on the fqdn in the second query)
I can also 'fix' the broken system by updating the ndots option in /etc/resolv.conf from ndots:5 to  ndots:4

Inspection report from broken deployment mentioned in previous comment:
inspection-report-20231026_153632.tar.gz

Using microk8s.kubectl get configmap -n kube-system coredns -o yaml to dump the coredns config shows another difference, on the working system:
forward . <IP_ADDRESS> <IP_ADDRESS>

On the broken system :
forward . /etc/resolv.conf

On the broken system:
$ grep -vE '^$|^#' /etc/resolv.conf
nameserver <IP_ADDRESS>
options edns0 trust-ad
search maas

I wonder if .maas is getting added on to the queries which don't have a trailing dot (so they aren't fqdn's) and then that causes (me fractionally waves hand ) an issue with the ndot setting.

Thanks for sharing @gnuoy . I have similar issue, deploying microstack on newly installed Ubuntu 22.04 by following instruction from https://microstack.run/docs/multi-node is always failing with "Error: Timed out while waiting for model 'openstack' to be ready".
This was during the "Deploying OpenStack Control Plane" step when executing "sunbeam cluster bootstrap --role control --role compute --role storage" command.
Running "juju status -m openstack" show that neutron and nova status is stuck at "blocked":
neutron/0*                   blocked   idle   <IP_ADDRESS>         (container:neutron-server) healthcheck failed: online
nova/0*                      blocked   idle   <IP_ADDRESS>         (workload) DB sync failed
Analyzing logs from nova-conductor show this error:
2003, "Can't connect to MySQL server on 'nova-api-mysql-router.openstack.svc.cluster.local' ([Errno -2] No address found)"
neutron-server shows similar error:
2003, "Can't connect to MySQL server on 'neutron-mysql-router.openstack.svc.cluster.local' ([Errno -2] No address found)"
Editing ndots options from /etc/resolv.conf inside neutron-server and nova-conductor pod get me pass that error. However nova-conductor encountered another error:
Unhandled error: sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1146, "Table 'nova_api.cell_mappings' doesn't exist")
After several time of Ubuntu re-installation, then found out about microstack tear-down procedure (https://discourse.ubuntu.com/t/tear-down-your-openstack-lab-environment/25078/11), I've finally point the issue to "search" options in /etc/resolv.conf (coming from netplan config). So after configuring "search" to blank ("[]" in netplan or "." resolv.conf), the sunbeam bootstrap process can finish succesfully.
Summary:
In microstack node, using search configuration option in netplan or resolv.conf causing DNS problem in sunbeam/microstack.


resources needing tag support

[ ] emr
[x] kinesis streams

EMR has tag but is still missing auto-tag-user
Kinesis Streams done with universal_taggable

@mandeepbal wanna take this one?

This issue appears to be resolved as least by 0.27.2


Is there any support for offline map ?

Can we use Tiles from sqlLite database file?
Something like this https://kuamoto.wordpress.com/2016/02/26/myth-1-cant-make-offline-apps/

Yes It is possible

yes, it it ok to use. Just change the source of the tiles.


transparency issue in overlay

In CropOverlay.kt,
backgroundAlpha = a.getFraction(
            R.styleable.CropLayout_cropme_background_alpha,
                DEFAULT_BASE,
                DEFAULT_PBASE,
                DEFAULT_BACKGROUND_ALPHA
        ) * COLOR_DENSITY

should be
backgroundAlpha = a.getFraction(
            R.styleable.CropLayout_cropme_background_alpha,
                DEFAULT_BASE,
                DEFAULT_PBASE,
                DEFAULT_BACKGROUND_ALPHA
        )

Thank you for reporting the issue.
You are absolutely right, I will fix it on v2.0.7.

I'm closing this because v2.0.7 is released.


feat(sortBy): rename item name to value

For consistency, this renames the sortBy items name property to value.
Related commit in Vue InstantSearch: algolia/vue-instantsearch@be4247149646beba89fcc12d8d26a4c1460a2a3b.

AFAIK the remaining parts are in the examples that will be updated in some later PRs.

@samouss This file hasn't been updated for all widgets. I still updated the sortBy usage.


Docs: Extensive Workflow Example

Including new Job.interact method for communicating with interactive jobs.
See preview here: https://cryosparc-tools-git-extensive-workflow-example-structurabio.vercel.app/examples/custom-workflow.html

Preview of new example page here: https://cryosparc-tools-git-extensive-workflow-example-structurabio.vercel.app/examples/custom-workflow.html

I was thinking just for easy reference, you can have a section right before getting into the jobs about "Interactive Jobs" and:

define which interactive jobs you'll be using in the following workflow (e.g., Select2D, Inspect Picks, Curate Exposures)
explain that instead of staying in "running" status before going to "completed" status, they move into "waiting" status, meaning they're waiting for user interaction (via the UI or programatically)
there is a function called "Job.Interact" that allows you to programatically interact with these jobs
define the "shutdown" function name for each interactive job (e.g., curate exposures -> shutdown_interactive, select2d -> finish, etc.,)

All this information is available in the guts of the doc but I thought it'd be nice to bring it all up to the top so users don't have to go digging for it.

@arulths added the requested details about interactive jobs: https://cryosparc-tools-git-extensive-workflow-example-structurabio.vercel.app/examples/custom-workflow.html#curate-exposures

Looks great, good to go!


[GHSA-3mwc-2cj7-gx8c] lunary-ai/lunary Access Control Vulnerability in Prompt Variation Management

Updates

Affected products
CVSS v3
Severity

Comments
The NPM package is not tied to this repo. This vulnerability concerns the main repo, not the NPM compagnon package.

Hey there 👋
Can you help me understand why the npm package is not affected? I see that there's no repo linked on the npm page
https://www.npmjs.com/package/lunary
Do you know where the code for the package originates and how I might validate that?
Same question on https://github.com/github/advisory-database/pull/5008 as well :)

Hello @darakian, thanks for your reply.
Sure, this is the repo for the NPM package: https://github.com/lunary-ai/lunary-js
And for the python: https://github.com/lunary-ai/lunary-py
We should indeed explicitly link them together.
If you pull the JS repo and compare to the NPM module, you'll see that it matches :)
Thanks for your help! have a good weekend

Hi @darakian we've linked the correct repo on the NPM page: https://www.npmjs.com/package/lunary
Thanks!

@vincelwt awesome. Thanks for adding the repo links. I've gone ahead and withdrawn these two advisories for now so that dependabot alerts stop. I'll see if I can clean them up further to delink the npm package, but that might take a bit. 👍


[binder] Clean up parcel interfaces

Some changes:

OnTransactCb now takes a non-const ReadableParcel* so that testing
codes no longer have to rely on mutable.
Remove GetReadableParcel() interface from binder since we only send
one-way transaction and the output (readable) parcel is never used.
Remove GetDataPosition() / SetDataPosition() interfaces since they are
both unused.

@sifmelcara Can you take a look at this? Thanks!

Android CI passed, so I will just enable auto-merge.


Easy way to keep overflow:scroll element scrolling position during changes?

In the following scenario, is there now a way to preserve the <aside> element's scrollbar position?
HTML:
%body
  %aside{'data-turbolinks-permanent': true}
    %ul
      - @lotsofthingies.each do |thingy|
        -# First, this:
        %li= link_to(thingy)
  %article{'data-turbolinks-temporary': true}
    -# Remote-submitted form be here, which is cool. But then, also this:
    = link_to 'Delete thingy!', @thingy, method: :delete, remote: true

CSS:
body, aside
  height: 100%
body
  overflow-y: hidden
aside
  overflow-y: scroll

I'm aware of https://github.com/turbolinks/turbolinks-classic/pull/528, so my question is mostly whether the data-turbolinks-scroll="false" idea mentioned there has been implemented in some way meanwhile?
On the other hand, using TurboLinks.visit(thingy_url, {scroll: false}) still resets the <aside>'s scrollbar position, so perhaps what I'm trying to achieve doesn't work that way, either...

Thanks for opening this issue.
First, we won’t be adding a data-turbolinks-scroll annotation or a scroll: false option to Turbolinks.visit. Scrolling is carefully coordinated by the view to match the browser’s normal navigation behavior, and depends on what the visit action is, whether there’s a cached snapshot, whether the location has an anchor, and whether the cached snapshot has an element matching that anchor.
We may consider some mechanism in the future to preserve the scroll position of overflow elements which are marked as permanent, or are inside a permanent container. However, this is expensive for a number of reasons: there is no easy way to query for such overflow elements without an explicit annotation; querying scrollTop causes reflow; and finally, just because an element is permanent does not mean it will have the same dimensions from one page to the next, and so preserving its scroll position may not even be possible.
Going forward, the approach I’d like to take for cases like this is to expose the necessary hooks such that applications or third-party libraries can customize rendering behavior as necessary. To that end, I’ve opened PR #5, which adds a turbolinks:before-render event. Using this event, you ought to be able to preserve overflow scroll offsets on permanent elements like so:
(function() {
  var scrollTops = new WeakMap

  function findElements() {
    return document.querySelector("[data-turbolinks-permanent]")
  }

  addEventListener("turbolinks:before-render", function() {
    findElements().forEach(function(element) {
      scrollTops.set(element, element.scrollTop)
    })
  })

  addEventListener("turbolinks:render", function() {
    findElements().forEach(function(element) {
      if (scrollTops.has(element)) {
        element.scrollTop = scrollTops.get(element)
      }
    })
  })
})()

All completely reasonable and wow, thank you so much for the explanation and the .patch, @sstephenson!

Here's how I handled this...
// in application.js

var turbolinks_go = function(url, no_scroll){
  if(no_scroll){
    addEventListener("turbolinks:before-render", function() {
      scroll = $(document).scrollTop();
    })
    addEventListener("turbolinks:render", function() {
      $(document).scrollTop(scroll);
    })
  }
  Turbolinks.visit(url);
}

// then calling it anywhere on the site

turbolinks_go(location.toString(), 'no_scroll');

But a browser reloading does keep the body's scrolling position.
How could I make it happen via Turbolink?
Turbolink.visit(location.href, scroll: false) doesn't work now.

You have to pass the second parameter as an object like this and it works.


Upgrade undici to 5.5.1

Upgrade the undici dependency in all the packages to fix this vulnerability.

Ready! Thanks for reviewing it and for this project. Greetings from Shopify!


Tooltip disappear when cursor moves directly onto the tooltip symbol

This is because when cursor moves onto the tooltip symbol, it will trigger a MouseLeave event on the main chart and then the event gets caught by TooltipMixin.

True :)
Will fix today

Should be fixed but I will rewrite the tooltip as discussed in the other issue.