Further stabilization of the racetest

A racetest recently failed with the following the following relevant log:
=== RUN   TestErrors
=== RUN   TestErrors/0
=== RUN   TestErrors/1
2018-06-28T23:22:17.060641Z	warn	Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
2018-06-28T23:22:17.061528Z	warn	error creating inClusterConfig, falling back to default config: unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined
=== RUN   TestErrors/2
2018-06-28T23:22:17.452662Z	info	pickfirstBalancer: HandleSubConnStateChange: 0xc427f76220, CONNECTING
2018-06-28T23:22:17.454710Z	info	grpc: addrConn.createTransport failed to connect to {[::]:38146 0  <nil>}. Err :connection error: desc = "transport: Error while dialing dial tcp [::]:38146: connect: cannot assign requested address". Reconnecting...
2018-06-28T23:22:17.455584Z	info	pickfirstBalancer: HandleSubConnStateChange: 0xc427f76220, TRANSIENT_FAILURE
=== RUN   TestErrors/3
=== RUN   TestErrors/4
2018-06-28T23:22:19.152646Z	info	pickfirstBalancer: HandleSubConnStateChange: 0xc427f76220, CONNECTING
=== RUN   TestErrors/5
2018-06-28T23:22:19.166544Z	info	grpc: addrConn.createTransport failed to connect to {[::]:38146 0  <nil>}. Err :connection error: desc = "transport: Error while dialing dial tcp [::]:38146: connect: cannot assign requested address". Reconnecting...
2018-06-28T23:22:19.167700Z	info	pickfirstBalancer: HandleSubConnStateChange: 0xc427f76220, TRANSIENT_FAILURE
=== RUN   TestErrors/6
FAIL	istio.io/istio/mixer/pkg/server	8.751s

This fix is using a different port to avoid conflict with previous iteration which used the same port.
Test logic isn't affected.

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: ymesika
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approver: guptasu
Assign the PR to them by writing /assign @guptasu in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

mixer/OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@ymesika: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-unit-tests.sh
1ecafb89ffd34649cfd62a32cdcb630ee83cb3c3
link
/test istio-unit-tests

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

Adds to #6730

@ymesika: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-unit-tests.sh
1ecafb89ffd34649cfd62a32cdcb630ee83cb3c3
link
/test istio-unit-tests

prow/istio-presubmit.sh
1ecafb89ffd34649cfd62a32cdcb630ee83cb3c3
link
/test istio-presubmit

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@ymesika: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-presubmit.sh
1ecafb89ffd34649cfd62a32cdcb630ee83cb3c3
link
/test istio-presubmit

prow/istio-unit-tests.sh
62730e0622219cc384f323227dcab4faa022c55e
link
/test istio-unit-tests

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@ymesika: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-unit-tests.sh
62730e0622219cc384f323227dcab4faa022c55e
link
/test istio-unit-tests

prow/istio-presubmit.sh
62730e0622219cc384f323227dcab4faa022c55e
link
/test istio-presubmit

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

May I ask why you closed this? It seems like a useful change.

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: ymesika
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approvers: douglas-reid, greghanson
Assign the PR to them by writing /assign @douglas-reid @greghanson in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

mixer/OWNERS
pilot/OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@geeknoid I used this PR for building/testing/debugging purposes. Unfortunately I can't recreate any of the racetests failures when running locally.
Now that I think I've targeted the root cause I'm making this PR avail but will re-run the racetest on CircleCI with this change to see if we hit that failure again. This is a failure with no details (as you can see in the log above) which makes it quite difficult to spot the reason.
In addition, I'm adding a change proposed in https://github.com/istio/istio/pull/6625#discussion_r198612433 and I didn't get the chance to change it before that got merged.

/hold

@ymesika: PR needs rebase.

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

This failure is still happening although I tried several approaches.
The most difficult part is the lack of information in the log about why it failed. Beside the FAIL message there is no hint in the log.
@geeknoid @rshriram @douglas-reid  Maybe you have some suggestion about how to "reveal" the source of the failure? Where to add debugging logging messages?
It happens only when the race test runs in CircleCI which makes it more difficult to debug.

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: ymesika
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approvers: douglas-reid, greghanson
Assign the PR to them by writing /assign @douglas-reid @greghanson in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

mixer/OWNERS
pilot/OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: ymesika
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approver: kyessenov
Assign the PR to them by writing /assign @kyessenov in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

pilot/OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@ymesika: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-unit-tests.sh
00d36e7210733761df1d9552384ee5acae9b6ec4
link
/test istio-unit-tests

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

closing.. as smaller fixes for the race test went into 1.0


Problem : GN dimension when evaluating mask_R_50_3x_gn

❓ Questions and Help
When I train and evaluate by using scratch_e2e_mask_rcnn_R_50_FPN_Xconv1fc_3x_gn, this problem occurred.

2019-06-03 17:19:46,170 maskrcnn_benchmark.inference INFO: Start evaluation on coco_2014_minival dataset(5000 images).
30%|██████████████████████████████████████████████▏                                                                                | 1501/5000 [03:06<06:53,  8.47it/s]
Traceback (most recent call last):
File "tools/test_net.py", line 107, in
main()
File "tools/test_net.py", line 101, in main
output_folder=output_folder,
File "/home/lsrock1/maskrcnn-benchmark/maskrcnn_benchmark/engine/inference.py", line 84, in inference
predictions = compute_on_dataset(model, data_loader, device, inference_timer)
File "/home/lsrock1/maskrcnn-benchmark/maskrcnn_benchmark/engine/inference.py", line 30, in compute_on_dataset
output = model(images.to(device))
File "/home/lsrock1/anaconda3/envs/pytorch1.1/lib/python3.7/site-packages/torch/nn/modules/module.py", line 493, in call
result = self.forward(*input, **kwargs)
File "/home/lsrock1/maskrcnn-benchmark/maskrcnn_benchmark/modeling/detector/generalized_rcnn.py", line 52, in forward
x, result, detector_losses = self.roi_heads(features, proposals, targets)
File "/home/lsrock1/anaconda3/envs/pytorch1.1/lib/python3.7/site-packages/torch/nn/modules/module.py", line 493, in call
result = self.forward(*input, **kwargs)
File "/home/lsrock1/maskrcnn-benchmark/maskrcnn_benchmark/modeling/roi_heads/roi_heads.py", line 39, in forward
x, detections, loss_mask = self.mask(mask_features, detections, targets)
File "/home/lsrock1/anaconda3/envs/pytorch1.1/lib/python3.7/site-packages/torch/nn/modules/module.py", line 493, in call
result = self.forward(*input, **kwargs)
File "/home/lsrock1/maskrcnn-benchmark/maskrcnn_benchmark/modeling/roi_heads/mask_head/mask_head.py", line 70, in forward
x = self.feature_extractor(features, proposals)
File "/home/lsrock1/anaconda3/envs/pytorch1.1/lib/python3.7/site-packages/torch/nn/modules/module.py", line 493, in call
result = self.forward(*input, **kwargs)
File "/home/lsrock1/maskrcnn-benchmark/maskrcnn_benchmark/modeling/roi_heads/mask_head/roi_mask_feature_extractors.py", line 63, in forward
x = F.relu(getattr(self, layer_name)(x))
File "/home/lsrock1/anaconda3/envs/pytorch1.1/lib/python3.7/site-packages/torch/nn/modules/module.py", line 493, in call
result = self.forward(*input, **kwargs)
File "/home/lsrock1/anaconda3/envs/pytorch1.1/lib/python3.7/site-packages/torch/nn/modules/container.py", line 92, in forward
input = module(input)
File "/home/lsrock1/anaconda3/envs/pytorch1.1/lib/python3.7/site-packages/torch/nn/modules/module.py", line 493, in call
result = self.forward(*input, **kwargs)
File "/home/lsrock1/anaconda3/envs/pytorch1.1/lib/python3.7/site-packages/torch/nn/modules/normalization.py", line 232, in forward
input, self.num_groups, self.weight, self.bias, self.eps)
File "/home/lsrock1/anaconda3/envs/pytorch1.1/lib/python3.7/site-packages/torch/nn/functional.py", line 1736, in group_norm
torch.backends.cudnn.enabled)
RuntimeError: cannot reshape tensor of 0 elements into shape [1, 0, -1] because the unspecified dimension size -1 can be any value and is ambiguous

@zimenglan-sysu-512 Do you have an idea this problem?

@zimenglan-sysu-512 Do you have an idea this problem?

hi @stigma0617
i guess the problem is caused by the empty boxes from box-head. so u need to deal with the case of empty boxes for mask-branch or keypoint-branch.
hope it can help u.

@zimenglan-sysu-512 thanks for your reply.
Have you experienced this problem when you test it ?
I just trained and tested by using this config file

yet, i met this problem, and deal with empty bbox to fix it.

@zimenglan-sysu-512 Could you share your solution?
Since this is the problem many people faced, your solution will surely help us.
Thanks in advance.

hi @stigma0617
i just simply do this to solve empty bbox for mask branch when inference in the forward func of the mask_head file
        if not self.training and features[0].shape[0] == 0:
            return None, proposals, {}

maybe u can add the empty mask to the proposals like this:
proposals.add_field("mask", empty_masks)

hope it can help u.

Hi @zimenglan-sysu-512
First of all, thanks for your reply.
I tried to modify mask_headfile with your tips, but I failed to fix this problem.
Could you let me know your modified code details?
Thanks

@stigma0617 were you able to solve the issue with GN models ?
It seems to be working fine with BN models.

@pkhigh As you said, BN models are working fine.
But, GN models still have this problem.

has anyone found a solution for this ?
I don't think this is an issue of 0 bounding boxes detections. Because i set the threshold to 0 even then I got same error.

Does someone slove this problem? I met the same problem

/home/madhevan/maskrcnn-benchmark/maskrcnn_benchmark/modeling/roi_heads/box_head/roi_box_predictors.py(28)forward()
-> x = self.avgpool(x)
(Pdb) x
tensor([], size=(0, 2048, 7, 7))
(Pdb) n
/home/madhevan/maskrcnn-benchmark/maskrcnn_benchmark/modeling/roi_heads/box_head/roi_box_predictors.py(29)forward()
-> x = x.view(x.size(0), -1)
(Pdb) n
RuntimeError: cannot reshape tensor of 0 elements into shape [0, -1] because the unspecified dimension size -1 can be any value and is ambiguous
/home/madhevan/maskrcnn-benchmark/maskrcnn_benchmark/modeling/roi_heads/box_head/roi_box_predictors.py(29)forward()
-> x = x.view(x.size(0), -1)

I am also getting a similar error


[Code Tunnel & ArchLinux] error listing current tunnels: authorization error

