"Ambient Occlusion" color node is not exported when slotted into Base Color

Describe the bug
I've now seen a number of files that use a graph like this:

Usually this is used instead of a regular color field, but has the same effect – just in the viewport it causes somewhat more contrast because it introduces ambient occlusion.
I think all instances of this node can be exported as if they were regular RGB nodes.
To Reproduce
Steps to reproduce the behavior:

Download attached file :
BlenderBaseColorAOBug.blend.zip
Export as glb
Note that the "RGB" node is properly exported but the "Ambient Occlusion" node is not

Expected behavior
Ambient Occlusion node exports as if it were an RGB node
Screenshots
see above
.blend file/ .gltf (mandatory)
BlenderBaseColorAOBug.blend.zip
Version

OS: MacOS and Windows
Blender Version 4.2 and 4.3

Thanks, I agree on the AO socket – I think the node should be treated as if it was an RGB node (just the color used).


Dashboard destination and edit destination section

[ ] Describe the purpose of the change
add destination section on dashboard
create edit destination modal
add useNotifiTargets hook and refactor the save target logic

[ ] Create test cases for your changes if needed

[ ] Include the ticket id if possible (Collaborator only)
https://notifi.atlassian.net/jira/software/c/projects/MVP/boards/1?selectedIssue=MVP-3963

And I think there are few wired states:

When clicking the resend email verification link, the slack warning message state changes.
I think it be better to unrender the resend email verification link warning message and render Verification email sent for few seconds after clicking it. This way, the users know that 1. the "CLICK" already took affect and 2. it avoids getting BE error if the user constantly click that link.

Screen.Recording.2024-02-28.at.11.08.08.mov

as currently slack is still in progress and it shared with some email destination logic, so slack may be affected with email destination updates. I have comment the warning message for slack.
will update

Just realized an issue being not able to input on signup page
Screen.Recording.2024-02-28.at.10.48.06.mov

Could you provide the steps for this bug? seems I can't reproduce it

What I essentially do is just trying to input email with a newly create keplr wallet account. And it prevent me to input and the following error is thrown

What I essentially do is just trying to input email with a newly create keplr wallet account. And it prevent me inputing and the following error is thrown

Still can't reproduce, did you run build before testing?

Cool, I think it is working now. And I realized the last two small nits:

The style seems breaking when loading between signup --> FTU
The testSlack@gmail still exist. Not sure if it is done intentionally?

https://github.com/notifi-network/notifi-sdk-ts/assets/127958634/3be569e6-9241-4ffa-a381-82c9150c849a
@marukohao

Cool, I think it is working now. And I realized the last two small nits:

The style seems breaking when loading between signup --> FTU
The testSlack@gmail still exist. Not sure if it is done intentionally?

https://github.com/notifi-network/notifi-sdk-ts/assets/127958634/3be569e6-9241-4ffa-a381-82c9150c849a @marukohao

fixed


Fix AMD module exports

anonymous amd module definition with RequireJS throw a error, then we go explicitly declare the module :)

Thanks for this @lucasljj! :smile:
I don't use require very much, and was trying to use the simple approach from here. Can you give me a bit more information about why that approach is throwing, am I doing something wrong, or did I misunderstand the documentation or what?
I should also really get some automated testing in for this code, but I'm happy to do that separately as a follow-up.

First thank you for writing this great library :smile:
I started using "RequireJS" recently, one or two months ago :sweat_smile:
did I misunderstand the documentation, it clearly says that modules with anonymous define(), as vagueTime.js, can not be loaded using a

for record, I tried to do this below
<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.22/require.min.js"></script>
<script type="text/javascript" src="vagueTime.js"></script>
<script type="text/javascript">
	require(['vagueTime'], function (vagueTime) {
		console.log(
			vagueTime.get({
			    from: 60,
			    to: 0,
			    units: 's'
			})
		);
	});
</script>
</body>
</html>

and I get:
Uncaught Error: Mismatched anonymous define() module: function () {
                return functions;
            }
http://requirejs.org/docs/errors.html#mismatch

Ah, cool, thanks for the info. I'll merge and release this over the weekend, when I'm back at my dev machine.


How to customize data sets for training

Hello, author! Your work is very good! But I've read your documentation and it's still not clear how I need to train a custom dataset.
As far as I know, I need to change my custom dataset folder format to the same as ILSVRC2015_VID dataset, then prepare the train.npy and val.npy sequence files,
Is there anything else I need to do?

你好，作者！你的工作非常好！但是我已经阅读了您的文档，但仍然不清楚我需要如何训练自定义数据集。据我所知，我需要将自定义数据集文件夹格式更改为与数据集相同的格式ILSVRC2015_VID然后准备train.npy和val.npy序列文件，我还需要做什么吗？

请问您解决了吗，如何训练自定义数据集

把数据集按照ILSVRC2015_VID数据集的格式搭建好，然后生成对应的train_npy和val_npy即可


feat(SolScript): Support create token account and transfer SPL token in one transaction

Task linked: CW-8443 [SDK] Support create account and transfer in a transaction


Add missing test for SignedBytesEqualFailure

Coverage remained the same at 99.875% when pulling 9da1d9fff72a65b04de1177c4d58285a9819914b on arstrube:chars into 9e47867a7df99c9855d76f0c23c6e140321902ed on cpputest:master.


Add exclude|e argument to handle exlcuding files

closes #46

@mstruebing Thanks a lot for your contributing!
I've left a few comments. Could you please fix them?

I've just updated the file CHANGELOG.md. Please pull new changes from the branch master.

@mstruebing Thanks a lot ❤


Spatial relationships sample

This sample demonstrates how to use geometry engine to evaluate the relationships between geometries.

@dkemlage Can you please review this? Thanks!

@nCastle1 Can you update your Pull Request (PR) to only contain the file changes for the new 'Spatial Releationships' sample? I want to add some in-line code comments for the review but the web interface for the Review is not able to locate the files I want to make comments on because the number of files changed is too large.

Thanks for the review!
I kept the tree view for WPF to be consistent with other SDKs. The text trick was needed to work around the lack of a tree view on mobile.


MM-38188 Adding missing primary keys

Summary
Adds missing primary keys to IR_PlaybookMember, IR_StatusPosts, IR_TimelineEvent, IR_ViewedChannel
Esentally does:
ALTER TABLE IR_PlaybookMember ADD PRIMARY KEY (MemberID, PlaybookID);
ALTER TABLE IR_StatusPosts ADD PRIMARY KEY (IncidentID, PostID);
ALTER TABLE IR_TimelineEvent ADD PRIMARY KEY (ID);
ALTER TABLE IR_ViewedChannel ADD PRIMARY KEY (ChannelID, UserID);

with more steps.
Added a test so we don't make this mistake again.
Ticket Link
http://mattermost.atlassian.net/browse/MM-38188
Checklist

- [ ] Telemetry updated
- [ ] Gated by experimental feature flag

[x] Unit tests updated

@crspeller

I mostly did it because I don't like leaving incorrect code around for people to copy paste mistakenly.

That's a good argument, but the table creation code is still incorrect, as we modify the tables in every migration. If we change the original code of the table creation, now we have a mix of correct and incorrect code, and I'd say that's worse than having an incorrect original code that is fixed through all the migrations.
In general, I understand the database schema as the application of every migration in the file, so it is always correct (as far as we know, of course, every new bug is fixed through a new migration).
I'm 3/5 about keeping the original code. Another solution would be to just squash all migrations and write an actual correct schema creation.
Thoughts?

@agarciamontoro Reverted the changes to the original table creations.


[Doc] Add guides for TLS SNI support (C++ and Python clients)

Add docs for https://github.com/apache/pulsar/pull/8957.

@deonvdv @zymap @codelipenghui @Huanli-Meng @Jennifer88huang could you please help review? Thanks


[core] Change WaitTime signature to work with seconds and have its parameter be of type double

Most of Raylib's time functions work with time represented as seconds in variables of type double. Examples of this are the return value of GetTime and the fields of CORE.Time. The WaitTime function is different: it takes a milliseconds value in a variable of type float. This makes WaitTime not consistent with the rest of the framework and forces some unnecessary conversions.
I think the reason for WaitTime (originally called Wait) being different is because it was originally designed around the Win32 Sleep function (even though in its first implementation it already had Linux support, see commit b681e8c2775bbb467c0f0607afd9840fda25c563).
This is a breaking change, since WaitTime became a public function when the custom game loop control feature was added. In any case, this feature is relatively new (it's still not listed in the cheatsheet) and I think the sooner this change is done the less people's code will break.
I've stumbled upon this when working in this PR (https://github.com/raysan5/raylib/pull/2504).
I've opened an issue because I would like to know the opinion of the community regarding this proposed change.
Thank you.

@flashback-fx Did you measure in some way performance improvement of this change? I see the consistency with the other time-related functions but, in terms of benefits for the users, do you think it will be more intuitive to use? Afaik, most wait functions out there use milliseconds, don't they?

@flashback-fx Thanks for the investigation and the report. Ok, let's unify it to seconds. Feel free to send a PR.

Thank you. Here is the PR https://github.com/raysan5/raylib/pull/2506 .

In the Standard C library with header <time.h>, the preprocessor variable CLOCKS_PER_SECOND is your friend as is the defined type clock_t.  I would hope these percolate up into the raylib provisions around sub-second time-keeping.


[tensorflow] update to 2.6

update TensorFlow to v2.6.0
fixes #18536

@jgehw ,Please take a look:
https://dev.azure.com/vcpkg/public/_build/results?buildId=59103&view=artifacts&pathAsName=false&type=publishedArtifacts

Thanks for your pr,after finish your suggesstion changes,please run command "./vcpkg x-add-version --all --overwrite-version" then commit the changes again

@jgehw ,This is error log,please take a look:
https://dev.azure.com/vcpkg/public/_build/results?buildId=59297&view=artifacts&pathAsName=false&type=publishedArtifacts

ERROR: D:/buildtrees/tensorflow/x64-windows-dbg/tensorflow/BUILD:984:20: Linking tensorflow/tensorflow.dll failed: (Exit 1120): link.exe failed: error executing command
  cd D:/buildtrees/tensorflow/.bzl/rge6fwhh/execroot/org_tensorflow
  SET LIB=C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\ATLMFC\lib\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\lib\x64;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\ucrt\x64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\um\x64
    SET PATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\VC\VCPackages;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\bin\Roslyn;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Team Tools\Performance Tools\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Team Tools\Performance Tools;C:\Program Files (x86)\Microsoft Visual Studio\Shared\Common\VSPerfCollectionTools\vs2019\\x64;C:\Program Files (x86)\Microsoft Visual Studio\Shared\Common\VSPerfCollectionTools\vs2019\;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64\;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\devinit;C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64;C:\Program Files (x86)\Windows Kits\10\bin\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\\MSBuild\Current\Bin;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\;;C:\Windows\system32;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\Llvm\x64\bin;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\VC\Linux\bin\ConnectionManagerExe
    SET PWD=/proc/self/cwd
    SET PYTHON_BIN_PATH=D:/downloads/tools/msys2/b3b3d399e80e310e/mingw64/bin/python3.exe
    SET PYTHON_LIB_PATH=D:/downloads/tools/msys2/b3b3d399e80e310e/mingw64/lib/python3.8/site-packages
    SET RUNFILES_MANIFEST_ONLY=1
    SET TEMP=C:\Users\AzDevOps\AppData\Local\Temp
    SET TF2_BEHAVIOR=1
    SET TMP=C:\Users\AzDevOps\AppData\Local\Temp
  C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/HostX64/x64/link.exe @bazel-out/x64_windows-dbg/bin/tensorflow/tensorflow.dll-2.params
Execution platform: @local_execution_config_platform//:platform
INFO: Elapsed time: 1059.069s, Critical Path: 254.00s
INFO: 8902 processes: 1830 internal, 7072 local.
FAILED: Build did NOT complete successfully
FAILED: Build did NOT complete successfully

@jgehw ,Looks the CI error log same as before:
https://dev.azure.com/vcpkg/public/_build/results?buildId=59558&view=artifacts&pathAsName=false&type=publishedArtifacts

@JonLiu1993 there are some strange CI errors, please re-run CI pipelines

@BillyONeal can you please check what's going wrong on the macOS CI? From what I can see in the logs, it seems while building tensorflow either the build machine stopped responding or the watcher process dropped the connection because something took longer than expected. Strange is that no error logs are provided as artifacts, only a file list (which clearly shows that only tensorflow-common succeeded, but neither tensorflow nor tensorflow-cc). Maybe a disk space issue? (I don't know the exact requirements, but it seems that the buildtrees folder grows clearly above 100GB...)