I have tested many ArchLinux devices and all of them have error:
[user@host ~]% code-cli tunnel --log trace
*
* Visual Studio Code Server
*
* By using the software, you agree to
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).
*
[2022-12-08 12:02:00] debug No code server tunnel found, creating new one
[2022-12-08 12:02:00] trace No token in keyring, getting a new one
[2022-12-08 12:02:00] debug [reqwest::connect] starting new connection: https://github.com/
[2022-12-08 12:02:05] error error listing current tunnels: authorization error: error requesting https://github.com/login/device/code: error sending request for url (https://github.com/login/device/code): error trying to connect: dns error: failed to lookup address information: Try again
[user@host ~]%
[user@host ~]%
[user@host ~]%
[user@host ~]% resolvectl
Global
           Protocols: +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
    resolv.conf mode: foreign
  Current DNS Server: <IP_ADDRESS>
         DNS Servers: <IP_ADDRESS>
Fallback DNS Servers: <IP_ADDRESS>

Link 2 (ens5)
    Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: <IP_ADDRESS>
       DNS Servers: <IP_ADDRESS> <IP_ADDRESS> <IP_ADDRESS>

Link 3 (docker0)
Current Scopes: none
     Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
[user@host ~]%
[user@host ~]%
[user@host ~]%
[user@host ~]% cat /etc/os-release
NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://bugs.archlinux.org/"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo
[user@host ~]%

Thanks for the report. I'm not able to readily hit this in a fresh Arch Linux container under Docker, via docker run -it archlinux. Can you share more details about your setup or network to help me hit the same failure?

There is no problem in the docker container. But there is a problem in the physical machine. Would you mind providing an email address please? I will provide a machine with SSH-KEY.

Sure<EMAIL_ADDRESS>My ssh key can be found on my GH profile: https://github.com/connor4312.keys

I have sent the email. All the steps of the operation can be viewed through command history.

Thanks! I will look at it, though may take some extra time due to the upcoming holiday.

Looks to be related, or at least some difference, in musl libc's getaddrinfo vs gnu's (docs -- namely doesn't support nsswitch.conf). We point people to the fully static musl CLI for the most portable build, but the gnu flavor of the CLI works on your system.

For a wide range of linux devices, glibc is still the reliable and preferred choice. In my opinion, In my opinion, musl should not be forced into the glibc environment. I think musl is a solution for specific scenarios, such as cloud services and embedded devices. For code-cli, it needs to be adapted to a variety of scenarios. And developers don't have full control over these scenarios.
For musl users, I think they know exactly what musl they are using and they are ready to step into the hole.
Maintaining two download items is not ugly, as most of vscode's users are developers and there is good enough documentation to read. If this is done, the only thing that needs to change is the build environment (CI). The code can remain just one set, or even remain the same.
So, my opinion is maintaining two download items.
https://dotnet.microsoft.com/download/dotnet/7.0

Thanks! I will look at it, though may take some extra time due to the upcoming holiday.

I will keep this machine until this issue is closed. Or you can email me and tell me that the machine is no longer needed.
Vacation is just as important as work. Happy Holidays!

BTW, there is no full static when it comes to IO outside of computation. The network driver is not exactly the same for each device. Full static packaging just packages everything in the build environment.
In my work, when I build FFmpeg for Android devices with --extra-ldexeflags="-static", getaddrinfo also does not work properly.


Morelli's Presentation on CompEcon

When defining the language for a markdown code block, use lower case name instead of upper case.
Meaning you should do "three back ticks" then julia instead of Julia.

@jmorelli88 Thanks.


refactory: remove strange type Id + publish BabelDesc.Version

There is no function bind on the type Id string or any other special thing.
So just make the code more unnecessary complex.

Publish fetched data from BabelDesc.
Add Version to BabelDesc

@vonaka what do you thing ?

Thanks @genofire, I think all your changes are legitimate. My only problem is that I really want to (more or less completely) rewrite the whole thing. I created the new branch you're very welcome to review and improve it. If you don't mind for now I prefer to keep this unmerged.

Hmm, also, it turns out that not all changes are equally legitimate. When you initialize bd.Version you're not checking if e["version"].data is different from nil.

hmm ... (i do not know if it is useful to keep this PR if your refactory does not need much time )
By the way you call your refactory branch junk. :smile:
TransitionKey is strange, it contains multiple values + is used for indexing ... is that good?

is that good?

I do not know whether this is good or bad, but it's legal. If you have a better solution, it is more then welcome. I created an issue #12, feel free to suggest any ideas and improvements.


Revert "naming the ec2 test instance that is created in each aws region"

Reverts openshift/aws-account-operator#671
Facepalm, all we needed to do was update the app-interface parameters file with red-hat-managed=true, which I had wrongly assumed was already one of the tags being added.

Codecov Report

Merging #672 (addf4cf) into master (1fd83f8) will increase coverage by 0.00%.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #672   +/-   ##
=======================================
  Coverage   31.54%   31.55%
=======================================
  Files          47       47
  Lines        4650     4649    -1
=======================================
  Hits         1467     1467
+ Misses       3085     3084    -1
  Partials       98       98

Impacted Files
Coverage Δ

pkg/awsclient/tags.go
0.00% <ø> (ø)


Tutorial for the controls/HUD when you first enter the game

Can be a slide show of images and should be skippable. Should only activate once per game

Merging this issue with #49


WBI play modes and classic stock resources needs another look

Relevant background: https://github.com/KSP-CKAN/NetKAN/pull/8275
Currently ClassicStockResources depends on WildBlue-PlayMode-ClassicStock, which seems backwards: https://github.com/KSP-CKAN/NetKAN/blob/master/NetKAN/ClassicStockResources.netkan
Recently we took steps to make sure that CommunityResourcePack conflicts with wildblue play modes other than WildBlue-PlayMode-CRP and WildBlue-PlayMode-USI (note the latter is maintained by TheDog and not Angel-125.  And it may be abandoned).  https://github.com/KSP-CKAN/NetKAN/pull/9893.  This came out of some bug reports from people trying to use CommunityResourcePack and other play modes.
So, my proposal:

Flip the dependency: WildBlue-PlayMode-ClassicStock should depend on ClassicStockResources, not the other way around.
Make ClassicStockResources conflict with CommunityResourcePack
MAYBE: make WildBlue-PlayMode-Pristine conflict with ClassicStockResources
MAYBE: make WildBlue-PlayMode-Simplified depend on ClassicStockResources

I'd want to do at least a little digging to look for other mods that interact with these to make sure we're not screwing anything up.

Flip the dependency: WildBlue-PlayMode-ClassicStock should depend on ClassicStockResources, not the other way around.

This just seems wrong to me. It's a separate mod that the (non-CKAN) user can choose to install or not. If flipping the dependency was appropriate, then there would be no reason for ClassicStockResources to exist as its own mod outside of the base WildBlueTools. It would just be some additional cfg files in the Templates/ClassicStock folder of that mod.
The current relationship, on the other hand, makes sense to me. In order to use the resources that come with ClassicStockResources, you need the definitions of the ClassicStock play mode and the tools for managing/switching play modes, both of which are in WildBlueTools.
WildBlueTools' installation instructions in Readme.txt in the ZIP say nothing about also needing to install ClassicStockResources:
Wild Blue Tools

A KSP mod that provides common functionality for mods by Wild Blue Industries.

---INSTALLATION---

Copy the contents of the mod's GameData directory into your GameData folder.

Everything about the actual contents and structure of these mods aligns with the current metadata and away from these changes. Is there some contrary objective aspect of it that I'm missing here?

Found a confounding factor: DSEV bundles ClassicStockResources:

So the intention there would seem to be to make the ClassicStockResources configs always available in case the user chooses the ClassicStock play mode. In effect, bundling is an implicit way of defining a dependency without mentioning it in installation instructions.
The same pattern holds for:

[x] DSEV
[x] Pathfinder
[x] MOLE
[x] Heisenberg
[x] Buffalo

That makes me a lot more comfortable with the idea of flipping the dependency.

Taking a look at the rest of the metadata, the RationalResources family are the only others depending on ClassicStockResources. The other relationships mentioning that identifier are supports. And I don't think any mods outside the WildBlue family interact with the play mode structure. So the risks for other mods should be minimal.
Alright, I'm turning my key. 🔑
I'll start a pair of PRs in NetKAN and CKAN-meta with these changes to properly reflect the bundling structure.

MAYBE: make WildBlue-PlayMode-Pristine conflict with ClassicStockResources
MAYBE: make WildBlue-PlayMode-Simplified depend on ClassicStockResources

These might be best handled by leaving the current CSR→CSP dependency in place while adding CSP→CSR. Then if you install ClassicStockResources, you're forced into the ClassicStock play mode, and we don't have to mess with the other play modes.

This might be best handled by leaving the current CSR→CSP dependency in place while adding CSP→CSR (a circular dependency to effectively turn them into one logical mod). Then if you install ClassicStockResources, you're forced into the ClassicStock play mode, and we don't have to mess with the other play modes.

I only did a cursory skim but I'm pretty sure that Simplified play mode uses resources from ClassicStockResources so I don't think this works.

Should be tested!

Done. I installed DSEV and Pathfinder manually, then switched to Simplified (which apparently is known in-game as "Lite Blue"):

And now all of ClassicStockResources' .cfg files are renamed to .txt:

And now all of ClassicStockResources' .cfg files are renamed to .txt:

Did you check every file that is included in the ClassicStockResources ckan module?

I'm worried that some of those are required by the Simplified play mode.

I don't think we necessarily need two separate modules, right?  Simplified play mode is clearly expected to be usable with ClassicStockResources installed.  What's the motivation for making ClassicStockResources depend on the play mode?

But yes, it does need to be two separate modules, to accurately model the two states of ".cfg files are left alone" and "all but one .cfg file are renamed to .txt".

Yeah I made that comment based on the fact that mods which support the simplified play mode sometimes bundle classic stock resources, and they’re in .cfg form there.
If you install ClassicStockResources outside of ckan, the resources are in .cfg files. Isn’t it possible that some other mod uses those resources directly and doesn’t have anything to do with play modes?
rather than make ClassicStockResources depend on the play mode, why not make the other play modes conflict with ClassicStockResources?  That seems correct, meaning that if you have CSR then you must use the corresponding play mode.

Rather than trying to answer a bunch of hypotheticals, are there actual problems with the current metadata as it stands?

Rather than trying to answer a bunch of hypotheticals, are there actual problems with the current metadata as it stands?

Don’t many of the RationalResources family mods depend on CRP or CSR, and if you select CSR you shouldn’t necessarily be forced to install the WBI play mode?

Does that cause a problem?

Not that I know of, but it spiderwebs into other dependencies like Wild Blue Tools and Kerbal Actuators.  What does making Classic Stock Resources depending on Classic Stock PlayMode buy us?

The current dependencies of ClassicStockResources are:
depends:
  - name: ModuleManager
  - name: ClassicStockResources-PlayMode

agh, what??

this is madness.  Why is a CRP mode there?

Because you can install ClassicStockResources/Templates/Common/Intakelqd.cfg and have it active while CRP is installed.

Because you can install ClassicStockResources/Templates/Common/Intakelqd.cfg and have it active while CRP is installed.

You can but it's a no-op because everything in that file gets removed if CRP is installed.

Sure. Which means that mods that bundle it can be used in other play modes.

Hello, I am running into a metadata problem that seems related to this.
I have WBI USI play mode installed:
https://github.com/TheDogKSP/WBIPlaymodeUSI
I am trying to install Pathfinder, which requires classic stock resources, which requires the classic stock playmode. WBI USI playmode isnt an option as a classic stock playmode, so I need to select one of the other classic stock playmode options, all of which are incompatible with WBI USI playmode. This means I am unable to use WBI USI playmode with pathfinder, which was it's intended use, rendering said playmode useless. I think this can be corrected by adding WBI USI as a playmode for Classic stock, or by removing the incompatibility between classic stock resources classic stock playmode.

@HebaruSan is the solution here to make the USI play mode provide ClassicStockResources-PlayMode?


question about the g_cloneManyTimes() function

Is there any specific reason for using torch.MemoryFile(''w'') in the g_cloneManyTimes() function rather than simply using  net:clone()? Thanks

this confused me as well


Got "Data adapters should be mutually exclusive for handling inputs. Found multiple adapters to handle" error when calling model.fit with ImageDataGenerator

System information

Have I written custom code (as opposed to using a stock example script provided in TensorFlow): Yes
OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Ubuntu 18.04 aarch64
Mobile device (e.g. iPhone 8, Pixel 2, Samsung Galaxy) if the issue happens on mobile device: N/A
TensorFlow installed from (source or binary): source
TensorFlow version (use command below) 2.0.0
Python version: 3.6.8
Bazel version (if compiling from source): 0.29.0
GCC/Compiler version (if compiling from source): 7.4
CUDA/cuDNN version: N/A
GPU model and memory: N/A

Describe the current behavior
When fitting a model with ImageDataGenerator, it raises this error "Data adapters should be mutually exclusive for handling inputs. Found multiple adapters 'GeneratorDataAdapter', 'KerasSequenceAdapter' to handle".
Describe the expected behavior

Log warning message if multiple data adapters found, instead of raising an error
Use the first available data adapter

Code to reproduce the issue
Please refer to link below:
https://colab.research.google.com/github/tensorflow/examples/blob/master/courses/udacity_intro_to_tensorflow_for_deep_learning/l05c02_dogs_vs_cats_with_augmentation.ipynb
I connected to my local jupyter instance with Colab UI.
BATCH_SIZE = 100
IMG_SHAPE  = 150

image_gen = ImageDataGenerator(rescale=1./255, horizontal_flip=True)
train_data_gen = image_gen.flow_from_directory(batch_size=BATCH_SIZE,
                                               directory=train_dir,
                                               shuffle=True,
                                               target_size=(IMG_SHAPE,IMG_SHAPE))
val_data_gen = image_gen.flow_from_directory(batch_size=BATCH_SIZE,
                                               directory=val_dir,
                                               shuffle=True,
                                               target_size=(IMG_SHAPE,IMG_SHAPE))
model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3)),
    tf.keras.layers.MaxPooling2D(2, 2),

    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),

    tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),

    tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),

    tf.keras.layers.Dropout(0.5),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(512, activation='relu'),
    tf.keras.layers.Dense(2, activation='softmax')
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
epochs = 100
model.fit(
    train_data_gen,
    steps_per_epoch=int(np.ceil(total_train / float(BATCH_SIZE))),
    epochs=epochs,
    validation_data=val_data_gen,
    validation_steps=int(np.ceil(total_val / float(BATCH_SIZE)))
)