/azp run

Maybe a disk space issue? (I don't know the exact requirements, but it seems that the buildtrees folder grows clearly above 100GB...)

That seems unlikely given the post-build results:
/bin/bash --noprofile --norc /Users/vagrant/Data/work/_temp/ba3e930e-46b3-4d51-ab68-891937e1ffb6.sh
Filesystem                                                   Size   Used  Avail Capacity iused      ifree %iused  Mounted on
/dev/disk1s5s1                                              256Gi   14Gi  206Gi     7%<PHONE_NUMBER>441659    0%   /
devfs                                                       186Ki  186Ki    0Bi   100%     642          0  100%   /dev
/dev/disk1s4                                                256Gi  3.0Gi  206Gi     2%       4<PHONE_NUMBER>    0%   /System/Volumes/VM
/dev/disk1s2                                                256Gi  271Mi  206Gi     1%<PHONE_NUMBER>717    0%   /System/Volumes/Preboot
/dev/disk1s6                                                256Gi  612Ki  206Gi     1%      17<PHONE_NUMBER>    0%   /System/Volumes/Update
/dev/disk1s1                                                256Gi   32Gi  206Gi    14%<PHONE_NUMBER>266676    0%   /System/Volumes/Data
<EMAIL_ADDRESS>4.0Ti    0Bi  4.0Ti     0%<PHONE_NUMBER>3709551614<PHONE_NUMBER><PHONE_NUMBER>600%   /Volumes/SharedFolders
map auto_home                                                 0Bi    0Bi    0Bi   100%       0          0  100%   /System/Volumes/Data/home
/dev/disk1s5                                                256Gi   14Gi  206Gi     7%<PHONE_NUMBER>441659    0%   /System/Volumes/Update/mnt1

I do know that Tensorflow likes to break workers but we haven't had great ideas to figure out why.

I do know that Tensorflow likes to break workers but we haven't had great ideas to figure out why.

Diskspace wasn't the issue this time as you suspected. I could reproduce the build error on my machine. It's some strange error most likely introduced by bazel in conjunction with Xcode build tools. Other users already ran into this in early 2021 with tensorflow 2.4. I could work around it by limiting the debug symbols from full to fastbuild.
With this fixed, a file-not-found error occurs on CI which I can't reproduce (the file exists in my local build). I'm approaching this now with debug output added to portfile.

@BillyONeal It seems that the build didn't even start on CI. It seems to have stalled and be terminated after almost two hours. From raw log:
2021-09-19T11:25:02.7978030Z Starting package 2/3: tensorflow:x64-osx
2021-09-19T11:25:02.7978860Z Building package tensorflow[core]:x64-osx...
2021-09-19T13:21:03.9178080Z ##[error]The operation was canceled.

If the build process fails, the output should at least contain something like:
Starting package 1/1: tensorflow:x64-osx
Building package tensorflow[core]:x64-osx...
-- Downloading https://github.com/tensorflow/tensorflow/archive/v2.6.0.tar.gz -> tensorflow-tensorflow-v2.6.0.tar.gz...
-- Extracting source /Users/joachim/Documents/vcpkg/downloads/tensorflow-tensorflow-v2.6.0.tar.gz
-- Applying patch /Users/joachim/Documents/vcpkg/installed/x64-osx/share/tensorflow-common/fix-build-error.patch
-- Applying patch /Users/joachim/Documents/vcpkg/installed/x64-osx/share/tensorflow-common/Update-bazel-max-version.patch
-- Applying patch /Users/joachim/Documents/vcpkg/installed/x64-osx/share/tensorflow-common/change-macros-for-static-lib.patch
-- Using source at /Users/joachim/Documents/vcpkg/buildtrees/tensorflow/src/v2.6.0-e3dcb031ee.clean
-- Configuring TensorFlow (dbg)
-- Warning: Building TensorFlow can take an hour or more.

Found out that on macOS we have instable behaviour of bazel: sometimes -2.params file is used for linker arguments, sometimes arguments are inlined. Thus re-activate old argument parsing code and add switch to detect which situation applies.

CI is supposed to delete the buildtrees directory after each build.

what we would need here, would be cleanup of each port's buildtrees subdirectory immediately after each port, within the vcpkg run

ci (and install --clean-buildtrees-after-build) is supposed to do that: https://github.com/microsoft/vcpkg-tool/blob/733e90d1bc3f4f8188d57d73e2d20765c232cc26/src/vcpkg/build.cpp#L983
I'm not ruling out disk space as a potential trigger here but if it were I would expect agents to completely die, which isn't what we're seeing...

what we would need here, would be cleanup of each port's buildtrees subdirectory immediately after each port, within the vcpkg run

ci (and install --clean-buildtrees-after-build) is supposed to do that: https://github.com/microsoft/vcpkg-tool/blob/733e90d1bc3f4f8188d57d73e2d20765c232cc26/src/vcpkg/build.cpp#L983
I'm not ruling out disk space as a potential trigger here but if it were I would expect agents to completely die, which isn't what we're seeing...

Here's an example where it died partway into building just one: https://github.com/microsoft/vcpkg/pull/20273
I'll see if I can investigate further today...

I'm watching a run in top and nothing looks unusual, but I did file https://github.com/microsoft/azure-pipelines-agent/issues/3541

Maybe we are running out of physical RAM, hitting swap, and that brings the system to a crawl?

Maybe we are running out of physical RAM, hitting swap, and that brings the system to a crawl and starves out the agent?

@BillyONeal That sounds likely, especially when also taking into consideration that cleaning up the buildtrees folder after the C-port succeeded causes heavy disk I/O (it's not only >70GB to cleanup but also around 250,000 files).
Is it possible to record and share the top output? (Something like top -b > somefile.log should do the job.)

I intend to investigate what's happening on macos tomorrow

/azp run

Thanks for the update and sorry for for the infrastructure issues! I will go back to meditating on https://youtu.be/NSemlYagjIU

Thanks for the update and sorry for for the infrastructure issues! I will go back to meditating on https://youtu.be/NSemlYagjIU

@BillyONeal thanks for pointing me to this hilarious talk -- good summary of what we're going through... ;-)


Add setting to allow unlimited copies of cards

Someone said they wanted this feature, and it seems like it would be good to add. https://www.reddit.com/r/Netrunner/comments/ooge0a/including_multiple_astroscripts_in_netrunnerdb/
Basically, when enabled in the settings tab, card text like "limit 1 per deck" no longer applies, and 3 copies (or more if the card text says more) can be added to the deck. A warning "too many copies of a limited card" is then shown. This warning was already in the code.
Questionable parts of this code:

I have not tested card suggestions at all
The for loop that generates the card count radio buttons is copypasted in 3 places. I'd like to merge them into 1, but not sure where I would put that function, since it needs to be shared across files, and I don't know how you're managing JS imports in netrunnerdb.

I think the rest of my code is all good, though. I tested both the card selection table and the card modal and they're good.
(By the way, reverting this commit as discussed is still required to create the database.)

Sorry for the radio silence on this!
I've finally had a look at this, tested it, and cleaned it up a bit. Thanks for the contribution!

Yay!


FWF exported template table witdth will sometimes go over the page borders

Describe the bug
When exporting an FWF document and viewing it in Word (Libre office works fine), then the main table will sometimes be wider than the page, and the content clipped.
Is this a regression?
Not sure, FWF export was not as readily available for testing until now.
Steps to Reproduce

Create DMP
Fill out textfields with the maximum number of characters
Export document
View in Word

Expected behavior
The template should ideally keep within the limits of its main table and keep its original formatting.
Environment

Microsoft office Word 365
Damap version 2.4.0

Additional context
We do suggest that users prefer Word, as that is the format we export to, so it is problematic if that is the application we fail in representing the output correctly.

The issue only persists if a full block of text without spaces is inserted. Since this does not correspond with any language it is not a realistic issue that would have to be solved.


Refactor the TotalVI component to also allow running without reference

Currently the TotalVI component/pipeline requires existing reference to be loaded. We should extend the behavior to only also allow running without supplied reference.

You mean integration of the given data and creating the reference? Sure, I can do that. Maybe other integration components lack this regime as well

@VladimirShitov indeed it is for creating the reference, identical as we do for scvi. In addition to this, we talked last week about moving the different components for reference building and/or integration into the integrate namespace. While we would move all the reference mapping to the reference_mapping workspace.

@ddemaeyer , you mentioned that the totalVI component is already used by someone? Should I keep the code backward compatible then and not change API?
I see 2 options now:

Move the existing component to the reference_mapping workspace, and implement a new component in the integrate for the integration without a query.
Pros: This would provide a more convenient interface for users.
Cons: This can lead to partial code repetition.
Have one component for everything. If the query is provided, it will map it to a reference (building the model for it if needed). If there is no query, only reference integration will be performed.
Pros:  The code will be in one place, so there will be less repetition and bugs potential.
Cons: The current API will then be very unintuitive, and we will need to change it. Currently, --input means query, and to run the integration, a user would need to provide only --reference and empty --input argument.

I am in favor of option 1.

Hey @VladimirShitov, the component is not used at the moment. This since there is a reference required to use it, which is quite difficult today since you can't make one using OP.
So the API can be changed, but it would be good to retain the current compoentn in reference_mapping namespace and move the new one into the integration namespace.

Thanks!


Why can't we achieve the accuracy in the paper?

I'm using the main.py default parameters.

have you tried the demo.sh


[GLUTEN-3653][VL] Fix SHJ metrics when there is no shuffle on build side

What changes were proposed in this pull request?
If there is no shuffle on build side, we need to put the node id of stream input node together with join node id. Otherwise, the join metrics become non-adjacent, and cannot be updated in the correct order.
(Fixes: #3653)
How was this patch tested?
under test

cc @zzcclp

it's better use bucket tables case to add a ut for this :)

InputIteratorTransformer was introduced, so current logic works for this case.


Refactor - remove static initialization

Linked to https://github.com/IBM/cp4d-connectors-airbyte/issues/1


Deduplication of loadList property

Ensure deduplication of extensions loadList property. This is to avoid redundant dependency loads as well as maintain the order in which they are loaded.

:+1:

Thanks @a2l007, please sign CLA: http://druid.io/community/cla.html

I've signed it.

@a2l007 has joined in my team and will be added to our CLA .


Can't run from VS for Mac

Hi, I can run the MAUI sample from my MacBook Pro CLI with the dotnet build HelloMaui -t:Run -f net6.0-ios command:

but from VS for Mac I get errors:

Is something "On my Mac" or VS for Mac is still not ready to support MAUI in .NET 6  Preview 4 ?

VS4Mac is not ready for the MAUI yet.

Yes, VS for Mac can't run .NET 6 projects yet: https://github.com/dotnet/maui-samples#visual-studio-for-mac

Ops, I've missed that info, thanks a lot.


patch.crates-io for workspace crate leads to cargo install failure

Problem
I think that I've run into a bug with the interaction between patch.crates-io, Cargo workspaces, and cargo install.
The situation of my project, tectonic, is as follows:

There is a toplevel main crate, tectonic, that provides a CLI executable
There are a bunch of sub-crates in the crates/ directory of the repo
One of those sub-crates, tectonic_engine_spx2html, requires a patched version of the pinot crate
Because it's in a workspace, the [patch.crates-io] bit goes in the toplevel Cargo.toml
If I put the patch statement in the crate's individual Cargo.toml, I get a warning
When I publish tectonic_engine_spx2html to Crates.io, the Cargo.toml that gets embedded in the crate artifact does not contain any sort of patch.crates-io section
When I try to cargo install tectonic, the dependency tectonic_engine_spx2html is taken from Crates.io, no patch is applied, and the build fails (because my patch adds a new API)

Steps
(see above)
Possible Solution(s)

I haven't tried it yet, but since Cargo only warns about the crate-level patch.crates-io section, I'm going to see if adding that fixes the issue, at the cost of a warning every time I run Cargo
Based on my understanding of how things work, it seems like Cargo should be de-hoisting the patch.crates-io info into the Cargo.toml it generates for the sub-crate's artifact?

Notes
No response
Version
cargo 1.59.0 (49d8809dc 2022-02-10)
release: 1.59.0
commit-hash: 49d8809dc2d3e6e0d5ec634fcf26d8e2aab67130
commit-date: 2022-02-10
host: x86_64-unknown-linux-gnu
libgit2: 1.3.0 (sys:0.13.23 vendored)
libcurl: 7.80.0-DEV (sys:0.4.51+curl-7.80.0 vendored ssl:OpenSSL/1.1.1l)
os: OracleLinux 35.0.0 [64-bit]

crates.io does not allow git dependencies (or patches in general), so I don't think there is anything that can be done here.

Ah, hmm. That does make sense. On the one hand, one could argue that there's an issue that Cargo let me publish this crate without complaining that the Git patch would not be applied ... on the other hand, the point (AIUI) is that the sub-crate's specification should stand on its own, and I think that I would have detected this issue if my CI automation didn't pass the --no-verify option to cargo publish.
Well, I'm having trouble of thinking of specific changes to the behavior of Cargo that would have been helpful for me here. I can imagine some potential improvements to the docs (although I'm well aware of the limitations of "you should write docs to address this specific weird thing I did"). Maybe the docs of the patch section could perhaps be beefed up with a similar warning about Crates.io+git as at the end of this section?

Yea, the documentation for [patch] (https://doc.rust-lang.org/cargo/reference/overriding-dependencies.html) definitely could be made clearer for this situation.  It is mentioned in cargo package that patch sections are removed, but that's definitely tucked away in an obscure place.


Requesting reset of features/linuxprototype

I've rebased the features/linuxprototype branch to get the latest master changes in — would someone be able to reset it to https://github.com/microsoft/VFSForGit/commit/1b39524a3904fd98f8ed411784f832a781267e00?
Cheers!
/cc @derrickstolee @wilbaker @chrisd8088

I believe @kivikakk has set things up so that once this is done (remove branch protection on features/linuxprototype, reset to 1b39524, and restore branch protection), our other PRs like #1125 and #1189 will apply cleanly again.
@jrbriggs, would you or someone with the right perms be able to tackle this for us?  Thanks very much for the assistance!

I've removed branch protection for the time being @chrisd8088
/cc @kivikakk @wilbaker @derrickstolee

OK -- let me try to reset per @kivikakk's intentions.  Thank you!

OK, done, I believe, plus I added in the latest commits to master from today, which may help fix the remaining "loose object" CI failures.  Thank you, and please go ahead and re-enable branch protection whenever is convenient!  Much appreciated, @jrbriggs!

Thanks John, Chris!


RT-1.8  BGP Route Reflector Test

Hi,
This is initial commit for RT-1.8  BGP Route Reflector Test.
Resolves: https://github.com/openconfig/featureprofiles/issues/2009
For Scale routes, needs https://github.com/openconfig/featureprofiles/pull/2404 to be merged
Thanks,
Prabha

Pull Request Functional Test Report for #2269 / e13ffe1dafb13819cb66d77e5a7cd1a8694c9ac8
Virtual Devices

Device
Test
Test Documentation
Job
Raw Log

Arista cEOS

RT-1.12: BGP always compare MED

Cisco 8000E

RT-1.12: BGP always compare MED

Cisco XRd

RT-1.12: BGP always compare MED

Juniper cPTX

RT-1.12: BGP always compare MED

Juniper ncPTX

RT-1.12: BGP always compare MED

Nokia SR Linux

RT-1.12: BGP always compare MED

Openconfig Lemming

RT-1.12: BGP always compare MED

Hardware Devices

Device
Test
Test Documentation
Raw Log

Arista 7808

RT-1.12: BGP always compare MED

Cisco 8808

RT-1.12: BGP always compare MED

Juniper PTX10008

RT-1.12: BGP always compare MED

Nokia 7250 IXR-10e

RT-1.12: BGP always compare MED

Help

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 46.333%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
1409

Relevant Lines:
3041

💛  - Coveralls

I merged
https://github.com/openconfig/featureprofiles/pull/2404
Please sync to the head to pick the update.


Iteration over continuous intervals of components

Consider a simple bit of code that does multi-component iteration:
registry.view<position, velocity>().each([dt](auto &pos, auto &vel){
  pos += vel * dt;
});

Now I want to make it SIMD. It has to be done in chunks that are known to be continuous in memory. For example, this can be done via an API like this:
registry.view<position, velocity>().each([dt](auto *pos, auto *vel, size_t count){
  for(size_t offset = 0; offset < count; offset += 4)
  {
    MulAdd4(pos + offset, vel + offset, dt);
  }
  for(; offset < count; offset++)
  {
    pos[i] += vel[i] * dt;
  }
});

Is it possible to do something like this already? If no, how complicated would it be to implement?

This is possible with groups.
entt::registry reg;
auto group = reg.group<position, velocity>();
const std::size_t size = group.size();
position *pos = group.raw<position>();
velocity *vel = group.raw<velocity>();
// `pos` and `vel` are parallel arrays with `size` elements

For more information about the inner workings of groups. See this article.

Are groups (as in entt::group) what you are looking for?

Thanks, I have already familiarized myself with the groups. However groups impose strict implicit requirements on what you can and can't do with them, such as a component can't belong to 2 groups at once. And that is a fair price to pay in order to get perfect SoA. However, I do NOT need a perfect SoA, so I don't want to pay for it, but I want the next best thing: erm, imperfect SoA? For free. In the perfect scenario it would return the entire raw arrays, in the worst scenario it would return chunks of size 1, but that's fine.

That's because of how archetypes work. You pay the cost of having all things grouped somehow, no matter what. The result is that... well, you've things grouped somehow (and possibly fragmented on the other side).
I went with a completely different design, that is to pay only for what you want. In this case, a sparse set based approach fits better than an archetypes one. You don't pay all the times the cost but you've other constraints.

erm, imperfect SoA(?) for free. In the perfect scenario it would return the entire raw arrays, in the worst scenario it would return chunks of size 1, but that's fine

Can you provide more details on this? I'm a bit busy today but I'll do my best to look into it.

Can you provide more details on this? I'm a bit busy today but I'll do my best to look into it.
Well, imagine we don't create any groups at all (because we don't want to pay for them). We just iterate over a view:

registry.view<position, velocity>().each([dt](auto &pos, auto &vel){
  pos += vel * dt;
});

during the iteration there can be some cases where two or more consecutive calls to this lambda  will actually point to pos and vel components that are adjacent to each other in memory. What I'm asking is to group those continuous calls into 1 whenever possible:
[dt](auto *pos, auto *vel, size_t count)

where (auto *pos, auto *vel, size_t count) is a SoA representation of a continuous chunk of components in memory. Worst case this chunk will be length of 1 which will be identical to what we currently have in the view API and this lambda will have to be called as many times as there are such pairs (say, N). But best case scenario (if all components that have position also have velocity) this will call this lambda just once where (auto *pos, auto *vel) will be arrays of size N storing all the needed components in a perfect SoA fashion.
This provides a low-effort way to get some benefits of perfect SoA without any cost or imposing any restrictions.

Oh... I must admit that your reasoning surprised me in a way.
Why did you wait so long to come and share this idea? :smile:
Actually, by construction, you could spot a lot of these chunks here and there on some types (mainly low level ones, I don't think so for gameplay stuff).
My only concern at the moment is that you iterate two times the entities here: the first one to know how long a chunk is, the second one in user space. Of course, it's not a problem if you don't use the entities on your side since the cost is instead pretty much the same.
Since you seem to know what you're talking about, I take this opportunity to ask you a question.
The only easy way that comes to mind to do this is by looking forward in search for a chunk.
Do you have any other suggestions to explore? All the other options seem to me either complicated or, in any case, intended to consume memory. A look-ahead approach would be for free instead, from all points of views.

The way I imagine it could be done without having any apriori knowledge of how entt works under the hood would be kinda like this:

template<typename T1, typename T2, typename Func>
void view::each(Func func)
{
  auto chunk_start = begin<T1, T2>();
  auto prev = begin<T1, T2>();
  size_t chunk_size = 1;
  while(auto it = begin<T1, T2>() + 1; it != end<T1, T2>(); it++)
  {
    if(&prev.get<0>() + 1 == &it.get<0>() && &prev.get<0>() + 1 == &it.get<0>()) //checking if previous call is contiguous in memory with the current one
      chunk_size++;
    else
    {
      func(&chunk_start.get<0>(), &chunk_start.get<1>(), chunk_size);
      chunk_size = 1;
      chunk_start = it;
    }
    prev = it;
  }
}

But you're certainly giving me way too much credit for 0 reason as I have never designed a production ECS myself, I was just planning to start writing my own and found this repo+blog and it does lots of stuff way cleverer than I planned. I was just surprised to find out it does not have something as obvious as detecting continuous chunks that are already there.

If you care about performance, (since you’re using SIMD I’m sure you do) then you ought to know how EnTT works. For that, I suggest reading the ECS Back and Forth articles. In particular, this one talks about sparse sets and this one talks about groups. If you want to write fast code with EnTT then knowing the implementation details will help.

Yes, I have already read those after creating this thread. Honestly I did not really like black-boxey feeling that the official documentation left. The implementation details can be arbitrarily complex, but I think at least mentioning sparse sets, they way views and groups are iterated should remove a lot of confusion from the documentation, without overloading it with too much information.

Honestly I did not really like black-boxey feeling that the official documentation left.

Actually there is a PR that I've still to merge and the aim of which is to provide an insight on the internals of the library.
Btw the ECS back and forth series already contains all the details afaik and can be a good starting point. :+1:

After looking up how entt works internally, it's obvious that we can replace this:
if(&prev.get<0>() + 1 == &it.get<0>() && &prev.get<0>() + 1 == &it.get<0>())

with a better implementation that does not have to do indirection. It can be done like this for example:
if(it.is_continuous<0>() && it.is_continuous<1>())

where is_continuous checks if dense set indices are continuous instead of accessing component data memory.
This is actually an optimization even if not using SIMD because it allows the loop to access component memory once per chunk instead of once per entity.

Therefore, we can't just make a look ahead and use use eventually the get. We need also to test every entity to know if it has all the components.
You can look ahead, but of course you need to check continuity in all the components' buffers. You as I wrote earlier, accumulate chunk size while iterated components are all continuous in memory, and call the user lambda once the chunk ends using the chunk's accumulated depth.

Actually I have just realized that the condition to reset the accumulation buffer is quite simple and you already calculate it: if current entity has all the components that we're iterating over, it means it's continuous with the previous one in memory. If at least one component is missing, you call the lambda with current chunk and start calculating the next one.
Assume the current loop that iterates over a view with 3 components looks kinda like this:
for (auto it : smallest_component_set())
{
  if (reg.has<Component0>(it->entity()) && reg.has<Component1>(it->entity()) && reg.has<Component2>(it->entity()) && ...)
    user_lambda(it.entity(), reg.get<Component0>(it->entity()), reg.get<Component1>(it->entity()), reg.get<Component2>(it->entity()));
}

In order for it to keep track of chunks, just accumulate them like this:
iterator chunk_start;
size_t chunk_size = 0;
for (auto it : smallest_component_set())
{
  if (reg.has<Component0>(it->entity()) && reg.has<Component1>(it->entity()) && reg.has<Component2>(it->entity()) && ...) //chunk continues
  {
    if (chunk_size == 0)
      chunk_start = it;
    chunk_size++;
  }
  else
  {
    if(chunk_size > 0)
      user_lambda(it.entity(), reg.get<Component0>(chunk_start->entity()), reg.get<Component1>(chunk_start->entity()), reg.get<Component2>(chunk_start->entity()));
    chunk_size = 0;
  }
}

You can look ahead, but you do have to check all the components to make sure all of them are present and continuous. Both of those can be accomplished by one read from the sparse array per component.
Once you find an entity that does not have one of the components OR one of its components is not adjacent with the previous one (you get all this from just the value you read from sparse array), you have to call the user function and use get() to actually read where this chunk starts.

I made a test during the last days. The result is that iterating elements this way takes more or less three times the time of an each.
I don't think it's worth complicating the codebase for something that is literally unusable. The main problem is that we iterate elements twice: the first time to find the length of the chunk, the second time to visit it.
What was your expectation exactly?

Nvm. I found a way to make it faster then what I expected and even better of what we discussed here.
I'm pushing it tomorrow or such, as soon as the doc and all tests are ready. :+1:

Since the chunked function is removed, is that an alternative way to achieve that?

Mmm yes and no, I'd say that it's possible with a custom pool but I would discourage it honestly.
The main problem is that chunked accesses rely on raw pointer/size pairs. On the other side, with custom pools and the default storage that is about to be paged, these elements aren't (well, won't be) available/reliable anymore.
So, roughly speaking, we can't return anymore a T* to the callback. This probably defeats the purpose of chunked access.
In theory, we could return a couple of non-raw iterators that are supposed to return a range that is valid in all pools. However, from what I get this isn't the desired behavior.
I'd rather use a group or any other solution probably, but I'm open to suggestions/feedback.

Currently, I feel the multi-component view or group is slow when there are many entities compared to perfect SoA solutions.

Well, technically speaking, full owning groups on fully contiguous storages are the only thing that strictly adheres to perfect SoA requirements/definition.
Though, I wouldn't care that much about it in general unless you've measured and spotted a bottleneck in an iteration.
Chunked iteration had its problems too anyway.
Are you experiencing an actual problem at the moment?

Yes, I don't know why but I found if I have 1000 entities with 5-6 components, and I frequently use 3 or 4 components in a system, the speed is much slower than OOP design or perfect SoA.
I think I need detailed profiling to identify the problem but I have no time to do that. Currently, I am switching to archetype-based ECS to see the difference.

It's definitely unlikely that 1000 entities can cause problems.
My suggestion is to measure and find the real bottleneck.
Good luck with your migration. :+1:

looks like erasing the type of a component with poly prevents SIMD optimization. I think maybe it frequently accesses the virtual table. Anyway, thank you for your fast response.

Mmm... Not sure I get what you mean.
The poly in the registry is a non-owning wrapper to an externally managed pool.
So, it's unlikely that it affects any SIMD optimization. Mainly because it doesn't manage any pool.

I wrapped my component into a poly object.  And I make the poly object own the original component and I think it is not good to hold a reference of a component in a pool.


Add an "empty page" label to the TreeView

Motivation
As we are introducing a label for pages, which are having an empty content, we should provide the same feature for the Django. The label should be shown by the following conditions...
... related region is not released.
... page is not mirroring content from another page.
... page has no children.
... page has an empty string as content.
Proposed Solution
In the current system a wordpress filter is adding a label to the treeView if the conditions apply. This could of course be done in a different way in django. A possible solution could be a django filter/decorator to use it inside the django templating.

Implementing this should result in a reusable concept for other tags as well.

Implementing this should result in a reusable concept for other tags as well.


Input "pickString" and "command" could select unlisted argument

Hello,
I'm using  "pickString" and "command" input types and usually it works great but sometime I just need to customise the selection. (Actually idk how the "command" type works. Maybe does not apply to it.)
Now it is not possible but it could work that I can type anything to the search and when I hit enter it choses my text even if it is not listed. I hope ti is clear.
Could be like another property like "allowCustomString": true for backward compatibility..
Regex could be used as a validator.
Thanks for your consideration.

Previously suggested in https://github.com/microsoft/vscode/issues/91076#issuecomment-589619959

This feature request is now a candidate for our backlog. The community has 60 days to upvote the issue. If it receives 20 upvotes we will move it to our backlog. If not, we will close it. To learn more about how we handle feature requests, please see our documentation.
Happy Coding!

An alternative would be to allow the options configuration for promptString, which would allow users to either pick and/or type (ideally with fuzzy matching of the options).
In that sense, it is somewhat similar to #181353, which would allow users to pick from previously entered values (ideally with fuzzy matching).
That way, pickString could be reserved for when the list of options is static & finite.

This feature request has not yet received the 20 community upvotes it takes to make to our backlog. 10 days to go. To learn more about how we handle feature requests, please see our documentation.
Happy Coding!

:slightly_frowning_face: In the last 60 days, this feature request has received less than 20 community upvotes and we closed it. Still a big Thank You to you for taking the time to create this issue! To learn more about how we handle feature requests, please see our documentation.
Happy Coding!


Touching parent timestamps is not working

There is a bug in function
public function touchOwners()
{
    foreach ($this->touches as $relation) {
        $this->$relation()->touch();

        if ($this->$relation instanceof self) {
            $this->$relation->touchOwners();
        } elseif ($this->$relation instanceof Collection) {
            $this->$relation->each(function (Model $relation) {
                $relation->touchOwners();
            });
        }
    }
}

in Model.php, line 1646.
It should be $this->$relation->touch(); instead of $this->$relation()->touch();

https://github.com/laravel/framework/blob/5.1/src/Illuminate/Database/Eloquent/Model.php#L1646

You are wrong.
touch method is in Relation class which is returned by method.
https://github.com/laravel/framework/blob/5.1/src/Illuminate/Database/Eloquent/Relations/Relation.php#L121

Either way that bit of code is wrong shouldn't have the dollar variable sign.

Why shouldn't it? $relation variable contains relation name, so $this->$relation() calls relation method.
protected $touches = ['user'];
// ...
foreach ($this->touches as $relation) {
    // $relation == 'user';
    $this->$relation()->touch(); // $this->user()->touch();
    //...
}


Insider Risk Management with Office 365 E3 License?

Hi,
we want to use the Customer Lockbox with our Office 365 E3 license. As stated in the article using Office 365 E3 and Microsoft 365 E5 Insider Risk Management add-on is not possible. Is that right?

... your organization must have one of the following subscriptions or add-ons:
Microsoft 365 E5 subscription (paid or trial version)
Microsoft 365 E3 subscription + the Microsoft 365 E5 Compliance add-on
Microsoft 365 E3 subscription + the Microsoft 365 E5 Insider Risk Management add-on
Microsoft 365 A5 subscription (paid or trial version)
Microsoft 365 A3 subscription + the Microsoft 365 A5 Compliance add-on
Microsoft 365 A3 subscription + the Microsoft 365 A5 Insider Risk Management add-on

Do I really have to buy Microsoft 365 E3 in stead of Office 365 E3 to make use Customer Lockbox?
Just to be clear, I'm not talking about the other features of Microsoft 365 E5 Insider Risk Management add-on just want to use Customer Lockbox.
Thanks for your help
Denis
[Enter feedback here]

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

ID: cb98e0ff-d34c-75bc-0ade-7dc70fc7f4bd
Version Independent ID: 5172471f-e514-bcde-16e0-d8d8090a892a
Content: Get started with insider risk management - Microsoft 365 Compliance
Content Source: microsoft-365/compliance/insider-risk-management-configure.md
Product: microsoft-365-enterprise
GitHub Login: @robmazz
Microsoft Alias: robmazz

@denishol Thank you for your feedback. You are correct, To use customer lockbox you need to have Microsoft 365 E3 subscription + the Microsoft 365 E5 Compliance add-on and it does not work with Office 365 E3.
Hope this helps!
@yogkumgit There are no changes required in the document and the issue can be closed.
Thanks
Sri

@denishol Thank you for your feedback. You are correct, To use customer lockbox you need to have Microsoft 365 E3 subscription + the Microsoft 365 E5 Compliance add-on and it does not work with Office 365 E3.
Hope this helps!
@yogkumgit There are no changes required in the document and the issue can be closed.
Thanks
Sri

Thanks for your anwer, @msbemba
Then this info must be wrong: https://www.microsoft.com/en-gb/microsoft-365/business/e5-compliance

The Microsoft 365 E5 Compliance suite is available only to customers currently licensed for Microsoft 365 E3 or for both Office 365 E3 and Enterprise Mobility + Security E3.

Could you please confirm, which of the websites is wrong?
Thank you for your help!

I will test this combination and update you accordingly.
Thanks
Sri
On Tue, 2/02/2021 at 13:13 denishol<EMAIL_ADDRESS>wrote:

Thanks for your anwer, @msbemba https://github.com/msbemba
Then this info must be wrong:
https://www.microsoft.com/en-gb/microsoft-365/business/e5-compliance
The Microsoft 365 E5 Compliance suite is available only to customers
currently licensed for Microsoft 365 E3 or for both Office 365 E3 and
Enterprise Mobility + Security E3.
Could you please confirm, which of the websites is wrong?
Thank you for your help!
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/MicrosoftDocs/microsoft-365-docs/issues/3972#issuecomment-771436678,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AK63OZCMQQMHADKJOTIZ2E3S46UIPANCNFSM4WQOSOHA
.

--

Sriraman Srinivasan
If Plan "A" Doesnt work there are 25 other letters:) Stay Cool !

@denishol Thank you for your feedback. I have updated the document to include Office 365 E3* and
Enterprise Mobility + Security E3.
This can be tracked via PR# https://github.com/MicrosoftDocs/microsoft-365-docs/pull/4096
Thanks
Sri


Cleaner web seed implementation

Ideally web seeds would be handled directly as a special-case instead of treating the web seed as another peer and interpreting wire protocol requests as http requests. That was a clever hack to get this shipped quickly, but we can do better.
We can find pieces that have no blocks reserved and give those entire pieces to the web seed. The request size can even span multiple pieces.
Once this is done, we should revert this change to torrent-piece, which amounts to a hack: https://github.com/feross/torrent-piece/pull/1

Last week, while testing Diego's changes in webseed handling (nice to see they are merged now!) I found two 'issues'

As you mention, the request size to the server is right now the size of the piece, so depending on the piece size in the torrent definition the web server gets hammered.

If the web server has some kind of connection limitations (like nginx's limit_conn addr), once you complete the first pieces, the server start sending 50x errors and the web peer is discarded. The special-case should consider the number of connections to the webseed.

Another issue I found yesterday and shared on Gitter is that when we have 10+ connections each of 128KB requests and your internet slow, one or more requests will timeout causing the web seed to be removed.

Exactly, i was trying to understand why is requesting 10+ connections... tried to mitigate with a choke() but all the requests get removed from wire and then web seed gets removed from client...
I think the solution is not try to handle web seeds as a peer in the swarm. Maybe get back to last year's approach to start a new parallel 'http download service' that reserves the pieces and return them if something gets wrong with the request.

@DiegoRBaquero : the fix you sent reduce the amount of requests if it is a slow webseed, but it still calculates the number of connections based on getPipelineLength using speed/piece size, but if the webseed is FAST (like in a CDN), the number of connections increase fast and in the third request you hit again with the limit per IP.
Instead i tried
if (isWebSeed) maxOutstandingRequests = Math.min(maxOutstandingRequests, MAX_CONCURRENT_WEBSEED_CONNECTIONS) // A webseed will handle it's real max requests
...and it works like a charm.
In my quick test i made MAX_CONCURRENT_WEBSEED_CONNECTIONS = 2, but it can be passed as paramater in torrent opts.

@grunjol The idea of the PR is to set the max requests based on the current speed, not limit to a "reasonable" http max requests limit (which I'd say is in 16-32 concurrent).
If the webseed is fast, as you say, then more requests can be done. If it's slow, there will always be the minimum of 2.
I don't think any webserver limits the concurrent requests per IP to a lower amount than 8. And I haven't seen any errors related to a connection limit but rather requests timing out because of bandwidth capacity, which again is the purpose of my PR.

@DiegoRBaquero Yes, i understand your PR, and its limiting the amount of connections in the case of a slow bandwith.
I'm just saying that other server limits can be reached like max simultaneous connections (and yes, commercial and free streamers like Wowza or Nimble have [BW and connection] per IP limits) that can be handle with a little modification.

@grunjol Yeah, I think we should allow an optional value in the client for webseeds max requests. Looking forward the PR

I just sent it
You can test the behavior with your test environment. I think hard limiting the connections prevents the sever being hammered (think it in scale, the number of server connections is limited) and also will help in your case of slow connection too.

a "reasonable" http max requests limit (which I'd say is in 16-32 concurrent)

Most browsers enforce no more than 6 concurrent connection to the same server. This has been the case for a very long time. See: https://www.browserscope.org/?category=network
In an ideal world, we would make a single large request to fetch a large contiguous range (ideally around 2-5 pieces) and, once that is complete, make another request. There's no need for lots of concurrent connections.

Yes, but we are not targeting customer-end requests. Webservers by default don't have any limit so unless specified (as grunjol suugested and PRd) I don't see why we should hard limit to any number of max requests.
I like the idea of sockets webseed, thoughts?

is this improved already? As we don't see any info when webseeds get stuck.

@DiegoRBaquero actually we observed that when used webseed each piece is requested 16 times from the webseed server! Is this a bug or related to the number of simultaneous connections to the webseed server? Maybe this is related to the choke behavior we also get afterwards.

Moving this conversation to https://github.com/webtorrent/webtorrent/issues/2467 as there are a lot of things wrong with webseeds so this unifies those conversations


Future of app

This is mainly directed at @Zetsaika
So I think this project got off to a good start, but as I learned more of QT I started to realize that the cost of not being familiar with the platform is quite high. I'm worried that it's going to be really difficult to get this finished an polished on QT. And even if we do get it out, it will be difficult to maintain.
I'm considering transitioning over to nw.js or electron to build the app.
This would mean abandoning all the code we have and starting fresh.
The advantages are: a familiar platform, html/css/js, and the potential to reuse styles and assets already built on the main site.
The disadvantages are abandoning the work we've done. And potentially something with a bigger binary size and more memory usage.
I don't mind putting aside what I've coded, but @Zetsaika has also written a lot.
Tell me what you think.

I feel that moving to html/css/js trio will lead to a more solid base for the project and better identity throughout platforms(counting web and mobile as well).
It was fun learning QT and its quirks, but is a wise choice to move on.

I'm leaning towards electron: https://github.com/atom/electron/blob/master/docs/development/atom-shell-vs-node-webkit.md


Import to docker form board, Docker button on boards

What's done

Allow adding multiple Docker apps at once
Docker button on all boards for admins (to manage/add containers)
Prefetching of Docker containers on page load

Issues

Config doesn't get reloaded when adding apps, idk how to make it reload without reloading the page (or I don't know how to get the current config from the memory anymore to add the newly added items to it via setConfig())
The modal opening another modal is quite ugly, I wish the "add to board" button would have the context and add to the current board instead.

Solutions

Leave it as is
Find a way to set the current config (in the memory, the backend one is properly mutated) like we could before with useConfigContext
Change the way we load the config to a trpc procedure so that it can be easily reloaded (refetched)

Screenshots

@manuel-rw this is ready for review


Batch call to PlaylistItems: insert produces intermittent HttpError 500

Environment details

OS type and version: Windows 11 Pro (22H2)
Python version: 3.10.9
pip version: 22.0.2
google-api-python-client version: 2.70.0

Code example
# -*- coding: utf-8 -*-

import os
import pickle

import google_auth_oauthlib.flow
import googleapiclient.discovery
import googleapiclient.errors

# YouTube API variables
scopes = ["https://www.googleapis.com/auth/youtube.force-ssl"]
client_secrets_file = "client_secret.json"
api_service_name = "youtube"
api_version = "v3"

def main():
    # Disable OAuthlib's HTTPS verification when running locally.
    # *DO NOT* leave this option enabled in production.
    # os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"
    # Get credentials and create an API client
    flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(
        client_secrets_file, scopes)
    youtube = get_authenticated_service()
    batch = youtube.new_batch_http_request(callback=insert_callback)

    playlistId = "PL2iXsIOEmdYXFsP-Clp8w1Pf5chGN0i1S"
    video_ids   = [
                   "d7ypnPjz81I",
                   "vZv9-TWdBJM",
                   "7uG6E6bVKU0",
                   "8EzfBYFU8Q0"
                 ]

    # Create a list of playlist items, one for each video ID
    playlist_items = []
    for video_id in video_ids:
        batch.add(youtube.playlistItems().insert(
            part="snippet",
            body={
              "snippet": {
                "playlistId": playlistId, #an actual playlistid
                #"position": 0,
                "resourceId": {
                  "kind": "youtube#video",
                  "videoId": video_id
                }
              }
            }
          )
        )

    # Use the batch method to add the playlist items to the playlist in a single API call
    response = batch.execute()

    print(response)

def insert_callback(request_id, response, exception):
    if exception is not None:
        print(exception)
    else:
        print(response)

# Check for pickled credentials. If found, use these to make API calls,
# otherwise perform full authentication process
def get_authenticated_service():
    if os.path.exists("CREDENTIALS_PICKLE_FILE"):
        with open("CREDENTIALS_PICKLE_FILE", 'rb') as f:
            credentials = pickle.load(f)
    else:
        flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(client_secrets_file, scopes)
        credentials = flow.run_console()
        with open("CREDENTIALS_PICKLE_FILE", 'wb') as f:
            pickle.dump(credentials, f)
    return googleapiclient.discovery.build(
        api_service_name, api_version, credentials=credentials)

if __name__ == "__main__":
    main()

Expected Result
The videos are added to the playlist
Actual Result
Some videos are added, others produce the following reponse:

<HttpError 500 when requesting https://youtube.googleapis.com/youtube/v3/playlistItems?part=snippet&alt=json returned "Internal error encountered.". Details: "[{'message': 'Internal error encountered.', 'domain': 'global', 'reason': 'backendError'}]">

There is no pattern to which videos are added and which ones cause the error. A video that is added on one run can sometimes error out the next time the script is run.

The Google API team suggested that I implement a delay between API calls. Can this be done using the Python client library?


feat(Synchronizer): Change Scope of Event handlers

Set fireEvent and onEvent functions from anonymous inner functions to object keys, to allow consumers to monkeypatch the functions of need be.

Please check if the PR fulfills these requirements

[x] The commit message follows our guidelines
[ ] Tests for the changes have been added (for bug fixes / features)
[ ] Docs have been added / updated (for bug fixes / features)

What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)
Minor feature

What is the current behavior? (You can also link to an open issue here)
Anonymous inner functions in the Synchronizer class cannot be accessed or changed.

What is the new behavior (if this is a feature change)?
The changes allow for consumers to modify/extend Synchronizer behavior without having to create a whole new class

Does this PR introduce a breaking change? (What changes might users need to make in their application due to this PR?)
No

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


feat: support import image for specific platform

Allow configuration of the platform when import image

PTAL @dmcgowan i found that export command use platform flag which is a stringslice. Should I modify this pr to be consistent with it? perhaps platforms is more appropriate.


Workaround for missing monitoring namespace

Fixes https://github.com/knative/eventing/issues/3469 but for eventing-contrib
Similar to https://github.com/knative/eventing/pull/3470

/lgtm
/approve


*: rename TiProxy to tiproxy in go import

What problem does this PR solve?

Issue Number: close #352
Problem Summary:
Rename TiProxy to tiproxy.
What is changed and how it works:
Check List
Tests

[ ] Unit test
[ ] Integration test
[ ] Manual test (add detailed scripts or steps below)
[x] No code

Notable changes

[ ] Has configuration change
[ ] Has HTTP API interfaces change
[ ] Has tiproxyctl change
[ ] Other user behavior changes

Release note

Please refer to Release Notes Language Style Guide to write a quality release note.
None

/test ?

/test ?

/hold

/test all

/unhold


Broken on PARADISE LOST (and presumably older versions)

Could not parse request body: missing field `classEmblemBase` at line 1 column 1258

Older versions of CHUNITHM don't have classEmblemBase and classEmblemMedal. Presumably the medal field in userDataEx replaces this?

Might be fixed by 0.4? At least the dan/emblem fields are optional now, but I'm not sure if userDataEx.medal contains dan information on old CHUNITHM.


Build brpc failed

Describe the bug
Build brpc failed
Environment

OS: [ubuntu 20]
Compiler: revision

To Reproduce
Steps to reproduce the behavior:

./vcpkg install brpc

Repro code when
Expected behavior
A clear and concise description of what you expected to happen.
Failure logs
-- Applying patch fix_boost_ptr.patch
-- Applying patch fix_thrift.patch
-- Applying patch /home/zreal/research/vcpkg/downloads/apache-incubator-brpc-1679.diff
-- Using source at /home/zreal/research/vcpkg/buildtrees/brpc/src/a1b8d7f990-fc2e8574c2.clean
-- Configuring x64-linux-dbg
-- Configuring x64-linux-rel
-- Building x64-linux-dbg
CMake Error at scripts/cmake/vcpkg_execute_build_process.cmake:158 (message):
    Command failed: /usr/local/bin/cmake --build . --config Debug --target install -- -v -j9
    Working Directory: /home/zreal/research/vcpkg/buildtrees/brpc/x64-linux-dbg
    See logs for more information:
      /home/zreal/research/vcpkg/buildtrees/brpc/install-x64-linux-dbg-out.log

Call Stack (most recent call first):
  installed/x64-linux/share/vcpkg-cmake/vcpkg_cmake_build.cmake:111 (vcpkg_execute_build_process)
  installed/x64-linux/share/vcpkg-cmake/vcpkg_cmake_install.cmake:41 (vcpkg_cmake_build)
  ports/brpc/portfile.cmake:27 (vcpkg_cmake_install)
  scripts/ports.cmake:145 (include)

Error: Building package brpc:x64-linux failed with: BUILD_FAILED
Please ensure you're using the latest portfiles with `git pull` and `./vcpkg update`.
Then check for known issues at:
  https://github.com/microsoft/vcpkg/issues?q=is%3Aissue+is%3Aopen+in%3Atitle+brpc
You can submit a new issue at:
  https://github.com/microsoft/vcpkg/issues/new?template=report-package-build-failure.md&title=[brpc]+Build+error
including:
  package: brpc[core]:x64-linux -> 0.9.7#7
    vcpkg-tool version: 2022-03-25-d9702d9d89b9468c32efc3f18fb84c3021d7dbae
    vcpkg-scripts version: 9d9a6f486 2022-03-30 (15 hours ago)

Additionally, attach any relevant sections from the log files above.

Additional context
Add any other context about the problem here.

Complete Log Info
zreal@Zreal-PC:~/research/vcpkg$ ./vcpkg install brpc
Computing installation plan...
The following packages will be built and installed:
  * boost-algorithm[core]:x64-linux -> 1.78.0
  * boost-align[core]:x64-linux -> 1.78.0
  * boost-array[core]:x64-linux -> 1.78.0
  * boost-assert[core]:x64-linux -> 1.78.0
  * boost-atomic[core]:x64-linux -> 1.78.0
  * boost-bind[core]:x64-linux -> 1.78.0
  * boost-build[core]:x64-linux -> 1.78.0#1
  * boost-chrono[core]:x64-linux -> 1.78.0
  * boost-concept-check[core]:x64-linux -> 1.78.0
  * boost-config[core]:x64-linux -> 1.78.0
  * boost-container[core]:x64-linux -> 1.78.0
  * boost-container-hash[core]:x64-linux -> 1.78.0
  * boost-conversion[core]:x64-linux -> 1.78.0
  * boost-core[core]:x64-linux -> 1.78.0
  * boost-date-time[core]:x64-linux -> 1.78.0
  * boost-detail[core]:x64-linux -> 1.78.0
  * boost-exception[core]:x64-linux -> 1.78.0
  * boost-function[core]:x64-linux -> 1.78.0
  * boost-function-types[core]:x64-linux -> 1.78.0
  * boost-fusion[core]:x64-linux -> 1.78.0
  * boost-integer[core]:x64-linux -> 1.78.0
  * boost-intrusive[core]:x64-linux -> 1.78.0
  * boost-io[core]:x64-linux -> 1.78.0
  * boost-iterator[core]:x64-linux -> 1.78.0
  * boost-lexical-cast[core]:x64-linux -> 1.78.0
  * boost-locale[core]:x64-linux -> 1.78.0
  * boost-modular-build-helper[core]:x64-linux -> 1.78.0#3
  * boost-move[core]:x64-linux -> 1.78.0
  * boost-mp11[core]:x64-linux -> 1.78.0
  * boost-mpl[core]:x64-linux -> 1.78.0
  * boost-numeric-conversion[core]:x64-linux -> 1.78.0
  * boost-optional[core]:x64-linux -> 1.78.0
  * boost-predef[core]:x64-linux -> 1.78.0
  * boost-preprocessor[core]:x64-linux -> 1.78.0
  * boost-range[core]:x64-linux -> 1.78.0
  * boost-ratio[core]:x64-linux -> 1.78.0
  * boost-rational[core]:x64-linux -> 1.78.0
  * boost-regex[core]:x64-linux -> 1.78.0
  * boost-scope-exit[core]:x64-linux -> 1.78.0
  * boost-smart-ptr[core]:x64-linux -> 1.78.0
  * boost-static-assert[core]:x64-linux -> 1.78.0
  * boost-system[core]:x64-linux -> 1.78.0
  * boost-thread[core]:x64-linux -> 1.78.0
  * boost-throw-exception[core]:x64-linux -> 1.78.0
  * boost-tokenizer[core]:x64-linux -> 1.78.0
  * boost-tuple[core]:x64-linux -> 1.78.0
  * boost-type-index[core]:x64-linux -> 1.78.0
  * boost-type-traits[core]:x64-linux -> 1.78.0
  * boost-typeof[core]:x64-linux -> 1.78.0
  * boost-uninstall[core]:x64-linux -> 1.78.0
  * boost-unordered[core]:x64-linux -> 1.78.0
  * boost-utility[core]:x64-linux -> 1.78.0
  * boost-variant2[core]:x64-linux -> 1.78.0
  * boost-vcpkg-helpers[core]:x64-linux -> 1.78.0#1
  * boost-winapi[core]:x64-linux -> 1.78.0
    brpc[core]:x64-linux -> 0.9.7#7
  * gflags[core]:x64-linux -> 2.2.2#5
  * glog[core]:x64-linux -> 0.4.0#4
  * leveldb[core]:x64-linux -> 1.22#5
  * libevent[core,thread]:x64-linux -> 2.1.12#6
  * libiconv[core]:x64-linux -> 1.16#12
  * openssl[core]:x64-linux -> 1.1.1n#1
  * protobuf[core,zlib]:x64-linux -> 3.19.4
  * thrift[core]:x64-linux -> 0.13.0#2
  * vcpkg-cmake[core]:x64-linux -> 2022-02-14
  * vcpkg-cmake-config[core]:x64-linux -> 2022-02-06
  * zlib[core]:x64-linux -> 1.2.12
Additional packages (*) will be modified to complete this operation.
Detecting compiler hash for triplet x64-linux...
Restored 66 packages from /home/zreal/.cache/vcpkg/archives in 4.016 s. Use --debug to see more details.
Starting package 1/67: boost-uninstall:x64-linux
Installing package boost-uninstall[core]:x64-linux...
Elapsed time for package boost-uninstall:x64-linux: 34.47 ms
Starting package 2/67: boost-vcpkg-helpers:x64-linux
Installing package boost-vcpkg-helpers[core]:x64-linux...
Elapsed time for package boost-vcpkg-helpers:x64-linux: 3.457 ms
Starting package 3/67: boost-config:x64-linux
Installing package boost-config[core]:x64-linux...
Elapsed time for package boost-config:x64-linux: 468.7 ms
Starting package 4/67: boost-assert:x64-linux
Installing package boost-assert[core]:x64-linux...
Elapsed time for package boost-assert:x64-linux: 14.9 ms
Starting package 5/67: boost-static-assert:x64-linux
Installing package boost-static-assert[core]:x64-linux...
Elapsed time for package boost-static-assert:x64-linux: 5.807 ms
Starting package 6/67: boost-throw-exception:x64-linux
Installing package boost-throw-exception[core]:x64-linux...
Elapsed time for package boost-throw-exception:x64-linux: 55.03 ms
Starting package 7/67: boost-core:x64-linux
Installing package boost-core[core]:x64-linux...
Elapsed time for package boost-core:x64-linux: 86.1 ms
Starting package 8/67: boost-array:x64-linux
Installing package boost-array[core]:x64-linux...
Elapsed time for package boost-array:x64-linux: 33.9 ms
Starting package 9/67: boost-bind:x64-linux
Installing package boost-bind[core]:x64-linux...
Elapsed time for package boost-bind:x64-linux: 291.5 ms
Starting package 10/67: boost-preprocessor:x64-linux
Installing package boost-preprocessor[core]:x64-linux...
Elapsed time for package boost-preprocessor:x64-linux: 2.433 s
Starting package 11/67: boost-type-traits:x64-linux
Installing package boost-type-traits[core]:x64-linux...
Elapsed time for package boost-type-traits:x64-linux: 1.479 s
Starting package 12/67: boost-concept-check:x64-linux
Installing package boost-concept-check[core]:x64-linux...
Elapsed time for package boost-concept-check:x64-linux: 100.5 ms
Starting package 13/67: boost-build:x64-linux
Installing package boost-build[core]:x64-linux...
Elapsed time for package boost-build:x64-linux: 1.26 s
Starting package 14/67: vcpkg-cmake:x64-linux
Installing package vcpkg-cmake[core]:x64-linux...
Elapsed time for package vcpkg-cmake:x64-linux: 1.554 ms
Starting package 15/67: boost-modular-build-helper:x64-linux
Installing package boost-modular-build-helper[core]:x64-linux...
Elapsed time for package boost-modular-build-helper:x64-linux: 1.526 ms
Starting package 16/67: boost-predef:x64-linux
Installing package boost-predef[core]:x64-linux...
Elapsed time for package boost-predef:x64-linux: 8.357 ms
Starting package 17/67: boost-winapi:x64-linux
Installing package boost-winapi[core]:x64-linux...
Elapsed time for package boost-winapi:x64-linux: 9.486 ms
Starting package 18/67: boost-move:x64-linux
Installing package boost-move[core]:x64-linux...
Elapsed time for package boost-move:x64-linux: 3.777 ms
Starting package 19/67: boost-smart-ptr:x64-linux
Installing package boost-smart-ptr[core]:x64-linux...
Elapsed time for package boost-smart-ptr:x64-linux: 7.457 ms
Starting package 20/67: boost-tuple:x64-linux
Installing package boost-tuple[core]:x64-linux...
Elapsed time for package boost-tuple:x64-linux: 3.164 ms
Starting package 21/67: boost-exception:x64-linux
Installing package boost-exception[core]:x64-linux...
Elapsed time for package boost-exception:x64-linux: 8.353 ms
Starting package 22/67: boost-integer:x64-linux
Installing package boost-integer[core]:x64-linux...
Elapsed time for package boost-integer:x64-linux: 4.029 ms
Starting package 23/67: boost-detail:x64-linux
Installing package boost-detail[core]:x64-linux...
Elapsed time for package boost-detail:x64-linux: 7.12 ms
Starting package 24/67: boost-container-hash:x64-linux
Installing package boost-container-hash[core]:x64-linux...
Elapsed time for package boost-container-hash:x64-linux: 3.858 ms
Starting package 25/67: boost-type-index:x64-linux
Installing package boost-type-index[core]:x64-linux...
Elapsed time for package boost-type-index:x64-linux: 4.239 ms
Starting package 26/67: boost-typeof:x64-linux
Installing package boost-typeof[core]:x64-linux...
Elapsed time for package boost-typeof:x64-linux: 66 ms
Starting package 27/67: boost-function:x64-linux
Installing package boost-function[core]:x64-linux...
Elapsed time for package boost-function:x64-linux: 89.06 ms
Starting package 28/67: boost-conversion:x64-linux
Installing package boost-conversion[core]:x64-linux...
Elapsed time for package boost-conversion:x64-linux: 7.455 ms
Starting package 29/67: boost-io:x64-linux
Installing package boost-io[core]:x64-linux...
Elapsed time for package boost-io:x64-linux: 8.88 ms
Starting package 30/67: boost-utility:x64-linux
Installing package boost-utility[core]:x64-linux...
Elapsed time for package boost-utility:x64-linux: 16.02 ms
Starting package 31/67: boost-mpl:x64-linux
Installing package boost-mpl[core]:x64-linux...
Elapsed time for package boost-mpl:x64-linux: 189.8 ms
Starting package 32/67: boost-function-types:x64-linux
Installing package boost-function-types[core]:x64-linux...
Elapsed time for package boost-function-types:x64-linux: 6.25 ms
Starting package 33/67: boost-fusion:x64-linux
Installing package boost-fusion[core]:x64-linux...
Elapsed time for package boost-fusion:x64-linux: 527.3 ms
Starting package 34/67: boost-optional:x64-linux
Installing package boost-optional[core]:x64-linux...
Elapsed time for package boost-optional:x64-linux: 20.4 ms
Starting package 35/67: boost-iterator:x64-linux
Installing package boost-iterator[core]:x64-linux...
Elapsed time for package boost-iterator:x64-linux: 30.21 ms
Starting package 36/67: boost-regex:x64-linux
Installing package boost-regex[core]:x64-linux...
Elapsed time for package boost-regex:x64-linux: 214.5 ms
Starting package 37/67: boost-range:x64-linux
Installing package boost-range[core]:x64-linux...
Elapsed time for package boost-range:x64-linux: 104.4 ms
Starting package 38/67: boost-intrusive:x64-linux
Installing package boost-intrusive[core]:x64-linux...
Elapsed time for package boost-intrusive:x64-linux: 80.16 ms
Starting package 39/67: boost-container:x64-linux
Installing package boost-container[core]:x64-linux...
Elapsed time for package boost-container:x64-linux: 189.6 ms
Starting package 40/67: boost-unordered:x64-linux
Installing package boost-unordered[core]:x64-linux...
Elapsed time for package boost-unordered:x64-linux: 22.4 ms
Starting package 41/67: boost-algorithm:x64-linux
Installing package boost-algorithm[core]:x64-linux...
Elapsed time for package boost-algorithm:x64-linux: 36.1 ms
Starting package 42/67: boost-align:x64-linux
Installing package boost-align[core]:x64-linux...
Elapsed time for package boost-align:x64-linux: 26.8 ms
Starting package 43/67: boost-atomic:x64-linux
Installing package boost-atomic[core]:x64-linux...
Elapsed time for package boost-atomic:x64-linux: 97.82 ms
Starting package 44/67: boost-rational:x64-linux
Installing package boost-rational[core]:x64-linux...
Elapsed time for package boost-rational:x64-linux: 12.92 ms
Starting package 45/67: boost-ratio:x64-linux
Installing package boost-ratio[core]:x64-linux...
Elapsed time for package boost-ratio:x64-linux: 19.44 ms
Starting package 46/67: boost-mp11:x64-linux
Installing package boost-mp11[core]:x64-linux...
Elapsed time for package boost-mp11:x64-linux: 7.057 ms
Starting package 47/67: boost-variant2:x64-linux
Installing package boost-variant2[core]:x64-linux...
Elapsed time for package boost-variant2:x64-linux: 3.324 ms
Starting package 48/67: boost-system:x64-linux
Installing package boost-system[core]:x64-linux...
Elapsed time for package boost-system:x64-linux: 38.08 ms
Starting package 49/67: boost-chrono:x64-linux
Installing package boost-chrono[core]:x64-linux...
Elapsed time for package boost-chrono:x64-linux: 44.85 ms
Starting package 50/67: boost-numeric-conversion:x64-linux
Installing package boost-numeric-conversion[core]:x64-linux...
Elapsed time for package boost-numeric-conversion:x64-linux: 33.8 ms
Starting package 51/67: boost-lexical-cast:x64-linux
Installing package boost-lexical-cast[core]:x64-linux...
Elapsed time for package boost-lexical-cast:x64-linux: 93.43 ms
Starting package 52/67: boost-tokenizer:x64-linux
Installing package boost-tokenizer[core]:x64-linux...
Elapsed time for package boost-tokenizer:x64-linux: 14.1 ms
Starting package 53/67: boost-date-time:x64-linux
Installing package boost-date-time[core]:x64-linux...
Elapsed time for package boost-date-time:x64-linux: 54.2 ms
Starting package 54/67: boost-thread:x64-linux
Installing package boost-thread[core]:x64-linux...
Elapsed time for package boost-thread:x64-linux: 104.6 ms
Starting package 55/67: libiconv:x64-linux
Installing package libiconv[core]:x64-linux...
Elapsed time for package libiconv:x64-linux: 11.89 ms
Starting package 56/67: boost-locale:x64-linux
Installing package boost-locale[core]:x64-linux...
Elapsed time for package boost-locale:x64-linux: 318.8 ms
Starting package 57/67: boost-scope-exit:x64-linux
Installing package boost-scope-exit[core]:x64-linux...
Elapsed time for package boost-scope-exit:x64-linux: 37.79 ms
Starting package 58/67: gflags:x64-linux
Installing package gflags[core]:x64-linux...
Elapsed time for package gflags:x64-linux: 35.17 ms
Starting package 59/67: glog:x64-linux
Installing package glog[core]:x64-linux...
Elapsed time for package glog:x64-linux: 44.43 ms
Starting package 60/67: vcpkg-cmake-config:x64-linux
Installing package vcpkg-cmake-config[core]:x64-linux...
Elapsed time for package vcpkg-cmake-config:x64-linux: 6.24 ms
Starting package 61/67: leveldb:x64-linux
Installing package leveldb[core]:x64-linux...
Elapsed time for package leveldb:x64-linux: 116.5 ms
Starting package 62/67: openssl:x64-linux
Installing package openssl[core]:x64-linux...
Elapsed time for package openssl:x64-linux: 430.3 ms
Starting package 63/67: zlib:x64-linux
Installing package zlib[core]:x64-linux...
Elapsed time for package zlib:x64-linux: 80.77 ms
Starting package 64/67: protobuf:x64-linux
Installing package protobuf[core,zlib]:x64-linux...
Elapsed time for package protobuf:x64-linux: 1.928 s
Starting package 65/67: libevent:x64-linux
Installing package libevent[core,thread]:x64-linux...
Elapsed time for package libevent:x64-linux: 96.92 ms
Starting package 66/67: thrift:x64-linux
Installing package thrift[core]:x64-linux...
Elapsed time for package thrift:x64-linux: 202.7 ms
Starting package 67/67: brpc:x64-linux
Building package brpc[core]:x64-linux...
-- Downloading https://patch-diff.githubusercontent.com/raw/apache/incubator-brpc/pull/1679.diff -> apache-incubator-brpc-1679.diff...
-- Downloading https://github.com/apache/incubator-brpc/archive/1d6510aa50075cade5ed539ee09a11a1b8d7f990.tar.gz -> apache-incubator-brpc-1d6510aa50075cade5ed539ee09a11a1b8d7f990.tar.gz...
-- Extracting source /home/zreal/research/vcpkg/downloads/apache-incubator-brpc-1d6510aa50075cade5ed539ee09a11a1b8d7f990.tar.gz
-- Applying patch fix_boost_ptr.patch
-- Applying patch fix_thrift.patch
-- Applying patch /home/zreal/research/vcpkg/downloads/apache-incubator-brpc-1679.diff
-- Using source at /home/zreal/research/vcpkg/buildtrees/brpc/src/a1b8d7f990-fc2e8574c2.clean
-- Configuring x64-linux-dbg
-- Configuring x64-linux-rel
-- Building x64-linux-dbg
CMake Error at scripts/cmake/vcpkg_execute_build_process.cmake:158 (message):
    Command failed: /usr/local/bin/cmake --build . --config Debug --target install -- -v -j9
    Working Directory: /home/zreal/research/vcpkg/buildtrees/brpc/x64-linux-dbg
    See logs for more information:
      /home/zreal/research/vcpkg/buildtrees/brpc/install-x64-linux-dbg-out.log

Call Stack (most recent call first):
  installed/x64-linux/share/vcpkg-cmake/vcpkg_cmake_build.cmake:111 (vcpkg_execute_build_process)
  installed/x64-linux/share/vcpkg-cmake/vcpkg_cmake_install.cmake:41 (vcpkg_cmake_build)
  ports/brpc/portfile.cmake:27 (vcpkg_cmake_install)
  scripts/ports.cmake:145 (include)

Error: Building package brpc:x64-linux failed with: BUILD_FAILED
Please ensure you're using the latest portfiles with `git pull` and `./vcpkg update`.
Then check for known issues at:
  https://github.com/microsoft/vcpkg/issues?q=is%3Aissue+is%3Aopen+in%3Atitle+brpc
You can submit a new issue at:
  https://github.com/microsoft/vcpkg/issues/new?template=report-package-build-failure.md&title=[brpc]+Build+error
including:
  package: brpc[core]:x64-linux -> 0.9.7#7
    vcpkg-tool version: 2022-03-25-d9702d9d89b9468c32efc3f18fb84c3021d7dbae
    vcpkg-scripts version: 9d9a6f486 2022-03-30 (15 hours ago)

Additionally, attach any relevant sections from the log files above.

The source issue: https://github.com/apache/incubator-brpc/issues/1693

In this issue apache/incubator-brpc/issues/1693, the solution is to change the env setting. It seems not a good idea

In this issue apache/incubator-brpc/issues/1693, the solution is to change the env setting. It seems not a good idea

But this issue is a source issue, it need to upstream to fix this. If the upstream solution has been merged to source, I will submit a PR to sync on VCPKG.


[FLINK-15193][FLINK-15243][table][documentation] Move DDL to first tab in table connector page&Fix line feed in DDL

What is the purpose of the change
Since we have a good support for DDL in tableEnv.sqlUpdate and SQL-CLI, I think it is time to highlight DDL in the document.
Brief change log
Move DDL to first tab in table connector page
Verifying this change
This change is a trivial rework without any test coverage.
Does this pull request potentially affect one of the following parts:

Dependencies (does it add or upgrade a dependency): no
The public API, i.e., is any changed class annotated with @Public(Evolving): no
The serializers: no
The runtime per-record code paths (performance sensitive):no
Anything that affects deployment or recovery: JobManager (and its components), Checkpointing, Yarn/Mesos, ZooKeeper:no
The S3 file system connector:no

Documentation

Does this pull request introduce a new feature?no

Thanks @wuchong for reviewing, updated.


Added Figma Bootstrap 5 UI kit

[Free Figma Bootstrap 5 UI Kit] -> [UI Components & Kits]
Figma Bootstrap UI Kit comprising 300+ organized Bootstrap 5 components built with atomic design system & auto layout. Kick start your next Figma project Just drag and drop pre-made components from the Assets panel. Configure them in the right sidebar. Fast and simple, as should be.
It is a comprehensive and easy-to-use Figma Library with organized components & atoms. It includes Bootstrap’s colors, grids, and typography so that you can easily customize it to fit your brand or product.
Features:

Design and Dev Consistency 👨💻
Effortless Resizing 😱
Design with autolayout😍
300+ Organized Components 🛠
Easy to customize

Download Figma: https://themeselection.com/products/free-figma-bootstrap-ui-kit/
Demo: https://www.youtube.com/watch?v=r6xTC0_O5cE&t=1s-

Clicking download asks the user to sign up and create an account, we are trying to add truly 100% free resources without forcing the user to take an action.
Closing.

Thank you very much for your suggestion. I will add as per the guideline in the next commit. I'm deleting this pull request and will add the resource through a new pull request.


Sporadic crashes during startup with Metal renderer

Bug description
During the startup of my MacOS application (bgfx with separate API thread) when calling bgfx::renderFrame() in the main thread, the app sporadically (maybe 50% chance) crashes.
Stack traces
Main thread:
libsystem_kernel.dylib!__pthread_kill (Unknown Source:0)
libsystem_pthread.dylib!pthread_kill (Unknown Source:0)
libsystem_c.dylib!abort (Unknown Source:0)
libsystem_c.dylib!__assert_rtn (Unknown Source:0)
Metal!MTLReportFailure.cold.1 (Unknown Source:0)
Metal!MTLReportFailure (Unknown Source:0)
Metal!-[MTLIOAccelCommandBuffer commit] (Unknown Source:0)
AMDRadeonX6000MTLDriver!-[GFXAAMD_MtlCmdBuffer commit] (Unknown Source:0)
AMDRadeonX6000MTLDriver!-[GFX10_MtlCmdBuffer commit] (Unknown Source:0)
libbase.dylib!bgfx::mtl::CommandBuffer::commit() (/path/to/app/thirdparty/bgfx/bgfx/src/renderer_mtl.h:187)
libbase.dylib!bgfx::mtl::CommandQueueMtl::kick(bool, bool) (/path/to/app/thirdparty/bgfx/bgfx/src/renderer_mtl.mm:3556)
libbase.dylib!bgfx::mtl::RendererContextMtl::flip() (/path/to/app/thirdparty/bgfx/bgfx/src/renderer_mtl.mm:1325)
libbase.dylib!bgfx::Context::flip() (/path/to/app/thirdparty/bgfx/bgfx/src/bgfx.cpp:2385)
libbase.dylib!bgfx::Context::renderFrame(int) (/path/to/app/thirdparty/bgfx/bgfx/src/bgfx.cpp:2432)
libbase.dylib!bgfx::renderFrame(int) (/path/to/app/thirdparty/bgfx/bgfx/src/bgfx.cpp:1480)
libbase.dylib! appns::Game::updateMainThread() (/path/to/app/base/src/game.cpp:268)
libbase.dylib! appns::Game::run() (/path/to/app/base/src/game.cpp:217)
app!main (/path/to/app/game/src/app.cpp:37)
libdyld.dylib!start (Unknown Source:0)
libdyld.dylib!start (Unknown Source:0)

API thread:
libsystem_kernel.dylib!semaphore_wait_trap (Unknown Source:0)
libdispatch.dylib!_dispatch_sema4_wait (Unknown Source:0)
libdispatch.dylib!_dispatch_semaphore_wait_slow (Unknown Source:0)
libbase.dylib!bx::Semaphore::wait(int) (/path/to/app/thirdparty/bgfx/bx/src/semaphore.cpp:108)
libbase.dylib!bgfx::Context::renderSemWait() (/path/to/app/thirdparty/bgfx/bgfx/src/bgfx_p.h:5062)
libbase.dylib!bgfx::Context::frame(bool) (/path/to/app/thirdparty/bgfx/bgfx/src/bgfx.cpp:2310)
libbase.dylib!bgfx::frame(bool) (/path/to/app/thirdparty/bgfx/bgfx/src/bgfx.cpp:4030)
libbase.dylib!appns::Game::processFrame(appns::GameManager&) (/path/to/app/base/src/game.cpp:336)
libbase.dylib!appns::Game::threadFunc() (/path/to/app/base/src/game.cpp:382)
libbase.dylib!decltype(*(std::__1::forward<appns::Game*>(fp0)).*fp()) std::__1::__invoke<void (appns::Game::*)(), appns::Game*, void>(void (appns::Game::*&&)(), appns::Game*&&) (/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.1.sdk/usr/include/c++/v1/type_traits:3635)
libbase.dylib!void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (appns::Game::*)(), appns::Game*, 2ul>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (appns::Game::*)(), appns::Game*>&, std::__1::__tuple_indices<2ul>) (/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.1.sdk/usr/include/c++/v1/thread:286)
libbase.dylib!void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (appns::Game::*)(), appns::Game*> >(void*) (/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.1.sdk/usr/include/c++/v1/thread:297)
libsystem_pthread.dylib!_pthread_start (Unknown Source:0)
libsystem_pthread.dylib!thread_start (Unknown Source:0)

SIGABRT in renderer_mtl.h at
void commit()
{
	[m_obj commit];
}

Additional context
Device: MacBook Pro 2019 (Intel) with MacOS Big Sur
I am using the latest master revision of bgfx.
Do you maybe have some hints what could go wrong here?

Can you reproduce issue with examples?

I will extract an example out of my project.

I fixed it. As I thought, it was not an issue with bgfx, it was my own multi-threading implementation of the app.


Possible EventEmitter memory leak detected

Node version: 8.11.4
Environment: Docker build on Google Cloud Build
supertest: ^3.1.0

I get this error when running my tests on build server:
(node:15) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 message listeners added. Use emitter.setMaxListeners() to increase limit

All of the tests are fairly boilerplate like this:
import request from "supertest";

beforeEach(() => {
  jest.clearAllMocks();
  jest.resetModules();
});

describe("Nonprofits", () => {
  it("Gets all nonprofits", done => {
    const mockNonprofits = [
      {
        userId: "string1",
        nonProfitId: "string1",
        dateCreated: "string1",
        amount: 100,
        description: "string1"
      }
    ];
    jest.doMock("../src/services/nonprofit/fetchNonprofit", () => ({
      fetchNonprofits(query) {
        return Promise.resolve(mockNonprofits);
      }
    }));
    const { app } = require("../src/app");
    request(app)
      .get("/api/v1/nonprofit")
      .expect(200, mockNonprofits, done);
  });

  it("Gets a single nonprofit", done => {
    const mockNonprofit = {
      userId: "string1",
      nonProfitId: "string1",
      dateCreated: "string1",
      amount: 100,
      description: "string1"
    };
    jest.doMock("../src/services/nonprofit/fetchNonprofit", () => ({
      fetchNonprofit(id) {
        return Promise.resolve(mockNonprofit);
      }
    }));
    const { app } = require("../src/app");
    request(app)
      .get("/api/v1/nonprofit/1")
      .expect(200, mockNonprofit, done);
  });
});

The build server produces that warning in the same location each time:
...
Step #2: > jest --runInBand --detectOpenHandles --forceExit
Step #2:
Step #2: GET /api/v1/product 200 8.266 ms - 145
Step #2: GET /api/v1/product/1 200 3.025 ms - 143
Step #2: PUT /api/v1/product/1 200 18.665 ms - 2
Step #2: POST /api/v1/product 201 12.362 ms - 12
Step #2: PASS __tests__/product.spec.ts (10.239s)
Step #2: DELETE /api/v1/product/1 200 2.444 ms - 2
Step #2: GET /api/v1/order 200 2.818 ms - 180
Step #2: GET /api/v1/order/1 200 2.577 ms - 178
Step #2: PASS __tests__/order.spec.ts
Step #2: POST /api/v1/order 201 6.432 ms - 12
Step #2: GET /api/v1/nonprofit 200 2.607 ms - 107
Step #2: (node:15) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 message listeners added. Use emitter.setMaxListeners() to increase limit
Step #2: GET /api/v1/nonprofit/1 200 2.528 ms - 105
Step #2: PASS __tests__/nonprofit.spec.ts
Step #2: POST /api/v1/nonprofit 201 18.387 ms - 12
Step #2: GET /api/v1/donation 200 2.590 ms - 107
Step #2: GET /api/v1/donation/1 200 2.488 ms - 105
...

Any fix?

I have a similar problem @theblindprophet did you manage to find a solution ?

@theblindprophet @epatrasc I seem to be having the same issue in node 10.16.3
anyone find the solution?

I am experiencing the same issue as well

I am also experiencing this ,any solution /workaround much appreciated

+1, still waiting for the prince that was promised to deliver a solution


fix(just): add i915 to modprobe.blacklist

If you have an nvidia GPU and a CPU with igpu inside you won't be able to start your system probably due to driver/module conflicts?
One possible workaround is to set i915.modeset=0 or module.blacklist=i915 to your grub config as described below.
Some of the research on this is described here .

Sorry, but this PR can't go forward. It assumes that all user who may require the nvidia driver would want to disable their intel iGPU, if it exists.
This is a non-starter for any hybrid laptop which primarily uses iGPU with an NVIDIA dGPU for 3D rendering. It would completely disable the display output.
I'm not sure if you are the original poster on the askubuntu thread, but in their case where they have a "RTX 3070TI and 12th Gen Intel® Core™ i9-12900K × 24"... I'd suggest disabling the iGPU in the system UEFI/BIOS settings.
This is how I've addressed odd problems with my iGPU and discrete AMD/NVIDIA GPUs on my desktop. Its unfortunately not a terribly uncommon problem.

Sorry, but this PR can't go forward. It assumes that all user who may require the nvidia driver would want to disable their intel iGPU, if it exists.
This is a non-starter for any hybrid laptop which primarily uses iGPU with an NVIDIA dGPU for 3D rendering. It would completely disable the display output.
I'm not sure if you are the original poster on the askubuntu thread, but in their case where they have a "RTX 3070TI and 12th Gen Intel® Core™ i9-12900K × 24"... I'd suggest disabling the iGPU in the system UEFI/BIOS settings.
This is how I've addressed odd problems with my iGPU and discrete AMD/NVIDIA GPUs on my desktop. Its unfortunately not a terribly uncommon problem.

Oh, thank you so much! Yes, i am original poster on the askubuntu.

@bsherman could i ask you few more questions?


Improve Clean Backup Logic

PPL tries to store a clean backup of assemblies it modifies and restores them before patching to avoid repeated file verification + downloading.  But as @18107 points out, this will fail subtlely and miserably in scenarios like official patches or plugin developers accidentally contaminating their DLLs before running PPL (thus contaminating the backup).
The backup logic needs to be improved to automatically delete the backup and start fresh after an official patch.  The file PULSARLostColony\PULSAR_LostColony_Data\level0 should change with every patch because that's the only place the game version is stored (it's not in the EXE or any DLL!).  By tracking the hash of this file, we can safely assume a patch has occurred and handle the backup accordingly.
Here is the proposed logic by @18107:
if (patchedVersion == null) patch;
else if (patchedVersion == currentVersion) restoreBackup; patch;
else if (currentVersion != patchedVersion) deletedBackup; patch;

patchedVersion refers to the version last patched by PPL, and should be a hash equivalent to that version's level0 file.  currentVersion is the hash of level0 as it is on disk during the check.  By storing patchedVersion hash in a file relative to the patched assembly, PPL can support multiple PULSAR installs in a transferable way.

Temporarily removed the old, faulty backup logic with c858ddf.  The above should still be implemented, perhaps with some caution if people start modifying the level0 file directly since it contains the main menu.


Precompiled lib, use webpack and update dependency versions

Some useful stuff in here, thought others might benefit from these changes.

using webpack instead of grunt and browserify
including babelfied lib
upgrading dependencies to work with react 15
upgrade to lodash 4.x

Addresses:

#23
#19
#21

Thanks very much for this! I am out of town for a week but will review this when I get back..

@scags9876 running webpack doesn't appear to create transpiled .js for distribution, which seems to be what #23 and #19 call for. Running webpack creates a bundle that includes the example application, but that isn't what we'd want to ship with npm publish.

@MandarinConLaBarba sorry for the late response, been a busy week.  I believe the command to use is npm run prepublish  I add a small section to the readme to explain the various npm commands.  😸

Great, thanks. I would think that the transpiled code would be included in the npm package, but not in source. Meaning, lib/*.js would be in .gitignore so that it would be kept out of the repository. Thoughts?

Ah yes, you are correct @MandarinConLaBarba .   I'm using it checked in so that I can import directly from github:
"react-tree-menu": "git://github.com/scags9876/react-tree-menu.git",

I can make this change... I might need to submit a new PR for it though since I'd like to do it in a branch of my fork so that I can continue to import my master until you merge this.

Ok, https://github.com/MandarinConLaBarba/react-tree-menu/pull/32 has been opened and replaces this PR