To avoid this issue, I'll have to manually exclude "KerasSequenceAdapter" before calling model.fit
from tensorflow.python.keras.engine import data_adapter
from tensorflow.python.keras.engine.data_adapter import ListsOfScalarsDataAdapter
from tensorflow.python.keras.engine.data_adapter import TensorLikeDataAdapter
from tensorflow.python.keras.engine.data_adapter import GenericArrayLikeDataAdapter
from tensorflow.python.keras.engine.data_adapter import DatasetAdapter
from tensorflow.python.keras.engine.data_adapter import GeneratorDataAdapter
from tensorflow.python.keras.engine.data_adapter import CompositeTensorDataAdapter

data_adapter.ALL_ADAPTER_CLS = [
 ListsOfScalarsDataAdapter,
 TensorLikeDataAdapter,
 GenericArrayLikeDataAdapter,
 DatasetAdapter,
 GeneratorDataAdapter,
#  tensorflow.python.keras.engine.data_adapter.KerasSequenceAdapter,
 CompositeTensorDataAdapter
]

data_adapter.ALL_ADAPTER_CLS

Other info / logs
N/A.

Humm, seems that the Image Iterator class implements the interface for both generator and keras sequence object. Let me take a closer look to fix the issue.

Hey, I think we did some recent update for data_adapter which might fix this issue. Could u have a try with latest nightly?
https://github.com/tensorflow/tensorflow/commit/ac20030c96d37e980333b604402ef6dba48ef5e2

Sure I will, thanks btw~

@qlzh727 The fix works! Thank you!

@qlzh727, I'm having this same problem under TF 2.2, TF2.3, and tf-nightly (as of yesterday). The problem seems to be identical in description to that of @gekowa. Any advice? Here is my system info...
System information
Have I written custom code (as opposed to using a stock example script provided in TensorFlow): Yes
OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Ubuntu 18.04
Mobile device (e.g. iPhone 8, Pixel 2, Samsung Galaxy) if the issue happens on mobile device:
TensorFlow installed from (source or binary): binary
TensorFlow version (use command below): 2.2.0 (also tried 2.3 and tf-nightly)
Python version: 3.6.9
Bazel version (if compiling from source):
GCC/Compiler version (if compiling from source):
CUDA/cuDNN version: 10.1 / 7.6.5
GPU model and memory: RTX 2080 Super, 8 GB


.gitlab-ci-local-variables.yml not being correctly parsed.

I can't seem to get .gitlab-ci-local-variables.yml to be read in as variables.
I'm trying to understand how to set this up, and when running on my .gitlab-ci.yml file, gitlab-ci-local fails to run because a custom variable our yaml isn't configured.
Which is fine, as I can configure it myself.
If I go to do so through the CLI using gitlab-ci-local --list --variable CUSTOM_VAR=value it works fine.
Same goes for setting it up using .gitlab-ci-local-env
However when I configure .gitlab-ci-local-variables.yml as described in the readme:
---
  CUSTOM_VAR: value

I get an error saying that my variable isn't defined.
On debugging the code, I find that the logic for the expanded variables is the same, so I believe the values set in variablesFromFiles and expanded aren't correctly parsed by the rest of the code (since variables seem like they can be read in from multiple places, not just the unified expanded).
Or, am I misunderstanding how to use this tool?
If so, could more guidance be added to the readme please?
For now, I can use --variable but this won't scale for a more thorough solution :/

(Have edited to amend with different findings)

Sorry I still get the same issue :/

The furthest I've gotten with debugging is that it fails within Utils.forEachRealJob

In the constructor of a job, the variables are set to the following:
this._variables = {...globalVariables, ...jobVariables, ...matrixVariables, ...predefinedVariables, ...argvVariables};

Then, they're used in the environment variables.
// Find environment matched variables
if (this.environment && expandVariables) {
    const expanded = Utils.expandVariables(this._variables);
    this.environment.name = Utils.expandText(this.environment.name, expanded);
    this.environment.url = Utils.expandText(this.environment.url, expanded);
}

This is where the program starts to error, because it can't find the variable and thus this.environment.name=''
But directly below we see where variablesFromFiles first gets used.
const envMatchedVariables = Utils.findEnvMatchedVariables(variablesFromFiles, this.fileVariablesDir, this.environment);

So it seems that the solution would be:
// Find environment matched variables
if (this.environment && expandVariables) {
    const globalEnvironmentVariables = Utils.findEnvMatchedVariables(variablesFromFiles, this.fileVariablesDir, "*");
    const environmentVariables = {...this._variables, ...globalEnvironmentVariables};
    const expanded = Utils.expandVariables(environmentVariables);
    this.environment.name = Utils.expandText(this.environment.name, expanded);
    this.environment.url = Utils.expandText(this.environment.url, expanded);
}

What is the exact error you are getting?

Error:
• 'environment' property type must be string at deploy.environment
• property 'name' must not have fewer than 1 characters at deploy.environment.name

The job contains:
  environment:
    name: "$CUSTOM_VAR"

I'm going to need an as simple example, to reproduce what you are experiencing...


Telegram notify v1.0.0

New Pull Request Checklist
Please mark the points which you did / accept.

[x] I will not move an already shared step version's tag to another commit
[x] I read the Step Development Guideline
[x] I have a test for my Step, which can be run with bitrise run test (in the step's repository)
[x] I did run bitrise run audit-this-step (in the step's repository - note, if you don't have this workflow in your bitrise.yml, you can copy it from the step template.)
[x] I read and accept the Abandoned Step policy

@godrei will fix those.
Question, is there a way to get the failure message or step? (Maybe from an env var or something)

@godrei #1771

Hey!
Closing this PR as you've opened the new one.


made the meshmark page responsive

Signed-off-by: asubedy<EMAIL_ADDRESS>Description
This PR fixes #
Notes for Reviewers
Signed commits

[X] Yes, I signed my commits.

Thank you, @asubedy


CC5 sine/cosine

In the default 20 seeds, there isn't an example where an IVP with sine has a solution with cosine, or vice versa.

I also should make these more comparable in difficulty, or make this a two-parter.

closed in 6276b8b


Why is there no Shadow in Examples?

Please Contact me on
<EMAIL_ADDRESS>i would like to request a feature, which i want to pay for if you like.

Shadows are implemented for DirectX 11 (for both the SharpDX demo and the SharpDX11 frontend of the generic demos).
You can email me at<EMAIL_ADDRESS>if it's something private.


Support for fragment query

Thank you for this amazing project. Is is something I hoped for a long time 🙏🏻❤
It would be handy though to have some support for fragment queries so that I can save it as a search engine and use it as such.
Example:
https://secretllama.com/#capital%20of%20india

When you visit the example URL, the app should automatically send a first message with the text in the fragment query?

I think so, Brave does for sure. Try it...

Yes, fragment would be more privacy preserving.


Develco Air Quality Sensor

Hello!
Firstly, this is not a bug but wasn't sure where else to put this.
I have managed to come up with a custom quirk for a Develco Air Quality sensor that seems to be working so far, I now have the air quality values showing up correctly under "Manage Clusters", and I can retrieve the correct values etc which is great and better than it was before, but I can't figure out how to get this into a Home Assistant sensor. What have I missed?
Any suggestions would be greatly appreciated, once I can get this working I will be happy to put in a PR!
"""Develco Air Quality Sensor"""
from zigpy.profiles import zha
from zigpy.quirks import CustomCluster, CustomDevice
import zigpy.types as t
from zhaquirks import Bus, LocalDataCluster
from zigpy.zcl.clusters.general import (
    Basic,
    BinaryInput,
    Identify,
    OnOff,
    Ota,
    PollControl,
    PowerConfiguration,
    Scenes,
    Time,
)
from zigpy.zcl.clusters.measurement import TemperatureMeasurement
from zigpy.zcl.clusters.measurement import RelativeHumidity
from zigpy.zcl.clusters.security import IasZone

from zhaquirks.const import (
    DEVICE_TYPE,
    ENDPOINTS,
    INPUT_CLUSTERS,
    MODELS_INFO,
    OUTPUT_CLUSTERS,
    PROFILE_ID,
)
from zhaquirks.develco import DEVELCO, DevelcoPowerConfiguration

MANUFACTURER = 0x1015
VOC_MEASURED_VALUE = 0x0000
VOC_MIN_MEASURED_VALUE = 0x0001
VOC_MAX_MEASURED_VALUE = 0x0002
VOC_RESOLUTION = 0x0003

class DevelcoIASZone(CustomCluster, IasZone):
    """IAS Zone."""

    manufacturer_client_commands = {
        0x0000: (
            "status_change_notification",
            (
                IasZone.ZoneStatus,
                t.bitmap8,
                t.Optional(t.uint8_t),
                t.Optional(t.uint16_t),
            ),
            False,
        )
    }

class VOCMeasurement(CustomCluster):
    cluster_id = 0xfc03
    name = "VOC Measurement"
    ep_attribute = "voc_measurement"
    manufacturer_attributes = {
        VOC_MEASURED_VALUE: ("MeasuredValue", t.uint16_t),
        VOC_MIN_MEASURED_VALUE: ("MinMeasuredValue", t.uint16_t),
        VOC_MAX_MEASURED_VALUE: ("MaxMeasuredValue", t.uint16_t),
        VOC_RESOLUTION: ("Resolution", t.uint16_t)
    }
    server_commands = {}
    client_commands = {}

    def _update_attribute(self, attrid, value):
        super()._update_attribute(attrid, value)

class AQSZB110(CustomDevice):
    """Custom device air quality sensor"""
    manufacturer_id_override = MANUFACTURER

    signature = {
        # <SimpleDescriptor endpoint=1 profile=49353 device_type=1 device_version=1
        # input_clusters=[3, 5, 6] output_clusters=[]>
        # <SimpleDescriptor endpoint=38 profile=260 device_type=770 device_version=0
        # input_clusters=[0, 1, 3, 32, 1026, 1029, 64515] output_clusters=[3, 10, 25]>
        MODELS_INFO: [(DEVELCO, "AQSZB-110")],
        ENDPOINTS: {
            1: {
                PROFILE_ID: 49353,
                DEVICE_TYPE: 1,
                INPUT_CLUSTERS: [
                    Identify.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            38: {
                PROFILE_ID: 260,
                DEVICE_TYPE: 770,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    PowerConfiguration.cluster_id,
                    Identify.cluster_id,
                    PollControl.cluster_id,
                    TemperatureMeasurement.cluster_id,
                    RelativeHumidity.cluster_id,
                    0xfc03,
                ],
                OUTPUT_CLUSTERS: [3, 10, 25],
            },
        },
    }

    replacement = {
        ENDPOINTS: {
            1: {
                PROFILE_ID: 49353,
                DEVICE_TYPE: 1,
                INPUT_CLUSTERS: [
                    Identify.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            38: {
                PROFILE_ID: 260,
                DEVICE_TYPE: 770,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    PowerConfiguration.cluster_id,
                    Identify.cluster_id,
                    PollControl.cluster_id,
                    TemperatureMeasurement.cluster_id,
                    RelativeHumidity.cluster_id,
                    VOCMeasurement
                ],
                OUTPUT_CLUSTERS: [3, 10, 25],
            },
        },
    }

Hey!
I am trying to figure out the same thing. But AFAIK ZHA only exposes predefined cluster ids/attributes as sensors and does not allow custom ones. Also if I remember correctly there is a limitation in ZHA that you can not have multiple descriptors for the same endpoint (Can not find the link anymore).
Also note: You have to add ("frient A/S", "AQSZB-110") to the MODELS_INFO to make it fully compatible. At least frient A/S is the manufacturer my device returns.
That said, I found a workaround utilizing a sql-sensor:
sensor:
  - platform: sql
    db_url: sqlite:////config/zigbee.db
    scan_interval: 10
    queries:
      - name: VOC
        query: "SELECT value FROM attributes where ieee = '<device ieee address>' and cluster = 64515 and attrid = 0"
        column: "value"

That will create a new sensor and read the value from the DB.

Hello!
I did see that same page and I am tracking it to see when it gets resolved although I wasn't sure if it was quite the same issue or if there was a work around.
Mine is different in terms of the manufacturer and appears just like in my code, so it would appear there is slight differences there! Is yours rebranded or resold by anyone?
I saw that workaround but was reluctant to use it, although may give it a shot for now, thanks!

You are right. It seems these devices are sold from different companies.
Mine is this one: https://frient.com/products/air-quality-sensor/
I now also checked the develco product page and the device looks exactly the same.
Not sure about the rest:

Frient is a royal pain to pair initally with ZHA and raspbee2
It generates sensors for temp and humidity, a battery level sensor that always says "unknown %" and a non functioning on/off switch
After replacing batteries it will show max-values (255/25535) for temperature/humidity/VOC for a while before the values settle to a more realistic value (they then still need an hour to get somewhat close to reality)
Before using the quirk I actually got tons of communication errors in the zha logs and was barely able to fetch any cluster values in the cluster management (Not sure if this being fixed is really related to the quirk or repairing it 100 times tho).

With the manufacturer addition to the quirk and a change of PowerConfiguration.cluster_id to DevelcoPowerConfiguration (in the replacement) my device now works much better.
I guess we have to wait for ZHA/HASS to allow configuring custom sensors from arbitrary cluster attributes. Not sure why this is not possible in the first place 🤔.

Mine is (almost) direct from Develco, Develco appear to be a white label supplier of these devices that others resell. So good thing is, if we can get it working with the original Develco hardware, in theory it should be simple to get it working with any rebrands.
Hopefully some of the Devs can chime in on getting the attributes into HA when they have a moment, would be great to solve this one.
Will take a look at that link, thanks!

If I read the above link properly, I think it expects the VOC cluster to be on 0x042e where as the Develco VOC is reported on the Manufacturer Specific Cluster of 0xfc03, so perhaps that's why its not being picked up?
Is it possible to have it report on a different cluster ID somehow using the replace? I'm very new to writing quirks so may not be possible but hopefully you know what I mean!

@rampage128 Got it working, thanks to your link above!
I went in and manually modified the ZHA file on Home Assistant here: https://github.com/home-assistant/core/blob/7f309b4e6e4e8917f7a64521b1c86c5174bd3b29/homeassistant/components/zha/core/registries.py#L35
To read 0xfc03, repaired the device with a slightly modified quirk to the one above, and it now shows the VOC level perfectly. So that cluster ID is key.
Not sure how to make that work for everyone else though?
@Adminiuga sorry to ping you directly, would you have any input on how best to proceed with making this work for everyone else?

@EverythingSmartHome nice glad you got it working!
Would you share what you changed? I wrote a new quirk and managed to remap the cluster to the new ID. But I can not get it to show up as a sensor. Maybe we can combine our efforts and make the quirk work without having to change the core files.

@rampage128 Sure I would be happy too, how are you doing the remapping? That's the last piece of the puzzle I think, if you can let me know how to do that then I can post back the full completed quirk

I basically use the Bus functionality from the example in the README.md.
This is my quirk so far (based off of your initially posted version):
"""Develco Air Quality Sensor https://github.com/zigpy/zha-device-handlers/issues/995"""
from zigpy.profiles import zha
from zigpy.quirks import CustomCluster, CustomDevice
import zigpy.types as t
from zhaquirks import Bus, LocalDataCluster
from zigpy.zcl.clusters.general import (
    Basic,
    Identify,
    OnOff,
    Ota,
    PollControl,
    PowerConfiguration,
    Scenes,
    Time,
)
from zigpy.zcl.clusters.measurement import TemperatureMeasurement
from zigpy.zcl.clusters.measurement import RelativeHumidity

from zhaquirks.const import (
    DEVICE_TYPE,
    ENDPOINTS,
    INPUT_CLUSTERS,
    MODELS_INFO,
    OUTPUT_CLUSTERS,
    PROFILE_ID,
)
from zhaquirks.develco import DEVELCO, DevelcoPowerConfiguration

MANUFACTURER = 0x1015
VOC_MEASURED_VALUE = 0x0000
VOC_MIN_MEASURED_VALUE = 0x0001
VOC_MAX_MEASURED_VALUE = 0x0002
VOC_RESOLUTION = 0x0003

VOC_REPORTED = "voc_reported"
MIN_VOC_REPORTED = "min_voc_reported"
MAX_VOC_REPORTED = "max_voc_reported"
VOC_RESOLUTION_REPORTED = "voc_resolution_reported"

class DevelcoVOCInputCluster(CustomCluster):
    """Input Cluster to route manufacturer specific VOC cluster to actual VOC cluster."""

    cluster_id = 0xfc03
    manufacturer_attributes = {
        VOC_MEASURED_VALUE: ("measured_value", t.uint16_t),
        VOC_MIN_MEASURED_VALUE: ("min_measured_value", t.uint16_t),
        VOC_MAX_MEASURED_VALUE: ("max_measured_value", t.uint16_t),
        VOC_RESOLUTION: ("resolution", t.uint16_t)
    }

    def __init__(self, *args, **kwargs):
        """Init."""
        self._current_state = {}
        super().__init__(*args, **kwargs)

    def _update_attribute(self, attrid, value):
        super()._update_attribute(attrid, value)
        if attrid == VOC_MEASURED_VALUE and value is not None:
            self.endpoint.device.voc_bus.listener_event(VOC_REPORTED, value)
        if attrid == VOC_MIN_MEASURED_VALUE and value is not None:
            self.endpoint.device.voc_bus.listener_event(MIN_VOC_REPORTED, value)
        if attrid == VOC_MAX_MEASURED_VALUE and value is not None:
            self.endpoint.device.voc_bus.listener_event(MAX_VOC_REPORTED, value)
        if attrid == VOC_RESOLUTION and value is not None:
            self.endpoint.device.voc_bus.listener_event(VOC_RESOLUTION_REPORTED, value)

class VOCMeasurementCluster(LocalDataCluster):
    """VOC measurement cluster to receive reports from the Develco VOC cluster."""

    cluster_id = 0x042E
    name = "VOC Level"
    ep_attribute = "voc_level"
    manufacturer_attributes = {
        VOC_MEASURED_VALUE: ("measured_value", t.uint16_t),
        VOC_MIN_MEASURED_VALUE: ("min_measured_value", t.uint16_t),
        VOC_MAX_MEASURED_VALUE: ("max_measured_value", t.uint16_t),
        VOC_RESOLUTION: ("resolution", t.uint16_t)
    }
    MEASURED_VALUE_ID = 0x0000
    MIN_MEASURED_VALUE_ID = 0x0001
    MAX_MEASURED_VALUE_ID = 0x0002
    RESOLUTION_ID = 0x0003

    def __init__(self, *args, **kwargs):
        """Init."""
        super().__init__(*args, **kwargs)
        self.endpoint.device.voc_bus.add_listener(self)

    def voc_reported(self, value):
        """VOC reported."""
        self._update_attribute(self.MEASURED_VALUE_ID, value)

    def min_voc_reported(self, value):
        """Minimum Measured VOC reported."""
        self._update_attribute(self.MIN_MEASURED_VALUE_ID, value)

    def max_voc_reported(self, value):
        """Maximum Measured VOC reported."""
        self._update_attribute(self.MAX_MEASURED_VALUE_ID, value)

    def voc_resolution_reported(self, value):
        """VOC Resolution reported."""
        self._update_attribute(self.RESOLUTION_ID, value)

class AQSZB110(CustomDevice):
    """Custom device air quality sensor"""
    manufacturer_id_override = MANUFACTURER

    def __init__(self, *args, **kwargs):
        """Init."""
        self.voc_bus = Bus()
        super().__init__(*args, **kwargs)

    signature = {
        # <SimpleDescriptor endpoint=1 profile=49353 device_type=1 device_version=1
        # input_clusters=[3, 5, 6] output_clusters=[]>
        # <SimpleDescriptor endpoint=38 profile=260 device_type=770 device_version=0
        # input_clusters=[0, 1, 3, 32, 1026, 1029, 64515, 1070] output_clusters=[3, 10, 25]>
        MODELS_INFO: [
            (DEVELCO, "AQSZB-110"),
            ("frient A/S", "AQSZB-110"),
        ],
        ENDPOINTS: {
            1: {
                PROFILE_ID: 49353,
                DEVICE_TYPE: 1,
                INPUT_CLUSTERS: [
                    Identify.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            38: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.TEMPERATURE_SENSOR,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    PowerConfiguration.cluster_id,
                    Identify.cluster_id,
                    PollControl.cluster_id,
                    TemperatureMeasurement.cluster_id,
                    RelativeHumidity.cluster_id,
                    0xfc03,
                ],
                OUTPUT_CLUSTERS: [Identify.cluster_id, Time.cluster_id, Ota.cluster_id],
            },
        },
    }

    replacement = {
        ENDPOINTS: {
            1: {
                PROFILE_ID: 49353,
                DEVICE_TYPE: 1,
                INPUT_CLUSTERS: [
                    Identify.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            38: {
                PROFILE_ID: 260,
                DEVICE_TYPE: 770,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    DevelcoPowerConfiguration,
                    Identify.cluster_id,
                    PollControl.cluster_id,
                    TemperatureMeasurement.cluster_id,
                    RelativeHumidity.cluster_id,
                    DevelcoVOCInputCluster,
                    VOCMeasurementCluster,
                ],
                OUTPUT_CLUSTERS: [Identify.cluster_id, Time.cluster_id, Ota.cluster_id],
            },
        },
    }

Nice, it works! I'd actually tried using the bus on one of my many failed attempts but that was before I knew the correct cluster ID to use that has the VOC level sensor. This is now working fully for me and shows up as a sensor without any changes to the HA files:
"""Develco Air Quality Sensor"""
from zigpy.profiles import zha
from zigpy.quirks import CustomCluster, CustomDevice
import zigpy.types as t
from zhaquirks import Bus, LocalDataCluster
from zigpy.zcl.clusters.general import (
    Basic,
    BinaryInput,
    Identify,
    OnOff,
    Ota,
    PollControl,
    PowerConfiguration,
    Scenes,
    Time,
)
from zigpy.zcl.clusters.measurement import TemperatureMeasurement
from zigpy.zcl.clusters.measurement import RelativeHumidity
from zigpy.zcl.clusters.manufacturer_specific import ManufacturerSpecificCluster
from zigpy.zcl.clusters.security import IasZone

from zhaquirks.const import (
    DEVICE_TYPE,
    ENDPOINTS,
    INPUT_CLUSTERS,
    MODELS_INFO,
    OUTPUT_CLUSTERS,
    PROFILE_ID,
)
from zhaquirks.develco import DEVELCO, DevelcoPowerConfiguration

MANUFACTURER = 0x1015
VOC_MEASURED_VALUE = 0x0000
VOC_MIN_MEASURED_VALUE = 0x0001
VOC_MAX_MEASURED_VALUE = 0x0002
VOC_RESOLUTION = 0x0003

VOC_REPORTED = "voc_reported"
MIN_VOC_REPORTED = "min_voc_reported"
MAX_VOC_REPORTED = "max_voc_reported"
VOC_RESOLUTION_REPORTED = "voc_resolution_reported"

class VOCMeasurement(CustomCluster, ManufacturerSpecificCluster):
    cluster_id = 0xfc03
    name = "VOC Level"
    ep_attribute = "voc_level"
    manufacturer_attributes = {
        VOC_MEASURED_VALUE: ("measured_value", t.uint16_t),
        VOC_MIN_MEASURED_VALUE: ("min_measured _value", t.uint16_t),
        VOC_MAX_MEASURED_VALUE: ("max_measured_value", t.uint16_t),
        VOC_RESOLUTION: ("tolerance", t.uint16_t)
    }
    server_commands = {}
    client_commands = {}

    def __init__(self, *args, **kwargs):
        """Init."""
        self._current_state = {}
        super().__init__(*args, **kwargs)

    def _update_attribute(self, attrid, value):
        super()._update_attribute(attrid, value)
        if attrid == VOC_MEASURED_VALUE and value is not None:
            self.endpoint.device.voc_bus.listener_event(VOC_REPORTED, value)
        if attrid == VOC_MIN_MEASURED_VALUE and value is not None:
            self.endpoint.device.voc_bus.listener_event(MIN_VOC_REPORTED, value)
        if attrid == VOC_MAX_MEASURED_VALUE and value is not None:
            self.endpoint.device.voc_bus.listener_event(MAX_VOC_REPORTED, value)
        if attrid == VOC_RESOLUTION and value is not None:
            self.endpoint.device.voc_bus.listener_event(VOC_RESOLUTION_REPORTED, value)

class VOCMeasurementCluster(LocalDataCluster):
    """VOC measurement cluster to receive reports from the Develco VOC cluster."""

    cluster_id = 0x042E
    name = "VOC Level"
    ep_attribute = "voc_level"
    manufacturer_attributes = {
        VOC_MEASURED_VALUE: ("measured_value", t.uint16_t),
        VOC_MIN_MEASURED_VALUE: ("min_measured_value", t.uint16_t),
        VOC_MAX_MEASURED_VALUE: ("max_measured_value", t.uint16_t),
        VOC_RESOLUTION: ("tolerance", t.uint16_t)
    }
    MEASURED_VALUE_ID = 0x0000
    MIN_MEASURED_VALUE_ID = 0x0001
    MAX_MEASURED_VALUE_ID = 0x0002
    RESOLUTION_ID = 0x0003

    def __init__(self, *args, **kwargs):
        """Init."""
        super().__init__(*args, **kwargs)
        self.endpoint.device.voc_bus.add_listener(self)

    def voc_reported(self, value):
        """VOC reported."""
        self._update_attribute(self.MEASURED_VALUE_ID, value)

    def min_voc_reported(self, value):
        """Minimum Measured VOC reported."""
        self._update_attribute(self.MIN_MEASURED_VALUE_ID, value)

    def max_voc_reported(self, value):
        """Maximum Measured VOC reported."""
        self._update_attribute(self.MAX_MEASURED_VALUE_ID, value)

    def voc_resolution_reported(self, value):
        """VOC Resolution reported."""
        self._update_attribute(self.RESOLUTION_ID, value)

    # def _update_attribute(self, attrid, value):
    #     super()._update_attribute(attrid, value)

class AQSZB110(CustomDevice):
    """Custom device air quality sensor"""
    manufacturer_id_override = MANUFACTURER

    def __init__(self, *args, **kwargs):
        """Init."""
        self.voc_bus = Bus()
        super().__init__(*args, **kwargs)

    signature = {
        # <SimpleDescriptor endpoint=1 profile=49353 device_type=1 device_version=1
        # input_clusters=[3, 5, 6] output_clusters=[]>
        # <SimpleDescriptor endpoint=38 profile=260 device_type=770 device_version=0
        # input_clusters=[0, 1, 3, 32, 1026, 1029, 64515] output_clusters=[3, 10, 25]>
        MODELS_INFO: [(DEVELCO, "AQSZB-110"), ("frient A/S", "AQSZB-110")],
        ENDPOINTS: {
            1: {
                PROFILE_ID: 49353,
                DEVICE_TYPE: 1,
                INPUT_CLUSTERS: [
                    Identify.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            38: {
                PROFILE_ID: 260,
                DEVICE_TYPE: 770,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    PowerConfiguration.cluster_id,
                    Identify.cluster_id,
                    PollControl.cluster_id,
                    TemperatureMeasurement.cluster_id,
                    RelativeHumidity.cluster_id,
                    0xfc03,
                ],
                OUTPUT_CLUSTERS: [3, 10, 25],
            },
        },
    }

    replacement = {
        ENDPOINTS: {
            1: {
                PROFILE_ID: 49353,
                DEVICE_TYPE: 1,
                INPUT_CLUSTERS: [
                    Identify.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            38: {
                PROFILE_ID: 260,
                DEVICE_TYPE: 770,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    DevelcoPowerConfiguration,
                    Identify.cluster_id,
                    PollControl.cluster_id,
                    TemperatureMeasurement.cluster_id,
                    RelativeHumidity.cluster_id,
                    VOCMeasurement,
                    VOCMeasurementCluster,
                ],
                OUTPUT_CLUSTERS: [3, 10, 25],
            },
        },
    }```

One final issue - it won't automatically poll the VOCMeasurement cluster now, it will only trigger an update if I go into manage clusters and ask for it, meaning the bus value isn't being updated.
Thoughts? We are so close!

Yeah I noticed that too. But that has to be an issue of the develco somehow. It should report the value periodically and when it is reported, it should update the cluster and the bus. Probably we somehow have to tell it to enable reporting for that custom cluster. But I am at a loss on how to do that.
BTW I can not get HASS to show a sensor for the VOC value in my installation. I am running Core 2021.7.4 ... maybe I need to update 🤔

Yeah I noticed that too. But that has to be an issue of the develco somehow. It should report the value periodically and when it is reported, it should update the cluster and the bus. Probably we somehow have to tell it to enable reporting for that custom cluster. But I am at a loss on how to do that.
BTW I can not get HASS to show a sensor for the VOC value in my installation. I am running Core 2021.7.4 ... maybe I need to update 🤔
EDIT: I updated my HA installation and now the sensor shows up. We also have to recalculate the value. develco outputs ppb (parts per billion). HA wants µg/m³, which is a funny unit for something that consists of many different particles of various molar masses.

I'm not sure its that because previously when I edited the HA files to look at the 0xfc03 cluster directly, the value updated every 2 minutes as per the spec. Will keep digging!
Yes you need to update as you found because the VOC sensor was only added in 2021.8, glad you got it.
Yes, all you need to do is divide by a million in order to cancel out the original multiplication that was done in the PR.

Default reporting is set to Min reporting interval: 60 sec
Max reporting interval: 600 sec
Reportable Change: 10 ppb
If the VOC value is stable it will be sent every 10 minutes.
If the VOC changes more than 10 ppb it will be reported but not faster than every 1 minute since last reporting
value.

The above quote is from the technical documentation of the AQSZB-110. So technically it should work out of the box. The thing is that my device does not send the VOC on it's own at all. At least I find nothing in the zha logs.

Yes, all you need to do is divide by a million in order to cancel out the original multiplication that was done in the PR.

That would not be right. To get the mg/m³ of the ppb value you need to divide the mass by the volume of the particles. With VOC this is not exactly possible because the different particles measured have a wide spectrum of masses/volumes. I am currently researching if there is some approximation table to do a conversion. Only thing I could find is a ranged conversion table by the german government, which unfortunately does not have a single conversion but converts to different ranges based on ppb ranges which would give 6 different conversion factors.

Yes it technically should, it worked as I say when I modified the cluster ID that HA was looking for and was reporting perfectly, so not sure why it won't when we remap the cluster ID.
I wasn't saying that dividing by 1 million is the correct calculation, I'm saying that the raw value retrieved from the VOC sensor is already in PPB, but if we take a look at the code here

class VOCLevel(Sensor):
"""VOC Level sensor."""

SENSOR_ATTR = "measured_value"
_decimals = 0
_multiplier = 1e6
_unit = CONCENTRATION_MICROGRAMS_PER_CUBIC_METER

That the HA code is applying multiplication to our already correct value (the raw value is already correct, it doesn't need anything doing to it) and multiplying it by 1 million (1e6), so we can simply reverse this by dividing by 1 million.
Hopefully that makes sense and I am not missing something?

I guess regarding the unit we are talking about different things. I am not trying to display the ppb, but I want to convert it to ug/m³ because that is what home-assistant shows as unit of measurement for the sensor. Even without the conversion the sensor does, the value shown (ppb) would not match the shown unit of measurement (ug/m³).
But I digress. Let's focus on the refreshing issue of the value:
I am walking out on a limb here, but my guess as to why it worked when you changed the clusterID of the sensor is probably because HA does an active polling of the cluster (basically doing the "get zigbee attribute" call in the background periodically). Now that we use the proper cluster ID with the bus, the HA sensor is polling the clusterID (0x042e)... but that clusterID will not actually be requested from the develco, but instead it is a cached value from the Bus we set up.
If I am right with that assumption, we somehow would have to tell the VOCMeasurementCluster that it has to poll the VOCMeasurement whenever it is polled. Or maybe we can set up a timer in the AQSZB110 class that will poll the 0xfc03 cluster periodically. I will check if there is any other quirk doing something like that.

Agree!
Tried lots of things so far, no luck. I don't understand why other quirks I look at that use the bus function don't seem to have this problem.

I do not know. Maybe zha is not relaying the reported values without an active sensor from home-assistant. Or maybe the develco device is just not reporting any values at all.
I disabled all my other zigbee devices and let the zha debug log run for a couple of hours. And it does never mention a reporting for anything on the develco.
If I am not mistaken the logs should give an entry if a device actively reports a value. At least that happens for my lightbulbs when they report their state.
On the other hand ... I can also not see any polling occuring on the temperature or humidity... It just works and the zha logs do not contain anything about it.

Good morning. I have been working on the Quirk last night and finally got it to work including proper updates, unit conversion and validation!
The VOC is now auto-reported as defined in the Spec for me: Changes over threshold each minute and changes below/no changes every 10 minutes.

Would you test and confirm if that quirk below does work and update for you too (Explanation of all changes after it)?
"""Develco Air Quality Sensor https://github.com/zigpy/zha-device-handlers/issues/995"""
import logging
from zigpy.profiles import zha
from zigpy.quirks import CustomCluster, CustomDevice
import zigpy.types as t
from zhaquirks import Bus, LocalDataCluster
from zigpy.zcl.clusters.general import (
    Basic,
    Identify,
    OnOff,
    Ota,
    PollControl,
    PowerConfiguration,
    Scenes,
    Time,
)
from zigpy.zcl.clusters.measurement import TemperatureMeasurement
from zigpy.zcl.clusters.measurement import RelativeHumidity
from zigpy.zcl import Cluster

from zhaquirks.const import (
    DEVICE_TYPE,
    ENDPOINTS,
    INPUT_CLUSTERS,
    MODELS_INFO,
    OUTPUT_CLUSTERS,
    PROFILE_ID,
)
from zhaquirks.develco import DEVELCO, DevelcoPowerConfiguration

MANUFACTURER = 0x1015
VOC_MEASURED_VALUE = 0x0000
VOC_MIN_MEASURED_VALUE = 0x0001
VOC_MAX_MEASURED_VALUE = 0x0002
VOC_RESOLUTION = 0x0003

VOC_REPORTED = "voc_reported"
MIN_VOC_REPORTED = "min_voc_reported"
MAX_VOC_REPORTED = "max_voc_reported"
VOC_RESOLUTION_REPORTED = "voc_resolution_reported"

_LOGGER = logging.getLogger(__name__)

class DevelcoVOCMeasurement(CustomCluster):
    """Input Cluster to route manufacturer specific VOC cluster to actual VOC cluster."""

    cluster_id = 0xfc03
    name = "VOC Level"
    ep_attribute = "voc_level"
    manufacturer_attributes = {
        VOC_MEASURED_VALUE: ("measured_value", t.uint16_t),
        VOC_MIN_MEASURED_VALUE: ("min_measured_value", t.uint16_t),
        VOC_MAX_MEASURED_VALUE: ("max_measured_value", t.uint16_t),
        VOC_RESOLUTION: ("resolution", t.uint16_t)
    }
    server_commands = {}
    client_commands = {}

    def __init__(self, *args, **kwargs):
        """Init."""
        self._current_state = {}
        super().__init__(*args, **kwargs)
        self.endpoint.device.app_cluster = self

    def _update_attribute(self, attrid, value):
        super()._update_attribute(attrid, value)
        if attrid == VOC_MEASURED_VALUE and value is not None:
            self.endpoint.device.voc_bus.listener_event(VOC_REPORTED, value)
        if attrid == VOC_MIN_MEASURED_VALUE and value is not None:
            self.endpoint.device.voc_bus.listener_event(MIN_VOC_REPORTED, value)
        if attrid == VOC_MAX_MEASURED_VALUE and value is not None:
            self.endpoint.device.voc_bus.listener_event(MAX_VOC_REPORTED, value)
        if attrid == VOC_RESOLUTION and value is not None:
            self.endpoint.device.voc_bus.listener_event(VOC_RESOLUTION_REPORTED, value)
        _LOGGER.debug(
            "%s Develco VOC : [%s]",
            self.endpoint.device.ieee,
            self._attr_cache,
        )

class DevelcoRelativeHumidity(RelativeHumidity):
    def _update_attribute(self, attrid, value):
        # Drop values out of specified range (0-100% RH)
        if (0 <= value <= 10000):
            super()._update_attribute(attrid, value)
        _LOGGER.debug(
            "%s Develco Humidity : [%s]",
            self.endpoint.device.ieee,
            self._attr_cache,
        )

class DevelcoTemperatureMeasurement(TemperatureMeasurement):
    def _update_attribute(self, attrid, value):
        # Drop values out of specified range (0-50°C)
        if (0 <= value <= 5000):
            super()._update_attribute(attrid, value)
        _LOGGER.debug(
            "%s Develco Temperature : [%s]",
            self.endpoint.device.ieee,
            self._attr_cache,
        )

class EmulatedVOCMeasurement(LocalDataCluster):
    """VOC measurement cluster to receive reports from the Develco VOC cluster."""

    cluster_id = 0x042E
    name = "VOC Level"
    ep_attribute = "voc_level"
    manufacturer_attributes = {
        VOC_MEASURED_VALUE: ("measured_value", t.uint16_t),
        VOC_MIN_MEASURED_VALUE: ("min_measured_value", t.uint16_t),
        VOC_MAX_MEASURED_VALUE: ("max_measured_value", t.uint16_t),
        VOC_RESOLUTION: ("resolution", t.uint16_t)
    }
    MEASURED_VALUE_ID = 0x0000
    MIN_MEASURED_VALUE_ID = 0x0001
    MAX_MEASURED_VALUE_ID = 0x0002
    RESOLUTION_ID = 0x0003

    def __init__(self, *args, **kwargs):
        """Init."""
        super().__init__(*args, **kwargs)
        self.endpoint.device.voc_bus.add_listener(self)

    async def bind(self):
        """Bind cluster."""
        result = await self.endpoint.device.app_cluster.bind()
        return result

    async def write_attributes(self, attributes, manufacturer=None):
        """Ignore write_attributes."""
        return (0,)

    def _update_attribute(self, attrid, value):
        # Drop values out of specified range (0-60000 ppb)
        if (0 <= value <= 60000):
            # Convert ppb into mg/m³ approximation according to develco spec
            value = value * 0.0000045
            super()._update_attribute(attrid, value)

    def voc_reported(self, value):
        """VOC reported."""
        self._update_attribute(self.MEASURED_VALUE_ID, value)

    def min_voc_reported(self, value):
        """Minimum Measured VOC reported."""
        self._update_attribute(self.MIN_MEASURED_VALUE_ID, value)

    def max_voc_reported(self, value):
        """Maximum Measured VOC reported."""
        self._update_attribute(self.MAX_MEASURED_VALUE_ID, value)

    def voc_resolution_reported(self, value):
        """VOC Resolution reported."""
        self._update_attribute(self.RESOLUTION_ID, value)

class AQSZB110(CustomDevice):
    """Custom device air quality sensor"""
    manufacturer_id_override = MANUFACTURER

    def __init__(self, *args, **kwargs):
        """Init."""
        self.voc_bus = Bus()
        super().__init__(*args, **kwargs)

    signature = {
        # <SimpleDescriptor endpoint=1 profile=49353 device_type=1 device_version=1
        # input_clusters=[3, 5, 6] output_clusters=[]>
        # <SimpleDescriptor endpoint=38 profile=260 device_type=770 device_version=0
        # input_clusters=[0, 1, 3, 32, 1026, 1029, 64515] output_clusters=[3, 10, 25]>
        MODELS_INFO: [
            (DEVELCO, "AQSZB-110"),
            ("frient A/S", "AQSZB-110"),
        ],
        ENDPOINTS: {
            1: {
                PROFILE_ID: 0xC0C9,
                DEVICE_TYPE: 1,
                INPUT_CLUSTERS: [
                    Identify.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            38: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.TEMPERATURE_SENSOR,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    PowerConfiguration.cluster_id,
                    Identify.cluster_id,
                    PollControl.cluster_id,
                    TemperatureMeasurement.cluster_id,
                    RelativeHumidity.cluster_id,
                    0xFC03,
                ],
                OUTPUT_CLUSTERS: [Identify.cluster_id, Time.cluster_id, Ota.cluster_id],
            },
        },
    }

    replacement = {
        ENDPOINTS: {
            1: {
                PROFILE_ID: 0xC0C9,
                DEVICE_TYPE: 1,
                INPUT_CLUSTERS: [
                    Identify.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            38: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.TEMPERATURE_SENSOR,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    DevelcoPowerConfiguration,
                    Identify.cluster_id,
                    PollControl.cluster_id,
                    DevelcoTemperatureMeasurement,
                    DevelcoRelativeHumidity,
                    DevelcoVOCMeasurement,
                    EmulatedVOCMeasurement,
                ],
                OUTPUT_CLUSTERS: [Identify.cluster_id, Time.cluster_id, Ota.cluster_id],
            },
        },
    }

DevelcoVOCMeasurement:

Changed the naming to include the Manufacturer name, because this is standard for all quirks I checked so far to include it on source clusters or custom manufacturer clusters.
Added setting app_cluster in the device to self (More in the EmulatedVOCMeasurement)
Added a debug logging statement in the _update_attribute method

DevelcoRelativeHumidity

Added as replacement for humidity readings to do value validation. Range of sensor is 0% RH - 100% RH. Other quirks do this everywhere to limit the value reporting to the range of the device specification or at least to drop non-sane values.
Naming is again containing the Manufacturer name to make the naming pattern consistent.
Added a debug logging statement in the _update_attribute method

DevelcoTemperatureMeasurement

Added as replacement for temperature readings to do value validation. Range of sensor is 0°C - 50°C.
Added a debug logging statement in the _update_attribute method

EmulatedVOCMeasurement

Changed name to indicate that this is an Emulated default cluster. See Waxman leaksmart quirk, which remaps cluster data in a very similar way to this quirk.
Added bind method, to allow binding of this cluster. I guess this is what does the magic, since it enables binding for me and when binding binds itself to the app_cluster set in the device, which is the DevelcoVOCMeasurement. This also comes from the Waxman leaksmart quirk.
Added write-attributes method to drop write attribute commands. Thought it could not do harm for an "emulated cluster" to do this.
Added validation to the value range. Range of sensor is 0 ppb - 60000 ppb.
Added conversion from ppb to mg/m³. I have done some test calculations with the reference VOC table in the Develco spec and found that they use a factor of approximately 4.5 to convert from ppb to ug/m³. Now the VOC sensor already multiplies by 1e6 and my guess is it does that because it expects all devices to return the official standard unit for VOC, which is mg/m³. So I have done that by using a factor of 0.0000045 instead. Now the ppb converts almost bang on to a ug/m³ value from their table.

More on validation
The way the validation works is that it omits the call to self._update_attribute() if the value is out of range. This means illegal values get dropped. I am not entirely happy with that because it renders the device "stuck" (not updating any values) for 15 minutes after replacing the batteries. Originally I thought about reporting 0 as a default value, so the user can at least see that the device is not producing any readings but is still updating (working). But all other quirks do drop invalid values, so I followed the "standard".

I think we are ready for a PR draft 😅

@rampage128 Excellent work, it works great! Well done!
I tried the binding yesterday because I also found the Waxman quirk, but it didn't work for me at the time, but guessing I did something else wrong. Anyways, fantastic work!

I am happy to if you want me to or feel free, I have been working on writing quirks for all the Develco devices so will get PR's for them too.

@rampage128 I have went ahead and create the PR here

Currently, it is partly working, (Temperature and Humidity are displayed but Battery and VOC are not)
But there is already a new issue for this:
#1273


Semi-colons not rendering in both inline and block statements

I am using v2.8 of the wordpress plugin and have dropped in the latest version of EnlighterJS, v2.8 (I noticed the plugin was still using EnlighterJS v2.7). The examples below are all using lang="java" however I have verified the same also happens for lang="php"
The following snippets aren't rendering the final semi-colon.
This is an [java]"inline";[/java] string.

[java]
"string";

[/java]

The following does seem to work, so it seems to only occur if the semi-colon is the last character. Spaces and tabs (but not newlines) causes the semi-colon to print.
This is an [java]"inline;" [/java] string.

[java]
"string";
a
[/java]

Hope this helps. If you have ideas where the issue is I can have a look at fixing it.

Dear dan-j,
thanks for your report.
i can only reproduce this behaviour using inline code - it works fine on codeblocks.
do you have an example/demo page which shows the issue ?

I'm currently just creating a Wordpress site locally that I'm not hosting yet. I'll look into it again tonight and see if I can get an example somewhere.
Cheers
Sent from my iPhone

On 5 Aug 2015, at 09:11, Andi Dittrich<EMAIL_ADDRESS>wrote:
Dear dan-j,
thanks for your report.
i can only reproduce this behaviour using inline code - it works fine on codeblocks.
do you have an example/demo page which shows the issue ?
—
Reply to this email directly or view it on GitHub.

i've localized the issue: It's an (hopefully final) bug within the EnlighterJS Tokenizer Engine.
It only appears on a single "non-token" character as last element.
i will fix it with EnlighterJS v2.8.1 in the next hours

Ah that's good. Look forward to seeing it.
Sent from my iPhone

On 5 Aug 2015, at 09:24, Andi Dittrich<EMAIL_ADDRESS>wrote:
i've localized the issue: It's an (hopefully final) bug within the EnlighterJS Tokenizer Engine.
It only appears on a single "non-token" character as last element.
i will fix it with EnlighterJS v2.8.1 in the next hours
—
Reply to this email directly or view it on GitHub.

EnlighterJS v2.9.0 is out including the fix - i'm currently woriking on the WordPress plugin to update it asap

Enlighter 2.9 for WordPress has been released including the fix.


Disable JSON CSRF protection to allow requests with Referrer set and provide JSON response

When requesting JSON components, a 403 is provided for them as Sinatra changes the status to this after rendering the JSON component due to the Referer being set.

http://www.rubydoc.info/gems/rack-protection/1.5.2/Rack/Protection/JsonCsrf

Setting CSRF protection to false fixes this.
https://jira.dev.bbc.co.uk/browse/RESFRAME-1167

@ettomatic, can you review this please.

I see the point so 👍
Maybe I'd add a specific tests that just describe the problem you're solving, just for the future is someone removes the set :protection, except: :json_csrf

@ettomatic, how about now?


Error 400 about  _typename social media block the Tier edition

Describe the bug
Try to add or delete a "tier". When a I clic on save, I have a 400 error with no more info. If I look to the network, I see the error in the response:
{"errors":[{"message":"Variable \"$collective\" got invalid value { __typename: \"SocialLink\", type: \"WEBSITE\", url: \"https://mosquito-velomobiles.org/\" } at \"collective.socialLinks[0]\"; Field \"__typename\" is not defined by type \"SocialLinkInput\".","locations":[{"line":1,"column":25}],"extensions":{"code":"BAD_USER_INPUT"}},{"message":"Variable \"$collective\" got invalid value { __typename: \"SocialLink\", type: \"GITHUB\", url: \"https://github.com/MoquitoOS\" } at \"collective.socialLinks[1]\"; Field \"__typename\" is not defined by type \"SocialLinkInput\".","locations":[{"line":1,"column":25}],"extensions":{"code":"BAD_USER_INPUT"}},{"message":"Variable \"$collective\" got invalid value { __typename: \"SocialLink\", type: \"DISCORD\", url: \"https://discord.gg/************" } at \"collective.socialLinks[2]\"; Field \"__typename\" is not defined by type \"SocialLinkInput\".","locations":[{"line":1,"column":25}],"extensions":{"code":"BAD_USER_INPUT"}}]}

To be able to delete the tier, I add to delete all my social links before, delete de tier then re-add the social media links.
To Reproduce
Steps to reproduce the behavior:

Go to your collective settings
Click on on tiers and add a new tier
fill the form and clic on save
See error 400

Expected behavior
Should save as normal, or at least have an explicit error
Screenshots

Desktop:

OS: Windows 10
Browser Chrome and Edge

Additional context

Triage Template (core team only)
This template is for members of the team to triage for prioritisation. For more guidance see https://www.loom.com/share/369ab467fbc64dec848085d38ff57ca0:
P1 high frequency, high impact
P2 low frequency, high impact
P3 high frequency, low impact
P4 low frequency, low impact
Examples of high impact - a problem affects users during an essential process (expenses and payments > onboarding and registration > contributing) with no workaround.
High frequency - >10% of users affected (measured as a proportion of total potential users for this case).

It seems liked to #6294

Working on it @dsmrs


Implement vscode-file:// support and drop node.js for window loading

Continuation of https://github.com/microsoft/vscode/pull/101837
Fixes #98682
Open issues:

[x] Testing
[ ] UNC support (related: https://github.com/electron/electron/issues/25618)
[ ] V8 cached options support (needs Electron fix)
[ ] Startup Perf validation
[ ] Selfhosting

After a bit more investigation who is depending on file protocol, I found this place to follow up:

markdownRenderer.ts: @mjbvz are you the owner? I see a few Schemas.file references and wonder if we need to look into it. We seem to be allowing file paths in markdown but I am not sure who is crafting these. Some clients seem to be custom hover, notebooks, comments.

@mjbvz ok, this will no longer work once we enable to block file requests. I gave it a quick try with putting vscode-file URI instead but that was also not working, so I wonder where we actually convert that into HTML and if possibly that scheme is not allowed?

@bpasero Yes we limit the allowed scheme in a few places:

When parsing the markdown: https://github.com/microsoft/vscode/blob/ee8378e8066a70092f773f589b29a4a272a41636/src/vs/base/browser/markdownRenderer.ts#L218
Also potentially in https://github.com/microsoft/vscode/blob/ee8378e8066a70092f773f589b29a4a272a41636/src/vs/base/browser/markdownRenderer.ts#L113

In the command handlers: https://github.com/microsoft/vscode/blob/f17d014457a3f7c1785e25e8f2a9d0b092692d3b/src/vs/workbench/services/hover/browser/hoverWidget.ts#L86

I just noticed that on Windows, when you cd into a UNC path via PowerShell and you try to run code or code-insiders, Windows will leave the UNC path to a non-UNC path because *.cmd do not support UNC paths. So we maybe OK here to proceed even if UNC paths fail. The only situation where VSCode would fail to start from UNC path is if someone was to start our exe directly.

This PR is replaced by https://github.com/microsoft/vscode/commit/169a0ec047fe3ac76821af968cde91ff04cedd95 which gives us a way to enable vscode-file protocol in selfhost via:

either setting export ENABLE_VSCODE_BROWSER_CODE_LOADING=bypassHeatCheck
or argv.json entry: "enable-browser-code-loading": "bypassHeatCheck"

Other supported values are: 'none' | 'code' | 'bypassHeatCheck' | 'bypassHeatCheckAndEagerCompile'
I have enabled bypassHeatCheck for process explorer and issue reporter who were already using sandbox and vscode-file.
Turning this on by default is still blocked by https://github.com/electron/electron/issues/27075

This PR is replaced by https://github.com/microsoft/vscode/commit/169a0ec047fe3ac76821af968cde91ff04cedd95 which gives us a way to enable vscode-file protocol in selfhost via:

either setting export ENABLE_VSCODE_BROWSER_CODE_LOADING=bypassHeatCheck
or argv.json entry: "enable-browser-code-loading": "bypassHeatCheck"

Other supported values are: 'none' | 'code' | 'bypassHeatCheck' | 'bypassHeatCheckAndEagerCompile'
I have enabled bypassHeatCheck for process explorer and issue reporter who were already using sandbox and vscode-file.
Turning this on by default is still blocked by https://github.com/electron/electron/issues/27075


from raw to dsp

Removed raw files (but still needed for creating detector maps with orca/string info)

Problems in pre-commit refer to commented functions (left there for tests)


Update egulias/email-validator to V3.1.1

Update egulias/email-validator 2.1.25 -> 3.1.1
swiftmailer/swiftmailer is ready for version 3.
Breacking changes see https://github.com/egulias/EmailValidator/releases/tag/3.0.0

Have you checked merged PR to master?

https://github.com/laravel/framework/pull/36525

Sorry, my mistake I have not checked the master branch. This PR is unnecessary.
Closed.


SIGABRT and updates from main

@LeStarch what should we do with this PR?
https://github.com/nasa/fprime/pull/2858 was closed without merging


aiven_project resource working differently to console

I raised this on intercom support but I thought I'd mention this behavior here. We are using the terraform provider to provision projects and I noticed some weird behavior.
I created a project using the resource as follows
resource "aiven_project" "project" {
  project = "my-project"
}

and then subsequently referenced that project in other resources. The initial project creation succeeded but the other resources referencing this resource failed with:
Error: 403: {"errors":[{"message":"Not a project member","status":403}],"message":"Not a project member"} -

I retried the apply and then it failed during state refresh with the same error. I also can't see the project I allegedly created on the console.
When creating a project on the console, the first time it's created, the currently logged in user is associated against it as an admin, but it seems in terraform a project is created without any user attached. So:

Is this a bug with the provider? Should it mimick what the console does and associate an initial user as admin?
Or is the recommendation to precreate projects in the console and reference them with data blocks? I'm basing this option on the sample project also using a data block to get the project reference.
Or is it a transient bug in the backend that I was unlucky to run into?

Quick update: I messed around with my terraform more and it seemed I accidentally created a project called development not realising that it was a global namespace. Once I fixed the name it worked fine...
I think the issue is that the project already existed in the global namespace and terraform automatically imported it and then tried to create the subsequent resources against that project I didn't have access to... in which case that might a the bug.

Hi, Aiven error Not a project member HTTP 403 indicates that such operation with the project is forbidden. It has something to do with user access and ACLs.
I'm closing this issue, but if you still can reproduce this issue, please reopen it with more details.


Zoom state gets reset on refresh/reopen

hi Peter,
When reopening a flow or refresh the window the zoomed state gets lost. This makes the functionality less usable. It would be nice if we could save that state.

Added support for remembering scroll and zoom state: https://github.com/totaljs/flowstreamdesigner/commit/a1bba799c7b5c247a929ec35a6e4c32bb3a8ca0e


Functionality to create FormData objects.

Moving ability to create FormData objects here as per slamdata/purescript-affjax#57.

Thanks!
We could probably do a little internal cheating here to avoid the need to implement append with all of its various types in the FFI:

We could have an unexported foreign import data FormDataBox :: *
and unexported foreign import appendImpl :: FormData -> String -> FormDataBox -> String -> Unit
and then use appendImpl for any of the acceptable values, using unsafeCoerce to go from Blob, String, etc. to FormDataBox.

Or even just type appendImpl as forall a. FormData -> String -> a -> String -> Unit perhaps.
I'd also like to suggest we provide fromFoldable :: forall f. (Foldable f) => f (Tuple String FormDataValue) -> FormData instead of having toFormData specialised to Array, as that way it will also work for List, etc.

Oh, whoops, I just noticed that the appends are not all equivalent in their arguments. In that case, perhaps there's an appendWithName or something to handle the Blob/File case, with the above suggestion to avoid having to implement multiply.

No problem! I think my last commit should address your suggestions. Let me know if you think of anything else.

That was fast :smile:
Thanks again! Sorry it took so long to get to this point from your initial PR.


License missing

Just so you know, because you're not publishing a license, I break the law in most countries by using your code.
Thanks anyway :-)

Thanks for reporting. Should be all set now. I used the same license as found in moment core.

Great, thanks!

package.json, component.json, and bower.json still incorrectly state "license": "BSD-2-Clause",. instead of MIT.


Pub/Sub on failures must return ApiException and not io.grpc.StatusRuntimeException

Currently, the following code on publishing to a non-existent topic returns io.grpc.StatusRuntimeException instead of an ApiException.
ApiFuture<String> future = publishMessage(publisher, "message");
ApiFutures.addCallback(future, new ApiFutureCallback<String>() {
    @Override
    public void onFailure(Throwable throwable) {
        if (throwable instanceof ApiException) {
         ApiException apiException = (ApiException) throwable;
         System.out.println("Error publishing message : " + apiException.getStatusCode());
       }
   }

   @Override
   public void onSuccess(String s) {
       System.out.println("Message published with ID : " + s);
   }
 });

This needs to be fixed before GA. BTW, switching to the GAPIC client would fix this.

What do you mean switching to GAPIC clients though ?
I thought the Publisher / Subscriber is what we expect users to always use to publish / subscribe ?

I mean using the GAPIC client in the implementation instead of the generated grpc stub.

Closing, realized the issue I wanted to file is related but is a GAX bug.


Test issue tracker CI

Description

Expected behavior

Environment
Go Version:

Docker Machine version:

Docker Machine Driver Ionos Cloud version:

OS:

Configuration Files

How to Reproduce

Error and Debug Output

Additional Notes

References

Finished testing. Ignore this issue.


Implement a "detached" version of sss_create_shares

For performance reasons you may want to generate a lot of sss_Shares, but write the ciphertext that is being generated only once. This is currently not supported by the API. Perhaps we should write a "detached" version of sss_create_shares (and sss_combine_shares) to make this possible.

Performance-wise, this is not really necessary. memcpy'ing 64 bytes takes around 8 cycles on modern Intel processors.
Wontfix.


[Contributors]: Add list of all contributors

@all-contributors please add @KKhushhalR2405 for maintaining the project

@all-contributors please add @ranjan-panda  for API host support

@all-contributors please add @ranjan-panda for Plugin/utility libraries

@all-contributors please add @Aryamaan777  for Data


Fix name of HTCondor yum repository Ansible task

This is a very simple PR to properly name the task that sets up the HTCondor yum repository. We no longer use the "Feature" (development) branch, but the "LTS" (Long Term Support) branch.
Submission Checklist
Please take the following actions before submitting this pull request.

Fork your PR branch from the Toolkit "develop" branch (not main)
Test all changes with pre-commit in a local branch #
Confirm that "make tests" passes all tests
Add or modify unit tests to cover code changes
Ensure that unit test coverage remains above 80%
Update all applicable documentation
Follow Cloud HPC Toolkit Contribution guidelines #

For posterity, the HTCondor build failed for a reason unrelated to the PR: the 2 minute sleep turns out not to be enough to wait for VMs. The fix is to use a built-in feature for waiting for instances in the MIG terraform module. This has a bug associated with it and I may escalate its priority.


Can't bind to 'floatLabel' since it isn't a known property of 'mat-form-field'.

I set [floatLabel]="never" in the mat-form-field element and I get this error.
Can't bind to 'floatLabel' since it isn't a known property of 'mat-form-field'.
I tried the example in the Material2 website and I'm using angular 5 with the
angular cli.

Please refer all troubleshooting questions to our community at StackOverflow, Angular Material mailing lists, Gitter, etc. We try to keep our issues here only open for bugs and feature requests.

@jeffersonvivanco I had the same error.
My fix was: Upgrading @angular/cdk from 5.0.0-rc.2 to "@angular/cdk": "^5.0.0" and  @angular/material from 5.0.0-rc.2 to "@angular/material": "^5.0.0
The floatLabel is in angular/material since 5.0.0-rc.3. See this commit:  https://github.com/angular/material2/commit/d6fec3573cbc854d5bf67d920c5b0f8a6eef0c86

thank you @bitsmuggler  !!